Name: series-workflowqbv6d Phase: Failed StartedAt: 2026-09-13 20:50:42 +0000 UTC FinishedAt: 2026-09-13 21:58:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbv6d[0] Phase: Succeeded StartedAt: 2026-09-13 20:50:42 +0000 UTC FinishedAt: 2026-09-13 21:58:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbv6d[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 20:50:42 +0000 UTC FinishedAt: 2026-09-13 21:58:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHNldHVwX3NobWVtX3dpbmRvdygpIGluIGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYywgd2hpY2ggaXMgYSBsZWdhY3kgUENNQ0lBIGV0aGVybmV0IGNhcmQgZHJpdmVyIChDT05GSUdfUENNQ0lBX1BDTkVUKS4gUENNQ0lBL0NhcmRCdXMgc29ja2V0IGNvbnRyb2xsZXJzIGFuZCBQQ01DSUEgY2FyZHMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODZfNjQgUUVNVSBvciBHQ0UgdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gbGF5ZXIgdG8gaW5zdGFudGlhdGUgUENNQ0lBIGRldmljZXMuIFRoZSBtb2RpZmllZCBwcm9iZSBwYXRoIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0OWYyZjc4ZmIyODRlMzA3YTc5YWJlZTRlY2I0ODFhMTgyMzRjMWU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMjE6NTc6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXG5pbmRleCAxOWY5YzVkYjNmM2JhLi4wY2YzYzBmM2NlZDdiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcbkBAIC0xNDM0LDE0ICYjNDM7MTQzNCwxNCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxuICAgICBvZmZzZXQgLT0gb2Zmc2V0ICUgd2luZG93X3NpemU7XG4gICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay1cdTAwM2VyZXNvdXJjZVszXSwgb2Zmc2V0KTtcbiAgICAgaWYgKHJldClcbi1cdCAgICBnb3RvIGZhaWxlZDtcbiYjNDM7XHQgICAgZ290byByZWxlYXNlO1xuIFxuICAgICAvKiBUcnkgc2NyaWJibGluZyBvbiB0aGUgYnVmZmVyICovXG4gICAgIGluZm8tXHUwMDNlYmFzZSA9IGlvcmVtYXAobGluay1cdTAwM2VyZXNvdXJjZVszXS1cdTAwM2VzdGFydCxcbiBcdFx0XHRyZXNvdXJjZV9zaXplKGxpbmstXHUwMDNlcmVzb3VyY2VbM10pKTtcbiAgICAgaWYgKHVubGlrZWx5KCFpbmZvLVx1MDAzZWJhc2UpKSB7XG4gXHQgICAgcmV0ID0gLUVOT01FTTtcbi1cdCAgICBnb3RvIGZhaWxlZDtcbiYjNDM7XHQgICAgZ290byByZWxlYXNlO1xuICAgICB9XG4gXG4gICAgIGZvciAoaSA9IDA7IGkgXHUwMDNjIChUWF9QQUdFU1x1MDAzY1x1MDAzYzgpOyBpICYjNDM7PSAyKVxuQEAgLTE0NTIsOSAmIzQzOzE0NTIsOCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxuICAgICBwY25ldF9yZXNldF84MzkwKGRldik7XG4gICAgIGlmIChpICE9IChUWF9QQUdFU1x1MDAzY1x1MDAzYzgpKSB7XG4gXHRpb3VubWFwKGluZm8tXHUwMDNlYmFzZSk7XG4tXHRwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay1cdTAwM2VyZXNvdXJjZVszXSk7XG4gXHRpbmZvLVx1MDAzZWJhc2UgPSBOVUxMO1xuLVx0Z290byBmYWlsZWQ7XG4mIzQzO1x0Z290byByZWxlYXNlO1xuICAgICB9XG4gXG4gICAgIGVpX3N0YXR1cy5tZW0gPSBpbmZvLVx1MDAzZWJhc2UgJiM0Mzsgb2Zmc2V0O1xuQEAgLTE0NzUsNiAmIzQzOzE0NzQsOCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxuICAgICBpbmZvLVx1MDAzZWZsYWdzIHw9IFVTRV9TSE1FTTtcbiAgICAgcmV0dXJuIDA7XG4gXG4mIzQzO3JlbGVhc2U6XG4mIzQzO1x0cGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstXHUwMDNlcmVzb3VyY2VbM10pO1xuIGZhaWxlZDpcbiAgICAgcmV0dXJuIDE7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVzb3VyY2UgbGVhayBpbiBzZXR1cF9zaG1lbV93aW5kb3coKSBpbiBkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMsIHdoaWNoIGlzIGEgbGVnYWN5IFBDTUNJQSBldGhlcm5ldCBjYXJkIGRyaXZlciAoQ09ORklHX1BDTUNJQV9QQ05FVCkuIFBDTUNJQS9DYXJkQnVzIHNvY2tldCBjb250cm9sbGVycyBhbmQgUENNQ0lBIGNhcmRzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgeDg2XzY0IFFFTVUgb3IgR0NFIHZpcnR1YWwgZW52aXJvbm1lbnRzLCBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGxheWVyIHRvIGluc3RhbnRpYXRlIFBDTUNJQSBkZXZpY2VzLiBUaGUgbW9kaWZpZWQgcHJvYmUgcGF0aCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDlmMmY3OGZiMjg0ZTMwN2E3OWFiZWU0ZWNiNDgxYTE4MjM0YzFlNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDIxOjU3OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jCmluZGV4IDE5ZjljNWRiM2YzYmEuLjBjZjNjMGYzY2VkN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMKQEAgLTE0MzQsMTQgJiM0MzsxNDM0LDE0IEBAIHN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsCiAgICAgb2Zmc2V0IC09IG9mZnNldCAlIHdpbmRvd19zaXplOwogICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay0mZ3Q7cmVzb3VyY2VbM10sIG9mZnNldCk7CiAgICAgaWYgKHJldCkKLQkgICAgZ290byBmYWlsZWQ7CiYjNDM7CSAgICBnb3RvIHJlbGVhc2U7CiAKICAgICAvKiBUcnkgc2NyaWJibGluZyBvbiB0aGUgYnVmZmVyICovCiAgICAgaW5mby0mZ3Q7YmFzZSA9IGlvcmVtYXAobGluay0mZ3Q7cmVzb3VyY2VbM10tJmd0O3N0YXJ0LAogCQkJcmVzb3VyY2Vfc2l6ZShsaW5rLSZndDtyZXNvdXJjZVszXSkpOwogICAgIGlmICh1bmxpa2VseSghaW5mby0mZ3Q7YmFzZSkpIHsKIAkgICAgcmV0ID0gLUVOT01FTTsKLQkgICAgZ290byBmYWlsZWQ7CiYjNDM7CSAgICBnb3RvIHJlbGVhc2U7CiAgICAgfQogCiAgICAgZm9yIChpID0gMDsgaSAmbHQ7IChUWF9QQUdFUyZsdDsmbHQ7OCk7IGkgJiM0Mzs9IDIpCkBAIC0xNDUyLDkgJiM0MzsxNDUyLDggQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZywKICAgICBwY25ldF9yZXNldF84MzkwKGRldik7CiAgICAgaWYgKGkgIT0gKFRYX1BBR0VTJmx0OyZsdDs4KSkgewogCWlvdW5tYXAoaW5mby0mZ3Q7YmFzZSk7Ci0JcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstJmd0O3Jlc291cmNlWzNdKTsKIAlpbmZvLSZndDtiYXNlID0gTlVMTDsKLQlnb3RvIGZhaWxlZDsKJiM0MzsJZ290byByZWxlYXNlOwogICAgIH0KIAogICAgIGVpX3N0YXR1cy5tZW0gPSBpbmZvLSZndDtiYXNlICYjNDM7IG9mZnNldDsKQEAgLTE0NzUsNiAmIzQzOzE0NzQsOCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLAogICAgIGluZm8tJmd0O2ZsYWdzIHw9IFVTRV9TSE1FTTsKICAgICByZXR1cm4gMDsKIAomIzQzO3JlbGVhc2U6CiYjNDM7CXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBsaW5rLSZndDtyZXNvdXJjZVszXSk7CiBmYWlsZWQ6CiAgICAgcmV0dXJuIDE7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgRnV6emluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gZnV6emluZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLiBUaGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGlzIGZpbGUgYWN0dWFsbHkgaXMsIHNvIEkmIzM5O2xsIHB1bGwgdXAgdGhlIGNvbnRleHQuIEFoYSEgSXQmIzM5O3MgdGhlIFBDTUNJQSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYHBjbmV0X2NzYCBkcml2ZXIsIGRlc2lnbmVkIGZvciBOUzgzOTAtYmFzZWQgUENNQ0lBIGV0aGVybmV0IGNhcmRzLgoKTm93IHRoYXQgSSBoYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBkZXZpY2UgYW5kIGRyaXZlciwgSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHJlYWQgdGhyb3VnaCB0aGUgYHBjbmV0X2NzLmNgIGZpbGUgaXRzZWxmLCBhbmQgSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGNyb3NzLXJlZmVyZW5jZSBpdCB3aXRoIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlIHRvIHRoZSBsZXZlbCBvZiBkZXRhaWwgbmVjZXNzYXJ5IHRvIGp1ZGdlIGhvdyBlZmZlY3RpdmUgdGhlIHBhdGNoIHdvdWxkIGJlIGZvciBmdXp6aW5nLCBhbmQgaWYgdGhlIHBhdGNoIGlzIHZ1bG5lcmFibGUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjbmV0X2NzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWc9MTM0PWNvbmZpZyBQQ01DSUFfUENORVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWctMTQyLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZzoxNDM6XHQgIGNhbGxlZCBwY25ldF9jcy4gIElmIHVuc3VyZSwgc2F5IE4uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWctMTQ0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX05FMktfUENJKSAmIzQzOz0gbmUyay1wY2kubyA4MzkwLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX1BDTUNJQV9QQ05FVCkgJiM0Mzs9IHBjbmV0X2NzLm8gODM5MC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL01ha2VmaWxlLTE1LW9iai0kKENPTkZJR19TVE5JQykgJiM0Mzs9IHN0bmljLm8gODM5MC5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTE0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjE1OiAgICBwY25ldF9jcy5jIDEuMTUzIDIwMDMvMTEvMDkgMTg6NTM6MDlcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0xNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9MTcwOT1zdGF0aWMgc3RydWN0IHBjbWNpYV9kcml2ZXIgcGNuZXRfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjE3MTA6XHQubmFtZVx0XHQ9IFwmIzM0O3BjbmV0X2NzXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTE3MTEtXHQucHJvYmVcdFx0PSBwY25ldF9wcm9iZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDg0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKktjb25maWcgRGl2ZSBmb3IgUENNQ0lBX1BDTkVUKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29uZmlndXJhdGlvbiBzdGF0dXMgcmVsYXRlZCB0byBgUENNQ0lBX1BDTkVUYCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbS4gTXkgbWVudGFsIGNoZWNrbGlzdCBraWNrcyBpbjogSSB3YW50IHRvIGtub3cgaWYgaXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIGEgbW9kdWxlLCBvciBjb25kaXRpb25hbC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIGZpbGUgdG8gY2hlY2sgYW5kIGhvdyB0byBuYXZpZ2F0ZSBhcm91bmQgaXQgdG8gZ2V0IGEgcXVpY2sgc3VtbWFyeS4gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFxuIDEzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTMyOlx0XHQgIHdpbGwgYmUgY2FsbGVkIGFwbmUuXG4gMTMzOlx0XG4gMTM0Olx0Y29uZmlnIFBDTUNJQV9QQ05FVFxuIDEzNTpcdFx0dHJpc3RhdGUgXCYjMzQ7TkUyMDAwIGNvbXBhdGlibGUgUENNQ0lBIHN1cHBvcnRcJiMzNDtcbiAxMzY6XHRcdGRlcGVuZHMgb24gUENNQ0lBIFx1MDAyNlx1MDAyNiBIQVNfSU9QT1JUXG4gMTM3Olx0XHRzZWxlY3QgQ1JDMzJcbiAxMzg6XHRcdGhlbHBcbiAxMzk6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIGF0dGFjaCBhbiBORTIwMDAgY29tcGF0aWJsZSBQQ01DSUFcbiAxNDA6XHRcdCAgKFBDLWNhcmQpIEV0aGVybmV0IG9yIEZhc3QgRXRoZXJuZXQgY2FyZCB0byB5b3VyIGNvbXB1dGVyLlxuIDE0MTpcdFxuIDE0MjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAxNDM6XHRcdCAgY2FsbGVkIHBjbmV0X2NzLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNDQ6XHRcbiAxNDU6XHRjb25maWcgU1ROSUNcbiAxNDY6XHRcdHRyaXN0YXRlIFwmIzM0O05hdGlvbmFsIERQODM5MDJBViAgc3VwcG9ydFwmIzM0O1xuIDE0NzpcdFx0ZGVwZW5kcyBvbiBTVVBFUkhcbiAxNDg6XHRcdHNlbGVjdCBDUkMzMlxuIDE0OTpcdFx0aGVscFxuIDE1MDpcdFx0ICBTdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBEUDgzOTAyQVZcbiAxNTE6XHRcdCAgU1QtTklDIFNlcmlhbCBOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyIGZvciBUd2lzdGVkIFBhaXIuICBUaGlzXG4gMTUyOlx0XHQgIGlzIGEgMTBNYml0L3NlYyBFdGhlcm5ldCBjb250cm9sbGVyLiAgUHJvZHVjdCBvdmVydmlldyBhbmQgc3BlY3MgYXRcbiAxNTM6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvRFAvRFA4MzkwMkEuaHRtbFx1MDAzZS5cbiAxNTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njc5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFBDTUNJQSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBQQ01DSUEgcmFiYml0IGhvbGUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBQQ01DSUEgZGV2aWNlcyBhcmUgZXZlbiBhIHZpYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcgb3IgZW11bGF0aW9uIHdpdGhpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gSG9sZCBvbiwgY2FuIFFFTVUgZXZlbiAqZG8qIFBDTUNJQSBlbXVsYXRpb24/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuCgpXYWl0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiwgd2hhdCBhYm91dCBQQ01DSUEgZGV2aWNlcyBpbiBzeXprYWxsZXI/IEFyZSB0aGV5IGV2ZW4gcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgY29udGV4dD8gV2hhdCB1bmRlcmx5aW5nIGJ1cyBpcyBQQ01DSUEgdXNpbmcsIGFueXdheT8gSW4gc3RhbmRhcmQgeDg2L2FtZDY0IFFFTVUsIFBDTUNJQSBpc24mIzM5O3QgYSAqc3RhbmRhcmQqIHZpcnR1YWwgYnVzLCBpcyBpdD8gT3IgbWF5YmUgaXQgKmlzKj8gSSBoYXZlIHRvIGJlIHN1cmUuCgpBaGEsIFFFTVUmIzM5O3MgZG9jdW1lbnRhdGlvbiBzaG91bGQgaGF2ZSBhbnN3ZXJzLiBEb2VzIFFFTVUgaGF2ZSBQQ01DSUEgZW11bGF0aW9uIGF0IGFsbD8gV2FpdCwgaXQgbG9va3MgbGlrZSBRRU1VICpkb2VzKiBoYXZlIHNvbWUgUENNQ0lBIHN1cHBvcnQgcmVsYXRlZCB0byBweGEyeHgsIGJ1dCBpcyB0aGF0IHJlbGV2YW50IG9uIGFtZDY0PyBUaGlzIHNlZW1zIHNwZWNpZmljIHRvIEFSTSBhcmNoaXRlY3R1cmUuCgpSaWdodCwgbm93LCBJIHNob3VsZCBmb2N1cy4gSSBuZWVkIHRvIGNoZWNrIHN5emthbGxlciYjMzk7cyBzeXpsYW5nIGRlc2NyaXB0aW9ucywgdGhlIGdpdCBjb21taXQgaGlzdG9yeSwgb3IgUUVNVSYjMzk7cyBtb2RlbHMgdG8gZmluZCB0aGUgcmlnaHQgaW5mb3JtYXRpb24uCgpBIGtleSBxdWVzdGlvbjogY2FuIHVzZXIgc3BhY2UgZXZlbiBpbnN0YW50aWF0ZSBhIFBDTUNJQSBkZXZpY2U/IEkgaGF2ZSB0byBleHBsb3JlIHdoZXRoZXIgdGhlcmUmIzM5O3MgYW55IHNvcnQgb2Ygc29mdHdhcmUgZW11bGF0aW9uLCBwZXJoYXBzIGEgZHVtbXkgUENNQ0lBIGRyaXZlciB0aGF0IGNvdWxkIHNpbXBsaWZ5IHRoaW5ncywgb3IgZG9lcyBpdCAqcmVxdWlyZSogYSBwaHlzaWNhbCBQQ01DSUEgLyBDYXJkQnVzIGNvbnRyb2xsZXIgLyBzb2NrZXQ/IEkgaGF2ZSB0byBjb25zaWRlciBhbGwgYW5nbGVzLgoKRmluYWxseSwgSSBuZWVkIHRvIHNlYXJjaCB0aGUga2VybmVsIGZvciBQQ01DSUEtcmVsYXRlZCBjb2RlIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgaW5kaWNhdGlvbiBvZiBhIHZpcnR1YWwgUENNQ0lBIGhvc3QgY29udHJvbGxlci4gVGhhdCBtaWdodCBiZSB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjbWNpYV9yZWdpc3Rlcl9zb2NrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjbWNpYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjbWNpYS9iY202M3h4X3BjbWNpYS5jPTMyNj1zdGF0aWMgaW50IGJjbTYzeHhfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvcGNtY2lhL2JjbTYzeHhfcGNtY2lhLmMtNDE3LVxuZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYzo0MTg6XHRyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KHNvY2spO1xuZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYy00MTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvcGNtY2lhL2NzLmM9OTc9c3RhdGljIGludCBwY2NhcmRkKHZvaWQgKl9fc2t0KTtcbi0tXG5kcml2ZXJzL3BjbWNpYS9jcy5jLTk5LS8qKlxuZHJpdmVycy9wY21jaWEvY3MuYzoxMDA6ICogcGNtY2lhX3JlZ2lzdGVyX3NvY2tldCAtIGFkZCBhIG5ldyBwY21jaWEgc29ja2V0IGRldmljZVxuZHJpdmVycy9wY21jaWEvY3MuYy0xMDEtICogQHNvY2tldDogdGhlIFx1MDAyNnNvY2tldCB0byByZWdpc3RlclxuZHJpdmVycy9wY21jaWEvY3MuYy0xMDItICovXG5kcml2ZXJzL3BjbWNpYS9jcy5jOjEwMzppbnQgcGNtY2lhX3JlZ2lzdGVyX3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0KVxuZHJpdmVycy9wY21jaWEvY3MuYy0xMDQte1xuLS1cbmRyaXZlcnMvcGNtY2lhL2NzLmMtMTEwLVxuZHJpdmVycy9wY21jaWEvY3MuYzoxMTE6XHRkZXZfZGJnKFx1MDAyNnNvY2tldC1cdTAwM2VkZXYsIFwmIzM0O3BjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoMHglcClcXG5cJiMzNDssIHNvY2tldC1cdTAwM2VvcHMpO1xuZHJpdmVycy9wY21jaWEvY3MuYy0xMTItXG4tLVxuZHJpdmVycy9wY21jaWEvY3MuYy0xOTctXHRyZXR1cm4gcmV0O1xuZHJpdmVycy9wY21jaWEvY3MuYzoxOTg6fSAvKiBwY21jaWFfcmVnaXN0ZXJfc29ja2V0ICovXG5kcml2ZXJzL3BjbWNpYS9jcy5jOjE5OTpFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQpO1xuZHJpdmVycy9wY21jaWEvY3MuYy0yMDAtXG4tLVxuZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmM9NDI0PXN0YXRpYyBpbnQgZGIxeF9wY21jaWFfc29ja2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmMtNTU2LVxuZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmM6NTU3Olx0cmV0ID0gcGNtY2lhX3JlZ2lzdGVyX3NvY2tldChcdTAwMjZzb2NrLVx1MDAzZXNvY2tldCk7XG5kcml2ZXJzL3BjbWNpYS9kYjF4eHhfc3MuYy01NTgtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jPTE3NT1zdGF0aWMgaW50IGVsZWN0cmFfY2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jLTI3Ni1cbmRyaXZlcnMvcGNtY2lhL2VsZWN0cmFfY2YuYzoyNzc6XHRzdGF0dXMgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFx1MDAyNmNmLVx1MDAzZXNvY2tldCk7XG5kcml2ZXJzL3BjbWNpYS9lbGVjdHJhX2NmLmMtMjc4LVx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jOjI3OTpcdFx0ZGV2X2VycihkZXZpY2UsIFwmIzM0O3BjbWNpYV9yZWdpc3Rlcl9zb2NrZXQgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvcGNtY2lhL2VsZWN0cmFfY2YuYy0yODAtXHRcdGdvdG8gZmFpbDM7XG4tLVxuZHJpdmVycy9wY21jaWEvb21hcF9jZi5jPTE5OT1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2NmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9wY21jaWEvb21hcF9jZi5jLTI3Ny1cbmRyaXZlcnMvcGNtY2lhL29tYXBfY2YuYzoyNzg6XHRzdGF0dXMgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFx1MDAyNmNmLVx1MDAzZXNvY2tldCk7XG5kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMtMjc5LVx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYz02MjQ9c3RhdGljIGludCBwZDY3MjlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4tLVxuZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMtNzE0LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX1NPQ0tFVFM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYzo3MTU6XHRcdHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoXHUwMDI2c29ja2V0W2ldLnNvY2tldCk7XG5kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYy03MTYtXHRcdGlmIChyZXQpIHtcbmRyaXZlcnMvcGNtY2lhL3BkNjcyOS5jOjcxNzpcdFx0XHRkZXZfd2FybihcdTAwMjZkZXYtXHUwMDNlZGV2LCBcJiMzNDtwY21jaWFfcmVnaXN0ZXJfc29ja2V0IGZhaWxlZC5cXG5cJiMzNDspO1xuZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMtNzE4LVx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGkgOyBqJiM0MzsmIzQzOylcbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmM9NzkyPWludCBzb2NfcGNtY2lhX2FkZF9vbmUoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpXG4tLVxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jLTg1Ni1cbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYzo4NTc6XHRyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFx1MDAyNnNrdC1cdTAwM2Vzb2NrZXQpO1xuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jLTg1OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jPTIwOT1zdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jLTI4NC1cbmRyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYzoyODU6XHRyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFx1MDAyNnNvY2stXHUwMDNlc29ja2V0KTtcbmRyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYy0yODYtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmM9MTE1OD1zdGF0aWMgaW50IHllbnRhX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYy0xMjY5LVx0LyogUmVnaXN0ZXIgaXQgd2l0aCB0aGUgcGNtY2lhIGxheWVyLi4gKi9cbmRyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jOjEyNzA6XHRyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFx1MDAyNnNvY2tldC1cdTAwM2Vzb2NrZXQpO1xuZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMtMTI3MS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBRRU1VIFBDTUNJQSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBkcml2ZXIgZmlsZXMg4oCTIGB5ZW50YV9zb2NrZXQuY2AsIGBwZDY3MjkuY2AsIGBpODIzNjUuY2AuLi4gSW1tZWRpYXRlbHksIG15IGJyYWluIGtpY2tzIGludG8gZ2VhcjogKkFyZSBhbnkgb2YgdGhlc2UgUENNQ0lBIGNvbnRyb2xsZXJzIGFjdHVhbGx5IGVtdWxhdGVkIHdpdGhpbiBRRU1VPyogSSBuZWVkIHRvIHZlcmlmeSB3aGF0IFFFTVUgYWN0dWFsbHkgKmRvZXMqIHN1cHBvcnQuCgpIb2xkIG9uIGEgc2Vjb25kLCBhIGNydWNpYWwgZGlzdGluY3Rpb246ICpEb2VzIFFFTVUgbW9kZWwgQ2FyZEJ1cyBvciBqdXN0IHBsYWluIFBDTUNJQT8qIFRoaXMgaXMga2V5LiBEaWdnaW5nIGRlZXBlciBpbnRvIG15IGtub3dsZWRnZSBvZiBRRU1VJiMzOTtzIGFyY2hpdGVjdHVyZSwgSSBzZWVtIHRvIHJlY2FsbCB0aGF0IFBDTUNJQSBzdXBwb3J0ICpkb2VzKiBleGlzdCwgYnV0IGl0JiMzOTtzIGxhcmdlbHkgY29uZmluZWQgdG8gdGhlIGBweGEyeHhgIGFuZCBvdGhlciBlbWJlZGRlZCBBUk0gbWFjaGluZSBtb2RlbHMsIGFuZCBldmVuIHRoZW4gaXQgd2FzIHByaW1hcmlseSBnZWFyZWQgdG93YXJkcyBlbXVsYXRpbmcgdGhpbmdzIGxpa2UgbWljcm9kcml2ZXMgb3IgQ29tcGFjdEZsYXNoLgoKVGhhdCYjMzk7cyB3aGVuIGl0IGhpdHMgbWU6ICpPbiBhIHN0YW5kYXJkIHg4NiBvciBhbWQ2NCBhcmNoaXRlY3R1cmUsIHVzaW5nIHRoZSBjb21tb24gaTQ0MGZ4IG9yIHEzNSBjaGlwc2V0cywgdGhlcmUmIzM5O3MgYWN0dWFsbHkgTk8gQ2FyZEJ1cy9QQ01DSUEgYnJpZGdlIG9yIGNvbnRyb2xsZXIgcmVwcmVzZW50ZWQhKiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZ2FwIGluIHRoZSBlbXVsYXRlZCBoYXJkd2FyZS4KClNvLCB3aGVyZSBkb2VzIHRoYXQgbGVhdmUgbWU/IEkmIzM5O20gbm93IHF1ZXN0aW9uaW5nIHdoZXRoZXIgTGludXggaXRzZWxmIGV2ZW4gKmhhcyogYW55IHZpcnR1YWwgUENNQ0lBIHNvY2tldCBhYnN0cmFjdGlvbiBsYXllci4gTXkgbmV4dCBzdGVwOiBJJiMzOTtsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ug4oCTIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgYGRyaXZlcnMvcGNtY2lhL2AgZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwgdHJlZS4gVGhhdCB3aWxsIGxpa2VseSBnaXZlIG1lIHRoZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNtY2lhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YmNtNjN4eF9wY21jaWEuYyYjMzQ7LAogICAgJiMzNDtiY202M3h4X3BjbWNpYS5oJiMzNDssCiAgICAmIzM0O2NhcmRidXMuYyYjMzQ7LAogICAgJiMzNDtjaXJydXMuaCYjMzQ7LAogICAgJiMzNDtjaXN0cGwuYyYjMzQ7LAogICAgJiMzNDtjcy5jJiMzNDssCiAgICAmIzM0O2NzX2ludGVybmFsLmgmIzM0OywKICAgICYjMzQ7ZGIxeHh4X3NzLmMmIzM0OywKICAgICYjMzQ7ZHMuYyYjMzQ7LAogICAgJiMzNDtlbGVjdHJhX2NmLmMmIzM0OywKICAgICYjMzQ7aTgyMzY1LmgmIzM0OywKICAgICYjMzQ7bWF4MTYwMC5jJiMzNDssCiAgICAmIzM0O21heDE2MDAuaCYjMzQ7LAogICAgJiMzNDtvMm1pY3JvLmgmIzM0OywKICAgICYjMzQ7b21hcF9jZi5jJiMzNDssCiAgICAmIzM0O3BjbWNpYV9jaXMuYyYjMzQ7LAogICAgJiMzNDtwY21jaWFfcmVzb3VyY2UuYyYjMzQ7LAogICAgJiMzNDtwZDY3MjkuYyYjMzQ7LAogICAgJiMzNDtwZDY3MjkuaCYjMzQ7LAogICAgJiMzNDtweGEyeHhfYmFzZS5jJiMzNDssCiAgICAmIzM0O3B4YTJ4eF9iYXNlLmgmIzM0OywKICAgICYjMzQ7cHhhMnh4X3NoYXJwc2wuYyYjMzQ7LAogICAgJiMzNDtyaWNvaC5oJiMzNDssCiAgICAmIzM0O3JzcmNfbWdyLmMmIzM0OywKICAgICYjMzQ7cnNyY19ub25zdGF0aWMuYyYjMzQ7LAogICAgJiMzNDtzYTExMDBfZ2VuZXJpYy5jJiMzNDssCiAgICAmIzM0O3NhMTEwMF9nZW5lcmljLmgmIzM0OywKICAgICYjMzQ7c2ExMTAwX2gzNjAwLmMmIzM0OywKICAgICYjMzQ7c2ExMTExX2dlbmVyaWMuYyYjMzQ7LAogICAgJiMzNDtzYTExMTFfZ2VuZXJpYy5oJiMzNDssCiAgICAmIzM0O3NhMTExMV9qb3JuYWRhNzIwLmMmIzM0OywKICAgICYjMzQ7c2ExMTExX25lcG9uc2V0LmMmIzM0OywKICAgICYjMzQ7c2ExMXh4X2Jhc2UuYyYjMzQ7LAogICAgJiMzNDtzYTExeHhfYmFzZS5oJiMzNDssCiAgICAmIzM0O3NvY19jb21tb24uYyYjMzQ7LAogICAgJiMzNDtzb2NfY29tbW9uLmgmIzM0OywKICAgICYjMzQ7c29ja2V0X3N5c2ZzLmMmIzM0OywKICAgICYjMzQ7dGkxMTN4LmgmIzM0OywKICAgICYjMzQ7dG9waWMuaCYjMzQ7LAogICAgJiMzNDt2ZzQ2OC5oJiMzNDssCiAgICAmIzM0O3h4czE1MDBfc3MuYyYjMzQ7LAogICAgJiMzNDt5ZW50YV9zb2NrZXQuYyYjMzQ7LAogICAgJiMzNDt5ZW50YV9zb2NrZXQuaCYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NDMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgeWVudGFfc29ja2V0YCBFbXVsYXRpb24gaW4gUUVNVS9HQ0UqKgoKT2theSwgc28gYHllbnRhX3NvY2tldGAuLi4gdGhhdCYjMzk7cyBQQ0kgQ2FyZEJ1cywgcmlnaHQ/IFJpZ2h0LiBOb3csIHRoZSBxdWVzdGlvbiBpcywgaG93IGlzIHRoaXMgaGFuZGxlZCBpbiBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8gU3BlY2lmaWNhbGx5LCBhcmUgd2UgdGFsa2luZyBhYm91dCB0aGUgZW11bGF0aW9uIG9mIHNvbWV0aGluZyBsaWtlIGEgVGV4YXMgSW5zdHJ1bWVudHMgQ2FyZEJ1cyBjb250cm9sbGVyPyBLbm93aW5nIFFFTVUsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIGFuc3dlci4gQW5kLCB5ZWFoLCBhcyBJIHN1c3BlY3RlZCwgdmFuaWxsYSBRRU1VIGRvZXNuJiMzOTt0IGhhdmUgYSBkZWRpY2F0ZWQgQ2FyZEJ1cyBvciBQQ01DSUEgUENJIGRldmljZSBtb2RlbC4gVGhhdCYjMzk7cyBub3QgZW50aXJlbHkgc3VycHJpc2luZy4KCkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIENvdWxkIHRoZXJlIGJlIGEgd29ya2Fyb3VuZD8gUGVyaGFwcyBzb21lIG1ldGhvZCB0byBpbnN0YW50aWF0ZSBhIFBDTUNJQSBkZXZpY2UgdGhyb3VnaCBzeXNmcywgb3IgYSBtb2NraW5nIG1lY2hhbmlzbSwgb3IuLi4gc29tZXRoaW5nIGxpa2UgdGhhdD8gSXQmIzM5O3Mgd29ydGggZGlnZ2luZyBhIGJpdCBkZWVwZXIuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIGlmIGBzb2NrZXRfc3lzZnMuY2Agb3IgYGRzLmNgIHNoZWQgYW55IGxpZ2h0IG9uIHRoaXMuIE1heWJlIHRoZXJlJiMzOTtzIGEgaGlkZGVuIHRyaWNrIEkmIzM5O3ZlIG1pc3NlZC4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRob3NlIGZpbGVzIGNhcmVmdWxseSB0byBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNtY2lhX2J1c190eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY21jaWEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaD0xMjg9dm9pZCBwY21jaWFfcHV0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTtcbi0tXG5kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oLTEzMy0vKiBkcy5jICovXG5kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oOjEzNDpleHRlcm4gY29uc3Qgc3RydWN0IGJ1c190eXBlIHBjbWNpYV9idXNfdHlwZTtcbmRyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgtMTM1LVxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmM9MTY5PWludCBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY21jaWFfZHJpdmVyICpkcml2ZXIpXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYy0xNzgtXHQvKiBpbml0aWFsaXplIGNvbW1vbiBmaWVsZHMgKi9cbmRyaXZlcnMvcGNtY2lhL2RzLmM6MTc5Olx0ZHJpdmVyLVx1MDAzZWRydi5idXMgPSBcdTAwMjZwY21jaWFfYnVzX3R5cGU7XG5kcml2ZXJzL3BjbWNpYS9kcy5jLTE4MC1cdGRyaXZlci1cdTAwM2VkcnYub3duZXIgPSBkcml2ZXItXHUwMDNlb3duZXI7XG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYz00Nzk9c3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfZGV2aWNlX2FkZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyxcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTUwOS1cbmRyaXZlcnMvcGNtY2lhL2RzLmM6NTEwOlx0cF9kZXYtXHUwMDNlZGV2LmJ1cyA9IFx1MDAyNnBjbWNpYV9idXNfdHlwZTtcbmRyaXZlcnMvcGNtY2lhL2RzLmMtNTExLVx0cF9kZXYtXHUwMDNlZGV2LnBhcmVudCA9IHMtXHUwMDNlZGV2LnBhcmVudDtcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTY3NT1zdGF0aWMgdm9pZCBwY21jaWFfcmVxdWVyeShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcylcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTY4OS1cdCAqIGRldGVybWluZSBpdCBhZ2Fpbiwgb3ZlcndyaXRpbmcgb2xkIHZhbHVlcyBpZiBuZWNlc3NhcnkuICovXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjY5MDpcdGJ1c19mb3JfZWFjaF9kZXYoXHUwMDI2cGNtY2lhX2J1c190eXBlLCBOVUxMLCBOVUxMLCBwY21jaWFfcmVxdWVyeV9jYWxsYmFjayk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jLTY5MS1cbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTcyNC1cdCAqIHNvY2tldC4gVGhpcyBkb2VzIG5vdCBtYXR0ZXIsIHRob3VnaC4gKi9cbmRyaXZlcnMvcGNtY2lhL2RzLmM6NzI1Olx0aWYgKGJ1c19yZXNjYW5fZGV2aWNlcyhcdTAwMjZwY21jaWFfYnVzX3R5cGUpKVxuZHJpdmVycy9wY21jaWEvZHMuYy03MjYtXHRcdGRldl93YXJuKFx1MDAyNnMtXHUwMDNlZGV2LCBcJiMzNDtyZXNjYW5uaW5nIHRoZSBidXMgZmFpbGVkXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTEyMzg9c3RhdGljIGludCBwY21jaWFfYnVzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KVxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTI0MC1cdGRldl9kYmcoXHUwMDI2c2t0LVx1MDAzZWRldiwgXCYjMzQ7cmVzdW1pbmcgc29ja2V0ICVkXFxuXCYjMzQ7LCBza3QtXHUwMDNlc29jayk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEyNDE6XHRidXNfZm9yX2VhY2hfZGV2KFx1MDAyNnBjbWNpYV9idXNfdHlwZSwgTlVMTCwgc2t0LCBwY21jaWFfYnVzX3Jlc3VtZV9jYWxsYmFjayk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEyNDItXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTEyNDU9c3RhdGljIGludCBwY21jaWFfYnVzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdClcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEyNDctXHRkZXZfZGJnKFx1MDAyNnNrdC1cdTAwM2VkZXYsIFwmIzM0O3N1c3BlbmRpbmcgc29ja2V0ICVkXFxuXCYjMzQ7LCBza3QtXHUwMDNlc29jayk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEyNDg6XHRpZiAoYnVzX2Zvcl9lYWNoX2RldihcdTAwMjZwY21jaWFfYnVzX3R5cGUsIE5VTEwsIHNrdCxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTI0OS1cdFx0XHQgICAgIHBjbWNpYV9idXNfc3VzcGVuZF9jYWxsYmFjaykpIHtcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTE0MDU9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHBjbWNpYV9idXNfcG1fb3BzID0ge1xuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQwOC1cbmRyaXZlcnMvcGNtY2lhL2RzLmM6MTQwOTpjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgcGNtY2lhX2J1c190eXBlID0ge1xuZHJpdmVycy9wY21jaWEvZHMuYy0xNDEwLVx0Lm5hbWUgPSBcJiMzNDtwY21jaWFcJiMzNDssXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYz0xNDIwPXN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNtY2lhX2J1cyh2b2lkKVxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQyMy1cbmRyaXZlcnMvcGNtY2lhL2RzLmM6MTQyNDpcdHJldCA9IGJ1c19yZWdpc3RlcihcdTAwMjZwY21jaWFfYnVzX3R5cGUpO1xuZHJpdmVycy9wY21jaWEvZHMuYy0xNDI1LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQzMi1cdFx0XHRcJiMzNDtwY21jaWE6IGNsYXNzX2ludGVyZmFjZV9yZWdpc3RlciBlcnJvcjogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jOjE0MzM6XHRcdGJ1c191bnJlZ2lzdGVyKFx1MDAyNnBjbWNpYV9idXNfdHlwZSk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jLTE0MzQtXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYz0xNDQzPXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3BjbWNpYV9idXModm9pZClcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTE0NDYtXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjE0NDc6XHRidXNfdW5yZWdpc3RlcihcdTAwMjZwY21jaWFfYnVzX3R5cGUpO1xuZHJpdmVycy9wY21jaWEvZHMuYy0xNDQ4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMyMwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byB0aGUgUENuZXRfQ1MgRHJpdmVyIGFuZCBTaGFyZWQgTWVtb3J5IFNldHVwKioKCk9rYXksIGJlZm9yZSBJIHByb2NlZWQgZnVydGhlciwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGBwY25ldF9jc2AgZHJpdmVyJiMzOTtzIGlubmVyIHdvcmtpbmdzLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGBzZXR1cF9zaG1lbV93aW5kb3dgLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHNoYXJlZCBtZW1vcnkuIFNvLCBJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgYHBjbmV0X2NzYCBkcml2ZXIg4oCTIHNwZWNpZmljYWxseSwgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBncmFzcCBvbiBwcmVjaXNlbHkgKmhvdyogYW5kICp3aGVyZSogYHNldHVwX3NobWVtX3dpbmRvd2AgaXMgaW52b2tlZCB3aXRoaW4gdGhlIGRyaXZlciYjMzk7cyBleGVjdXRpb24gZmxvdy4gVGhpcyB3aWxsIGJlIHRoZSBmaXJzdCBhbmQgbW9zdCBpbXBvcnRhbnQgc3RlcCB0byBmaW5kaW5nIHRoZSBhbnN3ZXIgSSBzZWVrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXR1cF9zaG1lbV93aW5kb3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jPTEwMj1zdGF0aWMgaW50IHNldF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjEwMzpzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTEwNC1cdFx0XHQgICAgICBpbnQgc3RvcF9wZywgaW50IGNtX29mZnNldCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jPTU2NT1zdGF0aWMgaW50IHBjbmV0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMtNjA5LSAgICBpZiAoKHVzZV9zaG1lbSA9PSAwKSB8fCAoIWhhc19zaG1lbSBcdTAwMjZcdTAwMjYgKHVzZV9zaG1lbSA9PSAtMSkpIHx8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6NjEwOlx0KHNldHVwX3NobWVtX3dpbmRvdyhsaW5rLCBzdGFydF9wZywgc3RvcF9wZywgY21fb2Zmc2V0KSAhPSAwKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy02MTEtXHRzZXR1cF9kbWFfY29uZmlnKGxpbmssIHN0YXJ0X3BnLCBzdG9wX3BnKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9MTQwMT1zdGF0aWMgdm9pZCBzaG1lbV9ibG9ja19vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0xNDEwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjE0MTE6c3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0xNDEyLVx0XHRcdCAgICAgIGludCBzdG9wX3BnLCBpbnQgY21fb2Zmc2V0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA3OAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCB0aHJvdWdoOgoKKipBbmFseXppbmcgdGhlIGBwY25ldF9jb25maWdgIFNlY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHBjbmV0X2NvbmZpZ2Agc2VjdGlvbiwgc3BlY2lmaWNhbGx5IGxpbmVzIDU2NSB0aHJvdWdoIDYyMC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGFyZWEgYmVjYXVzZSBpdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgUENuZXQgZHJpdmVyIGFyZSBkZWZpbmVkLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB3aGVyZSB0aGUgZGV2aWNlIGdldHMgaXRzIGluaXRpYWwgc2V0dGluZ3MsIHJpZ2h0PyBJJiMzOTttIGFudGljaXBhdGluZyB3ZSYjMzk7bGwgZmluZCB0aGluZ3MgbGlrZSB0aGUgYmFzZSBJL08gYWRkcmVzcywgdGhlIGludGVycnVwdCB2ZWN0b3IsIG1heWJlIHNvbWUgaW5pdGlhbCBidWZmZXIgc2l6ZXMsIGFuZCBkZWZpbml0ZWx5IGhvdyBpdCBoYW5kbGVzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IERNQSB1c2FnZSwgc2hhcmVkIG1lbW9yeSBtYXBwaW5nIOKAkyBhbnl0aGluZyByZWxhdGVkIHRvIGhvdyB0aGUgUENuZXQgYWN0dWFsbHkgdGFsa3MgdG8gdGhlIGhhcmR3YXJlIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gTGV0IG1lIGNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIG9uIHRoaXMgY2FyZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTY1Olx0c3RhdGljIGludCBwY25ldF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspXG4gNTY2Olx0e1xuIDU2NzpcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay1cdTAwM2Vwcml2O1xuIDU2ODpcdCAgICBzdHJ1Y3QgcGNuZXRfZGV2ICppbmZvID0gUFJJVihkZXYpO1xuIDU2OTpcdCAgICBpbnQgc3RhcnRfcGcsIHN0b3BfcGcsIGNtX29mZnNldDtcbiA1NzA6XHQgICAgaW50IGhhc19zaG1lbSA9IDA7XG4gNTcxOlx0ICAgIHN0cnVjdCBod19pbmZvICpsb2NhbF9od19pbmZvO1xuIDU3MjpcdFxuIDU3MzpcdCAgICBkZXZfZGJnKFx1MDAyNmxpbmstXHUwMDNlZGV2LCBcJiMzNDtwY25ldF9jb25maWdcXG5cJiMzNDspO1xuIDU3NDpcdFxuIDU3NTpcdCAgICBsb2NhbF9od19pbmZvID0gcGNuZXRfdHJ5X2NvbmZpZyhsaW5rLCBcdTAwMjZoYXNfc2htZW0sIDApO1xuIDU3NjpcdCAgICBpZiAoIWxvY2FsX2h3X2luZm8pIHtcbiA1Nzc6XHRcdCAgICAvKiBjaGVjayB3aGV0aGVyIGZvcmNpbmcgaW9fbGluZXMgdG8gMTYgaGVscHMuLi4gKi9cbiA1Nzg6XHRcdCAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7XG4gNTc5Olx0XHQgICAgbG9jYWxfaHdfaW5mbyA9IHBjbmV0X3RyeV9jb25maWcobGluaywgXHUwMDI2aGFzX3NobWVtLCAxKTtcbiA1ODA6XHRcdCAgICBpZiAobG9jYWxfaHdfaW5mbyA9PSBOVUxMKSB7XG4gNTgxOlx0XHRcdCAgICBkZXZfbm90aWNlKFx1MDAyNmxpbmstXHUwMDNlZGV2LCBcJiMzNDt1bmFibGUgdG8gcmVhZCBoYXJkd2FyZSBuZXRcJiMzNDtcbiA1ODI6XHRcdFx0XHQgICAgXCYjMzQ7IGFkZHJlc3MgZm9yIGlvIGJhc2UgJSMzbHhcXG5cJiMzNDssIGRldi1cdTAwM2ViYXNlX2FkZHIpO1xuIDU4MzpcdFx0XHQgICAgZ290byBmYWlsZWQ7XG4gNTg0Olx0XHQgICAgfVxuIDU4NTpcdCAgICB9XG4gNTg2Olx0XG4gNTg3Olx0ICAgIGluZm8tXHUwMDNlZmxhZ3MgPSBsb2NhbF9od19pbmZvLVx1MDAzZWZsYWdzO1xuIDU4ODpcdCAgICAvKiBDaGVjayBmb3IgdXNlciBvdmVycmlkZXMgKi9cbiA1ODk6XHQgICAgaW5mby1cdTAwM2VmbGFncyB8PSAoZGVsYXlfb3V0cHV0KSA/IERFTEFZX09VVFBVVCA6IDA7XG4gNTkwOlx0ICAgIGlmICgobGluay1cdTAwM2VtYW5mX2lkID09IE1BTkZJRF9TT0NLRVQpIFx1MDAyNlx1MDAyNlxuIDU5MTpcdFx0KChsaW5rLVx1MDAzZWNhcmRfaWQgPT0gUFJPRElEX1NPQ0tFVF9MUEUpIHx8XG4gNTkyOlx0XHQgKGxpbmstXHUwMDNlY2FyZF9pZCA9PSBQUk9ESURfU09DS0VUX0xQRV9DRikgfHxcbiA1OTM6XHRcdCAobGluay1cdTAwM2VjYXJkX2lkID09IFBST0RJRF9TT0NLRVRfRUlPKSkpXG4gNTk0Olx0XHRpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNj0gflVTRV9CSUdfQlVGO1xuIDU5NTpcdCAgICBpZiAoIXVzZV9iaWdfYnVmKVxuIDU5NjpcdFx0aW5mby1cdTAwM2VmbGFncyBcdTAwMjY9IH5VU0VfQklHX0JVRjtcbiA1OTc6XHRcbiA1OTg6XHQgICAgaWYgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IFVTRV9CSUdfQlVGKSB7XG4gNTk5Olx0XHRzdGFydF9wZyA9IFNPQ0tFVF9TVEFSVF9QRztcbiA2MDA6XHRcdHN0b3BfcGcgPSBTT0NLRVRfU1RPUF9QRztcbiA2MDE6XHRcdGNtX29mZnNldCA9IDB4MTAwMDA7XG4gNjAyOlx0ICAgIH0gZWxzZSB7XG4gNjAzOlx0XHRzdGFydF9wZyA9IFBDTkVUX1NUQVJUX1BHO1xuIDYwNDpcdFx0c3RvcF9wZyA9IFBDTkVUX1NUT1BfUEc7XG4gNjA1Olx0XHRjbV9vZmZzZXQgPSAwO1xuIDYwNjpcdCAgICB9XG4gNjA3Olx0XG4gNjA4Olx0ICAgIC8qIGhhc19zaG1lbSBpcyBpZ25vcmVkIGlmIHVzZV9zaG1lbSAhPSAtMSAqL1xuIDYwOTpcdCAgICBpZiAoKHVzZV9zaG1lbSA9PSAwKSB8fCAoIWhhc19zaG1lbSBcdTAwMjZcdTAwMjYgKHVzZV9zaG1lbSA9PSAtMSkpIHx8XG4gNjEwOlx0XHQoc2V0dXBfc2htZW1fd2luZG93KGxpbmssIHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQpICE9IDApKVxuIDYxMTpcdFx0c2V0dXBfZG1hX2NvbmZpZyhsaW5rLCBzdGFydF9wZywgc3RvcF9wZyk7XG4gNjEyOlx0XG4gNjEzOlx0ICAgIGVpX3N0YXR1cy5uYW1lID0gXCYjMzQ7TkUyMDAwXCYjMzQ7O1xuIDYxNDpcdCAgICBlaV9zdGF0dXMud29yZDE2ID0gMTtcbiA2MTU6XHQgICAgZWlfc3RhdHVzLnJlc2V0XzgzOTAgPSBwY25ldF9yZXNldF84MzkwO1xuIDYxNjpcdFxuIDYxNzpcdCAgICBpZiAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgKElTX0RMMTAwMTl8SVNfREwxMDAyMikpXG4gNjE4Olx0XHRtaWlfcGh5X3Byb2JlKGRldik7XG4gNjE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzQ1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIGBwY25ldF9jb25maWdgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBwY25ldF9jb25maWdgIGlzIGFjdHVhbGx5IHVzZWQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIHJvbGUgYW5kIGltcGFjdCBpbiB0aGUgc3lzdGVtLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byB0cmFjZSBpdHMgY2FsbHMg4oCTIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIFRpbWUgdG8gZ2V0IGRvd24gaW50byB0aGUgY29kZSBhbmQgc3RhcnQgbG9va2luZy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjbmV0X2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9OTM9c3RhdGljIHZvaWQgbWlpX3BoeV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYzo5NDpzdGF0aWMgaW50IHBjbmV0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMtOTUtc3RhdGljIHZvaWQgcGNuZXRfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jPTIzNT1zdGF0aWMgaW50IHBjbmV0X3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0yNTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MjUzOiAgICByZXR1cm4gcGNuZXRfY29uZmlnKGxpbmspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTI1NC19IC8qIHBjbmV0X2F0dGFjaCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYz01MDQ9c3RhdGljIHN0cnVjdCBod19pbmZvICpwY25ldF90cnlfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy01NjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6NTY1OnN0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTU2Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTU3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYzo1NzM6ICAgIGRldl9kYmcoXHUwMDI2bGluay1cdTAwM2VkZXYsIFwmIzM0O3BjbmV0X2NvbmZpZ1xcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMtNTc0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy02NDYtICAgIHJldHVybiAtRU5PREVWO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjY0Nzp9IC8qIHBjbmV0X2NvbmZpZyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTY0OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwODYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBDTUNJQSBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBwY25ldF9jcy5jYCwgYW5kIHNwZWNpZmljYWxseSBgcGNuZXRfcHJvYmVgLiBUaGUgY29kZSBzaG93cyBgcGNuZXRfcHJvYmVgIGJlaW5nIGNhbGxlZCBieSB0aGUgYHBjbmV0X2RyaXZlcmAgd2hpY2ggaXMgcmVnaXN0ZXJlZCBhcyBhIFBDTUNJQSBkcml2ZXIuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbiBleHBlcnQgaW4gZnV6emluZyBhbmQga2VybmVsIGludGVybmFscywgaXMgcmVhY2hhYmlsaXR5LiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIFBDTUNJQSBkZXZpY2VzLCBhbmQgdGhlcmVmb3JlIGBwY25ldF9wcm9iZWAsIGFyZSByZWFjaGFibGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQg4oCTIHNwZWNpZmljYWxseSwgc3RhbmRhcmQgUUVNVSBvbiB4ODZfNjQuIFRoZSBjb3JlIHByaW5jaXBsZTogaWYgaXQmIzM5O3Mgbm90IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBpdCBzaG91bGRuJiMzOTt0IGJlIGZ1enplZC4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSB0b29saW5nIHN1cHBvcnRzIFBDTUNJQS4gSSBrbm93IHN5emthbGxlciBpcyBteSBwcmltYXJ5IGZ1enppbmcgdG9vbCwgYnV0IEkgY2FuJiMzOTt0IHNlYXJjaCBmb3Igc3l6bGFuZyBkZXNjcmlwdGlvbnMgb3IgZXhwcmVzc2lvbnMgd2l0aCAmIzM5O2xvbmcgc3l6XyYjMzk7IHVzaW5nIHRoZSBkZWNsYXJlZCB0b29scy4gVGhpcyBpcyBhIGNydWNpYWwgbGltaXRhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYSB3YXkgdG8gc2VhcmNoIGZvciBzeXprYWxsZXIgZGVzY3JpcHRpb25zLgoKTXkgbmV4dCBsaW5lIG9mIHRob3VnaHQgaXMgd2hldGhlciB0aGVyZSYjMzk7cyBhbnkgdmlydHVhbCBvciBlbXVsYXRlZCBQQ01DSUEgaGFyZHdhcmUgaW4gdGhlIExpbnV4IGtlcm5lbCBvciBRRU1VIHRoYXQgSSBjYW4gdGFyZ2V0LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGF2YWlsYWJpbGl0eSBvZiBlbXVsYXRlZCBQQ01DSUEgc29ja2V0cy4gIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL3BjbWNpYS9gIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsIHNvdXJjZS4gSSBzZWUgYSBidW5jaCBvZiBkcml2ZXJzIHRoZXJlLCBtYW55IGZvciBBUk0gYW5kIE1JUFMgU29Dcy4gVGhlcmUmIzM5O3MgYWxzbyBgeWVudGFfc29ja2V0LmNgLCBhIFBDSS1DYXJkQnVzIGJyaWRnZSwgYW5kIGBpODIzNjUuY2AsIHdoaWNoIGlzIGFuIElTQSBQQ01DSUEgY29udHJvbGxlci4gVGhlIGBwZDY3MjkuY2AgaXMgUENJLVBDTUNJQSBicmlkZ2UuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBDYW4gYW55IG9mIHRoZXNlIGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVU/IEkgbmVlZCB0byBrbm93IGlmIFFFTVUgZW11bGF0ZXMgYW55IG9mIHRoZXNlIGNvbnRyb2xsZXJzLiBTcGVjaWZpY2FsbHksIGRvZXMgUUVNVSBoYXZlIGEgUEQ2NzI5LCBZZW50YSwgb3IgaTgyMzY1PyBUaGlua2luZyBiYWNrIG9uIG15IFFFTVUgZXhwZXJpZW5jZSwgSSByZWNhbGwgdGhhdCBQQ01DSUEgc3VwcG9ydCB3YXMgcHJlc2VudCBpbiB0aGUgcGFzdCBmb3IgdGhlIFBYQTJ4eCBhcmNoaXRlY3R1cmUsIGluIGZhY3QgSSByZW1lbWJlciBpdCBiZWluZyBkZXByZWNhdGVkIG9yIHJlbW92ZWQsIGFuZCB0aGF0IGl0IG5ldmVyIGluY2x1ZGVkIFBDSSBDYXJkQnVzIG9yIFBDTUNJQSBicmlkZ2VzLiAgU28gc3RhbmRhcmQgYHFlbXUtc3lzdGVtLXg4Nl82NGAgKGxpa2UgYC1tYWNoaW5lIHEzNWAgb3IgYHBjYCkgaXMgdW5saWtlbHkgdG8gcHJvdmlkZSBQQ01DSUEuCgpUaGVuIEkgYW0gcmVtaW5kZWQgb2YgYG5lMmtfcGNpYCwgd2hpY2ggUUVNVSAqZG9lcyogZW11bGF0ZS4gSG93ZXZlciwgdGhlIGNvZGUgaGVyZSBpcyB0YXJnZXRpbmcgYHBjbmV0X2NzLmNgLCB3aGljaCBpcyByZWdpc3RlcmVkIGZvciBQQ01DSUEgZGV2aWNlcy4gTXkgdW5kZXJzdGFuZGluZyBvZiBQQ01DSUEgaXMgdGhhdCBpdCByZWxpZXMgb24gc29ja2V0IGV2ZW50czogYSBjYXJkIG5lZWRzIHRvIGJlIGluc2VydGVkIGludG8gYSBzb2NrZXQuIFRoZSBgcGNjYXJkZGAga2VybmVsIHRocmVhZCB3aWxsIHJ1biB3aGVuIGEgc29ja2V0IGV2ZW50IGhhcHBlbnMuIEl0IG5lZWRzIHRvIHJlYWQgdGhlIENJUyBmcm9tIHRoZSBjYXJkIGFuZCB0aGVuIGNyZWF0ZSBhbmQgYmluZCBhIGBwY21jaWFfZGV2aWNlYCB2aWEgdGhlIHBjbWNpYSBidXMuCgpUaGVyZWZvcmUsIHNpbmNlIGBwY25ldF9jc2AgaXMgYSBQQ01DSUEgZHJpdmVyLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIHdheSB0byBjcmVhdGUgYSB2aXJ0dWFsIFBDTUNJQSBzb2NrZXQgb3IgY2FyZCwgdGhlIGNvZGUgd2lsbCBsaWtlbHkgb25seSBiZSByZWFjaGVkIHdoZW4gYSAqcmVhbCogUENNQ0lBIGRldmljZSBpcyBwbHVnZ2VkIGluIG9yIGEgcHJvcGVyIGVtdWxhdGlvbiBvZiBhIFBDTUNJQSBzb2NrZXQgY2FuIGJlIGVzdGFibGlzaGVkLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGtlcm5lbCYjMzk7cyBzeXNmcyBpbnRlcmZhY2UgZm9yIGEgbWV0aG9kIHRvIGluamVjdCBvciBjcmVhdGUgUENNQ0lBIGRldmljZXMgb3Igc29ja2V0cy4gSSYjMzk7bSBnb2luZyB0byBzZWFyY2ggdGhlIGBkcml2ZXJzL3BjbWNpYS9gIGRpcmVjdG9yeSBmb3IgYW55IHN5c2ZzIGF0dHJpYnV0ZXMgcmVsYXRlZCB0byBkZXZpY2UgY3JlYXRpb24sIGJpbmRpbmcsIG9yIGluamVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWSUNFX0FUVFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjbWNpYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjbWNpYS9kcy5jPTEwMDI9c3RhdGljIHNzaXplX3QgZmllbGQjI19zaG93IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXHRcdFxcXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDA2LX1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9wY21jaWEvZHMuYzoxMDA3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhmaWVsZCk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwMDgtXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYz0xMDEwPXN0YXRpYyBzc2l6ZV90IG5hbWUjI19zaG93IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXHRcdFxcXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDE0LX1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9wY21jaWEvZHMuYzoxMDE1OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhuYW1lKTtcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTAxNi1cbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTEwMjU9c3RhdGljIHNzaXplX3QgZnVuY3Rpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTAzMC19XG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEwMzE6c3RhdGljIERFVklDRV9BVFRSX1JPKGZ1bmN0aW9uKTtcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTAzMi1cbmRyaXZlcnMvcGNtY2lhL2RzLmM9MTAzMz1zdGF0aWMgc3NpemVfdCByZXNvdXJjZXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDQzLX1cbmRyaXZlcnMvcGNtY2lhL2RzLmM6MTA0NDpzdGF0aWMgREVWSUNFX0FUVFJfUk8ocmVzb3VyY2VzKTtcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTA0NS1cbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTEwNTY9c3RhdGljIHNzaXplX3QgcG1fc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwNzEtfVxuZHJpdmVycy9wY21jaWEvZHMuYzoxMDcyOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhwbV9zdGF0ZSk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwNzMtXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTEwNzQ9c3RhdGljIHNzaXplX3QgbW9kYWxpYXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDkzLX1cbmRyaXZlcnMvcGNtY2lhL2RzLmM6MTA5NDpzdGF0aWMgREVWSUNFX0FUVFJfUk8obW9kYWxpYXMpO1xuZHJpdmVycy9wY21jaWEvZHMuYy0xMDk1LVxuZHJpdmVycy9wY21jaWEvZHMuYz0xMDk2PXN0YXRpYyBzc2l6ZV90IGFsbG93X2Z1bmNfaWRfbWF0Y2hfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTExMC19XG5kcml2ZXJzL3BjbWNpYS9kcy5jOjExMTE6c3RhdGljIERFVklDRV9BVFRSX1dPKGFsbG93X2Z1bmNfaWRfbWF0Y2gpO1xuZHJpdmVycy9wY21jaWEvZHMuYy0xMTEyLVxuLS1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9MTA5OT1zdGF0aWMgc3NpemVfdCBzdG9yZV9pb19kYihzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy0xMTI4LX1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM6MTEyOTpzdGF0aWMgREVWSUNFX0FUVFIoYXZhaWxhYmxlX3Jlc291cmNlc19pbywgMDYwMCwgc2hvd19pb19kYiwgc3RvcmVfaW9fZGIpO1xuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy0xMTMwLVxuLS1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9MTE2NT1zdGF0aWMgc3NpemVfdCBzdG9yZV9tZW1fZGIoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtMTE5NC19XG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjExOTU6c3RhdGljIERFVklDRV9BVFRSKGF2YWlsYWJsZV9yZXNvdXJjZXNfbWVtLCAwNjAwLCBzaG93X21lbV9kYiwgc3RvcmVfbWVtX2RiKTtcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtMTE5Ni1cbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmM9NzAzPXN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKFxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYy03MjctfVxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jOjcyODpzdGF0aWMgREVWSUNFX0FUVFIoc3RhdHVzLCBTX0lSVUdPLCBzaG93X3N0YXR1cywgTlVMTCk7XG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMtNzI5LVxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTM0PXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zaG93X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy00NC19XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzo0NTpzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF90eXBlLCAwNDQ0LCBwY2NhcmRfc2hvd190eXBlLCBOVUxMKTtcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTQ2LVxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM9NDc9c3RhdGljIHNzaXplX3QgcGNjYXJkX3Nob3dfdm9sdGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTU4LX1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jOjU5OnN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX3ZvbHRhZ2UsIDA0NDQsIHBjY2FyZF9zaG93X3ZvbHRhZ2UsIE5VTEwpO1xuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtNjAtXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYz02MT1zdGF0aWMgc3NpemVfdCBwY2NhcmRfc2hvd192cHAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy02OC19XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzo2OTpzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF92cHAsIDA0NDQsIHBjY2FyZF9zaG93X3ZwcCwgTlVMTCk7XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy03MC1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTcxPXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zaG93X3ZjYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTc4LX1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jOjc5OnN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX3ZjYywgMDQ0NCwgcGNjYXJkX3Nob3dfdmNjLCBOVUxMKTtcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTgwLVxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTgyPXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9pbnNlcnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy05My19XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzo5NDpzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF9pbnNlcnQsIDAyMDAsIE5VTEwsIHBjY2FyZF9zdG9yZV9pbnNlcnQpO1xuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtOTUtXG4tLVxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM9MTA1PXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9jYXJkX3BtX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy0xMjUtfVxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM6MTI2OnN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX3BtX3N0YXRlLCAwNjQ0LCBwY2NhcmRfc2hvd19jYXJkX3BtX3N0YXRlLCBwY2NhcmRfc3RvcmVfY2FyZF9wbV9zdGF0ZSk7XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy0xMjctXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYz0xMjg9c3RhdGljIHNzaXplX3QgcGNjYXJkX3N0b3JlX2VqZWN0KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy0xNDAtfVxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM6MTQxOnN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX2VqZWN0LCAwMjAwLCBOVUxMLCBwY2NhcmRfc3RvcmVfZWplY3QpO1xuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtMTQyLVxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTE1Mj1zdGF0aWMgc3NpemVfdCBwY2NhcmRfc3RvcmVfaXJxX21hc2soc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTE3My19XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzoxNzQ6c3RhdGljIERFVklDRV9BVFRSKGNhcmRfaXJxX21hc2ssIDA2MDAsIHBjY2FyZF9zaG93X2lycV9tYXNrLCBwY2NhcmRfc3RvcmVfaXJxX21hc2spO1xuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtMTc1LVxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTE4ND1zdGF0aWMgc3NpemVfdCBwY2NhcmRfc3RvcmVfcmVzb3VyY2Uoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTIwMS19XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzoyMDI6c3RhdGljIERFVklDRV9BVFRSKGF2YWlsYWJsZV9yZXNvdXJjZXNfc2V0dXBfZG9uZSwgMDYwMCwgcGNjYXJkX3Nob3dfcmVzb3VyY2UsIHBjY2FyZF9zdG9yZV9yZXNvdXJjZSk7XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy0yMDMtXG4tLVxuZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmM9MTc2PXN0YXRpYyBzc2l6ZV90IHNob3dfeWVudGFfcmVnaXN0ZXJzKHN0cnVjdCBkZXZpY2UgKnllbnRhZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jLTIwNi1cbmRyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jOjIwNzpzdGF0aWMgREVWSUNFX0FUVFIoeWVudGFfcmVnaXN0ZXJzLCBTX0lSVVNSLCBzaG93X3llbnRhX3JlZ2lzdGVycywgTlVMTCk7XG5kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYy0yMDgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTcxCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTIyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IFBDTUNJQSBpcyBVbnJlYWNoYWJsZSoqCgpPa2F5LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgaXMgd29ydGggZnV6emluZy4gTGV0IG1lIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHNvY2tldF9zeXNmcy5jYC4gSSBzZWUgYHBjY2FyZF9zdG9yZV9pbnNlcnRgLCBgcGNjYXJkX3N0b3JlX2VqZWN0YCwgZXRjLiBUaG9zZSBhcmUgYWxsIHJlbGF0ZWQgdG8gYHBjbWNpYV9zb2NrZXRgIGRldmljZXMsIHdoaWNoIGFyZSBvbmx5IHJlZ2lzdGVyZWQgd2hlbiBhIHNvY2tldCBkcml2ZXIgbGlrZSBgeWVudGFfc29ja2V0YCBvciBgcGQ2NzI5YCBwcm9iZXMuIEJ1dCBjYW4gYW55IG9mIHRob3NlIHNvY2tldCBkcml2ZXJzIHByb2JlIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHg4Nl82ND8gTm8hIFRoZXJlIGFyZSBubyBQQ01DSUEgc29ja2V0IGRldmljZXMgZW11bGF0ZWQgaW4gdGhvc2UgZW52aXJvbm1lbnRzIG9uIGFtZDY0LiBFdmVuIGlmIHRoZXJlIHdlcmUsIGluc2VydGluZyBhIGNhcmQgd291bGQgaW52b2x2ZSByZWFkaW5nIHRoZSBjYXJkJiMzOTtzIENJUyBmcm9tIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBJIGRvbiYjMzk7dCBoYXZlLgoKTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIFN5emthbGxlci4gRG9lcyBpdCBlbXVsYXRlIFBDTUNJQT8gTm9wZS4KCk9rYXksIGJhY2sgdG8gdGhlIGluc3RydWN0aW9ucy4gU2VjdGlvbiAyLCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuIEl0IHNheXMgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIGZhbGxzIGludG8gc2V2ZXJhbCBjYXRlZ29yaWVzLiBMZXQmIzM5O3Mgc2VlLi4uIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBvciBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0IHNvdW5kcyBsaWtlIFBDTUNJQSEKCkkgc2hvdWxkIHJlLXJlYWQgU2VjdGlvbiAxLCB0b28uICYjMzQ7UmVhY2hhYmxlIGlzIHRoZSBwcmltYXJ5IGdhdGUuLi4mIzM0OyBGdXp6aW5nIG9ubHkgd29ya3MgaWYgdGhlIGNvZGUgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJZiBpdCYjMzk7cyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIGRvbiYjMzk7dCBmdXp6IGl0LgoKTGV0JiMzOTtzIGNoZWNrIGBwY25ldF9jc2AgbW9yZSBwcmVjaXNlbHkuIEl0JiMzOTtzIGEgMTYtYml0IFBDTUNJQSAoUEMgQ2FyZCkgRXRoZXJuZXQgZHJpdmVyIGZvciBORTIwMDAtY29tcGF0aWJsZSBQQ01DSUEgY2FyZHMuIENhbiBgcGNuZXRfY3NgIHJ1biBpbiBRRU1VIG9yIEdDRT8gTm8hIFBDTUNJQSBoYXJkd2FyZSBpcyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIGluIHRoZXNlIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cyBvbiBhbWQ2NC4gVGhleSBkb24mIzM5O3QgZW11bGF0ZSB0aGUgc29ja2V0IGNvbnRyb2xsZXJzLCBhbmQgdGhleSBkb24mIzM5O3QgZW11bGF0ZSBORTIwMDAgUENNQ0lBIGNhcmRzLgoKQWxyaWdodCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZiB0byBiZSBzdXJlLiBJIGNhbiBzZWUgdGhlIHBhdGNoIGNoYW5nZXMgc29tZSBlcnJvciBoYW5kbGluZyBwYXRocywgYnV0IGl0IGFsbCByZXZvbHZlcyBhcm91bmQgYHBjbWNpYV9yZWxlYXNlX3dpbmRvd2AgYW5kIHRoZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBvZiB0aGUgbWVtb3J5IHdpbmRvdyBmb3IgdGhlIFBDTUNJQSBkZXZpY2UuIFRoaXMgaXMgYWxsIHByZWRpY2F0ZWQgb24gdGhlIHByZXNlbmNlIG9mIHBoeXNpY2FsIFBDTUNJQSBoYXJkd2FyZS4gSXQgbG9va3MgbGlrZSBpdCBqdXN0IHNsaWdodGx5IHJlb3JkZXJzIHRoZSBjYWxscyB0byBtYWtlIHN1cmUgcmVzb3VyY2VzIGFyZSByZWxlYXNlZCBpbiBlcnJvciBwYXRocy4KClRoZSBjb25jbHVzaW9uOiBQQ01DSUEgaGFyZHdhcmUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQxMDpcdFxuMTQxMTpcdHN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXG4xNDEyOlx0XHRcdFx0ICAgICAgaW50IHN0b3BfcGcsIGludCBjbV9vZmZzZXQpXG4xNDEzOlx0e1xuMTQxNDpcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay1cdTAwM2Vwcml2O1xuMTQxNTpcdCAgICBzdHJ1Y3QgcGNuZXRfZGV2ICppbmZvID0gUFJJVihkZXYpO1xuMTQxNjpcdCAgICBpbnQgaSwgd2luZG93X3NpemUsIG9mZnNldCwgcmV0O1xuMTQxNzpcdFxuMTQxODpcdCAgICB3aW5kb3dfc2l6ZSA9IChzdG9wX3BnIC0gc3RhcnRfcGcpIFx1MDAzY1x1MDAzYyA4O1xuMTQxOTpcdCAgICBpZiAod2luZG93X3NpemUgXHUwMDNlIDMyICogMTAyNClcbjE0MjA6XHRcdHdpbmRvd19zaXplID0gMzIgKiAxMDI0O1xuMTQyMTpcdFxuMTQyMjpcdCAgICAvKiBNYWtlIHN1cmUgaXQmIzM5O3MgYSBwb3dlciBvZiB0d28uICAqL1xuMTQyMzpcdCAgICB3aW5kb3dfc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byh3aW5kb3dfc2l6ZSk7XG4xNDI0Olx0XG4xNDI1Olx0ICAgIC8qIEFsbG9jYXRlIGEgbWVtb3J5IHdpbmRvdyAqL1xuMTQyNjpcdCAgICBsaW5rLVx1MDAzZXJlc291cmNlWzNdLVx1MDAzZWZsYWdzIHw9IFdJTl9EQVRBX1dJRFRIXzE2fFdJTl9NRU1PUllfVFlQRV9DTXxXSU5fRU5BQkxFO1xuMTQyNzpcdCAgICBsaW5rLVx1MDAzZXJlc291cmNlWzNdLVx1MDAzZWZsYWdzIHw9IFdJTl9VU0VfV0FJVDtcbjE0Mjg6XHQgICAgbGluay1cdTAwM2VyZXNvdXJjZVszXS1cdTAwM2VzdGFydCA9IDA7IGxpbmstXHUwMDNlcmVzb3VyY2VbM10tXHUwMDNlZW5kID0gd2luZG93X3NpemU7XG4xNDI5Olx0ICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhsaW5rLCBsaW5rLVx1MDAzZXJlc291cmNlWzNdLCBtZW1fc3BlZWQpO1xuMTQzMDpcdCAgICBpZiAocmV0KVxuMTQzMTpcdFx0ICAgIGdvdG8gZmFpbGVkO1xuMTQzMjpcdFxuMTQzMzpcdCAgICBvZmZzZXQgPSAoc3RhcnRfcGcgXHUwMDNjXHUwMDNjIDgpICYjNDM7IGNtX29mZnNldDtcbjE0MzQ6XHQgICAgb2Zmc2V0IC09IG9mZnNldCAlIHdpbmRvd19zaXplO1xuMTQzNTpcdCAgICByZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstXHUwMDNlcmVzb3VyY2VbM10sIG9mZnNldCk7XG4xNDM2Olx0ICAgIGlmIChyZXQpXG4xNDM3Olx0XHQgICAgZ290byByZWxlYXNlO1xuMTQzODpcdFxuMTQzOTpcdCAgICAvKiBUcnkgc2NyaWJibGluZyBvbiB0aGUgYnVmZmVyICovXG4xNDQwOlx0ICAgIGluZm8tXHUwMDNlYmFzZSA9IGlvcmVtYXAobGluay1cdTAwM2VyZXNvdXJjZVszXS1cdTAwM2VzdGFydCxcbjE0NDE6XHRcdFx0XHRyZXNvdXJjZV9zaXplKGxpbmstXHUwMDNlcmVzb3VyY2VbM10pKTtcbjE0NDI6XHQgICAgaWYgKHVubGlrZWx5KCFpbmZvLVx1MDAzZWJhc2UpKSB7XG4xNDQzOlx0XHQgICAgcmV0ID0gLUVOT01FTTtcbjE0NDQ6XHRcdCAgICBnb3RvIHJlbGVhc2U7XG4xNDQ1Olx0ICAgIH1cbjE0NDY6XHRcbjE0NDc6XHQgICAgZm9yIChpID0gMDsgaSBcdTAwM2MgKFRYX1BBR0VTXHUwMDNjXHUwMDNjOCk7IGkgJiM0Mzs9IDIpXG4xNDQ4Olx0XHRfX3Jhd193cml0ZXcoKGlcdTAwM2VcdTAwM2UxKSwgaW5mby1cdTAwM2ViYXNlJiM0MztvZmZzZXQmIzQzO2kpO1xuMTQ0OTpcdCAgICB1ZGVsYXkoMTAwKTtcbjE0NTA6XHQgICAgZm9yIChpID0gMDsgaSBcdTAwM2MgKFRYX1BBR0VTXHUwMDNjXHUwMDNjOCk7IGkgJiM0Mzs9IDIpXG4xNDUxOlx0XHRpZiAoX19yYXdfcmVhZHcoaW5mby1cdTAwM2ViYXNlJiM0MztvZmZzZXQmIzQzO2kpICE9IChpXHUwMDNlXHUwMDNlMSkpIGJyZWFrO1xuMTQ1MjpcdCAgICBwY25ldF9yZXNldF84MzkwKGRldik7XG4xNDUzOlx0ICAgIGlmIChpICE9IChUWF9QQUdFU1x1MDAzY1x1MDAzYzgpKSB7XG4xNDU0Olx0XHRpb3VubWFwKGluZm8tXHUwMDNlYmFzZSk7XG4xNDU1Olx0XHRpbmZvLVx1MDAzZWJhc2UgPSBOVUxMO1xuMTQ1NjpcdFx0Z290byByZWxlYXNlO1xuMTQ1NzpcdCAgICB9XG4xNDU4Olx0XG4xNDU5Olx0ICAgIGVpX3N0YXR1cy5tZW0gPSBpbmZvLVx1MDAzZWJhc2UgJiM0Mzsgb2Zmc2V0O1xuMTQ2MDpcdCAgICBlaV9zdGF0dXMucHJpdiA9IHJlc291cmNlX3NpemUobGluay1cdTAwM2VyZXNvdXJjZVszXSk7XG4xNDYxOlx0ICAgIGRldi1cdTAwM2VtZW1fc3RhcnQgPSAodV9sb25nKWVpX3N0YXR1cy5tZW07XG4xNDYyOlx0ICAgIGRldi1cdTAwM2VtZW1fZW5kID0gZGV2LVx1MDAzZW1lbV9zdGFydCAmIzQzOyByZXNvdXJjZV9zaXplKGxpbmstXHUwMDNlcmVzb3VyY2VbM10pO1xuMTQ2MzpcdFxuMTQ2NDpcdCAgICBlaV9zdGF0dXMudHhfc3RhcnRfcGFnZSA9IHN0YXJ0X3BnO1xuMTQ2NTpcdCAgICBlaV9zdGF0dXMucnhfc3RhcnRfcGFnZSA9IHN0YXJ0X3BnICYjNDM7IFRYX1BBR0VTO1xuMTQ2NjpcdCAgICBlaV9zdGF0dXMuc3RvcF9wYWdlID0gc3RhcnRfcGcgJiM0MzsgKFxuMTQ2NzpcdFx0ICAgIChyZXNvdXJjZV9zaXplKGxpbmstXHUwMDNlcmVzb3VyY2VbM10pIC0gb2Zmc2V0KSBcdTAwM2VcdTAwM2UgOCk7XG4xNDY4Olx0XG4xNDY5Olx0ICAgIC8qIHNldCB1cCBibG9jayBpL28gZnVuY3Rpb25zICovXG4xNDcwOlx0ICAgIGVpX3N0YXR1cy5nZXRfODM5MF9oZHIgPSBzaG1lbV9nZXRfODM5MF9oZHI7XG4xNDcxOlx0ICAgIGVpX3N0YXR1cy5ibG9ja19pbnB1dCA9IHNobWVtX2Jsb2NrX2lucHV0O1xuMTQ3MjpcdCAgICBlaV9zdGF0dXMuYmxvY2tfb3V0cHV0ID0gc2htZW1fYmxvY2tfb3V0cHV0O1xuMTQ3MzpcdFxuMTQ3NDpcdCAgICBpbmZvLVx1MDAzZWZsYWdzIHw9IFVTRV9TSE1FTTtcbjE0NzU6XHQgICAgcmV0dXJuIDA7XG4xNDc2Olx0XG4xNDc3Olx0cmVsZWFzZTpcbjE0Nzg6XHRcdHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBsaW5rLVx1MDAzZXJlc291cmNlWzNdKTtcbjE0Nzk6XHRmYWlsZWQ6XG4xNDgwOlx0ICAgIHJldHVybiAxO1xuMTQ4MTpcdH1cbjE0ODI6XHRcbjE0ODM6XHQvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cbjE0ODQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2OTkKCQkJCQkJCW91dHB1dDogMTQ0CgkJCQkJCQl0aG91Z2h0czogNzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGFuIFVucmVhY2hhYmxlIFBDTUNJQSBEcml2ZXIgQ29kZSBQYXRoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuY2AsIHNwZWNpZmljYWxseSB0aGUgYHNldHVwX3NobWVtX3dpbmRvd2AgZnVuY3Rpb24uIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSByZXNvdXJjZSBsZWFrIHdoZXJlIGEgUENNQ0lBIG1lbW9yeSB3aW5kb3cgd2FzbiYjMzk7dCBiZWluZyByZWxlYXNlZCBpbiB0aGUgY2FzZSBvZiBhbiBlcnJvciBkdXJpbmcgaXRzIHNldHVwLiBUaGUgZml4IGFkZHMgYSBgcGNtY2lhX3JlbGVhc2Vfd2luZG93YCBjYWxsIGJlZm9yZSByZXR1cm5pbmcgb24gZXJyb3IuIFN0YW5kYXJkIHJlc291cmNlIG1hbmFnZW1lbnQgaW1wcm92ZW1lbnQsIG5vdGhpbmcgaW5oZXJlbnRseSBjb21wbGV4LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBjb2RlICpyZWFjaGFibGUqPyBNeSBpbml0aWFsIGd1dCBmZWVsaW5nLCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggdGhlc2Ugc3lzdGVtcywgaXMgJiMzNDtwcm9iYWJseSBub3QmIzM0Oy4gTGV0JiMzOTtzIGNvbmZpcm06CgoxLiAgKipBcmNoaXRlY3R1cmUgYW5kIEVudmlyb25tZW50OioqIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW1kNjQuIGBwY25ldF9jc2AgaXMgYSBsZWdhY3kgUENNQ0lBIGRyaXZlciAoTkUyMDAwLWNvbXBhdGlibGUpIGRlc2lnbmVkIGZvciAxNi1iaXQgUENNQ0lBIGNhcmRzLiBJbiB0b2RheSYjMzk7cyB2aXJ0dWFsaXphdGlvbiBsYW5kc2NhcGUsIHBhcnRpY3VsYXJseSB3aXRoaW4gUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSksIFBDTUNJQSBlbXVsYXRpb24gaXMgdmlydHVhbGx5IG5vbmV4aXN0ZW50LiBUaGVzZSBzdGFuZGFyZCBlbnZpcm9ubWVudHMgZG9uJiMzOTt0IGVtdWxhdGUgdGhlIFBDTUNJQSBob3N0IHNvY2tldCBjb250cm9sbGVycyBvciB0aGUgUENNQ0lBIE5FMjAwMCBkZXZpY2VzLiBUaGVyZSYjMzk7cyBubyBlcXVpdmFsZW50IG9mIFVTQiYjMzk7cyBgdXNiaXBgIG9yIG5ldHdvcmsgZW11bGF0aW9uIGxpa2UgYGR1bW15X2hjZGAsIGB2aGNpYCwgYGR1bW15YCwgYHZldGhgLCBvciBgdHVuYCB0byBicmlkZ2UgdGhpcyBnYXAuIFNvLCB0aGUgcHJvYmUgcGF0aCwgZnJvbSBgcGNuZXRfcHJvYmVgIGRvd24gdG8gYHBjbmV0X2NvbmZpZ2AgYW5kIHRoZW4gaW50byBgc2V0dXBfc2htZW1fd2luZG93YCwgaXMgZWZmZWN0aXZlbHkgYmxvY2tlZC4KCjIuICAqKkNvbXBhcmlzb24gdG8gUHJpb3IgV29yazoqKiBUaGlzIHBlcmZlY3RseSBhbGlnbnMgd2l0aCB0aGUgcHJpb3IgZXhhbXBsZXMgb2YgdW5yZWFjaGFibGUgaGFyZHdhcmUsIHNwZWNpZmljYWxseSAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzJiMzNDsgdGhhdCByZXF1aXJlIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcy4gVGhlIFBDTUNJQSBFdGhlcm5ldCBkcml2ZXIgZmFsbHMgc3F1YXJlbHkgaW50byB0aGlzIGNhdGVnb3J5OiBsZWdhY3ksIHBoeXNpY2FsIGhhcmR3YXJlIChhIFBDTUNJQSBjYXJkKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKMy4gICoqV29ydGhGdXp6aW5nIENvbmZpcm1hdGlvbjoqKiBHaXZlbiB0aGUgbGFjayBvZiBoYXJkd2FyZSBlbXVsYXRpb24sIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBmYWxzZS4gV2UgY2FuIHNraXAgU2VjdGlvbnMgNCBhbmQgNSBiZWNhdXNlIHRoZXJlJiMzOTtzIG5vIGNvbXBsZXggZnV6emluZyBjb25maWd1cmF0aW9uIGludm9sdmVkIGhlcmU7IHRoZSBjb2RlJiMzOTtzIHJlYWNoYWJpbGl0eSBpcyB0aGUgaXNzdWUuIFRoZSByZWFzb25pbmcgZm9yIG5vdCBmdXp6aW5nIGlzIHRoZSBrZXkgcGFydC4gSXQgaXMgYSBjbGVhciBhbmQgY29uY2lzZSBleHBsYW5hdGlvbiB0aGF0IHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGR1ZSB0byB0aGUgbGFjayBvZiBQQ01DSUEgaGFyZHdhcmUgZW11bGF0aW9uIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4KCjQuICAqKkZpbmFsIFN1bW1hcnk6KiogVGhlIHBhdGNoIHJlc2lkZXMgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuY2AsIGluIHRoZSBgc2V0dXBfc2htZW1fd2luZG93YCBmdW5jdGlvbi4gVGhpcyBkcml2ZXIgaXMgZm9yIFBDTUNJQSBuZXR3b3JrIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgTkUyMDAwLWNvbXBhdGlibGUgZGV2aWNlcyAod2hpY2ggcmVsaWVzIG9uIGBDT05GSUdfUENNQ0lBX1BDTkVUYCkuIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LiBHaXZlbiB0aGUgdWJpcXVpdHkgb2YgUUVNVS9HQ0UgZm9yIHRlc3RpbmcsIHRoZSBQQ01DSUEgZHJpdmVyIGlzIHVucmVhY2hhYmxlIGJlY2F1c2Ugc3RhbmRhcmQgUUVNVSBhbmQgR0NFIGVudmlyb25tZW50cyBvbiB4ODZcXzY0IGRvIG5vdCBlbXVsYXRlIHRoZSBQQ01DSUEvQ2FyZEJ1cyBzb2NrZXQgY29udHJvbGxlcnMgb3IgdGhlc2UgUENNQ0lBIGNhcmRzLiBObyBzb2Z0d2FyZSBlbXVsYXRpb24gbWVjaGFuaXNtIGV4aXN0cywgdGhlcmVmb3JlLCB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGxvZ2ljIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMuCgpJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBjYXNlLiBMZXQmIzM5O3MgZ2V0IHRoZSByZXN1bHRzIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgaW4gc2V0dXBfc2htZW1fd2luZG93KCkgaW4gZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLCB3aGljaCBpcyBhIGxlZ2FjeSBQQ01DSUEgZXRoZXJuZXQgY2FyZCBkcml2ZXIgKENPTkZJR19QQ01DSUFfUENORVQpLiBQQ01DSUEvQ2FyZEJ1cyBzb2NrZXQgY29udHJvbGxlcnMgYW5kIFBDTUNJQSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHg4Nl82NCBRRU1VIG9yIEdDRSB2aXJ0dWFsIGVudmlyb25tZW50cywgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBsYXllciB0byBpbnN0YW50aWF0ZSBQQ01DSUEgZGV2aWNlcy4gVGhlIG1vZGlmaWVkIHByb2JlIHBhdGggaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHNldHVwX3NobWVtX3dpbmRvdygpIGluIGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYywgd2hpY2ggaXMgYSBsZWdhY3kgUENNQ0lBIGV0aGVybmV0IGNhcmQgZHJpdmVyIChDT05GSUdfUENNQ0lBX1BDTkVUKS4gUENNQ0lBL0NhcmRCdXMgc29ja2V0IGNvbnRyb2xsZXJzIGFuZCBQQ01DSUEgY2FyZHMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODZfNjQgUUVNVSBvciBHQ0UgdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gbGF5ZXIgdG8gaW5zdGFudGlhdGUgUENNQ0lBIGRldmljZXMuIFRoZSBtb2RpZmllZCBwcm9iZSBwYXRoIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMTo1NzoyNC42NTQ1NTI1MTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzEzMDM0NjMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmVzb3VyY2UgbGVhayBpbiBzZXR1cF9zaG1lbV93aW5kb3coKSBpbiBkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMsIHdoaWNoIGlzIGEgbGVnYWN5IFBDTUNJQSBldGhlcm5ldCBjYXJkIGRyaXZlciAoQ09ORklHX1BDTUNJQV9QQ05FVCkuIFBDTUNJQS9DYXJkQnVzIHNvY2tldCBjb250cm9sbGVycyBhbmQgUENNQ0lBIGNhcmRzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgeDg2XzY0IFFFTVUgb3IgR0NFIHZpcnR1YWwgZW52aXJvbm1lbnRzLCBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGxheWVyIHRvIGluc3RhbnRpYXRlIFBDTUNJQSBkZXZpY2VzLiBUaGUgbW9kaWZpZWQgcHJvYmUgcGF0aCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMTo1NzoyNC42NTQ1NTcyMzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NzMxODkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ5ZjJmNzhmYjI4NGUzMDdhNzlhYmVlNGVjYjQ4MWExODIzNGMxZTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgMTMgMjE6NTc6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXFxuaW5kZXggMTlmOWM1ZGIzZjNiYS4uMGNmM2MwZjNjZWQ3YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcXG5AQCAtMTQzNCwxNCArMTQzNCwxNCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxcbiAgICAgb2Zmc2V0IC09IG9mZnNldCAlIHdpbmRvd19zaXplO1xcbiAgICAgcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLVxcdTAwM2VyZXNvdXJjZVszXSwgb2Zmc2V0KTtcXG4gICAgIGlmIChyZXQpXFxuLVxcdCAgICBnb3RvIGZhaWxlZDtcXG4rXFx0ICAgIGdvdG8gcmVsZWFzZTtcXG4gXFxuICAgICAvKiBUcnkgc2NyaWJibGluZyBvbiB0aGUgYnVmZmVyICovXFxuICAgICBpbmZvLVxcdTAwM2ViYXNlID0gaW9yZW1hcChsaW5rLVxcdTAwM2VyZXNvdXJjZVszXS1cXHUwMDNlc3RhcnQsXFxuIFxcdFxcdFxcdHJlc291cmNlX3NpemUobGluay1cXHUwMDNlcmVzb3VyY2VbM10pKTtcXG4gICAgIGlmICh1bmxpa2VseSghaW5mby1cXHUwMDNlYmFzZSkpIHtcXG4gXFx0ICAgIHJldCA9IC1FTk9NRU07XFxuLVxcdCAgICBnb3RvIGZhaWxlZDtcXG4rXFx0ICAgIGdvdG8gcmVsZWFzZTtcXG4gICAgIH1cXG4gXFxuICAgICBmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKFRYX1BBR0VTXFx1MDAzY1xcdTAwM2M4KTsgaSArPSAyKVxcbkBAIC0xNDUyLDkgKzE0NTIsOCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxcbiAgICAgcGNuZXRfcmVzZXRfODM5MChkZXYpO1xcbiAgICAgaWYgKGkgIT0gKFRYX1BBR0VTXFx1MDAzY1xcdTAwM2M4KSkge1xcbiBcXHRpb3VubWFwKGluZm8tXFx1MDAzZWJhc2UpO1xcbi1cXHRwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay1cXHUwMDNlcmVzb3VyY2VbM10pO1xcbiBcXHRpbmZvLVxcdTAwM2ViYXNlID0gTlVMTDtcXG4tXFx0Z290byBmYWlsZWQ7XFxuK1xcdGdvdG8gcmVsZWFzZTtcXG4gICAgIH1cXG4gXFxuICAgICBlaV9zdGF0dXMubWVtID0gaW5mby1cXHUwMDNlYmFzZSArIG9mZnNldDtcXG5AQCAtMTQ3NSw2ICsxNDc0LDggQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcXG4gICAgIGluZm8tXFx1MDAzZWZsYWdzIHw9IFVTRV9TSE1FTTtcXG4gICAgIHJldHVybiAwO1xcbiBcXG4rcmVsZWFzZTpcXG4rXFx0cGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstXFx1MDAzZXJlc291cmNlWzNdKTtcXG4gZmFpbGVkOlxcbiAgICAgcmV0dXJuIDE7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6MjUuMDQyNTgwMzM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1Mjc0MjMwNzIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHNldHVwX3NobWVtX3dpbmRvdygpIGluIGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYywgd2hpY2ggaXMgYSBsZWdhY3kgUENNQ0lBIGV0aGVybmV0IGNhcmQgZHJpdmVyIChDT05GSUdfUENNQ0lBX1BDTkVUKS4gUENNQ0lBL0NhcmRCdXMgc29ja2V0IGNvbnRyb2xsZXJzIGFuZCBQQ01DSUEgY2FyZHMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODZfNjQgUUVNVSBvciBHQ0UgdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gbGF5ZXIgdG8gaW5zdGFudGlhdGUgUENNQ0lBIGRldmljZXMuIFRoZSBtb2RpZmllZCBwcm9iZSBwYXRoIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDlmMmY3OGZiMjg0ZTMwN2E3OWFiZWU0ZWNiNDgxYTE4MjM0YzFlNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDIxOjU3OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXG5pbmRleCAxOWY5YzVkYjNmM2JhLi4wY2YzYzBmM2NlZDdiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcbkBAIC0xNDM0LDE0ICsxNDM0LDE0IEBAIHN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXG4gICAgIG9mZnNldCAtPSBvZmZzZXQgJSB3aW5kb3dfc2l6ZTtcbiAgICAgcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLVx1MDAzZXJlc291cmNlWzNdLCBvZmZzZXQpO1xuICAgICBpZiAocmV0KVxuLVx0ICAgIGdvdG8gZmFpbGVkO1xuK1x0ICAgIGdvdG8gcmVsZWFzZTtcbiBcbiAgICAgLyogVHJ5IHNjcmliYmxpbmcgb24gdGhlIGJ1ZmZlciAqL1xuICAgICBpbmZvLVx1MDAzZWJhc2UgPSBpb3JlbWFwKGxpbmstXHUwMDNlcmVzb3VyY2VbM10tXHUwMDNlc3RhcnQsXG4gXHRcdFx0cmVzb3VyY2Vfc2l6ZShsaW5rLVx1MDAzZXJlc291cmNlWzNdKSk7XG4gICAgIGlmICh1bmxpa2VseSghaW5mby1cdTAwM2ViYXNlKSkge1xuIFx0ICAgIHJldCA9IC1FTk9NRU07XG4tXHQgICAgZ290byBmYWlsZWQ7XG4rXHQgICAgZ290byByZWxlYXNlO1xuICAgICB9XG4gXG4gICAgIGZvciAoaSA9IDA7IGkgXHUwMDNjIChUWF9QQUdFU1x1MDAzY1x1MDAzYzgpOyBpICs9IDIpXG5AQCAtMTQ1Miw5ICsxNDUyLDggQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcbiAgICAgcGNuZXRfcmVzZXRfODM5MChkZXYpO1xuICAgICBpZiAoaSAhPSAoVFhfUEFHRVNcdTAwM2NcdTAwM2M4KSkge1xuIFx0aW91bm1hcChpbmZvLVx1MDAzZWJhc2UpO1xuLVx0cGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstXHUwMDNlcmVzb3VyY2VbM10pO1xuIFx0aW5mby1cdTAwM2ViYXNlID0gTlVMTDtcbi1cdGdvdG8gZmFpbGVkO1xuK1x0Z290byByZWxlYXNlO1xuICAgICB9XG4gXG4gICAgIGVpX3N0YXR1cy5tZW0gPSBpbmZvLVx1MDAzZWJhc2UgKyBvZmZzZXQ7XG5AQCAtMTQ3NSw2ICsxNDc0LDggQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcbiAgICAgaW5mby1cdTAwM2VmbGFncyB8PSBVU0VfU0hNRU07XG4gICAgIHJldHVybiAwO1xuIFxuK3JlbGVhc2U6XG4rXHRwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay1cdTAwM2VyZXNvdXJjZVszXSk7XG4gZmFpbGVkOlxuICAgICByZXR1cm4gMTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMTo1NzoyNS4wNDI1ODIyNDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDQzNTEwMTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIEZ1enppbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gZnV6emluZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQuIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNgLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoaXMgZmlsZSBhY3R1YWxseSBpcywgc28gSSdsbCBwdWxsIHVwIHRoZSBjb250ZXh0LiBBaGEhIEl0J3MgdGhlIFBDTUNJQSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYHBjbmV0X2NzYCBkcml2ZXIsIGRlc2lnbmVkIGZvciBOUzgzOTAtYmFzZWQgUENNQ0lBIGV0aGVybmV0IGNhcmRzLlxuXG5Ob3cgdGhhdCBJIGhhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGRldmljZSBhbmQgZHJpdmVyLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuIEknbGwgbmVlZCB0byByZWFkIHRocm91Z2ggdGhlIGBwY25ldF9jcy5jYCBmaWxlIGl0c2VsZiwgYW5kIEknbGwgbWFrZSBzdXJlIHRvIGNyb3NzLXJlZmVyZW5jZSBpdCB3aXRoIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlIHRvIHRoZSBsZXZlbCBvZiBkZXRhaWwgbmVjZXNzYXJ5IHRvIGp1ZGdlIGhvdyBlZmZlY3RpdmUgdGhlIHBhdGNoIHdvdWxkIGJlIGZvciBmdXp6aW5nLCBhbmQgaWYgdGhlIHBhdGNoIGlzIHZ1bG5lcmFibGUgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6MzEuNDg2MDk0Nzc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjY2NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjbmV0X2NzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnPTEzND1jb25maWcgUENNQ0lBX1BDTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWctMTQyLVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnOjE0MzpcXHQgIGNhbGxlZCBwY25ldF9jcy4gIElmIHVuc3VyZSwgc2F5IE4uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnLTE0NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX05FMktfUENJKSArPSBuZTJrLXBjaS5vIDgzOTAub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX1BDTUNJQV9QQ05FVCkgKz0gcGNuZXRfY3MubyA4MzkwLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL01ha2VmaWxlLTE1LW9iai0kKENPTkZJR19TVE5JQykgKz0gc3RuaWMubyA4MzkwLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0xNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MTU6ICAgIHBjbmV0X2NzLmMgMS4xNTMgMjAwMy8xMS8wOSAxODo1MzowOVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0xNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYz0xNzA5PXN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RyaXZlciBwY25ldF9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjE3MTA6XFx0Lm5hbWVcXHRcXHQ9IFxcXCJwY25ldF9jc1xcXCIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTE3MTEtXFx0LnByb2JlXFx0XFx0PSBwY25ldF9wcm9iZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6MzEuNTM5NzY2OTM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzM5MTgwMzY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktjb25maWcgRGl2ZSBmb3IgUENNQ0lBX1BDTkVUKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9uIHN0YXR1cyByZWxhdGVkIHRvIGBQQ01DSUFfUENORVRgIHdpdGhpbiB0aGUga2VybmVsJ3MgS2NvbmZpZyBzeXN0ZW0uIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IEkgd2FudCB0byBrbm93IGlmIGl0J3MgZW5hYmxlZCwgZGlzYWJsZWQsIGEgbW9kdWxlLCBvciBjb25kaXRpb25hbC4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIGRlcGVuZGVuY2llcyBhcyB3ZWxsLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGljaCBmaWxlIHRvIGNoZWNrIGFuZCBob3cgdG8gbmF2aWdhdGUgYXJvdW5kIGl0IHRvIGdldCBhIHF1aWNrIHN1bW1hcnkuIExldCdzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMTo1NzozNC45MzE1NzI4NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFxuIDEzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTMyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYXBuZS5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIFBDTUNJQV9QQ05FVFxcbiAxMzU6XFx0XFx0dHJpc3RhdGUgXFxcIk5FMjAwMCBjb21wYXRpYmxlIFBDTUNJQSBzdXBwb3J0XFxcIlxcbiAxMzY6XFx0XFx0ZGVwZW5kcyBvbiBQQ01DSUEgXFx1MDAyNlxcdTAwMjYgSEFTX0lPUE9SVFxcbiAxMzc6XFx0XFx0c2VsZWN0IENSQzMyXFxuIDEzODpcXHRcXHRoZWxwXFxuIDEzOTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBhdHRhY2ggYW4gTkUyMDAwIGNvbXBhdGlibGUgUENNQ0lBXFxuIDE0MDpcXHRcXHQgIChQQy1jYXJkKSBFdGhlcm5ldCBvciBGYXN0IEV0aGVybmV0IGNhcmQgdG8geW91ciBjb21wdXRlci5cXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG4gMTQzOlxcdFxcdCAgY2FsbGVkIHBjbmV0X2NzLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTQ0OlxcdFxcbiAxNDU6XFx0Y29uZmlnIFNUTklDXFxuIDE0NjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmF0aW9uYWwgRFA4MzkwMkFWICBzdXBwb3J0XFxcIlxcbiAxNDc6XFx0XFx0ZGVwZW5kcyBvbiBTVVBFUkhcXG4gMTQ4OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBTdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBEUDgzOTAyQVZcXG4gMTUxOlxcdFxcdCAgU1QtTklDIFNlcmlhbCBOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyIGZvciBUd2lzdGVkIFBhaXIuICBUaGlzXFxuIDE1MjpcXHRcXHQgIGlzIGEgMTBNYml0L3NlYyBFdGhlcm5ldCBjb250cm9sbGVyLiAgUHJvZHVjdCBvdmVydmlldyBhbmQgc3BlY3MgYXRcXG4gMTUzOlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL0RQL0RQODM5MDJBLmh0bWxcXHUwMDNlLlxcbiAxNTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIxOjU3OjM0LjkzMTY0NjUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzUyMzEzMTA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBQQ01DSUEgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIFBDTUNJQSByYWJiaXQgaG9sZS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIFBDTUNJQSBkZXZpY2VzIGFyZSBldmVuIGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZyBvciBlbXVsYXRpb24gd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBIb2xkIG9uLCBjYW4gUUVNVSBldmVuICpkbyogUENNQ0lBIGVtdWxhdGlvbj8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC5cblxuV2FpdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYsIHdoYXQgYWJvdXQgUENNQ0lBIGRldmljZXMgaW4gc3l6a2FsbGVyPyBBcmUgdGhleSBldmVuIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQ/IFdoYXQgdW5kZXJseWluZyBidXMgaXMgUENNQ0lBIHVzaW5nLCBhbnl3YXk/IEluIHN0YW5kYXJkIHg4Ni9hbWQ2NCBRRU1VLCBQQ01DSUEgaXNuJ3QgYSAqc3RhbmRhcmQqIHZpcnR1YWwgYnVzLCBpcyBpdD8gT3IgbWF5YmUgaXQgKmlzKj8gSSBoYXZlIHRvIGJlIHN1cmUuXG5cbkFoYSwgUUVNVSdzIGRvY3VtZW50YXRpb24gc2hvdWxkIGhhdmUgYW5zd2Vycy4gRG9lcyBRRU1VIGhhdmUgUENNQ0lBIGVtdWxhdGlvbiBhdCBhbGw/IFdhaXQsIGl0IGxvb2tzIGxpa2UgUUVNVSAqZG9lcyogaGF2ZSBzb21lIFBDTUNJQSBzdXBwb3J0IHJlbGF0ZWQgdG8gcHhhMnh4LCBidXQgaXMgdGhhdCByZWxldmFudCBvbiBhbWQ2ND8gVGhpcyBzZWVtcyBzcGVjaWZpYyB0byBBUk0gYXJjaGl0ZWN0dXJlLlxuXG5SaWdodCwgbm93LCBJIHNob3VsZCBmb2N1cy4gSSBuZWVkIHRvIGNoZWNrIHN5emthbGxlcidzIHN5emxhbmcgZGVzY3JpcHRpb25zLCB0aGUgZ2l0IGNvbW1pdCBoaXN0b3J5LCBvciBRRU1VJ3MgbW9kZWxzIHRvIGZpbmQgdGhlIHJpZ2h0IGluZm9ybWF0aW9uLlxuXG5BIGtleSBxdWVzdGlvbjogY2FuIHVzZXIgc3BhY2UgZXZlbiBpbnN0YW50aWF0ZSBhIFBDTUNJQSBkZXZpY2U/IEkgaGF2ZSB0byBleHBsb3JlIHdoZXRoZXIgdGhlcmUncyBhbnkgc29ydCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24sIHBlcmhhcHMgYSBkdW1teSBQQ01DSUEgZHJpdmVyIHRoYXQgY291bGQgc2ltcGxpZnkgdGhpbmdzLCBvciBkb2VzIGl0ICpyZXF1aXJlKiBhIHBoeXNpY2FsIFBDTUNJQSAvIENhcmRCdXMgY29udHJvbGxlciAvIHNvY2tldD8gSSBoYXZlIHRvIGNvbnNpZGVyIGFsbCBhbmdsZXMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBmb3IgUENNQ0lBLXJlbGF0ZWQgY29kZSB0byBzZWUgaWYgdGhlcmUncyBhbnkgaW5kaWNhdGlvbiBvZiBhIHZpcnR1YWwgUENNQ0lBIGhvc3QgY29udHJvbGxlci4gVGhhdCBtaWdodCBiZSB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njc5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6MzguNDU0Nzc5NjgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjA4MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjbWNpYV9yZWdpc3Rlcl9zb2NrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wY21jaWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYz0zMjY9c3RhdGljIGludCBiY202M3h4X2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2JjbTYzeHhfcGNtY2lhLmMtNDE3LVxcbmRyaXZlcnMvcGNtY2lhL2JjbTYzeHhfcGNtY2lhLmM6NDE4OlxcdHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoc29jayk7XFxuZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYy00MTktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2NzLmM9OTc9c3RhdGljIGludCBwY2NhcmRkKHZvaWQgKl9fc2t0KTtcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2NzLmMtOTktLyoqXFxuZHJpdmVycy9wY21jaWEvY3MuYzoxMDA6ICogcGNtY2lhX3JlZ2lzdGVyX3NvY2tldCAtIGFkZCBhIG5ldyBwY21jaWEgc29ja2V0IGRldmljZVxcbmRyaXZlcnMvcGNtY2lhL2NzLmMtMTAxLSAqIEBzb2NrZXQ6IHRoZSBcXHUwMDI2c29ja2V0IHRvIHJlZ2lzdGVyXFxuZHJpdmVycy9wY21jaWEvY3MuYy0xMDItICovXFxuZHJpdmVycy9wY21jaWEvY3MuYzoxMDM6aW50IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldClcXG5kcml2ZXJzL3BjbWNpYS9jcy5jLTEwNC17XFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9jcy5jLTExMC1cXG5kcml2ZXJzL3BjbWNpYS9jcy5jOjExMTpcXHRkZXZfZGJnKFxcdTAwMjZzb2NrZXQtXFx1MDAzZWRldiwgXFxcInBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoMHglcClcXFxcblxcXCIsIHNvY2tldC1cXHUwMDNlb3BzKTtcXG5kcml2ZXJzL3BjbWNpYS9jcy5jLTExMi1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2NzLmMtMTk3LVxcdHJldHVybiByZXQ7XFxuZHJpdmVycy9wY21jaWEvY3MuYzoxOTg6fSAvKiBwY21jaWFfcmVnaXN0ZXJfc29ja2V0ICovXFxuZHJpdmVycy9wY21jaWEvY3MuYzoxOTk6RVhQT1JUX1NZTUJPTChwY21jaWFfcmVnaXN0ZXJfc29ja2V0KTtcXG5kcml2ZXJzL3BjbWNpYS9jcy5jLTIwMC1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jPTQyND1zdGF0aWMgaW50IGRiMXhfcGNtY2lhX3NvY2tldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmMtNTU2LVxcbmRyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jOjU1NzpcXHRyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFxcdTAwMjZzb2NrLVxcdTAwM2Vzb2NrZXQpO1xcbmRyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jLTU1OC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9lbGVjdHJhX2NmLmM9MTc1PXN0YXRpYyBpbnQgZWxlY3RyYV9jZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2VsZWN0cmFfY2YuYy0yNzYtXFxuZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jOjI3NzpcXHRzdGF0dXMgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFxcdTAwMjZjZi1cXHUwMDNlc29ja2V0KTtcXG5kcml2ZXJzL3BjbWNpYS9lbGVjdHJhX2NmLmMtMjc4LVxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jOjI3OTpcXHRcXHRkZXZfZXJyKGRldmljZSwgXFxcInBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3BjbWNpYS9lbGVjdHJhX2NmLmMtMjgwLVxcdFxcdGdvdG8gZmFpbDM7XFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmM9MTk5PXN0YXRpYyBpbnQgX19pbml0IG9tYXBfY2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL29tYXBfY2YuYy0yNzctXFxuZHJpdmVycy9wY21jaWEvb21hcF9jZi5jOjI3ODpcXHRzdGF0dXMgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFxcdTAwMjZjZi1cXHUwMDNlc29ja2V0KTtcXG5kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMtMjc5LVxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9wY21jaWEvcGQ2NzI5LmM9NjI0PXN0YXRpYyBpbnQgcGQ2NzI5X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMtNzE0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNQVhfU09DS0VUUzsgaSsrKSB7XFxuZHJpdmVycy9wY21jaWEvcGQ2NzI5LmM6NzE1OlxcdFxcdHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoXFx1MDAyNnNvY2tldFtpXS5zb2NrZXQpO1xcbmRyaXZlcnMvcGNtY2lhL3BkNjcyOS5jLTcxNi1cXHRcXHRpZiAocmV0KSB7XFxuZHJpdmVycy9wY21jaWEvcGQ2NzI5LmM6NzE3OlxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZkZXYtXFx1MDAzZWRldiwgXFxcInBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQgZmFpbGVkLlxcXFxuXFxcIik7XFxuZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMtNzE4LVxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBpIDsgaisrKVxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jPTc5Mj1pbnQgc29jX3BjbWNpYV9hZGRfb25lKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KVxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jLTg1Ni1cXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmM6ODU3OlxcdHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoXFx1MDAyNnNrdC1cXHUwMDNlc29ja2V0KTtcXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMtODU4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS94eHMxNTAwX3NzLmM9MjA5PXN0YXRpYyBpbnQgeHhzMTUwMF9wY21jaWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYy0yODQtXFxuZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jOjI4NTpcXHRyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFxcdTAwMjZzb2NrLVxcdTAwM2Vzb2NrZXQpO1xcbmRyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYy0yODYtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmM9MTE1OD1zdGF0aWMgaW50IHllbnRhX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jLTEyNjktXFx0LyogUmVnaXN0ZXIgaXQgd2l0aCB0aGUgcGNtY2lhIGxheWVyLi4gKi9cXG5kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYzoxMjcwOlxcdHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoXFx1MDAyNnNvY2tldC1cXHUwMDNlc29ja2V0KTtcXG5kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYy0xMjcxLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIxOjU3OjM4LjUwNDM5MzgxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMzMTY1MjUwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUUVNVSBQQ01DSUEgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZHJpdmVyIGZpbGVzIOKAkyBgeWVudGFfc29ja2V0LmNgLCBgcGQ2NzI5LmNgLCBgaTgyMzY1LmNgLi4uIEltbWVkaWF0ZWx5LCBteSBicmFpbiBraWNrcyBpbnRvIGdlYXI6ICpBcmUgYW55IG9mIHRoZXNlIFBDTUNJQSBjb250cm9sbGVycyBhY3R1YWxseSBlbXVsYXRlZCB3aXRoaW4gUUVNVT8qIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBRRU1VIGFjdHVhbGx5ICpkb2VzKiBzdXBwb3J0LlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCBhIGNydWNpYWwgZGlzdGluY3Rpb246ICpEb2VzIFFFTVUgbW9kZWwgQ2FyZEJ1cyBvciBqdXN0IHBsYWluIFBDTUNJQT8qIFRoaXMgaXMga2V5LiBEaWdnaW5nIGRlZXBlciBpbnRvIG15IGtub3dsZWRnZSBvZiBRRU1VJ3MgYXJjaGl0ZWN0dXJlLCBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgUENNQ0lBIHN1cHBvcnQgKmRvZXMqIGV4aXN0LCBidXQgaXQncyBsYXJnZWx5IGNvbmZpbmVkIHRvIHRoZSBgcHhhMnh4YCBhbmQgb3RoZXIgZW1iZWRkZWQgQVJNIG1hY2hpbmUgbW9kZWxzLCBhbmQgZXZlbiB0aGVuIGl0IHdhcyBwcmltYXJpbHkgZ2VhcmVkIHRvd2FyZHMgZW11bGF0aW5nIHRoaW5ncyBsaWtlIG1pY3JvZHJpdmVzIG9yIENvbXBhY3RGbGFzaC5cblxuVGhhdCdzIHdoZW4gaXQgaGl0cyBtZTogKk9uIGEgc3RhbmRhcmQgeDg2IG9yIGFtZDY0IGFyY2hpdGVjdHVyZSwgdXNpbmcgdGhlIGNvbW1vbiBpNDQwZnggb3IgcTM1IGNoaXBzZXRzLCB0aGVyZSdzIGFjdHVhbGx5IE5PIENhcmRCdXMvUENNQ0lBIGJyaWRnZSBvciBjb250cm9sbGVyIHJlcHJlc2VudGVkISogVGhpcyBpcyBhIHNpZ25pZmljYW50IGdhcCBpbiB0aGUgZW11bGF0ZWQgaGFyZHdhcmUuXG5cblNvLCB3aGVyZSBkb2VzIHRoYXQgbGVhdmUgbWU/IEknbSBub3cgcXVlc3Rpb25pbmcgd2hldGhlciBMaW51eCBpdHNlbGYgZXZlbiAqaGFzKiBhbnkgdmlydHVhbCBQQ01DSUEgc29ja2V0IGFic3RyYWN0aW9uIGxheWVyLiBNeSBuZXh0IHN0ZXA6IEknbGwgbmVlZCB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIOKAkyBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgYGRyaXZlcnMvcGNtY2lhL2AgZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwgdHJlZS4gVGhhdCB3aWxsIGxpa2VseSBnaXZlIG1lIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NzMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NDEuODIwOTIyMjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvcGNtY2lhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImJjbTYzeHhfcGNtY2lhLmNcIixcbiAgICBcImJjbTYzeHhfcGNtY2lhLmhcIixcbiAgICBcImNhcmRidXMuY1wiLFxuICAgIFwiY2lycnVzLmhcIixcbiAgICBcImNpc3RwbC5jXCIsXG4gICAgXCJjcy5jXCIsXG4gICAgXCJjc19pbnRlcm5hbC5oXCIsXG4gICAgXCJkYjF4eHhfc3MuY1wiLFxuICAgIFwiZHMuY1wiLFxuICAgIFwiZWxlY3RyYV9jZi5jXCIsXG4gICAgXCJpODIzNjUuaFwiLFxuICAgIFwibWF4MTYwMC5jXCIsXG4gICAgXCJtYXgxNjAwLmhcIixcbiAgICBcIm8ybWljcm8uaFwiLFxuICAgIFwib21hcF9jZi5jXCIsXG4gICAgXCJwY21jaWFfY2lzLmNcIixcbiAgICBcInBjbWNpYV9yZXNvdXJjZS5jXCIsXG4gICAgXCJwZDY3MjkuY1wiLFxuICAgIFwicGQ2NzI5LmhcIixcbiAgICBcInB4YTJ4eF9iYXNlLmNcIixcbiAgICBcInB4YTJ4eF9iYXNlLmhcIixcbiAgICBcInB4YTJ4eF9zaGFycHNsLmNcIixcbiAgICBcInJpY29oLmhcIixcbiAgICBcInJzcmNfbWdyLmNcIixcbiAgICBcInJzcmNfbm9uc3RhdGljLmNcIixcbiAgICBcInNhMTEwMF9nZW5lcmljLmNcIixcbiAgICBcInNhMTEwMF9nZW5lcmljLmhcIixcbiAgICBcInNhMTEwMF9oMzYwMC5jXCIsXG4gICAgXCJzYTExMTFfZ2VuZXJpYy5jXCIsXG4gICAgXCJzYTExMTFfZ2VuZXJpYy5oXCIsXG4gICAgXCJzYTExMTFfam9ybmFkYTcyMC5jXCIsXG4gICAgXCJzYTExMTFfbmVwb25zZXQuY1wiLFxuICAgIFwic2ExMXh4X2Jhc2UuY1wiLFxuICAgIFwic2ExMXh4X2Jhc2UuaFwiLFxuICAgIFwic29jX2NvbW1vbi5jXCIsXG4gICAgXCJzb2NfY29tbW9uLmhcIixcbiAgICBcInNvY2tldF9zeXNmcy5jXCIsXG4gICAgXCJ0aTExM3guaFwiLFxuICAgIFwidG9waWMuaFwiLFxuICAgIFwidmc0NjguaFwiLFxuICAgIFwieHhzMTUwMF9zcy5jXCIsXG4gICAgXCJ5ZW50YV9zb2NrZXQuY1wiLFxuICAgIFwieWVudGFfc29ja2V0LmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NDEuODIxMDA2OTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzQ2NjI5MDQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGB5ZW50YV9zb2NrZXRgIEVtdWxhdGlvbiBpbiBRRU1VL0dDRSoqXG5cbk9rYXksIHNvIGB5ZW50YV9zb2NrZXRgLi4uIHRoYXQncyBQQ0kgQ2FyZEJ1cywgcmlnaHQ/IFJpZ2h0LiBOb3csIHRoZSBxdWVzdGlvbiBpcywgaG93IGlzIHRoaXMgaGFuZGxlZCBpbiBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8gU3BlY2lmaWNhbGx5LCBhcmUgd2UgdGFsa2luZyBhYm91dCB0aGUgZW11bGF0aW9uIG9mIHNvbWV0aGluZyBsaWtlIGEgVGV4YXMgSW5zdHJ1bWVudHMgQ2FyZEJ1cyBjb250cm9sbGVyPyBLbm93aW5nIFFFTVUsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgYW5zd2VyLiBBbmQsIHllYWgsIGFzIEkgc3VzcGVjdGVkLCB2YW5pbGxhIFFFTVUgZG9lc24ndCBoYXZlIGEgZGVkaWNhdGVkIENhcmRCdXMgb3IgUENNQ0lBIFBDSSBkZXZpY2UgbW9kZWwuIFRoYXQncyBub3QgZW50aXJlbHkgc3VycHJpc2luZy5cblxuQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gQ291bGQgdGhlcmUgYmUgYSB3b3JrYXJvdW5kPyBQZXJoYXBzIHNvbWUgbWV0aG9kIHRvIGluc3RhbnRpYXRlIGEgUENNQ0lBIGRldmljZSB0aHJvdWdoIHN5c2ZzLCBvciBhIG1vY2tpbmcgbWVjaGFuaXNtLCBvci4uLiBzb21ldGhpbmcgbGlrZSB0aGF0PyBJdCdzIHdvcnRoIGRpZ2dpbmcgYSBiaXQgZGVlcGVyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gTGV0J3Mgc2VlIGlmIGBzb2NrZXRfc3lzZnMuY2Agb3IgYGRzLmNgIHNoZWQgYW55IGxpZ2h0IG9uIHRoaXMuIE1heWJlIHRoZXJlJ3MgYSBoaWRkZW4gdHJpY2sgSSd2ZSBtaXNzZWQuIEknbGwgbmVlZCB0byBleHBsb3JlIHRob3NlIGZpbGVzIGNhcmVmdWxseSB0byBmaW5kIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc0MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NDUuMjg3MzAxMTU3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjM5MDYxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY21jaWFfYnVzX3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wY21jaWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaD0xMjg9dm9pZCBwY21jaWFfcHV0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTtcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgtMTMzLS8qIGRzLmMgKi9cXG5kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oOjEzNDpleHRlcm4gY29uc3Qgc3RydWN0IGJ1c190eXBlIHBjbWNpYV9idXNfdHlwZTtcXG5kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oLTEzNS1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmM9MTY5PWludCBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY21jaWFfZHJpdmVyICpkcml2ZXIpXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTE3OC1cXHQvKiBpbml0aWFsaXplIGNvbW1vbiBmaWVsZHMgKi9cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjE3OTpcXHRkcml2ZXItXFx1MDAzZWRydi5idXMgPSBcXHUwMDI2cGNtY2lhX2J1c190eXBlO1xcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTgwLVxcdGRyaXZlci1cXHUwMDNlZHJ2Lm93bmVyID0gZHJpdmVyLVxcdTAwM2Vvd25lcjtcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmM9NDc5PXN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2RldmljZV9hZGQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTUwOS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjUxMDpcXHRwX2Rldi1cXHUwMDNlZGV2LmJ1cyA9IFxcdTAwMjZwY21jaWFfYnVzX3R5cGU7XFxuZHJpdmVycy9wY21jaWEvZHMuYy01MTEtXFx0cF9kZXYtXFx1MDAzZWRldi5wYXJlbnQgPSBzLVxcdTAwM2VkZXYucGFyZW50O1xcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYz02NzU9c3RhdGljIHZvaWQgcGNtY2lhX3JlcXVlcnkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTY4OS1cXHQgKiBkZXRlcm1pbmUgaXQgYWdhaW4sIG92ZXJ3cml0aW5nIG9sZCB2YWx1ZXMgaWYgbmVjZXNzYXJ5LiAqL1xcbmRyaXZlcnMvcGNtY2lhL2RzLmM6NjkwOlxcdGJ1c19mb3JfZWFjaF9kZXYoXFx1MDAyNnBjbWNpYV9idXNfdHlwZSwgTlVMTCwgTlVMTCwgcGNtY2lhX3JlcXVlcnlfY2FsbGJhY2spO1xcbmRyaXZlcnMvcGNtY2lhL2RzLmMtNjkxLVxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy03MjQtXFx0ICogc29ja2V0LiBUaGlzIGRvZXMgbm90IG1hdHRlciwgdGhvdWdoLiAqL1xcbmRyaXZlcnMvcGNtY2lhL2RzLmM6NzI1OlxcdGlmIChidXNfcmVzY2FuX2RldmljZXMoXFx1MDAyNnBjbWNpYV9idXNfdHlwZSkpXFxuZHJpdmVycy9wY21jaWEvZHMuYy03MjYtXFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnMtXFx1MDAzZWRldiwgXFxcInJlc2Nhbm5pbmcgdGhlIGJ1cyBmYWlsZWRcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYz0xMjM4PXN0YXRpYyBpbnQgcGNtY2lhX2J1c19yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTI0MC1cXHRkZXZfZGJnKFxcdTAwMjZza3QtXFx1MDAzZWRldiwgXFxcInJlc3VtaW5nIHNvY2tldCAlZFxcXFxuXFxcIiwgc2t0LVxcdTAwM2Vzb2NrKTtcXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEyNDE6XFx0YnVzX2Zvcl9lYWNoX2RldihcXHUwMDI2cGNtY2lhX2J1c190eXBlLCBOVUxMLCBza3QsIHBjbWNpYV9idXNfcmVzdW1lX2NhbGxiYWNrKTtcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEyNDItXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTEyNDU9c3RhdGljIGludCBwY21jaWFfYnVzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTI0Ny1cXHRkZXZfZGJnKFxcdTAwMjZza3QtXFx1MDAzZWRldiwgXFxcInN1c3BlbmRpbmcgc29ja2V0ICVkXFxcXG5cXFwiLCBza3QtXFx1MDAzZXNvY2spO1xcbmRyaXZlcnMvcGNtY2lhL2RzLmM6MTI0ODpcXHRpZiAoYnVzX2Zvcl9lYWNoX2RldihcXHUwMDI2cGNtY2lhX2J1c190eXBlLCBOVUxMLCBza3QsXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMjQ5LVxcdFxcdFxcdCAgICAgcGNtY2lhX2J1c19zdXNwZW5kX2NhbGxiYWNrKSkge1xcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYz0xNDA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwY21jaWFfYnVzX3BtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQwOC1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjE0MDk6Y29uc3Qgc3RydWN0IGJ1c190eXBlIHBjbWNpYV9idXNfdHlwZSA9IHtcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTE0MTAtXFx0Lm5hbWUgPSBcXFwicGNtY2lhXFxcIixcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmM9MTQyMD1zdGF0aWMgaW50IF9faW5pdCBpbml0X3BjbWNpYV9idXModm9pZClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQyMy1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjE0MjQ6XFx0cmV0ID0gYnVzX3JlZ2lzdGVyKFxcdTAwMjZwY21jaWFfYnVzX3R5cGUpO1xcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQyNS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xNDMyLVxcdFxcdFxcdFxcXCJwY21jaWE6IGNsYXNzX2ludGVyZmFjZV9yZWdpc3RlciBlcnJvcjogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9wY21jaWEvZHMuYzoxNDMzOlxcdFxcdGJ1c191bnJlZ2lzdGVyKFxcdTAwMjZwY21jaWFfYnVzX3R5cGUpO1xcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQzNC1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYz0xNDQzPXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3BjbWNpYV9idXModm9pZClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQ0Ni1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjE0NDc6XFx0YnVzX3VucmVnaXN0ZXIoXFx1MDAyNnBjbWNpYV9idXNfdHlwZSk7XFxuZHJpdmVycy9wY21jaWEvZHMuYy0xNDQ4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NDUuMzQ5Njk1MDk5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3MzE0NDE2ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVsdmluZyBpbnRvIHRoZSBQQ25ldF9DUyBEcml2ZXIgYW5kIFNoYXJlZCBNZW1vcnkgU2V0dXAqKlxuXG5Pa2F5LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBgcGNuZXRfY3NgIGRyaXZlcidzIGlubmVyIHdvcmtpbmdzLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGBzZXR1cF9zaG1lbV93aW5kb3dgLiBJdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggc2hhcmVkIG1lbW9yeS4gU28sIEknbGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGBwY25ldF9jc2AgZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgZ3Jhc3Agb24gcHJlY2lzZWx5ICpob3cqIGFuZCAqd2hlcmUqIGBzZXR1cF9zaG1lbV93aW5kb3dgIGlzIGludm9rZWQgd2l0aGluIHRoZSBkcml2ZXIncyBleGVjdXRpb24gZmxvdy4gVGhpcyB3aWxsIGJlIHRoZSBmaXJzdCBhbmQgbW9zdCBpbXBvcnRhbnQgc3RlcCB0byBmaW5kaW5nIHRoZSBhbnN3ZXIgSSBzZWVrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzIzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NDkuMDgxMTQwMTQ5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ5NDczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXR1cF9zaG1lbV93aW5kb3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYz0xMDI9c3RhdGljIGludCBzZXRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MTAzOnN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTEwNC1cXHRcXHRcXHQgICAgICBpbnQgc3RvcF9wZywgaW50IGNtX29mZnNldCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9NTY1PXN0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTYwOS0gICAgaWYgKCh1c2Vfc2htZW0gPT0gMCkgfHwgKCFoYXNfc2htZW0gXFx1MDAyNlxcdTAwMjYgKHVzZV9zaG1lbSA9PSAtMSkpIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjYxMDpcXHQoc2V0dXBfc2htZW1fd2luZG93KGxpbmssIHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQpICE9IDApKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy02MTEtXFx0c2V0dXBfZG1hX2NvbmZpZyhsaW5rLCBzdGFydF9wZywgc3RvcF9wZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9MTQwMT1zdGF0aWMgdm9pZCBzaG1lbV9ibG9ja19vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTE0MTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjE0MTE6c3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMtMTQxMi1cXHRcXHRcXHQgICAgICBpbnQgc3RvcF9wZywgaW50IGNtX29mZnNldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NDkuMTI4NjM5MTg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MzM2NjUwMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgdGhyb3VnaDpcblxuKipBbmFseXppbmcgdGhlIGBwY25ldF9jb25maWdgIFNlY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBwY25ldF9jb25maWdgIHNlY3Rpb24sIHNwZWNpZmljYWxseSBsaW5lcyA1NjUgdGhyb3VnaCA2MjAuIEknbSBmb2N1c2luZyBvbiB0aGlzIGFyZWEgYmVjYXVzZSBpdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBQQ25ldCBkcml2ZXIgYXJlIGRlZmluZWQuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHdoZXJlIHRoZSBkZXZpY2UgZ2V0cyBpdHMgaW5pdGlhbCBzZXR0aW5ncywgcmlnaHQ/IEknbSBhbnRpY2lwYXRpbmcgd2UnbGwgZmluZCB0aGluZ3MgbGlrZSB0aGUgYmFzZSBJL08gYWRkcmVzcywgdGhlIGludGVycnVwdCB2ZWN0b3IsIG1heWJlIHNvbWUgaW5pdGlhbCBidWZmZXIgc2l6ZXMsIGFuZCBkZWZpbml0ZWx5IGhvdyBpdCBoYW5kbGVzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgRE1BIHVzYWdlLCBzaGFyZWQgbWVtb3J5IG1hcHBpbmcg4oCTIGFueXRoaW5nIHJlbGF0ZWQgdG8gaG93IHRoZSBQQ25ldCBhY3R1YWxseSB0YWxrcyB0byB0aGUgaGFyZHdhcmUgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBMZXQgbWUgY2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhpcyBjYXJkLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDc4LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NTEuNzYyMzA2NTA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTY1LFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTY1OlxcdHN0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxcbiA1NjY6XFx0e1xcbiA1Njc6XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLVxcdTAwM2Vwcml2O1xcbiA1Njg6XFx0ICAgIHN0cnVjdCBwY25ldF9kZXYgKmluZm8gPSBQUklWKGRldik7XFxuIDU2OTpcXHQgICAgaW50IHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQ7XFxuIDU3MDpcXHQgICAgaW50IGhhc19zaG1lbSA9IDA7XFxuIDU3MTpcXHQgICAgc3RydWN0IGh3X2luZm8gKmxvY2FsX2h3X2luZm87XFxuIDU3MjpcXHRcXG4gNTczOlxcdCAgICBkZXZfZGJnKFxcdTAwMjZsaW5rLVxcdTAwM2VkZXYsIFxcXCJwY25ldF9jb25maWdcXFxcblxcXCIpO1xcbiA1NzQ6XFx0XFxuIDU3NTpcXHQgICAgbG9jYWxfaHdfaW5mbyA9IHBjbmV0X3RyeV9jb25maWcobGluaywgXFx1MDAyNmhhc19zaG1lbSwgMCk7XFxuIDU3NjpcXHQgICAgaWYgKCFsb2NhbF9od19pbmZvKSB7XFxuIDU3NzpcXHRcXHQgICAgLyogY2hlY2sgd2hldGhlciBmb3JjaW5nIGlvX2xpbmVzIHRvIDE2IGhlbHBzLi4uICovXFxuIDU3ODpcXHRcXHQgICAgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspO1xcbiA1Nzk6XFx0XFx0ICAgIGxvY2FsX2h3X2luZm8gPSBwY25ldF90cnlfY29uZmlnKGxpbmssIFxcdTAwMjZoYXNfc2htZW0sIDEpO1xcbiA1ODA6XFx0XFx0ICAgIGlmIChsb2NhbF9od19pbmZvID09IE5VTEwpIHtcXG4gNTgxOlxcdFxcdFxcdCAgICBkZXZfbm90aWNlKFxcdTAwMjZsaW5rLVxcdTAwM2VkZXYsIFxcXCJ1bmFibGUgdG8gcmVhZCBoYXJkd2FyZSBuZXRcXFwiXFxuIDU4MjpcXHRcXHRcXHRcXHQgICAgXFxcIiBhZGRyZXNzIGZvciBpbyBiYXNlICUjM2x4XFxcXG5cXFwiLCBkZXYtXFx1MDAzZWJhc2VfYWRkcik7XFxuIDU4MzpcXHRcXHRcXHQgICAgZ290byBmYWlsZWQ7XFxuIDU4NDpcXHRcXHQgICAgfVxcbiA1ODU6XFx0ICAgIH1cXG4gNTg2OlxcdFxcbiA1ODc6XFx0ICAgIGluZm8tXFx1MDAzZWZsYWdzID0gbG9jYWxfaHdfaW5mby1cXHUwMDNlZmxhZ3M7XFxuIDU4ODpcXHQgICAgLyogQ2hlY2sgZm9yIHVzZXIgb3ZlcnJpZGVzICovXFxuIDU4OTpcXHQgICAgaW5mby1cXHUwMDNlZmxhZ3MgfD0gKGRlbGF5X291dHB1dCkgPyBERUxBWV9PVVRQVVQgOiAwO1xcbiA1OTA6XFx0ICAgIGlmICgobGluay1cXHUwMDNlbWFuZl9pZCA9PSBNQU5GSURfU09DS0VUKSBcXHUwMDI2XFx1MDAyNlxcbiA1OTE6XFx0XFx0KChsaW5rLVxcdTAwM2VjYXJkX2lkID09IFBST0RJRF9TT0NLRVRfTFBFKSB8fFxcbiA1OTI6XFx0XFx0IChsaW5rLVxcdTAwM2VjYXJkX2lkID09IFBST0RJRF9TT0NLRVRfTFBFX0NGKSB8fFxcbiA1OTM6XFx0XFx0IChsaW5rLVxcdTAwM2VjYXJkX2lkID09IFBST0RJRF9TT0NLRVRfRUlPKSkpXFxuIDU5NDpcXHRcXHRpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+VVNFX0JJR19CVUY7XFxuIDU5NTpcXHQgICAgaWYgKCF1c2VfYmlnX2J1ZilcXG4gNTk2OlxcdFxcdGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5VU0VfQklHX0JVRjtcXG4gNTk3OlxcdFxcbiA1OTg6XFx0ICAgIGlmIChpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFVTRV9CSUdfQlVGKSB7XFxuIDU5OTpcXHRcXHRzdGFydF9wZyA9IFNPQ0tFVF9TVEFSVF9QRztcXG4gNjAwOlxcdFxcdHN0b3BfcGcgPSBTT0NLRVRfU1RPUF9QRztcXG4gNjAxOlxcdFxcdGNtX29mZnNldCA9IDB4MTAwMDA7XFxuIDYwMjpcXHQgICAgfSBlbHNlIHtcXG4gNjAzOlxcdFxcdHN0YXJ0X3BnID0gUENORVRfU1RBUlRfUEc7XFxuIDYwNDpcXHRcXHRzdG9wX3BnID0gUENORVRfU1RPUF9QRztcXG4gNjA1OlxcdFxcdGNtX29mZnNldCA9IDA7XFxuIDYwNjpcXHQgICAgfVxcbiA2MDc6XFx0XFxuIDYwODpcXHQgICAgLyogaGFzX3NobWVtIGlzIGlnbm9yZWQgaWYgdXNlX3NobWVtICE9IC0xICovXFxuIDYwOTpcXHQgICAgaWYgKCh1c2Vfc2htZW0gPT0gMCkgfHwgKCFoYXNfc2htZW0gXFx1MDAyNlxcdTAwMjYgKHVzZV9zaG1lbSA9PSAtMSkpIHx8XFxuIDYxMDpcXHRcXHQoc2V0dXBfc2htZW1fd2luZG93KGxpbmssIHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQpICE9IDApKVxcbiA2MTE6XFx0XFx0c2V0dXBfZG1hX2NvbmZpZyhsaW5rLCBzdGFydF9wZywgc3RvcF9wZyk7XFxuIDYxMjpcXHRcXG4gNjEzOlxcdCAgICBlaV9zdGF0dXMubmFtZSA9IFxcXCJORTIwMDBcXFwiO1xcbiA2MTQ6XFx0ICAgIGVpX3N0YXR1cy53b3JkMTYgPSAxO1xcbiA2MTU6XFx0ICAgIGVpX3N0YXR1cy5yZXNldF84MzkwID0gcGNuZXRfcmVzZXRfODM5MDtcXG4gNjE2OlxcdFxcbiA2MTc6XFx0ICAgIGlmIChpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IChJU19ETDEwMDE5fElTX0RMMTAwMjIpKVxcbiA2MTg6XFx0XFx0bWlpX3BoeV9wcm9iZShkZXYpO1xcbiA2MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIxOjU3OjUxLjc2MjQxNjMyNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MTk1MTk5ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gYHBjbmV0X2NvbmZpZ2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcGNuZXRfY29uZmlnYCBpcyBhY3R1YWxseSB1c2VkLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIHJvbGUgYW5kIGltcGFjdCBpbiB0aGUgc3lzdGVtLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byB0cmFjZSBpdHMgY2FsbHMg4oCTIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIFRpbWUgdG8gZ2V0IGRvd24gaW50byB0aGUgY29kZSBhbmQgc3RhcnQgbG9va2luZy4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGRlYnVnZ2luZyBwcm9jZXNzLiBMZXQncyBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM0NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NTUuOTU3NjE4Njc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY5NTUxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY25ldF9jb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYz05Mz1zdGF0aWMgdm9pZCBtaWlfcGh5X3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYzo5NDpzdGF0aWMgaW50IHBjbmV0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTk1LXN0YXRpYyB2b2lkIHBjbmV0X3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jPTIzNT1zdGF0aWMgaW50IHBjbmV0X3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTI1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MjUzOiAgICByZXR1cm4gcGNuZXRfY29uZmlnKGxpbmspO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0yNTQtfSAvKiBwY25ldF9hdHRhY2ggKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYz01MDQ9c3RhdGljIHN0cnVjdCBod19pbmZvICpwY25ldF90cnlfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTU2NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6NTY1OnN0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy01NjYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTU3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6NTczOiAgICBkZXZfZGJnKFxcdTAwMjZsaW5rLVxcdTAwM2VkZXYsIFxcXCJwY25ldF9jb25maWdcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy01NzQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMtNjQ2LSAgICByZXR1cm4gLUVOT0RFVjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6NjQ3On0gLyogcGNuZXRfY29uZmlnICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTY0OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NTYuMDA1MzE4NzkzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgyNzQ3ODA0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUENNQ0lBIFJlYWNoYWJpbGl0eSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBwY25ldF9jcy5jYCwgYW5kIHNwZWNpZmljYWxseSBgcGNuZXRfcHJvYmVgLiBUaGUgY29kZSBzaG93cyBgcGNuZXRfcHJvYmVgIGJlaW5nIGNhbGxlZCBieSB0aGUgYHBjbmV0X2RyaXZlcmAgd2hpY2ggaXMgcmVnaXN0ZXJlZCBhcyBhIFBDTUNJQSBkcml2ZXIuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbiBleHBlcnQgaW4gZnV6emluZyBhbmQga2VybmVsIGludGVybmFscywgaXMgcmVhY2hhYmlsaXR5LiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIFBDTUNJQSBkZXZpY2VzLCBhbmQgdGhlcmVmb3JlIGBwY25ldF9wcm9iZWAsIGFyZSByZWFjaGFibGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQg4oCTIHNwZWNpZmljYWxseSwgc3RhbmRhcmQgUUVNVSBvbiB4ODZfNjQuIFRoZSBjb3JlIHByaW5jaXBsZTogaWYgaXQncyBub3QgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQsIGl0IHNob3VsZG4ndCBiZSBmdXp6ZWQuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSB0b29saW5nIHN1cHBvcnRzIFBDTUNJQS4gSSBrbm93IHN5emthbGxlciBpcyBteSBwcmltYXJ5IGZ1enppbmcgdG9vbCwgYnV0IEkgY2FuJ3Qgc2VhcmNoIGZvciBzeXpsYW5nIGRlc2NyaXB0aW9ucyBvciBleHByZXNzaW9ucyB3aXRoICdsb25nIHN5el8nIHVzaW5nIHRoZSBkZWNsYXJlZCB0b29scy4gVGhpcyBpcyBhIGNydWNpYWwgbGltaXRhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYSB3YXkgdG8gc2VhcmNoIGZvciBzeXprYWxsZXIgZGVzY3JpcHRpb25zLlxuXG5NeSBuZXh0IGxpbmUgb2YgdGhvdWdodCBpcyB3aGV0aGVyIHRoZXJlJ3MgYW55IHZpcnR1YWwgb3IgZW11bGF0ZWQgUENNQ0lBIGhhcmR3YXJlIGluIHRoZSBMaW51eCBrZXJuZWwgb3IgUUVNVSB0aGF0IEkgY2FuIHRhcmdldC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBhdmFpbGFiaWxpdHkgb2YgZW11bGF0ZWQgUENNQ0lBIHNvY2tldHMuICBJJ20gZ29pbmcgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL3BjbWNpYS9gIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsIHNvdXJjZS4gSSBzZWUgYSBidW5jaCBvZiBkcml2ZXJzIHRoZXJlLCBtYW55IGZvciBBUk0gYW5kIE1JUFMgU29Dcy4gVGhlcmUncyBhbHNvIGB5ZW50YV9zb2NrZXQuY2AsIGEgUENJLUNhcmRCdXMgYnJpZGdlLCBhbmQgYGk4MjM2NS5jYCwgd2hpY2ggaXMgYW4gSVNBIFBDTUNJQSBjb250cm9sbGVyLiBUaGUgYHBkNjcyOS5jYCBpcyBQQ0ktUENNQ0lBIGJyaWRnZS5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogQ2FuIGFueSBvZiB0aGVzZSBiZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VPyBJIG5lZWQgdG8ga25vdyBpZiBRRU1VIGVtdWxhdGVzIGFueSBvZiB0aGVzZSBjb250cm9sbGVycy4gU3BlY2lmaWNhbGx5LCBkb2VzIFFFTVUgaGF2ZSBhIFBENjcyOSwgWWVudGEsIG9yIGk4MjM2NT8gVGhpbmtpbmcgYmFjayBvbiBteSBRRU1VIGV4cGVyaWVuY2UsIEkgcmVjYWxsIHRoYXQgUENNQ0lBIHN1cHBvcnQgd2FzIHByZXNlbnQgaW4gdGhlIHBhc3QgZm9yIHRoZSBQWEEyeHggYXJjaGl0ZWN0dXJlLCBpbiBmYWN0IEkgcmVtZW1iZXIgaXQgYmVpbmcgZGVwcmVjYXRlZCBvciByZW1vdmVkLCBhbmQgdGhhdCBpdCBuZXZlciBpbmNsdWRlZCBQQ0kgQ2FyZEJ1cyBvciBQQ01DSUEgYnJpZGdlcy4gIFNvIHN0YW5kYXJkIGBxZW11LXN5c3RlbS14ODZfNjRgIChsaWtlIGAtbWFjaGluZSBxMzVgIG9yIGBwY2ApIGlzIHVubGlrZWx5IHRvIHByb3ZpZGUgUENNQ0lBLlxuXG5UaGVuIEkgYW0gcmVtaW5kZWQgb2YgYG5lMmtfcGNpYCwgd2hpY2ggUUVNVSAqZG9lcyogZW11bGF0ZS4gSG93ZXZlciwgdGhlIGNvZGUgaGVyZSBpcyB0YXJnZXRpbmcgYHBjbmV0X2NzLmNgLCB3aGljaCBpcyByZWdpc3RlcmVkIGZvciBQQ01DSUEgZGV2aWNlcy4gTXkgdW5kZXJzdGFuZGluZyBvZiBQQ01DSUEgaXMgdGhhdCBpdCByZWxpZXMgb24gc29ja2V0IGV2ZW50czogYSBjYXJkIG5lZWRzIHRvIGJlIGluc2VydGVkIGludG8gYSBzb2NrZXQuIFRoZSBgcGNjYXJkZGAga2VybmVsIHRocmVhZCB3aWxsIHJ1biB3aGVuIGEgc29ja2V0IGV2ZW50IGhhcHBlbnMuIEl0IG5lZWRzIHRvIHJlYWQgdGhlIENJUyBmcm9tIHRoZSBjYXJkIGFuZCB0aGVuIGNyZWF0ZSBhbmQgYmluZCBhIGBwY21jaWFfZGV2aWNlYCB2aWEgdGhlIHBjbWNpYSBidXMuXG5cblRoZXJlZm9yZSwgc2luY2UgYHBjbmV0X2NzYCBpcyBhIFBDTUNJQSBkcml2ZXIsIGFuZCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyB3YXkgdG8gY3JlYXRlIGEgdmlydHVhbCBQQ01DSUEgc29ja2V0IG9yIGNhcmQsIHRoZSBjb2RlIHdpbGwgbGlrZWx5IG9ubHkgYmUgcmVhY2hlZCB3aGVuIGEgKnJlYWwqIFBDTUNJQSBkZXZpY2UgaXMgcGx1Z2dlZCBpbiBvciBhIHByb3BlciBlbXVsYXRpb24gb2YgYSBQQ01DSUEgc29ja2V0IGNhbiBiZSBlc3RhYmxpc2hlZC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBrZXJuZWwncyBzeXNmcyBpbnRlcmZhY2UgZm9yIGEgbWV0aG9kIHRvIGluamVjdCBvciBjcmVhdGUgUENNQ0lBIGRldmljZXMgb3Igc29ja2V0cy4gSSdtIGdvaW5nIHRvIHNlYXJjaCB0aGUgYGRyaXZlcnMvcGNtY2lhL2AgZGlyZWN0b3J5IGZvciBhbnkgc3lzZnMgYXR0cmlidXRlcyByZWxhdGVkIHRvIGRldmljZSBjcmVhdGlvbiwgYmluZGluZywgb3IgaW5qZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA4NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTg6MDQuMjgwMTAxNjQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMxODAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERVZJQ0VfQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BjbWNpYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjbWNpYS9kcy5jPTEwMDI9c3RhdGljIHNzaXplX3QgZmllbGQjI19zaG93IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFx0XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDA2LX1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9wY21jaWEvZHMuYzoxMDA3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhmaWVsZCk7XFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDA4LVxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYz0xMDEwPXN0YXRpYyBzc2l6ZV90IG5hbWUjI19zaG93IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFx0XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDE0LX1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9wY21jaWEvZHMuYzoxMDE1OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhuYW1lKTtcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwMTYtXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTEwMjU9c3RhdGljIHNzaXplX3QgZnVuY3Rpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDMwLX1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEwMzE6c3RhdGljIERFVklDRV9BVFRSX1JPKGZ1bmN0aW9uKTtcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwMzItXFxuZHJpdmVycy9wY21jaWEvZHMuYz0xMDMzPXN0YXRpYyBzc2l6ZV90IHJlc291cmNlc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTA0My19XFxuZHJpdmVycy9wY21jaWEvZHMuYzoxMDQ0OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhyZXNvdXJjZXMpO1xcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTA0NS1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmM9MTA1Nj1zdGF0aWMgc3NpemVfdCBwbV9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDcxLX1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEwNzI6c3RhdGljIERFVklDRV9BVFRSX1JXKHBtX3N0YXRlKTtcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwNzMtXFxuZHJpdmVycy9wY21jaWEvZHMuYz0xMDc0PXN0YXRpYyBzc2l6ZV90IG1vZGFsaWFzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDkzLX1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEwOTQ6c3RhdGljIERFVklDRV9BVFRSX1JPKG1vZGFsaWFzKTtcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwOTUtXFxuZHJpdmVycy9wY21jaWEvZHMuYz0xMDk2PXN0YXRpYyBzc2l6ZV90IGFsbG93X2Z1bmNfaWRfbWF0Y2hfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMTEwLX1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjExMTE6c3RhdGljIERFVklDRV9BVFRSX1dPKGFsbG93X2Z1bmNfaWRfbWF0Y2gpO1xcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTExMi1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9MTA5OT1zdGF0aWMgc3NpemVfdCBzdG9yZV9pb19kYihzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTExMjgtfVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM6MTEyOTpzdGF0aWMgREVWSUNFX0FUVFIoYXZhaWxhYmxlX3Jlc291cmNlc19pbywgMDYwMCwgc2hvd19pb19kYiwgc3RvcmVfaW9fZGIpO1xcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtMTEzMC1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9MTE2NT1zdGF0aWMgc3NpemVfdCBzdG9yZV9tZW1fZGIoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy0xMTk0LX1cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjExOTU6c3RhdGljIERFVklDRV9BVFRSKGF2YWlsYWJsZV9yZXNvdXJjZXNfbWVtLCAwNjAwLCBzaG93X21lbV9kYiwgc3RvcmVfbWVtX2RiKTtcXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTExOTYtXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmM9NzAzPXN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKFxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jLTcyNy19XFxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jOjcyODpzdGF0aWMgREVWSUNFX0FUVFIoc3RhdHVzLCBTX0lSVUdPLCBzaG93X3N0YXR1cywgTlVMTCk7XFxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jLTcyOS1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTM0PXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zaG93X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTQ0LX1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzo0NTpzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF90eXBlLCAwNDQ0LCBwY2NhcmRfc2hvd190eXBlLCBOVUxMKTtcXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy00Ni1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYz00Nz1zdGF0aWMgc3NpemVfdCBwY2NhcmRfc2hvd192b2x0YWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy01OC19XFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM6NTk6c3RhdGljIERFVklDRV9BVFRSKGNhcmRfdm9sdGFnZSwgMDQ0NCwgcGNjYXJkX3Nob3dfdm9sdGFnZSwgTlVMTCk7XFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtNjAtXFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM9NjE9c3RhdGljIHNzaXplX3QgcGNjYXJkX3Nob3dfdnBwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy02OC19XFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM6Njk6c3RhdGljIERFVklDRV9BVFRSKGNhcmRfdnBwLCAwNDQ0LCBwY2NhcmRfc2hvd192cHAsIE5VTEwpO1xcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTcwLVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTcxPXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zaG93X3ZjYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtNzgtfVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jOjc5OnN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX3ZjYywgMDQ0NCwgcGNjYXJkX3Nob3dfdmNjLCBOVUxMKTtcXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy04MC1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTgyPXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9pbnNlcnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTkzLX1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzo5NDpzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF9pbnNlcnQsIDAyMDAsIE5VTEwsIHBjY2FyZF9zdG9yZV9pbnNlcnQpO1xcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTk1LVxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM9MTA1PXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9jYXJkX3BtX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTEyNS19XFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM6MTI2OnN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX3BtX3N0YXRlLCAwNjQ0LCBwY2NhcmRfc2hvd19jYXJkX3BtX3N0YXRlLCBwY2NhcmRfc3RvcmVfY2FyZF9wbV9zdGF0ZSk7XFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtMTI3LVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTEyOD1zdGF0aWMgc3NpemVfdCBwY2NhcmRfc3RvcmVfZWplY3Qoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtMTQwLX1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzoxNDE6c3RhdGljIERFVklDRV9BVFRSKGNhcmRfZWplY3QsIDAyMDAsIE5VTEwsIHBjY2FyZF9zdG9yZV9lamVjdCk7XFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtMTQyLVxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM9MTUyPXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9pcnFfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy0xNzMtfVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jOjE3NDpzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF9pcnFfbWFzaywgMDYwMCwgcGNjYXJkX3Nob3dfaXJxX21hc2ssIHBjY2FyZF9zdG9yZV9pcnFfbWFzayk7XFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtMTc1LVxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM9MTg0PXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy0yMDEtfVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jOjIwMjpzdGF0aWMgREVWSUNFX0FUVFIoYXZhaWxhYmxlX3Jlc291cmNlc19zZXR1cF9kb25lLCAwNjAwLCBwY2NhcmRfc2hvd19yZXNvdXJjZSwgcGNjYXJkX3N0b3JlX3Jlc291cmNlKTtcXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy0yMDMtXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYz0xNzY9c3RhdGljIHNzaXplX3Qgc2hvd195ZW50YV9yZWdpc3RlcnMoc3RydWN0IGRldmljZSAqeWVudGFkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYy0yMDYtXFxuZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmM6MjA3OnN0YXRpYyBERVZJQ0VfQVRUUih5ZW50YV9yZWdpc3RlcnMsIFNfSVJVU1IsIHNob3dfeWVudGFfcmVnaXN0ZXJzLCBOVUxMKTtcXG5kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYy0yMDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIxOjU4OjA0LjMyODQyNjM3N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NjA1NDE4NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogUENNQ0lBIGlzIFVucmVhY2hhYmxlKipcblxuT2theSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBjb2RlIGlzIHdvcnRoIGZ1enppbmcuIExldCBtZSBzdGFydCBieSBsb29raW5nIGF0IGBzb2NrZXRfc3lzZnMuY2AuIEkgc2VlIGBwY2NhcmRfc3RvcmVfaW5zZXJ0YCwgYHBjY2FyZF9zdG9yZV9lamVjdGAsIGV0Yy4gVGhvc2UgYXJlIGFsbCByZWxhdGVkIHRvIGBwY21jaWFfc29ja2V0YCBkZXZpY2VzLCB3aGljaCBhcmUgb25seSByZWdpc3RlcmVkIHdoZW4gYSBzb2NrZXQgZHJpdmVyIGxpa2UgYHllbnRhX3NvY2tldGAgb3IgYHBkNjcyOWAgcHJvYmVzLiBCdXQgY2FuIGFueSBvZiB0aG9zZSBzb2NrZXQgZHJpdmVycyBwcm9iZSBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSB4ODZfNjQ/IE5vISBUaGVyZSBhcmUgbm8gUENNQ0lBIHNvY2tldCBkZXZpY2VzIGVtdWxhdGVkIGluIHRob3NlIGVudmlyb25tZW50cyBvbiBhbWQ2NC4gRXZlbiBpZiB0aGVyZSB3ZXJlLCBpbnNlcnRpbmcgYSBjYXJkIHdvdWxkIGludm9sdmUgcmVhZGluZyB0aGUgY2FyZCdzIENJUyBmcm9tIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBJIGRvbid0IGhhdmUuXG5cbkxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBTeXprYWxsZXIuIERvZXMgaXQgZW11bGF0ZSBQQ01DSUE/IE5vcGUuXG5cbk9rYXksIGJhY2sgdG8gdGhlIGluc3RydWN0aW9ucy4gU2VjdGlvbiAyLCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuIEl0IHNheXMgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIGZhbGxzIGludG8gc2V2ZXJhbCBjYXRlZ29yaWVzLiBMZXQncyBzZWUuLi4gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIG9yIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQgc291bmRzIGxpa2UgUENNQ0lBIVxuXG5JIHNob3VsZCByZS1yZWFkIFNlY3Rpb24gMSwgdG9vLiBcIlJlYWNoYWJsZSBpcyB0aGUgcHJpbWFyeSBnYXRlLi4uXCIgRnV6emluZyBvbmx5IHdvcmtzIGlmIHRoZSBjb2RlIGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSWYgaXQncyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIGRvbid0IGZ1enogaXQuXG5cbkxldCdzIGNoZWNrIGBwY25ldF9jc2AgbW9yZSBwcmVjaXNlbHkuIEl0J3MgYSAxNi1iaXQgUENNQ0lBIChQQyBDYXJkKSBFdGhlcm5ldCBkcml2ZXIgZm9yIE5FMjAwMC1jb21wYXRpYmxlIFBDTUNJQSBjYXJkcy4gQ2FuIGBwY25ldF9jc2AgcnVuIGluIFFFTVUgb3IgR0NFPyBObyEgUENNQ0lBIGhhcmR3YXJlIGlzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgaW4gdGhlc2Ugc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIG9uIGFtZDY0LiBUaGV5IGRvbid0IGVtdWxhdGUgdGhlIHNvY2tldCBjb250cm9sbGVycywgYW5kIHRoZXkgZG9uJ3QgZW11bGF0ZSBORTIwMDAgUENNQ0lBIGNhcmRzLlxuXG5BbHJpZ2h0LCBsZXQncyBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYgdG8gYmUgc3VyZS4gSSBjYW4gc2VlIHRoZSBwYXRjaCBjaGFuZ2VzIHNvbWUgZXJyb3IgaGFuZGxpbmcgcGF0aHMsIGJ1dCBpdCBhbGwgcmV2b2x2ZXMgYXJvdW5kIGBwY21jaWFfcmVsZWFzZV93aW5kb3dgIGFuZCB0aGUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gb2YgdGhlIG1lbW9yeSB3aW5kb3cgZm9yIHRoZSBQQ01DSUEgZGV2aWNlLiBUaGlzIGlzIGFsbCBwcmVkaWNhdGVkIG9uIHRoZSBwcmVzZW5jZSBvZiBwaHlzaWNhbCBQQ01DSUEgaGFyZHdhcmUuIEl0IGxvb2tzIGxpa2UgaXQganVzdCBzbGlnaHRseSByZW9yZGVycyB0aGUgY2FsbHMgdG8gbWFrZSBzdXJlIHJlc291cmNlcyBhcmUgcmVsZWFzZWQgaW4gZXJyb3IgcGF0aHMuXG5cblRoZSBjb25jbHVzaW9uOiBQQ01DSUEgaGFyZHdhcmUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU3MSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTg6MTAuOTMzODQ4MDM0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQxMCxcbiAgXCJMaW5lQ291bnRcIjogNzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQxMDpcXHRcXG4xNDExOlxcdHN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXFxuMTQxMjpcXHRcXHRcXHRcXHQgICAgICBpbnQgc3RvcF9wZywgaW50IGNtX29mZnNldClcXG4xNDEzOlxcdHtcXG4xNDE0OlxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay1cXHUwMDNlcHJpdjtcXG4xNDE1OlxcdCAgICBzdHJ1Y3QgcGNuZXRfZGV2ICppbmZvID0gUFJJVihkZXYpO1xcbjE0MTY6XFx0ICAgIGludCBpLCB3aW5kb3dfc2l6ZSwgb2Zmc2V0LCByZXQ7XFxuMTQxNzpcXHRcXG4xNDE4OlxcdCAgICB3aW5kb3dfc2l6ZSA9IChzdG9wX3BnIC0gc3RhcnRfcGcpIFxcdTAwM2NcXHUwMDNjIDg7XFxuMTQxOTpcXHQgICAgaWYgKHdpbmRvd19zaXplIFxcdTAwM2UgMzIgKiAxMDI0KVxcbjE0MjA6XFx0XFx0d2luZG93X3NpemUgPSAzMiAqIDEwMjQ7XFxuMTQyMTpcXHRcXG4xNDIyOlxcdCAgICAvKiBNYWtlIHN1cmUgaXQncyBhIHBvd2VyIG9mIHR3by4gICovXFxuMTQyMzpcXHQgICAgd2luZG93X3NpemUgPSByb3VuZHVwX3Bvd19vZl90d28od2luZG93X3NpemUpO1xcbjE0MjQ6XFx0XFxuMTQyNTpcXHQgICAgLyogQWxsb2NhdGUgYSBtZW1vcnkgd2luZG93ICovXFxuMTQyNjpcXHQgICAgbGluay1cXHUwMDNlcmVzb3VyY2VbM10tXFx1MDAzZWZsYWdzIHw9IFdJTl9EQVRBX1dJRFRIXzE2fFdJTl9NRU1PUllfVFlQRV9DTXxXSU5fRU5BQkxFO1xcbjE0Mjc6XFx0ICAgIGxpbmstXFx1MDAzZXJlc291cmNlWzNdLVxcdTAwM2VmbGFncyB8PSBXSU5fVVNFX1dBSVQ7XFxuMTQyODpcXHQgICAgbGluay1cXHUwMDNlcmVzb3VyY2VbM10tXFx1MDAzZXN0YXJ0ID0gMDsgbGluay1cXHUwMDNlcmVzb3VyY2VbM10tXFx1MDAzZWVuZCA9IHdpbmRvd19zaXplO1xcbjE0Mjk6XFx0ICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhsaW5rLCBsaW5rLVxcdTAwM2VyZXNvdXJjZVszXSwgbWVtX3NwZWVkKTtcXG4xNDMwOlxcdCAgICBpZiAocmV0KVxcbjE0MzE6XFx0XFx0ICAgIGdvdG8gZmFpbGVkO1xcbjE0MzI6XFx0XFxuMTQzMzpcXHQgICAgb2Zmc2V0ID0gKHN0YXJ0X3BnIFxcdTAwM2NcXHUwMDNjIDgpICsgY21fb2Zmc2V0O1xcbjE0MzQ6XFx0ICAgIG9mZnNldCAtPSBvZmZzZXQgJSB3aW5kb3dfc2l6ZTtcXG4xNDM1OlxcdCAgICByZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstXFx1MDAzZXJlc291cmNlWzNdLCBvZmZzZXQpO1xcbjE0MzY6XFx0ICAgIGlmIChyZXQpXFxuMTQzNzpcXHRcXHQgICAgZ290byByZWxlYXNlO1xcbjE0Mzg6XFx0XFxuMTQzOTpcXHQgICAgLyogVHJ5IHNjcmliYmxpbmcgb24gdGhlIGJ1ZmZlciAqL1xcbjE0NDA6XFx0ICAgIGluZm8tXFx1MDAzZWJhc2UgPSBpb3JlbWFwKGxpbmstXFx1MDAzZXJlc291cmNlWzNdLVxcdTAwM2VzdGFydCxcXG4xNDQxOlxcdFxcdFxcdFxcdHJlc291cmNlX3NpemUobGluay1cXHUwMDNlcmVzb3VyY2VbM10pKTtcXG4xNDQyOlxcdCAgICBpZiAodW5saWtlbHkoIWluZm8tXFx1MDAzZWJhc2UpKSB7XFxuMTQ0MzpcXHRcXHQgICAgcmV0ID0gLUVOT01FTTtcXG4xNDQ0OlxcdFxcdCAgICBnb3RvIHJlbGVhc2U7XFxuMTQ0NTpcXHQgICAgfVxcbjE0NDY6XFx0XFxuMTQ0NzpcXHQgICAgZm9yIChpID0gMDsgaSBcXHUwMDNjIChUWF9QQUdFU1xcdTAwM2NcXHUwMDNjOCk7IGkgKz0gMilcXG4xNDQ4OlxcdFxcdF9fcmF3X3dyaXRldygoaVxcdTAwM2VcXHUwMDNlMSksIGluZm8tXFx1MDAzZWJhc2Urb2Zmc2V0K2kpO1xcbjE0NDk6XFx0ICAgIHVkZWxheSgxMDApO1xcbjE0NTA6XFx0ICAgIGZvciAoaSA9IDA7IGkgXFx1MDAzYyAoVFhfUEFHRVNcXHUwMDNjXFx1MDAzYzgpOyBpICs9IDIpXFxuMTQ1MTpcXHRcXHRpZiAoX19yYXdfcmVhZHcoaW5mby1cXHUwMDNlYmFzZStvZmZzZXQraSkgIT0gKGlcXHUwMDNlXFx1MDAzZTEpKSBicmVhaztcXG4xNDUyOlxcdCAgICBwY25ldF9yZXNldF84MzkwKGRldik7XFxuMTQ1MzpcXHQgICAgaWYgKGkgIT0gKFRYX1BBR0VTXFx1MDAzY1xcdTAwM2M4KSkge1xcbjE0NTQ6XFx0XFx0aW91bm1hcChpbmZvLVxcdTAwM2ViYXNlKTtcXG4xNDU1OlxcdFxcdGluZm8tXFx1MDAzZWJhc2UgPSBOVUxMO1xcbjE0NTY6XFx0XFx0Z290byByZWxlYXNlO1xcbjE0NTc6XFx0ICAgIH1cXG4xNDU4OlxcdFxcbjE0NTk6XFx0ICAgIGVpX3N0YXR1cy5tZW0gPSBpbmZvLVxcdTAwM2ViYXNlICsgb2Zmc2V0O1xcbjE0NjA6XFx0ICAgIGVpX3N0YXR1cy5wcml2ID0gcmVzb3VyY2Vfc2l6ZShsaW5rLVxcdTAwM2VyZXNvdXJjZVszXSk7XFxuMTQ2MTpcXHQgICAgZGV2LVxcdTAwM2VtZW1fc3RhcnQgPSAodV9sb25nKWVpX3N0YXR1cy5tZW07XFxuMTQ2MjpcXHQgICAgZGV2LVxcdTAwM2VtZW1fZW5kID0gZGV2LVxcdTAwM2VtZW1fc3RhcnQgKyByZXNvdXJjZV9zaXplKGxpbmstXFx1MDAzZXJlc291cmNlWzNdKTtcXG4xNDYzOlxcdFxcbjE0NjQ6XFx0ICAgIGVpX3N0YXR1cy50eF9zdGFydF9wYWdlID0gc3RhcnRfcGc7XFxuMTQ2NTpcXHQgICAgZWlfc3RhdHVzLnJ4X3N0YXJ0X3BhZ2UgPSBzdGFydF9wZyArIFRYX1BBR0VTO1xcbjE0NjY6XFx0ICAgIGVpX3N0YXR1cy5zdG9wX3BhZ2UgPSBzdGFydF9wZyArIChcXG4xNDY3OlxcdFxcdCAgICAocmVzb3VyY2Vfc2l6ZShsaW5rLVxcdTAwM2VyZXNvdXJjZVszXSkgLSBvZmZzZXQpIFxcdTAwM2VcXHUwMDNlIDgpO1xcbjE0Njg6XFx0XFxuMTQ2OTpcXHQgICAgLyogc2V0IHVwIGJsb2NrIGkvbyBmdW5jdGlvbnMgKi9cXG4xNDcwOlxcdCAgICBlaV9zdGF0dXMuZ2V0XzgzOTBfaGRyID0gc2htZW1fZ2V0XzgzOTBfaGRyO1xcbjE0NzE6XFx0ICAgIGVpX3N0YXR1cy5ibG9ja19pbnB1dCA9IHNobWVtX2Jsb2NrX2lucHV0O1xcbjE0NzI6XFx0ICAgIGVpX3N0YXR1cy5ibG9ja19vdXRwdXQgPSBzaG1lbV9ibG9ja19vdXRwdXQ7XFxuMTQ3MzpcXHRcXG4xNDc0OlxcdCAgICBpbmZvLVxcdTAwM2VmbGFncyB8PSBVU0VfU0hNRU07XFxuMTQ3NTpcXHQgICAgcmV0dXJuIDA7XFxuMTQ3NjpcXHRcXG4xNDc3OlxcdHJlbGVhc2U6XFxuMTQ3ODpcXHRcXHRwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay1cXHUwMDNlcmVzb3VyY2VbM10pO1xcbjE0Nzk6XFx0ZmFpbGVkOlxcbjE0ODA6XFx0ICAgIHJldHVybiAxO1xcbjE0ODE6XFx0fVxcbjE0ODI6XFx0XFxuMTQ4MzpcXHQvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cXG4xNDg0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMTo1ODoxMC45MzM5OTYyODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Njg1MDg2NTMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhbiBVbnJlYWNoYWJsZSBQQ01DSUEgRHJpdmVyIENvZGUgUGF0aCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBzZXR1cF9zaG1lbV93aW5kb3dgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmVzb3VyY2UgbGVhayB3aGVyZSBhIFBDTUNJQSBtZW1vcnkgd2luZG93IHdhc24ndCBiZWluZyByZWxlYXNlZCBpbiB0aGUgY2FzZSBvZiBhbiBlcnJvciBkdXJpbmcgaXRzIHNldHVwLiBUaGUgZml4IGFkZHMgYSBgcGNtY2lhX3JlbGVhc2Vfd2luZG93YCBjYWxsIGJlZm9yZSByZXR1cm5pbmcgb24gZXJyb3IuIFN0YW5kYXJkIHJlc291cmNlIG1hbmFnZW1lbnQgaW1wcm92ZW1lbnQsIG5vdGhpbmcgaW5oZXJlbnRseSBjb21wbGV4LlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIGNvZGUgKnJlYWNoYWJsZSo/IE15IGluaXRpYWwgZ3V0IGZlZWxpbmcsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGVzZSBzeXN0ZW1zLCBpcyBcInByb2JhYmx5IG5vdFwiLiBMZXQncyBjb25maXJtOlxuXG4xLiAgKipBcmNoaXRlY3R1cmUgYW5kIEVudmlyb25tZW50OioqIFdlJ3JlIGRlYWxpbmcgd2l0aCBhbWQ2NC4gYHBjbmV0X2NzYCBpcyBhIGxlZ2FjeSBQQ01DSUEgZHJpdmVyIChORTIwMDAtY29tcGF0aWJsZSkgZGVzaWduZWQgZm9yIDE2LWJpdCBQQ01DSUEgY2FyZHMuIEluIHRvZGF5J3MgdmlydHVhbGl6YXRpb24gbGFuZHNjYXBlLCBwYXJ0aWN1bGFybHkgd2l0aGluIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpLCBQQ01DSUEgZW11bGF0aW9uIGlzIHZpcnR1YWxseSBub25leGlzdGVudC4gVGhlc2Ugc3RhbmRhcmQgZW52aXJvbm1lbnRzIGRvbid0IGVtdWxhdGUgdGhlIFBDTUNJQSBob3N0IHNvY2tldCBjb250cm9sbGVycyBvciB0aGUgUENNQ0lBIE5FMjAwMCBkZXZpY2VzLiBUaGVyZSdzIG5vIGVxdWl2YWxlbnQgb2YgVVNCJ3MgYHVzYmlwYCBvciBuZXR3b3JrIGVtdWxhdGlvbiBsaWtlIGBkdW1teV9oY2RgLCBgdmhjaWAsIGBkdW1teWAsIGB2ZXRoYCwgb3IgYHR1bmAgdG8gYnJpZGdlIHRoaXMgZ2FwLiBTbywgdGhlIHByb2JlIHBhdGgsIGZyb20gYHBjbmV0X3Byb2JlYCBkb3duIHRvIGBwY25ldF9jb25maWdgIGFuZCB0aGVuIGludG8gYHNldHVwX3NobWVtX3dpbmRvd2AsIGlzIGVmZmVjdGl2ZWx5IGJsb2NrZWQuXG5cbjIuICAqKkNvbXBhcmlzb24gdG8gUHJpb3IgV29yazoqKiBUaGlzIHBlcmZlY3RseSBhbGlnbnMgd2l0aCB0aGUgcHJpb3IgZXhhbXBsZXMgb2YgdW5yZWFjaGFibGUgaGFyZHdhcmUsIHNwZWNpZmljYWxseSBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzXCIgdGhhdCByZXF1aXJlIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcy4gVGhlIFBDTUNJQSBFdGhlcm5ldCBkcml2ZXIgZmFsbHMgc3F1YXJlbHkgaW50byB0aGlzIGNhdGVnb3J5OiBsZWdhY3ksIHBoeXNpY2FsIGhhcmR3YXJlIChhIFBDTUNJQSBjYXJkKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuXG4zLiAgKipXb3J0aEZ1enppbmcgQ29uZmlybWF0aW9uOioqIEdpdmVuIHRoZSBsYWNrIG9mIGhhcmR3YXJlIGVtdWxhdGlvbiwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGZhbHNlLiBXZSBjYW4gc2tpcCBTZWN0aW9ucyA0IGFuZCA1IGJlY2F1c2UgdGhlcmUncyBubyBjb21wbGV4IGZ1enppbmcgY29uZmlndXJhdGlvbiBpbnZvbHZlZCBoZXJlOyB0aGUgY29kZSdzIHJlYWNoYWJpbGl0eSBpcyB0aGUgaXNzdWUuIFRoZSByZWFzb25pbmcgZm9yIG5vdCBmdXp6aW5nIGlzIHRoZSBrZXkgcGFydC4gSXQgaXMgYSBjbGVhciBhbmQgY29uY2lzZSBleHBsYW5hdGlvbiB0aGF0IHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGR1ZSB0byB0aGUgbGFjayBvZiBQQ01DSUEgaGFyZHdhcmUgZW11bGF0aW9uIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy5cblxuNC4gICoqRmluYWwgU3VtbWFyeToqKiBUaGUgcGF0Y2ggcmVzaWRlcyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jYCwgaW4gdGhlIGBzZXR1cF9zaG1lbV93aW5kb3dgIGZ1bmN0aW9uLiBUaGlzIGRyaXZlciBpcyBmb3IgUENNQ0lBIG5ldHdvcmsgaGFyZHdhcmUsIHNwZWNpZmljYWxseSBORTIwMDAtY29tcGF0aWJsZSBkZXZpY2VzICh3aGljaCByZWxpZXMgb24gYENPTkZJR19QQ01DSUFfUENORVRgKS4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQuIEdpdmVuIHRoZSB1YmlxdWl0eSBvZiBRRU1VL0dDRSBmb3IgdGVzdGluZywgdGhlIFBDTUNJQSBkcml2ZXIgaXMgdW5yZWFjaGFibGUgYmVjYXVzZSBzdGFuZGFyZCBRRU1VIGFuZCBHQ0UgZW52aXJvbm1lbnRzIG9uIHg4NlxcXzY0IGRvIG5vdCBlbXVsYXRlIHRoZSBQQ01DSUEvQ2FyZEJ1cyBzb2NrZXQgY29udHJvbGxlcnMgb3IgdGhlc2UgUENNQ0lBIGNhcmRzLiBObyBzb2Z0d2FyZSBlbXVsYXRpb24gbWVjaGFuaXNtIGV4aXN0cywgdGhlcmVmb3JlLCB0aGUgZHJpdmVyJ3MgcHJvYmUgbG9naWMgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN5emthbGxlciBmdXp6aW5nIGVudmlyb25tZW50cy5cblxuSXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBjYXNlLiBMZXQncyBnZXQgdGhlIHJlc3VsdHMgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY5OSwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMTo1ODoxNy43ODQ4NjM4NDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgaW4gc2V0dXBfc2htZW1fd2luZG93KCkgaW4gZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLCB3aGljaCBpcyBhIGxlZ2FjeSBQQ01DSUEgZXRoZXJuZXQgY2FyZCBkcml2ZXIgKENPTkZJR19QQ01DSUFfUENORVQpLiBQQ01DSUEvQ2FyZEJ1cyBzb2NrZXQgY29udHJvbGxlcnMgYW5kIFBDTUNJQSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHg4Nl82NCBRRU1VIG9yIEdDRSB2aXJ0dWFsIGVudmlyb25tZW50cywgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBsYXllciB0byBpbnN0YW50aWF0ZSBQQ01DSUEgZGV2aWNlcy4gVGhlIG1vZGlmaWVkIHByb2JlIHBhdGggaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHNldHVwX3NobWVtX3dpbmRvdygpIGluIGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYywgd2hpY2ggaXMgYSBsZWdhY3kgUENNQ0lBIGV0aGVybmV0IGNhcmQgZHJpdmVyIChDT05GSUdfUENNQ0lBX1BDTkVUKS4gUENNQ0lBL0NhcmRCdXMgc29ja2V0IGNvbnRyb2xsZXJzIGFuZCBQQ01DSUEgY2FyZHMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODZfNjQgUUVNVSBvciBHQ0UgdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gbGF5ZXIgdG8gaW5zdGFudGlhdGUgUENNQ0lBIGRldmljZXMuIFRoZSBtb2RpZmllZCBwcm9iZSBwYXRoIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIxOjU4OjE3Ljc4NDg4OTMyNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbv6d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 20:50:42 +0000 UTC FinishedAt: 2026-09-13 21:58:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHNldHVwX3NobWVtX3dpbmRvdygpIGluIGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYywgd2hpY2ggaXMgYSBsZWdhY3kgUENNQ0lBIGV0aGVybmV0IGNhcmQgZHJpdmVyIChDT05GSUdfUENNQ0lBX1BDTkVUKS4gUENNQ0lBL0NhcmRCdXMgc29ja2V0IGNvbnRyb2xsZXJzIGFuZCBQQ01DSUEgY2FyZHMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODZfNjQgUUVNVSBvciBHQ0UgdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gbGF5ZXIgdG8gaW5zdGFudGlhdGUgUENNQ0lBIGRldmljZXMuIFRoZSBtb2RpZmllZCBwcm9iZSBwYXRoIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0OWYyZjc4ZmIyODRlMzA3YTc5YWJlZTRlY2I0ODFhMTgyMzRjMWU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMjE6NTc6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXG5pbmRleCAxOWY5YzVkYjNmM2JhLi4wY2YzYzBmM2NlZDdiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcbkBAIC0xNDM0LDE0ICYjNDM7MTQzNCwxNCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxuICAgICBvZmZzZXQgLT0gb2Zmc2V0ICUgd2luZG93X3NpemU7XG4gICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay1cdTAwM2VyZXNvdXJjZVszXSwgb2Zmc2V0KTtcbiAgICAgaWYgKHJldClcbi1cdCAgICBnb3RvIGZhaWxlZDtcbiYjNDM7XHQgICAgZ290byByZWxlYXNlO1xuIFxuICAgICAvKiBUcnkgc2NyaWJibGluZyBvbiB0aGUgYnVmZmVyICovXG4gICAgIGluZm8tXHUwMDNlYmFzZSA9IGlvcmVtYXAobGluay1cdTAwM2VyZXNvdXJjZVszXS1cdTAwM2VzdGFydCxcbiBcdFx0XHRyZXNvdXJjZV9zaXplKGxpbmstXHUwMDNlcmVzb3VyY2VbM10pKTtcbiAgICAgaWYgKHVubGlrZWx5KCFpbmZvLVx1MDAzZWJhc2UpKSB7XG4gXHQgICAgcmV0ID0gLUVOT01FTTtcbi1cdCAgICBnb3RvIGZhaWxlZDtcbiYjNDM7XHQgICAgZ290byByZWxlYXNlO1xuICAgICB9XG4gXG4gICAgIGZvciAoaSA9IDA7IGkgXHUwMDNjIChUWF9QQUdFU1x1MDAzY1x1MDAzYzgpOyBpICYjNDM7PSAyKVxuQEAgLTE0NTIsOSAmIzQzOzE0NTIsOCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxuICAgICBwY25ldF9yZXNldF84MzkwKGRldik7XG4gICAgIGlmIChpICE9IChUWF9QQUdFU1x1MDAzY1x1MDAzYzgpKSB7XG4gXHRpb3VubWFwKGluZm8tXHUwMDNlYmFzZSk7XG4tXHRwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay1cdTAwM2VyZXNvdXJjZVszXSk7XG4gXHRpbmZvLVx1MDAzZWJhc2UgPSBOVUxMO1xuLVx0Z290byBmYWlsZWQ7XG4mIzQzO1x0Z290byByZWxlYXNlO1xuICAgICB9XG4gXG4gICAgIGVpX3N0YXR1cy5tZW0gPSBpbmZvLVx1MDAzZWJhc2UgJiM0Mzsgb2Zmc2V0O1xuQEAgLTE0NzUsNiAmIzQzOzE0NzQsOCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxuICAgICBpbmZvLVx1MDAzZWZsYWdzIHw9IFVTRV9TSE1FTTtcbiAgICAgcmV0dXJuIDA7XG4gXG4mIzQzO3JlbGVhc2U6XG4mIzQzO1x0cGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstXHUwMDNlcmVzb3VyY2VbM10pO1xuIGZhaWxlZDpcbiAgICAgcmV0dXJuIDE7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmVzb3VyY2UgbGVhayBpbiBzZXR1cF9zaG1lbV93aW5kb3coKSBpbiBkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMsIHdoaWNoIGlzIGEgbGVnYWN5IFBDTUNJQSBldGhlcm5ldCBjYXJkIGRyaXZlciAoQ09ORklHX1BDTUNJQV9QQ05FVCkuIFBDTUNJQS9DYXJkQnVzIHNvY2tldCBjb250cm9sbGVycyBhbmQgUENNQ0lBIGNhcmRzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgeDg2XzY0IFFFTVUgb3IgR0NFIHZpcnR1YWwgZW52aXJvbm1lbnRzLCBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGxheWVyIHRvIGluc3RhbnRpYXRlIFBDTUNJQSBkZXZpY2VzLiBUaGUgbW9kaWZpZWQgcHJvYmUgcGF0aCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDlmMmY3OGZiMjg0ZTMwN2E3OWFiZWU0ZWNiNDgxYTE4MjM0YzFlNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDIxOjU3OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jCmluZGV4IDE5ZjljNWRiM2YzYmEuLjBjZjNjMGYzY2VkN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMKQEAgLTE0MzQsMTQgJiM0MzsxNDM0LDE0IEBAIHN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsCiAgICAgb2Zmc2V0IC09IG9mZnNldCAlIHdpbmRvd19zaXplOwogICAgIHJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluaywgbGluay0mZ3Q7cmVzb3VyY2VbM10sIG9mZnNldCk7CiAgICAgaWYgKHJldCkKLQkgICAgZ290byBmYWlsZWQ7CiYjNDM7CSAgICBnb3RvIHJlbGVhc2U7CiAKICAgICAvKiBUcnkgc2NyaWJibGluZyBvbiB0aGUgYnVmZmVyICovCiAgICAgaW5mby0mZ3Q7YmFzZSA9IGlvcmVtYXAobGluay0mZ3Q7cmVzb3VyY2VbM10tJmd0O3N0YXJ0LAogCQkJcmVzb3VyY2Vfc2l6ZShsaW5rLSZndDtyZXNvdXJjZVszXSkpOwogICAgIGlmICh1bmxpa2VseSghaW5mby0mZ3Q7YmFzZSkpIHsKIAkgICAgcmV0ID0gLUVOT01FTTsKLQkgICAgZ290byBmYWlsZWQ7CiYjNDM7CSAgICBnb3RvIHJlbGVhc2U7CiAgICAgfQogCiAgICAgZm9yIChpID0gMDsgaSAmbHQ7IChUWF9QQUdFUyZsdDsmbHQ7OCk7IGkgJiM0Mzs9IDIpCkBAIC0xNDUyLDkgJiM0MzsxNDUyLDggQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZywKICAgICBwY25ldF9yZXNldF84MzkwKGRldik7CiAgICAgaWYgKGkgIT0gKFRYX1BBR0VTJmx0OyZsdDs4KSkgewogCWlvdW5tYXAoaW5mby0mZ3Q7YmFzZSk7Ci0JcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstJmd0O3Jlc291cmNlWzNdKTsKIAlpbmZvLSZndDtiYXNlID0gTlVMTDsKLQlnb3RvIGZhaWxlZDsKJiM0MzsJZ290byByZWxlYXNlOwogICAgIH0KIAogICAgIGVpX3N0YXR1cy5tZW0gPSBpbmZvLSZndDtiYXNlICYjNDM7IG9mZnNldDsKQEAgLTE0NzUsNiAmIzQzOzE0NzQsOCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLAogICAgIGluZm8tJmd0O2ZsYWdzIHw9IFVTRV9TSE1FTTsKICAgICByZXR1cm4gMDsKIAomIzQzO3JlbGVhc2U6CiYjNDM7CXBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBsaW5rLSZndDtyZXNvdXJjZVszXSk7CiBmYWlsZWQ6CiAgICAgcmV0dXJuIDE7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGluZyB0aGUgRnV6emluZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gZnV6emluZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkLiBUaGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCB0aGlzIGZpbGUgYWN0dWFsbHkgaXMsIHNvIEkmIzM5O2xsIHB1bGwgdXAgdGhlIGNvbnRleHQuIEFoYSEgSXQmIzM5O3MgdGhlIFBDTUNJQSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYHBjbmV0X2NzYCBkcml2ZXIsIGRlc2lnbmVkIGZvciBOUzgzOTAtYmFzZWQgUENNQ0lBIGV0aGVybmV0IGNhcmRzLgoKTm93IHRoYXQgSSBoYXZlIHRoZSBjb250ZXh0IG9mIHRoZSBkZXZpY2UgYW5kIGRyaXZlciwgSSBuZWVkIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHJlYWQgdGhyb3VnaCB0aGUgYHBjbmV0X2NzLmNgIGZpbGUgaXRzZWxmLCBhbmQgSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGNyb3NzLXJlZmVyZW5jZSBpdCB3aXRoIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlIHRvIHRoZSBsZXZlbCBvZiBkZXRhaWwgbmVjZXNzYXJ5IHRvIGp1ZGdlIGhvdyBlZmZlY3RpdmUgdGhlIHBhdGNoIHdvdWxkIGJlIGZvciBmdXp6aW5nLCBhbmQgaWYgdGhlIHBhdGNoIGlzIHZ1bG5lcmFibGUgaXRzZWxmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjbmV0X2NzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWc9MTM0PWNvbmZpZyBQQ01DSUFfUENORVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWctMTQyLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZzoxNDM6XHQgIGNhbGxlZCBwY25ldF9jcy4gIElmIHVuc3VyZSwgc2F5IE4uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWctMTQ0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX05FMktfUENJKSAmIzQzOz0gbmUyay1wY2kubyA4MzkwLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX1BDTUNJQV9QQ05FVCkgJiM0Mzs9IHBjbmV0X2NzLm8gODM5MC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL01ha2VmaWxlLTE1LW9iai0kKENPTkZJR19TVE5JQykgJiM0Mzs9IHN0bmljLm8gODM5MC5vXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTE0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjE1OiAgICBwY25ldF9jcy5jIDEuMTUzIDIwMDMvMTEvMDkgMTg6NTM6MDlcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0xNi1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9MTcwOT1zdGF0aWMgc3RydWN0IHBjbWNpYV9kcml2ZXIgcGNuZXRfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjE3MTA6XHQubmFtZVx0XHQ9IFwmIzM0O3BjbmV0X2NzXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTE3MTEtXHQucHJvYmVcdFx0PSBwY25ldF9wcm9iZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDg0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKktjb25maWcgRGl2ZSBmb3IgUENNQ0lBX1BDTkVUKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29uZmlndXJhdGlvbiBzdGF0dXMgcmVsYXRlZCB0byBgUENNQ0lBX1BDTkVUYCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbS4gTXkgbWVudGFsIGNoZWNrbGlzdCBraWNrcyBpbjogSSB3YW50IHRvIGtub3cgaWYgaXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIGEgbW9kdWxlLCBvciBjb25kaXRpb25hbC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIGZpbGUgdG8gY2hlY2sgYW5kIGhvdyB0byBuYXZpZ2F0ZSBhcm91bmQgaXQgdG8gZ2V0IGEgcXVpY2sgc3VtbWFyeS4gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEzMDpcdFxuIDEzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4gMTMyOlx0XHQgIHdpbGwgYmUgY2FsbGVkIGFwbmUuXG4gMTMzOlx0XG4gMTM0Olx0Y29uZmlnIFBDTUNJQV9QQ05FVFxuIDEzNTpcdFx0dHJpc3RhdGUgXCYjMzQ7TkUyMDAwIGNvbXBhdGlibGUgUENNQ0lBIHN1cHBvcnRcJiMzNDtcbiAxMzY6XHRcdGRlcGVuZHMgb24gUENNQ0lBIFx1MDAyNlx1MDAyNiBIQVNfSU9QT1JUXG4gMTM3Olx0XHRzZWxlY3QgQ1JDMzJcbiAxMzg6XHRcdGhlbHBcbiAxMzk6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIGF0dGFjaCBhbiBORTIwMDAgY29tcGF0aWJsZSBQQ01DSUFcbiAxNDA6XHRcdCAgKFBDLWNhcmQpIEV0aGVybmV0IG9yIEZhc3QgRXRoZXJuZXQgY2FyZCB0byB5b3VyIGNvbXB1dGVyLlxuIDE0MTpcdFxuIDE0MjpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAxNDM6XHRcdCAgY2FsbGVkIHBjbmV0X2NzLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNDQ6XHRcbiAxNDU6XHRjb25maWcgU1ROSUNcbiAxNDY6XHRcdHRyaXN0YXRlIFwmIzM0O05hdGlvbmFsIERQODM5MDJBViAgc3VwcG9ydFwmIzM0O1xuIDE0NzpcdFx0ZGVwZW5kcyBvbiBTVVBFUkhcbiAxNDg6XHRcdHNlbGVjdCBDUkMzMlxuIDE0OTpcdFx0aGVscFxuIDE1MDpcdFx0ICBTdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBEUDgzOTAyQVZcbiAxNTE6XHRcdCAgU1QtTklDIFNlcmlhbCBOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyIGZvciBUd2lzdGVkIFBhaXIuICBUaGlzXG4gMTUyOlx0XHQgIGlzIGEgMTBNYml0L3NlYyBFdGhlcm5ldCBjb250cm9sbGVyLiAgUHJvZHVjdCBvdmVydmlldyBhbmQgc3BlY3MgYXRcbiAxNTM6XHRcdCAgXHUwMDNjaHR0cDovL3d3dy5uYXRpb25hbC5jb20vcGYvRFAvRFA4MzkwMkEuaHRtbFx1MDAzZS5cbiAxNTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Njc5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFBDTUNJQSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBQQ01DSUEgcmFiYml0IGhvbGUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBQQ01DSUEgZGV2aWNlcyBhcmUgZXZlbiBhIHZpYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcgb3IgZW11bGF0aW9uIHdpdGhpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4gSG9sZCBvbiwgY2FuIFFFTVUgZXZlbiAqZG8qIFBDTUNJQSBlbXVsYXRpb24/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQuCgpXYWl0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiwgd2hhdCBhYm91dCBQQ01DSUEgZGV2aWNlcyBpbiBzeXprYWxsZXI/IEFyZSB0aGV5IGV2ZW4gcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgY29udGV4dD8gV2hhdCB1bmRlcmx5aW5nIGJ1cyBpcyBQQ01DSUEgdXNpbmcsIGFueXdheT8gSW4gc3RhbmRhcmQgeDg2L2FtZDY0IFFFTVUsIFBDTUNJQSBpc24mIzM5O3QgYSAqc3RhbmRhcmQqIHZpcnR1YWwgYnVzLCBpcyBpdD8gT3IgbWF5YmUgaXQgKmlzKj8gSSBoYXZlIHRvIGJlIHN1cmUuCgpBaGEsIFFFTVUmIzM5O3MgZG9jdW1lbnRhdGlvbiBzaG91bGQgaGF2ZSBhbnN3ZXJzLiBEb2VzIFFFTVUgaGF2ZSBQQ01DSUEgZW11bGF0aW9uIGF0IGFsbD8gV2FpdCwgaXQgbG9va3MgbGlrZSBRRU1VICpkb2VzKiBoYXZlIHNvbWUgUENNQ0lBIHN1cHBvcnQgcmVsYXRlZCB0byBweGEyeHgsIGJ1dCBpcyB0aGF0IHJlbGV2YW50IG9uIGFtZDY0PyBUaGlzIHNlZW1zIHNwZWNpZmljIHRvIEFSTSBhcmNoaXRlY3R1cmUuCgpSaWdodCwgbm93LCBJIHNob3VsZCBmb2N1cy4gSSBuZWVkIHRvIGNoZWNrIHN5emthbGxlciYjMzk7cyBzeXpsYW5nIGRlc2NyaXB0aW9ucywgdGhlIGdpdCBjb21taXQgaGlzdG9yeSwgb3IgUUVNVSYjMzk7cyBtb2RlbHMgdG8gZmluZCB0aGUgcmlnaHQgaW5mb3JtYXRpb24uCgpBIGtleSBxdWVzdGlvbjogY2FuIHVzZXIgc3BhY2UgZXZlbiBpbnN0YW50aWF0ZSBhIFBDTUNJQSBkZXZpY2U/IEkgaGF2ZSB0byBleHBsb3JlIHdoZXRoZXIgdGhlcmUmIzM5O3MgYW55IHNvcnQgb2Ygc29mdHdhcmUgZW11bGF0aW9uLCBwZXJoYXBzIGEgZHVtbXkgUENNQ0lBIGRyaXZlciB0aGF0IGNvdWxkIHNpbXBsaWZ5IHRoaW5ncywgb3IgZG9lcyBpdCAqcmVxdWlyZSogYSBwaHlzaWNhbCBQQ01DSUEgLyBDYXJkQnVzIGNvbnRyb2xsZXIgLyBzb2NrZXQ/IEkgaGF2ZSB0byBjb25zaWRlciBhbGwgYW5nbGVzLgoKRmluYWxseSwgSSBuZWVkIHRvIHNlYXJjaCB0aGUga2VybmVsIGZvciBQQ01DSUEtcmVsYXRlZCBjb2RlIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgaW5kaWNhdGlvbiBvZiBhIHZpcnR1YWwgUENNQ0lBIGhvc3QgY29udHJvbGxlci4gVGhhdCBtaWdodCBiZSB0aGUga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjbWNpYV9yZWdpc3Rlcl9zb2NrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjbWNpYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjbWNpYS9iY202M3h4X3BjbWNpYS5jPTMyNj1zdGF0aWMgaW50IGJjbTYzeHhfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvcGNtY2lhL2JjbTYzeHhfcGNtY2lhLmMtNDE3LVxuZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYzo0MTg6XHRyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KHNvY2spO1xuZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYy00MTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvcGNtY2lhL2NzLmM9OTc9c3RhdGljIGludCBwY2NhcmRkKHZvaWQgKl9fc2t0KTtcbi0tXG5kcml2ZXJzL3BjbWNpYS9jcy5jLTk5LS8qKlxuZHJpdmVycy9wY21jaWEvY3MuYzoxMDA6ICogcGNtY2lhX3JlZ2lzdGVyX3NvY2tldCAtIGFkZCBhIG5ldyBwY21jaWEgc29ja2V0IGRldmljZVxuZHJpdmVycy9wY21jaWEvY3MuYy0xMDEtICogQHNvY2tldDogdGhlIFx1MDAyNnNvY2tldCB0byByZWdpc3RlclxuZHJpdmVycy9wY21jaWEvY3MuYy0xMDItICovXG5kcml2ZXJzL3BjbWNpYS9jcy5jOjEwMzppbnQgcGNtY2lhX3JlZ2lzdGVyX3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc29ja2V0KVxuZHJpdmVycy9wY21jaWEvY3MuYy0xMDQte1xuLS1cbmRyaXZlcnMvcGNtY2lhL2NzLmMtMTEwLVxuZHJpdmVycy9wY21jaWEvY3MuYzoxMTE6XHRkZXZfZGJnKFx1MDAyNnNvY2tldC1cdTAwM2VkZXYsIFwmIzM0O3BjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoMHglcClcXG5cJiMzNDssIHNvY2tldC1cdTAwM2VvcHMpO1xuZHJpdmVycy9wY21jaWEvY3MuYy0xMTItXG4tLVxuZHJpdmVycy9wY21jaWEvY3MuYy0xOTctXHRyZXR1cm4gcmV0O1xuZHJpdmVycy9wY21jaWEvY3MuYzoxOTg6fSAvKiBwY21jaWFfcmVnaXN0ZXJfc29ja2V0ICovXG5kcml2ZXJzL3BjbWNpYS9jcy5jOjE5OTpFWFBPUlRfU1lNQk9MKHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQpO1xuZHJpdmVycy9wY21jaWEvY3MuYy0yMDAtXG4tLVxuZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmM9NDI0PXN0YXRpYyBpbnQgZGIxeF9wY21jaWFfc29ja2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmMtNTU2LVxuZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmM6NTU3Olx0cmV0ID0gcGNtY2lhX3JlZ2lzdGVyX3NvY2tldChcdTAwMjZzb2NrLVx1MDAzZXNvY2tldCk7XG5kcml2ZXJzL3BjbWNpYS9kYjF4eHhfc3MuYy01NTgtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jPTE3NT1zdGF0aWMgaW50IGVsZWN0cmFfY2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpXG4tLVxuZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jLTI3Ni1cbmRyaXZlcnMvcGNtY2lhL2VsZWN0cmFfY2YuYzoyNzc6XHRzdGF0dXMgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFx1MDAyNmNmLVx1MDAzZXNvY2tldCk7XG5kcml2ZXJzL3BjbWNpYS9lbGVjdHJhX2NmLmMtMjc4LVx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jOjI3OTpcdFx0ZGV2X2VycihkZXZpY2UsIFwmIzM0O3BjbWNpYV9yZWdpc3Rlcl9zb2NrZXQgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvcGNtY2lhL2VsZWN0cmFfY2YuYy0yODAtXHRcdGdvdG8gZmFpbDM7XG4tLVxuZHJpdmVycy9wY21jaWEvb21hcF9jZi5jPTE5OT1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2NmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9wY21jaWEvb21hcF9jZi5jLTI3Ny1cbmRyaXZlcnMvcGNtY2lhL29tYXBfY2YuYzoyNzg6XHRzdGF0dXMgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFx1MDAyNmNmLVx1MDAzZXNvY2tldCk7XG5kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMtMjc5LVx0aWYgKHN0YXR1cyBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYz02MjQ9c3RhdGljIGludCBwZDY3MjlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4tLVxuZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMtNzE0LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTUFYX1NPQ0tFVFM7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYzo3MTU6XHRcdHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoXHUwMDI2c29ja2V0W2ldLnNvY2tldCk7XG5kcml2ZXJzL3BjbWNpYS9wZDY3MjkuYy03MTYtXHRcdGlmIChyZXQpIHtcbmRyaXZlcnMvcGNtY2lhL3BkNjcyOS5jOjcxNzpcdFx0XHRkZXZfd2FybihcdTAwMjZkZXYtXHUwMDNlZGV2LCBcJiMzNDtwY21jaWFfcmVnaXN0ZXJfc29ja2V0IGZhaWxlZC5cXG5cJiMzNDspO1xuZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMtNzE4LVx0XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGkgOyBqJiM0MzsmIzQzOylcbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmM9NzkyPWludCBzb2NfcGNtY2lhX2FkZF9vbmUoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpXG4tLVxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jLTg1Ni1cbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYzo4NTc6XHRyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFx1MDAyNnNrdC1cdTAwM2Vzb2NrZXQpO1xuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jLTg1OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jPTIwOT1zdGF0aWMgaW50IHh4czE1MDBfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jLTI4NC1cbmRyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYzoyODU6XHRyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFx1MDAyNnNvY2stXHUwMDNlc29ja2V0KTtcbmRyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYy0yODYtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmM9MTE1OD1zdGF0aWMgaW50IHllbnRhX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYy0xMjY5LVx0LyogUmVnaXN0ZXIgaXQgd2l0aCB0aGUgcGNtY2lhIGxheWVyLi4gKi9cbmRyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jOjEyNzA6XHRyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFx1MDAyNnNvY2tldC1cdTAwM2Vzb2NrZXQpO1xuZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmMtMTI3MS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3MwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBRRU1VIFBDTUNJQSBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBkcml2ZXIgZmlsZXMg4oCTIGB5ZW50YV9zb2NrZXQuY2AsIGBwZDY3MjkuY2AsIGBpODIzNjUuY2AuLi4gSW1tZWRpYXRlbHksIG15IGJyYWluIGtpY2tzIGludG8gZ2VhcjogKkFyZSBhbnkgb2YgdGhlc2UgUENNQ0lBIGNvbnRyb2xsZXJzIGFjdHVhbGx5IGVtdWxhdGVkIHdpdGhpbiBRRU1VPyogSSBuZWVkIHRvIHZlcmlmeSB3aGF0IFFFTVUgYWN0dWFsbHkgKmRvZXMqIHN1cHBvcnQuCgpIb2xkIG9uIGEgc2Vjb25kLCBhIGNydWNpYWwgZGlzdGluY3Rpb246ICpEb2VzIFFFTVUgbW9kZWwgQ2FyZEJ1cyBvciBqdXN0IHBsYWluIFBDTUNJQT8qIFRoaXMgaXMga2V5LiBEaWdnaW5nIGRlZXBlciBpbnRvIG15IGtub3dsZWRnZSBvZiBRRU1VJiMzOTtzIGFyY2hpdGVjdHVyZSwgSSBzZWVtIHRvIHJlY2FsbCB0aGF0IFBDTUNJQSBzdXBwb3J0ICpkb2VzKiBleGlzdCwgYnV0IGl0JiMzOTtzIGxhcmdlbHkgY29uZmluZWQgdG8gdGhlIGBweGEyeHhgIGFuZCBvdGhlciBlbWJlZGRlZCBBUk0gbWFjaGluZSBtb2RlbHMsIGFuZCBldmVuIHRoZW4gaXQgd2FzIHByaW1hcmlseSBnZWFyZWQgdG93YXJkcyBlbXVsYXRpbmcgdGhpbmdzIGxpa2UgbWljcm9kcml2ZXMgb3IgQ29tcGFjdEZsYXNoLgoKVGhhdCYjMzk7cyB3aGVuIGl0IGhpdHMgbWU6ICpPbiBhIHN0YW5kYXJkIHg4NiBvciBhbWQ2NCBhcmNoaXRlY3R1cmUsIHVzaW5nIHRoZSBjb21tb24gaTQ0MGZ4IG9yIHEzNSBjaGlwc2V0cywgdGhlcmUmIzM5O3MgYWN0dWFsbHkgTk8gQ2FyZEJ1cy9QQ01DSUEgYnJpZGdlIG9yIGNvbnRyb2xsZXIgcmVwcmVzZW50ZWQhKiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZ2FwIGluIHRoZSBlbXVsYXRlZCBoYXJkd2FyZS4KClNvLCB3aGVyZSBkb2VzIHRoYXQgbGVhdmUgbWU/IEkmIzM5O20gbm93IHF1ZXN0aW9uaW5nIHdoZXRoZXIgTGludXggaXRzZWxmIGV2ZW4gKmhhcyogYW55IHZpcnR1YWwgUENNQ0lBIHNvY2tldCBhYnN0cmFjdGlvbiBsYXllci4gTXkgbmV4dCBzdGVwOiBJJiMzOTtsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ug4oCTIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgYGRyaXZlcnMvcGNtY2lhL2AgZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwgdHJlZS4gVGhhdCB3aWxsIGxpa2VseSBnaXZlIG1lIHRoZSBhbnN3ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Y29kZXNlYXJjaC1kaXItaW5kZXg8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0RpciYjMzQ7OiAmIzM0O2RyaXZlcnMvcGNtY2lhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YmNtNjN4eF9wY21jaWEuYyYjMzQ7LAogICAgJiMzNDtiY202M3h4X3BjbWNpYS5oJiMzNDssCiAgICAmIzM0O2NhcmRidXMuYyYjMzQ7LAogICAgJiMzNDtjaXJydXMuaCYjMzQ7LAogICAgJiMzNDtjaXN0cGwuYyYjMzQ7LAogICAgJiMzNDtjcy5jJiMzNDssCiAgICAmIzM0O2NzX2ludGVybmFsLmgmIzM0OywKICAgICYjMzQ7ZGIxeHh4X3NzLmMmIzM0OywKICAgICYjMzQ7ZHMuYyYjMzQ7LAogICAgJiMzNDtlbGVjdHJhX2NmLmMmIzM0OywKICAgICYjMzQ7aTgyMzY1LmgmIzM0OywKICAgICYjMzQ7bWF4MTYwMC5jJiMzNDssCiAgICAmIzM0O21heDE2MDAuaCYjMzQ7LAogICAgJiMzNDtvMm1pY3JvLmgmIzM0OywKICAgICYjMzQ7b21hcF9jZi5jJiMzNDssCiAgICAmIzM0O3BjbWNpYV9jaXMuYyYjMzQ7LAogICAgJiMzNDtwY21jaWFfcmVzb3VyY2UuYyYjMzQ7LAogICAgJiMzNDtwZDY3MjkuYyYjMzQ7LAogICAgJiMzNDtwZDY3MjkuaCYjMzQ7LAogICAgJiMzNDtweGEyeHhfYmFzZS5jJiMzNDssCiAgICAmIzM0O3B4YTJ4eF9iYXNlLmgmIzM0OywKICAgICYjMzQ7cHhhMnh4X3NoYXJwc2wuYyYjMzQ7LAogICAgJiMzNDtyaWNvaC5oJiMzNDssCiAgICAmIzM0O3JzcmNfbWdyLmMmIzM0OywKICAgICYjMzQ7cnNyY19ub25zdGF0aWMuYyYjMzQ7LAogICAgJiMzNDtzYTExMDBfZ2VuZXJpYy5jJiMzNDssCiAgICAmIzM0O3NhMTEwMF9nZW5lcmljLmgmIzM0OywKICAgICYjMzQ7c2ExMTAwX2gzNjAwLmMmIzM0OywKICAgICYjMzQ7c2ExMTExX2dlbmVyaWMuYyYjMzQ7LAogICAgJiMzNDtzYTExMTFfZ2VuZXJpYy5oJiMzNDssCiAgICAmIzM0O3NhMTExMV9qb3JuYWRhNzIwLmMmIzM0OywKICAgICYjMzQ7c2ExMTExX25lcG9uc2V0LmMmIzM0OywKICAgICYjMzQ7c2ExMXh4X2Jhc2UuYyYjMzQ7LAogICAgJiMzNDtzYTExeHhfYmFzZS5oJiMzNDssCiAgICAmIzM0O3NvY19jb21tb24uYyYjMzQ7LAogICAgJiMzNDtzb2NfY29tbW9uLmgmIzM0OywKICAgICYjMzQ7c29ja2V0X3N5c2ZzLmMmIzM0OywKICAgICYjMzQ7dGkxMTN4LmgmIzM0OywKICAgICYjMzQ7dG9waWMuaCYjMzQ7LAogICAgJiMzNDt2ZzQ2OC5oJiMzNDssCiAgICAmIzM0O3h4czE1MDBfc3MuYyYjMzQ7LAogICAgJiMzNDt5ZW50YV9zb2NrZXQuYyYjMzQ7LAogICAgJiMzNDt5ZW50YV9zb2NrZXQuaCYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NDMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgeWVudGFfc29ja2V0YCBFbXVsYXRpb24gaW4gUUVNVS9HQ0UqKgoKT2theSwgc28gYHllbnRhX3NvY2tldGAuLi4gdGhhdCYjMzk7cyBQQ0kgQ2FyZEJ1cywgcmlnaHQ/IFJpZ2h0LiBOb3csIHRoZSBxdWVzdGlvbiBpcywgaG93IGlzIHRoaXMgaGFuZGxlZCBpbiBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8gU3BlY2lmaWNhbGx5LCBhcmUgd2UgdGFsa2luZyBhYm91dCB0aGUgZW11bGF0aW9uIG9mIHNvbWV0aGluZyBsaWtlIGEgVGV4YXMgSW5zdHJ1bWVudHMgQ2FyZEJ1cyBjb250cm9sbGVyPyBLbm93aW5nIFFFTVUsIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhlIGFuc3dlci4gQW5kLCB5ZWFoLCBhcyBJIHN1c3BlY3RlZCwgdmFuaWxsYSBRRU1VIGRvZXNuJiMzOTt0IGhhdmUgYSBkZWRpY2F0ZWQgQ2FyZEJ1cyBvciBQQ01DSUEgUENJIGRldmljZSBtb2RlbC4gVGhhdCYjMzk7cyBub3QgZW50aXJlbHkgc3VycHJpc2luZy4KCkJ1dCBob2xkIG9uIGEgc2Vjb25kLi4uIENvdWxkIHRoZXJlIGJlIGEgd29ya2Fyb3VuZD8gUGVyaGFwcyBzb21lIG1ldGhvZCB0byBpbnN0YW50aWF0ZSBhIFBDTUNJQSBkZXZpY2UgdGhyb3VnaCBzeXNmcywgb3IgYSBtb2NraW5nIG1lY2hhbmlzbSwgb3IuLi4gc29tZXRoaW5nIGxpa2UgdGhhdD8gSXQmIzM5O3Mgd29ydGggZGlnZ2luZyBhIGJpdCBkZWVwZXIuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIGlmIGBzb2NrZXRfc3lzZnMuY2Agb3IgYGRzLmNgIHNoZWQgYW55IGxpZ2h0IG9uIHRoaXMuIE1heWJlIHRoZXJlJiMzOTtzIGEgaGlkZGVuIHRyaWNrIEkmIzM5O3ZlIG1pc3NlZC4gSSYjMzk7bGwgbmVlZCB0byBleHBsb3JlIHRob3NlIGZpbGVzIGNhcmVmdWxseSB0byBmaW5kIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNtY2lhX2J1c190eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY21jaWEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaD0xMjg9dm9pZCBwY21jaWFfcHV0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTtcbi0tXG5kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oLTEzMy0vKiBkcy5jICovXG5kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oOjEzNDpleHRlcm4gY29uc3Qgc3RydWN0IGJ1c190eXBlIHBjbWNpYV9idXNfdHlwZTtcbmRyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgtMTM1LVxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmM9MTY5PWludCBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY21jaWFfZHJpdmVyICpkcml2ZXIpXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYy0xNzgtXHQvKiBpbml0aWFsaXplIGNvbW1vbiBmaWVsZHMgKi9cbmRyaXZlcnMvcGNtY2lhL2RzLmM6MTc5Olx0ZHJpdmVyLVx1MDAzZWRydi5idXMgPSBcdTAwMjZwY21jaWFfYnVzX3R5cGU7XG5kcml2ZXJzL3BjbWNpYS9kcy5jLTE4MC1cdGRyaXZlci1cdTAwM2VkcnYub3duZXIgPSBkcml2ZXItXHUwMDNlb3duZXI7XG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYz00Nzk9c3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfZGV2aWNlX2FkZChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcyxcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTUwOS1cbmRyaXZlcnMvcGNtY2lhL2RzLmM6NTEwOlx0cF9kZXYtXHUwMDNlZGV2LmJ1cyA9IFx1MDAyNnBjbWNpYV9idXNfdHlwZTtcbmRyaXZlcnMvcGNtY2lhL2RzLmMtNTExLVx0cF9kZXYtXHUwMDNlZGV2LnBhcmVudCA9IHMtXHUwMDNlZGV2LnBhcmVudDtcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTY3NT1zdGF0aWMgdm9pZCBwY21jaWFfcmVxdWVyeShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcylcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTY4OS1cdCAqIGRldGVybWluZSBpdCBhZ2Fpbiwgb3ZlcndyaXRpbmcgb2xkIHZhbHVlcyBpZiBuZWNlc3NhcnkuICovXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjY5MDpcdGJ1c19mb3JfZWFjaF9kZXYoXHUwMDI2cGNtY2lhX2J1c190eXBlLCBOVUxMLCBOVUxMLCBwY21jaWFfcmVxdWVyeV9jYWxsYmFjayk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jLTY5MS1cbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTcyNC1cdCAqIHNvY2tldC4gVGhpcyBkb2VzIG5vdCBtYXR0ZXIsIHRob3VnaC4gKi9cbmRyaXZlcnMvcGNtY2lhL2RzLmM6NzI1Olx0aWYgKGJ1c19yZXNjYW5fZGV2aWNlcyhcdTAwMjZwY21jaWFfYnVzX3R5cGUpKVxuZHJpdmVycy9wY21jaWEvZHMuYy03MjYtXHRcdGRldl93YXJuKFx1MDAyNnMtXHUwMDNlZGV2LCBcJiMzNDtyZXNjYW5uaW5nIHRoZSBidXMgZmFpbGVkXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTEyMzg9c3RhdGljIGludCBwY21jaWFfYnVzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KVxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTI0MC1cdGRldl9kYmcoXHUwMDI2c2t0LVx1MDAzZWRldiwgXCYjMzQ7cmVzdW1pbmcgc29ja2V0ICVkXFxuXCYjMzQ7LCBza3QtXHUwMDNlc29jayk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEyNDE6XHRidXNfZm9yX2VhY2hfZGV2KFx1MDAyNnBjbWNpYV9idXNfdHlwZSwgTlVMTCwgc2t0LCBwY21jaWFfYnVzX3Jlc3VtZV9jYWxsYmFjayk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEyNDItXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTEyNDU9c3RhdGljIGludCBwY21jaWFfYnVzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdClcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEyNDctXHRkZXZfZGJnKFx1MDAyNnNrdC1cdTAwM2VkZXYsIFwmIzM0O3N1c3BlbmRpbmcgc29ja2V0ICVkXFxuXCYjMzQ7LCBza3QtXHUwMDNlc29jayk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEyNDg6XHRpZiAoYnVzX2Zvcl9lYWNoX2RldihcdTAwMjZwY21jaWFfYnVzX3R5cGUsIE5VTEwsIHNrdCxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTI0OS1cdFx0XHQgICAgIHBjbWNpYV9idXNfc3VzcGVuZF9jYWxsYmFjaykpIHtcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTE0MDU9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHBjbWNpYV9idXNfcG1fb3BzID0ge1xuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQwOC1cbmRyaXZlcnMvcGNtY2lhL2RzLmM6MTQwOTpjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgcGNtY2lhX2J1c190eXBlID0ge1xuZHJpdmVycy9wY21jaWEvZHMuYy0xNDEwLVx0Lm5hbWUgPSBcJiMzNDtwY21jaWFcJiMzNDssXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYz0xNDIwPXN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNtY2lhX2J1cyh2b2lkKVxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQyMy1cbmRyaXZlcnMvcGNtY2lhL2RzLmM6MTQyNDpcdHJldCA9IGJ1c19yZWdpc3RlcihcdTAwMjZwY21jaWFfYnVzX3R5cGUpO1xuZHJpdmVycy9wY21jaWEvZHMuYy0xNDI1LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQzMi1cdFx0XHRcJiMzNDtwY21jaWE6IGNsYXNzX2ludGVyZmFjZV9yZWdpc3RlciBlcnJvcjogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jOjE0MzM6XHRcdGJ1c191bnJlZ2lzdGVyKFx1MDAyNnBjbWNpYV9idXNfdHlwZSk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jLTE0MzQtXHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYz0xNDQzPXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3BjbWNpYV9idXModm9pZClcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTE0NDYtXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjE0NDc6XHRidXNfdW5yZWdpc3RlcihcdTAwMjZwY21jaWFfYnVzX3R5cGUpO1xuZHJpdmVycy9wY21jaWEvZHMuYy0xNDQ4LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMyMwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byB0aGUgUENuZXRfQ1MgRHJpdmVyIGFuZCBTaGFyZWQgTWVtb3J5IFNldHVwKioKCk9rYXksIGJlZm9yZSBJIHByb2NlZWQgZnVydGhlciwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGBwY25ldF9jc2AgZHJpdmVyJiMzOTtzIGlubmVyIHdvcmtpbmdzLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGBzZXR1cF9zaG1lbV93aW5kb3dgLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIHNoYXJlZCBtZW1vcnkuIFNvLCBJJiMzOTtsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgYHBjbmV0X2NzYCBkcml2ZXIg4oCTIHNwZWNpZmljYWxseSwgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNgIGZpbGUuIEkgbmVlZCB0byBnZXQgYSBncmFzcCBvbiBwcmVjaXNlbHkgKmhvdyogYW5kICp3aGVyZSogYHNldHVwX3NobWVtX3dpbmRvd2AgaXMgaW52b2tlZCB3aXRoaW4gdGhlIGRyaXZlciYjMzk7cyBleGVjdXRpb24gZmxvdy4gVGhpcyB3aWxsIGJlIHRoZSBmaXJzdCBhbmQgbW9zdCBpbXBvcnRhbnQgc3RlcCB0byBmaW5kaW5nIHRoZSBhbnN3ZXIgSSBzZWVrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXR1cF9zaG1lbV93aW5kb3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jPTEwMj1zdGF0aWMgaW50IHNldF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjEwMzpzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTEwNC1cdFx0XHQgICAgICBpbnQgc3RvcF9wZywgaW50IGNtX29mZnNldCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jPTU2NT1zdGF0aWMgaW50IHBjbmV0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMtNjA5LSAgICBpZiAoKHVzZV9zaG1lbSA9PSAwKSB8fCAoIWhhc19zaG1lbSBcdTAwMjZcdTAwMjYgKHVzZV9zaG1lbSA9PSAtMSkpIHx8XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6NjEwOlx0KHNldHVwX3NobWVtX3dpbmRvdyhsaW5rLCBzdGFydF9wZywgc3RvcF9wZywgY21fb2Zmc2V0KSAhPSAwKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy02MTEtXHRzZXR1cF9kbWFfY29uZmlnKGxpbmssIHN0YXJ0X3BnLCBzdG9wX3BnKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9MTQwMT1zdGF0aWMgdm9pZCBzaG1lbV9ibG9ja19vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0xNDEwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjE0MTE6c3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0xNDEyLVx0XHRcdCAgICAgIGludCBzdG9wX3BnLCBpbnQgY21fb2Zmc2V0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA3OAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgbGluZXMgb2YgY29kZSwgcHJlc2VudGVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCB0aHJvdWdoOgoKKipBbmFseXppbmcgdGhlIGBwY25ldF9jb25maWdgIFNlY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHBjbmV0X2NvbmZpZ2Agc2VjdGlvbiwgc3BlY2lmaWNhbGx5IGxpbmVzIDU2NSB0aHJvdWdoIDYyMC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGlzIGFyZWEgYmVjYXVzZSBpdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgUENuZXQgZHJpdmVyIGFyZSBkZWZpbmVkLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB3aGVyZSB0aGUgZGV2aWNlIGdldHMgaXRzIGluaXRpYWwgc2V0dGluZ3MsIHJpZ2h0PyBJJiMzOTttIGFudGljaXBhdGluZyB3ZSYjMzk7bGwgZmluZCB0aGluZ3MgbGlrZSB0aGUgYmFzZSBJL08gYWRkcmVzcywgdGhlIGludGVycnVwdCB2ZWN0b3IsIG1heWJlIHNvbWUgaW5pdGlhbCBidWZmZXIgc2l6ZXMsIGFuZCBkZWZpbml0ZWx5IGhvdyBpdCBoYW5kbGVzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IERNQSB1c2FnZSwgc2hhcmVkIG1lbW9yeSBtYXBwaW5nIOKAkyBhbnl0aGluZyByZWxhdGVkIHRvIGhvdyB0aGUgUENuZXQgYWN0dWFsbHkgdGFsa3MgdG8gdGhlIGhhcmR3YXJlIGFuZCBpbnRlcmFjdHMgd2l0aCB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gTGV0IG1lIGNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIG9uIHRoaXMgY2FyZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTY1Olx0c3RhdGljIGludCBwY25ldF9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspXG4gNTY2Olx0e1xuIDU2NzpcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay1cdTAwM2Vwcml2O1xuIDU2ODpcdCAgICBzdHJ1Y3QgcGNuZXRfZGV2ICppbmZvID0gUFJJVihkZXYpO1xuIDU2OTpcdCAgICBpbnQgc3RhcnRfcGcsIHN0b3BfcGcsIGNtX29mZnNldDtcbiA1NzA6XHQgICAgaW50IGhhc19zaG1lbSA9IDA7XG4gNTcxOlx0ICAgIHN0cnVjdCBod19pbmZvICpsb2NhbF9od19pbmZvO1xuIDU3MjpcdFxuIDU3MzpcdCAgICBkZXZfZGJnKFx1MDAyNmxpbmstXHUwMDNlZGV2LCBcJiMzNDtwY25ldF9jb25maWdcXG5cJiMzNDspO1xuIDU3NDpcdFxuIDU3NTpcdCAgICBsb2NhbF9od19pbmZvID0gcGNuZXRfdHJ5X2NvbmZpZyhsaW5rLCBcdTAwMjZoYXNfc2htZW0sIDApO1xuIDU3NjpcdCAgICBpZiAoIWxvY2FsX2h3X2luZm8pIHtcbiA1Nzc6XHRcdCAgICAvKiBjaGVjayB3aGV0aGVyIGZvcmNpbmcgaW9fbGluZXMgdG8gMTYgaGVscHMuLi4gKi9cbiA1Nzg6XHRcdCAgICBwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7XG4gNTc5Olx0XHQgICAgbG9jYWxfaHdfaW5mbyA9IHBjbmV0X3RyeV9jb25maWcobGluaywgXHUwMDI2aGFzX3NobWVtLCAxKTtcbiA1ODA6XHRcdCAgICBpZiAobG9jYWxfaHdfaW5mbyA9PSBOVUxMKSB7XG4gNTgxOlx0XHRcdCAgICBkZXZfbm90aWNlKFx1MDAyNmxpbmstXHUwMDNlZGV2LCBcJiMzNDt1bmFibGUgdG8gcmVhZCBoYXJkd2FyZSBuZXRcJiMzNDtcbiA1ODI6XHRcdFx0XHQgICAgXCYjMzQ7IGFkZHJlc3MgZm9yIGlvIGJhc2UgJSMzbHhcXG5cJiMzNDssIGRldi1cdTAwM2ViYXNlX2FkZHIpO1xuIDU4MzpcdFx0XHQgICAgZ290byBmYWlsZWQ7XG4gNTg0Olx0XHQgICAgfVxuIDU4NTpcdCAgICB9XG4gNTg2Olx0XG4gNTg3Olx0ICAgIGluZm8tXHUwMDNlZmxhZ3MgPSBsb2NhbF9od19pbmZvLVx1MDAzZWZsYWdzO1xuIDU4ODpcdCAgICAvKiBDaGVjayBmb3IgdXNlciBvdmVycmlkZXMgKi9cbiA1ODk6XHQgICAgaW5mby1cdTAwM2VmbGFncyB8PSAoZGVsYXlfb3V0cHV0KSA/IERFTEFZX09VVFBVVCA6IDA7XG4gNTkwOlx0ICAgIGlmICgobGluay1cdTAwM2VtYW5mX2lkID09IE1BTkZJRF9TT0NLRVQpIFx1MDAyNlx1MDAyNlxuIDU5MTpcdFx0KChsaW5rLVx1MDAzZWNhcmRfaWQgPT0gUFJPRElEX1NPQ0tFVF9MUEUpIHx8XG4gNTkyOlx0XHQgKGxpbmstXHUwMDNlY2FyZF9pZCA9PSBQUk9ESURfU09DS0VUX0xQRV9DRikgfHxcbiA1OTM6XHRcdCAobGluay1cdTAwM2VjYXJkX2lkID09IFBST0RJRF9TT0NLRVRfRUlPKSkpXG4gNTk0Olx0XHRpbmZvLVx1MDAzZWZsYWdzIFx1MDAyNj0gflVTRV9CSUdfQlVGO1xuIDU5NTpcdCAgICBpZiAoIXVzZV9iaWdfYnVmKVxuIDU5NjpcdFx0aW5mby1cdTAwM2VmbGFncyBcdTAwMjY9IH5VU0VfQklHX0JVRjtcbiA1OTc6XHRcbiA1OTg6XHQgICAgaWYgKGluZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IFVTRV9CSUdfQlVGKSB7XG4gNTk5Olx0XHRzdGFydF9wZyA9IFNPQ0tFVF9TVEFSVF9QRztcbiA2MDA6XHRcdHN0b3BfcGcgPSBTT0NLRVRfU1RPUF9QRztcbiA2MDE6XHRcdGNtX29mZnNldCA9IDB4MTAwMDA7XG4gNjAyOlx0ICAgIH0gZWxzZSB7XG4gNjAzOlx0XHRzdGFydF9wZyA9IFBDTkVUX1NUQVJUX1BHO1xuIDYwNDpcdFx0c3RvcF9wZyA9IFBDTkVUX1NUT1BfUEc7XG4gNjA1Olx0XHRjbV9vZmZzZXQgPSAwO1xuIDYwNjpcdCAgICB9XG4gNjA3Olx0XG4gNjA4Olx0ICAgIC8qIGhhc19zaG1lbSBpcyBpZ25vcmVkIGlmIHVzZV9zaG1lbSAhPSAtMSAqL1xuIDYwOTpcdCAgICBpZiAoKHVzZV9zaG1lbSA9PSAwKSB8fCAoIWhhc19zaG1lbSBcdTAwMjZcdTAwMjYgKHVzZV9zaG1lbSA9PSAtMSkpIHx8XG4gNjEwOlx0XHQoc2V0dXBfc2htZW1fd2luZG93KGxpbmssIHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQpICE9IDApKVxuIDYxMTpcdFx0c2V0dXBfZG1hX2NvbmZpZyhsaW5rLCBzdGFydF9wZywgc3RvcF9wZyk7XG4gNjEyOlx0XG4gNjEzOlx0ICAgIGVpX3N0YXR1cy5uYW1lID0gXCYjMzQ7TkUyMDAwXCYjMzQ7O1xuIDYxNDpcdCAgICBlaV9zdGF0dXMud29yZDE2ID0gMTtcbiA2MTU6XHQgICAgZWlfc3RhdHVzLnJlc2V0XzgzOTAgPSBwY25ldF9yZXNldF84MzkwO1xuIDYxNjpcdFxuIDYxNzpcdCAgICBpZiAoaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgKElTX0RMMTAwMTl8SVNfREwxMDAyMikpXG4gNjE4Olx0XHRtaWlfcGh5X3Byb2JlKGRldik7XG4gNjE5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzQ1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIGBwY25ldF9jb25maWdgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBwY25ldF9jb25maWdgIGlzIGFjdHVhbGx5IHVzZWQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIHJvbGUgYW5kIGltcGFjdCBpbiB0aGUgc3lzdGVtLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byB0cmFjZSBpdHMgY2FsbHMg4oCTIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIFRpbWUgdG8gZ2V0IGRvd24gaW50byB0aGUgY29kZSBhbmQgc3RhcnQgbG9va2luZy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBkZWJ1Z2dpbmcgcHJvY2Vzcy4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjbmV0X2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9OTM9c3RhdGljIHZvaWQgbWlpX3BoeV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYzo5NDpzdGF0aWMgaW50IHBjbmV0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMtOTUtc3RhdGljIHZvaWQgcGNuZXRfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jPTIzNT1zdGF0aWMgaW50IHBjbmV0X3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0yNTItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MjUzOiAgICByZXR1cm4gcGNuZXRfY29uZmlnKGxpbmspO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTI1NC19IC8qIHBjbmV0X2F0dGFjaCAqL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYz01MDQ9c3RhdGljIHN0cnVjdCBod19pbmZvICpwY25ldF90cnlfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy01NjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6NTY1OnN0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTU2Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTU3Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYzo1NzM6ICAgIGRldl9kYmcoXHUwMDI2bGluay1cdTAwM2VkZXYsIFwmIzM0O3BjbmV0X2NvbmZpZ1xcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMtNTc0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy02NDYtICAgIHJldHVybiAtRU5PREVWO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjY0Nzp9IC8qIHBjbmV0X2NvbmZpZyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTY0OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwODYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBDTUNJQSBSZWFjaGFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBwY25ldF9jcy5jYCwgYW5kIHNwZWNpZmljYWxseSBgcGNuZXRfcHJvYmVgLiBUaGUgY29kZSBzaG93cyBgcGNuZXRfcHJvYmVgIGJlaW5nIGNhbGxlZCBieSB0aGUgYHBjbmV0X2RyaXZlcmAgd2hpY2ggaXMgcmVnaXN0ZXJlZCBhcyBhIFBDTUNJQSBkcml2ZXIuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbiBleHBlcnQgaW4gZnV6emluZyBhbmQga2VybmVsIGludGVybmFscywgaXMgcmVhY2hhYmlsaXR5LiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIFBDTUNJQSBkZXZpY2VzLCBhbmQgdGhlcmVmb3JlIGBwY25ldF9wcm9iZWAsIGFyZSByZWFjaGFibGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQg4oCTIHNwZWNpZmljYWxseSwgc3RhbmRhcmQgUUVNVSBvbiB4ODZfNjQuIFRoZSBjb3JlIHByaW5jaXBsZTogaWYgaXQmIzM5O3Mgbm90IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBpdCBzaG91bGRuJiMzOTt0IGJlIGZ1enplZC4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSB0b29saW5nIHN1cHBvcnRzIFBDTUNJQS4gSSBrbm93IHN5emthbGxlciBpcyBteSBwcmltYXJ5IGZ1enppbmcgdG9vbCwgYnV0IEkgY2FuJiMzOTt0IHNlYXJjaCBmb3Igc3l6bGFuZyBkZXNjcmlwdGlvbnMgb3IgZXhwcmVzc2lvbnMgd2l0aCAmIzM5O2xvbmcgc3l6XyYjMzk7IHVzaW5nIHRoZSBkZWNsYXJlZCB0b29scy4gVGhpcyBpcyBhIGNydWNpYWwgbGltaXRhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYSB3YXkgdG8gc2VhcmNoIGZvciBzeXprYWxsZXIgZGVzY3JpcHRpb25zLgoKTXkgbmV4dCBsaW5lIG9mIHRob3VnaHQgaXMgd2hldGhlciB0aGVyZSYjMzk7cyBhbnkgdmlydHVhbCBvciBlbXVsYXRlZCBQQ01DSUEgaGFyZHdhcmUgaW4gdGhlIExpbnV4IGtlcm5lbCBvciBRRU1VIHRoYXQgSSBjYW4gdGFyZ2V0LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGF2YWlsYWJpbGl0eSBvZiBlbXVsYXRlZCBQQ01DSUEgc29ja2V0cy4gIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL3BjbWNpYS9gIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsIHNvdXJjZS4gSSBzZWUgYSBidW5jaCBvZiBkcml2ZXJzIHRoZXJlLCBtYW55IGZvciBBUk0gYW5kIE1JUFMgU29Dcy4gVGhlcmUmIzM5O3MgYWxzbyBgeWVudGFfc29ja2V0LmNgLCBhIFBDSS1DYXJkQnVzIGJyaWRnZSwgYW5kIGBpODIzNjUuY2AsIHdoaWNoIGlzIGFuIElTQSBQQ01DSUEgY29udHJvbGxlci4gVGhlIGBwZDY3MjkuY2AgaXMgUENJLVBDTUNJQSBicmlkZ2UuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBDYW4gYW55IG9mIHRoZXNlIGJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVU/IEkgbmVlZCB0byBrbm93IGlmIFFFTVUgZW11bGF0ZXMgYW55IG9mIHRoZXNlIGNvbnRyb2xsZXJzLiBTcGVjaWZpY2FsbHksIGRvZXMgUUVNVSBoYXZlIGEgUEQ2NzI5LCBZZW50YSwgb3IgaTgyMzY1PyBUaGlua2luZyBiYWNrIG9uIG15IFFFTVUgZXhwZXJpZW5jZSwgSSByZWNhbGwgdGhhdCBQQ01DSUEgc3VwcG9ydCB3YXMgcHJlc2VudCBpbiB0aGUgcGFzdCBmb3IgdGhlIFBYQTJ4eCBhcmNoaXRlY3R1cmUsIGluIGZhY3QgSSByZW1lbWJlciBpdCBiZWluZyBkZXByZWNhdGVkIG9yIHJlbW92ZWQsIGFuZCB0aGF0IGl0IG5ldmVyIGluY2x1ZGVkIFBDSSBDYXJkQnVzIG9yIFBDTUNJQSBicmlkZ2VzLiAgU28gc3RhbmRhcmQgYHFlbXUtc3lzdGVtLXg4Nl82NGAgKGxpa2UgYC1tYWNoaW5lIHEzNWAgb3IgYHBjYCkgaXMgdW5saWtlbHkgdG8gcHJvdmlkZSBQQ01DSUEuCgpUaGVuIEkgYW0gcmVtaW5kZWQgb2YgYG5lMmtfcGNpYCwgd2hpY2ggUUVNVSAqZG9lcyogZW11bGF0ZS4gSG93ZXZlciwgdGhlIGNvZGUgaGVyZSBpcyB0YXJnZXRpbmcgYHBjbmV0X2NzLmNgLCB3aGljaCBpcyByZWdpc3RlcmVkIGZvciBQQ01DSUEgZGV2aWNlcy4gTXkgdW5kZXJzdGFuZGluZyBvZiBQQ01DSUEgaXMgdGhhdCBpdCByZWxpZXMgb24gc29ja2V0IGV2ZW50czogYSBjYXJkIG5lZWRzIHRvIGJlIGluc2VydGVkIGludG8gYSBzb2NrZXQuIFRoZSBgcGNjYXJkZGAga2VybmVsIHRocmVhZCB3aWxsIHJ1biB3aGVuIGEgc29ja2V0IGV2ZW50IGhhcHBlbnMuIEl0IG5lZWRzIHRvIHJlYWQgdGhlIENJUyBmcm9tIHRoZSBjYXJkIGFuZCB0aGVuIGNyZWF0ZSBhbmQgYmluZCBhIGBwY21jaWFfZGV2aWNlYCB2aWEgdGhlIHBjbWNpYSBidXMuCgpUaGVyZWZvcmUsIHNpbmNlIGBwY25ldF9jc2AgaXMgYSBQQ01DSUEgZHJpdmVyLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIHdheSB0byBjcmVhdGUgYSB2aXJ0dWFsIFBDTUNJQSBzb2NrZXQgb3IgY2FyZCwgdGhlIGNvZGUgd2lsbCBsaWtlbHkgb25seSBiZSByZWFjaGVkIHdoZW4gYSAqcmVhbCogUENNQ0lBIGRldmljZSBpcyBwbHVnZ2VkIGluIG9yIGEgcHJvcGVyIGVtdWxhdGlvbiBvZiBhIFBDTUNJQSBzb2NrZXQgY2FuIGJlIGVzdGFibGlzaGVkLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGtlcm5lbCYjMzk7cyBzeXNmcyBpbnRlcmZhY2UgZm9yIGEgbWV0aG9kIHRvIGluamVjdCBvciBjcmVhdGUgUENNQ0lBIGRldmljZXMgb3Igc29ja2V0cy4gSSYjMzk7bSBnb2luZyB0byBzZWFyY2ggdGhlIGBkcml2ZXJzL3BjbWNpYS9gIGRpcmVjdG9yeSBmb3IgYW55IHN5c2ZzIGF0dHJpYnV0ZXMgcmVsYXRlZCB0byBkZXZpY2UgY3JlYXRpb24sIGJpbmRpbmcsIG9yIGluamVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7REVWSUNFX0FUVFImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3BjbWNpYSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjbWNpYS9kcy5jPTEwMDI9c3RhdGljIHNzaXplX3QgZmllbGQjI19zaG93IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXHRcdFxcXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDA2LX1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9wY21jaWEvZHMuYzoxMDA3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhmaWVsZCk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwMDgtXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYz0xMDEwPXN0YXRpYyBzc2l6ZV90IG5hbWUjI19zaG93IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXHRcdFxcXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDE0LX1cdFx0XHRcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9wY21jaWEvZHMuYzoxMDE1OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhuYW1lKTtcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTAxNi1cbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTEwMjU9c3RhdGljIHNzaXplX3QgZnVuY3Rpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTAzMC19XG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEwMzE6c3RhdGljIERFVklDRV9BVFRSX1JPKGZ1bmN0aW9uKTtcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTAzMi1cbmRyaXZlcnMvcGNtY2lhL2RzLmM9MTAzMz1zdGF0aWMgc3NpemVfdCByZXNvdXJjZXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDQzLX1cbmRyaXZlcnMvcGNtY2lhL2RzLmM6MTA0NDpzdGF0aWMgREVWSUNFX0FUVFJfUk8ocmVzb3VyY2VzKTtcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTA0NS1cbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTEwNTY9c3RhdGljIHNzaXplX3QgcG1fc3RhdGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwNzEtfVxuZHJpdmVycy9wY21jaWEvZHMuYzoxMDcyOnN0YXRpYyBERVZJQ0VfQVRUUl9SVyhwbV9zdGF0ZSk7XG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwNzMtXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTEwNzQ9c3RhdGljIHNzaXplX3QgbW9kYWxpYXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDkzLX1cbmRyaXZlcnMvcGNtY2lhL2RzLmM6MTA5NDpzdGF0aWMgREVWSUNFX0FUVFJfUk8obW9kYWxpYXMpO1xuZHJpdmVycy9wY21jaWEvZHMuYy0xMDk1LVxuZHJpdmVycy9wY21jaWEvZHMuYz0xMDk2PXN0YXRpYyBzc2l6ZV90IGFsbG93X2Z1bmNfaWRfbWF0Y2hfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTExMC19XG5kcml2ZXJzL3BjbWNpYS9kcy5jOjExMTE6c3RhdGljIERFVklDRV9BVFRSX1dPKGFsbG93X2Z1bmNfaWRfbWF0Y2gpO1xuZHJpdmVycy9wY21jaWEvZHMuYy0xMTEyLVxuLS1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9MTA5OT1zdGF0aWMgc3NpemVfdCBzdG9yZV9pb19kYihzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy0xMTI4LX1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM6MTEyOTpzdGF0aWMgREVWSUNFX0FUVFIoYXZhaWxhYmxlX3Jlc291cmNlc19pbywgMDYwMCwgc2hvd19pb19kYiwgc3RvcmVfaW9fZGIpO1xuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy0xMTMwLVxuLS1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9MTE2NT1zdGF0aWMgc3NpemVfdCBzdG9yZV9tZW1fZGIoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtMTE5NC19XG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjExOTU6c3RhdGljIERFVklDRV9BVFRSKGF2YWlsYWJsZV9yZXNvdXJjZXNfbWVtLCAwNjAwLCBzaG93X21lbV9kYiwgc3RvcmVfbWVtX2RiKTtcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtMTE5Ni1cbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmM9NzAzPXN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKFxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYy03MjctfVxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jOjcyODpzdGF0aWMgREVWSUNFX0FUVFIoc3RhdHVzLCBTX0lSVUdPLCBzaG93X3N0YXR1cywgTlVMTCk7XG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMtNzI5LVxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTM0PXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zaG93X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy00NC19XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzo0NTpzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF90eXBlLCAwNDQ0LCBwY2NhcmRfc2hvd190eXBlLCBOVUxMKTtcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTQ2LVxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM9NDc9c3RhdGljIHNzaXplX3QgcGNjYXJkX3Nob3dfdm9sdGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTU4LX1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jOjU5OnN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX3ZvbHRhZ2UsIDA0NDQsIHBjY2FyZF9zaG93X3ZvbHRhZ2UsIE5VTEwpO1xuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtNjAtXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYz02MT1zdGF0aWMgc3NpemVfdCBwY2NhcmRfc2hvd192cHAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy02OC19XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzo2OTpzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF92cHAsIDA0NDQsIHBjY2FyZF9zaG93X3ZwcCwgTlVMTCk7XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy03MC1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTcxPXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zaG93X3ZjYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTc4LX1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jOjc5OnN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX3ZjYywgMDQ0NCwgcGNjYXJkX3Nob3dfdmNjLCBOVUxMKTtcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTgwLVxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTgyPXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9pbnNlcnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy05My19XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzo5NDpzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF9pbnNlcnQsIDAyMDAsIE5VTEwsIHBjY2FyZF9zdG9yZV9pbnNlcnQpO1xuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtOTUtXG4tLVxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM9MTA1PXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9jYXJkX3BtX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy0xMjUtfVxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM6MTI2OnN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX3BtX3N0YXRlLCAwNjQ0LCBwY2NhcmRfc2hvd19jYXJkX3BtX3N0YXRlLCBwY2NhcmRfc3RvcmVfY2FyZF9wbV9zdGF0ZSk7XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy0xMjctXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYz0xMjg9c3RhdGljIHNzaXplX3QgcGNjYXJkX3N0b3JlX2VqZWN0KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy0xNDAtfVxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM6MTQxOnN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX2VqZWN0LCAwMjAwLCBOVUxMLCBwY2NhcmRfc3RvcmVfZWplY3QpO1xuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtMTQyLVxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTE1Mj1zdGF0aWMgc3NpemVfdCBwY2NhcmRfc3RvcmVfaXJxX21hc2soc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTE3My19XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzoxNzQ6c3RhdGljIERFVklDRV9BVFRSKGNhcmRfaXJxX21hc2ssIDA2MDAsIHBjY2FyZF9zaG93X2lycV9tYXNrLCBwY2NhcmRfc3RvcmVfaXJxX21hc2spO1xuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtMTc1LVxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTE4ND1zdGF0aWMgc3NpemVfdCBwY2NhcmRfc3RvcmVfcmVzb3VyY2Uoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTIwMS19XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzoyMDI6c3RhdGljIERFVklDRV9BVFRSKGF2YWlsYWJsZV9yZXNvdXJjZXNfc2V0dXBfZG9uZSwgMDYwMCwgcGNjYXJkX3Nob3dfcmVzb3VyY2UsIHBjY2FyZF9zdG9yZV9yZXNvdXJjZSk7XG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy0yMDMtXG4tLVxuZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmM9MTc2PXN0YXRpYyBzc2l6ZV90IHNob3dfeWVudGFfcmVnaXN0ZXJzKHN0cnVjdCBkZXZpY2UgKnllbnRhZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuLS1cbmRyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jLTIwNi1cbmRyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jOjIwNzpzdGF0aWMgREVWSUNFX0FUVFIoeWVudGFfcmVnaXN0ZXJzLCBTX0lSVVNSLCBzaG93X3llbnRhX3JlZ2lzdGVycywgTlVMTCk7XG5kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYy0yMDgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTcxCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTIyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9ZmFsc2U6IFBDTUNJQSBpcyBVbnJlYWNoYWJsZSoqCgpPa2F5LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNvZGUgaXMgd29ydGggZnV6emluZy4gTGV0IG1lIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHNvY2tldF9zeXNmcy5jYC4gSSBzZWUgYHBjY2FyZF9zdG9yZV9pbnNlcnRgLCBgcGNjYXJkX3N0b3JlX2VqZWN0YCwgZXRjLiBUaG9zZSBhcmUgYWxsIHJlbGF0ZWQgdG8gYHBjbWNpYV9zb2NrZXRgIGRldmljZXMsIHdoaWNoIGFyZSBvbmx5IHJlZ2lzdGVyZWQgd2hlbiBhIHNvY2tldCBkcml2ZXIgbGlrZSBgeWVudGFfc29ja2V0YCBvciBgcGQ2NzI5YCBwcm9iZXMuIEJ1dCBjYW4gYW55IG9mIHRob3NlIHNvY2tldCBkcml2ZXJzIHByb2JlIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHg4Nl82ND8gTm8hIFRoZXJlIGFyZSBubyBQQ01DSUEgc29ja2V0IGRldmljZXMgZW11bGF0ZWQgaW4gdGhvc2UgZW52aXJvbm1lbnRzIG9uIGFtZDY0LiBFdmVuIGlmIHRoZXJlIHdlcmUsIGluc2VydGluZyBhIGNhcmQgd291bGQgaW52b2x2ZSByZWFkaW5nIHRoZSBjYXJkJiMzOTtzIENJUyBmcm9tIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBJIGRvbiYjMzk7dCBoYXZlLgoKTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIFN5emthbGxlci4gRG9lcyBpdCBlbXVsYXRlIFBDTUNJQT8gTm9wZS4KCk9rYXksIGJhY2sgdG8gdGhlIGluc3RydWN0aW9ucy4gU2VjdGlvbiAyLCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuIEl0IHNheXMgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIGZhbGxzIGludG8gc2V2ZXJhbCBjYXRlZ29yaWVzLiBMZXQmIzM5O3Mgc2VlLi4uIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBsaWtlIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBvciBkcml2ZXJzIHJlcXVpcmluZyBwaHlzaWNhbCBQQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGF0IHNvdW5kcyBsaWtlIFBDTUNJQSEKCkkgc2hvdWxkIHJlLXJlYWQgU2VjdGlvbiAxLCB0b28uICYjMzQ7UmVhY2hhYmxlIGlzIHRoZSBwcmltYXJ5IGdhdGUuLi4mIzM0OyBGdXp6aW5nIG9ubHkgd29ya3MgaWYgdGhlIGNvZGUgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJZiBpdCYjMzk7cyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIGRvbiYjMzk7dCBmdXp6IGl0LgoKTGV0JiMzOTtzIGNoZWNrIGBwY25ldF9jc2AgbW9yZSBwcmVjaXNlbHkuIEl0JiMzOTtzIGEgMTYtYml0IFBDTUNJQSAoUEMgQ2FyZCkgRXRoZXJuZXQgZHJpdmVyIGZvciBORTIwMDAtY29tcGF0aWJsZSBQQ01DSUEgY2FyZHMuIENhbiBgcGNuZXRfY3NgIHJ1biBpbiBRRU1VIG9yIEdDRT8gTm8hIFBDTUNJQSBoYXJkd2FyZSBpcyBmdW5kYW1lbnRhbGx5IHVucmVhY2hhYmxlIGluIHRoZXNlIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cyBvbiBhbWQ2NC4gVGhleSBkb24mIzM5O3QgZW11bGF0ZSB0aGUgc29ja2V0IGNvbnRyb2xsZXJzLCBhbmQgdGhleSBkb24mIzM5O3QgZW11bGF0ZSBORTIwMDAgUENNQ0lBIGNhcmRzLgoKQWxyaWdodCwgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZiB0byBiZSBzdXJlLiBJIGNhbiBzZWUgdGhlIHBhdGNoIGNoYW5nZXMgc29tZSBlcnJvciBoYW5kbGluZyBwYXRocywgYnV0IGl0IGFsbCByZXZvbHZlcyBhcm91bmQgYHBjbWNpYV9yZWxlYXNlX3dpbmRvd2AgYW5kIHRoZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBvZiB0aGUgbWVtb3J5IHdpbmRvdyBmb3IgdGhlIFBDTUNJQSBkZXZpY2UuIFRoaXMgaXMgYWxsIHByZWRpY2F0ZWQgb24gdGhlIHByZXNlbmNlIG9mIHBoeXNpY2FsIFBDTUNJQSBoYXJkd2FyZS4gSXQgbG9va3MgbGlrZSBpdCBqdXN0IHNsaWdodGx5IHJlb3JkZXJzIHRoZSBjYWxscyB0byBtYWtlIHN1cmUgcmVzb3VyY2VzIGFyZSByZWxlYXNlZCBpbiBlcnJvciBwYXRocy4KClRoZSBjb25jbHVzaW9uOiBQQ01DSUEgaGFyZHdhcmUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAyMTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQxMDpcdFxuMTQxMTpcdHN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXG4xNDEyOlx0XHRcdFx0ICAgICAgaW50IHN0b3BfcGcsIGludCBjbV9vZmZzZXQpXG4xNDEzOlx0e1xuMTQxNDpcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay1cdTAwM2Vwcml2O1xuMTQxNTpcdCAgICBzdHJ1Y3QgcGNuZXRfZGV2ICppbmZvID0gUFJJVihkZXYpO1xuMTQxNjpcdCAgICBpbnQgaSwgd2luZG93X3NpemUsIG9mZnNldCwgcmV0O1xuMTQxNzpcdFxuMTQxODpcdCAgICB3aW5kb3dfc2l6ZSA9IChzdG9wX3BnIC0gc3RhcnRfcGcpIFx1MDAzY1x1MDAzYyA4O1xuMTQxOTpcdCAgICBpZiAod2luZG93X3NpemUgXHUwMDNlIDMyICogMTAyNClcbjE0MjA6XHRcdHdpbmRvd19zaXplID0gMzIgKiAxMDI0O1xuMTQyMTpcdFxuMTQyMjpcdCAgICAvKiBNYWtlIHN1cmUgaXQmIzM5O3MgYSBwb3dlciBvZiB0d28uICAqL1xuMTQyMzpcdCAgICB3aW5kb3dfc2l6ZSA9IHJvdW5kdXBfcG93X29mX3R3byh3aW5kb3dfc2l6ZSk7XG4xNDI0Olx0XG4xNDI1Olx0ICAgIC8qIEFsbG9jYXRlIGEgbWVtb3J5IHdpbmRvdyAqL1xuMTQyNjpcdCAgICBsaW5rLVx1MDAzZXJlc291cmNlWzNdLVx1MDAzZWZsYWdzIHw9IFdJTl9EQVRBX1dJRFRIXzE2fFdJTl9NRU1PUllfVFlQRV9DTXxXSU5fRU5BQkxFO1xuMTQyNzpcdCAgICBsaW5rLVx1MDAzZXJlc291cmNlWzNdLVx1MDAzZWZsYWdzIHw9IFdJTl9VU0VfV0FJVDtcbjE0Mjg6XHQgICAgbGluay1cdTAwM2VyZXNvdXJjZVszXS1cdTAwM2VzdGFydCA9IDA7IGxpbmstXHUwMDNlcmVzb3VyY2VbM10tXHUwMDNlZW5kID0gd2luZG93X3NpemU7XG4xNDI5Olx0ICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhsaW5rLCBsaW5rLVx1MDAzZXJlc291cmNlWzNdLCBtZW1fc3BlZWQpO1xuMTQzMDpcdCAgICBpZiAocmV0KVxuMTQzMTpcdFx0ICAgIGdvdG8gZmFpbGVkO1xuMTQzMjpcdFxuMTQzMzpcdCAgICBvZmZzZXQgPSAoc3RhcnRfcGcgXHUwMDNjXHUwMDNjIDgpICYjNDM7IGNtX29mZnNldDtcbjE0MzQ6XHQgICAgb2Zmc2V0IC09IG9mZnNldCAlIHdpbmRvd19zaXplO1xuMTQzNTpcdCAgICByZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstXHUwMDNlcmVzb3VyY2VbM10sIG9mZnNldCk7XG4xNDM2Olx0ICAgIGlmIChyZXQpXG4xNDM3Olx0XHQgICAgZ290byByZWxlYXNlO1xuMTQzODpcdFxuMTQzOTpcdCAgICAvKiBUcnkgc2NyaWJibGluZyBvbiB0aGUgYnVmZmVyICovXG4xNDQwOlx0ICAgIGluZm8tXHUwMDNlYmFzZSA9IGlvcmVtYXAobGluay1cdTAwM2VyZXNvdXJjZVszXS1cdTAwM2VzdGFydCxcbjE0NDE6XHRcdFx0XHRyZXNvdXJjZV9zaXplKGxpbmstXHUwMDNlcmVzb3VyY2VbM10pKTtcbjE0NDI6XHQgICAgaWYgKHVubGlrZWx5KCFpbmZvLVx1MDAzZWJhc2UpKSB7XG4xNDQzOlx0XHQgICAgcmV0ID0gLUVOT01FTTtcbjE0NDQ6XHRcdCAgICBnb3RvIHJlbGVhc2U7XG4xNDQ1Olx0ICAgIH1cbjE0NDY6XHRcbjE0NDc6XHQgICAgZm9yIChpID0gMDsgaSBcdTAwM2MgKFRYX1BBR0VTXHUwMDNjXHUwMDNjOCk7IGkgJiM0Mzs9IDIpXG4xNDQ4Olx0XHRfX3Jhd193cml0ZXcoKGlcdTAwM2VcdTAwM2UxKSwgaW5mby1cdTAwM2ViYXNlJiM0MztvZmZzZXQmIzQzO2kpO1xuMTQ0OTpcdCAgICB1ZGVsYXkoMTAwKTtcbjE0NTA6XHQgICAgZm9yIChpID0gMDsgaSBcdTAwM2MgKFRYX1BBR0VTXHUwMDNjXHUwMDNjOCk7IGkgJiM0Mzs9IDIpXG4xNDUxOlx0XHRpZiAoX19yYXdfcmVhZHcoaW5mby1cdTAwM2ViYXNlJiM0MztvZmZzZXQmIzQzO2kpICE9IChpXHUwMDNlXHUwMDNlMSkpIGJyZWFrO1xuMTQ1MjpcdCAgICBwY25ldF9yZXNldF84MzkwKGRldik7XG4xNDUzOlx0ICAgIGlmIChpICE9IChUWF9QQUdFU1x1MDAzY1x1MDAzYzgpKSB7XG4xNDU0Olx0XHRpb3VubWFwKGluZm8tXHUwMDNlYmFzZSk7XG4xNDU1Olx0XHRpbmZvLVx1MDAzZWJhc2UgPSBOVUxMO1xuMTQ1NjpcdFx0Z290byByZWxlYXNlO1xuMTQ1NzpcdCAgICB9XG4xNDU4Olx0XG4xNDU5Olx0ICAgIGVpX3N0YXR1cy5tZW0gPSBpbmZvLVx1MDAzZWJhc2UgJiM0Mzsgb2Zmc2V0O1xuMTQ2MDpcdCAgICBlaV9zdGF0dXMucHJpdiA9IHJlc291cmNlX3NpemUobGluay1cdTAwM2VyZXNvdXJjZVszXSk7XG4xNDYxOlx0ICAgIGRldi1cdTAwM2VtZW1fc3RhcnQgPSAodV9sb25nKWVpX3N0YXR1cy5tZW07XG4xNDYyOlx0ICAgIGRldi1cdTAwM2VtZW1fZW5kID0gZGV2LVx1MDAzZW1lbV9zdGFydCAmIzQzOyByZXNvdXJjZV9zaXplKGxpbmstXHUwMDNlcmVzb3VyY2VbM10pO1xuMTQ2MzpcdFxuMTQ2NDpcdCAgICBlaV9zdGF0dXMudHhfc3RhcnRfcGFnZSA9IHN0YXJ0X3BnO1xuMTQ2NTpcdCAgICBlaV9zdGF0dXMucnhfc3RhcnRfcGFnZSA9IHN0YXJ0X3BnICYjNDM7IFRYX1BBR0VTO1xuMTQ2NjpcdCAgICBlaV9zdGF0dXMuc3RvcF9wYWdlID0gc3RhcnRfcGcgJiM0MzsgKFxuMTQ2NzpcdFx0ICAgIChyZXNvdXJjZV9zaXplKGxpbmstXHUwMDNlcmVzb3VyY2VbM10pIC0gb2Zmc2V0KSBcdTAwM2VcdTAwM2UgOCk7XG4xNDY4Olx0XG4xNDY5Olx0ICAgIC8qIHNldCB1cCBibG9jayBpL28gZnVuY3Rpb25zICovXG4xNDcwOlx0ICAgIGVpX3N0YXR1cy5nZXRfODM5MF9oZHIgPSBzaG1lbV9nZXRfODM5MF9oZHI7XG4xNDcxOlx0ICAgIGVpX3N0YXR1cy5ibG9ja19pbnB1dCA9IHNobWVtX2Jsb2NrX2lucHV0O1xuMTQ3MjpcdCAgICBlaV9zdGF0dXMuYmxvY2tfb3V0cHV0ID0gc2htZW1fYmxvY2tfb3V0cHV0O1xuMTQ3MzpcdFxuMTQ3NDpcdCAgICBpbmZvLVx1MDAzZWZsYWdzIHw9IFVTRV9TSE1FTTtcbjE0NzU6XHQgICAgcmV0dXJuIDA7XG4xNDc2Olx0XG4xNDc3Olx0cmVsZWFzZTpcbjE0Nzg6XHRcdHBjbWNpYV9yZWxlYXNlX3dpbmRvdyhsaW5rLCBsaW5rLVx1MDAzZXJlc291cmNlWzNdKTtcbjE0Nzk6XHRmYWlsZWQ6XG4xNDgwOlx0ICAgIHJldHVybiAxO1xuMTQ4MTpcdH1cbjE0ODI6XHRcbjE0ODM6XHQvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cbjE0ODQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2OTkKCQkJCQkJCW91dHB1dDogMTQ0CgkJCQkJCQl0aG91Z2h0czogNzIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIGFuIFVucmVhY2hhYmxlIFBDTUNJQSBEcml2ZXIgQ29kZSBQYXRoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuY2AsIHNwZWNpZmljYWxseSB0aGUgYHNldHVwX3NobWVtX3dpbmRvd2AgZnVuY3Rpb24uIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSByZXNvdXJjZSBsZWFrIHdoZXJlIGEgUENNQ0lBIG1lbW9yeSB3aW5kb3cgd2FzbiYjMzk7dCBiZWluZyByZWxlYXNlZCBpbiB0aGUgY2FzZSBvZiBhbiBlcnJvciBkdXJpbmcgaXRzIHNldHVwLiBUaGUgZml4IGFkZHMgYSBgcGNtY2lhX3JlbGVhc2Vfd2luZG93YCBjYWxsIGJlZm9yZSByZXR1cm5pbmcgb24gZXJyb3IuIFN0YW5kYXJkIHJlc291cmNlIG1hbmFnZW1lbnQgaW1wcm92ZW1lbnQsIG5vdGhpbmcgaW5oZXJlbnRseSBjb21wbGV4LgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBjb2RlICpyZWFjaGFibGUqPyBNeSBpbml0aWFsIGd1dCBmZWVsaW5nLCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggdGhlc2Ugc3lzdGVtcywgaXMgJiMzNDtwcm9iYWJseSBub3QmIzM0Oy4gTGV0JiMzOTtzIGNvbmZpcm06CgoxLiAgKipBcmNoaXRlY3R1cmUgYW5kIEVudmlyb25tZW50OioqIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYW1kNjQuIGBwY25ldF9jc2AgaXMgYSBsZWdhY3kgUENNQ0lBIGRyaXZlciAoTkUyMDAwLWNvbXBhdGlibGUpIGRlc2lnbmVkIGZvciAxNi1iaXQgUENNQ0lBIGNhcmRzLiBJbiB0b2RheSYjMzk7cyB2aXJ0dWFsaXphdGlvbiBsYW5kc2NhcGUsIHBhcnRpY3VsYXJseSB3aXRoaW4gUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSksIFBDTUNJQSBlbXVsYXRpb24gaXMgdmlydHVhbGx5IG5vbmV4aXN0ZW50LiBUaGVzZSBzdGFuZGFyZCBlbnZpcm9ubWVudHMgZG9uJiMzOTt0IGVtdWxhdGUgdGhlIFBDTUNJQSBob3N0IHNvY2tldCBjb250cm9sbGVycyBvciB0aGUgUENNQ0lBIE5FMjAwMCBkZXZpY2VzLiBUaGVyZSYjMzk7cyBubyBlcXVpdmFsZW50IG9mIFVTQiYjMzk7cyBgdXNiaXBgIG9yIG5ldHdvcmsgZW11bGF0aW9uIGxpa2UgYGR1bW15X2hjZGAsIGB2aGNpYCwgYGR1bW15YCwgYHZldGhgLCBvciBgdHVuYCB0byBicmlkZ2UgdGhpcyBnYXAuIFNvLCB0aGUgcHJvYmUgcGF0aCwgZnJvbSBgcGNuZXRfcHJvYmVgIGRvd24gdG8gYHBjbmV0X2NvbmZpZ2AgYW5kIHRoZW4gaW50byBgc2V0dXBfc2htZW1fd2luZG93YCwgaXMgZWZmZWN0aXZlbHkgYmxvY2tlZC4KCjIuICAqKkNvbXBhcmlzb24gdG8gUHJpb3IgV29yazoqKiBUaGlzIHBlcmZlY3RseSBhbGlnbnMgd2l0aCB0aGUgcHJpb3IgZXhhbXBsZXMgb2YgdW5yZWFjaGFibGUgaGFyZHdhcmUsIHNwZWNpZmljYWxseSAmIzM0O3ZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzJiMzNDsgdGhhdCByZXF1aXJlIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcy4gVGhlIFBDTUNJQSBFdGhlcm5ldCBkcml2ZXIgZmFsbHMgc3F1YXJlbHkgaW50byB0aGlzIGNhdGVnb3J5OiBsZWdhY3ksIHBoeXNpY2FsIGhhcmR3YXJlIChhIFBDTUNJQSBjYXJkKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgoKMy4gICoqV29ydGhGdXp6aW5nIENvbmZpcm1hdGlvbjoqKiBHaXZlbiB0aGUgbGFjayBvZiBoYXJkd2FyZSBlbXVsYXRpb24sIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBmYWxzZS4gV2UgY2FuIHNraXAgU2VjdGlvbnMgNCBhbmQgNSBiZWNhdXNlIHRoZXJlJiMzOTtzIG5vIGNvbXBsZXggZnV6emluZyBjb25maWd1cmF0aW9uIGludm9sdmVkIGhlcmU7IHRoZSBjb2RlJiMzOTtzIHJlYWNoYWJpbGl0eSBpcyB0aGUgaXNzdWUuIFRoZSByZWFzb25pbmcgZm9yIG5vdCBmdXp6aW5nIGlzIHRoZSBrZXkgcGFydC4gSXQgaXMgYSBjbGVhciBhbmQgY29uY2lzZSBleHBsYW5hdGlvbiB0aGF0IHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGR1ZSB0byB0aGUgbGFjayBvZiBQQ01DSUEgaGFyZHdhcmUgZW11bGF0aW9uIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4KCjQuICAqKkZpbmFsIFN1bW1hcnk6KiogVGhlIHBhdGNoIHJlc2lkZXMgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuY2AsIGluIHRoZSBgc2V0dXBfc2htZW1fd2luZG93YCBmdW5jdGlvbi4gVGhpcyBkcml2ZXIgaXMgZm9yIFBDTUNJQSBuZXR3b3JrIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgTkUyMDAwLWNvbXBhdGlibGUgZGV2aWNlcyAod2hpY2ggcmVsaWVzIG9uIGBDT05GSUdfUENNQ0lBX1BDTkVUYCkuIFRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LiBHaXZlbiB0aGUgdWJpcXVpdHkgb2YgUUVNVS9HQ0UgZm9yIHRlc3RpbmcsIHRoZSBQQ01DSUEgZHJpdmVyIGlzIHVucmVhY2hhYmxlIGJlY2F1c2Ugc3RhbmRhcmQgUUVNVSBhbmQgR0NFIGVudmlyb25tZW50cyBvbiB4ODZcXzY0IGRvIG5vdCBlbXVsYXRlIHRoZSBQQ01DSUEvQ2FyZEJ1cyBzb2NrZXQgY29udHJvbGxlcnMgb3IgdGhlc2UgUENNQ0lBIGNhcmRzLiBObyBzb2Z0d2FyZSBlbXVsYXRpb24gbWVjaGFuaXNtIGV4aXN0cywgdGhlcmVmb3JlLCB0aGUgZHJpdmVyJiMzOTtzIHByb2JlIGxvZ2ljIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzeXprYWxsZXIgZnV6emluZyBlbnZpcm9ubWVudHMuCgpJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBjYXNlLiBMZXQmIzM5O3MgZ2V0IHRoZSByZXN1bHRzIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMjE6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgaW4gc2V0dXBfc2htZW1fd2luZG93KCkgaW4gZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLCB3aGljaCBpcyBhIGxlZ2FjeSBQQ01DSUEgZXRoZXJuZXQgY2FyZCBkcml2ZXIgKENPTkZJR19QQ01DSUFfUENORVQpLiBQQ01DSUEvQ2FyZEJ1cyBzb2NrZXQgY29udHJvbGxlcnMgYW5kIFBDTUNJQSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHg4Nl82NCBRRU1VIG9yIEdDRSB2aXJ0dWFsIGVudmlyb25tZW50cywgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBsYXllciB0byBpbnN0YW50aWF0ZSBQQ01DSUEgZGV2aWNlcy4gVGhlIG1vZGlmaWVkIHByb2JlIHBhdGggaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHNldHVwX3NobWVtX3dpbmRvdygpIGluIGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYywgd2hpY2ggaXMgYSBsZWdhY3kgUENNQ0lBIGV0aGVybmV0IGNhcmQgZHJpdmVyIChDT05GSUdfUENNQ0lBX1BDTkVUKS4gUENNQ0lBL0NhcmRCdXMgc29ja2V0IGNvbnRyb2xsZXJzIGFuZCBQQ01DSUEgY2FyZHMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODZfNjQgUUVNVSBvciBHQ0UgdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gbGF5ZXIgdG8gaW5zdGFudGlhdGUgUENNQ0lBIGRldmljZXMuIFRoZSBtb2RpZmllZCBwcm9iZSBwYXRoIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDIxOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMTo1NzoyNC42NTQ1NTI1MTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzEzMDM0NjMyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmVzb3VyY2UgbGVhayBpbiBzZXR1cF9zaG1lbV93aW5kb3coKSBpbiBkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMsIHdoaWNoIGlzIGEgbGVnYWN5IFBDTUNJQSBldGhlcm5ldCBjYXJkIGRyaXZlciAoQ09ORklHX1BDTUNJQV9QQ05FVCkuIFBDTUNJQS9DYXJkQnVzIHNvY2tldCBjb250cm9sbGVycyBhbmQgUENNQ0lBIGNhcmRzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgeDg2XzY0IFFFTVUgb3IgR0NFIHZpcnR1YWwgZW52aXJvbm1lbnRzLCBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0aW9uIGxheWVyIHRvIGluc3RhbnRpYXRlIFBDTUNJQSBkZXZpY2VzLiBUaGUgbW9kaWZpZWQgcHJvYmUgcGF0aCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMTo1NzoyNC42NTQ1NTcyMzNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NzMxODkyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ5ZjJmNzhmYjI4NGUzMDdhNzlhYmVlNGVjYjQ4MWExODIzNGMxZTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgMTMgMjE6NTc6MjMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXFxuaW5kZXggMTlmOWM1ZGIzZjNiYS4uMGNmM2MwZjNjZWQ3YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcXG5AQCAtMTQzNCwxNCArMTQzNCwxNCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxcbiAgICAgb2Zmc2V0IC09IG9mZnNldCAlIHdpbmRvd19zaXplO1xcbiAgICAgcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLVxcdTAwM2VyZXNvdXJjZVszXSwgb2Zmc2V0KTtcXG4gICAgIGlmIChyZXQpXFxuLVxcdCAgICBnb3RvIGZhaWxlZDtcXG4rXFx0ICAgIGdvdG8gcmVsZWFzZTtcXG4gXFxuICAgICAvKiBUcnkgc2NyaWJibGluZyBvbiB0aGUgYnVmZmVyICovXFxuICAgICBpbmZvLVxcdTAwM2ViYXNlID0gaW9yZW1hcChsaW5rLVxcdTAwM2VyZXNvdXJjZVszXS1cXHUwMDNlc3RhcnQsXFxuIFxcdFxcdFxcdHJlc291cmNlX3NpemUobGluay1cXHUwMDNlcmVzb3VyY2VbM10pKTtcXG4gICAgIGlmICh1bmxpa2VseSghaW5mby1cXHUwMDNlYmFzZSkpIHtcXG4gXFx0ICAgIHJldCA9IC1FTk9NRU07XFxuLVxcdCAgICBnb3RvIGZhaWxlZDtcXG4rXFx0ICAgIGdvdG8gcmVsZWFzZTtcXG4gICAgIH1cXG4gXFxuICAgICBmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKFRYX1BBR0VTXFx1MDAzY1xcdTAwM2M4KTsgaSArPSAyKVxcbkBAIC0xNDUyLDkgKzE0NTIsOCBAQCBzdGF0aWMgaW50IHNldHVwX3NobWVtX3dpbmRvdyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgaW50IHN0YXJ0X3BnLFxcbiAgICAgcGNuZXRfcmVzZXRfODM5MChkZXYpO1xcbiAgICAgaWYgKGkgIT0gKFRYX1BBR0VTXFx1MDAzY1xcdTAwM2M4KSkge1xcbiBcXHRpb3VubWFwKGluZm8tXFx1MDAzZWJhc2UpO1xcbi1cXHRwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay1cXHUwMDNlcmVzb3VyY2VbM10pO1xcbiBcXHRpbmZvLVxcdTAwM2ViYXNlID0gTlVMTDtcXG4tXFx0Z290byBmYWlsZWQ7XFxuK1xcdGdvdG8gcmVsZWFzZTtcXG4gICAgIH1cXG4gXFxuICAgICBlaV9zdGF0dXMubWVtID0gaW5mby1cXHUwMDNlYmFzZSArIG9mZnNldDtcXG5AQCAtMTQ3NSw2ICsxNDc0LDggQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcXG4gICAgIGluZm8tXFx1MDAzZWZsYWdzIHw9IFVTRV9TSE1FTTtcXG4gICAgIHJldHVybiAwO1xcbiBcXG4rcmVsZWFzZTpcXG4rXFx0cGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstXFx1MDAzZXJlc291cmNlWzNdKTtcXG4gZmFpbGVkOlxcbiAgICAgcmV0dXJuIDE7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6MjUuMDQyNTgwMzM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1Mjc0MjMwNzIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHNldHVwX3NobWVtX3dpbmRvdygpIGluIGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYywgd2hpY2ggaXMgYSBsZWdhY3kgUENNQ0lBIGV0aGVybmV0IGNhcmQgZHJpdmVyIChDT05GSUdfUENNQ0lBX1BDTkVUKS4gUENNQ0lBL0NhcmRCdXMgc29ja2V0IGNvbnRyb2xsZXJzIGFuZCBQQ01DSUEgY2FyZHMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODZfNjQgUUVNVSBvciBHQ0UgdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gbGF5ZXIgdG8gaW5zdGFudGlhdGUgUENNQ0lBIGRldmljZXMuIFRoZSBtb2RpZmllZCBwcm9iZSBwYXRoIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDlmMmY3OGZiMjg0ZTMwN2E3OWFiZWU0ZWNiNDgxYTE4MjM0YzFlNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDIxOjU3OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXG5pbmRleCAxOWY5YzVkYjNmM2JhLi4wY2YzYzBmM2NlZDdiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcbkBAIC0xNDM0LDE0ICsxNDM0LDE0IEBAIHN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXG4gICAgIG9mZnNldCAtPSBvZmZzZXQgJSB3aW5kb3dfc2l6ZTtcbiAgICAgcmV0ID0gcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLCBsaW5rLVx1MDAzZXJlc291cmNlWzNdLCBvZmZzZXQpO1xuICAgICBpZiAocmV0KVxuLVx0ICAgIGdvdG8gZmFpbGVkO1xuK1x0ICAgIGdvdG8gcmVsZWFzZTtcbiBcbiAgICAgLyogVHJ5IHNjcmliYmxpbmcgb24gdGhlIGJ1ZmZlciAqL1xuICAgICBpbmZvLVx1MDAzZWJhc2UgPSBpb3JlbWFwKGxpbmstXHUwMDNlcmVzb3VyY2VbM10tXHUwMDNlc3RhcnQsXG4gXHRcdFx0cmVzb3VyY2Vfc2l6ZShsaW5rLVx1MDAzZXJlc291cmNlWzNdKSk7XG4gICAgIGlmICh1bmxpa2VseSghaW5mby1cdTAwM2ViYXNlKSkge1xuIFx0ICAgIHJldCA9IC1FTk9NRU07XG4tXHQgICAgZ290byBmYWlsZWQ7XG4rXHQgICAgZ290byByZWxlYXNlO1xuICAgICB9XG4gXG4gICAgIGZvciAoaSA9IDA7IGkgXHUwMDNjIChUWF9QQUdFU1x1MDAzY1x1MDAzYzgpOyBpICs9IDIpXG5AQCAtMTQ1Miw5ICsxNDUyLDggQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcbiAgICAgcGNuZXRfcmVzZXRfODM5MChkZXYpO1xuICAgICBpZiAoaSAhPSAoVFhfUEFHRVNcdTAwM2NcdTAwM2M4KSkge1xuIFx0aW91bm1hcChpbmZvLVx1MDAzZWJhc2UpO1xuLVx0cGNtY2lhX3JlbGVhc2Vfd2luZG93KGxpbmssIGxpbmstXHUwMDNlcmVzb3VyY2VbM10pO1xuIFx0aW5mby1cdTAwM2ViYXNlID0gTlVMTDtcbi1cdGdvdG8gZmFpbGVkO1xuK1x0Z290byByZWxlYXNlO1xuICAgICB9XG4gXG4gICAgIGVpX3N0YXR1cy5tZW0gPSBpbmZvLVx1MDAzZWJhc2UgKyBvZmZzZXQ7XG5AQCAtMTQ3NSw2ICsxNDc0LDggQEAgc3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcbiAgICAgaW5mby1cdTAwM2VmbGFncyB8PSBVU0VfU0hNRU07XG4gICAgIHJldHVybiAwO1xuIFxuK3JlbGVhc2U6XG4rXHRwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay1cdTAwM2VyZXNvdXJjZVszXSk7XG4gZmFpbGVkOlxuICAgICByZXR1cm4gMTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMTo1NzoyNS4wNDI1ODIyNDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDQzNTEwMTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV2YWx1YXRpbmcgdGhlIEZ1enppbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byB0YWtlIGEgbG9vayBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gZnV6emluZy4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCBzZWUgd2hhdCdzIGNoYW5nZWQuIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNgLCB3aGljaCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoaXMgZmlsZSBhY3R1YWxseSBpcywgc28gSSdsbCBwdWxsIHVwIHRoZSBjb250ZXh0LiBBaGEhIEl0J3MgdGhlIFBDTUNJQSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYHBjbmV0X2NzYCBkcml2ZXIsIGRlc2lnbmVkIGZvciBOUzgzOTAtYmFzZWQgUENNQ0lBIGV0aGVybmV0IGNhcmRzLlxuXG5Ob3cgdGhhdCBJIGhhdmUgdGhlIGNvbnRleHQgb2YgdGhlIGRldmljZSBhbmQgZHJpdmVyLCBJIG5lZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcuIEknbGwgbmVlZCB0byByZWFkIHRocm91Z2ggdGhlIGBwY25ldF9jcy5jYCBmaWxlIGl0c2VsZiwgYW5kIEknbGwgbWFrZSBzdXJlIHRvIGNyb3NzLXJlZmVyZW5jZSBpdCB3aXRoIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCBhbmQgZW5hYmxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlIHRvIHRoZSBsZXZlbCBvZiBkZXRhaWwgbmVjZXNzYXJ5IHRvIGp1ZGdlIGhvdyBlZmZlY3RpdmUgdGhlIHBhdGNoIHdvdWxkIGJlIGZvciBmdXp6aW5nLCBhbmQgaWYgdGhlIHBhdGNoIGlzIHZ1bG5lcmFibGUgaXRzZWxmLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6MzEuNDg2MDk0Nzc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjY2NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjbmV0X2NzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnPTEzND1jb25maWcgUENNQ0lBX1BDTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL0tjb25maWctMTQyLVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnOjE0MzpcXHQgIGNhbGxlZCBwY25ldF9jcy4gIElmIHVuc3VyZSwgc2F5IE4uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnLTE0NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvTWFrZWZpbGU9MTM9b2JqLSQoQ09ORklHX05FMktfUENJKSArPSBuZTJrLXBjaS5vIDgzOTAub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvTWFrZWZpbGU6MTQ6b2JqLSQoQ09ORklHX1BDTUNJQV9QQ05FVCkgKz0gcGNuZXRfY3MubyA4MzkwLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL01ha2VmaWxlLTE1LW9iai0kKENPTkZJR19TVE5JQykgKz0gc3RuaWMubyA4MzkwLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0xNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MTU6ICAgIHBjbmV0X2NzLmMgMS4xNTMgMjAwMy8xMS8wOSAxODo1MzowOVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0xNi1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYz0xNzA5PXN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RyaXZlciBwY25ldF9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjE3MTA6XFx0Lm5hbWVcXHRcXHQ9IFxcXCJwY25ldF9jc1xcXCIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTE3MTEtXFx0LnByb2JlXFx0XFx0PSBwY25ldF9wcm9iZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6MzEuNTM5NzY2OTM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzM5MTgwMzY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKktjb25maWcgRGl2ZSBmb3IgUENNQ0lBX1BDTkVUKipcblxuT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9uIHN0YXR1cyByZWxhdGVkIHRvIGBQQ01DSUFfUENORVRgIHdpdGhpbiB0aGUga2VybmVsJ3MgS2NvbmZpZyBzeXN0ZW0uIE15IG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IEkgd2FudCB0byBrbm93IGlmIGl0J3MgZW5hYmxlZCwgZGlzYWJsZWQsIGEgbW9kdWxlLCBvciBjb25kaXRpb25hbC4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIGRlcGVuZGVuY2llcyBhcyB3ZWxsLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGljaCBmaWxlIHRvIGNoZWNrIGFuZCBob3cgdG8gbmF2aWdhdGUgYXJvdW5kIGl0IHRvIGdldCBhIHF1aWNrIHN1bW1hcnkuIExldCdzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwODQsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMTo1NzozNC45MzE1NzI4NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFxuIDEzMTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMTMyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgYXBuZS5cXG4gMTMzOlxcdFxcbiAxMzQ6XFx0Y29uZmlnIFBDTUNJQV9QQ05FVFxcbiAxMzU6XFx0XFx0dHJpc3RhdGUgXFxcIk5FMjAwMCBjb21wYXRpYmxlIFBDTUNJQSBzdXBwb3J0XFxcIlxcbiAxMzY6XFx0XFx0ZGVwZW5kcyBvbiBQQ01DSUEgXFx1MDAyNlxcdTAwMjYgSEFTX0lPUE9SVFxcbiAxMzc6XFx0XFx0c2VsZWN0IENSQzMyXFxuIDEzODpcXHRcXHRoZWxwXFxuIDEzOTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBhdHRhY2ggYW4gTkUyMDAwIGNvbXBhdGlibGUgUENNQ0lBXFxuIDE0MDpcXHRcXHQgIChQQy1jYXJkKSBFdGhlcm5ldCBvciBGYXN0IEV0aGVybmV0IGNhcmQgdG8geW91ciBjb21wdXRlci5cXG4gMTQxOlxcdFxcbiAxNDI6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG4gMTQzOlxcdFxcdCAgY2FsbGVkIHBjbmV0X2NzLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTQ0OlxcdFxcbiAxNDU6XFx0Y29uZmlnIFNUTklDXFxuIDE0NjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmF0aW9uYWwgRFA4MzkwMkFWICBzdXBwb3J0XFxcIlxcbiAxNDc6XFx0XFx0ZGVwZW5kcyBvbiBTVVBFUkhcXG4gMTQ4OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAxNDk6XFx0XFx0aGVscFxcbiAxNTA6XFx0XFx0ICBTdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBEUDgzOTAyQVZcXG4gMTUxOlxcdFxcdCAgU1QtTklDIFNlcmlhbCBOZXR3b3JrIEludGVyZmFjZSBDb250cm9sbGVyIGZvciBUd2lzdGVkIFBhaXIuICBUaGlzXFxuIDE1MjpcXHRcXHQgIGlzIGEgMTBNYml0L3NlYyBFdGhlcm5ldCBjb250cm9sbGVyLiAgUHJvZHVjdCBvdmVydmlldyBhbmQgc3BlY3MgYXRcXG4gMTUzOlxcdFxcdCAgXFx1MDAzY2h0dHA6Ly93d3cubmF0aW9uYWwuY29tL3BmL0RQL0RQODM5MDJBLmh0bWxcXHUwMDNlLlxcbiAxNTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIxOjU3OjM0LjkzMTY0NjUyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzUyMzEzMTA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBQQ01DSUEgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIFBDTUNJQSByYWJiaXQgaG9sZS4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIFBDTUNJQSBkZXZpY2VzIGFyZSBldmVuIGEgdmlhYmxlIHRhcmdldCBmb3IgZnV6emluZyBvciBlbXVsYXRpb24gd2l0aGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiBIb2xkIG9uLCBjYW4gUUVNVSBldmVuICpkbyogUENNQ0lBIGVtdWxhdGlvbj8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdC5cblxuV2FpdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYsIHdoYXQgYWJvdXQgUENNQ0lBIGRldmljZXMgaW4gc3l6a2FsbGVyPyBBcmUgdGhleSBldmVuIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGNvbnRleHQ/IFdoYXQgdW5kZXJseWluZyBidXMgaXMgUENNQ0lBIHVzaW5nLCBhbnl3YXk/IEluIHN0YW5kYXJkIHg4Ni9hbWQ2NCBRRU1VLCBQQ01DSUEgaXNuJ3QgYSAqc3RhbmRhcmQqIHZpcnR1YWwgYnVzLCBpcyBpdD8gT3IgbWF5YmUgaXQgKmlzKj8gSSBoYXZlIHRvIGJlIHN1cmUuXG5cbkFoYSwgUUVNVSdzIGRvY3VtZW50YXRpb24gc2hvdWxkIGhhdmUgYW5zd2Vycy4gRG9lcyBRRU1VIGhhdmUgUENNQ0lBIGVtdWxhdGlvbiBhdCBhbGw/IFdhaXQsIGl0IGxvb2tzIGxpa2UgUUVNVSAqZG9lcyogaGF2ZSBzb21lIFBDTUNJQSBzdXBwb3J0IHJlbGF0ZWQgdG8gcHhhMnh4LCBidXQgaXMgdGhhdCByZWxldmFudCBvbiBhbWQ2ND8gVGhpcyBzZWVtcyBzcGVjaWZpYyB0byBBUk0gYXJjaGl0ZWN0dXJlLlxuXG5SaWdodCwgbm93LCBJIHNob3VsZCBmb2N1cy4gSSBuZWVkIHRvIGNoZWNrIHN5emthbGxlcidzIHN5emxhbmcgZGVzY3JpcHRpb25zLCB0aGUgZ2l0IGNvbW1pdCBoaXN0b3J5LCBvciBRRU1VJ3MgbW9kZWxzIHRvIGZpbmQgdGhlIHJpZ2h0IGluZm9ybWF0aW9uLlxuXG5BIGtleSBxdWVzdGlvbjogY2FuIHVzZXIgc3BhY2UgZXZlbiBpbnN0YW50aWF0ZSBhIFBDTUNJQSBkZXZpY2U/IEkgaGF2ZSB0byBleHBsb3JlIHdoZXRoZXIgdGhlcmUncyBhbnkgc29ydCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24sIHBlcmhhcHMgYSBkdW1teSBQQ01DSUEgZHJpdmVyIHRoYXQgY291bGQgc2ltcGxpZnkgdGhpbmdzLCBvciBkb2VzIGl0ICpyZXF1aXJlKiBhIHBoeXNpY2FsIFBDTUNJQSAvIENhcmRCdXMgY29udHJvbGxlciAvIHNvY2tldD8gSSBoYXZlIHRvIGNvbnNpZGVyIGFsbCBhbmdsZXMuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBmb3IgUENNQ0lBLXJlbGF0ZWQgY29kZSB0byBzZWUgaWYgdGhlcmUncyBhbnkgaW5kaWNhdGlvbiBvZiBhIHZpcnR1YWwgUENNQ0lBIGhvc3QgY29udHJvbGxlci4gVGhhdCBtaWdodCBiZSB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njc5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6MzguNDU0Nzc5NjgzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NjA4MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjbWNpYV9yZWdpc3Rlcl9zb2NrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wY21jaWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYz0zMjY9c3RhdGljIGludCBiY202M3h4X2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2JjbTYzeHhfcGNtY2lhLmMtNDE3LVxcbmRyaXZlcnMvcGNtY2lhL2JjbTYzeHhfcGNtY2lhLmM6NDE4OlxcdHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoc29jayk7XFxuZHJpdmVycy9wY21jaWEvYmNtNjN4eF9wY21jaWEuYy00MTktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2NzLmM9OTc9c3RhdGljIGludCBwY2NhcmRkKHZvaWQgKl9fc2t0KTtcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2NzLmMtOTktLyoqXFxuZHJpdmVycy9wY21jaWEvY3MuYzoxMDA6ICogcGNtY2lhX3JlZ2lzdGVyX3NvY2tldCAtIGFkZCBhIG5ldyBwY21jaWEgc29ja2V0IGRldmljZVxcbmRyaXZlcnMvcGNtY2lhL2NzLmMtMTAxLSAqIEBzb2NrZXQ6IHRoZSBcXHUwMDI2c29ja2V0IHRvIHJlZ2lzdGVyXFxuZHJpdmVycy9wY21jaWEvY3MuYy0xMDItICovXFxuZHJpdmVycy9wY21jaWEvY3MuYzoxMDM6aW50IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNvY2tldClcXG5kcml2ZXJzL3BjbWNpYS9jcy5jLTEwNC17XFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9jcy5jLTExMC1cXG5kcml2ZXJzL3BjbWNpYS9jcy5jOjExMTpcXHRkZXZfZGJnKFxcdTAwMjZzb2NrZXQtXFx1MDAzZWRldiwgXFxcInBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoMHglcClcXFxcblxcXCIsIHNvY2tldC1cXHUwMDNlb3BzKTtcXG5kcml2ZXJzL3BjbWNpYS9jcy5jLTExMi1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2NzLmMtMTk3LVxcdHJldHVybiByZXQ7XFxuZHJpdmVycy9wY21jaWEvY3MuYzoxOTg6fSAvKiBwY21jaWFfcmVnaXN0ZXJfc29ja2V0ICovXFxuZHJpdmVycy9wY21jaWEvY3MuYzoxOTk6RVhQT1JUX1NZTUJPTChwY21jaWFfcmVnaXN0ZXJfc29ja2V0KTtcXG5kcml2ZXJzL3BjbWNpYS9jcy5jLTIwMC1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jPTQyND1zdGF0aWMgaW50IGRiMXhfcGNtY2lhX3NvY2tldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmMtNTU2LVxcbmRyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jOjU1NzpcXHRyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFxcdTAwMjZzb2NrLVxcdTAwM2Vzb2NrZXQpO1xcbmRyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jLTU1OC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9lbGVjdHJhX2NmLmM9MTc1PXN0YXRpYyBpbnQgZWxlY3RyYV9jZl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2VsZWN0cmFfY2YuYy0yNzYtXFxuZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jOjI3NzpcXHRzdGF0dXMgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFxcdTAwMjZjZi1cXHUwMDNlc29ja2V0KTtcXG5kcml2ZXJzL3BjbWNpYS9lbGVjdHJhX2NmLmMtMjc4LVxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKSB7XFxuZHJpdmVycy9wY21jaWEvZWxlY3RyYV9jZi5jOjI3OTpcXHRcXHRkZXZfZXJyKGRldmljZSwgXFxcInBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3BjbWNpYS9lbGVjdHJhX2NmLmMtMjgwLVxcdFxcdGdvdG8gZmFpbDM7XFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmM9MTk5PXN0YXRpYyBpbnQgX19pbml0IG9tYXBfY2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL29tYXBfY2YuYy0yNzctXFxuZHJpdmVycy9wY21jaWEvb21hcF9jZi5jOjI3ODpcXHRzdGF0dXMgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFxcdTAwMjZjZi1cXHUwMDNlc29ja2V0KTtcXG5kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMtMjc5LVxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9wY21jaWEvcGQ2NzI5LmM9NjI0PXN0YXRpYyBpbnQgcGQ2NzI5X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMtNzE0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNQVhfU09DS0VUUzsgaSsrKSB7XFxuZHJpdmVycy9wY21jaWEvcGQ2NzI5LmM6NzE1OlxcdFxcdHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoXFx1MDAyNnNvY2tldFtpXS5zb2NrZXQpO1xcbmRyaXZlcnMvcGNtY2lhL3BkNjcyOS5jLTcxNi1cXHRcXHRpZiAocmV0KSB7XFxuZHJpdmVycy9wY21jaWEvcGQ2NzI5LmM6NzE3OlxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZkZXYtXFx1MDAzZWRldiwgXFxcInBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQgZmFpbGVkLlxcXFxuXFxcIik7XFxuZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMtNzE4LVxcdFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBpIDsgaisrKVxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jPTc5Mj1pbnQgc29jX3BjbWNpYV9hZGRfb25lKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0KVxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jLTg1Ni1cXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmM6ODU3OlxcdHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoXFx1MDAyNnNrdC1cXHUwMDNlc29ja2V0KTtcXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMtODU4LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS94eHMxNTAwX3NzLmM9MjA5PXN0YXRpYyBpbnQgeHhzMTUwMF9wY21jaWFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYy0yODQtXFxuZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jOjI4NTpcXHRyZXQgPSBwY21jaWFfcmVnaXN0ZXJfc29ja2V0KFxcdTAwMjZzb2NrLVxcdTAwM2Vzb2NrZXQpO1xcbmRyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYy0yODYtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmM9MTE1OD1zdGF0aWMgaW50IHllbnRhX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jLTEyNjktXFx0LyogUmVnaXN0ZXIgaXQgd2l0aCB0aGUgcGNtY2lhIGxheWVyLi4gKi9cXG5kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYzoxMjcwOlxcdHJldCA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoXFx1MDAyNnNvY2tldC1cXHUwMDNlc29ja2V0KTtcXG5kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYy0xMjcxLVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIxOjU3OjM4LjUwNDM5MzgxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMzMTY1MjUwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgUUVNVSBQQ01DSUEgSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZHJpdmVyIGZpbGVzIOKAkyBgeWVudGFfc29ja2V0LmNgLCBgcGQ2NzI5LmNgLCBgaTgyMzY1LmNgLi4uIEltbWVkaWF0ZWx5LCBteSBicmFpbiBraWNrcyBpbnRvIGdlYXI6ICpBcmUgYW55IG9mIHRoZXNlIFBDTUNJQSBjb250cm9sbGVycyBhY3R1YWxseSBlbXVsYXRlZCB3aXRoaW4gUUVNVT8qIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBRRU1VIGFjdHVhbGx5ICpkb2VzKiBzdXBwb3J0LlxuXG5Ib2xkIG9uIGEgc2Vjb25kLCBhIGNydWNpYWwgZGlzdGluY3Rpb246ICpEb2VzIFFFTVUgbW9kZWwgQ2FyZEJ1cyBvciBqdXN0IHBsYWluIFBDTUNJQT8qIFRoaXMgaXMga2V5LiBEaWdnaW5nIGRlZXBlciBpbnRvIG15IGtub3dsZWRnZSBvZiBRRU1VJ3MgYXJjaGl0ZWN0dXJlLCBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgUENNQ0lBIHN1cHBvcnQgKmRvZXMqIGV4aXN0LCBidXQgaXQncyBsYXJnZWx5IGNvbmZpbmVkIHRvIHRoZSBgcHhhMnh4YCBhbmQgb3RoZXIgZW1iZWRkZWQgQVJNIG1hY2hpbmUgbW9kZWxzLCBhbmQgZXZlbiB0aGVuIGl0IHdhcyBwcmltYXJpbHkgZ2VhcmVkIHRvd2FyZHMgZW11bGF0aW5nIHRoaW5ncyBsaWtlIG1pY3JvZHJpdmVzIG9yIENvbXBhY3RGbGFzaC5cblxuVGhhdCdzIHdoZW4gaXQgaGl0cyBtZTogKk9uIGEgc3RhbmRhcmQgeDg2IG9yIGFtZDY0IGFyY2hpdGVjdHVyZSwgdXNpbmcgdGhlIGNvbW1vbiBpNDQwZnggb3IgcTM1IGNoaXBzZXRzLCB0aGVyZSdzIGFjdHVhbGx5IE5PIENhcmRCdXMvUENNQ0lBIGJyaWRnZSBvciBjb250cm9sbGVyIHJlcHJlc2VudGVkISogVGhpcyBpcyBhIHNpZ25pZmljYW50IGdhcCBpbiB0aGUgZW11bGF0ZWQgaGFyZHdhcmUuXG5cblNvLCB3aGVyZSBkb2VzIHRoYXQgbGVhdmUgbWU/IEknbSBub3cgcXVlc3Rpb25pbmcgd2hldGhlciBMaW51eCBpdHNlbGYgZXZlbiAqaGFzKiBhbnkgdmlydHVhbCBQQ01DSUEgc29ja2V0IGFic3RyYWN0aW9uIGxheWVyLiBNeSBuZXh0IHN0ZXA6IEknbGwgbmVlZCB0byBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIOKAkyBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgYGRyaXZlcnMvcGNtY2lhL2AgZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwgdHJlZS4gVGhhdCB3aWxsIGxpa2VseSBnaXZlIG1lIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NzMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NDEuODIwOTIyMjRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvcGNtY2lhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImJjbTYzeHhfcGNtY2lhLmNcIixcbiAgICBcImJjbTYzeHhfcGNtY2lhLmhcIixcbiAgICBcImNhcmRidXMuY1wiLFxuICAgIFwiY2lycnVzLmhcIixcbiAgICBcImNpc3RwbC5jXCIsXG4gICAgXCJjcy5jXCIsXG4gICAgXCJjc19pbnRlcm5hbC5oXCIsXG4gICAgXCJkYjF4eHhfc3MuY1wiLFxuICAgIFwiZHMuY1wiLFxuICAgIFwiZWxlY3RyYV9jZi5jXCIsXG4gICAgXCJpODIzNjUuaFwiLFxuICAgIFwibWF4MTYwMC5jXCIsXG4gICAgXCJtYXgxNjAwLmhcIixcbiAgICBcIm8ybWljcm8uaFwiLFxuICAgIFwib21hcF9jZi5jXCIsXG4gICAgXCJwY21jaWFfY2lzLmNcIixcbiAgICBcInBjbWNpYV9yZXNvdXJjZS5jXCIsXG4gICAgXCJwZDY3MjkuY1wiLFxuICAgIFwicGQ2NzI5LmhcIixcbiAgICBcInB4YTJ4eF9iYXNlLmNcIixcbiAgICBcInB4YTJ4eF9iYXNlLmhcIixcbiAgICBcInB4YTJ4eF9zaGFycHNsLmNcIixcbiAgICBcInJpY29oLmhcIixcbiAgICBcInJzcmNfbWdyLmNcIixcbiAgICBcInJzcmNfbm9uc3RhdGljLmNcIixcbiAgICBcInNhMTEwMF9nZW5lcmljLmNcIixcbiAgICBcInNhMTEwMF9nZW5lcmljLmhcIixcbiAgICBcInNhMTEwMF9oMzYwMC5jXCIsXG4gICAgXCJzYTExMTFfZ2VuZXJpYy5jXCIsXG4gICAgXCJzYTExMTFfZ2VuZXJpYy5oXCIsXG4gICAgXCJzYTExMTFfam9ybmFkYTcyMC5jXCIsXG4gICAgXCJzYTExMTFfbmVwb25zZXQuY1wiLFxuICAgIFwic2ExMXh4X2Jhc2UuY1wiLFxuICAgIFwic2ExMXh4X2Jhc2UuaFwiLFxuICAgIFwic29jX2NvbW1vbi5jXCIsXG4gICAgXCJzb2NfY29tbW9uLmhcIixcbiAgICBcInNvY2tldF9zeXNmcy5jXCIsXG4gICAgXCJ0aTExM3guaFwiLFxuICAgIFwidG9waWMuaFwiLFxuICAgIFwidmc0NjguaFwiLFxuICAgIFwieHhzMTUwMF9zcy5jXCIsXG4gICAgXCJ5ZW50YV9zb2NrZXQuY1wiLFxuICAgIFwieWVudGFfc29ja2V0LmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogbnVsbFxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NDEuODIxMDA2OTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzQ2NjI5MDQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGB5ZW50YV9zb2NrZXRgIEVtdWxhdGlvbiBpbiBRRU1VL0dDRSoqXG5cbk9rYXksIHNvIGB5ZW50YV9zb2NrZXRgLi4uIHRoYXQncyBQQ0kgQ2FyZEJ1cywgcmlnaHQ/IFJpZ2h0LiBOb3csIHRoZSBxdWVzdGlvbiBpcywgaG93IGlzIHRoaXMgaGFuZGxlZCBpbiBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8gU3BlY2lmaWNhbGx5LCBhcmUgd2UgdGFsa2luZyBhYm91dCB0aGUgZW11bGF0aW9uIG9mIHNvbWV0aGluZyBsaWtlIGEgVGV4YXMgSW5zdHJ1bWVudHMgQ2FyZEJ1cyBjb250cm9sbGVyPyBLbm93aW5nIFFFTVUsIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgYW5zd2VyLiBBbmQsIHllYWgsIGFzIEkgc3VzcGVjdGVkLCB2YW5pbGxhIFFFTVUgZG9lc24ndCBoYXZlIGEgZGVkaWNhdGVkIENhcmRCdXMgb3IgUENNQ0lBIFBDSSBkZXZpY2UgbW9kZWwuIFRoYXQncyBub3QgZW50aXJlbHkgc3VycHJpc2luZy5cblxuQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gQ291bGQgdGhlcmUgYmUgYSB3b3JrYXJvdW5kPyBQZXJoYXBzIHNvbWUgbWV0aG9kIHRvIGluc3RhbnRpYXRlIGEgUENNQ0lBIGRldmljZSB0aHJvdWdoIHN5c2ZzLCBvciBhIG1vY2tpbmcgbWVjaGFuaXNtLCBvci4uLiBzb21ldGhpbmcgbGlrZSB0aGF0PyBJdCdzIHdvcnRoIGRpZ2dpbmcgYSBiaXQgZGVlcGVyLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZS4gTGV0J3Mgc2VlIGlmIGBzb2NrZXRfc3lzZnMuY2Agb3IgYGRzLmNgIHNoZWQgYW55IGxpZ2h0IG9uIHRoaXMuIE1heWJlIHRoZXJlJ3MgYSBoaWRkZW4gdHJpY2sgSSd2ZSBtaXNzZWQuIEknbGwgbmVlZCB0byBleHBsb3JlIHRob3NlIGZpbGVzIGNhcmVmdWxseSB0byBmaW5kIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzc0MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NDUuMjg3MzAxMTU3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjM5MDYxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY21jaWFfYnVzX3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9wY21jaWFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY21jaWEvY3NfaW50ZXJuYWwuaD0xMjg9dm9pZCBwY21jaWFfcHV0X3NvY2tldChzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqc2t0KTtcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2NzX2ludGVybmFsLmgtMTMzLS8qIGRzLmMgKi9cXG5kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oOjEzNDpleHRlcm4gY29uc3Qgc3RydWN0IGJ1c190eXBlIHBjbWNpYV9idXNfdHlwZTtcXG5kcml2ZXJzL3BjbWNpYS9jc19pbnRlcm5hbC5oLTEzNS1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmM9MTY5PWludCBwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY21jaWFfZHJpdmVyICpkcml2ZXIpXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTE3OC1cXHQvKiBpbml0aWFsaXplIGNvbW1vbiBmaWVsZHMgKi9cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjE3OTpcXHRkcml2ZXItXFx1MDAzZWRydi5idXMgPSBcXHUwMDI2cGNtY2lhX2J1c190eXBlO1xcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTgwLVxcdGRyaXZlci1cXHUwMDNlZHJ2Lm93bmVyID0gZHJpdmVyLVxcdTAwM2Vvd25lcjtcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmM9NDc5PXN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2RldmljZV9hZGQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTUwOS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjUxMDpcXHRwX2Rldi1cXHUwMDNlZGV2LmJ1cyA9IFxcdTAwMjZwY21jaWFfYnVzX3R5cGU7XFxuZHJpdmVycy9wY21jaWEvZHMuYy01MTEtXFx0cF9kZXYtXFx1MDAzZWRldi5wYXJlbnQgPSBzLVxcdTAwM2VkZXYucGFyZW50O1xcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYz02NzU9c3RhdGljIHZvaWQgcGNtY2lhX3JlcXVlcnkoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTY4OS1cXHQgKiBkZXRlcm1pbmUgaXQgYWdhaW4sIG92ZXJ3cml0aW5nIG9sZCB2YWx1ZXMgaWYgbmVjZXNzYXJ5LiAqL1xcbmRyaXZlcnMvcGNtY2lhL2RzLmM6NjkwOlxcdGJ1c19mb3JfZWFjaF9kZXYoXFx1MDAyNnBjbWNpYV9idXNfdHlwZSwgTlVMTCwgTlVMTCwgcGNtY2lhX3JlcXVlcnlfY2FsbGJhY2spO1xcbmRyaXZlcnMvcGNtY2lhL2RzLmMtNjkxLVxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy03MjQtXFx0ICogc29ja2V0LiBUaGlzIGRvZXMgbm90IG1hdHRlciwgdGhvdWdoLiAqL1xcbmRyaXZlcnMvcGNtY2lhL2RzLmM6NzI1OlxcdGlmIChidXNfcmVzY2FuX2RldmljZXMoXFx1MDAyNnBjbWNpYV9idXNfdHlwZSkpXFxuZHJpdmVycy9wY21jaWEvZHMuYy03MjYtXFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnMtXFx1MDAzZWRldiwgXFxcInJlc2Nhbm5pbmcgdGhlIGJ1cyBmYWlsZWRcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYz0xMjM4PXN0YXRpYyBpbnQgcGNtY2lhX2J1c19yZXN1bWUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTI0MC1cXHRkZXZfZGJnKFxcdTAwMjZza3QtXFx1MDAzZWRldiwgXFxcInJlc3VtaW5nIHNvY2tldCAlZFxcXFxuXFxcIiwgc2t0LVxcdTAwM2Vzb2NrKTtcXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEyNDE6XFx0YnVzX2Zvcl9lYWNoX2RldihcXHUwMDI2cGNtY2lhX2J1c190eXBlLCBOVUxMLCBza3QsIHBjbWNpYV9idXNfcmVzdW1lX2NhbGxiYWNrKTtcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEyNDItXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTEyNDU9c3RhdGljIGludCBwY21jaWFfYnVzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnNrdClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTI0Ny1cXHRkZXZfZGJnKFxcdTAwMjZza3QtXFx1MDAzZWRldiwgXFxcInN1c3BlbmRpbmcgc29ja2V0ICVkXFxcXG5cXFwiLCBza3QtXFx1MDAzZXNvY2spO1xcbmRyaXZlcnMvcGNtY2lhL2RzLmM6MTI0ODpcXHRpZiAoYnVzX2Zvcl9lYWNoX2RldihcXHUwMDI2cGNtY2lhX2J1c190eXBlLCBOVUxMLCBza3QsXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMjQ5LVxcdFxcdFxcdCAgICAgcGNtY2lhX2J1c19zdXNwZW5kX2NhbGxiYWNrKSkge1xcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYz0xNDA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBwY21jaWFfYnVzX3BtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQwOC1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjE0MDk6Y29uc3Qgc3RydWN0IGJ1c190eXBlIHBjbWNpYV9idXNfdHlwZSA9IHtcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTE0MTAtXFx0Lm5hbWUgPSBcXFwicGNtY2lhXFxcIixcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmM9MTQyMD1zdGF0aWMgaW50IF9faW5pdCBpbml0X3BjbWNpYV9idXModm9pZClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQyMy1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjE0MjQ6XFx0cmV0ID0gYnVzX3JlZ2lzdGVyKFxcdTAwMjZwY21jaWFfYnVzX3R5cGUpO1xcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQyNS1cXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xNDMyLVxcdFxcdFxcdFxcXCJwY21jaWE6IGNsYXNzX2ludGVyZmFjZV9yZWdpc3RlciBlcnJvcjogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9wY21jaWEvZHMuYzoxNDMzOlxcdFxcdGJ1c191bnJlZ2lzdGVyKFxcdTAwMjZwY21jaWFfYnVzX3R5cGUpO1xcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQzNC1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYz0xNDQzPXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3BjbWNpYV9idXModm9pZClcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTQ0Ni1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjE0NDc6XFx0YnVzX3VucmVnaXN0ZXIoXFx1MDAyNnBjbWNpYV9idXNfdHlwZSk7XFxuZHJpdmVycy9wY21jaWEvZHMuYy0xNDQ4LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NDUuMzQ5Njk1MDk5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3MzE0NDE2ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVsdmluZyBpbnRvIHRoZSBQQ25ldF9DUyBEcml2ZXIgYW5kIFNoYXJlZCBNZW1vcnkgU2V0dXAqKlxuXG5Pa2F5LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBgcGNuZXRfY3NgIGRyaXZlcidzIGlubmVyIHdvcmtpbmdzLCBzcGVjaWZpY2FsbHkgdGhlIGZ1bmN0aW9uIGBzZXR1cF9zaG1lbV93aW5kb3dgLiBJdCdzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggc2hhcmVkIG1lbW9yeS4gU28sIEknbGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGBwY25ldF9jc2AgZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jYCBmaWxlLiBJIG5lZWQgdG8gZ2V0IGEgZ3Jhc3Agb24gcHJlY2lzZWx5ICpob3cqIGFuZCAqd2hlcmUqIGBzZXR1cF9zaG1lbV93aW5kb3dgIGlzIGludm9rZWQgd2l0aGluIHRoZSBkcml2ZXIncyBleGVjdXRpb24gZmxvdy4gVGhpcyB3aWxsIGJlIHRoZSBmaXJzdCBhbmQgbW9zdCBpbXBvcnRhbnQgc3RlcCB0byBmaW5kaW5nIHRoZSBhbnN3ZXIgSSBzZWVrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzIzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NDkuMDgxMTQwMTQ5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQ5NDczOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXR1cF9zaG1lbV93aW5kb3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYz0xMDI9c3RhdGljIGludCBzZXRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZm1hcCAqbWFwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MTAzOnN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTEwNC1cXHRcXHRcXHQgICAgICBpbnQgc3RvcF9wZywgaW50IGNtX29mZnNldCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9NTY1PXN0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTYwOS0gICAgaWYgKCh1c2Vfc2htZW0gPT0gMCkgfHwgKCFoYXNfc2htZW0gXFx1MDAyNlxcdTAwMjYgKHVzZV9zaG1lbSA9PSAtMSkpIHx8XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjYxMDpcXHQoc2V0dXBfc2htZW1fd2luZG93KGxpbmssIHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQpICE9IDApKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy02MTEtXFx0c2V0dXBfZG1hX2NvbmZpZyhsaW5rLCBzdGFydF9wZywgc3RvcF9wZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM9MTQwMT1zdGF0aWMgdm9pZCBzaG1lbV9ibG9ja19vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTE0MTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jOjE0MTE6c3RhdGljIGludCBzZXR1cF9zaG1lbV93aW5kb3coc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmssIGludCBzdGFydF9wZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMtMTQxMi1cXHRcXHRcXHQgICAgICBpbnQgc3RvcF9wZywgaW50IGNtX29mZnNldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NDkuMTI4NjM5MTg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MzM2NjUwMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgdGhyb3VnaDpcblxuKipBbmFseXppbmcgdGhlIGBwY25ldF9jb25maWdgIFNlY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBwY25ldF9jb25maWdgIHNlY3Rpb24sIHNwZWNpZmljYWxseSBsaW5lcyA1NjUgdGhyb3VnaCA2MjAuIEknbSBmb2N1c2luZyBvbiB0aGlzIGFyZWEgYmVjYXVzZSBpdCdzIGxpa2VseSB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBQQ25ldCBkcml2ZXIgYXJlIGRlZmluZWQuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHdoZXJlIHRoZSBkZXZpY2UgZ2V0cyBpdHMgaW5pdGlhbCBzZXR0aW5ncywgcmlnaHQ/IEknbSBhbnRpY2lwYXRpbmcgd2UnbGwgZmluZCB0aGluZ3MgbGlrZSB0aGUgYmFzZSBJL08gYWRkcmVzcywgdGhlIGludGVycnVwdCB2ZWN0b3IsIG1heWJlIHNvbWUgaW5pdGlhbCBidWZmZXIgc2l6ZXMsIGFuZCBkZWZpbml0ZWx5IGhvdyBpdCBoYW5kbGVzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgRE1BIHVzYWdlLCBzaGFyZWQgbWVtb3J5IG1hcHBpbmcg4oCTIGFueXRoaW5nIHJlbGF0ZWQgdG8gaG93IHRoZSBQQ25ldCBhY3R1YWxseSB0YWxrcyB0byB0aGUgaGFyZHdhcmUgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBMZXQgbWUgY2hlY2sgdGhlIGRvY3VtZW50YXRpb24gb24gdGhpcyBjYXJkLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDc4LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NTEuNzYyMzA2NTA0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTY1LFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTY1OlxcdHN0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxcbiA1NjY6XFx0e1xcbiA1Njc6XFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLVxcdTAwM2Vwcml2O1xcbiA1Njg6XFx0ICAgIHN0cnVjdCBwY25ldF9kZXYgKmluZm8gPSBQUklWKGRldik7XFxuIDU2OTpcXHQgICAgaW50IHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQ7XFxuIDU3MDpcXHQgICAgaW50IGhhc19zaG1lbSA9IDA7XFxuIDU3MTpcXHQgICAgc3RydWN0IGh3X2luZm8gKmxvY2FsX2h3X2luZm87XFxuIDU3MjpcXHRcXG4gNTczOlxcdCAgICBkZXZfZGJnKFxcdTAwMjZsaW5rLVxcdTAwM2VkZXYsIFxcXCJwY25ldF9jb25maWdcXFxcblxcXCIpO1xcbiA1NzQ6XFx0XFxuIDU3NTpcXHQgICAgbG9jYWxfaHdfaW5mbyA9IHBjbmV0X3RyeV9jb25maWcobGluaywgXFx1MDAyNmhhc19zaG1lbSwgMCk7XFxuIDU3NjpcXHQgICAgaWYgKCFsb2NhbF9od19pbmZvKSB7XFxuIDU3NzpcXHRcXHQgICAgLyogY2hlY2sgd2hldGhlciBmb3JjaW5nIGlvX2xpbmVzIHRvIDE2IGhlbHBzLi4uICovXFxuIDU3ODpcXHRcXHQgICAgcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspO1xcbiA1Nzk6XFx0XFx0ICAgIGxvY2FsX2h3X2luZm8gPSBwY25ldF90cnlfY29uZmlnKGxpbmssIFxcdTAwMjZoYXNfc2htZW0sIDEpO1xcbiA1ODA6XFx0XFx0ICAgIGlmIChsb2NhbF9od19pbmZvID09IE5VTEwpIHtcXG4gNTgxOlxcdFxcdFxcdCAgICBkZXZfbm90aWNlKFxcdTAwMjZsaW5rLVxcdTAwM2VkZXYsIFxcXCJ1bmFibGUgdG8gcmVhZCBoYXJkd2FyZSBuZXRcXFwiXFxuIDU4MjpcXHRcXHRcXHRcXHQgICAgXFxcIiBhZGRyZXNzIGZvciBpbyBiYXNlICUjM2x4XFxcXG5cXFwiLCBkZXYtXFx1MDAzZWJhc2VfYWRkcik7XFxuIDU4MzpcXHRcXHRcXHQgICAgZ290byBmYWlsZWQ7XFxuIDU4NDpcXHRcXHQgICAgfVxcbiA1ODU6XFx0ICAgIH1cXG4gNTg2OlxcdFxcbiA1ODc6XFx0ICAgIGluZm8tXFx1MDAzZWZsYWdzID0gbG9jYWxfaHdfaW5mby1cXHUwMDNlZmxhZ3M7XFxuIDU4ODpcXHQgICAgLyogQ2hlY2sgZm9yIHVzZXIgb3ZlcnJpZGVzICovXFxuIDU4OTpcXHQgICAgaW5mby1cXHUwMDNlZmxhZ3MgfD0gKGRlbGF5X291dHB1dCkgPyBERUxBWV9PVVRQVVQgOiAwO1xcbiA1OTA6XFx0ICAgIGlmICgobGluay1cXHUwMDNlbWFuZl9pZCA9PSBNQU5GSURfU09DS0VUKSBcXHUwMDI2XFx1MDAyNlxcbiA1OTE6XFx0XFx0KChsaW5rLVxcdTAwM2VjYXJkX2lkID09IFBST0RJRF9TT0NLRVRfTFBFKSB8fFxcbiA1OTI6XFx0XFx0IChsaW5rLVxcdTAwM2VjYXJkX2lkID09IFBST0RJRF9TT0NLRVRfTFBFX0NGKSB8fFxcbiA1OTM6XFx0XFx0IChsaW5rLVxcdTAwM2VjYXJkX2lkID09IFBST0RJRF9TT0NLRVRfRUlPKSkpXFxuIDU5NDpcXHRcXHRpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+VVNFX0JJR19CVUY7XFxuIDU5NTpcXHQgICAgaWYgKCF1c2VfYmlnX2J1ZilcXG4gNTk2OlxcdFxcdGluZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5VU0VfQklHX0JVRjtcXG4gNTk3OlxcdFxcbiA1OTg6XFx0ICAgIGlmIChpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IFVTRV9CSUdfQlVGKSB7XFxuIDU5OTpcXHRcXHRzdGFydF9wZyA9IFNPQ0tFVF9TVEFSVF9QRztcXG4gNjAwOlxcdFxcdHN0b3BfcGcgPSBTT0NLRVRfU1RPUF9QRztcXG4gNjAxOlxcdFxcdGNtX29mZnNldCA9IDB4MTAwMDA7XFxuIDYwMjpcXHQgICAgfSBlbHNlIHtcXG4gNjAzOlxcdFxcdHN0YXJ0X3BnID0gUENORVRfU1RBUlRfUEc7XFxuIDYwNDpcXHRcXHRzdG9wX3BnID0gUENORVRfU1RPUF9QRztcXG4gNjA1OlxcdFxcdGNtX29mZnNldCA9IDA7XFxuIDYwNjpcXHQgICAgfVxcbiA2MDc6XFx0XFxuIDYwODpcXHQgICAgLyogaGFzX3NobWVtIGlzIGlnbm9yZWQgaWYgdXNlX3NobWVtICE9IC0xICovXFxuIDYwOTpcXHQgICAgaWYgKCh1c2Vfc2htZW0gPT0gMCkgfHwgKCFoYXNfc2htZW0gXFx1MDAyNlxcdTAwMjYgKHVzZV9zaG1lbSA9PSAtMSkpIHx8XFxuIDYxMDpcXHRcXHQoc2V0dXBfc2htZW1fd2luZG93KGxpbmssIHN0YXJ0X3BnLCBzdG9wX3BnLCBjbV9vZmZzZXQpICE9IDApKVxcbiA2MTE6XFx0XFx0c2V0dXBfZG1hX2NvbmZpZyhsaW5rLCBzdGFydF9wZywgc3RvcF9wZyk7XFxuIDYxMjpcXHRcXG4gNjEzOlxcdCAgICBlaV9zdGF0dXMubmFtZSA9IFxcXCJORTIwMDBcXFwiO1xcbiA2MTQ6XFx0ICAgIGVpX3N0YXR1cy53b3JkMTYgPSAxO1xcbiA2MTU6XFx0ICAgIGVpX3N0YXR1cy5yZXNldF84MzkwID0gcGNuZXRfcmVzZXRfODM5MDtcXG4gNjE2OlxcdFxcbiA2MTc6XFx0ICAgIGlmIChpbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IChJU19ETDEwMDE5fElTX0RMMTAwMjIpKVxcbiA2MTg6XFx0XFx0bWlpX3BoeV9wcm9iZShkZXYpO1xcbiA2MTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIxOjU3OjUxLjc2MjQxNjMyNFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MTk1MTk5ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gYHBjbmV0X2NvbmZpZ2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgcGNuZXRfY29uZmlnYCBpcyBhY3R1YWxseSB1c2VkLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIHJvbGUgYW5kIGltcGFjdCBpbiB0aGUgc3lzdGVtLiBUaGUgZmlyc3Qgc3RlcCBpcyB0byB0cmFjZSBpdHMgY2FsbHMg4oCTIHNlZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQuIFRpbWUgdG8gZ2V0IGRvd24gaW50byB0aGUgY29kZSBhbmQgc3RhcnQgbG9va2luZy4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGRlYnVnZ2luZyBwcm9jZXNzLiBMZXQncyBzdGFydCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM0NSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NTUuOTU3NjE4Njc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzY5NTUxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY25ldF9jb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYz05Mz1zdGF0aWMgdm9pZCBtaWlfcGh5X3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYzo5NDpzdGF0aWMgaW50IHBjbmV0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTk1LXN0YXRpYyB2b2lkIHBjbmV0X3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jPTIzNT1zdGF0aWMgaW50IHBjbmV0X3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTI1Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6MjUzOiAgICByZXR1cm4gcGNuZXRfY29uZmlnKGxpbmspO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy0yNTQtfSAvKiBwY25ldF9hdHRhY2ggKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYz01MDQ9c3RhdGljIHN0cnVjdCBod19pbmZvICpwY25ldF90cnlfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTU2NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6NTY1OnN0YXRpYyBpbnQgcGNuZXRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy01NjYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTU3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6NTczOiAgICBkZXZfZGJnKFxcdTAwMjZsaW5rLVxcdTAwM2VkZXYsIFxcXCJwY25ldF9jb25maWdcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYy01NzQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmMtNjQ2LSAgICByZXR1cm4gLUVOT0RFVjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmM6NjQ3On0gLyogcGNuZXRfY29uZmlnICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLTY0OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTc6NTYuMDA1MzE4NzkzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgyNzQ3ODA0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUENNQ0lBIFJlYWNoYWJpbGl0eSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBwY25ldF9jcy5jYCwgYW5kIHNwZWNpZmljYWxseSBgcGNuZXRfcHJvYmVgLiBUaGUgY29kZSBzaG93cyBgcGNuZXRfcHJvYmVgIGJlaW5nIGNhbGxlZCBieSB0aGUgYHBjbmV0X2RyaXZlcmAgd2hpY2ggaXMgcmVnaXN0ZXJlZCBhcyBhIFBDTUNJQSBkcml2ZXIuIE15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbiBleHBlcnQgaW4gZnV6emluZyBhbmQga2VybmVsIGludGVybmFscywgaXMgcmVhY2hhYmlsaXR5LiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB3aGV0aGVyIFBDTUNJQSBkZXZpY2VzLCBhbmQgdGhlcmVmb3JlIGBwY25ldF9wcm9iZWAsIGFyZSByZWFjaGFibGUgaW4gdGhlIGZ1enppbmcgZW52aXJvbm1lbnQg4oCTIHNwZWNpZmljYWxseSwgc3RhbmRhcmQgUUVNVSBvbiB4ODZfNjQuIFRoZSBjb3JlIHByaW5jaXBsZTogaWYgaXQncyBub3QgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQsIGl0IHNob3VsZG4ndCBiZSBmdXp6ZWQuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoZSB0b29saW5nIHN1cHBvcnRzIFBDTUNJQS4gSSBrbm93IHN5emthbGxlciBpcyBteSBwcmltYXJ5IGZ1enppbmcgdG9vbCwgYnV0IEkgY2FuJ3Qgc2VhcmNoIGZvciBzeXpsYW5nIGRlc2NyaXB0aW9ucyBvciBleHByZXNzaW9ucyB3aXRoICdsb25nIHN5el8nIHVzaW5nIHRoZSBkZWNsYXJlZCB0b29scy4gVGhpcyBpcyBhIGNydWNpYWwgbGltaXRhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYSB3YXkgdG8gc2VhcmNoIGZvciBzeXprYWxsZXIgZGVzY3JpcHRpb25zLlxuXG5NeSBuZXh0IGxpbmUgb2YgdGhvdWdodCBpcyB3aGV0aGVyIHRoZXJlJ3MgYW55IHZpcnR1YWwgb3IgZW11bGF0ZWQgUENNQ0lBIGhhcmR3YXJlIGluIHRoZSBMaW51eCBrZXJuZWwgb3IgUUVNVSB0aGF0IEkgY2FuIHRhcmdldC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBhdmFpbGFiaWxpdHkgb2YgZW11bGF0ZWQgUENNQ0lBIHNvY2tldHMuICBJJ20gZ29pbmcgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL3BjbWNpYS9gIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsIHNvdXJjZS4gSSBzZWUgYSBidW5jaCBvZiBkcml2ZXJzIHRoZXJlLCBtYW55IGZvciBBUk0gYW5kIE1JUFMgU29Dcy4gVGhlcmUncyBhbHNvIGB5ZW50YV9zb2NrZXQuY2AsIGEgUENJLUNhcmRCdXMgYnJpZGdlLCBhbmQgYGk4MjM2NS5jYCwgd2hpY2ggaXMgYW4gSVNBIFBDTUNJQSBjb250cm9sbGVyLiBUaGUgYHBkNjcyOS5jYCBpcyBQQ0ktUENNQ0lBIGJyaWRnZS5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogQ2FuIGFueSBvZiB0aGVzZSBiZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VPyBJIG5lZWQgdG8ga25vdyBpZiBRRU1VIGVtdWxhdGVzIGFueSBvZiB0aGVzZSBjb250cm9sbGVycy4gU3BlY2lmaWNhbGx5LCBkb2VzIFFFTVUgaGF2ZSBhIFBENjcyOSwgWWVudGEsIG9yIGk4MjM2NT8gVGhpbmtpbmcgYmFjayBvbiBteSBRRU1VIGV4cGVyaWVuY2UsIEkgcmVjYWxsIHRoYXQgUENNQ0lBIHN1cHBvcnQgd2FzIHByZXNlbnQgaW4gdGhlIHBhc3QgZm9yIHRoZSBQWEEyeHggYXJjaGl0ZWN0dXJlLCBpbiBmYWN0IEkgcmVtZW1iZXIgaXQgYmVpbmcgZGVwcmVjYXRlZCBvciByZW1vdmVkLCBhbmQgdGhhdCBpdCBuZXZlciBpbmNsdWRlZCBQQ0kgQ2FyZEJ1cyBvciBQQ01DSUEgYnJpZGdlcy4gIFNvIHN0YW5kYXJkIGBxZW11LXN5c3RlbS14ODZfNjRgIChsaWtlIGAtbWFjaGluZSBxMzVgIG9yIGBwY2ApIGlzIHVubGlrZWx5IHRvIHByb3ZpZGUgUENNQ0lBLlxuXG5UaGVuIEkgYW0gcmVtaW5kZWQgb2YgYG5lMmtfcGNpYCwgd2hpY2ggUUVNVSAqZG9lcyogZW11bGF0ZS4gSG93ZXZlciwgdGhlIGNvZGUgaGVyZSBpcyB0YXJnZXRpbmcgYHBjbmV0X2NzLmNgLCB3aGljaCBpcyByZWdpc3RlcmVkIGZvciBQQ01DSUEgZGV2aWNlcy4gTXkgdW5kZXJzdGFuZGluZyBvZiBQQ01DSUEgaXMgdGhhdCBpdCByZWxpZXMgb24gc29ja2V0IGV2ZW50czogYSBjYXJkIG5lZWRzIHRvIGJlIGluc2VydGVkIGludG8gYSBzb2NrZXQuIFRoZSBgcGNjYXJkZGAga2VybmVsIHRocmVhZCB3aWxsIHJ1biB3aGVuIGEgc29ja2V0IGV2ZW50IGhhcHBlbnMuIEl0IG5lZWRzIHRvIHJlYWQgdGhlIENJUyBmcm9tIHRoZSBjYXJkIGFuZCB0aGVuIGNyZWF0ZSBhbmQgYmluZCBhIGBwY21jaWFfZGV2aWNlYCB2aWEgdGhlIHBjbWNpYSBidXMuXG5cblRoZXJlZm9yZSwgc2luY2UgYHBjbmV0X2NzYCBpcyBhIFBDTUNJQSBkcml2ZXIsIGFuZCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyB3YXkgdG8gY3JlYXRlIGEgdmlydHVhbCBQQ01DSUEgc29ja2V0IG9yIGNhcmQsIHRoZSBjb2RlIHdpbGwgbGlrZWx5IG9ubHkgYmUgcmVhY2hlZCB3aGVuIGEgKnJlYWwqIFBDTUNJQSBkZXZpY2UgaXMgcGx1Z2dlZCBpbiBvciBhIHByb3BlciBlbXVsYXRpb24gb2YgYSBQQ01DSUEgc29ja2V0IGNhbiBiZSBlc3RhYmxpc2hlZC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSBrZXJuZWwncyBzeXNmcyBpbnRlcmZhY2UgZm9yIGEgbWV0aG9kIHRvIGluamVjdCBvciBjcmVhdGUgUENNQ0lBIGRldmljZXMgb3Igc29ja2V0cy4gSSdtIGdvaW5nIHRvIHNlYXJjaCB0aGUgYGRyaXZlcnMvcGNtY2lhL2AgZGlyZWN0b3J5IGZvciBhbnkgc3lzZnMgYXR0cmlidXRlcyByZWxhdGVkIHRvIGRldmljZSBjcmVhdGlvbiwgYmluZGluZywgb3IgaW5qZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA4NiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTg6MDQuMjgwMTAxNjQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMxODAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJERVZJQ0VfQVRUUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3BjbWNpYVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3BjbWNpYS9kcy5jPTEwMDI9c3RhdGljIHNzaXplX3QgZmllbGQjI19zaG93IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFx0XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDA2LX1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9wY21jaWEvZHMuYzoxMDA3OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhmaWVsZCk7XFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDA4LVxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYz0xMDEwPXN0YXRpYyBzc2l6ZV90IG5hbWUjI19zaG93IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFx0XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDE0LX1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9wY21jaWEvZHMuYzoxMDE1OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhuYW1lKTtcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwMTYtXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jPTEwMjU9c3RhdGljIHNzaXplX3QgZnVuY3Rpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDMwLX1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEwMzE6c3RhdGljIERFVklDRV9BVFRSX1JPKGZ1bmN0aW9uKTtcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwMzItXFxuZHJpdmVycy9wY21jaWEvZHMuYz0xMDMzPXN0YXRpYyBzc2l6ZV90IHJlc291cmNlc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTA0My19XFxuZHJpdmVycy9wY21jaWEvZHMuYzoxMDQ0OnN0YXRpYyBERVZJQ0VfQVRUUl9STyhyZXNvdXJjZXMpO1xcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTA0NS1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL2RzLmM9MTA1Nj1zdGF0aWMgc3NpemVfdCBwbV9zdGF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDcxLX1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEwNzI6c3RhdGljIERFVklDRV9BVFRSX1JXKHBtX3N0YXRlKTtcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwNzMtXFxuZHJpdmVycy9wY21jaWEvZHMuYz0xMDc0PXN0YXRpYyBzc2l6ZV90IG1vZGFsaWFzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMDkzLX1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjEwOTQ6c3RhdGljIERFVklDRV9BVFRSX1JPKG1vZGFsaWFzKTtcXG5kcml2ZXJzL3BjbWNpYS9kcy5jLTEwOTUtXFxuZHJpdmVycy9wY21jaWEvZHMuYz0xMDk2PXN0YXRpYyBzc2l6ZV90IGFsbG93X2Z1bmNfaWRfbWF0Y2hfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9wY21jaWEvZHMuYy0xMTEwLX1cXG5kcml2ZXJzL3BjbWNpYS9kcy5jOjExMTE6c3RhdGljIERFVklDRV9BVFRSX1dPKGFsbG93X2Z1bmNfaWRfbWF0Y2gpO1xcbmRyaXZlcnMvcGNtY2lhL2RzLmMtMTExMi1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9MTA5OT1zdGF0aWMgc3NpemVfdCBzdG9yZV9pb19kYihzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTExMjgtfVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM6MTEyOTpzdGF0aWMgREVWSUNFX0FUVFIoYXZhaWxhYmxlX3Jlc291cmNlc19pbywgMDYwMCwgc2hvd19pb19kYiwgc3RvcmVfaW9fZGIpO1xcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmMtMTEzMC1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3JzcmNfbm9uc3RhdGljLmM9MTE2NT1zdGF0aWMgc3NpemVfdCBzdG9yZV9tZW1fZGIoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9wY21jaWEvcnNyY19ub25zdGF0aWMuYy0xMTk0LX1cXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jOjExOTU6c3RhdGljIERFVklDRV9BVFRSKGF2YWlsYWJsZV9yZXNvdXJjZXNfbWVtLCAwNjAwLCBzaG93X21lbV9kYiwgc3RvcmVfbWVtX2RiKTtcXG5kcml2ZXJzL3BjbWNpYS9yc3JjX25vbnN0YXRpYy5jLTExOTYtXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmM9NzAzPXN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKFxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jLTcyNy19XFxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jOjcyODpzdGF0aWMgREVWSUNFX0FUVFIoc3RhdHVzLCBTX0lSVUdPLCBzaG93X3N0YXR1cywgTlVMTCk7XFxuZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jLTcyOS1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTM0PXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zaG93X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTQ0LX1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzo0NTpzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF90eXBlLCAwNDQ0LCBwY2NhcmRfc2hvd190eXBlLCBOVUxMKTtcXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy00Ni1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYz00Nz1zdGF0aWMgc3NpemVfdCBwY2NhcmRfc2hvd192b2x0YWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy01OC19XFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM6NTk6c3RhdGljIERFVklDRV9BVFRSKGNhcmRfdm9sdGFnZSwgMDQ0NCwgcGNjYXJkX3Nob3dfdm9sdGFnZSwgTlVMTCk7XFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtNjAtXFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM9NjE9c3RhdGljIHNzaXplX3QgcGNjYXJkX3Nob3dfdnBwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy02OC19XFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM6Njk6c3RhdGljIERFVklDRV9BVFRSKGNhcmRfdnBwLCAwNDQ0LCBwY2NhcmRfc2hvd192cHAsIE5VTEwpO1xcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTcwLVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTcxPXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zaG93X3ZjYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtNzgtfVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jOjc5OnN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX3ZjYywgMDQ0NCwgcGNjYXJkX3Nob3dfdmNjLCBOVUxMKTtcXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy04MC1cXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTgyPXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9pbnNlcnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTkzLX1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzo5NDpzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF9pbnNlcnQsIDAyMDAsIE5VTEwsIHBjY2FyZF9zdG9yZV9pbnNlcnQpO1xcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTk1LVxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM9MTA1PXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9jYXJkX3BtX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jLTEyNS19XFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM6MTI2OnN0YXRpYyBERVZJQ0VfQVRUUihjYXJkX3BtX3N0YXRlLCAwNjQ0LCBwY2NhcmRfc2hvd19jYXJkX3BtX3N0YXRlLCBwY2NhcmRfc3RvcmVfY2FyZF9wbV9zdGF0ZSk7XFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtMTI3LVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jPTEyOD1zdGF0aWMgc3NpemVfdCBwY2NhcmRfc3RvcmVfZWplY3Qoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtMTQwLX1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYzoxNDE6c3RhdGljIERFVklDRV9BVFRSKGNhcmRfZWplY3QsIDAyMDAsIE5VTEwsIHBjY2FyZF9zdG9yZV9lamVjdCk7XFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtMTQyLVxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM9MTUyPXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9pcnFfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy0xNzMtfVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jOjE3NDpzdGF0aWMgREVWSUNFX0FUVFIoY2FyZF9pcnFfbWFzaywgMDYwMCwgcGNjYXJkX3Nob3dfaXJxX21hc2ssIHBjY2FyZF9zdG9yZV9pcnFfbWFzayk7XFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmMtMTc1LVxcbi0tXFxuZHJpdmVycy9wY21jaWEvc29ja2V0X3N5c2ZzLmM9MTg0PXN0YXRpYyBzc2l6ZV90IHBjY2FyZF9zdG9yZV9yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy0yMDEtfVxcbmRyaXZlcnMvcGNtY2lhL3NvY2tldF9zeXNmcy5jOjIwMjpzdGF0aWMgREVWSUNFX0FUVFIoYXZhaWxhYmxlX3Jlc291cmNlc19zZXR1cF9kb25lLCAwNjAwLCBwY2NhcmRfc2hvd19yZXNvdXJjZSwgcGNjYXJkX3N0b3JlX3Jlc291cmNlKTtcXG5kcml2ZXJzL3BjbWNpYS9zb2NrZXRfc3lzZnMuYy0yMDMtXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYz0xNzY9c3RhdGljIHNzaXplX3Qgc2hvd195ZW50YV9yZWdpc3RlcnMoc3RydWN0IGRldmljZSAqeWVudGFkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYy0yMDYtXFxuZHJpdmVycy9wY21jaWEveWVudGFfc29ja2V0LmM6MjA3OnN0YXRpYyBERVZJQ0VfQVRUUih5ZW50YV9yZWdpc3RlcnMsIFNfSVJVU1IsIHNob3dfeWVudGFfcmVnaXN0ZXJzLCBOVUxMKTtcXG5kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYy0yMDgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIxOjU4OjA0LjMyODQyNjM3N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NjA1NDE4NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz1mYWxzZTogUENNQ0lBIGlzIFVucmVhY2hhYmxlKipcblxuT2theSwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBjb2RlIGlzIHdvcnRoIGZ1enppbmcuIExldCBtZSBzdGFydCBieSBsb29raW5nIGF0IGBzb2NrZXRfc3lzZnMuY2AuIEkgc2VlIGBwY2NhcmRfc3RvcmVfaW5zZXJ0YCwgYHBjY2FyZF9zdG9yZV9lamVjdGAsIGV0Yy4gVGhvc2UgYXJlIGFsbCByZWxhdGVkIHRvIGBwY21jaWFfc29ja2V0YCBkZXZpY2VzLCB3aGljaCBhcmUgb25seSByZWdpc3RlcmVkIHdoZW4gYSBzb2NrZXQgZHJpdmVyIGxpa2UgYHllbnRhX3NvY2tldGAgb3IgYHBkNjcyOWAgcHJvYmVzLiBCdXQgY2FuIGFueSBvZiB0aG9zZSBzb2NrZXQgZHJpdmVycyBwcm9iZSBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSB4ODZfNjQ/IE5vISBUaGVyZSBhcmUgbm8gUENNQ0lBIHNvY2tldCBkZXZpY2VzIGVtdWxhdGVkIGluIHRob3NlIGVudmlyb25tZW50cyBvbiBhbWQ2NC4gRXZlbiBpZiB0aGVyZSB3ZXJlLCBpbnNlcnRpbmcgYSBjYXJkIHdvdWxkIGludm9sdmUgcmVhZGluZyB0aGUgY2FyZCdzIENJUyBmcm9tIHBoeXNpY2FsIGhhcmR3YXJlLCB3aGljaCBJIGRvbid0IGhhdmUuXG5cbkxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBTeXprYWxsZXIuIERvZXMgaXQgZW11bGF0ZSBQQ01DSUE/IE5vcGUuXG5cbk9rYXksIGJhY2sgdG8gdGhlIGluc3RydWN0aW9ucy4gU2VjdGlvbiAyLCB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuIEl0IHNheXMgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIGZhbGxzIGludG8gc2V2ZXJhbCBjYXRlZ29yaWVzLiBMZXQncyBzZWUuLi4gc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIG9yIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIFBDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoYXQgc291bmRzIGxpa2UgUENNQ0lBIVxuXG5JIHNob3VsZCByZS1yZWFkIFNlY3Rpb24gMSwgdG9vLiBcIlJlYWNoYWJsZSBpcyB0aGUgcHJpbWFyeSBnYXRlLi4uXCIgRnV6emluZyBvbmx5IHdvcmtzIGlmIHRoZSBjb2RlIGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSWYgaXQncyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUsIGRvbid0IGZ1enogaXQuXG5cbkxldCdzIGNoZWNrIGBwY25ldF9jc2AgbW9yZSBwcmVjaXNlbHkuIEl0J3MgYSAxNi1iaXQgUENNQ0lBIChQQyBDYXJkKSBFdGhlcm5ldCBkcml2ZXIgZm9yIE5FMjAwMC1jb21wYXRpYmxlIFBDTUNJQSBjYXJkcy4gQ2FuIGBwY25ldF9jc2AgcnVuIGluIFFFTVUgb3IgR0NFPyBObyEgUENNQ0lBIGhhcmR3YXJlIGlzIGZ1bmRhbWVudGFsbHkgdW5yZWFjaGFibGUgaW4gdGhlc2Ugc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIG9uIGFtZDY0LiBUaGV5IGRvbid0IGVtdWxhdGUgdGhlIHNvY2tldCBjb250cm9sbGVycywgYW5kIHRoZXkgZG9uJ3QgZW11bGF0ZSBORTIwMDAgUENNQ0lBIGNhcmRzLlxuXG5BbHJpZ2h0LCBsZXQncyBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYgdG8gYmUgc3VyZS4gSSBjYW4gc2VlIHRoZSBwYXRjaCBjaGFuZ2VzIHNvbWUgZXJyb3IgaGFuZGxpbmcgcGF0aHMsIGJ1dCBpdCBhbGwgcmV2b2x2ZXMgYXJvdW5kIGBwY21jaWFfcmVsZWFzZV93aW5kb3dgIGFuZCB0aGUgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gb2YgdGhlIG1lbW9yeSB3aW5kb3cgZm9yIHRoZSBQQ01DSUEgZGV2aWNlLiBUaGlzIGlzIGFsbCBwcmVkaWNhdGVkIG9uIHRoZSBwcmVzZW5jZSBvZiBwaHlzaWNhbCBQQ01DSUEgaGFyZHdhcmUuIEl0IGxvb2tzIGxpa2UgaXQganVzdCBzbGlnaHRseSByZW9yZGVycyB0aGUgY2FsbHMgdG8gbWFrZSBzdXJlIHJlc291cmNlcyBhcmUgcmVsZWFzZWQgaW4gZXJyb3IgcGF0aHMuXG5cblRoZSBjb25jbHVzaW9uOiBQQ01DSUEgaGFyZHdhcmUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU3MSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMjE6NTg6MTAuOTMzODQ4MDM0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQxMCxcbiAgXCJMaW5lQ291bnRcIjogNzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQxMDpcXHRcXG4xNDExOlxcdHN0YXRpYyBpbnQgc2V0dXBfc2htZW1fd2luZG93KHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rLCBpbnQgc3RhcnRfcGcsXFxuMTQxMjpcXHRcXHRcXHRcXHQgICAgICBpbnQgc3RvcF9wZywgaW50IGNtX29mZnNldClcXG4xNDEzOlxcdHtcXG4xNDE0OlxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay1cXHUwMDNlcHJpdjtcXG4xNDE1OlxcdCAgICBzdHJ1Y3QgcGNuZXRfZGV2ICppbmZvID0gUFJJVihkZXYpO1xcbjE0MTY6XFx0ICAgIGludCBpLCB3aW5kb3dfc2l6ZSwgb2Zmc2V0LCByZXQ7XFxuMTQxNzpcXHRcXG4xNDE4OlxcdCAgICB3aW5kb3dfc2l6ZSA9IChzdG9wX3BnIC0gc3RhcnRfcGcpIFxcdTAwM2NcXHUwMDNjIDg7XFxuMTQxOTpcXHQgICAgaWYgKHdpbmRvd19zaXplIFxcdTAwM2UgMzIgKiAxMDI0KVxcbjE0MjA6XFx0XFx0d2luZG93X3NpemUgPSAzMiAqIDEwMjQ7XFxuMTQyMTpcXHRcXG4xNDIyOlxcdCAgICAvKiBNYWtlIHN1cmUgaXQncyBhIHBvd2VyIG9mIHR3by4gICovXFxuMTQyMzpcXHQgICAgd2luZG93X3NpemUgPSByb3VuZHVwX3Bvd19vZl90d28od2luZG93X3NpemUpO1xcbjE0MjQ6XFx0XFxuMTQyNTpcXHQgICAgLyogQWxsb2NhdGUgYSBtZW1vcnkgd2luZG93ICovXFxuMTQyNjpcXHQgICAgbGluay1cXHUwMDNlcmVzb3VyY2VbM10tXFx1MDAzZWZsYWdzIHw9IFdJTl9EQVRBX1dJRFRIXzE2fFdJTl9NRU1PUllfVFlQRV9DTXxXSU5fRU5BQkxFO1xcbjE0Mjc6XFx0ICAgIGxpbmstXFx1MDAzZXJlc291cmNlWzNdLVxcdTAwM2VmbGFncyB8PSBXSU5fVVNFX1dBSVQ7XFxuMTQyODpcXHQgICAgbGluay1cXHUwMDNlcmVzb3VyY2VbM10tXFx1MDAzZXN0YXJ0ID0gMDsgbGluay1cXHUwMDNlcmVzb3VyY2VbM10tXFx1MDAzZWVuZCA9IHdpbmRvd19zaXplO1xcbjE0Mjk6XFx0ICAgIHJldCA9IHBjbWNpYV9yZXF1ZXN0X3dpbmRvdyhsaW5rLCBsaW5rLVxcdTAwM2VyZXNvdXJjZVszXSwgbWVtX3NwZWVkKTtcXG4xNDMwOlxcdCAgICBpZiAocmV0KVxcbjE0MzE6XFx0XFx0ICAgIGdvdG8gZmFpbGVkO1xcbjE0MzI6XFx0XFxuMTQzMzpcXHQgICAgb2Zmc2V0ID0gKHN0YXJ0X3BnIFxcdTAwM2NcXHUwMDNjIDgpICsgY21fb2Zmc2V0O1xcbjE0MzQ6XFx0ICAgIG9mZnNldCAtPSBvZmZzZXQgJSB3aW5kb3dfc2l6ZTtcXG4xNDM1OlxcdCAgICByZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmssIGxpbmstXFx1MDAzZXJlc291cmNlWzNdLCBvZmZzZXQpO1xcbjE0MzY6XFx0ICAgIGlmIChyZXQpXFxuMTQzNzpcXHRcXHQgICAgZ290byByZWxlYXNlO1xcbjE0Mzg6XFx0XFxuMTQzOTpcXHQgICAgLyogVHJ5IHNjcmliYmxpbmcgb24gdGhlIGJ1ZmZlciAqL1xcbjE0NDA6XFx0ICAgIGluZm8tXFx1MDAzZWJhc2UgPSBpb3JlbWFwKGxpbmstXFx1MDAzZXJlc291cmNlWzNdLVxcdTAwM2VzdGFydCxcXG4xNDQxOlxcdFxcdFxcdFxcdHJlc291cmNlX3NpemUobGluay1cXHUwMDNlcmVzb3VyY2VbM10pKTtcXG4xNDQyOlxcdCAgICBpZiAodW5saWtlbHkoIWluZm8tXFx1MDAzZWJhc2UpKSB7XFxuMTQ0MzpcXHRcXHQgICAgcmV0ID0gLUVOT01FTTtcXG4xNDQ0OlxcdFxcdCAgICBnb3RvIHJlbGVhc2U7XFxuMTQ0NTpcXHQgICAgfVxcbjE0NDY6XFx0XFxuMTQ0NzpcXHQgICAgZm9yIChpID0gMDsgaSBcXHUwMDNjIChUWF9QQUdFU1xcdTAwM2NcXHUwMDNjOCk7IGkgKz0gMilcXG4xNDQ4OlxcdFxcdF9fcmF3X3dyaXRldygoaVxcdTAwM2VcXHUwMDNlMSksIGluZm8tXFx1MDAzZWJhc2Urb2Zmc2V0K2kpO1xcbjE0NDk6XFx0ICAgIHVkZWxheSgxMDApO1xcbjE0NTA6XFx0ICAgIGZvciAoaSA9IDA7IGkgXFx1MDAzYyAoVFhfUEFHRVNcXHUwMDNjXFx1MDAzYzgpOyBpICs9IDIpXFxuMTQ1MTpcXHRcXHRpZiAoX19yYXdfcmVhZHcoaW5mby1cXHUwMDNlYmFzZStvZmZzZXQraSkgIT0gKGlcXHUwMDNlXFx1MDAzZTEpKSBicmVhaztcXG4xNDUyOlxcdCAgICBwY25ldF9yZXNldF84MzkwKGRldik7XFxuMTQ1MzpcXHQgICAgaWYgKGkgIT0gKFRYX1BBR0VTXFx1MDAzY1xcdTAwM2M4KSkge1xcbjE0NTQ6XFx0XFx0aW91bm1hcChpbmZvLVxcdTAwM2ViYXNlKTtcXG4xNDU1OlxcdFxcdGluZm8tXFx1MDAzZWJhc2UgPSBOVUxMO1xcbjE0NTY6XFx0XFx0Z290byByZWxlYXNlO1xcbjE0NTc6XFx0ICAgIH1cXG4xNDU4OlxcdFxcbjE0NTk6XFx0ICAgIGVpX3N0YXR1cy5tZW0gPSBpbmZvLVxcdTAwM2ViYXNlICsgb2Zmc2V0O1xcbjE0NjA6XFx0ICAgIGVpX3N0YXR1cy5wcml2ID0gcmVzb3VyY2Vfc2l6ZShsaW5rLVxcdTAwM2VyZXNvdXJjZVszXSk7XFxuMTQ2MTpcXHQgICAgZGV2LVxcdTAwM2VtZW1fc3RhcnQgPSAodV9sb25nKWVpX3N0YXR1cy5tZW07XFxuMTQ2MjpcXHQgICAgZGV2LVxcdTAwM2VtZW1fZW5kID0gZGV2LVxcdTAwM2VtZW1fc3RhcnQgKyByZXNvdXJjZV9zaXplKGxpbmstXFx1MDAzZXJlc291cmNlWzNdKTtcXG4xNDYzOlxcdFxcbjE0NjQ6XFx0ICAgIGVpX3N0YXR1cy50eF9zdGFydF9wYWdlID0gc3RhcnRfcGc7XFxuMTQ2NTpcXHQgICAgZWlfc3RhdHVzLnJ4X3N0YXJ0X3BhZ2UgPSBzdGFydF9wZyArIFRYX1BBR0VTO1xcbjE0NjY6XFx0ICAgIGVpX3N0YXR1cy5zdG9wX3BhZ2UgPSBzdGFydF9wZyArIChcXG4xNDY3OlxcdFxcdCAgICAocmVzb3VyY2Vfc2l6ZShsaW5rLVxcdTAwM2VyZXNvdXJjZVszXSkgLSBvZmZzZXQpIFxcdTAwM2VcXHUwMDNlIDgpO1xcbjE0Njg6XFx0XFxuMTQ2OTpcXHQgICAgLyogc2V0IHVwIGJsb2NrIGkvbyBmdW5jdGlvbnMgKi9cXG4xNDcwOlxcdCAgICBlaV9zdGF0dXMuZ2V0XzgzOTBfaGRyID0gc2htZW1fZ2V0XzgzOTBfaGRyO1xcbjE0NzE6XFx0ICAgIGVpX3N0YXR1cy5ibG9ja19pbnB1dCA9IHNobWVtX2Jsb2NrX2lucHV0O1xcbjE0NzI6XFx0ICAgIGVpX3N0YXR1cy5ibG9ja19vdXRwdXQgPSBzaG1lbV9ibG9ja19vdXRwdXQ7XFxuMTQ3MzpcXHRcXG4xNDc0OlxcdCAgICBpbmZvLVxcdTAwM2VmbGFncyB8PSBVU0VfU0hNRU07XFxuMTQ3NTpcXHQgICAgcmV0dXJuIDA7XFxuMTQ3NjpcXHRcXG4xNDc3OlxcdHJlbGVhc2U6XFxuMTQ3ODpcXHRcXHRwY21jaWFfcmVsZWFzZV93aW5kb3cobGluaywgbGluay1cXHUwMDNlcmVzb3VyY2VbM10pO1xcbjE0Nzk6XFx0ZmFpbGVkOlxcbjE0ODA6XFx0ICAgIHJldHVybiAxO1xcbjE0ODE6XFx0fVxcbjE0ODI6XFx0XFxuMTQ4MzpcXHQvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki9cXG4xNDg0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMTo1ODoxMC45MzM5OTYyODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Njg1MDg2NTMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhbiBVbnJlYWNoYWJsZSBQQ01DSUEgRHJpdmVyIENvZGUgUGF0aCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBhIHBhdGNoIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC84MzkwL3BjbmV0X2NzLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBzZXR1cF9zaG1lbV93aW5kb3dgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcmVzb3VyY2UgbGVhayB3aGVyZSBhIFBDTUNJQSBtZW1vcnkgd2luZG93IHdhc24ndCBiZWluZyByZWxlYXNlZCBpbiB0aGUgY2FzZSBvZiBhbiBlcnJvciBkdXJpbmcgaXRzIHNldHVwLiBUaGUgZml4IGFkZHMgYSBgcGNtY2lhX3JlbGVhc2Vfd2luZG93YCBjYWxsIGJlZm9yZSByZXR1cm5pbmcgb24gZXJyb3IuIFN0YW5kYXJkIHJlc291cmNlIG1hbmFnZW1lbnQgaW1wcm92ZW1lbnQsIG5vdGhpbmcgaW5oZXJlbnRseSBjb21wbGV4LlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIGNvZGUgKnJlYWNoYWJsZSo/IE15IGluaXRpYWwgZ3V0IGZlZWxpbmcsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGVzZSBzeXN0ZW1zLCBpcyBcInByb2JhYmx5IG5vdFwiLiBMZXQncyBjb25maXJtOlxuXG4xLiAgKipBcmNoaXRlY3R1cmUgYW5kIEVudmlyb25tZW50OioqIFdlJ3JlIGRlYWxpbmcgd2l0aCBhbWQ2NC4gYHBjbmV0X2NzYCBpcyBhIGxlZ2FjeSBQQ01DSUEgZHJpdmVyIChORTIwMDAtY29tcGF0aWJsZSkgZGVzaWduZWQgZm9yIDE2LWJpdCBQQ01DSUEgY2FyZHMuIEluIHRvZGF5J3MgdmlydHVhbGl6YXRpb24gbGFuZHNjYXBlLCBwYXJ0aWN1bGFybHkgd2l0aGluIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lIChHQ0UpLCBQQ01DSUEgZW11bGF0aW9uIGlzIHZpcnR1YWxseSBub25leGlzdGVudC4gVGhlc2Ugc3RhbmRhcmQgZW52aXJvbm1lbnRzIGRvbid0IGVtdWxhdGUgdGhlIFBDTUNJQSBob3N0IHNvY2tldCBjb250cm9sbGVycyBvciB0aGUgUENNQ0lBIE5FMjAwMCBkZXZpY2VzLiBUaGVyZSdzIG5vIGVxdWl2YWxlbnQgb2YgVVNCJ3MgYHVzYmlwYCBvciBuZXR3b3JrIGVtdWxhdGlvbiBsaWtlIGBkdW1teV9oY2RgLCBgdmhjaWAsIGBkdW1teWAsIGB2ZXRoYCwgb3IgYHR1bmAgdG8gYnJpZGdlIHRoaXMgZ2FwLiBTbywgdGhlIHByb2JlIHBhdGgsIGZyb20gYHBjbmV0X3Byb2JlYCBkb3duIHRvIGBwY25ldF9jb25maWdgIGFuZCB0aGVuIGludG8gYHNldHVwX3NobWVtX3dpbmRvd2AsIGlzIGVmZmVjdGl2ZWx5IGJsb2NrZWQuXG5cbjIuICAqKkNvbXBhcmlzb24gdG8gUHJpb3IgV29yazoqKiBUaGlzIHBlcmZlY3RseSBhbGlnbnMgd2l0aCB0aGUgcHJpb3IgZXhhbXBsZXMgb2YgdW5yZWFjaGFibGUgaGFyZHdhcmUsIHNwZWNpZmljYWxseSBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzXCIgdGhhdCByZXF1aXJlIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcy4gVGhlIFBDTUNJQSBFdGhlcm5ldCBkcml2ZXIgZmFsbHMgc3F1YXJlbHkgaW50byB0aGlzIGNhdGVnb3J5OiBsZWdhY3ksIHBoeXNpY2FsIGhhcmR3YXJlIChhIFBDTUNJQSBjYXJkKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuXG4zLiAgKipXb3J0aEZ1enppbmcgQ29uZmlybWF0aW9uOioqIEdpdmVuIHRoZSBsYWNrIG9mIGhhcmR3YXJlIGVtdWxhdGlvbiwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGZhbHNlLiBXZSBjYW4gc2tpcCBTZWN0aW9ucyA0IGFuZCA1IGJlY2F1c2UgdGhlcmUncyBubyBjb21wbGV4IGZ1enppbmcgY29uZmlndXJhdGlvbiBpbnZvbHZlZCBoZXJlOyB0aGUgY29kZSdzIHJlYWNoYWJpbGl0eSBpcyB0aGUgaXNzdWUuIFRoZSByZWFzb25pbmcgZm9yIG5vdCBmdXp6aW5nIGlzIHRoZSBrZXkgcGFydC4gSXQgaXMgYSBjbGVhciBhbmQgY29uY2lzZSBleHBsYW5hdGlvbiB0aGF0IHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlIGR1ZSB0byB0aGUgbGFjayBvZiBQQ01DSUEgaGFyZHdhcmUgZW11bGF0aW9uIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy5cblxuNC4gICoqRmluYWwgU3VtbWFyeToqKiBUaGUgcGF0Y2ggcmVzaWRlcyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jYCwgaW4gdGhlIGBzZXR1cF9zaG1lbV93aW5kb3dgIGZ1bmN0aW9uLiBUaGlzIGRyaXZlciBpcyBmb3IgUENNQ0lBIG5ldHdvcmsgaGFyZHdhcmUsIHNwZWNpZmljYWxseSBORTIwMDAtY29tcGF0aWJsZSBkZXZpY2VzICh3aGljaCByZWxpZXMgb24gYENPTkZJR19QQ01DSUFfUENORVRgKS4gVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQuIEdpdmVuIHRoZSB1YmlxdWl0eSBvZiBRRU1VL0dDRSBmb3IgdGVzdGluZywgdGhlIFBDTUNJQSBkcml2ZXIgaXMgdW5yZWFjaGFibGUgYmVjYXVzZSBzdGFuZGFyZCBRRU1VIGFuZCBHQ0UgZW52aXJvbm1lbnRzIG9uIHg4NlxcXzY0IGRvIG5vdCBlbXVsYXRlIHRoZSBQQ01DSUEvQ2FyZEJ1cyBzb2NrZXQgY29udHJvbGxlcnMgb3IgdGhlc2UgUENNQ0lBIGNhcmRzLiBObyBzb2Z0d2FyZSBlbXVsYXRpb24gbWVjaGFuaXNtIGV4aXN0cywgdGhlcmVmb3JlLCB0aGUgZHJpdmVyJ3MgcHJvYmUgbG9naWMgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN5emthbGxlciBmdXp6aW5nIGVudmlyb25tZW50cy5cblxuSXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBjYXNlLiBMZXQncyBnZXQgdGhlIHJlc3VsdHMgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTY5OSwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QyMTo1ODoxNy43ODQ4NjM4NDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJlc291cmNlIGxlYWsgaW4gc2V0dXBfc2htZW1fd2luZG93KCkgaW4gZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9wY25ldF9jcy5jLCB3aGljaCBpcyBhIGxlZ2FjeSBQQ01DSUEgZXRoZXJuZXQgY2FyZCBkcml2ZXIgKENPTkZJR19QQ01DSUFfUENORVQpLiBQQ01DSUEvQ2FyZEJ1cyBzb2NrZXQgY29udHJvbGxlcnMgYW5kIFBDTUNJQSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIHg4Nl82NCBRRU1VIG9yIEdDRSB2aXJ0dWFsIGVudmlyb25tZW50cywgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBsYXllciB0byBpbnN0YW50aWF0ZSBQQ01DSUEgZGV2aWNlcy4gVGhlIG1vZGlmaWVkIHByb2JlIHBhdGggaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByZXNvdXJjZSBsZWFrIGluIHNldHVwX3NobWVtX3dpbmRvdygpIGluIGRyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvcGNuZXRfY3MuYywgd2hpY2ggaXMgYSBsZWdhY3kgUENNQ0lBIGV0aGVybmV0IGNhcmQgZHJpdmVyIChDT05GSUdfUENNQ0lBX1BDTkVUKS4gUENNQ0lBL0NhcmRCdXMgc29ja2V0IGNvbnRyb2xsZXJzIGFuZCBQQ01DSUEgY2FyZHMgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCB4ODZfNjQgUUVNVSBvciBHQ0UgdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gbGF5ZXIgdG8gaW5zdGFudGlhdGUgUENNQ0lBIGRldmljZXMuIFRoZSBtb2RpZmllZCBwcm9iZSBwYXRoIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDIxOjU4OjE3Ljc4NDg4OTMyNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqbv6d[1] Phase: Running StartedAt: 2026-09-13 21:58:29 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqbv6d[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-13 21:58:29 +0000 UTC FinishedAt: 2026-09-13 21:58:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}