Name: series-workflow5jvwp Phase: Failed StartedAt: 2026-08-22 09:01:58 +0000 UTC FinishedAt: 2026-08-22 09:46:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5jvwp[0] Phase: Succeeded StartedAt: 2026-08-22 09:01:58 +0000 UTC FinishedAt: 2026-08-22 09:46:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5jvwp[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 09:01:58 +0000 UTC FinishedAt: 2026-08-22 09:46:15 +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+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgUXVhbGNvbW0gQkFNIERhdGEgTXVsdGlwbGV4ZXIgKHFjb21fYmFtX2RtdXgpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIGRyaXZlci4gSXQgcmVsaWVzIG9uIGhhcmR3YXJlLXNwZWNpZmljIGZlYXR1cmVzIGxpa2UgUXVhbGNvbW0gU01FTSBhbmQgQkFNIERNQSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NzU5MDY0ZTFhNTg4MDA0YmM5Y2MyYmMzOGY1YjhhNTMyOTRhZGZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDk6NDU6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xuaW5kZXggY2M2YWNlOGQ2NDM3MS4uMzc1NmNkYjdhMzE5OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xuQEAgLTYsMTIgJiM0Mzs2LDE0IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hZW5naW5lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbkBAIC02NCwxNSAmIzQzOzY2LDI0IEBAIHN0cnVjdCBiYW1fZG11eF9za2JfZG1hIHtcbiBcdGRtYV9hZGRyX3QgYWRkcjtcbiB9O1xuIFxuJiM0MztlbnVtIGJhbV9kbXV4X3BjX3ZvdGUge1xuJiM0MztcdEJBTV9ETVVYX1BDX1ZPVEVfSU5BQ1RJVkUsIC8qIHBjX3ZvdGUgPSBmYWxzZSAqL1xuJiM0MztcdEJBTV9ETVVYX1BDX1ZPVEVfUEVORElORywgLyogcGNfdm90ZSA9IHRydWUsIHdhaXRpbmcgZm9yIEFDSyAqL1xuJiM0MztcdEJBTV9ETVVYX1BDX1ZPVEVfQUNLRUQsIC8qIHBjX3ZvdGUgPSB0cnVlLCBBQ0sgcmVjZWl2ZWQgKi9cbiYjNDM7XHRCQU1fRE1VWF9QQ19WT1RFX0RPV05fUEVORElORywgLyogcGMgPSBmYWxzZSB3aGlsZSBob3N0IHZvdGUgYWN0aXZlICovXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBiYW1fZG11eCB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4gXG4tXHRpbnQgcGNfaXJxO1xuJiM0MztcdGludCBwY19pcnEsIHBjX2Fja19pcnE7XG4gXHRib29sIHBjX3N0YXRlLCBwY19hY2tfc3RhdGU7XG4gXHRzdHJ1Y3QgcWNvbV9zbWVtX3N0YXRlICpwYywgKnBjX2FjaztcbiBcdHUzMiBwY19tYXNrLCBwY19hY2tfbWFzaztcbiBcdHdhaXRfcXVldWVfaGVhZF90IHBjX3dhaXQ7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBwY19hY2tfY29tcGxldGlvbjtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggcG93ZXJfbG9jazsgLyogUHJvdGVjdCBwb3dlci1jb250cm9sIHN0YXRlICovXG4mIzQzO1x0ZW51bSBiYW1fZG11eF9wY192b3RlIHBjX3ZvdGU7XG4gXG4gXHRzdHJ1Y3QgZG1hX2NoYW4gKnJ4LCAqdHg7XG4gXHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSByeF9za2JzW0JBTV9ETVVYX05VTV9TS0JdO1xuQEAgLTk5LDYgJiM0MzsxMTAsMjQgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfdm90ZShzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIGJvb2wgZW5hYmxlKVxuIFx0XHRcdFx0ICAgIGVuYWJsZSA/IGRtdXgtXHUwMDNlcGNfbWFzayA6IDApO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfdm90ZV9sb2NrZWQoc3RydWN0IGJhbV9kbXV4ICpkbXV4LCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVuYWJsZSlcbiYjNDM7XHRcdGRtdXgtXHUwMDNlcGNfdm90ZSA9IEJBTV9ETVVYX1BDX1ZPVEVfUEVORElORztcbiYjNDM7XHRlbHNlIGlmIChkbXV4LVx1MDAzZXBjX3ZvdGUgIT0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcpXG4mIzQzO1x0XHRkbXV4LVx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0lOQUNUSVZFO1xuJiM0MztcdGJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgZW5hYmxlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfdm90ZV9wcm90ZWN0ZWQoc3RydWN0IGJhbV9kbXV4ICpkbXV4LCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiYjNDM7XHRiYW1fZG11eF9wY192b3RlX2xvY2tlZChkbXV4LCBlbmFibGUpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX2FjayhzdHJ1Y3QgYmFtX2RtdXggKmRtdXgpXG4ge1xuIFx0cWNvbV9zbWVtX3N0YXRlX3VwZGF0ZV9iaXRzKGRtdXgtXHUwMDNlcGNfYWNrLCBkbXV4LVx1MDAzZXBjX2Fja19tYXNrLFxuQEAgLTY1NSw2ICYjNDM7Njg0LDggQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfZnJlZV9za2JzKHN0cnVjdCBiYW1fZG11eF9za2JfZG1hIHNrYnNbXSxcbiBcbiBzdGF0aWMgdm9pZCBiYW1fZG11eF9wb3dlcl9vZmYoc3RydWN0IGJhbV9kbXV4ICpkbXV4KVxuIHtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4mIzQzO1xuIFx0aWYgKGRtdXgtXHUwMDNldHgpIHtcbiBcdFx0ZG1hZW5naW5lX3Rlcm1pbmF0ZV9zeW5jKGRtdXgtXHUwMDNldHgpO1xuIFx0XHRkbWFfcmVsZWFzZV9jaGFubmVsKGRtdXgtXHUwMDNldHgpO1xuQEAgLTY3MCwxMCAmIzQzOzcwMSwxNSBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9wb3dlcl9vZmYoc3RydWN0IGJhbV9kbXV4ICpkbXV4KVxuIFx0YmFtX2RtdXhfZnJlZV9za2JzKGRtdXgtXHUwMDNlcnhfc2ticywgRE1BX0ZST01fREVWSUNFKTtcbiB9XG4gXG4tc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuJiM0MztzdGF0aWMgYm9vbCBiYW1fZG11eF9oYW5kbGVfcGMoc3RydWN0IGJhbV9kbXV4ICpkbXV4LCBib29sIG5ld19zdGF0ZSlcbiB7XG4tXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkYXRhO1xuLVx0Ym9vbCBuZXdfc3RhdGUgPSAhZG11eC1cdTAwM2VwY19zdGF0ZTtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChuZXdfc3RhdGUgPT0gZG11eC1cdTAwM2VwY19zdGF0ZSkge1xuJiM0MztcdFx0aWYgKG5ld19zdGF0ZSBcdTAwMjZcdTAwMjYgZG11eC1cdTAwM2VwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfRE9XTl9QRU5ESU5HKVxuJiM0MztcdFx0XHRkbXV4LVx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0FDS0VEO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiBcbiBcdGRldl9kYmcoZG11eC1cdTAwM2VkZXYsIFwmIzM0O3BjOiAldVxcblwmIzM0OywgbmV3X3N0YXRlKTtcbiBcbkBAIC02ODIsMTMgJiM0Mzs3MTgsNDEgQEAgc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuIFx0XHRcdGJhbV9kbXV4X3BjX2FjayhkbXV4KTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcbiYjNDM7XHR9IGVsc2UgaWYgKGRtdXgtXHUwMDNlcGNfdm90ZSA9PSBCQU1fRE1VWF9QQ19WT1RFX0FDS0VEKSB7XG4mIzQzO1x0XHQvKiBUaGUgbW9kZW0gbXVzdCBrZWVwIHRoZSBETUEgZW5naW5lIG9uIHVudGlsIHBjIGlzIGFja2VkLiAqL1xuJiM0MztcdFx0ZG11eC1cdTAwM2VwY192b3RlID0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkc7XG4mIzQzO1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRtdXgtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtyZWZ1c2luZyBwYyBkb3duIHdoaWxlIGhvc3Qgdm90ZSBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fSBlbHNlIHtcbiBcdFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xuIFx0XHRiYW1fZG11eF9wY19hY2soZG11eCk7XG4mIzQzO1x0XHRkbXV4LVx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0lOQUNUSVZFO1xuIFx0fVxuIFxuLVx0ZG11eC1cdTAwM2VwY19zdGF0ZSA9IG5ld19zdGF0ZTtcbi1cdHdha2VfdXBfYWxsKFx1MDAyNmRtdXgtXHUwMDNlcGNfd2FpdCk7XG4mIzQzO1x0V1JJVEVfT05DRShkbXV4LVx1MDAzZXBjX3N0YXRlLCBuZXdfc3RhdGUpO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkYXRhO1xuJiM0MztcdGJvb2wgbmV3X3N0YXRlLCB3YWtlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiYjNDM7XHRyZXQgPSBpcnFfZ2V0X2lycWNoaXBfc3RhdGUoZG11eC1cdTAwM2VwY19pcnEsIElSUUNISVBfU1RBVEVfTElORV9MRVZFTCxcbiYjNDM7XHRcdFx0XHQgICAgXHUwMDI2bmV3X3N0YXRlKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiYjNDM7XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZG11eC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byByZWFkIHBjIHN0YXRlOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHdha2UgPSBiYW1fZG11eF9oYW5kbGVfcGMoZG11eCwgbmV3X3N0YXRlKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiYjNDM7XHRpZiAod2FrZSlcbiYjNDM7XHRcdHdha2VfdXBfYWxsKFx1MDAyNmRtdXgtXHUwMDNlcGNfd2FpdCk7XG4gXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuQEAgLTY5Niw5ICYjNDM7NzYwLDMwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBiYW1fZG11eF9wY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcbiBzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfYWNrX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRhdGE7XG4mIzQzO1x0Ym9vbCBuZXdfc3RhdGUsIHdha2UgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0ZGV2X2RiZyhkbXV4LVx1MDAzZWRldiwgXCYjMzQ7cGMgYWNrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogUHJvY2VzcyBhbiBlYXJsaWVyIHBjIGVkZ2UgYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGhvc3Qtdm90ZSBhY2suICovXG4mIzQzO1x0c3luY2hyb25pemVfaXJxKGRtdXgtXHUwMDNlcGNfaXJxKTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4mIzQzO1x0cmV0ID0gaXJxX2dldF9pcnFjaGlwX3N0YXRlKGRtdXgtXHUwMDNlcGNfaXJxLCBJUlFDSElQX1NUQVRFX0xJTkVfTEVWRUwsXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNm5ld19zdGF0ZSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4mIzQzO1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRtdXgtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gcmVhZCBwYyBzdGF0ZTogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3YWtlID0gYmFtX2RtdXhfaGFuZGxlX3BjKGRtdXgsIG5ld19zdGF0ZSk7XG4mIzQzO1x0aWYgKG5ld19zdGF0ZSBcdTAwMjZcdTAwMjYgZG11eC1cdTAwM2VwY19zdGF0ZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgZG11eC1cdTAwM2VwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfUEVORElORylcbiYjNDM7XHRcdGRtdXgtXHUwMDNlcGNfdm90ZSA9IEJBTV9ETVVYX1BDX1ZPVEVfQUNLRUQ7XG4gXHRjb21wbGV0ZV9hbGwoXHUwMDI2ZG11eC1cdTAwM2VwY19hY2tfY29tcGxldGlvbik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4mIzQzO1x0aWYgKHdha2UpXG4mIzQzO1x0XHR3YWtlX3VwX2FsbChcdTAwMjZkbXV4LVx1MDAzZXBjX3dhaXQpO1xuIFxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbkBAIC03MDYsOSAmIzQzOzc5MSwyMSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfYWNrX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuIHN0YXRpYyBpbnQgYmFtX2RtdXhfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRib29sIHdha2UgPSBmYWxzZTtcbiBcbiBcdGRldl9kYmcoZGV2LCBcJiMzNDtydW50aW1lIHN1c3BlbmRcXG5cJiMzNDspO1xuLVx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdHtcbiYjNDM7XHRcdGd1YXJkKG11dGV4KShcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuJiM0MztcbiYjNDM7XHRcdGJhbV9kbXV4X3BjX3ZvdGVfbG9ja2VkKGRtdXgsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChkbXV4LVx1MDAzZXBjX3ZvdGUgPT0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcpXG4mIzQzO1x0XHRcdHdha2UgPSBiYW1fZG11eF9oYW5kbGVfcGMoZG11eCwgZmFsc2UpO1xuJiM0MztcdFx0ZWxzZSBpZiAoIWRtdXgtXHUwMDNlcGNfc3RhdGUpXG4mIzQzO1x0XHRcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHdha2UpXG4mIzQzO1x0XHR3YWtlX3VwX2FsbChcdTAwMjZkbXV4LVx1MDAzZXBjX3dhaXQpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTcxNiw2ICYjNDM7ODEzLDcgQEAgc3RhdGljIGludCBiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYmFtX2RtdXhfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcdGludCByZXQgPSAwO1xuIFxuIFx0ZGV2X2RiZyhkZXYsIFwmIzM0O3J1bnRpbWUgcmVzdW1lXFxuXCYjMzQ7KTtcbiBcbkBAIC03MjQsNTAgJiM0Mzs4MjIsNTggQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBiYW1fZG11eF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdFx0XHRcdCBCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpXG4gXHRcdHJldHVybiAtRVRJTUVET1VUO1xuIFxuJiM0MztcdHN5bmNocm9uaXplX2lycShkbXV4LVx1MDAzZXBjX2lycSk7XG4mIzQzO1xuIFx0LyogVm90ZSBmb3IgcG93ZXIgc3RhdGUgKi9cbi1cdGJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgdHJ1ZSk7XG4mIzQzO1x0YmFtX2RtdXhfcGNfdm90ZV9wcm90ZWN0ZWQoZG11eCwgdHJ1ZSk7XG4gXG4gXHQvKiBXYWl0IGZvciBhY2sgKi9cbiBcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmRtdXgtXHUwMDNlcGNfYWNrX2NvbXBsZXRpb24sXG4gXHRcdFx0XHRcdCBCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpIHtcbi1cdFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XG4mIzQzO1x0XHRiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoZGV2KTtcbiBcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4gXHR9XG4gXG4mIzQzO1x0c3luY2hyb25pemVfaXJxKGRtdXgtXHUwMDNlcGNfaXJxKTtcbiYjNDM7XG4gXHQvKiBXYWl0IHVudGlsIHdlJiMzOTtyZSB1cCAqL1xuLVx0aWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoZG11eC1cdTAwM2VwY193YWl0LCBkbXV4LVx1MDAzZXBjX3N0YXRlLFxuJiM0MztcdGlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtXHUwMDNlcGNfd2FpdCwgUkVBRF9PTkNFKGRtdXgtXHUwMDNlcGNfc3RhdGUpLFxuIFx0XHRcdFx0QkFNX0RNVVhfUkVNT1RFX1RJTUVPVVQpKSB7XG4tXHRcdGJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgZmFsc2UpO1xuJiM0MztcdFx0YmFtX2RtdXhfcnVudGltZV9zdXNwZW5kKGRldik7XG4gXHRcdHJldHVybiAtRVRJTUVET1VUO1xuIFx0fVxuIFxuLVx0LyogRW5zdXJlIHRoYXQgd2UgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXG4tXHRpZiAoIWRtdXgtXHUwMDNlcngpIHtcbi1cdFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XG4tXHRcdHJldHVybiAtRU5YSU87XG4mIzQzO1x0e1xuJiM0MztcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4mIzQzO1xuJiM0MztcdFx0LyogRW5zdXJlIHRoYXQgd2UgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXG4mIzQzO1x0XHRpZiAoIWRtdXgtXHUwMDNlcngpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVOWElPO1xuJiM0MztcdFx0fSBlbHNlIGlmICghZG11eC1cdTAwM2V0eCkge1xuJiM0MztcdFx0XHQvKiBSZXF1ZXN0IFRYIGNoYW5uZWwgaWYgbmVjZXNzYXJ5ICovXG4mIzQzO1x0XHRcdGRtdXgtXHUwMDNldHggPSBkbWFfcmVxdWVzdF9jaGFuKGRldiwgXCYjMzQ7dHhcJiMzNDspO1xuJiM0MztcdFx0XHRpZiAoSVNfRVJSKGRtdXgtXHUwMDNldHgpKSB7XG4mIzQzO1x0XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byByZXF1ZXN0IFRYIERNQSBjaGFubmVsOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRkbXV4LVx1MDAzZXR4KTtcbiYjNDM7XHRcdFx0XHRkbXV4LVx1MDAzZXR4ID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRyZXQgPSAtRU5YSU87XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiBcdH1cbiBcbi1cdC8qIFJlcXVlc3QgVFggY2hhbm5lbCBpZiBuZWNlc3NhcnkgKi9cbi1cdGlmIChkbXV4LVx1MDAzZXR4KVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGRtdXgtXHUwMDNldHggPSBkbWFfcmVxdWVzdF9jaGFuKGRldiwgXCYjMzQ7dHhcJiMzNDspO1xuLVx0aWYgKElTX0VSUihkbXV4LVx1MDAzZXR4KSkge1xuLVx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlcXVlc3QgVFggRE1BIGNoYW5uZWw6ICVwZVxcblwmIzM0OywgZG11eC1cdTAwM2V0eCk7XG4tXHRcdGRtdXgtXHUwMDNldHggPSBOVUxMO1xuJiM0MztcdGlmIChyZXQpXG4gXHRcdGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChkZXYpO1xuLVx0XHRyZXR1cm4gLUVOWElPO1xuLVx0fVxuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4O1xuLVx0aW50IHJldCwgcGNfYWNrX2lycSwgaTtcbiYjNDM7XHRpbnQgcmV0LCBpO1xuIFx0dW5zaWduZWQgaW50IGJpdDtcbiYjNDM7XHRib29sIHBjX3N0YXRlO1xuIFxuIFx0ZG11eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZG11eCksIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFkbXV4KVxuQEAgLTc4MCw5ICYjNDM7ODg2LDkgQEAgc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKGRtdXgtXHUwMDNlcGNfaXJxIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZG11eC1cdTAwM2VwY19pcnE7XG4gXG4tXHRwY19hY2tfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgXCYjMzQ7cGMtYWNrXCYjMzQ7KTtcbi1cdGlmIChwY19hY2tfaXJxIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcGNfYWNrX2lycTtcbiYjNDM7XHRkbXV4LVx1MDAzZXBjX2Fja19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCBcJiMzNDtwYy1hY2tcJiMzNDspO1xuJiM0MztcdGlmIChkbXV4LVx1MDAzZXBjX2Fja19pcnEgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZG11eC1cdTAwM2VwY19hY2tfaXJxO1xuIFxuIFx0ZG11eC1cdTAwM2VwYyA9IGRldm1fcWNvbV9zbWVtX3N0YXRlX2dldChkZXYsIFwmIzM0O3BjXCYjMzQ7LCBcdTAwMjZiaXQpO1xuIFx0aWYgKElTX0VSUihkbXV4LVx1MDAzZXBjKSlcbkBAIC03OTksNiAmIzQzOzkwNSw5IEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2ZG11eC1cdTAwM2VwY193YWl0KTtcbiBcdGluaXRfY29tcGxldGlvbihcdTAwMjZkbXV4LVx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcbiBcdGNvbXBsZXRlX2FsbChcdTAwMjZkbXV4LVx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcbiYjNDM7XHRyZXQgPSBkZXZtX211dGV4X2luaXQoZGV2LCBcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZG11eC1cdTAwM2V0eF9sb2NrKTtcbiBcdElOSVRfV09SSyhcdTAwMjZkbXV4LVx1MDAzZXR4X3dha2V1cF93b3JrLCBiYW1fZG11eF90eF93YWtldXBfd29yayk7XG5AQCAtODE3LDMxICYjNDM7OTI2LDQwIEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKGRldik7XG4gXHRwbV9ydW50aW1lX2VuYWJsZShkZXYpO1xuIFxuLVx0cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIHBjX2Fja19pcnEsIE5VTEwsIGJhbV9kbXV4X3BjX2Fja19pcnEsXG4tXHRcdFx0XHRcdElSUUZfT05FU0hPVCwgTlVMTCwgZG11eCk7XG4mIzQzO1x0cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGRtdXgtXHUwMDNlcGNfYWNrX2lycSwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdGJhbV9kbXV4X3BjX2Fja19pcnEsXG4mIzQzO1x0XHRcdFx0XHRJUlFGX09ORVNIT1QgfCBJUlFGX05PX0FVVE9FTixcbiYjNDM7XHRcdFx0XHRcdE5VTEwsIGRtdXgpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfZGlzYWJsZV9wbTtcbiBcbiBcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBkbXV4LVx1MDAzZXBjX2lycSwgTlVMTCwgYmFtX2RtdXhfcGNfaXJxLFxuLVx0XHRcdFx0XHRJUlFGX09ORVNIT1QsIE5VTEwsIGRtdXgpO1xuJiM0MztcdFx0XHRcdFx0SVJRRl9PTkVTSE9UIHwgSVJRRl9OT19BVVRPRU4sIE5VTEwsIGRtdXgpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byBlcnJfZGlzYWJsZV9wbTtcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4gXHRyZXQgPSBpcnFfZ2V0X2lycWNoaXBfc3RhdGUoZG11eC1cdTAwM2VwY19pcnEsIElSUUNISVBfU1RBVEVfTElORV9MRVZFTCxcbi1cdFx0XHRcdCAgICBcdTAwMjZkbXV4LVx1MDAzZXBjX3N0YXRlKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gZXJyX2Rpc2FibGVfcG07XG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNnBjX3N0YXRlKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XHR9XG4gXG4gXHQvKiBDaGVjayBpZiByZW1vdGUgZmluaXNoZWQgaW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzICovXG4tXHRpZiAoZG11eC1cdTAwM2VwY19zdGF0ZSkge1xuLVx0XHRpZiAoYmFtX2RtdXhfcG93ZXJfb24oZG11eCkpXG4tXHRcdFx0YmFtX2RtdXhfcGNfYWNrKGRtdXgpO1xuLVx0XHRlbHNlXG4tXHRcdFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xuLVx0fVxuJiM0MztcdGJhbV9kbXV4X2hhbmRsZV9wYyhkbXV4LCBwY19zdGF0ZSk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFN0YXJ0IGhhbmRsaW5nIHN0YXRlIGNoYW5nZXMgYWZ0ZXIgdGhlIGluaXRpYWwgc3RhdGUgaXMgcHJvY2Vzc2VkLiAqL1xuJiM0MztcdGVuYWJsZV9pcnEoZG11eC1cdTAwM2VwY19hY2tfaXJxKTtcbiYjNDM7XHRlbmFibGVfaXJxKGRtdXgtXHUwMDNlcGNfaXJxKTtcbiBcbiBcdHJldHVybiAwO1xuIFxuJiM0MztlcnJfcG93ZXJfb2ZmOlxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiYjNDM7XHRiYW1fZG11eF9wb3dlcl9vZmYoZG11eCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4gZXJyX2Rpc2FibGVfcG06XG4gXHRwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTtcbiBcdHBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoZGV2KTtcbkBAIC04NzIsMTIgJiM0Mzs5OTAsMTYgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTtcbiBcbiBcdC8qIFRyeSB0byB3YWl0IGZvciByZW1vdGUgc2lkZSB0byBkcm9wIHBvd2VyIHZvdGUgKi9cbi1cdGlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtXHUwMDNlcGNfd2FpdCwgIWRtdXgtXHUwMDNlcngsIEJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSlcbiYjNDM7XHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChkbXV4LVx1MDAzZXBjX3dhaXQsICFSRUFEX09OQ0UoZG11eC1cdTAwM2VyeCksXG4mIzQzO1x0XHRcdFx0QkFNX0RNVVhfUkVNT1RFX1RJTUVPVVQpKVxuIFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlbW90ZSBzaWRlIHRvIHN1c3BlbmRcXG5cJiMzNDspO1xuIFxuIFx0LyogTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY2xlYW5lZCB1cCBiZWZvcmUgd2UgcmV0dXJuICovXG4mIzQzO1x0ZGlzYWJsZV9pcnEoZG11eC1cdTAwM2VwY19hY2tfaXJxKTtcbiBcdGRpc2FibGVfaXJxKGRtdXgtXHUwMDNlcGNfaXJxKTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4gXHRiYW1fZG11eF9wb3dlcl9vZmYoZG11eCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4gXHRiYW1fZG11eF9mcmVlX3NrYnMoZG11eC1cdTAwM2V0eF9za2JzLCBETUFfVE9fREVWSUNFKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIFF1YWxjb21tIEJBTSBEYXRhIE11bHRpcGxleGVyIChxY29tX2JhbV9kbXV4KSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBkcml2ZXIuIEl0IHJlbGllcyBvbiBoYXJkd2FyZS1zcGVjaWZpYyBmZWF0dXJlcyBsaWtlIFF1YWxjb21tIFNNRU0gYW5kIEJBTSBETUEgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTc1OTA2NGUxYTU4ODAwNGJjOWNjMmJjMzhmNWI4YTUzMjk0YWRmYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDA5OjQ1OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYwppbmRleCBjYzZhY2U4ZDY0MzcxLi4zNzU2Y2RiN2EzMTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYwpAQCAtNiwxMiAmIzQzOzYsMTQgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2F0b21pYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG9wcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1tYXBwaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hZW5naW5lLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfYXJwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcG1fcnVudGltZS5oJmd0OwpAQCAtNjQsMTUgJiM0Mzs2NiwyNCBAQCBzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSB7CiAJZG1hX2FkZHJfdCBhZGRyOwogfTsKIAomIzQzO2VudW0gYmFtX2RtdXhfcGNfdm90ZSB7CiYjNDM7CUJBTV9ETVVYX1BDX1ZPVEVfSU5BQ1RJVkUsIC8qIHBjX3ZvdGUgPSBmYWxzZSAqLwomIzQzOwlCQU1fRE1VWF9QQ19WT1RFX1BFTkRJTkcsIC8qIHBjX3ZvdGUgPSB0cnVlLCB3YWl0aW5nIGZvciBBQ0sgKi8KJiM0MzsJQkFNX0RNVVhfUENfVk9URV9BQ0tFRCwgLyogcGNfdm90ZSA9IHRydWUsIEFDSyByZWNlaXZlZCAqLwomIzQzOwlCQU1fRE1VWF9QQ19WT1RFX0RPV05fUEVORElORywgLyogcGMgPSBmYWxzZSB3aGlsZSBob3N0IHZvdGUgYWN0aXZlICovCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBiYW1fZG11eCB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCi0JaW50IHBjX2lycTsKJiM0MzsJaW50IHBjX2lycSwgcGNfYWNrX2lycTsKIAlib29sIHBjX3N0YXRlLCBwY19hY2tfc3RhdGU7CiAJc3RydWN0IHFjb21fc21lbV9zdGF0ZSAqcGMsICpwY19hY2s7CiAJdTMyIHBjX21hc2ssIHBjX2Fja19tYXNrOwogCXdhaXRfcXVldWVfaGVhZF90IHBjX3dhaXQ7CiAJc3RydWN0IGNvbXBsZXRpb24gcGNfYWNrX2NvbXBsZXRpb247CiYjNDM7CXN0cnVjdCBtdXRleCBwb3dlcl9sb2NrOyAvKiBQcm90ZWN0IHBvd2VyLWNvbnRyb2wgc3RhdGUgKi8KJiM0MzsJZW51bSBiYW1fZG11eF9wY192b3RlIHBjX3ZvdGU7CiAKIAlzdHJ1Y3QgZG1hX2NoYW4gKnJ4LCAqdHg7CiAJc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgcnhfc2tic1tCQU1fRE1VWF9OVU1fU0tCXTsKQEAgLTk5LDYgJiM0MzsxMTAsMjQgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfdm90ZShzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIGJvb2wgZW5hYmxlKQogCQkJCSAgICBlbmFibGUgPyBkbXV4LSZndDtwY19tYXNrIDogMCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBiYW1fZG11eF9wY192b3RlX2xvY2tlZChzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2RtdXgtJmd0O3Bvd2VyX2xvY2spOwomIzQzOwomIzQzOwlpZiAoZW5hYmxlKQomIzQzOwkJZG11eC0mZ3Q7cGNfdm90ZSA9IEJBTV9ETVVYX1BDX1ZPVEVfUEVORElORzsKJiM0MzsJZWxzZSBpZiAoZG11eC0mZ3Q7cGNfdm90ZSAhPSBCQU1fRE1VWF9QQ19WT1RFX0RPV05fUEVORElORykKJiM0MzsJCWRtdXgtJmd0O3BjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0lOQUNUSVZFOwomIzQzOwliYW1fZG11eF9wY192b3RlKGRtdXgsIGVuYWJsZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX3ZvdGVfcHJvdGVjdGVkKHN0cnVjdCBiYW1fZG11eCAqZG11eCwgYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwltdXRleF9sb2NrKCZhbXA7ZG11eC0mZ3Q7cG93ZXJfbG9jayk7CiYjNDM7CWJhbV9kbXV4X3BjX3ZvdGVfbG9ja2VkKGRtdXgsIGVuYWJsZSk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2RtdXgtJmd0O3Bvd2VyX2xvY2spOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX2FjayhzdHJ1Y3QgYmFtX2RtdXggKmRtdXgpCiB7CiAJcWNvbV9zbWVtX3N0YXRlX3VwZGF0ZV9iaXRzKGRtdXgtJmd0O3BjX2FjaywgZG11eC0mZ3Q7cGNfYWNrX21hc2ssCkBAIC02NTUsNiAmIzQzOzY4NCw4IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X2ZyZWVfc2ticyhzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSBza2JzW10sCiAKIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3Bvd2VyX29mZihzdHJ1Y3QgYmFtX2RtdXggKmRtdXgpCiB7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsKIAlpZiAoZG11eC0mZ3Q7dHgpIHsKIAkJZG1hZW5naW5lX3Rlcm1pbmF0ZV9zeW5jKGRtdXgtJmd0O3R4KTsKIAkJZG1hX3JlbGVhc2VfY2hhbm5lbChkbXV4LSZndDt0eCk7CkBAIC02NzAsMTAgJiM0Mzs3MDEsMTUgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfcG93ZXJfb2ZmKHN0cnVjdCBiYW1fZG11eCAqZG11eCkKIAliYW1fZG11eF9mcmVlX3NrYnMoZG11eC0mZ3Q7cnhfc2ticywgRE1BX0ZST01fREVWSUNFKTsKIH0KIAotc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQomIzQzO3N0YXRpYyBib29sIGJhbV9kbXV4X2hhbmRsZV9wYyhzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIGJvb2wgbmV3X3N0YXRlKQogewotCXN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRhdGE7Ci0JYm9vbCBuZXdfc3RhdGUgPSAhZG11eC0mZ3Q7cGNfc3RhdGU7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKG5ld19zdGF0ZSA9PSBkbXV4LSZndDtwY19zdGF0ZSkgewomIzQzOwkJaWYgKG5ld19zdGF0ZSAmYW1wOyZhbXA7IGRtdXgtJmd0O3BjX3ZvdGUgPT0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcpCiYjNDM7CQkJZG11eC0mZ3Q7cGNfdm90ZSA9IEJBTV9ETVVYX1BDX1ZPVEVfQUNLRUQ7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KIAogCWRldl9kYmcoZG11eC0mZ3Q7ZGV2LCAmIzM0O3BjOiAldVxuJiMzNDssIG5ld19zdGF0ZSk7CiAKQEAgLTY4MiwxMyAmIzQzOzcxOCw0MSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCiAJCQliYW1fZG11eF9wY19hY2soZG11eCk7CiAJCWVsc2UKIAkJCWJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTsKJiM0MzsJfSBlbHNlIGlmIChkbXV4LSZndDtwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfQUNLRUQpIHsKJiM0MzsJCS8qIFRoZSBtb2RlbSBtdXN0IGtlZXAgdGhlIERNQSBlbmdpbmUgb24gdW50aWwgcGMgaXMgYWNrZWQuICovCiYjNDM7CQlkbXV4LSZndDtwY192b3RlID0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkc7CiYjNDM7CQlkZXZfZXJyX3JhdGVsaW1pdGVkKGRtdXgtJmd0O2RldiwKJiM0MzsJCQkJICAgICYjMzQ7cmVmdXNpbmcgcGMgZG93biB3aGlsZSBob3N0IHZvdGUgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJfSBlbHNlIHsKIAkJYmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpOwogCQliYW1fZG11eF9wY19hY2soZG11eCk7CiYjNDM7CQlkbXV4LSZndDtwY192b3RlID0gQkFNX0RNVVhfUENfVk9URV9JTkFDVElWRTsKIAl9CiAKLQlkbXV4LSZndDtwY19zdGF0ZSA9IG5ld19zdGF0ZTsKLQl3YWtlX3VwX2FsbCgmYW1wO2RtdXgtJmd0O3BjX3dhaXQpOwomIzQzOwlXUklURV9PTkNFKGRtdXgtJmd0O3BjX3N0YXRlLCBuZXdfc3RhdGUpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gZGF0YTsKJiM0MzsJYm9vbCBuZXdfc3RhdGUsIHdha2U7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsJcmV0ID0gaXJxX2dldF9pcnFjaGlwX3N0YXRlKGRtdXgtJmd0O3BjX2lycSwgSVJRQ0hJUF9TVEFURV9MSU5FX0xFVkVMLAomIzQzOwkJCQkgICAgJmFtcDtuZXdfc3RhdGUpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZG11eC0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byByZWFkIHBjIHN0YXRlOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJd2FrZSA9IGJhbV9kbXV4X2hhbmRsZV9wYyhkbXV4LCBuZXdfc3RhdGUpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsJaWYgKHdha2UpCiYjNDM7CQl3YWtlX3VwX2FsbCgmYW1wO2RtdXgtJmd0O3BjX3dhaXQpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNjk2LDkgJiM0Mzs3NjAsMzAgQEAgc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQogc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2Fja19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkYXRhOwomIzQzOwlib29sIG5ld19zdGF0ZSwgd2FrZSA9IGZhbHNlOwomIzQzOwlpbnQgcmV0OwogCiAJZGV2X2RiZyhkbXV4LSZndDtkZXYsICYjMzQ7cGMgYWNrXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFByb2Nlc3MgYW4gZWFybGllciBwYyBlZGdlIGJlZm9yZSBwdWJsaXNoaW5nIHRoZSBob3N0LXZvdGUgYWNrLiAqLwomIzQzOwlzeW5jaHJvbml6ZV9pcnEoZG11eC0mZ3Q7cGNfaXJxKTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2RtdXgtJmd0O3Bvd2VyX2xvY2spOwomIzQzOwlyZXQgPSBpcnFfZ2V0X2lycWNoaXBfc3RhdGUoZG11eC0mZ3Q7cGNfaXJxLCBJUlFDSElQX1NUQVRFX0xJTkVfTEVWRUwsCiYjNDM7CQkJCSAgICAmYW1wO25ld19zdGF0ZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2RtdXgtJmd0O3Bvd2VyX2xvY2spOwomIzQzOwkJZGV2X2Vycl9yYXRlbGltaXRlZChkbXV4LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHJlYWQgcGMgc3RhdGU6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybiBJUlFfSEFORExFRDsKJiM0MzsJfQomIzQzOwomIzQzOwl3YWtlID0gYmFtX2RtdXhfaGFuZGxlX3BjKGRtdXgsIG5ld19zdGF0ZSk7CiYjNDM7CWlmIChuZXdfc3RhdGUgJmFtcDsmYW1wOyBkbXV4LSZndDtwY19zdGF0ZSAmYW1wOyZhbXA7CiYjNDM7CSAgICBkbXV4LSZndDtwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfUEVORElORykKJiM0MzsJCWRtdXgtJmd0O3BjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0FDS0VEOwogCWNvbXBsZXRlX2FsbCgmYW1wO2RtdXgtJmd0O3BjX2Fja19jb21wbGV0aW9uKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZG11eC0mZ3Q7cG93ZXJfbG9jayk7CiYjNDM7CWlmICh3YWtlKQomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtkbXV4LSZndDtwY193YWl0KTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTcwNiw5ICYjNDM7NzkxLDIxIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBiYW1fZG11eF9wY19hY2tfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCiBzdGF0aWMgaW50IGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CWJvb2wgd2FrZSA9IGZhbHNlOwogCiAJZGV2X2RiZyhkZXYsICYjMzQ7cnVudGltZSBzdXNwZW5kXG4mIzM0Oyk7Ci0JYmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7CiYjNDM7CiYjNDM7CXsKJiM0MzsJCWd1YXJkKG11dGV4KSgmYW1wO2RtdXgtJmd0O3Bvd2VyX2xvY2spOwomIzQzOwomIzQzOwkJYmFtX2RtdXhfcGNfdm90ZV9sb2NrZWQoZG11eCwgZmFsc2UpOwomIzQzOwkJaWYgKGRtdXgtJmd0O3BjX3ZvdGUgPT0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcpCiYjNDM7CQkJd2FrZSA9IGJhbV9kbXV4X2hhbmRsZV9wYyhkbXV4LCBmYWxzZSk7CiYjNDM7CQllbHNlIGlmICghZG11eC0mZ3Q7cGNfc3RhdGUpCiYjNDM7CQkJYmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpOwomIzQzOwl9CiYjNDM7CWlmICh3YWtlKQomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtkbXV4LSZndDtwY193YWl0KTsKIAogCXJldHVybiAwOwogfQpAQCAtNzE2LDYgJiM0Mzs4MTMsNyBAQCBzdGF0aWMgaW50IGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGJhbV9kbXV4X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlkZXZfZGJnKGRldiwgJiMzNDtydW50aW1lIHJlc3VtZVxuJiMzNDspOwogCkBAIC03MjQsNTAgJiM0Mzs4MjIsNTggQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBiYW1fZG11eF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCQkJCSBCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpCiAJCXJldHVybiAtRVRJTUVET1VUOwogCiYjNDM7CXN5bmNocm9uaXplX2lycShkbXV4LSZndDtwY19pcnEpOwomIzQzOwogCS8qIFZvdGUgZm9yIHBvd2VyIHN0YXRlICovCi0JYmFtX2RtdXhfcGNfdm90ZShkbXV4LCB0cnVlKTsKJiM0MzsJYmFtX2RtdXhfcGNfdm90ZV9wcm90ZWN0ZWQoZG11eCwgdHJ1ZSk7CiAKIAkvKiBXYWl0IGZvciBhY2sgKi8KIAlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYW1wO2RtdXgtJmd0O3BjX2Fja19jb21wbGV0aW9uLAogCQkJCQkgQkFNX0RNVVhfUkVNT1RFX1RJTUVPVVQpKSB7Ci0JCWJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgZmFsc2UpOwomIzQzOwkJYmFtX2RtdXhfcnVudGltZV9zdXNwZW5kKGRldik7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIAomIzQzOwlzeW5jaHJvbml6ZV9pcnEoZG11eC0mZ3Q7cGNfaXJxKTsKJiM0MzsKIAkvKiBXYWl0IHVudGlsIHdlJiMzOTtyZSB1cCAqLwotCWlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtJmd0O3BjX3dhaXQsIGRtdXgtJmd0O3BjX3N0YXRlLAomIzQzOwlpZiAoIXdhaXRfZXZlbnRfdGltZW91dChkbXV4LSZndDtwY193YWl0LCBSRUFEX09OQ0UoZG11eC0mZ3Q7cGNfc3RhdGUpLAogCQkJCUJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSkgewotCQliYW1fZG11eF9wY192b3RlKGRtdXgsIGZhbHNlKTsKJiM0MzsJCWJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChkZXYpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CiAKLQkvKiBFbnN1cmUgdGhhdCB3ZSBhY3R1YWxseSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKi8KLQlpZiAoIWRtdXgtJmd0O3J4KSB7Ci0JCWJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgZmFsc2UpOwotCQlyZXR1cm4gLUVOWElPOwomIzQzOwl7CiYjNDM7CQlndWFyZChtdXRleCkoJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsKJiM0MzsJCS8qIEVuc3VyZSB0aGF0IHdlIGFjdHVhbGx5IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAqLwomIzQzOwkJaWYgKCFkbXV4LSZndDtyeCkgewomIzQzOwkJCXJldCA9IC1FTlhJTzsKJiM0MzsJCX0gZWxzZSBpZiAoIWRtdXgtJmd0O3R4KSB7CiYjNDM7CQkJLyogUmVxdWVzdCBUWCBjaGFubmVsIGlmIG5lY2Vzc2FyeSAqLwomIzQzOwkJCWRtdXgtJmd0O3R4ID0gZG1hX3JlcXVlc3RfY2hhbihkZXYsICYjMzQ7dHgmIzM0Oyk7CiYjNDM7CQkJaWYgKElTX0VSUihkbXV4LSZndDt0eCkpIHsKJiM0MzsJCQkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHJlcXVlc3QgVFggRE1BIGNoYW5uZWw6ICVwZVxuJiMzNDssCiYjNDM7CQkJCQlkbXV4LSZndDt0eCk7CiYjNDM7CQkJCWRtdXgtJmd0O3R4ID0gTlVMTDsKJiM0MzsJCQkJcmV0ID0gLUVOWElPOwomIzQzOwkJCX0KJiM0MzsJCX0KIAl9CiAKLQkvKiBSZXF1ZXN0IFRYIGNoYW5uZWwgaWYgbmVjZXNzYXJ5ICovCi0JaWYgKGRtdXgtJmd0O3R4KQotCQlyZXR1cm4gMDsKLQotCWRtdXgtJmd0O3R4ID0gZG1hX3JlcXVlc3RfY2hhbihkZXYsICYjMzQ7dHgmIzM0Oyk7Ci0JaWYgKElTX0VSUihkbXV4LSZndDt0eCkpIHsKLQkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHJlcXVlc3QgVFggRE1BIGNoYW5uZWw6ICVwZVxuJiMzNDssIGRtdXgtJmd0O3R4KTsKLQkJZG11eC0mZ3Q7dHggPSBOVUxMOwomIzQzOwlpZiAocmV0KQogCQliYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoZGV2KTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwogCXN0cnVjdCBiYW1fZG11eCAqZG11eDsKLQlpbnQgcmV0LCBwY19hY2tfaXJxLCBpOwomIzQzOwlpbnQgcmV0LCBpOwogCXVuc2lnbmVkIGludCBiaXQ7CiYjNDM7CWJvb2wgcGNfc3RhdGU7CiAKIAlkbXV4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkbXV4KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkbXV4KQpAQCAtNzgwLDkgJiM0Mzs4ODYsOSBAQCBzdGF0aWMgaW50IGJhbV9kbXV4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJaWYgKGRtdXgtJmd0O3BjX2lycSAmbHQ7IDApCiAJCXJldHVybiBkbXV4LSZndDtwY19pcnE7CiAKLQlwY19hY2tfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgJiMzNDtwYy1hY2smIzM0Oyk7Ci0JaWYgKHBjX2Fja19pcnEgJmx0OyAwKQotCQlyZXR1cm4gcGNfYWNrX2lycTsKJiM0MzsJZG11eC0mZ3Q7cGNfYWNrX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICYjMzQ7cGMtYWNrJiMzNDspOwomIzQzOwlpZiAoZG11eC0mZ3Q7cGNfYWNrX2lycSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZG11eC0mZ3Q7cGNfYWNrX2lycTsKIAogCWRtdXgtJmd0O3BjID0gZGV2bV9xY29tX3NtZW1fc3RhdGVfZ2V0KGRldiwgJiMzNDtwYyYjMzQ7LCAmYW1wO2JpdCk7CiAJaWYgKElTX0VSUihkbXV4LSZndDtwYykpCkBAIC03OTksNiAmIzQzOzkwNSw5IEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7ZG11eC0mZ3Q7cGNfd2FpdCk7CiAJaW5pdF9jb21wbGV0aW9uKCZhbXA7ZG11eC0mZ3Q7cGNfYWNrX2NvbXBsZXRpb24pOwogCWNvbXBsZXRlX2FsbCgmYW1wO2RtdXgtJmd0O3BjX2Fja19jb21wbGV0aW9uKTsKJiM0MzsJcmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2RtdXgtJmd0O3R4X2xvY2spOwogCUlOSVRfV09SSygmYW1wO2RtdXgtJmd0O3R4X3dha2V1cF93b3JrLCBiYW1fZG11eF90eF93YWtldXBfd29yayk7CkBAIC04MTcsMzEgJiM0Mzs5MjYsNDAgQEAgc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKGRldik7CiAJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKIAotCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBwY19hY2tfaXJxLCBOVUxMLCBiYW1fZG11eF9wY19hY2tfaXJxLAotCQkJCQlJUlFGX09ORVNIT1QsIE5VTEwsIGRtdXgpOwomIzQzOwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgZG11eC0mZ3Q7cGNfYWNrX2lycSwgTlVMTCwKJiM0MzsJCQkJCWJhbV9kbXV4X3BjX2Fja19pcnEsCiYjNDM7CQkJCQlJUlFGX09ORVNIT1QgfCBJUlFGX05PX0FVVE9FTiwKJiM0MzsJCQkJCU5VTEwsIGRtdXgpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2Rpc2FibGVfcG07CiAKIAlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgZG11eC0mZ3Q7cGNfaXJxLCBOVUxMLCBiYW1fZG11eF9wY19pcnEsCi0JCQkJCUlSUUZfT05FU0hPVCwgTlVMTCwgZG11eCk7CiYjNDM7CQkJCQlJUlFGX09ORVNIT1QgfCBJUlFGX05PX0FVVE9FTiwgTlVMTCwgZG11eCk7CiAJaWYgKHJldCkKLQkJZ290byBlcnJfZGlzYWJsZV9wbTsKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7ZG11eC0mZ3Q7cG93ZXJfbG9jayk7CiAJcmV0ID0gaXJxX2dldF9pcnFjaGlwX3N0YXRlKGRtdXgtJmd0O3BjX2lycSwgSVJRQ0hJUF9TVEFURV9MSU5FX0xFVkVMLAotCQkJCSAgICAmYW1wO2RtdXgtJmd0O3BjX3N0YXRlKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9kaXNhYmxlX3BtOwomIzQzOwkJCQkgICAgJmFtcDtwY19zdGF0ZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2RtdXgtJmd0O3Bvd2VyX2xvY2spOwomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwl9CiAKIAkvKiBDaGVjayBpZiByZW1vdGUgZmluaXNoZWQgaW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzICovCi0JaWYgKGRtdXgtJmd0O3BjX3N0YXRlKSB7Ci0JCWlmIChiYW1fZG11eF9wb3dlcl9vbihkbXV4KSkKLQkJCWJhbV9kbXV4X3BjX2FjayhkbXV4KTsKLQkJZWxzZQotCQkJYmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpOwotCX0KJiM0MzsJYmFtX2RtdXhfaGFuZGxlX3BjKGRtdXgsIHBjX3N0YXRlKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZG11eC0mZ3Q7cG93ZXJfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFN0YXJ0IGhhbmRsaW5nIHN0YXRlIGNoYW5nZXMgYWZ0ZXIgdGhlIGluaXRpYWwgc3RhdGUgaXMgcHJvY2Vzc2VkLiAqLwomIzQzOwllbmFibGVfaXJxKGRtdXgtJmd0O3BjX2Fja19pcnEpOwomIzQzOwllbmFibGVfaXJxKGRtdXgtJmd0O3BjX2lycSk7CiAKIAlyZXR1cm4gMDsKIAomIzQzO2Vycl9wb3dlcl9vZmY6CiYjNDM7CW11dGV4X2xvY2soJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsJYmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKIGVycl9kaXNhYmxlX3BtOgogCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOwogCXBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoZGV2KTsKQEAgLTg3MiwxMiAmIzQzOzk5MCwxNiBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTsKIAogCS8qIFRyeSB0byB3YWl0IGZvciByZW1vdGUgc2lkZSB0byBkcm9wIHBvd2VyIHZvdGUgKi8KLQlpZiAoIXdhaXRfZXZlbnRfdGltZW91dChkbXV4LSZndDtwY193YWl0LCAhZG11eC0mZ3Q7cngsIEJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSkKJiM0MzsJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoZG11eC0mZ3Q7cGNfd2FpdCwgIVJFQURfT05DRShkbXV4LSZndDtyeCksCiYjNDM7CQkJCUJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSkKIAkJZGV2X2VycihkZXYsICYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlbW90ZSBzaWRlIHRvIHN1c3BlbmRcbiYjMzQ7KTsKIAogCS8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNsZWFuZWQgdXAgYmVmb3JlIHdlIHJldHVybiAqLwomIzQzOwlkaXNhYmxlX2lycShkbXV4LSZndDtwY19hY2tfaXJxKTsKIAlkaXNhYmxlX2lycShkbXV4LSZndDtwY19pcnEpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZG11eC0mZ3Q7cG93ZXJfbG9jayk7CiAJYmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKIAliYW1fZG11eF9mcmVlX3NrYnMoZG11eC0mZ3Q7dHhfc2ticywgRE1BX1RPX0RFVklDRSk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDU2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBgcWNvbV9iYW1fZG11eC5jYCwgd2hpY2gsIGZyb20gYSBxdWljayBnbGFuY2UsIHNlZW1zIHRvIGJlIGEgcG93ZXIgbWFuYWdlbWVudCBmaXggZm9yIHRoZSBRdWFsY29tbSBCQU0gRGF0YSBNdWx0aXBsZXhlciBkcml2ZXIuIEl0JiMzOTtzIHRvdWNoaW5nIG11dGV4ZXMsIElSUSBoYW5kbGVycywgYW5kIHJ1bnRpbWUgc3VzcGVuZC9yZXN1bWUgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYnV0IGxldCYjMzk7cyBkaXZlIGRlZXBlciBhbmQgdGhpbmsgdGhpcyB0aHJvdWdoIG1ldGhvZGljYWxseS4KCkZpcnN0LCB0aGUgY29yZSBxdWVzdGlvbjogaXMgdGhpcyBkcml2ZXIgKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBmaWx0ZXIgaGVyZS4gVGhpcyBpcyBhIFF1YWxjb21tLXNwZWNpZmljIEJBTSBEYXRhIE11bHRpcGxleGVyIGRyaXZlciwgc28gSSBuZWVkIHRvIGFzc2VzcyBob3cgbGlrZWx5IGl0IGlzIHRvIGJlIGVtdWxhdGVkIG9yIGV2ZW4gdHJpZ2dlciBpdHMgY29kZSBwYXRocyB3aXRoaW4gYSB2aXJ0dWFsIG1hY2hpbmUuIFRoaXMgc3BlY2lmaWMgZHJpdmVyIGlzIGBxY29tX2JhbV9kbXV4LmNgIGFuZCBpcyBhIHBsYXRmb3JtIGRyaXZlci4KCk15IGV4cGVyaWVuY2Ugd2l0aCBRdWFsY29tbSBoYXJkd2FyZSBzdWdnZXN0cyB0aGF0IGRpcmVjdCBlbXVsYXRpb24gb2YgY29tcG9uZW50cyBsaWtlIEJBTSBETUEgb3IgU2hhcmVkIE1lbW9yeSAoU01FTSkgaXMgb2Z0ZW4gdHJpY2t5IGluIHN0YW5kYXJkIFFFTVUgdW5sZXNzIHRoZXJlJiMzOTtzIGEgdmVyeSBzcGVjaWZpYyBtYWNoaW5lIG1vZGVsIHRoYXQgZXhwbGljaXRseSBpbmNsdWRlcyBpdC4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhICpwbGF0Zm9ybSogZHJpdmVyIGdpdmVzIG1lIGEgZ2xpbW1lciBvZiBob3BlLiBQbGF0Zm9ybSBkcml2ZXJzIGFyZSwgaW4gdGhlb3J5LCBlYXNpZXIgdG8gbWFuaXB1bGF0ZSBhbmQgcG90ZW50aWFsbHkgaW5zdGFudGlhdGUgdGhyb3VnaCB0ZWNobmlxdWVzIGxpa2Ugc3l6a2FsbGVyLgoKQ2FuIHN5emthbGxlciBjcmVhdGUgYSAmIzM0O2Zha2UmIzM0OyBwbGF0Zm9ybSBkZXZpY2UgdGhhdCB0cmlnZ2VycyB0aGlzIGRyaXZlcj8gTWF5YmUsIHVzaW5nIGBzeXpfZ2VuX3N5c2ZzYCBvciBieSBkaXJlY3RseSB3cml0aW5nIHRvIGAvc3lzL2RldmljZXMvcGxhdGZvcm1gIGlmIHN1Y2ggYSBwYXRod2F5IGV4aXN0cy4gSG93ZXZlciwgSSBrbm93IHBsYXRmb3JtIGRldmljZXMgYXJlIHVzdWFsbHkgaW5zdGFudGlhdGVkIGJ5IERldmljZSBUcmVlIChEVCkuCgpUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGlzIHRoZXJlIGEgRFQgbm9kZSBmb3IgYHFjb21fYmFtX2RtdXhgIHRoYXQgSSBjYW4gdHJ5IHRvIHRyaWdnZXI/IFdpdGhvdXQgYSBzcGVjaWZpYyBgc3l6bGFuZ2AgZGVzY3JpcHRpb24gb3IgYSBzdGFuZGFyZCBEVCBpbmplY3Rpb24gbWVjaGFuaXNtLCBpdCBzZWVtcyB1bmxpa2VseSB0aGF0IEkgY2FuIGp1c3QgdGhyb3cgaXQgaW4sIGJ1dCBJIHNob3VsZCBjaGVjayBhbmQgbWFrZSBzdXJlIHRoYXQgaXQgZG9lcyByZXF1aXJlIGEgYHFjb20sYmFtLWRtdXhgIGNvbXBhdGlibGUgc3RyaW5nIGluIERULiBNeSBpbnR1aXRpb24gaXMgdGhhdCBpdCB3aWxsIGJlIGRpZmZpY3VsdCB0byBhcmJpdHJhcmlseSBpbmplY3QgRFQgbm9kZXMgdW5sZXNzIGEgc3BlY2lmaWMgZHJpdmVyIGFsbG93cyBmb3IgaXQuCgpUaGUgcHJvbXB0LCBob3dldmVyLCBoaWdobGlnaHRzIGEgY3J1Y2lhbCBwb2ludDogaWYgdGhlIHBhdGNoIG9ubHkgYWZmZWN0cyBjb2RlIHRoYXQmIzM5O3MgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXphdGlvbiwgdGhlbiBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIENvbnZlcnNlbHksIGlmIGl0IHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBJIHNob3VsZCB2ZXJpZnkgZXhlY3V0YWJpbGl0eSBhbmQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpUaGVyZWZvcmUsIEkgbmVlZCB0byBrbm93IGlmIHN5emthbGxlciBpcyBhbHJlYWR5IGZ1enppbmcgdGhpcyBkcml2ZXIuIEkmIzM5O2xsIHNlYXJjaCBmb3IgZXhpc3Rpbmcgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgYHFjb21fYmFtX2RtdXhgLiBUaGlzIHdpbGwgYmUgbXkgZmlyc3Qgc3RlcC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHByZWRlZmluZWQgd2F5cyB0byBpbnRlcmFjdCB3aXRoIHRoaXMgZHJpdmVyIHZpYSBmdXp6aW5nLiBJZiBzbywgdGhlbiBJIGNhbiBzZWUgd2hhdCBjb2RlIHBhdGhzIGFyZSBhbHJlYWR5IGJlaW5nIGhpdCwgYW5kIHNlZSBob3cgdGhlIHBhdGNoIGltcGFjdHMgdGhlbS4gSWYgbm90LCB0aGVuIEkgY2FuIHNlZSBpZiB0aGVyZSBpcyBhbnkgcGF0aHdheSBJIGNhbiBhdHRlbXB0IHRvIHRyaWdnZXIgd2l0aGluIFFFTVUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cWNvbSxiYW0tZG11eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC0zLS0tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWw6NDokaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwjXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC01LSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sPTIzPXByb3BlcnRpZXM6XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC0yNC0gIGNvbXBhdGlibGU6XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbDoyNTogICAgY29uc3Q6IHFjb20sYmFtLWRtdXhcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTI2LVxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sPTg2PWV4YW1wbGVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTkxLSAgICAgICAgYmFtLWRtdXgge1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWw6OTI6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20sYmFtLWRtdXhcJiMzNDs7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC05My1cbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVtb3RlcHJvYy9xY29tLG1zbTg5MTYtbXNzLXBpbC55YW1sPTE2PXByb3BlcnRpZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtc204OTE2LW1zcy1waWwueWFtbC0xNTQtICBiYW0tZG11eDpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbXNtODkxNi1tc3MtcGlsLnlhbWw6MTU1OiAgICAkcmVmOiAvc2NoZW1hcy9uZXQvcWNvbSxiYW0tZG11eC55YW1sI1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtc204OTE2LW1zcy1waWwueWFtbC0xNTYtICAgIGRlc2NyaXB0aW9uOlxuLS1cbk1BSU5UQUlORVJTPTIyMTc0PVM6XHRNYWludGFpbmVkXG5NQUlOVEFJTkVSUzoyMjE3NTpGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWxcbk1BSU5UQUlORVJTLTIyMTc2LUY6XHRkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2k9OTc1PVx0XHRcdGJhbV9kbXV4OiBiYW0tZG11eCB7XG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODIyNi5kdHNpOjk3NjpcdFx0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGJhbS1kbXV4XCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTgyMjYuZHRzaS05NzctXG4tLVxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTg5NzQuZHRzaT0xNTg4PVx0XHRcdGJhbV9kbXV4OiBiYW0tZG11eCB7XG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpOjE1ODk6XHRcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxiYW0tZG11eFwmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204OTc0LmR0c2ktMTU5MC1cbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi5kdHNpPTE5NzY9XHRcdFx0YmFtX2RtdXg6IGJhbS1kbXV4IHtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2k6MTk3NzpcdFx0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGJhbS1kbXV4XCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYuZHRzaS0xOTc4LVxuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM5LmR0c2k9MTc1NT1cdFx0XHRiYW1fZG11eDogYmFtLWRtdXgge1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzkuZHRzaToxNzU2Olx0XHRcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3Fjb20sYmFtLWRtdXhcJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpLTE3NTctXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM9MTAxMD1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiYW1fZG11eF9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MTAxMTpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGJhbS1kbXV4XCYjMzQ7IH0sXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xMDEyLVx0eyAvKiBzZW50aW5lbCAqLyB9XG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYz0yMDY3PXN0YXRpYyBpbnQgcTZ2NV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmMtMjIwMy1cbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmM6MjIwNDpcdG5vZGUgPSBvZl9nZXRfY29tcGF0aWJsZV9jaGlsZChwZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcJiMzNDtxY29tLGJhbS1kbXV4XCYjMzQ7KTtcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmMtMjIwNS1cdHFwcm9jLVx1MDAzZWJhbV9kbXV4ID0gb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShub2RlLCBOVUxMLCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM1NwoJCQkJCQkJb3V0cHV0OiAxMDIKCQkJCQkJCXRob3VnaHRzOiA1MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUGF0Y2ggQXBwbGljYWJpbGl0eSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBleGFtaW5lZCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBsb29raW5nIGxpa2UgYSBkZWFkIGVuZCBmb3IgZnV6emluZyBwdXJwb3Nlcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBjb2RlIHdvbiYjMzk7dCBiZSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgcGF0Y2ggdGFyZ2V0cyB0aGUgYHFjb20sYmFtLWRtdXhgIHBsYXRmb3JtIGRyaXZlciwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgc29tZSBhbGFybXMuIFBsYXRmb3JtIGRldmljZXMgYXJlIHR5cGljYWxseSBpbnN0YW50aWF0ZWQgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIGFuZCBpbiB0aGUgZGVmYXVsdCBRRU1VIHNldHVwIHVzZWQgYnkgc3l6a2FsbGVyICh3aGljaCBpcyB4ODZfNjQpLCB0aGlzIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGUgd29uJiMzOTt0IGJlIHByZXNlbnQuIEV2ZW4gaWYgd2UmIzM5O3JlIG9uIEFSTTY0IFFFTVUsIGxpa2UgYSBgdmlydGAgbWFjaGluZSwgaXQmIzM5O3MgaGlnaGx5IHVubGlrZWx5IHRoYXQgdGhpcyBzcGVjaWZpYyBub2RlIGhhcyBiZWVuIGV4cGxpY2l0bHkgYWRkZWQuCgpUaGUgcmVhbCBraWNrZXIgaXMgdGhhdCB0aGlzIGRyaXZlciBpbnRlcmFjdHMgd2l0aCBRdWFsY29tbS1zcGVjaWZpYyBoYXJkd2FyZTogdGhlIFNNRU0gKHNoYXJlZCBtZW1vcnkpIHN0YXRlIHVzaW5nIGBxY29tX3NtZW1fc3RhdGVfZ2V0YCBhbmQgdGhlIERNQSBlbmdpbmUgd2l0aCBgZG1hX3JlcXVlc3RfY2hhbmAuIE5laXRoZXIgb2YgdGhvc2UgaXMgZW11bGF0ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLiBUaGlzIG1lYW5zIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIHdpdGhpbiBgcWNvbV9iYW1fZG11eC5jYCBhcmUgc2ltcGx5IGluYWNjZXNzaWJsZSBpbiB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSB0aG9zZSB1c2VkIGJ5IEdDRSBvciBRRU1VLgoKSSYjMzk7bSBub3cgdGhpbmtpbmcgYWJvdXQgd2F5cyB0byB0cmlnZ2VyIHRoaXMuIFRoZSBkcml2ZXIgcmVxdWlyZXMgYWNjZXNzIHRvIFNNRU0gc3RhdGVzICYjMzQ7cGMmIzM0OyBhbmQgJiMzNDtwYy1hY2ssJiMzNDsgYXMgd2VsbCBhcyAmIzM0O3BjJiMzNDsgYW5kICYjMzQ7cGMtYWNrJiMzNDsgSVJRcy4gVGhlIGxhY2sgb2YgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgc3l6a2FsbGVyJiMzOTtzIGN1cnJlbnQgbGltaXRhdGlvbnMgd2l0aCBlbXVsYXRpbmcgdGhhdCBsZWFkcyBtZSB0byBiZWxpZXZlIHRoaXMgZHJpdmVyIHdpbGwgbmV2ZXIgc3VjY2Vzc2Z1bGx5IHByb2JlLCBhbmQgaXRzIHJ1bnRpbWUgUE0vSVJRIGhhbmRsZXJzIHdpbGwgbmV2ZXIgZ2V0IGV4ZWN1dGVkLgoKSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgbXkgYXNzZXNzbWVudCBmb2xsb3dzIHRoZSBndWlkZWxpbmVzOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCBhbHNvIGFwcGxpZXMgdG8gY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyAoUXVhbGNvbW0pIFNvQyBkcml2ZXIgdGhhdCBkZXBlbmRzIG9uIHNwZWNpZmljIGhhcmR3YXJlIChCQU0gRE1BLCBTTUVNKSB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZCBpbiB0aGUgZGVmYXVsdCBzZXR1cC4KCkkmIzM5O3ZlIHF1aWNrbHkgY2hlY2tlZCB0aGF0IHRoZSBvbmx5IGZpbGUgY2hhbmdlZCBpcyBgZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNgLgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgYW5kIGRvY3VtZW50IHRoZSByYXRpb25hbGU6IHRoZSBwYXRjaCBpcyBpbmFjY2Vzc2libGUgd2l0aGluIGEgdHlwaWNhbCBmdXp6aW5nIGVudmlyb25tZW50IGR1ZSB0byBpdHMgZGVwZW5kZW5jZSBvbiB1bi1lbXVsYXRlZCwgUXVhbGNvbW0tc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBRdWFsY29tbSBCQU0gRGF0YSBNdWx0aXBsZXhlciAocWNvbV9iYW1fZG11eCkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTb0MgZHJpdmVyLiBJdCByZWxpZXMgb24gaGFyZHdhcmUtc3BlY2lmaWMgZmVhdHVyZXMgbGlrZSBRdWFsY29tbSBTTUVNIGFuZCBCQU0gRE1BIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgUXVhbGNvbW0gQkFNIERhdGEgTXVsdGlwbGV4ZXIgKHFjb21fYmFtX2RtdXgpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIGRyaXZlci4gSXQgcmVsaWVzIG9uIGhhcmR3YXJlLXNwZWNpZmljIGZlYXR1cmVzIGxpa2UgUXVhbGNvbW0gU01FTSBhbmQgQkFNIERNQSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjM4LjcwOTA1NTY2OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTcyMTYyOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgUXVhbGNvbW0gQkFNIERhdGEgTXVsdGlwbGV4ZXIgKHFjb21fYmFtX2RtdXgpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIGRyaXZlci4gSXQgcmVsaWVzIG9uIGhhcmR3YXJlLXNwZWNpZmljIGZlYXR1cmVzIGxpa2UgUXVhbGNvbW0gU01FTSBhbmQgQkFNIERNQSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjM4LjcwOTA2MDAyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0Njk3ODk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU3NTkwNjRlMWE1ODgwMDRiYzljYzJiYzM4ZjViOGE1MzI5NGFkZmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDk6NDU6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xcbmluZGV4IGNjNmFjZThkNjQzNzEuLjM3NTZjZGI3YTMxOTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xcbkBAIC02LDEyICs2LDE0IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYXRvbWljLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRvcHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWFlbmdpbmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcG1fcnVudGltZS5oXFx1MDAzZVxcbkBAIC02NCwxNSArNjYsMjQgQEAgc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEge1xcbiBcXHRkbWFfYWRkcl90IGFkZHI7XFxuIH07XFxuIFxcbitlbnVtIGJhbV9kbXV4X3BjX3ZvdGUge1xcbitcXHRCQU1fRE1VWF9QQ19WT1RFX0lOQUNUSVZFLCAvKiBwY192b3RlID0gZmFsc2UgKi9cXG4rXFx0QkFNX0RNVVhfUENfVk9URV9QRU5ESU5HLCAvKiBwY192b3RlID0gdHJ1ZSwgd2FpdGluZyBmb3IgQUNLICovXFxuK1xcdEJBTV9ETVVYX1BDX1ZPVEVfQUNLRUQsIC8qIHBjX3ZvdGUgPSB0cnVlLCBBQ0sgcmVjZWl2ZWQgKi9cXG4rXFx0QkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcsIC8qIHBjID0gZmFsc2Ugd2hpbGUgaG9zdCB2b3RlIGFjdGl2ZSAqL1xcbit9O1xcbitcXG4gc3RydWN0IGJhbV9kbXV4IHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbiBcXG4tXFx0aW50IHBjX2lycTtcXG4rXFx0aW50IHBjX2lycSwgcGNfYWNrX2lycTtcXG4gXFx0Ym9vbCBwY19zdGF0ZSwgcGNfYWNrX3N0YXRlO1xcbiBcXHRzdHJ1Y3QgcWNvbV9zbWVtX3N0YXRlICpwYywgKnBjX2FjaztcXG4gXFx0dTMyIHBjX21hc2ssIHBjX2Fja19tYXNrO1xcbiBcXHR3YWl0X3F1ZXVlX2hlYWRfdCBwY193YWl0O1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvbiBwY19hY2tfY29tcGxldGlvbjtcXG4rXFx0c3RydWN0IG11dGV4IHBvd2VyX2xvY2s7IC8qIFByb3RlY3QgcG93ZXItY29udHJvbCBzdGF0ZSAqL1xcbitcXHRlbnVtIGJhbV9kbXV4X3BjX3ZvdGUgcGNfdm90ZTtcXG4gXFxuIFxcdHN0cnVjdCBkbWFfY2hhbiAqcngsICp0eDtcXG4gXFx0c3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgcnhfc2tic1tCQU1fRE1VWF9OVU1fU0tCXTtcXG5AQCAtOTksNiArMTEwLDI0IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX3ZvdGUoc3RydWN0IGJhbV9kbXV4ICpkbXV4LCBib29sIGVuYWJsZSlcXG4gXFx0XFx0XFx0XFx0ICAgIGVuYWJsZSA/IGRtdXgtXFx1MDAzZXBjX21hc2sgOiAwKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfdm90ZV9sb2NrZWQoc3RydWN0IGJhbV9kbXV4ICpkbXV4LCBib29sIGVuYWJsZSlcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4rXFxuK1xcdGlmIChlbmFibGUpXFxuK1xcdFxcdGRtdXgtXFx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX1BFTkRJTkc7XFxuK1xcdGVsc2UgaWYgKGRtdXgtXFx1MDAzZXBjX3ZvdGUgIT0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcpXFxuK1xcdFxcdGRtdXgtXFx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0lOQUNUSVZFO1xcbitcXHRiYW1fZG11eF9wY192b3RlKGRtdXgsIGVuYWJsZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX3ZvdGVfcHJvdGVjdGVkKHN0cnVjdCBiYW1fZG11eCAqZG11eCwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZG11eC1cXHUwMDNlcG93ZXJfbG9jayk7XFxuK1xcdGJhbV9kbXV4X3BjX3ZvdGVfbG9ja2VkKGRtdXgsIGVuYWJsZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2ZG11eC1cXHUwMDNlcG93ZXJfbG9jayk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX2FjayhzdHJ1Y3QgYmFtX2RtdXggKmRtdXgpXFxuIHtcXG4gXFx0cWNvbV9zbWVtX3N0YXRlX3VwZGF0ZV9iaXRzKGRtdXgtXFx1MDAzZXBjX2FjaywgZG11eC1cXHUwMDNlcGNfYWNrX21hc2ssXFxuQEAgLTY1NSw2ICs2ODQsOCBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9mcmVlX3NrYnMoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgc2tic1tdLFxcbiBcXG4gc3RhdGljIHZvaWQgYmFtX2RtdXhfcG93ZXJfb2ZmKHN0cnVjdCBiYW1fZG11eCAqZG11eClcXG4ge1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4rXFxuIFxcdGlmIChkbXV4LVxcdTAwM2V0eCkge1xcbiBcXHRcXHRkbWFlbmdpbmVfdGVybWluYXRlX3N5bmMoZG11eC1cXHUwMDNldHgpO1xcbiBcXHRcXHRkbWFfcmVsZWFzZV9jaGFubmVsKGRtdXgtXFx1MDAzZXR4KTtcXG5AQCAtNjcwLDEwICs3MDEsMTUgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfcG93ZXJfb2ZmKHN0cnVjdCBiYW1fZG11eCAqZG11eClcXG4gXFx0YmFtX2RtdXhfZnJlZV9za2JzKGRtdXgtXFx1MDAzZXJ4X3NrYnMsIERNQV9GUk9NX0RFVklDRSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpcnFyZXR1cm5fdCBiYW1fZG11eF9wY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4rc3RhdGljIGJvb2wgYmFtX2RtdXhfaGFuZGxlX3BjKHN0cnVjdCBiYW1fZG11eCAqZG11eCwgYm9vbCBuZXdfc3RhdGUpXFxuIHtcXG4tXFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gZGF0YTtcXG4tXFx0Ym9vbCBuZXdfc3RhdGUgPSAhZG11eC1cXHUwMDNlcGNfc3RhdGU7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmRtdXgtXFx1MDAzZXBvd2VyX2xvY2spO1xcbitcXG4rXFx0aWYgKG5ld19zdGF0ZSA9PSBkbXV4LVxcdTAwM2VwY19zdGF0ZSkge1xcbitcXHRcXHRpZiAobmV3X3N0YXRlIFxcdTAwMjZcXHUwMDI2IGRtdXgtXFx1MDAzZXBjX3ZvdGUgPT0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcpXFxuK1xcdFxcdFxcdGRtdXgtXFx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0FDS0VEO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4gXFxuIFxcdGRldl9kYmcoZG11eC1cXHUwMDNlZGV2LCBcXFwicGM6ICV1XFxcXG5cXFwiLCBuZXdfc3RhdGUpO1xcbiBcXG5AQCAtNjgyLDEzICs3MTgsNDEgQEAgc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxcbiBcXHRcXHRcXHRiYW1fZG11eF9wY19hY2soZG11eCk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xcbitcXHR9IGVsc2UgaWYgKGRtdXgtXFx1MDAzZXBjX3ZvdGUgPT0gQkFNX0RNVVhfUENfVk9URV9BQ0tFRCkge1xcbitcXHRcXHQvKiBUaGUgbW9kZW0gbXVzdCBrZWVwIHRoZSBETUEgZW5naW5lIG9uIHVudGlsIHBjIGlzIGFja2VkLiAqL1xcbitcXHRcXHRkbXV4LVxcdTAwM2VwY192b3RlID0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkc7XFxuK1xcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZG11eC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInJlZnVzaW5nIHBjIGRvd24gd2hpbGUgaG9zdCB2b3RlIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xcbiBcXHRcXHRiYW1fZG11eF9wY19hY2soZG11eCk7XFxuK1xcdFxcdGRtdXgtXFx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0lOQUNUSVZFO1xcbiBcXHR9XFxuIFxcbi1cXHRkbXV4LVxcdTAwM2VwY19zdGF0ZSA9IG5ld19zdGF0ZTtcXG4tXFx0d2FrZV91cF9hbGwoXFx1MDAyNmRtdXgtXFx1MDAzZXBjX3dhaXQpO1xcbitcXHRXUklURV9PTkNFKGRtdXgtXFx1MDAzZXBjX3N0YXRlLCBuZXdfc3RhdGUpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRhdGE7XFxuK1xcdGJvb2wgbmV3X3N0YXRlLCB3YWtlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZG11eC1cXHUwMDNlcG93ZXJfbG9jayk7XFxuK1xcdHJldCA9IGlycV9nZXRfaXJxY2hpcF9zdGF0ZShkbXV4LVxcdTAwM2VwY19pcnEsIElSUUNISVBfU1RBVEVfTElORV9MRVZFTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZuZXdfc3RhdGUpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZG11eC1cXHUwMDNlcG93ZXJfbG9jayk7XFxuK1xcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZG11eC1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHJlYWQgcGMgc3RhdGU6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK1xcdH1cXG4rXFxuK1xcdHdha2UgPSBiYW1fZG11eF9oYW5kbGVfcGMoZG11eCwgbmV3X3N0YXRlKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4rXFx0aWYgKHdha2UpXFxuK1xcdFxcdHdha2VfdXBfYWxsKFxcdTAwMjZkbXV4LVxcdTAwM2VwY193YWl0KTtcXG4gXFxuIFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4gfVxcbkBAIC02OTYsOSArNzYwLDMwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBiYW1fZG11eF9wY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4gc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2Fja19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkYXRhO1xcbitcXHRib29sIG5ld19zdGF0ZSwgd2FrZSA9IGZhbHNlO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0ZGV2X2RiZyhkbXV4LVxcdTAwM2VkZXYsIFxcXCJwYyBhY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0LyogUHJvY2VzcyBhbiBlYXJsaWVyIHBjIGVkZ2UgYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGhvc3Qtdm90ZSBhY2suICovXFxuK1xcdHN5bmNocm9uaXplX2lycShkbXV4LVxcdTAwM2VwY19pcnEpO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4rXFx0cmV0ID0gaXJxX2dldF9pcnFjaGlwX3N0YXRlKGRtdXgtXFx1MDAzZXBjX2lycSwgSVJRQ0hJUF9TVEFURV9MSU5FX0xFVkVMLFxcbitcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ld19zdGF0ZSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4rXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkbXV4LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gcmVhZCBwYyBzdGF0ZTogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4rXFx0fVxcbitcXG4rXFx0d2FrZSA9IGJhbV9kbXV4X2hhbmRsZV9wYyhkbXV4LCBuZXdfc3RhdGUpO1xcbitcXHRpZiAobmV3X3N0YXRlIFxcdTAwMjZcXHUwMDI2IGRtdXgtXFx1MDAzZXBjX3N0YXRlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBkbXV4LVxcdTAwM2VwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfUEVORElORylcXG4rXFx0XFx0ZG11eC1cXHUwMDNlcGNfdm90ZSA9IEJBTV9ETVVYX1BDX1ZPVEVfQUNLRUQ7XFxuIFxcdGNvbXBsZXRlX2FsbChcXHUwMDI2ZG11eC1cXHUwMDNlcGNfYWNrX2NvbXBsZXRpb24pO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtdXgtXFx1MDAzZXBvd2VyX2xvY2spO1xcbitcXHRpZiAod2FrZSlcXG4rXFx0XFx0d2FrZV91cF9hbGwoXFx1MDAyNmRtdXgtXFx1MDAzZXBjX3dhaXQpO1xcbiBcXG4gXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiB9XFxuQEAgLTcwNiw5ICs3OTEsMjEgQEAgc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2Fja19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4gc3RhdGljIGludCBiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXHRib29sIHdha2UgPSBmYWxzZTtcXG4gXFxuIFxcdGRldl9kYmcoZGV2LCBcXFwicnVudGltZSBzdXNwZW5kXFxcXG5cXFwiKTtcXG4tXFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XFxuK1xcbitcXHR7XFxuK1xcdFxcdGd1YXJkKG11dGV4KShcXHUwMDI2ZG11eC1cXHUwMDNlcG93ZXJfbG9jayk7XFxuK1xcbitcXHRcXHRiYW1fZG11eF9wY192b3RlX2xvY2tlZChkbXV4LCBmYWxzZSk7XFxuK1xcdFxcdGlmIChkbXV4LVxcdTAwM2VwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfRE9XTl9QRU5ESU5HKVxcbitcXHRcXHRcXHR3YWtlID0gYmFtX2RtdXhfaGFuZGxlX3BjKGRtdXgsIGZhbHNlKTtcXG4rXFx0XFx0ZWxzZSBpZiAoIWRtdXgtXFx1MDAzZXBjX3N0YXRlKVxcbitcXHRcXHRcXHRiYW1fZG11eF9wb3dlcl9vZmYoZG11eCk7XFxuK1xcdH1cXG4rXFx0aWYgKHdha2UpXFxuK1xcdFxcdHdha2VfdXBfYWxsKFxcdTAwMjZkbXV4LVxcdTAwM2VwY193YWl0KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTcxNiw2ICs4MTMsNyBAQCBzdGF0aWMgaW50IGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYmFtX2RtdXhfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdGRldl9kYmcoZGV2LCBcXFwicnVudGltZSByZXN1bWVcXFxcblxcXCIpO1xcbiBcXG5AQCAtNzI0LDUwICs4MjIsNTggQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBiYW1fZG11eF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdFxcdFxcdFxcdFxcdCBCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpXFxuIFxcdFxcdHJldHVybiAtRVRJTUVET1VUO1xcbiBcXG4rXFx0c3luY2hyb25pemVfaXJxKGRtdXgtXFx1MDAzZXBjX2lycSk7XFxuK1xcbiBcXHQvKiBWb3RlIGZvciBwb3dlciBzdGF0ZSAqL1xcbi1cXHRiYW1fZG11eF9wY192b3RlKGRtdXgsIHRydWUpO1xcbitcXHRiYW1fZG11eF9wY192b3RlX3Byb3RlY3RlZChkbXV4LCB0cnVlKTtcXG4gXFxuIFxcdC8qIFdhaXQgZm9yIGFjayAqL1xcbiBcXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcXHUwMDI2ZG11eC1cXHUwMDNlcGNfYWNrX2NvbXBsZXRpb24sXFxuIFxcdFxcdFxcdFxcdFxcdCBCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpIHtcXG4tXFx0XFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XFxuK1xcdFxcdGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChkZXYpO1xcbiBcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4gXFx0fVxcbiBcXG4rXFx0c3luY2hyb25pemVfaXJxKGRtdXgtXFx1MDAzZXBjX2lycSk7XFxuK1xcbiBcXHQvKiBXYWl0IHVudGlsIHdlJ3JlIHVwICovXFxuLVxcdGlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtXFx1MDAzZXBjX3dhaXQsIGRtdXgtXFx1MDAzZXBjX3N0YXRlLFxcbitcXHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChkbXV4LVxcdTAwM2VwY193YWl0LCBSRUFEX09OQ0UoZG11eC1cXHUwMDNlcGNfc3RhdGUpLFxcbiBcXHRcXHRcXHRcXHRCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpIHtcXG4tXFx0XFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XFxuK1xcdFxcdGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChkZXYpO1xcbiBcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4gXFx0fVxcbiBcXG4tXFx0LyogRW5zdXJlIHRoYXQgd2UgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXFxuLVxcdGlmICghZG11eC1cXHUwMDNlcngpIHtcXG4tXFx0XFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XFxuLVxcdFxcdHJldHVybiAtRU5YSU87XFxuK1xcdHtcXG4rXFx0XFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4rXFxuK1xcdFxcdC8qIEVuc3VyZSB0aGF0IHdlIGFjdHVhbGx5IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAqL1xcbitcXHRcXHRpZiAoIWRtdXgtXFx1MDAzZXJ4KSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FTlhJTztcXG4rXFx0XFx0fSBlbHNlIGlmICghZG11eC1cXHUwMDNldHgpIHtcXG4rXFx0XFx0XFx0LyogUmVxdWVzdCBUWCBjaGFubmVsIGlmIG5lY2Vzc2FyeSAqL1xcbitcXHRcXHRcXHRkbXV4LVxcdTAwM2V0eCA9IGRtYV9yZXF1ZXN0X2NoYW4oZGV2LCBcXFwidHhcXFwiKTtcXG4rXFx0XFx0XFx0aWYgKElTX0VSUihkbXV4LVxcdTAwM2V0eCkpIHtcXG4rXFx0XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gcmVxdWVzdCBUWCBETUEgY2hhbm5lbDogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRkbXV4LVxcdTAwM2V0eCk7XFxuK1xcdFxcdFxcdFxcdGRtdXgtXFx1MDAzZXR4ID0gTlVMTDtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVOWElPO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0LyogUmVxdWVzdCBUWCBjaGFubmVsIGlmIG5lY2Vzc2FyeSAqL1xcbi1cXHRpZiAoZG11eC1cXHUwMDNldHgpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0ZG11eC1cXHUwMDNldHggPSBkbWFfcmVxdWVzdF9jaGFuKGRldiwgXFxcInR4XFxcIik7XFxuLVxcdGlmIChJU19FUlIoZG11eC1cXHUwMDNldHgpKSB7XFxuLVxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHJlcXVlc3QgVFggRE1BIGNoYW5uZWw6ICVwZVxcXFxuXFxcIiwgZG11eC1cXHUwMDNldHgpO1xcbi1cXHRcXHRkbXV4LVxcdTAwM2V0eCA9IE5VTEw7XFxuK1xcdGlmIChyZXQpXFxuIFxcdFxcdGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChkZXYpO1xcbi1cXHRcXHRyZXR1cm4gLUVOWElPO1xcbi1cXHR9XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuIFxcdHN0cnVjdCBiYW1fZG11eCAqZG11eDtcXG4tXFx0aW50IHJldCwgcGNfYWNrX2lycSwgaTtcXG4rXFx0aW50IHJldCwgaTtcXG4gXFx0dW5zaWduZWQgaW50IGJpdDtcXG4rXFx0Ym9vbCBwY19zdGF0ZTtcXG4gXFxuIFxcdGRtdXggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRtdXgpLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFkbXV4KVxcbkBAIC03ODAsOSArODg2LDkgQEAgc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRpZiAoZG11eC1cXHUwMDNlcGNfaXJxIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIGRtdXgtXFx1MDAzZXBjX2lycTtcXG4gXFxuLVxcdHBjX2Fja19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCBcXFwicGMtYWNrXFxcIik7XFxuLVxcdGlmIChwY19hY2tfaXJxIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHBjX2Fja19pcnE7XFxuK1xcdGRtdXgtXFx1MDAzZXBjX2Fja19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCBcXFwicGMtYWNrXFxcIik7XFxuK1xcdGlmIChkbXV4LVxcdTAwM2VwY19hY2tfaXJxIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGRtdXgtXFx1MDAzZXBjX2Fja19pcnE7XFxuIFxcbiBcXHRkbXV4LVxcdTAwM2VwYyA9IGRldm1fcWNvbV9zbWVtX3N0YXRlX2dldChkZXYsIFxcXCJwY1xcXCIsIFxcdTAwMjZiaXQpO1xcbiBcXHRpZiAoSVNfRVJSKGRtdXgtXFx1MDAzZXBjKSlcXG5AQCAtNzk5LDYgKzkwNSw5IEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2ZG11eC1cXHUwMDNlcGNfd2FpdCk7XFxuIFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2ZG11eC1cXHUwMDNlcGNfYWNrX2NvbXBsZXRpb24pO1xcbiBcXHRjb21wbGV0ZV9hbGwoXFx1MDAyNmRtdXgtXFx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcXG4rXFx0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXFx1MDAyNmRtdXgtXFx1MDAzZXBvd2VyX2xvY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmRtdXgtXFx1MDAzZXR4X2xvY2spO1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNmRtdXgtXFx1MDAzZXR4X3dha2V1cF93b3JrLCBiYW1fZG11eF90eF93YWtldXBfd29yayk7XFxuQEAgLTgxNywzMSArOTI2LDQwIEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0cG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoZGV2KTtcXG4gXFx0cG1fcnVudGltZV9lbmFibGUoZGV2KTtcXG4gXFxuLVxcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBwY19hY2tfaXJxLCBOVUxMLCBiYW1fZG11eF9wY19hY2tfaXJxLFxcbi1cXHRcXHRcXHRcXHRcXHRJUlFGX09ORVNIT1QsIE5VTEwsIGRtdXgpO1xcbitcXHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgZG11eC1cXHUwMDNlcGNfYWNrX2lycSwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0YmFtX2RtdXhfcGNfYWNrX2lycSxcXG4rXFx0XFx0XFx0XFx0XFx0SVJRRl9PTkVTSE9UIHwgSVJRRl9OT19BVVRPRU4sXFxuK1xcdFxcdFxcdFxcdFxcdE5VTEwsIGRtdXgpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIGVycl9kaXNhYmxlX3BtO1xcbiBcXG4gXFx0cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGRtdXgtXFx1MDAzZXBjX2lycSwgTlVMTCwgYmFtX2RtdXhfcGNfaXJxLFxcbi1cXHRcXHRcXHRcXHRcXHRJUlFGX09ORVNIT1QsIE5VTEwsIGRtdXgpO1xcbitcXHRcXHRcXHRcXHRcXHRJUlFGX09ORVNIT1QgfCBJUlFGX05PX0FVVE9FTiwgTlVMTCwgZG11eCk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gZXJyX2Rpc2FibGVfcG07XFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmRtdXgtXFx1MDAzZXBvd2VyX2xvY2spO1xcbiBcXHRyZXQgPSBpcnFfZ2V0X2lycWNoaXBfc3RhdGUoZG11eC1cXHUwMDNlcGNfaXJxLCBJUlFDSElQX1NUQVRFX0xJTkVfTEVWRUwsXFxuLVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2ZG11eC1cXHUwMDNlcGNfc3RhdGUpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIGVycl9kaXNhYmxlX3BtO1xcbitcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnBjX3N0YXRlKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtdXgtXFx1MDAzZXBvd2VyX2xvY2spO1xcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIENoZWNrIGlmIHJlbW90ZSBmaW5pc2hlZCBpbml0aWFsaXphdGlvbiBiZWZvcmUgdXMgKi9cXG4tXFx0aWYgKGRtdXgtXFx1MDAzZXBjX3N0YXRlKSB7XFxuLVxcdFxcdGlmIChiYW1fZG11eF9wb3dlcl9vbihkbXV4KSlcXG4tXFx0XFx0XFx0YmFtX2RtdXhfcGNfYWNrKGRtdXgpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcXG4tXFx0fVxcbitcXHRiYW1fZG11eF9oYW5kbGVfcGMoZG11eCwgcGNfc3RhdGUpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtdXgtXFx1MDAzZXBvd2VyX2xvY2spO1xcbitcXG4rXFx0LyogU3RhcnQgaGFuZGxpbmcgc3RhdGUgY2hhbmdlcyBhZnRlciB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBwcm9jZXNzZWQuICovXFxuK1xcdGVuYWJsZV9pcnEoZG11eC1cXHUwMDNlcGNfYWNrX2lycSk7XFxuK1xcdGVuYWJsZV9pcnEoZG11eC1cXHUwMDNlcGNfaXJxKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG4rZXJyX3Bvd2VyX29mZjpcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZG11eC1cXHUwMDNlcG93ZXJfbG9jayk7XFxuK1xcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4gZXJyX2Rpc2FibGVfcG06XFxuIFxcdHBtX3J1bnRpbWVfZGlzYWJsZShkZXYpO1xcbiBcXHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7XFxuQEAgLTg3MiwxMiArOTkwLDE2IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTtcXG4gXFxuIFxcdC8qIFRyeSB0byB3YWl0IGZvciByZW1vdGUgc2lkZSB0byBkcm9wIHBvd2VyIHZvdGUgKi9cXG4tXFx0aWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoZG11eC1cXHUwMDNlcGNfd2FpdCwgIWRtdXgtXFx1MDAzZXJ4LCBCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpXFxuK1xcdGlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtXFx1MDAzZXBjX3dhaXQsICFSRUFEX09OQ0UoZG11eC1cXHUwMDNlcngpLFxcbitcXHRcXHRcXHRcXHRCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpXFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlbW90ZSBzaWRlIHRvIHN1c3BlbmRcXFxcblxcXCIpO1xcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY2xlYW5lZCB1cCBiZWZvcmUgd2UgcmV0dXJuICovXFxuK1xcdGRpc2FibGVfaXJxKGRtdXgtXFx1MDAzZXBjX2Fja19pcnEpO1xcbiBcXHRkaXNhYmxlX2lycShkbXV4LVxcdTAwM2VwY19pcnEpO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4gXFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtdXgtXFx1MDAzZXBvd2VyX2xvY2spO1xcbiBcXHRiYW1fZG11eF9mcmVlX3NrYnMoZG11eC1cXHUwMDNldHhfc2ticywgRE1BX1RPX0RFVklDRSk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjQwLjE1NjYyNTY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjM3MjQ1ODIyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIFF1YWxjb21tIEJBTSBEYXRhIE11bHRpcGxleGVyIChxY29tX2JhbV9kbXV4KSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBkcml2ZXIuIEl0IHJlbGllcyBvbiBoYXJkd2FyZS1zcGVjaWZpYyBmZWF0dXJlcyBsaWtlIFF1YWxjb21tIFNNRU0gYW5kIEJBTSBETUEgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NzU5MDY0ZTFhNTg4MDA0YmM5Y2MyYmMzOGY1YjhhNTMyOTRhZGZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDk6NDU6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYyBiL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG5pbmRleCBjYzZhY2U4ZDY0MzcxLi4zNzU2Y2RiN2EzMTk5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG5AQCAtNiwxMiArNiwxNCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hZW5naW5lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuQEAgLTY0LDE1ICs2NiwyNCBAQCBzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSB7XG4gXHRkbWFfYWRkcl90IGFkZHI7XG4gfTtcbiBcbitlbnVtIGJhbV9kbXV4X3BjX3ZvdGUge1xuK1x0QkFNX0RNVVhfUENfVk9URV9JTkFDVElWRSwgLyogcGNfdm90ZSA9IGZhbHNlICovXG4rXHRCQU1fRE1VWF9QQ19WT1RFX1BFTkRJTkcsIC8qIHBjX3ZvdGUgPSB0cnVlLCB3YWl0aW5nIGZvciBBQ0sgKi9cbitcdEJBTV9ETVVYX1BDX1ZPVEVfQUNLRUQsIC8qIHBjX3ZvdGUgPSB0cnVlLCBBQ0sgcmVjZWl2ZWQgKi9cbitcdEJBTV9ETVVYX1BDX1ZPVEVfRE9XTl9QRU5ESU5HLCAvKiBwYyA9IGZhbHNlIHdoaWxlIGhvc3Qgdm90ZSBhY3RpdmUgKi9cbit9O1xuK1xuIHN0cnVjdCBiYW1fZG11eCB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4gXG4tXHRpbnQgcGNfaXJxO1xuK1x0aW50IHBjX2lycSwgcGNfYWNrX2lycTtcbiBcdGJvb2wgcGNfc3RhdGUsIHBjX2Fja19zdGF0ZTtcbiBcdHN0cnVjdCBxY29tX3NtZW1fc3RhdGUgKnBjLCAqcGNfYWNrO1xuIFx0dTMyIHBjX21hc2ssIHBjX2Fja19tYXNrO1xuIFx0d2FpdF9xdWV1ZV9oZWFkX3QgcGNfd2FpdDtcbiBcdHN0cnVjdCBjb21wbGV0aW9uIHBjX2Fja19jb21wbGV0aW9uO1xuK1x0c3RydWN0IG11dGV4IHBvd2VyX2xvY2s7IC8qIFByb3RlY3QgcG93ZXItY29udHJvbCBzdGF0ZSAqL1xuK1x0ZW51bSBiYW1fZG11eF9wY192b3RlIHBjX3ZvdGU7XG4gXG4gXHRzdHJ1Y3QgZG1hX2NoYW4gKnJ4LCAqdHg7XG4gXHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSByeF9za2JzW0JBTV9ETVVYX05VTV9TS0JdO1xuQEAgLTk5LDYgKzExMCwyNCBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9wY192b3RlKHN0cnVjdCBiYW1fZG11eCAqZG11eCwgYm9vbCBlbmFibGUpXG4gXHRcdFx0XHQgICAgZW5hYmxlID8gZG11eC1cdTAwM2VwY19tYXNrIDogMCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX3ZvdGVfbG9ja2VkKHN0cnVjdCBiYW1fZG11eCAqZG11eCwgYm9vbCBlbmFibGUpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuK1xuK1x0aWYgKGVuYWJsZSlcbitcdFx0ZG11eC1cdTAwM2VwY192b3RlID0gQkFNX0RNVVhfUENfVk9URV9QRU5ESU5HO1xuK1x0ZWxzZSBpZiAoZG11eC1cdTAwM2VwY192b3RlICE9IEJBTV9ETVVYX1BDX1ZPVEVfRE9XTl9QRU5ESU5HKVxuK1x0XHRkbXV4LVx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0lOQUNUSVZFO1xuK1x0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBlbmFibGUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBiYW1fZG11eF9wY192b3RlX3Byb3RlY3RlZChzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIGJvb2wgZW5hYmxlKVxuK3tcbitcdG11dGV4X2xvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcdGJhbV9kbXV4X3BjX3ZvdGVfbG9ja2VkKGRtdXgsIGVuYWJsZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfYWNrKHN0cnVjdCBiYW1fZG11eCAqZG11eClcbiB7XG4gXHRxY29tX3NtZW1fc3RhdGVfdXBkYXRlX2JpdHMoZG11eC1cdTAwM2VwY19hY2ssIGRtdXgtXHUwMDNlcGNfYWNrX21hc2ssXG5AQCAtNjU1LDYgKzY4NCw4IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X2ZyZWVfc2ticyhzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSBza2JzW10sXG4gXG4gc3RhdGljIHZvaWQgYmFtX2RtdXhfcG93ZXJfb2ZmKHN0cnVjdCBiYW1fZG11eCAqZG11eClcbiB7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4rXG4gXHRpZiAoZG11eC1cdTAwM2V0eCkge1xuIFx0XHRkbWFlbmdpbmVfdGVybWluYXRlX3N5bmMoZG11eC1cdTAwM2V0eCk7XG4gXHRcdGRtYV9yZWxlYXNlX2NoYW5uZWwoZG11eC1cdTAwM2V0eCk7XG5AQCAtNjcwLDEwICs3MDEsMTUgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfcG93ZXJfb2ZmKHN0cnVjdCBiYW1fZG11eCAqZG11eClcbiBcdGJhbV9kbXV4X2ZyZWVfc2ticyhkbXV4LVx1MDAzZXJ4X3NrYnMsIERNQV9GUk9NX0RFVklDRSk7XG4gfVxuIFxuLXN0YXRpYyBpcnFyZXR1cm5fdCBiYW1fZG11eF9wY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcbitzdGF0aWMgYm9vbCBiYW1fZG11eF9oYW5kbGVfcGMoc3RydWN0IGJhbV9kbXV4ICpkbXV4LCBib29sIG5ld19zdGF0ZSlcbiB7XG4tXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkYXRhO1xuLVx0Ym9vbCBuZXdfc3RhdGUgPSAhZG11eC1cdTAwM2VwY19zdGF0ZTtcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcbitcdGlmIChuZXdfc3RhdGUgPT0gZG11eC1cdTAwM2VwY19zdGF0ZSkge1xuK1x0XHRpZiAobmV3X3N0YXRlIFx1MDAyNlx1MDAyNiBkbXV4LVx1MDAzZXBjX3ZvdGUgPT0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcpXG4rXHRcdFx0ZG11eC1cdTAwM2VwY192b3RlID0gQkFNX0RNVVhfUENfVk9URV9BQ0tFRDtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFxuIFx0ZGV2X2RiZyhkbXV4LVx1MDAzZWRldiwgXCJwYzogJXVcXG5cIiwgbmV3X3N0YXRlKTtcbiBcbkBAIC02ODIsMTMgKzcxOCw0MSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpXG4gXHRcdFx0YmFtX2RtdXhfcGNfYWNrKGRtdXgpO1xuIFx0XHRlbHNlXG4gXHRcdFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xuK1x0fSBlbHNlIGlmIChkbXV4LVx1MDAzZXBjX3ZvdGUgPT0gQkFNX0RNVVhfUENfVk9URV9BQ0tFRCkge1xuK1x0XHQvKiBUaGUgbW9kZW0gbXVzdCBrZWVwIHRoZSBETUEgZW5naW5lIG9uIHVudGlsIHBjIGlzIGFja2VkLiAqL1xuK1x0XHRkbXV4LVx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0RPV05fUEVORElORztcbitcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkbXV4LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcInJlZnVzaW5nIHBjIGRvd24gd2hpbGUgaG9zdCB2b3RlIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fSBlbHNlIHtcbiBcdFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xuIFx0XHRiYW1fZG11eF9wY19hY2soZG11eCk7XG4rXHRcdGRtdXgtXHUwMDNlcGNfdm90ZSA9IEJBTV9ETVVYX1BDX1ZPVEVfSU5BQ1RJVkU7XG4gXHR9XG4gXG4tXHRkbXV4LVx1MDAzZXBjX3N0YXRlID0gbmV3X3N0YXRlO1xuLVx0d2FrZV91cF9hbGwoXHUwMDI2ZG11eC1cdTAwM2VwY193YWl0KTtcbitcdFdSSVRFX09OQ0UoZG11eC1cdTAwM2VwY19zdGF0ZSwgbmV3X3N0YXRlKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gZGF0YTtcbitcdGJvb2wgbmV3X3N0YXRlLCB3YWtlO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcdHJldCA9IGlycV9nZXRfaXJxY2hpcF9zdGF0ZShkbXV4LVx1MDAzZXBjX2lycSwgSVJRQ0hJUF9TVEFURV9MSU5FX0xFVkVMLFxuK1x0XHRcdFx0ICAgIFx1MDAyNm5ld19zdGF0ZSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuK1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRtdXgtXHUwMDNlZGV2LCBcImZhaWxlZCB0byByZWFkIHBjIHN0YXRlOiAlZFxcblwiLCByZXQpO1xuK1x0XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4rXHR9XG4rXG4rXHR3YWtlID0gYmFtX2RtdXhfaGFuZGxlX3BjKGRtdXgsIG5ld19zdGF0ZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcdGlmICh3YWtlKVxuK1x0XHR3YWtlX3VwX2FsbChcdTAwMjZkbXV4LVx1MDAzZXBjX3dhaXQpO1xuIFxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbkBAIC02OTYsOSArNzYwLDMwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBiYW1fZG11eF9wY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcbiBzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfYWNrX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRhdGE7XG4rXHRib29sIG5ld19zdGF0ZSwgd2FrZSA9IGZhbHNlO1xuK1x0aW50IHJldDtcbiBcbiBcdGRldl9kYmcoZG11eC1cdTAwM2VkZXYsIFwicGMgYWNrXFxuXCIpO1xuK1xuK1x0LyogUHJvY2VzcyBhbiBlYXJsaWVyIHBjIGVkZ2UgYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGhvc3Qtdm90ZSBhY2suICovXG4rXHRzeW5jaHJvbml6ZV9pcnEoZG11eC1cdTAwM2VwY19pcnEpO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuK1x0cmV0ID0gaXJxX2dldF9pcnFjaGlwX3N0YXRlKGRtdXgtXHUwMDNlcGNfaXJxLCBJUlFDSElQX1NUQVRFX0xJTkVfTEVWRUwsXG4rXHRcdFx0XHQgICAgXHUwMDI2bmV3X3N0YXRlKTtcbitcdGlmIChyZXQpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4rXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZG11eC1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIHJlYWQgcGMgc3RhdGU6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiBJUlFfSEFORExFRDtcbitcdH1cbitcbitcdHdha2UgPSBiYW1fZG11eF9oYW5kbGVfcGMoZG11eCwgbmV3X3N0YXRlKTtcbitcdGlmIChuZXdfc3RhdGUgXHUwMDI2XHUwMDI2IGRtdXgtXHUwMDNlcGNfc3RhdGUgXHUwMDI2XHUwMDI2XG4rXHQgICAgZG11eC1cdTAwM2VwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfUEVORElORylcbitcdFx0ZG11eC1cdTAwM2VwY192b3RlID0gQkFNX0RNVVhfUENfVk9URV9BQ0tFRDtcbiBcdGNvbXBsZXRlX2FsbChcdTAwMjZkbXV4LVx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuK1x0aWYgKHdha2UpXG4rXHRcdHdha2VfdXBfYWxsKFx1MDAyNmRtdXgtXHUwMDNlcGNfd2FpdCk7XG4gXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuQEAgLTcwNiw5ICs3OTEsMjEgQEAgc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2Fja19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcbiBzdGF0aWMgaW50IGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4rXHRib29sIHdha2UgPSBmYWxzZTtcbiBcbiBcdGRldl9kYmcoZGV2LCBcInJ1bnRpbWUgc3VzcGVuZFxcblwiKTtcbi1cdGJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgZmFsc2UpO1xuK1xuK1x0e1xuK1x0XHRndWFyZChtdXRleCkoXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcbitcdFx0YmFtX2RtdXhfcGNfdm90ZV9sb2NrZWQoZG11eCwgZmFsc2UpO1xuK1x0XHRpZiAoZG11eC1cdTAwM2VwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfRE9XTl9QRU5ESU5HKVxuK1x0XHRcdHdha2UgPSBiYW1fZG11eF9oYW5kbGVfcGMoZG11eCwgZmFsc2UpO1xuK1x0XHRlbHNlIGlmICghZG11eC1cdTAwM2VwY19zdGF0ZSlcbitcdFx0XHRiYW1fZG11eF9wb3dlcl9vZmYoZG11eCk7XG4rXHR9XG4rXHRpZiAod2FrZSlcbitcdFx0d2FrZV91cF9hbGwoXHUwMDI2ZG11eC1cdTAwM2VwY193YWl0KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03MTYsNiArODEzLDcgQEAgc3RhdGljIGludCBiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYmFtX2RtdXhfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRkZXZfZGJnKGRldiwgXCJydW50aW1lIHJlc3VtZVxcblwiKTtcbiBcbkBAIC03MjQsNTAgKzgyMiw1OCBAQCBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGJhbV9kbXV4X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0XHRcdFx0IEJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSlcbiBcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4gXG4rXHRzeW5jaHJvbml6ZV9pcnEoZG11eC1cdTAwM2VwY19pcnEpO1xuK1xuIFx0LyogVm90ZSBmb3IgcG93ZXIgc3RhdGUgKi9cbi1cdGJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgdHJ1ZSk7XG4rXHRiYW1fZG11eF9wY192b3RlX3Byb3RlY3RlZChkbXV4LCB0cnVlKTtcbiBcbiBcdC8qIFdhaXQgZm9yIGFjayAqL1xuIFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2ZG11eC1cdTAwM2VwY19hY2tfY29tcGxldGlvbixcbiBcdFx0XHRcdFx0IEJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSkge1xuLVx0XHRiYW1fZG11eF9wY192b3RlKGRtdXgsIGZhbHNlKTtcbitcdFx0YmFtX2RtdXhfcnVudGltZV9zdXNwZW5kKGRldik7XG4gXHRcdHJldHVybiAtRVRJTUVET1VUO1xuIFx0fVxuIFxuK1x0c3luY2hyb25pemVfaXJxKGRtdXgtXHUwMDNlcGNfaXJxKTtcbitcbiBcdC8qIFdhaXQgdW50aWwgd2UncmUgdXAgKi9cbi1cdGlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtXHUwMDNlcGNfd2FpdCwgZG11eC1cdTAwM2VwY19zdGF0ZSxcbitcdGlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtXHUwMDNlcGNfd2FpdCwgUkVBRF9PTkNFKGRtdXgtXHUwMDNlcGNfc3RhdGUpLFxuIFx0XHRcdFx0QkFNX0RNVVhfUkVNT1RFX1RJTUVPVVQpKSB7XG4tXHRcdGJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgZmFsc2UpO1xuK1x0XHRiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoZGV2KTtcbiBcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4gXHR9XG4gXG4tXHQvKiBFbnN1cmUgdGhhdCB3ZSBhY3R1YWxseSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKi9cbi1cdGlmICghZG11eC1cdTAwM2VyeCkge1xuLVx0XHRiYW1fZG11eF9wY192b3RlKGRtdXgsIGZhbHNlKTtcbi1cdFx0cmV0dXJuIC1FTlhJTztcbitcdHtcbitcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4rXG4rXHRcdC8qIEVuc3VyZSB0aGF0IHdlIGFjdHVhbGx5IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAqL1xuK1x0XHRpZiAoIWRtdXgtXHUwMDNlcngpIHtcbitcdFx0XHRyZXQgPSAtRU5YSU87XG4rXHRcdH0gZWxzZSBpZiAoIWRtdXgtXHUwMDNldHgpIHtcbitcdFx0XHQvKiBSZXF1ZXN0IFRYIGNoYW5uZWwgaWYgbmVjZXNzYXJ5ICovXG4rXHRcdFx0ZG11eC1cdTAwM2V0eCA9IGRtYV9yZXF1ZXN0X2NoYW4oZGV2LCBcInR4XCIpO1xuK1x0XHRcdGlmIChJU19FUlIoZG11eC1cdTAwM2V0eCkpIHtcbitcdFx0XHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byByZXF1ZXN0IFRYIERNQSBjaGFubmVsOiAlcGVcXG5cIixcbitcdFx0XHRcdFx0ZG11eC1cdTAwM2V0eCk7XG4rXHRcdFx0XHRkbXV4LVx1MDAzZXR4ID0gTlVMTDtcbitcdFx0XHRcdHJldCA9IC1FTlhJTztcbitcdFx0XHR9XG4rXHRcdH1cbiBcdH1cbiBcbi1cdC8qIFJlcXVlc3QgVFggY2hhbm5lbCBpZiBuZWNlc3NhcnkgKi9cbi1cdGlmIChkbXV4LVx1MDAzZXR4KVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGRtdXgtXHUwMDNldHggPSBkbWFfcmVxdWVzdF9jaGFuKGRldiwgXCJ0eFwiKTtcbi1cdGlmIChJU19FUlIoZG11eC1cdTAwM2V0eCkpIHtcbi1cdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIHJlcXVlc3QgVFggRE1BIGNoYW5uZWw6ICVwZVxcblwiLCBkbXV4LVx1MDAzZXR4KTtcbi1cdFx0ZG11eC1cdTAwM2V0eCA9IE5VTEw7XG4rXHRpZiAocmV0KVxuIFx0XHRiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoZGV2KTtcbi1cdFx0cmV0dXJuIC1FTlhJTztcbi1cdH1cbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4O1xuLVx0aW50IHJldCwgcGNfYWNrX2lycSwgaTtcbitcdGludCByZXQsIGk7XG4gXHR1bnNpZ25lZCBpbnQgYml0O1xuK1x0Ym9vbCBwY19zdGF0ZTtcbiBcbiBcdGRtdXggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRtdXgpLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghZG11eClcbkBAIC03ODAsOSArODg2LDkgQEAgc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKGRtdXgtXHUwMDNlcGNfaXJxIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZG11eC1cdTAwM2VwY19pcnE7XG4gXG4tXHRwY19hY2tfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgXCJwYy1hY2tcIik7XG4tXHRpZiAocGNfYWNrX2lycSBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHBjX2Fja19pcnE7XG4rXHRkbXV4LVx1MDAzZXBjX2Fja19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCBcInBjLWFja1wiKTtcbitcdGlmIChkbXV4LVx1MDAzZXBjX2Fja19pcnEgXHUwMDNjIDApXG4rXHRcdHJldHVybiBkbXV4LVx1MDAzZXBjX2Fja19pcnE7XG4gXG4gXHRkbXV4LVx1MDAzZXBjID0gZGV2bV9xY29tX3NtZW1fc3RhdGVfZ2V0KGRldiwgXCJwY1wiLCBcdTAwMjZiaXQpO1xuIFx0aWYgKElTX0VSUihkbXV4LVx1MDAzZXBjKSlcbkBAIC03OTksNiArOTA1LDkgQEAgc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZkbXV4LVx1MDAzZXBjX3dhaXQpO1xuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmRtdXgtXHUwMDNlcGNfYWNrX2NvbXBsZXRpb24pO1xuIFx0Y29tcGxldGVfYWxsKFx1MDAyNmRtdXgtXHUwMDNlcGNfYWNrX2NvbXBsZXRpb24pO1xuK1x0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZkbXV4LVx1MDAzZXR4X2xvY2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNmRtdXgtXHUwMDNldHhfd2FrZXVwX3dvcmssIGJhbV9kbXV4X3R4X3dha2V1cF93b3JrKTtcbkBAIC04MTcsMzEgKzkyNiw0MCBAQCBzdGF0aWMgaW50IGJhbV9kbXV4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZChkZXYpO1xuIFx0cG1fcnVudGltZV9lbmFibGUoZGV2KTtcbiBcbi1cdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBwY19hY2tfaXJxLCBOVUxMLCBiYW1fZG11eF9wY19hY2tfaXJxLFxuLVx0XHRcdFx0XHRJUlFGX09ORVNIT1QsIE5VTEwsIGRtdXgpO1xuK1x0cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGRtdXgtXHUwMDNlcGNfYWNrX2lycSwgTlVMTCxcbitcdFx0XHRcdFx0YmFtX2RtdXhfcGNfYWNrX2lycSxcbitcdFx0XHRcdFx0SVJRRl9PTkVTSE9UIHwgSVJRRl9OT19BVVRPRU4sXG4rXHRcdFx0XHRcdE5VTEwsIGRtdXgpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfZGlzYWJsZV9wbTtcbiBcbiBcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBkbXV4LVx1MDAzZXBjX2lycSwgTlVMTCwgYmFtX2RtdXhfcGNfaXJxLFxuLVx0XHRcdFx0XHRJUlFGX09ORVNIT1QsIE5VTEwsIGRtdXgpO1xuK1x0XHRcdFx0XHRJUlFGX09ORVNIT1QgfCBJUlFGX05PX0FVVE9FTiwgTlVMTCwgZG11eCk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIGVycl9kaXNhYmxlX3BtO1xuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4gXHRyZXQgPSBpcnFfZ2V0X2lycWNoaXBfc3RhdGUoZG11eC1cdTAwM2VwY19pcnEsIElSUUNISVBfU1RBVEVfTElORV9MRVZFTCxcbi1cdFx0XHRcdCAgICBcdTAwMjZkbXV4LVx1MDAzZXBjX3N0YXRlKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gZXJyX2Rpc2FibGVfcG07XG4rXHRcdFx0XHQgICAgXHUwMDI2cGNfc3RhdGUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1x0fVxuIFxuIFx0LyogQ2hlY2sgaWYgcmVtb3RlIGZpbmlzaGVkIGluaXRpYWxpemF0aW9uIGJlZm9yZSB1cyAqL1xuLVx0aWYgKGRtdXgtXHUwMDNlcGNfc3RhdGUpIHtcbi1cdFx0aWYgKGJhbV9kbXV4X3Bvd2VyX29uKGRtdXgpKVxuLVx0XHRcdGJhbV9kbXV4X3BjX2FjayhkbXV4KTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcbi1cdH1cbitcdGJhbV9kbXV4X2hhbmRsZV9wYyhkbXV4LCBwY19zdGF0ZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcbitcdC8qIFN0YXJ0IGhhbmRsaW5nIHN0YXRlIGNoYW5nZXMgYWZ0ZXIgdGhlIGluaXRpYWwgc3RhdGUgaXMgcHJvY2Vzc2VkLiAqL1xuK1x0ZW5hYmxlX2lycShkbXV4LVx1MDAzZXBjX2Fja19pcnEpO1xuK1x0ZW5hYmxlX2lycShkbXV4LVx1MDAzZXBjX2lycSk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbitlcnJfcG93ZXJfb2ZmOlxuK1x0bXV0ZXhfbG9jayhcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuK1x0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4gZXJyX2Rpc2FibGVfcG06XG4gXHRwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTtcbiBcdHBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoZGV2KTtcbkBAIC04NzIsMTIgKzk5MCwxNiBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChkZXYpO1xuIFxuIFx0LyogVHJ5IHRvIHdhaXQgZm9yIHJlbW90ZSBzaWRlIHRvIGRyb3AgcG93ZXIgdm90ZSAqL1xuLVx0aWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoZG11eC1cdTAwM2VwY193YWl0LCAhZG11eC1cdTAwM2VyeCwgQkFNX0RNVVhfUkVNT1RFX1RJTUVPVVQpKVxuK1x0aWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoZG11eC1cdTAwM2VwY193YWl0LCAhUkVBRF9PTkNFKGRtdXgtXHUwMDNlcngpLFxuK1x0XHRcdFx0QkFNX0RNVVhfUkVNT1RFX1RJTUVPVVQpKVxuIFx0XHRkZXZfZXJyKGRldiwgXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgcmVtb3RlIHNpZGUgdG8gc3VzcGVuZFxcblwiKTtcbiBcbiBcdC8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNsZWFuZWQgdXAgYmVmb3JlIHdlIHJldHVybiAqL1xuK1x0ZGlzYWJsZV9pcnEoZG11eC1cdTAwM2VwY19hY2tfaXJxKTtcbiBcdGRpc2FibGVfaXJxKGRtdXgtXHUwMDNlcGNfaXJxKTtcbitcdG11dGV4X2xvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiBcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuIFx0YmFtX2RtdXhfZnJlZV9za2JzKGRtdXgtXHUwMDNldHhfc2ticywgRE1BX1RPX0RFVklDRSk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDU6NDAuMTU2NjI3MDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQwNzczMzQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBgcWNvbV9iYW1fZG11eC5jYCwgd2hpY2gsIGZyb20gYSBxdWljayBnbGFuY2UsIHNlZW1zIHRvIGJlIGEgcG93ZXIgbWFuYWdlbWVudCBmaXggZm9yIHRoZSBRdWFsY29tbSBCQU0gRGF0YSBNdWx0aXBsZXhlciBkcml2ZXIuIEl0J3MgdG91Y2hpbmcgbXV0ZXhlcywgSVJRIGhhbmRsZXJzLCBhbmQgcnVudGltZSBzdXNwZW5kL3Jlc3VtZSBmdW5jdGlvbnMuIE15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGNvdWxkIGJlIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBidXQgbGV0J3MgZGl2ZSBkZWVwZXIgYW5kIHRoaW5rIHRoaXMgdGhyb3VnaCBtZXRob2RpY2FsbHkuXG5cbkZpcnN0LCB0aGUgY29yZSBxdWVzdGlvbjogaXMgdGhpcyBkcml2ZXIgKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lPyBUaGF0J3MgdGhlIGNyaXRpY2FsIGZpbHRlciBoZXJlLiBUaGlzIGlzIGEgUXVhbGNvbW0tc3BlY2lmaWMgQkFNIERhdGEgTXVsdGlwbGV4ZXIgZHJpdmVyLCBzbyBJIG5lZWQgdG8gYXNzZXNzIGhvdyBsaWtlbHkgaXQgaXMgdG8gYmUgZW11bGF0ZWQgb3IgZXZlbiB0cmlnZ2VyIGl0cyBjb2RlIHBhdGhzIHdpdGhpbiBhIHZpcnR1YWwgbWFjaGluZS4gVGhpcyBzcGVjaWZpYyBkcml2ZXIgaXMgYHFjb21fYmFtX2RtdXguY2AgYW5kIGlzIGEgcGxhdGZvcm0gZHJpdmVyLlxuXG5NeSBleHBlcmllbmNlIHdpdGggUXVhbGNvbW0gaGFyZHdhcmUgc3VnZ2VzdHMgdGhhdCBkaXJlY3QgZW11bGF0aW9uIG9mIGNvbXBvbmVudHMgbGlrZSBCQU0gRE1BIG9yIFNoYXJlZCBNZW1vcnkgKFNNRU0pIGlzIG9mdGVuIHRyaWNreSBpbiBzdGFuZGFyZCBRRU1VIHVubGVzcyB0aGVyZSdzIGEgdmVyeSBzcGVjaWZpYyBtYWNoaW5lIG1vZGVsIHRoYXQgZXhwbGljaXRseSBpbmNsdWRlcyBpdC4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBpdCdzIGEgKnBsYXRmb3JtKiBkcml2ZXIgZ2l2ZXMgbWUgYSBnbGltbWVyIG9mIGhvcGUuIFBsYXRmb3JtIGRyaXZlcnMgYXJlLCBpbiB0aGVvcnksIGVhc2llciB0byBtYW5pcHVsYXRlIGFuZCBwb3RlbnRpYWxseSBpbnN0YW50aWF0ZSB0aHJvdWdoIHRlY2huaXF1ZXMgbGlrZSBzeXprYWxsZXIuXG5cbkNhbiBzeXprYWxsZXIgY3JlYXRlIGEgXCJmYWtlXCIgcGxhdGZvcm0gZGV2aWNlIHRoYXQgdHJpZ2dlcnMgdGhpcyBkcml2ZXI/IE1heWJlLCB1c2luZyBgc3l6X2dlbl9zeXNmc2Agb3IgYnkgZGlyZWN0bHkgd3JpdGluZyB0byBgL3N5cy9kZXZpY2VzL3BsYXRmb3JtYCBpZiBzdWNoIGEgcGF0aHdheSBleGlzdHMuIEhvd2V2ZXIsIEkga25vdyBwbGF0Zm9ybSBkZXZpY2VzIGFyZSB1c3VhbGx5IGluc3RhbnRpYXRlZCBieSBEZXZpY2UgVHJlZSAoRFQpLlxuXG5UaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGlzIHRoZXJlIGEgRFQgbm9kZSBmb3IgYHFjb21fYmFtX2RtdXhgIHRoYXQgSSBjYW4gdHJ5IHRvIHRyaWdnZXI/IFdpdGhvdXQgYSBzcGVjaWZpYyBgc3l6bGFuZ2AgZGVzY3JpcHRpb24gb3IgYSBzdGFuZGFyZCBEVCBpbmplY3Rpb24gbWVjaGFuaXNtLCBpdCBzZWVtcyB1bmxpa2VseSB0aGF0IEkgY2FuIGp1c3QgdGhyb3cgaXQgaW4sIGJ1dCBJIHNob3VsZCBjaGVjayBhbmQgbWFrZSBzdXJlIHRoYXQgaXQgZG9lcyByZXF1aXJlIGEgYHFjb20sYmFtLWRtdXhgIGNvbXBhdGlibGUgc3RyaW5nIGluIERULiBNeSBpbnR1aXRpb24gaXMgdGhhdCBpdCB3aWxsIGJlIGRpZmZpY3VsdCB0byBhcmJpdHJhcmlseSBpbmplY3QgRFQgbm9kZXMgdW5sZXNzIGEgc3BlY2lmaWMgZHJpdmVyIGFsbG93cyBmb3IgaXQuXG5cblRoZSBwcm9tcHQsIGhvd2V2ZXIsIGhpZ2hsaWdodHMgYSBjcnVjaWFsIHBvaW50OiBpZiB0aGUgcGF0Y2ggb25seSBhZmZlY3RzIGNvZGUgdGhhdCdzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6YXRpb24sIHRoZW4gSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBDb252ZXJzZWx5LCBpZiBpdCB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgSSBzaG91bGQgdmVyaWZ5IGV4ZWN1dGFiaWxpdHkgYW5kIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byBrbm93IGlmIHN5emthbGxlciBpcyBhbHJlYWR5IGZ1enppbmcgdGhpcyBkcml2ZXIuIEknbGwgc2VhcmNoIGZvciBleGlzdGluZyBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciBgcWNvbV9iYW1fZG11eGAuIFRoaXMgd2lsbCBiZSBteSBmaXJzdCBzdGVwLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBwcmVkZWZpbmVkIHdheXMgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGRyaXZlciB2aWEgZnV6emluZy4gSWYgc28sIHRoZW4gSSBjYW4gc2VlIHdoYXQgY29kZSBwYXRocyBhcmUgYWxyZWFkeSBiZWluZyBoaXQsIGFuZCBzZWUgaG93IHRoZSBwYXRjaCBpbXBhY3RzIHRoZW0uIElmIG5vdCwgdGhlbiBJIGNhbiBzZWUgaWYgdGhlcmUgaXMgYW55IHBhdGh3YXkgSSBjYW4gYXR0ZW1wdCB0byB0cmlnZ2VyIHdpdGhpbiBRRU1VLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzcyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDU6NTEuNTY0MzYyNzg1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzU0NjExMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWNvbSxiYW0tZG11eFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC0zLS0tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sOjQ6JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcWNvbSxiYW0tZG11eC55YW1sI1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbD0yMz1wcm9wZXJ0aWVzOlxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTI0LSAgY29tcGF0aWJsZTpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbDoyNTogICAgY29uc3Q6IHFjb20sYmFtLWRtdXhcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC0yNi1cXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sPTg2PWV4YW1wbGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwtOTEtICAgICAgICBiYW0tZG11eCB7XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWw6OTI6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJxY29tLGJhbS1kbXV4XFxcIjtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC05My1cXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbXNtODkxNi1tc3MtcGlsLnlhbWw9MTY9cHJvcGVydGllczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbXNtODkxNi1tc3MtcGlsLnlhbWwtMTU0LSAgYmFtLWRtdXg6XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtc204OTE2LW1zcy1waWwueWFtbDoxNTU6ICAgICRyZWY6IC9zY2hlbWFzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwjXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtc204OTE2LW1zcy1waWwueWFtbC0xNTYtICAgIGRlc2NyaXB0aW9uOlxcbi0tXFxuTUFJTlRBSU5FUlM9MjIxNzQ9UzpcXHRNYWludGFpbmVkXFxuTUFJTlRBSU5FUlM6MjIxNzU6RjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbFxcbk1BSU5UQUlORVJTLTIyMTc2LUY6XFx0ZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2k9OTc1PVxcdFxcdFxcdGJhbV9kbXV4OiBiYW0tZG11eCB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTgyMjYuZHRzaTo5NzY6XFx0XFx0XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJxY29tLGJhbS1kbXV4XFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODIyNi5kdHNpLTk3Ny1cXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204OTc0LmR0c2k9MTU4OD1cXHRcXHRcXHRiYW1fZG11eDogYmFtLWRtdXgge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204OTc0LmR0c2k6MTU4OTpcXHRcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcInFjb20sYmFtLWRtdXhcXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204OTc0LmR0c2ktMTU5MC1cXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2k9MTk3Nj1cXHRcXHRcXHRiYW1fZG11eDogYmFtLWRtdXgge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2k6MTk3NzpcXHRcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcInFjb20sYmFtLWRtdXhcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2ktMTk3OC1cXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM5LmR0c2k9MTc1NT1cXHRcXHRcXHRiYW1fZG11eDogYmFtLWRtdXgge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM5LmR0c2k6MTc1NjpcXHRcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcInFjb20sYmFtLWRtdXhcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM5LmR0c2ktMTc1Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jPTEwMTA9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYmFtX2RtdXhfb2ZfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxMDExOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwicWNvbSxiYW0tZG11eFxcXCIgfSxcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xMDEyLVxcdHsgLyogc2VudGluZWwgKi8gfVxcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYz0yMDY3PXN0YXRpYyBpbnQgcTZ2NV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYy0yMjAzLVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmM6MjIwNDpcXHRub2RlID0gb2ZfZ2V0X2NvbXBhdGlibGVfY2hpbGQocGRldi1cXHUwMDNlZGV2Lm9mX25vZGUsIFxcXCJxY29tLGJhbS1kbXV4XFxcIik7XFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYy0yMjA1LVxcdHFwcm9jLVxcdTAwM2ViYW1fZG11eCA9IG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobm9kZSwgTlVMTCwgXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjUzLjIzOTg1MjU5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjQxMzMyMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBhdGNoIEFwcGxpY2FiaWxpdHkgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2ggYW5kIGl0J3MgbG9va2luZyBsaWtlIGEgZGVhZCBlbmQgZm9yIGZ1enppbmcgcHVycG9zZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgY29kZSB3b24ndCBiZSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgcGF0Y2ggdGFyZ2V0cyB0aGUgYHFjb20sYmFtLWRtdXhgIHBsYXRmb3JtIGRyaXZlciwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgc29tZSBhbGFybXMuIFBsYXRmb3JtIGRldmljZXMgYXJlIHR5cGljYWxseSBpbnN0YW50aWF0ZWQgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIGFuZCBpbiB0aGUgZGVmYXVsdCBRRU1VIHNldHVwIHVzZWQgYnkgc3l6a2FsbGVyICh3aGljaCBpcyB4ODZfNjQpLCB0aGlzIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGUgd29uJ3QgYmUgcHJlc2VudC4gRXZlbiBpZiB3ZSdyZSBvbiBBUk02NCBRRU1VLCBsaWtlIGEgYHZpcnRgIG1hY2hpbmUsIGl0J3MgaGlnaGx5IHVubGlrZWx5IHRoYXQgdGhpcyBzcGVjaWZpYyBub2RlIGhhcyBiZWVuIGV4cGxpY2l0bHkgYWRkZWQuXG5cblRoZSByZWFsIGtpY2tlciBpcyB0aGF0IHRoaXMgZHJpdmVyIGludGVyYWN0cyB3aXRoIFF1YWxjb21tLXNwZWNpZmljIGhhcmR3YXJlOiB0aGUgU01FTSAoc2hhcmVkIG1lbW9yeSkgc3RhdGUgdXNpbmcgYHFjb21fc21lbV9zdGF0ZV9nZXRgIGFuZCB0aGUgRE1BIGVuZ2luZSB3aXRoIGBkbWFfcmVxdWVzdF9jaGFuYC4gTmVpdGhlciBvZiB0aG9zZSBpcyBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIFRoaXMgbWVhbnMgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgd2l0aGluIGBxY29tX2JhbV9kbXV4LmNgIGFyZSBzaW1wbHkgaW5hY2Nlc3NpYmxlIGluIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIHRob3NlIHVzZWQgYnkgR0NFIG9yIFFFTVUuXG5cbkknbSBub3cgdGhpbmtpbmcgYWJvdXQgd2F5cyB0byB0cmlnZ2VyIHRoaXMuIFRoZSBkcml2ZXIgcmVxdWlyZXMgYWNjZXNzIHRvIFNNRU0gc3RhdGVzIFwicGNcIiBhbmQgXCJwYy1hY2ssXCIgYXMgd2VsbCBhcyBcInBjXCIgYW5kIFwicGMtYWNrXCIgSVJRcy4gVGhlIGxhY2sgb2YgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgc3l6a2FsbGVyJ3MgY3VycmVudCBsaW1pdGF0aW9ucyB3aXRoIGVtdWxhdGluZyB0aGF0IGxlYWRzIG1lIHRvIGJlbGlldmUgdGhpcyBkcml2ZXIgd2lsbCBuZXZlciBzdWNjZXNzZnVsbHkgcHJvYmUsIGFuZCBpdHMgcnVudGltZSBQTS9JUlEgaGFuZGxlcnMgd2lsbCBuZXZlciBnZXQgZXhlY3V0ZWQuXG5cbkknbSBjb25maXJtaW5nIHRoYXQgbXkgYXNzZXNzbWVudCBmb2xsb3dzIHRoZSBndWlkZWxpbmVzOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCBhbHNvIGFwcGxpZXMgdG8gY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyAoUXVhbGNvbW0pIFNvQyBkcml2ZXIgdGhhdCBkZXBlbmRzIG9uIHNwZWNpZmljIGhhcmR3YXJlIChCQU0gRE1BLCBTTUVNKSB0aGF0IGlzbid0IGVtdWxhdGVkIGluIHRoZSBkZWZhdWx0IHNldHVwLlxuXG5JJ3ZlIHF1aWNrbHkgY2hlY2tlZCB0aGF0IHRoZSBvbmx5IGZpbGUgY2hhbmdlZCBpcyBgZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNgLlxuXG5UaGVyZWZvcmUsIEknbGwgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGFuZCBkb2N1bWVudCB0aGUgcmF0aW9uYWxlOiB0aGUgcGF0Y2ggaXMgaW5hY2Nlc3NpYmxlIHdpdGhpbiBhIHR5cGljYWwgZnV6emluZyBlbnZpcm9ubWVudCBkdWUgdG8gaXRzIGRlcGVuZGVuY2Ugb24gdW4tZW11bGF0ZWQsIFF1YWxjb21tLXNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzU3LCJPdXRwdXRUb2tlbnMiOjEwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NjowMy44ODExODcyMjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIFF1YWxjb21tIEJBTSBEYXRhIE11bHRpcGxleGVyIChxY29tX2JhbV9kbXV4KSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBkcml2ZXIuIEl0IHJlbGllcyBvbiBoYXJkd2FyZS1zcGVjaWZpYyBmZWF0dXJlcyBsaWtlIFF1YWxjb21tIFNNRU0gYW5kIEJBTSBETUEgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBRdWFsY29tbSBCQU0gRGF0YSBNdWx0aXBsZXhlciAocWNvbV9iYW1fZG11eCkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTb0MgZHJpdmVyLiBJdCByZWxpZXMgb24gaGFyZHdhcmUtc3BlY2lmaWMgZmVhdHVyZXMgbGlrZSBRdWFsY29tbSBTTUVNIGFuZCBCQU0gRE1BIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6MDMuODgxMjA5Njk5WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow5jvwp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 09:01:58 +0000 UTC FinishedAt: 2026-08-22 09:46:05 +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+CgkJCTx0ZD4yMDI2LzA4LzIyIDA5OjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgUXVhbGNvbW0gQkFNIERhdGEgTXVsdGlwbGV4ZXIgKHFjb21fYmFtX2RtdXgpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIGRyaXZlci4gSXQgcmVsaWVzIG9uIGhhcmR3YXJlLXNwZWNpZmljIGZlYXR1cmVzIGxpa2UgUXVhbGNvbW0gU01FTSBhbmQgQkFNIERNQSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1NzU5MDY0ZTFhNTg4MDA0YmM5Y2MyYmMzOGY1YjhhNTMyOTRhZGZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDk6NDU6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xuaW5kZXggY2M2YWNlOGQ2NDM3MS4uMzc1NmNkYjdhMzE5OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xuQEAgLTYsMTIgJiM0Mzs2LDE0IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXRvbWljLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hZW5naW5lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGxhdGZvcm1fZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbkBAIC02NCwxNSAmIzQzOzY2LDI0IEBAIHN0cnVjdCBiYW1fZG11eF9za2JfZG1hIHtcbiBcdGRtYV9hZGRyX3QgYWRkcjtcbiB9O1xuIFxuJiM0MztlbnVtIGJhbV9kbXV4X3BjX3ZvdGUge1xuJiM0MztcdEJBTV9ETVVYX1BDX1ZPVEVfSU5BQ1RJVkUsIC8qIHBjX3ZvdGUgPSBmYWxzZSAqL1xuJiM0MztcdEJBTV9ETVVYX1BDX1ZPVEVfUEVORElORywgLyogcGNfdm90ZSA9IHRydWUsIHdhaXRpbmcgZm9yIEFDSyAqL1xuJiM0MztcdEJBTV9ETVVYX1BDX1ZPVEVfQUNLRUQsIC8qIHBjX3ZvdGUgPSB0cnVlLCBBQ0sgcmVjZWl2ZWQgKi9cbiYjNDM7XHRCQU1fRE1VWF9QQ19WT1RFX0RPV05fUEVORElORywgLyogcGMgPSBmYWxzZSB3aGlsZSBob3N0IHZvdGUgYWN0aXZlICovXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCBiYW1fZG11eCB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4gXG4tXHRpbnQgcGNfaXJxO1xuJiM0MztcdGludCBwY19pcnEsIHBjX2Fja19pcnE7XG4gXHRib29sIHBjX3N0YXRlLCBwY19hY2tfc3RhdGU7XG4gXHRzdHJ1Y3QgcWNvbV9zbWVtX3N0YXRlICpwYywgKnBjX2FjaztcbiBcdHUzMiBwY19tYXNrLCBwY19hY2tfbWFzaztcbiBcdHdhaXRfcXVldWVfaGVhZF90IHBjX3dhaXQ7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBwY19hY2tfY29tcGxldGlvbjtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggcG93ZXJfbG9jazsgLyogUHJvdGVjdCBwb3dlci1jb250cm9sIHN0YXRlICovXG4mIzQzO1x0ZW51bSBiYW1fZG11eF9wY192b3RlIHBjX3ZvdGU7XG4gXG4gXHRzdHJ1Y3QgZG1hX2NoYW4gKnJ4LCAqdHg7XG4gXHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSByeF9za2JzW0JBTV9ETVVYX05VTV9TS0JdO1xuQEAgLTk5LDYgJiM0MzsxMTAsMjQgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfdm90ZShzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIGJvb2wgZW5hYmxlKVxuIFx0XHRcdFx0ICAgIGVuYWJsZSA/IGRtdXgtXHUwMDNlcGNfbWFzayA6IDApO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfdm90ZV9sb2NrZWQoc3RydWN0IGJhbV9kbXV4ICpkbXV4LCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGVuYWJsZSlcbiYjNDM7XHRcdGRtdXgtXHUwMDNlcGNfdm90ZSA9IEJBTV9ETVVYX1BDX1ZPVEVfUEVORElORztcbiYjNDM7XHRlbHNlIGlmIChkbXV4LVx1MDAzZXBjX3ZvdGUgIT0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcpXG4mIzQzO1x0XHRkbXV4LVx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0lOQUNUSVZFO1xuJiM0MztcdGJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgZW5hYmxlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfdm90ZV9wcm90ZWN0ZWQoc3RydWN0IGJhbV9kbXV4ICpkbXV4LCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiYjNDM7XHRiYW1fZG11eF9wY192b3RlX2xvY2tlZChkbXV4LCBlbmFibGUpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX2FjayhzdHJ1Y3QgYmFtX2RtdXggKmRtdXgpXG4ge1xuIFx0cWNvbV9zbWVtX3N0YXRlX3VwZGF0ZV9iaXRzKGRtdXgtXHUwMDNlcGNfYWNrLCBkbXV4LVx1MDAzZXBjX2Fja19tYXNrLFxuQEAgLTY1NSw2ICYjNDM7Njg0LDggQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfZnJlZV9za2JzKHN0cnVjdCBiYW1fZG11eF9za2JfZG1hIHNrYnNbXSxcbiBcbiBzdGF0aWMgdm9pZCBiYW1fZG11eF9wb3dlcl9vZmYoc3RydWN0IGJhbV9kbXV4ICpkbXV4KVxuIHtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4mIzQzO1xuIFx0aWYgKGRtdXgtXHUwMDNldHgpIHtcbiBcdFx0ZG1hZW5naW5lX3Rlcm1pbmF0ZV9zeW5jKGRtdXgtXHUwMDNldHgpO1xuIFx0XHRkbWFfcmVsZWFzZV9jaGFubmVsKGRtdXgtXHUwMDNldHgpO1xuQEAgLTY3MCwxMCAmIzQzOzcwMSwxNSBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9wb3dlcl9vZmYoc3RydWN0IGJhbV9kbXV4ICpkbXV4KVxuIFx0YmFtX2RtdXhfZnJlZV9za2JzKGRtdXgtXHUwMDNlcnhfc2ticywgRE1BX0ZST01fREVWSUNFKTtcbiB9XG4gXG4tc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuJiM0MztzdGF0aWMgYm9vbCBiYW1fZG11eF9oYW5kbGVfcGMoc3RydWN0IGJhbV9kbXV4ICpkbXV4LCBib29sIG5ld19zdGF0ZSlcbiB7XG4tXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkYXRhO1xuLVx0Ym9vbCBuZXdfc3RhdGUgPSAhZG11eC1cdTAwM2VwY19zdGF0ZTtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChuZXdfc3RhdGUgPT0gZG11eC1cdTAwM2VwY19zdGF0ZSkge1xuJiM0MztcdFx0aWYgKG5ld19zdGF0ZSBcdTAwMjZcdTAwMjYgZG11eC1cdTAwM2VwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfRE9XTl9QRU5ESU5HKVxuJiM0MztcdFx0XHRkbXV4LVx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0FDS0VEO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdH1cbiBcbiBcdGRldl9kYmcoZG11eC1cdTAwM2VkZXYsIFwmIzM0O3BjOiAldVxcblwmIzM0OywgbmV3X3N0YXRlKTtcbiBcbkBAIC02ODIsMTMgJiM0Mzs3MTgsNDEgQEAgc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuIFx0XHRcdGJhbV9kbXV4X3BjX2FjayhkbXV4KTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcbiYjNDM7XHR9IGVsc2UgaWYgKGRtdXgtXHUwMDNlcGNfdm90ZSA9PSBCQU1fRE1VWF9QQ19WT1RFX0FDS0VEKSB7XG4mIzQzO1x0XHQvKiBUaGUgbW9kZW0gbXVzdCBrZWVwIHRoZSBETUEgZW5naW5lIG9uIHVudGlsIHBjIGlzIGFja2VkLiAqL1xuJiM0MztcdFx0ZG11eC1cdTAwM2VwY192b3RlID0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkc7XG4mIzQzO1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRtdXgtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtyZWZ1c2luZyBwYyBkb3duIHdoaWxlIGhvc3Qgdm90ZSBpcyBhY3RpdmVcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fSBlbHNlIHtcbiBcdFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xuIFx0XHRiYW1fZG11eF9wY19hY2soZG11eCk7XG4mIzQzO1x0XHRkbXV4LVx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0lOQUNUSVZFO1xuIFx0fVxuIFxuLVx0ZG11eC1cdTAwM2VwY19zdGF0ZSA9IG5ld19zdGF0ZTtcbi1cdHdha2VfdXBfYWxsKFx1MDAyNmRtdXgtXHUwMDNlcGNfd2FpdCk7XG4mIzQzO1x0V1JJVEVfT05DRShkbXV4LVx1MDAzZXBjX3N0YXRlLCBuZXdfc3RhdGUpO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkYXRhO1xuJiM0MztcdGJvb2wgbmV3X3N0YXRlLCB3YWtlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiYjNDM7XHRyZXQgPSBpcnFfZ2V0X2lycWNoaXBfc3RhdGUoZG11eC1cdTAwM2VwY19pcnEsIElSUUNISVBfU1RBVEVfTElORV9MRVZFTCxcbiYjNDM7XHRcdFx0XHQgICAgXHUwMDI2bmV3X3N0YXRlKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiYjNDM7XHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZG11eC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byByZWFkIHBjIHN0YXRlOiAlZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XHRcdHJldHVybiBJUlFfSEFORExFRDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHdha2UgPSBiYW1fZG11eF9oYW5kbGVfcGMoZG11eCwgbmV3X3N0YXRlKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiYjNDM7XHRpZiAod2FrZSlcbiYjNDM7XHRcdHdha2VfdXBfYWxsKFx1MDAyNmRtdXgtXHUwMDNlcGNfd2FpdCk7XG4gXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuQEAgLTY5Niw5ICYjNDM7NzYwLDMwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBiYW1fZG11eF9wY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcbiBzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfYWNrX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRhdGE7XG4mIzQzO1x0Ym9vbCBuZXdfc3RhdGUsIHdha2UgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0ZGV2X2RiZyhkbXV4LVx1MDAzZWRldiwgXCYjMzQ7cGMgYWNrXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LyogUHJvY2VzcyBhbiBlYXJsaWVyIHBjIGVkZ2UgYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGhvc3Qtdm90ZSBhY2suICovXG4mIzQzO1x0c3luY2hyb25pemVfaXJxKGRtdXgtXHUwMDNlcGNfaXJxKTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4mIzQzO1x0cmV0ID0gaXJxX2dldF9pcnFjaGlwX3N0YXRlKGRtdXgtXHUwMDNlcGNfaXJxLCBJUlFDSElQX1NUQVRFX0xJTkVfTEVWRUwsXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNm5ld19zdGF0ZSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4mIzQzO1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRtdXgtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gcmVhZCBwYyBzdGF0ZTogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3YWtlID0gYmFtX2RtdXhfaGFuZGxlX3BjKGRtdXgsIG5ld19zdGF0ZSk7XG4mIzQzO1x0aWYgKG5ld19zdGF0ZSBcdTAwMjZcdTAwMjYgZG11eC1cdTAwM2VwY19zdGF0ZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgZG11eC1cdTAwM2VwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfUEVORElORylcbiYjNDM7XHRcdGRtdXgtXHUwMDNlcGNfdm90ZSA9IEJBTV9ETVVYX1BDX1ZPVEVfQUNLRUQ7XG4gXHRjb21wbGV0ZV9hbGwoXHUwMDI2ZG11eC1cdTAwM2VwY19hY2tfY29tcGxldGlvbik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4mIzQzO1x0aWYgKHdha2UpXG4mIzQzO1x0XHR3YWtlX3VwX2FsbChcdTAwMjZkbXV4LVx1MDAzZXBjX3dhaXQpO1xuIFxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbkBAIC03MDYsOSAmIzQzOzc5MSwyMSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfYWNrX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuIHN0YXRpYyBpbnQgYmFtX2RtdXhfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiYjNDM7XHRib29sIHdha2UgPSBmYWxzZTtcbiBcbiBcdGRldl9kYmcoZGV2LCBcJiMzNDtydW50aW1lIHN1c3BlbmRcXG5cJiMzNDspO1xuLVx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdHtcbiYjNDM7XHRcdGd1YXJkKG11dGV4KShcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuJiM0MztcbiYjNDM7XHRcdGJhbV9kbXV4X3BjX3ZvdGVfbG9ja2VkKGRtdXgsIGZhbHNlKTtcbiYjNDM7XHRcdGlmIChkbXV4LVx1MDAzZXBjX3ZvdGUgPT0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcpXG4mIzQzO1x0XHRcdHdha2UgPSBiYW1fZG11eF9oYW5kbGVfcGMoZG11eCwgZmFsc2UpO1xuJiM0MztcdFx0ZWxzZSBpZiAoIWRtdXgtXHUwMDNlcGNfc3RhdGUpXG4mIzQzO1x0XHRcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKHdha2UpXG4mIzQzO1x0XHR3YWtlX3VwX2FsbChcdTAwMjZkbXV4LVx1MDAzZXBjX3dhaXQpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTcxNiw2ICYjNDM7ODEzLDcgQEAgc3RhdGljIGludCBiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYmFtX2RtdXhfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuJiM0MztcdGludCByZXQgPSAwO1xuIFxuIFx0ZGV2X2RiZyhkZXYsIFwmIzM0O3J1bnRpbWUgcmVzdW1lXFxuXCYjMzQ7KTtcbiBcbkBAIC03MjQsNTAgJiM0Mzs4MjIsNTggQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBiYW1fZG11eF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdFx0XHRcdCBCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpXG4gXHRcdHJldHVybiAtRVRJTUVET1VUO1xuIFxuJiM0MztcdHN5bmNocm9uaXplX2lycShkbXV4LVx1MDAzZXBjX2lycSk7XG4mIzQzO1xuIFx0LyogVm90ZSBmb3IgcG93ZXIgc3RhdGUgKi9cbi1cdGJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgdHJ1ZSk7XG4mIzQzO1x0YmFtX2RtdXhfcGNfdm90ZV9wcm90ZWN0ZWQoZG11eCwgdHJ1ZSk7XG4gXG4gXHQvKiBXYWl0IGZvciBhY2sgKi9cbiBcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmRtdXgtXHUwMDNlcGNfYWNrX2NvbXBsZXRpb24sXG4gXHRcdFx0XHRcdCBCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpIHtcbi1cdFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XG4mIzQzO1x0XHRiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoZGV2KTtcbiBcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4gXHR9XG4gXG4mIzQzO1x0c3luY2hyb25pemVfaXJxKGRtdXgtXHUwMDNlcGNfaXJxKTtcbiYjNDM7XG4gXHQvKiBXYWl0IHVudGlsIHdlJiMzOTtyZSB1cCAqL1xuLVx0aWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoZG11eC1cdTAwM2VwY193YWl0LCBkbXV4LVx1MDAzZXBjX3N0YXRlLFxuJiM0MztcdGlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtXHUwMDNlcGNfd2FpdCwgUkVBRF9PTkNFKGRtdXgtXHUwMDNlcGNfc3RhdGUpLFxuIFx0XHRcdFx0QkFNX0RNVVhfUkVNT1RFX1RJTUVPVVQpKSB7XG4tXHRcdGJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgZmFsc2UpO1xuJiM0MztcdFx0YmFtX2RtdXhfcnVudGltZV9zdXNwZW5kKGRldik7XG4gXHRcdHJldHVybiAtRVRJTUVET1VUO1xuIFx0fVxuIFxuLVx0LyogRW5zdXJlIHRoYXQgd2UgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXG4tXHRpZiAoIWRtdXgtXHUwMDNlcngpIHtcbi1cdFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XG4tXHRcdHJldHVybiAtRU5YSU87XG4mIzQzO1x0e1xuJiM0MztcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4mIzQzO1xuJiM0MztcdFx0LyogRW5zdXJlIHRoYXQgd2UgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXG4mIzQzO1x0XHRpZiAoIWRtdXgtXHUwMDNlcngpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVOWElPO1xuJiM0MztcdFx0fSBlbHNlIGlmICghZG11eC1cdTAwM2V0eCkge1xuJiM0MztcdFx0XHQvKiBSZXF1ZXN0IFRYIGNoYW5uZWwgaWYgbmVjZXNzYXJ5ICovXG4mIzQzO1x0XHRcdGRtdXgtXHUwMDNldHggPSBkbWFfcmVxdWVzdF9jaGFuKGRldiwgXCYjMzQ7dHhcJiMzNDspO1xuJiM0MztcdFx0XHRpZiAoSVNfRVJSKGRtdXgtXHUwMDNldHgpKSB7XG4mIzQzO1x0XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byByZXF1ZXN0IFRYIERNQSBjaGFubmVsOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRkbXV4LVx1MDAzZXR4KTtcbiYjNDM7XHRcdFx0XHRkbXV4LVx1MDAzZXR4ID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRyZXQgPSAtRU5YSU87XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiBcdH1cbiBcbi1cdC8qIFJlcXVlc3QgVFggY2hhbm5lbCBpZiBuZWNlc3NhcnkgKi9cbi1cdGlmIChkbXV4LVx1MDAzZXR4KVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGRtdXgtXHUwMDNldHggPSBkbWFfcmVxdWVzdF9jaGFuKGRldiwgXCYjMzQ7dHhcJiMzNDspO1xuLVx0aWYgKElTX0VSUihkbXV4LVx1MDAzZXR4KSkge1xuLVx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlcXVlc3QgVFggRE1BIGNoYW5uZWw6ICVwZVxcblwmIzM0OywgZG11eC1cdTAwM2V0eCk7XG4tXHRcdGRtdXgtXHUwMDNldHggPSBOVUxMO1xuJiM0MztcdGlmIChyZXQpXG4gXHRcdGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChkZXYpO1xuLVx0XHRyZXR1cm4gLUVOWElPO1xuLVx0fVxuIFxuLVx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4O1xuLVx0aW50IHJldCwgcGNfYWNrX2lycSwgaTtcbiYjNDM7XHRpbnQgcmV0LCBpO1xuIFx0dW5zaWduZWQgaW50IGJpdDtcbiYjNDM7XHRib29sIHBjX3N0YXRlO1xuIFxuIFx0ZG11eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqZG11eCksIEdGUF9LRVJORUwpO1xuIFx0aWYgKCFkbXV4KVxuQEAgLTc4MCw5ICYjNDM7ODg2LDkgQEAgc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKGRtdXgtXHUwMDNlcGNfaXJxIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZG11eC1cdTAwM2VwY19pcnE7XG4gXG4tXHRwY19hY2tfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgXCYjMzQ7cGMtYWNrXCYjMzQ7KTtcbi1cdGlmIChwY19hY2tfaXJxIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcGNfYWNrX2lycTtcbiYjNDM7XHRkbXV4LVx1MDAzZXBjX2Fja19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCBcJiMzNDtwYy1hY2tcJiMzNDspO1xuJiM0MztcdGlmIChkbXV4LVx1MDAzZXBjX2Fja19pcnEgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gZG11eC1cdTAwM2VwY19hY2tfaXJxO1xuIFxuIFx0ZG11eC1cdTAwM2VwYyA9IGRldm1fcWNvbV9zbWVtX3N0YXRlX2dldChkZXYsIFwmIzM0O3BjXCYjMzQ7LCBcdTAwMjZiaXQpO1xuIFx0aWYgKElTX0VSUihkbXV4LVx1MDAzZXBjKSlcbkBAIC03OTksNiAmIzQzOzkwNSw5IEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2ZG11eC1cdTAwM2VwY193YWl0KTtcbiBcdGluaXRfY29tcGxldGlvbihcdTAwMjZkbXV4LVx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcbiBcdGNvbXBsZXRlX2FsbChcdTAwMjZkbXV4LVx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcbiYjNDM7XHRyZXQgPSBkZXZtX211dGV4X2luaXQoZGV2LCBcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2ZG11eC1cdTAwM2V0eF9sb2NrKTtcbiBcdElOSVRfV09SSyhcdTAwMjZkbXV4LVx1MDAzZXR4X3dha2V1cF93b3JrLCBiYW1fZG11eF90eF93YWtldXBfd29yayk7XG5AQCAtODE3LDMxICYjNDM7OTI2LDQwIEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKGRldik7XG4gXHRwbV9ydW50aW1lX2VuYWJsZShkZXYpO1xuIFxuLVx0cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIHBjX2Fja19pcnEsIE5VTEwsIGJhbV9kbXV4X3BjX2Fja19pcnEsXG4tXHRcdFx0XHRcdElSUUZfT05FU0hPVCwgTlVMTCwgZG11eCk7XG4mIzQzO1x0cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGRtdXgtXHUwMDNlcGNfYWNrX2lycSwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdGJhbV9kbXV4X3BjX2Fja19pcnEsXG4mIzQzO1x0XHRcdFx0XHRJUlFGX09ORVNIT1QgfCBJUlFGX05PX0FVVE9FTixcbiYjNDM7XHRcdFx0XHRcdE5VTEwsIGRtdXgpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfZGlzYWJsZV9wbTtcbiBcbiBcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBkbXV4LVx1MDAzZXBjX2lycSwgTlVMTCwgYmFtX2RtdXhfcGNfaXJxLFxuLVx0XHRcdFx0XHRJUlFGX09ORVNIT1QsIE5VTEwsIGRtdXgpO1xuJiM0MztcdFx0XHRcdFx0SVJRRl9PTkVTSE9UIHwgSVJRRl9OT19BVVRPRU4sIE5VTEwsIGRtdXgpO1xuIFx0aWYgKHJldClcbi1cdFx0Z290byBlcnJfZGlzYWJsZV9wbTtcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiBcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4gXHRyZXQgPSBpcnFfZ2V0X2lycWNoaXBfc3RhdGUoZG11eC1cdTAwM2VwY19pcnEsIElSUUNISVBfU1RBVEVfTElORV9MRVZFTCxcbi1cdFx0XHRcdCAgICBcdTAwMjZkbXV4LVx1MDAzZXBjX3N0YXRlKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gZXJyX2Rpc2FibGVfcG07XG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNnBjX3N0YXRlKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiYjNDM7XHRcdGdvdG8gZXJyX3Bvd2VyX29mZjtcbiYjNDM7XHR9XG4gXG4gXHQvKiBDaGVjayBpZiByZW1vdGUgZmluaXNoZWQgaW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzICovXG4tXHRpZiAoZG11eC1cdTAwM2VwY19zdGF0ZSkge1xuLVx0XHRpZiAoYmFtX2RtdXhfcG93ZXJfb24oZG11eCkpXG4tXHRcdFx0YmFtX2RtdXhfcGNfYWNrKGRtdXgpO1xuLVx0XHRlbHNlXG4tXHRcdFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xuLVx0fVxuJiM0MztcdGJhbV9kbXV4X2hhbmRsZV9wYyhkbXV4LCBwY19zdGF0ZSk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qIFN0YXJ0IGhhbmRsaW5nIHN0YXRlIGNoYW5nZXMgYWZ0ZXIgdGhlIGluaXRpYWwgc3RhdGUgaXMgcHJvY2Vzc2VkLiAqL1xuJiM0MztcdGVuYWJsZV9pcnEoZG11eC1cdTAwM2VwY19hY2tfaXJxKTtcbiYjNDM7XHRlbmFibGVfaXJxKGRtdXgtXHUwMDNlcGNfaXJxKTtcbiBcbiBcdHJldHVybiAwO1xuIFxuJiM0MztlcnJfcG93ZXJfb2ZmOlxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiYjNDM7XHRiYW1fZG11eF9wb3dlcl9vZmYoZG11eCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4gZXJyX2Rpc2FibGVfcG06XG4gXHRwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTtcbiBcdHBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoZGV2KTtcbkBAIC04NzIsMTIgJiM0Mzs5OTAsMTYgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTtcbiBcbiBcdC8qIFRyeSB0byB3YWl0IGZvciByZW1vdGUgc2lkZSB0byBkcm9wIHBvd2VyIHZvdGUgKi9cbi1cdGlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtXHUwMDNlcGNfd2FpdCwgIWRtdXgtXHUwMDNlcngsIEJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSlcbiYjNDM7XHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChkbXV4LVx1MDAzZXBjX3dhaXQsICFSRUFEX09OQ0UoZG11eC1cdTAwM2VyeCksXG4mIzQzO1x0XHRcdFx0QkFNX0RNVVhfUkVNT1RFX1RJTUVPVVQpKVxuIFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlbW90ZSBzaWRlIHRvIHN1c3BlbmRcXG5cJiMzNDspO1xuIFxuIFx0LyogTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY2xlYW5lZCB1cCBiZWZvcmUgd2UgcmV0dXJuICovXG4mIzQzO1x0ZGlzYWJsZV9pcnEoZG11eC1cdTAwM2VwY19hY2tfaXJxKTtcbiBcdGRpc2FibGVfaXJxKGRtdXgtXHUwMDNlcGNfaXJxKTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4gXHRiYW1fZG11eF9wb3dlcl9vZmYoZG11eCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4gXHRiYW1fZG11eF9mcmVlX3NrYnMoZG11eC1cdTAwM2V0eF9za2JzLCBETUFfVE9fREVWSUNFKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIFF1YWxjb21tIEJBTSBEYXRhIE11bHRpcGxleGVyIChxY29tX2JhbV9kbXV4KSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBkcml2ZXIuIEl0IHJlbGllcyBvbiBoYXJkd2FyZS1zcGVjaWZpYyBmZWF0dXJlcyBsaWtlIFF1YWxjb21tIFNNRU0gYW5kIEJBTSBETUEgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTc1OTA2NGUxYTU4ODAwNGJjOWNjMmJjMzhmNWI4YTUzMjk0YWRmYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDA5OjQ1OjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYwppbmRleCBjYzZhY2U4ZDY0MzcxLi4zNzU2Y2RiN2EzMTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYwpAQCAtNiwxMiAmIzQzOzYsMTQgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2F0b21pYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG9wcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGxldGlvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1tYXBwaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hZW5naW5lLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfYXJwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcG1fcnVudGltZS5oJmd0OwpAQCAtNjQsMTUgJiM0Mzs2NiwyNCBAQCBzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSB7CiAJZG1hX2FkZHJfdCBhZGRyOwogfTsKIAomIzQzO2VudW0gYmFtX2RtdXhfcGNfdm90ZSB7CiYjNDM7CUJBTV9ETVVYX1BDX1ZPVEVfSU5BQ1RJVkUsIC8qIHBjX3ZvdGUgPSBmYWxzZSAqLwomIzQzOwlCQU1fRE1VWF9QQ19WT1RFX1BFTkRJTkcsIC8qIHBjX3ZvdGUgPSB0cnVlLCB3YWl0aW5nIGZvciBBQ0sgKi8KJiM0MzsJQkFNX0RNVVhfUENfVk9URV9BQ0tFRCwgLyogcGNfdm90ZSA9IHRydWUsIEFDSyByZWNlaXZlZCAqLwomIzQzOwlCQU1fRE1VWF9QQ19WT1RFX0RPV05fUEVORElORywgLyogcGMgPSBmYWxzZSB3aGlsZSBob3N0IHZvdGUgYWN0aXZlICovCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBiYW1fZG11eCB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCi0JaW50IHBjX2lycTsKJiM0MzsJaW50IHBjX2lycSwgcGNfYWNrX2lycTsKIAlib29sIHBjX3N0YXRlLCBwY19hY2tfc3RhdGU7CiAJc3RydWN0IHFjb21fc21lbV9zdGF0ZSAqcGMsICpwY19hY2s7CiAJdTMyIHBjX21hc2ssIHBjX2Fja19tYXNrOwogCXdhaXRfcXVldWVfaGVhZF90IHBjX3dhaXQ7CiAJc3RydWN0IGNvbXBsZXRpb24gcGNfYWNrX2NvbXBsZXRpb247CiYjNDM7CXN0cnVjdCBtdXRleCBwb3dlcl9sb2NrOyAvKiBQcm90ZWN0IHBvd2VyLWNvbnRyb2wgc3RhdGUgKi8KJiM0MzsJZW51bSBiYW1fZG11eF9wY192b3RlIHBjX3ZvdGU7CiAKIAlzdHJ1Y3QgZG1hX2NoYW4gKnJ4LCAqdHg7CiAJc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgcnhfc2tic1tCQU1fRE1VWF9OVU1fU0tCXTsKQEAgLTk5LDYgJiM0MzsxMTAsMjQgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfdm90ZShzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIGJvb2wgZW5hYmxlKQogCQkJCSAgICBlbmFibGUgPyBkbXV4LSZndDtwY19tYXNrIDogMCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBiYW1fZG11eF9wY192b3RlX2xvY2tlZChzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2RtdXgtJmd0O3Bvd2VyX2xvY2spOwomIzQzOwomIzQzOwlpZiAoZW5hYmxlKQomIzQzOwkJZG11eC0mZ3Q7cGNfdm90ZSA9IEJBTV9ETVVYX1BDX1ZPVEVfUEVORElORzsKJiM0MzsJZWxzZSBpZiAoZG11eC0mZ3Q7cGNfdm90ZSAhPSBCQU1fRE1VWF9QQ19WT1RFX0RPV05fUEVORElORykKJiM0MzsJCWRtdXgtJmd0O3BjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0lOQUNUSVZFOwomIzQzOwliYW1fZG11eF9wY192b3RlKGRtdXgsIGVuYWJsZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX3ZvdGVfcHJvdGVjdGVkKHN0cnVjdCBiYW1fZG11eCAqZG11eCwgYm9vbCBlbmFibGUpCiYjNDM7ewomIzQzOwltdXRleF9sb2NrKCZhbXA7ZG11eC0mZ3Q7cG93ZXJfbG9jayk7CiYjNDM7CWJhbV9kbXV4X3BjX3ZvdGVfbG9ja2VkKGRtdXgsIGVuYWJsZSk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2RtdXgtJmd0O3Bvd2VyX2xvY2spOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX2FjayhzdHJ1Y3QgYmFtX2RtdXggKmRtdXgpCiB7CiAJcWNvbV9zbWVtX3N0YXRlX3VwZGF0ZV9iaXRzKGRtdXgtJmd0O3BjX2FjaywgZG11eC0mZ3Q7cGNfYWNrX21hc2ssCkBAIC02NTUsNiAmIzQzOzY4NCw4IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X2ZyZWVfc2ticyhzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSBza2JzW10sCiAKIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3Bvd2VyX29mZihzdHJ1Y3QgYmFtX2RtdXggKmRtdXgpCiB7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsKIAlpZiAoZG11eC0mZ3Q7dHgpIHsKIAkJZG1hZW5naW5lX3Rlcm1pbmF0ZV9zeW5jKGRtdXgtJmd0O3R4KTsKIAkJZG1hX3JlbGVhc2VfY2hhbm5lbChkbXV4LSZndDt0eCk7CkBAIC02NzAsMTAgJiM0Mzs3MDEsMTUgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfcG93ZXJfb2ZmKHN0cnVjdCBiYW1fZG11eCAqZG11eCkKIAliYW1fZG11eF9mcmVlX3NrYnMoZG11eC0mZ3Q7cnhfc2ticywgRE1BX0ZST01fREVWSUNFKTsKIH0KIAotc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQomIzQzO3N0YXRpYyBib29sIGJhbV9kbXV4X2hhbmRsZV9wYyhzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIGJvb2wgbmV3X3N0YXRlKQogewotCXN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRhdGE7Ci0JYm9vbCBuZXdfc3RhdGUgPSAhZG11eC0mZ3Q7cGNfc3RhdGU7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsKJiM0MzsJaWYgKG5ld19zdGF0ZSA9PSBkbXV4LSZndDtwY19zdGF0ZSkgewomIzQzOwkJaWYgKG5ld19zdGF0ZSAmYW1wOyZhbXA7IGRtdXgtJmd0O3BjX3ZvdGUgPT0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcpCiYjNDM7CQkJZG11eC0mZ3Q7cGNfdm90ZSA9IEJBTV9ETVVYX1BDX1ZPVEVfQUNLRUQ7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CX0KIAogCWRldl9kYmcoZG11eC0mZ3Q7ZGV2LCAmIzM0O3BjOiAldVxuJiMzNDssIG5ld19zdGF0ZSk7CiAKQEAgLTY4MiwxMyAmIzQzOzcxOCw0MSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCiAJCQliYW1fZG11eF9wY19hY2soZG11eCk7CiAJCWVsc2UKIAkJCWJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTsKJiM0MzsJfSBlbHNlIGlmIChkbXV4LSZndDtwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfQUNLRUQpIHsKJiM0MzsJCS8qIFRoZSBtb2RlbSBtdXN0IGtlZXAgdGhlIERNQSBlbmdpbmUgb24gdW50aWwgcGMgaXMgYWNrZWQuICovCiYjNDM7CQlkbXV4LSZndDtwY192b3RlID0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkc7CiYjNDM7CQlkZXZfZXJyX3JhdGVsaW1pdGVkKGRtdXgtJmd0O2RldiwKJiM0MzsJCQkJICAgICYjMzQ7cmVmdXNpbmcgcGMgZG93biB3aGlsZSBob3N0IHZvdGUgaXMgYWN0aXZlXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJfSBlbHNlIHsKIAkJYmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpOwogCQliYW1fZG11eF9wY19hY2soZG11eCk7CiYjNDM7CQlkbXV4LSZndDtwY192b3RlID0gQkFNX0RNVVhfUENfVk9URV9JTkFDVElWRTsKIAl9CiAKLQlkbXV4LSZndDtwY19zdGF0ZSA9IG5ld19zdGF0ZTsKLQl3YWtlX3VwX2FsbCgmYW1wO2RtdXgtJmd0O3BjX3dhaXQpOwomIzQzOwlXUklURV9PTkNFKGRtdXgtJmd0O3BjX3N0YXRlLCBuZXdfc3RhdGUpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gZGF0YTsKJiM0MzsJYm9vbCBuZXdfc3RhdGUsIHdha2U7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsJcmV0ID0gaXJxX2dldF9pcnFjaGlwX3N0YXRlKGRtdXgtJmd0O3BjX2lycSwgSVJRQ0hJUF9TVEFURV9MSU5FX0xFVkVMLAomIzQzOwkJCQkgICAgJmFtcDtuZXdfc3RhdGUpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoZG11eC0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byByZWFkIHBjIHN0YXRlOiAlZFxuJiMzNDssIHJldCk7CiYjNDM7CQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJd2FrZSA9IGJhbV9kbXV4X2hhbmRsZV9wYyhkbXV4LCBuZXdfc3RhdGUpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsJaWYgKHdha2UpCiYjNDM7CQl3YWtlX3VwX2FsbCgmYW1wO2RtdXgtJmd0O3BjX3dhaXQpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNjk2LDkgJiM0Mzs3NjAsMzAgQEAgc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQogc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2Fja19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkYXRhOwomIzQzOwlib29sIG5ld19zdGF0ZSwgd2FrZSA9IGZhbHNlOwomIzQzOwlpbnQgcmV0OwogCiAJZGV2X2RiZyhkbXV4LSZndDtkZXYsICYjMzQ7cGMgYWNrXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CS8qIFByb2Nlc3MgYW4gZWFybGllciBwYyBlZGdlIGJlZm9yZSBwdWJsaXNoaW5nIHRoZSBob3N0LXZvdGUgYWNrLiAqLwomIzQzOwlzeW5jaHJvbml6ZV9pcnEoZG11eC0mZ3Q7cGNfaXJxKTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2RtdXgtJmd0O3Bvd2VyX2xvY2spOwomIzQzOwlyZXQgPSBpcnFfZ2V0X2lycWNoaXBfc3RhdGUoZG11eC0mZ3Q7cGNfaXJxLCBJUlFDSElQX1NUQVRFX0xJTkVfTEVWRUwsCiYjNDM7CQkJCSAgICAmYW1wO25ld19zdGF0ZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2RtdXgtJmd0O3Bvd2VyX2xvY2spOwomIzQzOwkJZGV2X2Vycl9yYXRlbGltaXRlZChkbXV4LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHJlYWQgcGMgc3RhdGU6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybiBJUlFfSEFORExFRDsKJiM0MzsJfQomIzQzOwomIzQzOwl3YWtlID0gYmFtX2RtdXhfaGFuZGxlX3BjKGRtdXgsIG5ld19zdGF0ZSk7CiYjNDM7CWlmIChuZXdfc3RhdGUgJmFtcDsmYW1wOyBkbXV4LSZndDtwY19zdGF0ZSAmYW1wOyZhbXA7CiYjNDM7CSAgICBkbXV4LSZndDtwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfUEVORElORykKJiM0MzsJCWRtdXgtJmd0O3BjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0FDS0VEOwogCWNvbXBsZXRlX2FsbCgmYW1wO2RtdXgtJmd0O3BjX2Fja19jb21wbGV0aW9uKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZG11eC0mZ3Q7cG93ZXJfbG9jayk7CiYjNDM7CWlmICh3YWtlKQomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtkbXV4LSZndDtwY193YWl0KTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTcwNiw5ICYjNDM7NzkxLDIxIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBiYW1fZG11eF9wY19hY2tfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCiBzdGF0aWMgaW50IGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiYjNDM7CWJvb2wgd2FrZSA9IGZhbHNlOwogCiAJZGV2X2RiZyhkZXYsICYjMzQ7cnVudGltZSBzdXNwZW5kXG4mIzM0Oyk7Ci0JYmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7CiYjNDM7CiYjNDM7CXsKJiM0MzsJCWd1YXJkKG11dGV4KSgmYW1wO2RtdXgtJmd0O3Bvd2VyX2xvY2spOwomIzQzOwomIzQzOwkJYmFtX2RtdXhfcGNfdm90ZV9sb2NrZWQoZG11eCwgZmFsc2UpOwomIzQzOwkJaWYgKGRtdXgtJmd0O3BjX3ZvdGUgPT0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcpCiYjNDM7CQkJd2FrZSA9IGJhbV9kbXV4X2hhbmRsZV9wYyhkbXV4LCBmYWxzZSk7CiYjNDM7CQllbHNlIGlmICghZG11eC0mZ3Q7cGNfc3RhdGUpCiYjNDM7CQkJYmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpOwomIzQzOwl9CiYjNDM7CWlmICh3YWtlKQomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtkbXV4LSZndDtwY193YWl0KTsKIAogCXJldHVybiAwOwogfQpAQCAtNzE2LDYgJiM0Mzs4MTMsNyBAQCBzdGF0aWMgaW50IGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGJhbV9kbXV4X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKJiM0MzsJaW50IHJldCA9IDA7CiAKIAlkZXZfZGJnKGRldiwgJiMzNDtydW50aW1lIHJlc3VtZVxuJiMzNDspOwogCkBAIC03MjQsNTAgJiM0Mzs4MjIsNTggQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBiYW1fZG11eF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJCQkJCSBCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpCiAJCXJldHVybiAtRVRJTUVET1VUOwogCiYjNDM7CXN5bmNocm9uaXplX2lycShkbXV4LSZndDtwY19pcnEpOwomIzQzOwogCS8qIFZvdGUgZm9yIHBvd2VyIHN0YXRlICovCi0JYmFtX2RtdXhfcGNfdm90ZShkbXV4LCB0cnVlKTsKJiM0MzsJYmFtX2RtdXhfcGNfdm90ZV9wcm90ZWN0ZWQoZG11eCwgdHJ1ZSk7CiAKIAkvKiBXYWl0IGZvciBhY2sgKi8KIAlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYW1wO2RtdXgtJmd0O3BjX2Fja19jb21wbGV0aW9uLAogCQkJCQkgQkFNX0RNVVhfUkVNT1RFX1RJTUVPVVQpKSB7Ci0JCWJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgZmFsc2UpOwomIzQzOwkJYmFtX2RtdXhfcnVudGltZV9zdXNwZW5kKGRldik7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIAomIzQzOwlzeW5jaHJvbml6ZV9pcnEoZG11eC0mZ3Q7cGNfaXJxKTsKJiM0MzsKIAkvKiBXYWl0IHVudGlsIHdlJiMzOTtyZSB1cCAqLwotCWlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtJmd0O3BjX3dhaXQsIGRtdXgtJmd0O3BjX3N0YXRlLAomIzQzOwlpZiAoIXdhaXRfZXZlbnRfdGltZW91dChkbXV4LSZndDtwY193YWl0LCBSRUFEX09OQ0UoZG11eC0mZ3Q7cGNfc3RhdGUpLAogCQkJCUJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSkgewotCQliYW1fZG11eF9wY192b3RlKGRtdXgsIGZhbHNlKTsKJiM0MzsJCWJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChkZXYpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CiAKLQkvKiBFbnN1cmUgdGhhdCB3ZSBhY3R1YWxseSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKi8KLQlpZiAoIWRtdXgtJmd0O3J4KSB7Ci0JCWJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgZmFsc2UpOwotCQlyZXR1cm4gLUVOWElPOwomIzQzOwl7CiYjNDM7CQlndWFyZChtdXRleCkoJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsKJiM0MzsJCS8qIEVuc3VyZSB0aGF0IHdlIGFjdHVhbGx5IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAqLwomIzQzOwkJaWYgKCFkbXV4LSZndDtyeCkgewomIzQzOwkJCXJldCA9IC1FTlhJTzsKJiM0MzsJCX0gZWxzZSBpZiAoIWRtdXgtJmd0O3R4KSB7CiYjNDM7CQkJLyogUmVxdWVzdCBUWCBjaGFubmVsIGlmIG5lY2Vzc2FyeSAqLwomIzQzOwkJCWRtdXgtJmd0O3R4ID0gZG1hX3JlcXVlc3RfY2hhbihkZXYsICYjMzQ7dHgmIzM0Oyk7CiYjNDM7CQkJaWYgKElTX0VSUihkbXV4LSZndDt0eCkpIHsKJiM0MzsJCQkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHJlcXVlc3QgVFggRE1BIGNoYW5uZWw6ICVwZVxuJiMzNDssCiYjNDM7CQkJCQlkbXV4LSZndDt0eCk7CiYjNDM7CQkJCWRtdXgtJmd0O3R4ID0gTlVMTDsKJiM0MzsJCQkJcmV0ID0gLUVOWElPOwomIzQzOwkJCX0KJiM0MzsJCX0KIAl9CiAKLQkvKiBSZXF1ZXN0IFRYIGNoYW5uZWwgaWYgbmVjZXNzYXJ5ICovCi0JaWYgKGRtdXgtJmd0O3R4KQotCQlyZXR1cm4gMDsKLQotCWRtdXgtJmd0O3R4ID0gZG1hX3JlcXVlc3RfY2hhbihkZXYsICYjMzQ7dHgmIzM0Oyk7Ci0JaWYgKElTX0VSUihkbXV4LSZndDt0eCkpIHsKLQkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHJlcXVlc3QgVFggRE1BIGNoYW5uZWw6ICVwZVxuJiMzNDssIGRtdXgtJmd0O3R4KTsKLQkJZG11eC0mZ3Q7dHggPSBOVUxMOwomIzQzOwlpZiAocmV0KQogCQliYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoZGV2KTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwogCXN0cnVjdCBiYW1fZG11eCAqZG11eDsKLQlpbnQgcmV0LCBwY19hY2tfaXJxLCBpOwomIzQzOwlpbnQgcmV0LCBpOwogCXVuc2lnbmVkIGludCBiaXQ7CiYjNDM7CWJvb2wgcGNfc3RhdGU7CiAKIAlkbXV4ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkbXV4KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkbXV4KQpAQCAtNzgwLDkgJiM0Mzs4ODYsOSBAQCBzdGF0aWMgaW50IGJhbV9kbXV4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJaWYgKGRtdXgtJmd0O3BjX2lycSAmbHQ7IDApCiAJCXJldHVybiBkbXV4LSZndDtwY19pcnE7CiAKLQlwY19hY2tfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgJiMzNDtwYy1hY2smIzM0Oyk7Ci0JaWYgKHBjX2Fja19pcnEgJmx0OyAwKQotCQlyZXR1cm4gcGNfYWNrX2lycTsKJiM0MzsJZG11eC0mZ3Q7cGNfYWNrX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICYjMzQ7cGMtYWNrJiMzNDspOwomIzQzOwlpZiAoZG11eC0mZ3Q7cGNfYWNrX2lycSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZG11eC0mZ3Q7cGNfYWNrX2lycTsKIAogCWRtdXgtJmd0O3BjID0gZGV2bV9xY29tX3NtZW1fc3RhdGVfZ2V0KGRldiwgJiMzNDtwYyYjMzQ7LCAmYW1wO2JpdCk7CiAJaWYgKElTX0VSUihkbXV4LSZndDtwYykpCkBAIC03OTksNiAmIzQzOzkwNSw5IEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7ZG11eC0mZ3Q7cGNfd2FpdCk7CiAJaW5pdF9jb21wbGV0aW9uKCZhbXA7ZG11eC0mZ3Q7cGNfYWNrX2NvbXBsZXRpb24pOwogCWNvbXBsZXRlX2FsbCgmYW1wO2RtdXgtJmd0O3BjX2Fja19jb21wbGV0aW9uKTsKJiM0MzsJcmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiAKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2RtdXgtJmd0O3R4X2xvY2spOwogCUlOSVRfV09SSygmYW1wO2RtdXgtJmd0O3R4X3dha2V1cF93b3JrLCBiYW1fZG11eF90eF93YWtldXBfd29yayk7CkBAIC04MTcsMzEgJiM0Mzs5MjYsNDAgQEAgc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKGRldik7CiAJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKIAotCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBwY19hY2tfaXJxLCBOVUxMLCBiYW1fZG11eF9wY19hY2tfaXJxLAotCQkJCQlJUlFGX09ORVNIT1QsIE5VTEwsIGRtdXgpOwomIzQzOwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgZG11eC0mZ3Q7cGNfYWNrX2lycSwgTlVMTCwKJiM0MzsJCQkJCWJhbV9kbXV4X3BjX2Fja19pcnEsCiYjNDM7CQkJCQlJUlFGX09ORVNIT1QgfCBJUlFGX05PX0FVVE9FTiwKJiM0MzsJCQkJCU5VTEwsIGRtdXgpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2Rpc2FibGVfcG07CiAKIAlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgZG11eC0mZ3Q7cGNfaXJxLCBOVUxMLCBiYW1fZG11eF9wY19pcnEsCi0JCQkJCUlSUUZfT05FU0hPVCwgTlVMTCwgZG11eCk7CiYjNDM7CQkJCQlJUlFGX09ORVNIT1QgfCBJUlFGX05PX0FVVE9FTiwgTlVMTCwgZG11eCk7CiAJaWYgKHJldCkKLQkJZ290byBlcnJfZGlzYWJsZV9wbTsKJiM0MzsJCWdvdG8gZXJyX3Bvd2VyX29mZjsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7ZG11eC0mZ3Q7cG93ZXJfbG9jayk7CiAJcmV0ID0gaXJxX2dldF9pcnFjaGlwX3N0YXRlKGRtdXgtJmd0O3BjX2lycSwgSVJRQ0hJUF9TVEFURV9MSU5FX0xFVkVMLAotCQkJCSAgICAmYW1wO2RtdXgtJmd0O3BjX3N0YXRlKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9kaXNhYmxlX3BtOwomIzQzOwkJCQkgICAgJmFtcDtwY19zdGF0ZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2RtdXgtJmd0O3Bvd2VyX2xvY2spOwomIzQzOwkJZ290byBlcnJfcG93ZXJfb2ZmOwomIzQzOwl9CiAKIAkvKiBDaGVjayBpZiByZW1vdGUgZmluaXNoZWQgaW5pdGlhbGl6YXRpb24gYmVmb3JlIHVzICovCi0JaWYgKGRtdXgtJmd0O3BjX3N0YXRlKSB7Ci0JCWlmIChiYW1fZG11eF9wb3dlcl9vbihkbXV4KSkKLQkJCWJhbV9kbXV4X3BjX2FjayhkbXV4KTsKLQkJZWxzZQotCQkJYmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpOwotCX0KJiM0MzsJYmFtX2RtdXhfaGFuZGxlX3BjKGRtdXgsIHBjX3N0YXRlKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZG11eC0mZ3Q7cG93ZXJfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFN0YXJ0IGhhbmRsaW5nIHN0YXRlIGNoYW5nZXMgYWZ0ZXIgdGhlIGluaXRpYWwgc3RhdGUgaXMgcHJvY2Vzc2VkLiAqLwomIzQzOwllbmFibGVfaXJxKGRtdXgtJmd0O3BjX2Fja19pcnEpOwomIzQzOwllbmFibGVfaXJxKGRtdXgtJmd0O3BjX2lycSk7CiAKIAlyZXR1cm4gMDsKIAomIzQzO2Vycl9wb3dlcl9vZmY6CiYjNDM7CW11dGV4X2xvY2soJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKJiM0MzsJYmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKIGVycl9kaXNhYmxlX3BtOgogCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOwogCXBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoZGV2KTsKQEAgLTg3MiwxMiAmIzQzOzk5MCwxNiBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTsKIAogCS8qIFRyeSB0byB3YWl0IGZvciByZW1vdGUgc2lkZSB0byBkcm9wIHBvd2VyIHZvdGUgKi8KLQlpZiAoIXdhaXRfZXZlbnRfdGltZW91dChkbXV4LSZndDtwY193YWl0LCAhZG11eC0mZ3Q7cngsIEJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSkKJiM0MzsJaWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoZG11eC0mZ3Q7cGNfd2FpdCwgIVJFQURfT05DRShkbXV4LSZndDtyeCksCiYjNDM7CQkJCUJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSkKIAkJZGV2X2VycihkZXYsICYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlbW90ZSBzaWRlIHRvIHN1c3BlbmRcbiYjMzQ7KTsKIAogCS8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNsZWFuZWQgdXAgYmVmb3JlIHdlIHJldHVybiAqLwomIzQzOwlkaXNhYmxlX2lycShkbXV4LSZndDtwY19hY2tfaXJxKTsKIAlkaXNhYmxlX2lycShkbXV4LSZndDtwY19pcnEpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZG11eC0mZ3Q7cG93ZXJfbG9jayk7CiAJYmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkbXV4LSZndDtwb3dlcl9sb2NrKTsKIAliYW1fZG11eF9mcmVlX3NrYnMoZG11eC0mZ3Q7dHhfc2ticywgRE1BX1RPX0RFVklDRSk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc3MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDU2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBgcWNvbV9iYW1fZG11eC5jYCwgd2hpY2gsIGZyb20gYSBxdWljayBnbGFuY2UsIHNlZW1zIHRvIGJlIGEgcG93ZXIgbWFuYWdlbWVudCBmaXggZm9yIHRoZSBRdWFsY29tbSBCQU0gRGF0YSBNdWx0aXBsZXhlciBkcml2ZXIuIEl0JiMzOTtzIHRvdWNoaW5nIG11dGV4ZXMsIElSUSBoYW5kbGVycywgYW5kIHJ1bnRpbWUgc3VzcGVuZC9yZXN1bWUgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBjb3VsZCBiZSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYnV0IGxldCYjMzk7cyBkaXZlIGRlZXBlciBhbmQgdGhpbmsgdGhpcyB0aHJvdWdoIG1ldGhvZGljYWxseS4KCkZpcnN0LCB0aGUgY29yZSBxdWVzdGlvbjogaXMgdGhpcyBkcml2ZXIgKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBmaWx0ZXIgaGVyZS4gVGhpcyBpcyBhIFF1YWxjb21tLXNwZWNpZmljIEJBTSBEYXRhIE11bHRpcGxleGVyIGRyaXZlciwgc28gSSBuZWVkIHRvIGFzc2VzcyBob3cgbGlrZWx5IGl0IGlzIHRvIGJlIGVtdWxhdGVkIG9yIGV2ZW4gdHJpZ2dlciBpdHMgY29kZSBwYXRocyB3aXRoaW4gYSB2aXJ0dWFsIG1hY2hpbmUuIFRoaXMgc3BlY2lmaWMgZHJpdmVyIGlzIGBxY29tX2JhbV9kbXV4LmNgIGFuZCBpcyBhIHBsYXRmb3JtIGRyaXZlci4KCk15IGV4cGVyaWVuY2Ugd2l0aCBRdWFsY29tbSBoYXJkd2FyZSBzdWdnZXN0cyB0aGF0IGRpcmVjdCBlbXVsYXRpb24gb2YgY29tcG9uZW50cyBsaWtlIEJBTSBETUEgb3IgU2hhcmVkIE1lbW9yeSAoU01FTSkgaXMgb2Z0ZW4gdHJpY2t5IGluIHN0YW5kYXJkIFFFTVUgdW5sZXNzIHRoZXJlJiMzOTtzIGEgdmVyeSBzcGVjaWZpYyBtYWNoaW5lIG1vZGVsIHRoYXQgZXhwbGljaXRseSBpbmNsdWRlcyBpdC4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBhICpwbGF0Zm9ybSogZHJpdmVyIGdpdmVzIG1lIGEgZ2xpbW1lciBvZiBob3BlLiBQbGF0Zm9ybSBkcml2ZXJzIGFyZSwgaW4gdGhlb3J5LCBlYXNpZXIgdG8gbWFuaXB1bGF0ZSBhbmQgcG90ZW50aWFsbHkgaW5zdGFudGlhdGUgdGhyb3VnaCB0ZWNobmlxdWVzIGxpa2Ugc3l6a2FsbGVyLgoKQ2FuIHN5emthbGxlciBjcmVhdGUgYSAmIzM0O2Zha2UmIzM0OyBwbGF0Zm9ybSBkZXZpY2UgdGhhdCB0cmlnZ2VycyB0aGlzIGRyaXZlcj8gTWF5YmUsIHVzaW5nIGBzeXpfZ2VuX3N5c2ZzYCBvciBieSBkaXJlY3RseSB3cml0aW5nIHRvIGAvc3lzL2RldmljZXMvcGxhdGZvcm1gIGlmIHN1Y2ggYSBwYXRod2F5IGV4aXN0cy4gSG93ZXZlciwgSSBrbm93IHBsYXRmb3JtIGRldmljZXMgYXJlIHVzdWFsbHkgaW5zdGFudGlhdGVkIGJ5IERldmljZSBUcmVlIChEVCkuCgpUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGlzIHRoZXJlIGEgRFQgbm9kZSBmb3IgYHFjb21fYmFtX2RtdXhgIHRoYXQgSSBjYW4gdHJ5IHRvIHRyaWdnZXI/IFdpdGhvdXQgYSBzcGVjaWZpYyBgc3l6bGFuZ2AgZGVzY3JpcHRpb24gb3IgYSBzdGFuZGFyZCBEVCBpbmplY3Rpb24gbWVjaGFuaXNtLCBpdCBzZWVtcyB1bmxpa2VseSB0aGF0IEkgY2FuIGp1c3QgdGhyb3cgaXQgaW4sIGJ1dCBJIHNob3VsZCBjaGVjayBhbmQgbWFrZSBzdXJlIHRoYXQgaXQgZG9lcyByZXF1aXJlIGEgYHFjb20sYmFtLWRtdXhgIGNvbXBhdGlibGUgc3RyaW5nIGluIERULiBNeSBpbnR1aXRpb24gaXMgdGhhdCBpdCB3aWxsIGJlIGRpZmZpY3VsdCB0byBhcmJpdHJhcmlseSBpbmplY3QgRFQgbm9kZXMgdW5sZXNzIGEgc3BlY2lmaWMgZHJpdmVyIGFsbG93cyBmb3IgaXQuCgpUaGUgcHJvbXB0LCBob3dldmVyLCBoaWdobGlnaHRzIGEgY3J1Y2lhbCBwb2ludDogaWYgdGhlIHBhdGNoIG9ubHkgYWZmZWN0cyBjb2RlIHRoYXQmIzM5O3MgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXphdGlvbiwgdGhlbiBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIENvbnZlcnNlbHksIGlmIGl0IHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBJIHNob3VsZCB2ZXJpZnkgZXhlY3V0YWJpbGl0eSBhbmQgcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpUaGVyZWZvcmUsIEkgbmVlZCB0byBrbm93IGlmIHN5emthbGxlciBpcyBhbHJlYWR5IGZ1enppbmcgdGhpcyBkcml2ZXIuIEkmIzM5O2xsIHNlYXJjaCBmb3IgZXhpc3Rpbmcgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyBmb3IgYHFjb21fYmFtX2RtdXhgLiBUaGlzIHdpbGwgYmUgbXkgZmlyc3Qgc3RlcC4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHByZWRlZmluZWQgd2F5cyB0byBpbnRlcmFjdCB3aXRoIHRoaXMgZHJpdmVyIHZpYSBmdXp6aW5nLiBJZiBzbywgdGhlbiBJIGNhbiBzZWUgd2hhdCBjb2RlIHBhdGhzIGFyZSBhbHJlYWR5IGJlaW5nIGhpdCwgYW5kIHNlZSBob3cgdGhlIHBhdGNoIGltcGFjdHMgdGhlbS4gSWYgbm90LCB0aGVuIEkgY2FuIHNlZSBpZiB0aGVyZSBpcyBhbnkgcGF0aHdheSBJIGNhbiBhdHRlbXB0IHRvIHRyaWdnZXIgd2l0aGluIFFFTVUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cWNvbSxiYW0tZG11eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC0zLS0tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWw6NDokaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwjXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC01LSRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sPTIzPXByb3BlcnRpZXM6XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC0yNC0gIGNvbXBhdGlibGU6XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbDoyNTogICAgY29uc3Q6IHFjb20sYmFtLWRtdXhcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTI2LVxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sPTg2PWV4YW1wbGVzOlxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTkxLSAgICAgICAgYmFtLWRtdXgge1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWw6OTI6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3Fjb20sYmFtLWRtdXhcJiMzNDs7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC05My1cbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVtb3RlcHJvYy9xY29tLG1zbTg5MTYtbXNzLXBpbC55YW1sPTE2PXByb3BlcnRpZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtc204OTE2LW1zcy1waWwueWFtbC0xNTQtICBiYW0tZG11eDpcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbXNtODkxNi1tc3MtcGlsLnlhbWw6MTU1OiAgICAkcmVmOiAvc2NoZW1hcy9uZXQvcWNvbSxiYW0tZG11eC55YW1sI1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtc204OTE2LW1zcy1waWwueWFtbC0xNTYtICAgIGRlc2NyaXB0aW9uOlxuLS1cbk1BSU5UQUlORVJTPTIyMTc0PVM6XHRNYWludGFpbmVkXG5NQUlOVEFJTkVSUzoyMjE3NTpGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWxcbk1BSU5UQUlORVJTLTIyMTc2LUY6XHRkcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2k9OTc1PVx0XHRcdGJhbV9kbXV4OiBiYW0tZG11eCB7XG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODIyNi5kdHNpOjk3NjpcdFx0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGJhbS1kbXV4XCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTgyMjYuZHRzaS05NzctXG4tLVxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTg5NzQuZHRzaT0xNTg4PVx0XHRcdGJhbV9kbXV4OiBiYW0tZG11eCB7XG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODk3NC5kdHNpOjE1ODk6XHRcdFx0XHRjb21wYXRpYmxlID0gXCYjMzQ7cWNvbSxiYW0tZG11eFwmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204OTc0LmR0c2ktMTU5MC1cbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkxNi5kdHNpPTE5NzY9XHRcdFx0YmFtX2RtdXg6IGJhbS1kbXV4IHtcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2k6MTk3NzpcdFx0XHRcdGNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGJhbS1kbXV4XCYjMzQ7O1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MTYuZHRzaS0xOTc4LVxuLS1cbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM5LmR0c2k9MTc1NT1cdFx0XHRiYW1fZG11eDogYmFtLWRtdXgge1xuYXJjaC9hcm02NC9ib290L2R0cy9xY29tL21zbTg5MzkuZHRzaToxNzU2Olx0XHRcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3Fjb20sYmFtLWRtdXhcJiMzNDs7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL3Fjb20vbXNtODkzOS5kdHNpLTE3NTctXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM9MTAxMD1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiYW1fZG11eF9vZl9tYXRjaFtdID0ge1xuZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmM6MTAxMTpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtxY29tLGJhbS1kbXV4XCYjMzQ7IH0sXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xMDEyLVx0eyAvKiBzZW50aW5lbCAqLyB9XG4tLVxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYz0yMDY3PXN0YXRpYyBpbnQgcTZ2NV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmMtMjIwMy1cbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmM6MjIwNDpcdG5vZGUgPSBvZl9nZXRfY29tcGF0aWJsZV9jaGlsZChwZGV2LVx1MDAzZWRldi5vZl9ub2RlLCBcJiMzNDtxY29tLGJhbS1kbXV4XCYjMzQ7KTtcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmMtMjIwNS1cdHFwcm9jLVx1MDAzZWJhbV9kbXV4ID0gb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShub2RlLCBOVUxMLCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM1NwoJCQkJCQkJb3V0cHV0OiAxMDIKCQkJCQkJCXRob3VnaHRzOiA1MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUGF0Y2ggQXBwbGljYWJpbGl0eSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBleGFtaW5lZCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBsb29raW5nIGxpa2UgYSBkZWFkIGVuZCBmb3IgZnV6emluZyBwdXJwb3Nlcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBjb2RlIHdvbiYjMzk7dCBiZSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgcGF0Y2ggdGFyZ2V0cyB0aGUgYHFjb20sYmFtLWRtdXhgIHBsYXRmb3JtIGRyaXZlciwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgc29tZSBhbGFybXMuIFBsYXRmb3JtIGRldmljZXMgYXJlIHR5cGljYWxseSBpbnN0YW50aWF0ZWQgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIGFuZCBpbiB0aGUgZGVmYXVsdCBRRU1VIHNldHVwIHVzZWQgYnkgc3l6a2FsbGVyICh3aGljaCBpcyB4ODZfNjQpLCB0aGlzIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGUgd29uJiMzOTt0IGJlIHByZXNlbnQuIEV2ZW4gaWYgd2UmIzM5O3JlIG9uIEFSTTY0IFFFTVUsIGxpa2UgYSBgdmlydGAgbWFjaGluZSwgaXQmIzM5O3MgaGlnaGx5IHVubGlrZWx5IHRoYXQgdGhpcyBzcGVjaWZpYyBub2RlIGhhcyBiZWVuIGV4cGxpY2l0bHkgYWRkZWQuCgpUaGUgcmVhbCBraWNrZXIgaXMgdGhhdCB0aGlzIGRyaXZlciBpbnRlcmFjdHMgd2l0aCBRdWFsY29tbS1zcGVjaWZpYyBoYXJkd2FyZTogdGhlIFNNRU0gKHNoYXJlZCBtZW1vcnkpIHN0YXRlIHVzaW5nIGBxY29tX3NtZW1fc3RhdGVfZ2V0YCBhbmQgdGhlIERNQSBlbmdpbmUgd2l0aCBgZG1hX3JlcXVlc3RfY2hhbmAuIE5laXRoZXIgb2YgdGhvc2UgaXMgZW11bGF0ZWQgaW4gYSBzdGFuZGFyZCBRRU1VIHNldHVwLiBUaGlzIG1lYW5zIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIHdpdGhpbiBgcWNvbV9iYW1fZG11eC5jYCBhcmUgc2ltcGx5IGluYWNjZXNzaWJsZSBpbiB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbGlrZSB0aG9zZSB1c2VkIGJ5IEdDRSBvciBRRU1VLgoKSSYjMzk7bSBub3cgdGhpbmtpbmcgYWJvdXQgd2F5cyB0byB0cmlnZ2VyIHRoaXMuIFRoZSBkcml2ZXIgcmVxdWlyZXMgYWNjZXNzIHRvIFNNRU0gc3RhdGVzICYjMzQ7cGMmIzM0OyBhbmQgJiMzNDtwYy1hY2ssJiMzNDsgYXMgd2VsbCBhcyAmIzM0O3BjJiMzNDsgYW5kICYjMzQ7cGMtYWNrJiMzNDsgSVJRcy4gVGhlIGxhY2sgb2YgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgc3l6a2FsbGVyJiMzOTtzIGN1cnJlbnQgbGltaXRhdGlvbnMgd2l0aCBlbXVsYXRpbmcgdGhhdCBsZWFkcyBtZSB0byBiZWxpZXZlIHRoaXMgZHJpdmVyIHdpbGwgbmV2ZXIgc3VjY2Vzc2Z1bGx5IHByb2JlLCBhbmQgaXRzIHJ1bnRpbWUgUE0vSVJRIGhhbmRsZXJzIHdpbGwgbmV2ZXIgZ2V0IGV4ZWN1dGVkLgoKSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgbXkgYXNzZXNzbWVudCBmb2xsb3dzIHRoZSBndWlkZWxpbmVzOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCBhbHNvIGFwcGxpZXMgdG8gY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7LiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyAoUXVhbGNvbW0pIFNvQyBkcml2ZXIgdGhhdCBkZXBlbmRzIG9uIHNwZWNpZmljIGhhcmR3YXJlIChCQU0gRE1BLCBTTUVNKSB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZCBpbiB0aGUgZGVmYXVsdCBzZXR1cC4KCkkmIzM5O3ZlIHF1aWNrbHkgY2hlY2tlZCB0aGF0IHRoZSBvbmx5IGZpbGUgY2hhbmdlZCBpcyBgZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNgLgoKVGhlcmVmb3JlLCBJJiMzOTtsbCBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgYW5kIGRvY3VtZW50IHRoZSByYXRpb25hbGU6IHRoZSBwYXRjaCBpcyBpbmFjY2Vzc2libGUgd2l0aGluIGEgdHlwaWNhbCBmdXp6aW5nIGVudmlyb25tZW50IGR1ZSB0byBpdHMgZGVwZW5kZW5jZSBvbiB1bi1lbXVsYXRlZCwgUXVhbGNvbW0tc3BlY2lmaWMgaGFyZHdhcmUgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBRdWFsY29tbSBCQU0gRGF0YSBNdWx0aXBsZXhlciAocWNvbV9iYW1fZG11eCkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTb0MgZHJpdmVyLiBJdCByZWxpZXMgb24gaGFyZHdhcmUtc3BlY2lmaWMgZmVhdHVyZXMgbGlrZSBRdWFsY29tbSBTTUVNIGFuZCBCQU0gRE1BIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgUXVhbGNvbW0gQkFNIERhdGEgTXVsdGlwbGV4ZXIgKHFjb21fYmFtX2RtdXgpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIGRyaXZlci4gSXQgcmVsaWVzIG9uIGhhcmR3YXJlLXNwZWNpZmljIGZlYXR1cmVzIGxpa2UgUXVhbGNvbW0gU01FTSBhbmQgQkFNIERNQSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMDk6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjM4LjcwOTA1NTY2OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTcyMTYyOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB0aGUgUXVhbGNvbW0gQkFNIERhdGEgTXVsdGlwbGV4ZXIgKHFjb21fYmFtX2RtdXgpIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU29DIGRyaXZlci4gSXQgcmVsaWVzIG9uIGhhcmR3YXJlLXNwZWNpZmljIGZlYXR1cmVzIGxpa2UgUXVhbGNvbW0gU01FTSBhbmQgQkFNIERNQSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjM4LjcwOTA2MDAyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0Njk3ODk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDU3NTkwNjRlMWE1ODgwMDRiYzljYzJiYzM4ZjViOGE1MzI5NGFkZmJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDk6NDU6MzYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmMgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xcbmluZGV4IGNjNmFjZThkNjQzNzEuLjM3NTZjZGI3YTMxOTkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguY1xcbkBAIC02LDEyICs2LDE0IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYXRvbWljLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRvcHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWFlbmdpbmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2FycC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcG1fcnVudGltZS5oXFx1MDAzZVxcbkBAIC02NCwxNSArNjYsMjQgQEAgc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEge1xcbiBcXHRkbWFfYWRkcl90IGFkZHI7XFxuIH07XFxuIFxcbitlbnVtIGJhbV9kbXV4X3BjX3ZvdGUge1xcbitcXHRCQU1fRE1VWF9QQ19WT1RFX0lOQUNUSVZFLCAvKiBwY192b3RlID0gZmFsc2UgKi9cXG4rXFx0QkFNX0RNVVhfUENfVk9URV9QRU5ESU5HLCAvKiBwY192b3RlID0gdHJ1ZSwgd2FpdGluZyBmb3IgQUNLICovXFxuK1xcdEJBTV9ETVVYX1BDX1ZPVEVfQUNLRUQsIC8qIHBjX3ZvdGUgPSB0cnVlLCBBQ0sgcmVjZWl2ZWQgKi9cXG4rXFx0QkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcsIC8qIHBjID0gZmFsc2Ugd2hpbGUgaG9zdCB2b3RlIGFjdGl2ZSAqL1xcbit9O1xcbitcXG4gc3RydWN0IGJhbV9kbXV4IHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbiBcXG4tXFx0aW50IHBjX2lycTtcXG4rXFx0aW50IHBjX2lycSwgcGNfYWNrX2lycTtcXG4gXFx0Ym9vbCBwY19zdGF0ZSwgcGNfYWNrX3N0YXRlO1xcbiBcXHRzdHJ1Y3QgcWNvbV9zbWVtX3N0YXRlICpwYywgKnBjX2FjaztcXG4gXFx0dTMyIHBjX21hc2ssIHBjX2Fja19tYXNrO1xcbiBcXHR3YWl0X3F1ZXVlX2hlYWRfdCBwY193YWl0O1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvbiBwY19hY2tfY29tcGxldGlvbjtcXG4rXFx0c3RydWN0IG11dGV4IHBvd2VyX2xvY2s7IC8qIFByb3RlY3QgcG93ZXItY29udHJvbCBzdGF0ZSAqL1xcbitcXHRlbnVtIGJhbV9kbXV4X3BjX3ZvdGUgcGNfdm90ZTtcXG4gXFxuIFxcdHN0cnVjdCBkbWFfY2hhbiAqcngsICp0eDtcXG4gXFx0c3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgcnhfc2tic1tCQU1fRE1VWF9OVU1fU0tCXTtcXG5AQCAtOTksNiArMTEwLDI0IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX3ZvdGUoc3RydWN0IGJhbV9kbXV4ICpkbXV4LCBib29sIGVuYWJsZSlcXG4gXFx0XFx0XFx0XFx0ICAgIGVuYWJsZSA/IGRtdXgtXFx1MDAzZXBjX21hc2sgOiAwKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfdm90ZV9sb2NrZWQoc3RydWN0IGJhbV9kbXV4ICpkbXV4LCBib29sIGVuYWJsZSlcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4rXFxuK1xcdGlmIChlbmFibGUpXFxuK1xcdFxcdGRtdXgtXFx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX1BFTkRJTkc7XFxuK1xcdGVsc2UgaWYgKGRtdXgtXFx1MDAzZXBjX3ZvdGUgIT0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcpXFxuK1xcdFxcdGRtdXgtXFx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0lOQUNUSVZFO1xcbitcXHRiYW1fZG11eF9wY192b3RlKGRtdXgsIGVuYWJsZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX3ZvdGVfcHJvdGVjdGVkKHN0cnVjdCBiYW1fZG11eCAqZG11eCwgYm9vbCBlbmFibGUpXFxuK3tcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZG11eC1cXHUwMDNlcG93ZXJfbG9jayk7XFxuK1xcdGJhbV9kbXV4X3BjX3ZvdGVfbG9ja2VkKGRtdXgsIGVuYWJsZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2ZG11eC1cXHUwMDNlcG93ZXJfbG9jayk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX2FjayhzdHJ1Y3QgYmFtX2RtdXggKmRtdXgpXFxuIHtcXG4gXFx0cWNvbV9zbWVtX3N0YXRlX3VwZGF0ZV9iaXRzKGRtdXgtXFx1MDAzZXBjX2FjaywgZG11eC1cXHUwMDNlcGNfYWNrX21hc2ssXFxuQEAgLTY1NSw2ICs2ODQsOCBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9mcmVlX3NrYnMoc3RydWN0IGJhbV9kbXV4X3NrYl9kbWEgc2tic1tdLFxcbiBcXG4gc3RhdGljIHZvaWQgYmFtX2RtdXhfcG93ZXJfb2ZmKHN0cnVjdCBiYW1fZG11eCAqZG11eClcXG4ge1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4rXFxuIFxcdGlmIChkbXV4LVxcdTAwM2V0eCkge1xcbiBcXHRcXHRkbWFlbmdpbmVfdGVybWluYXRlX3N5bmMoZG11eC1cXHUwMDNldHgpO1xcbiBcXHRcXHRkbWFfcmVsZWFzZV9jaGFubmVsKGRtdXgtXFx1MDAzZXR4KTtcXG5AQCAtNjcwLDEwICs3MDEsMTUgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfcG93ZXJfb2ZmKHN0cnVjdCBiYW1fZG11eCAqZG11eClcXG4gXFx0YmFtX2RtdXhfZnJlZV9za2JzKGRtdXgtXFx1MDAzZXJ4X3NrYnMsIERNQV9GUk9NX0RFVklDRSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpcnFyZXR1cm5fdCBiYW1fZG11eF9wY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4rc3RhdGljIGJvb2wgYmFtX2RtdXhfaGFuZGxlX3BjKHN0cnVjdCBiYW1fZG11eCAqZG11eCwgYm9vbCBuZXdfc3RhdGUpXFxuIHtcXG4tXFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gZGF0YTtcXG4tXFx0Ym9vbCBuZXdfc3RhdGUgPSAhZG11eC1cXHUwMDNlcGNfc3RhdGU7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmRtdXgtXFx1MDAzZXBvd2VyX2xvY2spO1xcbitcXG4rXFx0aWYgKG5ld19zdGF0ZSA9PSBkbXV4LVxcdTAwM2VwY19zdGF0ZSkge1xcbitcXHRcXHRpZiAobmV3X3N0YXRlIFxcdTAwMjZcXHUwMDI2IGRtdXgtXFx1MDAzZXBjX3ZvdGUgPT0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcpXFxuK1xcdFxcdFxcdGRtdXgtXFx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0FDS0VEO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4gXFxuIFxcdGRldl9kYmcoZG11eC1cXHUwMDNlZGV2LCBcXFwicGM6ICV1XFxcXG5cXFwiLCBuZXdfc3RhdGUpO1xcbiBcXG5AQCAtNjgyLDEzICs3MTgsNDEgQEAgc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxcbiBcXHRcXHRcXHRiYW1fZG11eF9wY19hY2soZG11eCk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xcbitcXHR9IGVsc2UgaWYgKGRtdXgtXFx1MDAzZXBjX3ZvdGUgPT0gQkFNX0RNVVhfUENfVk9URV9BQ0tFRCkge1xcbitcXHRcXHQvKiBUaGUgbW9kZW0gbXVzdCBrZWVwIHRoZSBETUEgZW5naW5lIG9uIHVudGlsIHBjIGlzIGFja2VkLiAqL1xcbitcXHRcXHRkbXV4LVxcdTAwM2VwY192b3RlID0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkc7XFxuK1xcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZG11eC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgXFxcInJlZnVzaW5nIHBjIGRvd24gd2hpbGUgaG9zdCB2b3RlIGlzIGFjdGl2ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xcbiBcXHRcXHRiYW1fZG11eF9wY19hY2soZG11eCk7XFxuK1xcdFxcdGRtdXgtXFx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0lOQUNUSVZFO1xcbiBcXHR9XFxuIFxcbi1cXHRkbXV4LVxcdTAwM2VwY19zdGF0ZSA9IG5ld19zdGF0ZTtcXG4tXFx0d2FrZV91cF9hbGwoXFx1MDAyNmRtdXgtXFx1MDAzZXBjX3dhaXQpO1xcbitcXHRXUklURV9PTkNFKGRtdXgtXFx1MDAzZXBjX3N0YXRlLCBuZXdfc3RhdGUpO1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4rc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRhdGE7XFxuK1xcdGJvb2wgbmV3X3N0YXRlLCB3YWtlO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZG11eC1cXHUwMDNlcG93ZXJfbG9jayk7XFxuK1xcdHJldCA9IGlycV9nZXRfaXJxY2hpcF9zdGF0ZShkbXV4LVxcdTAwM2VwY19pcnEsIElSUUNISVBfU1RBVEVfTElORV9MRVZFTCxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZuZXdfc3RhdGUpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZG11eC1cXHUwMDNlcG93ZXJfbG9jayk7XFxuK1xcdFxcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZG11eC1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHJlYWQgcGMgc3RhdGU6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK1xcdH1cXG4rXFxuK1xcdHdha2UgPSBiYW1fZG11eF9oYW5kbGVfcGMoZG11eCwgbmV3X3N0YXRlKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4rXFx0aWYgKHdha2UpXFxuK1xcdFxcdHdha2VfdXBfYWxsKFxcdTAwMjZkbXV4LVxcdTAwM2VwY193YWl0KTtcXG4gXFxuIFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4gfVxcbkBAIC02OTYsOSArNzYwLDMwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBiYW1fZG11eF9wY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4gc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2Fja19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkYXRhO1xcbitcXHRib29sIG5ld19zdGF0ZSwgd2FrZSA9IGZhbHNlO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0ZGV2X2RiZyhkbXV4LVxcdTAwM2VkZXYsIFxcXCJwYyBhY2tcXFxcblxcXCIpO1xcbitcXG4rXFx0LyogUHJvY2VzcyBhbiBlYXJsaWVyIHBjIGVkZ2UgYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGhvc3Qtdm90ZSBhY2suICovXFxuK1xcdHN5bmNocm9uaXplX2lycShkbXV4LVxcdTAwM2VwY19pcnEpO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4rXFx0cmV0ID0gaXJxX2dldF9pcnFjaGlwX3N0YXRlKGRtdXgtXFx1MDAzZXBjX2lycSwgSVJRQ0hJUF9TVEFURV9MSU5FX0xFVkVMLFxcbitcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ld19zdGF0ZSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4rXFx0XFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkbXV4LVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gcmVhZCBwYyBzdGF0ZTogJWRcXFxcblxcXCIsIHJldCk7XFxuK1xcdFxcdHJldHVybiBJUlFfSEFORExFRDtcXG4rXFx0fVxcbitcXG4rXFx0d2FrZSA9IGJhbV9kbXV4X2hhbmRsZV9wYyhkbXV4LCBuZXdfc3RhdGUpO1xcbitcXHRpZiAobmV3X3N0YXRlIFxcdTAwMjZcXHUwMDI2IGRtdXgtXFx1MDAzZXBjX3N0YXRlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBkbXV4LVxcdTAwM2VwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfUEVORElORylcXG4rXFx0XFx0ZG11eC1cXHUwMDNlcGNfdm90ZSA9IEJBTV9ETVVYX1BDX1ZPVEVfQUNLRUQ7XFxuIFxcdGNvbXBsZXRlX2FsbChcXHUwMDI2ZG11eC1cXHUwMDNlcGNfYWNrX2NvbXBsZXRpb24pO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtdXgtXFx1MDAzZXBvd2VyX2xvY2spO1xcbitcXHRpZiAod2FrZSlcXG4rXFx0XFx0d2FrZV91cF9hbGwoXFx1MDAyNmRtdXgtXFx1MDAzZXBjX3dhaXQpO1xcbiBcXG4gXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiB9XFxuQEAgLTcwNiw5ICs3OTEsMjEgQEAgc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2Fja19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcXG4gc3RhdGljIGludCBiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXHRib29sIHdha2UgPSBmYWxzZTtcXG4gXFxuIFxcdGRldl9kYmcoZGV2LCBcXFwicnVudGltZSBzdXNwZW5kXFxcXG5cXFwiKTtcXG4tXFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XFxuK1xcbitcXHR7XFxuK1xcdFxcdGd1YXJkKG11dGV4KShcXHUwMDI2ZG11eC1cXHUwMDNlcG93ZXJfbG9jayk7XFxuK1xcbitcXHRcXHRiYW1fZG11eF9wY192b3RlX2xvY2tlZChkbXV4LCBmYWxzZSk7XFxuK1xcdFxcdGlmIChkbXV4LVxcdTAwM2VwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfRE9XTl9QRU5ESU5HKVxcbitcXHRcXHRcXHR3YWtlID0gYmFtX2RtdXhfaGFuZGxlX3BjKGRtdXgsIGZhbHNlKTtcXG4rXFx0XFx0ZWxzZSBpZiAoIWRtdXgtXFx1MDAzZXBjX3N0YXRlKVxcbitcXHRcXHRcXHRiYW1fZG11eF9wb3dlcl9vZmYoZG11eCk7XFxuK1xcdH1cXG4rXFx0aWYgKHdha2UpXFxuK1xcdFxcdHdha2VfdXBfYWxsKFxcdTAwMjZkbXV4LVxcdTAwM2VwY193YWl0KTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTcxNiw2ICs4MTMsNyBAQCBzdGF0aWMgaW50IGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYmFtX2RtdXhfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4gXFxuIFxcdGRldl9kYmcoZGV2LCBcXFwicnVudGltZSByZXN1bWVcXFxcblxcXCIpO1xcbiBcXG5AQCAtNzI0LDUwICs4MjIsNTggQEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBiYW1fZG11eF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdFxcdFxcdFxcdFxcdCBCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpXFxuIFxcdFxcdHJldHVybiAtRVRJTUVET1VUO1xcbiBcXG4rXFx0c3luY2hyb25pemVfaXJxKGRtdXgtXFx1MDAzZXBjX2lycSk7XFxuK1xcbiBcXHQvKiBWb3RlIGZvciBwb3dlciBzdGF0ZSAqL1xcbi1cXHRiYW1fZG11eF9wY192b3RlKGRtdXgsIHRydWUpO1xcbitcXHRiYW1fZG11eF9wY192b3RlX3Byb3RlY3RlZChkbXV4LCB0cnVlKTtcXG4gXFxuIFxcdC8qIFdhaXQgZm9yIGFjayAqL1xcbiBcXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcXHUwMDI2ZG11eC1cXHUwMDNlcGNfYWNrX2NvbXBsZXRpb24sXFxuIFxcdFxcdFxcdFxcdFxcdCBCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpIHtcXG4tXFx0XFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XFxuK1xcdFxcdGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChkZXYpO1xcbiBcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4gXFx0fVxcbiBcXG4rXFx0c3luY2hyb25pemVfaXJxKGRtdXgtXFx1MDAzZXBjX2lycSk7XFxuK1xcbiBcXHQvKiBXYWl0IHVudGlsIHdlJ3JlIHVwICovXFxuLVxcdGlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtXFx1MDAzZXBjX3dhaXQsIGRtdXgtXFx1MDAzZXBjX3N0YXRlLFxcbitcXHRpZiAoIXdhaXRfZXZlbnRfdGltZW91dChkbXV4LVxcdTAwM2VwY193YWl0LCBSRUFEX09OQ0UoZG11eC1cXHUwMDNlcGNfc3RhdGUpLFxcbiBcXHRcXHRcXHRcXHRCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpIHtcXG4tXFx0XFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XFxuK1xcdFxcdGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChkZXYpO1xcbiBcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4gXFx0fVxcbiBcXG4tXFx0LyogRW5zdXJlIHRoYXQgd2UgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5ICovXFxuLVxcdGlmICghZG11eC1cXHUwMDNlcngpIHtcXG4tXFx0XFx0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBmYWxzZSk7XFxuLVxcdFxcdHJldHVybiAtRU5YSU87XFxuK1xcdHtcXG4rXFx0XFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4rXFxuK1xcdFxcdC8qIEVuc3VyZSB0aGF0IHdlIGFjdHVhbGx5IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAqL1xcbitcXHRcXHRpZiAoIWRtdXgtXFx1MDAzZXJ4KSB7XFxuK1xcdFxcdFxcdHJldCA9IC1FTlhJTztcXG4rXFx0XFx0fSBlbHNlIGlmICghZG11eC1cXHUwMDNldHgpIHtcXG4rXFx0XFx0XFx0LyogUmVxdWVzdCBUWCBjaGFubmVsIGlmIG5lY2Vzc2FyeSAqL1xcbitcXHRcXHRcXHRkbXV4LVxcdTAwM2V0eCA9IGRtYV9yZXF1ZXN0X2NoYW4oZGV2LCBcXFwidHhcXFwiKTtcXG4rXFx0XFx0XFx0aWYgKElTX0VSUihkbXV4LVxcdTAwM2V0eCkpIHtcXG4rXFx0XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gcmVxdWVzdCBUWCBETUEgY2hhbm5lbDogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRkbXV4LVxcdTAwM2V0eCk7XFxuK1xcdFxcdFxcdFxcdGRtdXgtXFx1MDAzZXR4ID0gTlVMTDtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVOWElPO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0LyogUmVxdWVzdCBUWCBjaGFubmVsIGlmIG5lY2Vzc2FyeSAqL1xcbi1cXHRpZiAoZG11eC1cXHUwMDNldHgpXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0ZG11eC1cXHUwMDNldHggPSBkbWFfcmVxdWVzdF9jaGFuKGRldiwgXFxcInR4XFxcIik7XFxuLVxcdGlmIChJU19FUlIoZG11eC1cXHUwMDNldHgpKSB7XFxuLVxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHJlcXVlc3QgVFggRE1BIGNoYW5uZWw6ICVwZVxcXFxuXFxcIiwgZG11eC1cXHUwMDNldHgpO1xcbi1cXHRcXHRkbXV4LVxcdTAwM2V0eCA9IE5VTEw7XFxuK1xcdGlmIChyZXQpXFxuIFxcdFxcdGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChkZXYpO1xcbi1cXHRcXHRyZXR1cm4gLUVOWElPO1xcbi1cXHR9XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuIFxcdHN0cnVjdCBiYW1fZG11eCAqZG11eDtcXG4tXFx0aW50IHJldCwgcGNfYWNrX2lycSwgaTtcXG4rXFx0aW50IHJldCwgaTtcXG4gXFx0dW5zaWduZWQgaW50IGJpdDtcXG4rXFx0Ym9vbCBwY19zdGF0ZTtcXG4gXFxuIFxcdGRtdXggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRtdXgpLCBHRlBfS0VSTkVMKTtcXG4gXFx0aWYgKCFkbXV4KVxcbkBAIC03ODAsOSArODg2LDkgQEAgc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRpZiAoZG11eC1cXHUwMDNlcGNfaXJxIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIGRtdXgtXFx1MDAzZXBjX2lycTtcXG4gXFxuLVxcdHBjX2Fja19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCBcXFwicGMtYWNrXFxcIik7XFxuLVxcdGlmIChwY19hY2tfaXJxIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHBjX2Fja19pcnE7XFxuK1xcdGRtdXgtXFx1MDAzZXBjX2Fja19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCBcXFwicGMtYWNrXFxcIik7XFxuK1xcdGlmIChkbXV4LVxcdTAwM2VwY19hY2tfaXJxIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGRtdXgtXFx1MDAzZXBjX2Fja19pcnE7XFxuIFxcbiBcXHRkbXV4LVxcdTAwM2VwYyA9IGRldm1fcWNvbV9zbWVtX3N0YXRlX2dldChkZXYsIFxcXCJwY1xcXCIsIFxcdTAwMjZiaXQpO1xcbiBcXHRpZiAoSVNfRVJSKGRtdXgtXFx1MDAzZXBjKSlcXG5AQCAtNzk5LDYgKzkwNSw5IEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2ZG11eC1cXHUwMDNlcGNfd2FpdCk7XFxuIFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2ZG11eC1cXHUwMDNlcGNfYWNrX2NvbXBsZXRpb24pO1xcbiBcXHRjb21wbGV0ZV9hbGwoXFx1MDAyNmRtdXgtXFx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcXG4rXFx0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXFx1MDAyNmRtdXgtXFx1MDAzZXBvd2VyX2xvY2spO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmRtdXgtXFx1MDAzZXR4X2xvY2spO1xcbiBcXHRJTklUX1dPUksoXFx1MDAyNmRtdXgtXFx1MDAzZXR4X3dha2V1cF93b3JrLCBiYW1fZG11eF90eF93YWtldXBfd29yayk7XFxuQEAgLTgxNywzMSArOTI2LDQwIEBAIHN0YXRpYyBpbnQgYmFtX2RtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0cG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoZGV2KTtcXG4gXFx0cG1fcnVudGltZV9lbmFibGUoZGV2KTtcXG4gXFxuLVxcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBwY19hY2tfaXJxLCBOVUxMLCBiYW1fZG11eF9wY19hY2tfaXJxLFxcbi1cXHRcXHRcXHRcXHRcXHRJUlFGX09ORVNIT1QsIE5VTEwsIGRtdXgpO1xcbitcXHRyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgZG11eC1cXHUwMDNlcGNfYWNrX2lycSwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0YmFtX2RtdXhfcGNfYWNrX2lycSxcXG4rXFx0XFx0XFx0XFx0XFx0SVJRRl9PTkVTSE9UIHwgSVJRRl9OT19BVVRPRU4sXFxuK1xcdFxcdFxcdFxcdFxcdE5VTEwsIGRtdXgpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIGVycl9kaXNhYmxlX3BtO1xcbiBcXG4gXFx0cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGRtdXgtXFx1MDAzZXBjX2lycSwgTlVMTCwgYmFtX2RtdXhfcGNfaXJxLFxcbi1cXHRcXHRcXHRcXHRcXHRJUlFGX09ORVNIT1QsIE5VTEwsIGRtdXgpO1xcbitcXHRcXHRcXHRcXHRcXHRJUlFGX09ORVNIT1QgfCBJUlFGX05PX0FVVE9FTiwgTlVMTCwgZG11eCk7XFxuIFxcdGlmIChyZXQpXFxuLVxcdFxcdGdvdG8gZXJyX2Rpc2FibGVfcG07XFxuK1xcdFxcdGdvdG8gZXJyX3Bvd2VyX29mZjtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmRtdXgtXFx1MDAzZXBvd2VyX2xvY2spO1xcbiBcXHRyZXQgPSBpcnFfZ2V0X2lycWNoaXBfc3RhdGUoZG11eC1cXHUwMDNlcGNfaXJxLCBJUlFDSElQX1NUQVRFX0xJTkVfTEVWRUwsXFxuLVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2ZG11eC1cXHUwMDNlcGNfc3RhdGUpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIGVycl9kaXNhYmxlX3BtO1xcbitcXHRcXHRcXHRcXHQgICAgXFx1MDAyNnBjX3N0YXRlKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtdXgtXFx1MDAzZXBvd2VyX2xvY2spO1xcbitcXHRcXHRnb3RvIGVycl9wb3dlcl9vZmY7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIENoZWNrIGlmIHJlbW90ZSBmaW5pc2hlZCBpbml0aWFsaXphdGlvbiBiZWZvcmUgdXMgKi9cXG4tXFx0aWYgKGRtdXgtXFx1MDAzZXBjX3N0YXRlKSB7XFxuLVxcdFxcdGlmIChiYW1fZG11eF9wb3dlcl9vbihkbXV4KSlcXG4tXFx0XFx0XFx0YmFtX2RtdXhfcGNfYWNrKGRtdXgpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcXG4tXFx0fVxcbitcXHRiYW1fZG11eF9oYW5kbGVfcGMoZG11eCwgcGNfc3RhdGUpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtdXgtXFx1MDAzZXBvd2VyX2xvY2spO1xcbitcXG4rXFx0LyogU3RhcnQgaGFuZGxpbmcgc3RhdGUgY2hhbmdlcyBhZnRlciB0aGUgaW5pdGlhbCBzdGF0ZSBpcyBwcm9jZXNzZWQuICovXFxuK1xcdGVuYWJsZV9pcnEoZG11eC1cXHUwMDNlcGNfYWNrX2lycSk7XFxuK1xcdGVuYWJsZV9pcnEoZG11eC1cXHUwMDNlcGNfaXJxKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG4rZXJyX3Bvd2VyX29mZjpcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZG11eC1cXHUwMDNlcG93ZXJfbG9jayk7XFxuK1xcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4gZXJyX2Rpc2FibGVfcG06XFxuIFxcdHBtX3J1bnRpbWVfZGlzYWJsZShkZXYpO1xcbiBcXHRwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7XFxuQEAgLTg3MiwxMiArOTkwLDE2IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTtcXG4gXFxuIFxcdC8qIFRyeSB0byB3YWl0IGZvciByZW1vdGUgc2lkZSB0byBkcm9wIHBvd2VyIHZvdGUgKi9cXG4tXFx0aWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoZG11eC1cXHUwMDNlcGNfd2FpdCwgIWRtdXgtXFx1MDAzZXJ4LCBCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpXFxuK1xcdGlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtXFx1MDAzZXBjX3dhaXQsICFSRUFEX09OQ0UoZG11eC1cXHUwMDNlcngpLFxcbitcXHRcXHRcXHRcXHRCQU1fRE1VWF9SRU1PVEVfVElNRU9VVCkpXFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlbW90ZSBzaWRlIHRvIHN1c3BlbmRcXFxcblxcXCIpO1xcbiBcXG4gXFx0LyogTWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY2xlYW5lZCB1cCBiZWZvcmUgd2UgcmV0dXJuICovXFxuK1xcdGRpc2FibGVfaXJxKGRtdXgtXFx1MDAzZXBjX2Fja19pcnEpO1xcbiBcXHRkaXNhYmxlX2lycShkbXV4LVxcdTAwM2VwY19pcnEpO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZkbXV4LVxcdTAwM2Vwb3dlcl9sb2NrKTtcXG4gXFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRtdXgtXFx1MDAzZXBvd2VyX2xvY2spO1xcbiBcXHRiYW1fZG11eF9mcmVlX3NrYnMoZG11eC1cXHUwMDNldHhfc2ticywgRE1BX1RPX0RFVklDRSk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjQwLjE1NjYyNTY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjM3MjQ1ODIyMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIFF1YWxjb21tIEJBTSBEYXRhIE11bHRpcGxleGVyIChxY29tX2JhbV9kbXV4KSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBkcml2ZXIuIEl0IHJlbGllcyBvbiBoYXJkd2FyZS1zcGVjaWZpYyBmZWF0dXJlcyBsaWtlIFF1YWxjb21tIFNNRU0gYW5kIEJBTSBETUEgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NzU5MDY0ZTFhNTg4MDA0YmM5Y2MyYmMzOGY1YjhhNTMyOTRhZGZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMDk6NDU6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYyBiL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG5pbmRleCBjYzZhY2U4ZDY0MzcxLi4zNzU2Y2RiN2EzMTk5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jXG5AQCAtNiwxMiArNiwxNCBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0b3BzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hZW5naW5lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuQEAgLTY0LDE1ICs2NiwyNCBAQCBzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSB7XG4gXHRkbWFfYWRkcl90IGFkZHI7XG4gfTtcbiBcbitlbnVtIGJhbV9kbXV4X3BjX3ZvdGUge1xuK1x0QkFNX0RNVVhfUENfVk9URV9JTkFDVElWRSwgLyogcGNfdm90ZSA9IGZhbHNlICovXG4rXHRCQU1fRE1VWF9QQ19WT1RFX1BFTkRJTkcsIC8qIHBjX3ZvdGUgPSB0cnVlLCB3YWl0aW5nIGZvciBBQ0sgKi9cbitcdEJBTV9ETVVYX1BDX1ZPVEVfQUNLRUQsIC8qIHBjX3ZvdGUgPSB0cnVlLCBBQ0sgcmVjZWl2ZWQgKi9cbitcdEJBTV9ETVVYX1BDX1ZPVEVfRE9XTl9QRU5ESU5HLCAvKiBwYyA9IGZhbHNlIHdoaWxlIGhvc3Qgdm90ZSBhY3RpdmUgKi9cbit9O1xuK1xuIHN0cnVjdCBiYW1fZG11eCB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4gXG4tXHRpbnQgcGNfaXJxO1xuK1x0aW50IHBjX2lycSwgcGNfYWNrX2lycTtcbiBcdGJvb2wgcGNfc3RhdGUsIHBjX2Fja19zdGF0ZTtcbiBcdHN0cnVjdCBxY29tX3NtZW1fc3RhdGUgKnBjLCAqcGNfYWNrO1xuIFx0dTMyIHBjX21hc2ssIHBjX2Fja19tYXNrO1xuIFx0d2FpdF9xdWV1ZV9oZWFkX3QgcGNfd2FpdDtcbiBcdHN0cnVjdCBjb21wbGV0aW9uIHBjX2Fja19jb21wbGV0aW9uO1xuK1x0c3RydWN0IG11dGV4IHBvd2VyX2xvY2s7IC8qIFByb3RlY3QgcG93ZXItY29udHJvbCBzdGF0ZSAqL1xuK1x0ZW51bSBiYW1fZG11eF9wY192b3RlIHBjX3ZvdGU7XG4gXG4gXHRzdHJ1Y3QgZG1hX2NoYW4gKnJ4LCAqdHg7XG4gXHRzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSByeF9za2JzW0JBTV9ETVVYX05VTV9TS0JdO1xuQEAgLTk5LDYgKzExMCwyNCBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9wY192b3RlKHN0cnVjdCBiYW1fZG11eCAqZG11eCwgYm9vbCBlbmFibGUpXG4gXHRcdFx0XHQgICAgZW5hYmxlID8gZG11eC1cdTAwM2VwY19tYXNrIDogMCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGJhbV9kbXV4X3BjX3ZvdGVfbG9ja2VkKHN0cnVjdCBiYW1fZG11eCAqZG11eCwgYm9vbCBlbmFibGUpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuK1xuK1x0aWYgKGVuYWJsZSlcbitcdFx0ZG11eC1cdTAwM2VwY192b3RlID0gQkFNX0RNVVhfUENfVk9URV9QRU5ESU5HO1xuK1x0ZWxzZSBpZiAoZG11eC1cdTAwM2VwY192b3RlICE9IEJBTV9ETVVYX1BDX1ZPVEVfRE9XTl9QRU5ESU5HKVxuK1x0XHRkbXV4LVx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0lOQUNUSVZFO1xuK1x0YmFtX2RtdXhfcGNfdm90ZShkbXV4LCBlbmFibGUpO1xuK31cbitcbitzdGF0aWMgdm9pZCBiYW1fZG11eF9wY192b3RlX3Byb3RlY3RlZChzdHJ1Y3QgYmFtX2RtdXggKmRtdXgsIGJvb2wgZW5hYmxlKVxuK3tcbitcdG11dGV4X2xvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcdGJhbV9kbXV4X3BjX3ZvdGVfbG9ja2VkKGRtdXgsIGVuYWJsZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgYmFtX2RtdXhfcGNfYWNrKHN0cnVjdCBiYW1fZG11eCAqZG11eClcbiB7XG4gXHRxY29tX3NtZW1fc3RhdGVfdXBkYXRlX2JpdHMoZG11eC1cdTAwM2VwY19hY2ssIGRtdXgtXHUwMDNlcGNfYWNrX21hc2ssXG5AQCAtNjU1LDYgKzY4NCw4IEBAIHN0YXRpYyB2b2lkIGJhbV9kbXV4X2ZyZWVfc2ticyhzdHJ1Y3QgYmFtX2RtdXhfc2tiX2RtYSBza2JzW10sXG4gXG4gc3RhdGljIHZvaWQgYmFtX2RtdXhfcG93ZXJfb2ZmKHN0cnVjdCBiYW1fZG11eCAqZG11eClcbiB7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4rXG4gXHRpZiAoZG11eC1cdTAwM2V0eCkge1xuIFx0XHRkbWFlbmdpbmVfdGVybWluYXRlX3N5bmMoZG11eC1cdTAwM2V0eCk7XG4gXHRcdGRtYV9yZWxlYXNlX2NoYW5uZWwoZG11eC1cdTAwM2V0eCk7XG5AQCAtNjcwLDEwICs3MDEsMTUgQEAgc3RhdGljIHZvaWQgYmFtX2RtdXhfcG93ZXJfb2ZmKHN0cnVjdCBiYW1fZG11eCAqZG11eClcbiBcdGJhbV9kbXV4X2ZyZWVfc2ticyhkbXV4LVx1MDAzZXJ4X3NrYnMsIERNQV9GUk9NX0RFVklDRSk7XG4gfVxuIFxuLXN0YXRpYyBpcnFyZXR1cm5fdCBiYW1fZG11eF9wY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcbitzdGF0aWMgYm9vbCBiYW1fZG11eF9oYW5kbGVfcGMoc3RydWN0IGJhbV9kbXV4ICpkbXV4LCBib29sIG5ld19zdGF0ZSlcbiB7XG4tXHRzdHJ1Y3QgYmFtX2RtdXggKmRtdXggPSBkYXRhO1xuLVx0Ym9vbCBuZXdfc3RhdGUgPSAhZG11eC1cdTAwM2VwY19zdGF0ZTtcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcbitcdGlmIChuZXdfc3RhdGUgPT0gZG11eC1cdTAwM2VwY19zdGF0ZSkge1xuK1x0XHRpZiAobmV3X3N0YXRlIFx1MDAyNlx1MDAyNiBkbXV4LVx1MDAzZXBjX3ZvdGUgPT0gQkFNX0RNVVhfUENfVk9URV9ET1dOX1BFTkRJTkcpXG4rXHRcdFx0ZG11eC1cdTAwM2VwY192b3RlID0gQkFNX0RNVVhfUENfVk9URV9BQ0tFRDtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0fVxuIFxuIFx0ZGV2X2RiZyhkbXV4LVx1MDAzZWRldiwgXCJwYzogJXVcXG5cIiwgbmV3X3N0YXRlKTtcbiBcbkBAIC02ODIsMTMgKzcxOCw0MSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpXG4gXHRcdFx0YmFtX2RtdXhfcGNfYWNrKGRtdXgpO1xuIFx0XHRlbHNlXG4gXHRcdFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xuK1x0fSBlbHNlIGlmIChkbXV4LVx1MDAzZXBjX3ZvdGUgPT0gQkFNX0RNVVhfUENfVk9URV9BQ0tFRCkge1xuK1x0XHQvKiBUaGUgbW9kZW0gbXVzdCBrZWVwIHRoZSBETUEgZW5naW5lIG9uIHVudGlsIHBjIGlzIGFja2VkLiAqL1xuK1x0XHRkbXV4LVx1MDAzZXBjX3ZvdGUgPSBCQU1fRE1VWF9QQ19WT1RFX0RPV05fUEVORElORztcbitcdFx0ZGV2X2Vycl9yYXRlbGltaXRlZChkbXV4LVx1MDAzZWRldixcbitcdFx0XHRcdCAgICBcInJlZnVzaW5nIHBjIGRvd24gd2hpbGUgaG9zdCB2b3RlIGlzIGFjdGl2ZVxcblwiKTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fSBlbHNlIHtcbiBcdFx0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xuIFx0XHRiYW1fZG11eF9wY19hY2soZG11eCk7XG4rXHRcdGRtdXgtXHUwMDNlcGNfdm90ZSA9IEJBTV9ETVVYX1BDX1ZPVEVfSU5BQ1RJVkU7XG4gXHR9XG4gXG4tXHRkbXV4LVx1MDAzZXBjX3N0YXRlID0gbmV3X3N0YXRlO1xuLVx0d2FrZV91cF9hbGwoXHUwMDI2ZG11eC1cdTAwM2VwY193YWl0KTtcbitcdFdSSVRFX09OQ0UoZG11eC1cdTAwM2VwY19zdGF0ZSwgbmV3X3N0YXRlKTtcbitcdHJldHVybiB0cnVlO1xuK31cbitcbitzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gZGF0YTtcbitcdGJvb2wgbmV3X3N0YXRlLCB3YWtlO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcdHJldCA9IGlycV9nZXRfaXJxY2hpcF9zdGF0ZShkbXV4LVx1MDAzZXBjX2lycSwgSVJRQ0hJUF9TVEFURV9MSU5FX0xFVkVMLFxuK1x0XHRcdFx0ICAgIFx1MDAyNm5ld19zdGF0ZSk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuK1x0XHRkZXZfZXJyX3JhdGVsaW1pdGVkKGRtdXgtXHUwMDNlZGV2LCBcImZhaWxlZCB0byByZWFkIHBjIHN0YXRlOiAlZFxcblwiLCByZXQpO1xuK1x0XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4rXHR9XG4rXG4rXHR3YWtlID0gYmFtX2RtdXhfaGFuZGxlX3BjKGRtdXgsIG5ld19zdGF0ZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcdGlmICh3YWtlKVxuK1x0XHR3YWtlX3VwX2FsbChcdTAwMjZkbXV4LVx1MDAzZXBjX3dhaXQpO1xuIFxuIFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuIH1cbkBAIC02OTYsOSArNzYwLDMwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBiYW1fZG11eF9wY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcbiBzdGF0aWMgaXJxcmV0dXJuX3QgYmFtX2RtdXhfcGNfYWNrX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRhdGE7XG4rXHRib29sIG5ld19zdGF0ZSwgd2FrZSA9IGZhbHNlO1xuK1x0aW50IHJldDtcbiBcbiBcdGRldl9kYmcoZG11eC1cdTAwM2VkZXYsIFwicGMgYWNrXFxuXCIpO1xuK1xuK1x0LyogUHJvY2VzcyBhbiBlYXJsaWVyIHBjIGVkZ2UgYmVmb3JlIHB1Ymxpc2hpbmcgdGhlIGhvc3Qtdm90ZSBhY2suICovXG4rXHRzeW5jaHJvbml6ZV9pcnEoZG11eC1cdTAwM2VwY19pcnEpO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuK1x0cmV0ID0gaXJxX2dldF9pcnFjaGlwX3N0YXRlKGRtdXgtXHUwMDNlcGNfaXJxLCBJUlFDSElQX1NUQVRFX0xJTkVfTEVWRUwsXG4rXHRcdFx0XHQgICAgXHUwMDI2bmV3X3N0YXRlKTtcbitcdGlmIChyZXQpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4rXHRcdGRldl9lcnJfcmF0ZWxpbWl0ZWQoZG11eC1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIHJlYWQgcGMgc3RhdGU6ICVkXFxuXCIsIHJldCk7XG4rXHRcdHJldHVybiBJUlFfSEFORExFRDtcbitcdH1cbitcbitcdHdha2UgPSBiYW1fZG11eF9oYW5kbGVfcGMoZG11eCwgbmV3X3N0YXRlKTtcbitcdGlmIChuZXdfc3RhdGUgXHUwMDI2XHUwMDI2IGRtdXgtXHUwMDNlcGNfc3RhdGUgXHUwMDI2XHUwMDI2XG4rXHQgICAgZG11eC1cdTAwM2VwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfUEVORElORylcbitcdFx0ZG11eC1cdTAwM2VwY192b3RlID0gQkFNX0RNVVhfUENfVk9URV9BQ0tFRDtcbiBcdGNvbXBsZXRlX2FsbChcdTAwMjZkbXV4LVx1MDAzZXBjX2Fja19jb21wbGV0aW9uKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuK1x0aWYgKHdha2UpXG4rXHRcdHdha2VfdXBfYWxsKFx1MDAyNmRtdXgtXHUwMDNlcGNfd2FpdCk7XG4gXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuQEAgLTcwNiw5ICs3OTEsMjEgQEAgc3RhdGljIGlycXJldHVybl90IGJhbV9kbXV4X3BjX2Fja19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSlcbiBzdGF0aWMgaW50IGJhbV9kbXV4X3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4rXHRib29sIHdha2UgPSBmYWxzZTtcbiBcbiBcdGRldl9kYmcoZGV2LCBcInJ1bnRpbWUgc3VzcGVuZFxcblwiKTtcbi1cdGJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgZmFsc2UpO1xuK1xuK1x0e1xuK1x0XHRndWFyZChtdXRleCkoXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcbitcdFx0YmFtX2RtdXhfcGNfdm90ZV9sb2NrZWQoZG11eCwgZmFsc2UpO1xuK1x0XHRpZiAoZG11eC1cdTAwM2VwY192b3RlID09IEJBTV9ETVVYX1BDX1ZPVEVfRE9XTl9QRU5ESU5HKVxuK1x0XHRcdHdha2UgPSBiYW1fZG11eF9oYW5kbGVfcGMoZG11eCwgZmFsc2UpO1xuK1x0XHRlbHNlIGlmICghZG11eC1cdTAwM2VwY19zdGF0ZSlcbitcdFx0XHRiYW1fZG11eF9wb3dlcl9vZmYoZG11eCk7XG4rXHR9XG4rXHRpZiAod2FrZSlcbitcdFx0d2FrZV91cF9hbGwoXHUwMDI2ZG11eC1cdTAwM2VwY193YWl0KTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC03MTYsNiArODEzLDcgQEAgc3RhdGljIGludCBiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIHN0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYmFtX2RtdXhfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBiYW1fZG11eCAqZG11eCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuK1x0aW50IHJldCA9IDA7XG4gXG4gXHRkZXZfZGJnKGRldiwgXCJydW50aW1lIHJlc3VtZVxcblwiKTtcbiBcbkBAIC03MjQsNTAgKzgyMiw1OCBAQCBzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGJhbV9kbXV4X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdFx0XHRcdFx0IEJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSlcbiBcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4gXG4rXHRzeW5jaHJvbml6ZV9pcnEoZG11eC1cdTAwM2VwY19pcnEpO1xuK1xuIFx0LyogVm90ZSBmb3IgcG93ZXIgc3RhdGUgKi9cbi1cdGJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgdHJ1ZSk7XG4rXHRiYW1fZG11eF9wY192b3RlX3Byb3RlY3RlZChkbXV4LCB0cnVlKTtcbiBcbiBcdC8qIFdhaXQgZm9yIGFjayAqL1xuIFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2ZG11eC1cdTAwM2VwY19hY2tfY29tcGxldGlvbixcbiBcdFx0XHRcdFx0IEJBTV9ETVVYX1JFTU9URV9USU1FT1VUKSkge1xuLVx0XHRiYW1fZG11eF9wY192b3RlKGRtdXgsIGZhbHNlKTtcbitcdFx0YmFtX2RtdXhfcnVudGltZV9zdXNwZW5kKGRldik7XG4gXHRcdHJldHVybiAtRVRJTUVET1VUO1xuIFx0fVxuIFxuK1x0c3luY2hyb25pemVfaXJxKGRtdXgtXHUwMDNlcGNfaXJxKTtcbitcbiBcdC8qIFdhaXQgdW50aWwgd2UncmUgdXAgKi9cbi1cdGlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtXHUwMDNlcGNfd2FpdCwgZG11eC1cdTAwM2VwY19zdGF0ZSxcbitcdGlmICghd2FpdF9ldmVudF90aW1lb3V0KGRtdXgtXHUwMDNlcGNfd2FpdCwgUkVBRF9PTkNFKGRtdXgtXHUwMDNlcGNfc3RhdGUpLFxuIFx0XHRcdFx0QkFNX0RNVVhfUkVNT1RFX1RJTUVPVVQpKSB7XG4tXHRcdGJhbV9kbXV4X3BjX3ZvdGUoZG11eCwgZmFsc2UpO1xuK1x0XHRiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoZGV2KTtcbiBcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4gXHR9XG4gXG4tXHQvKiBFbnN1cmUgdGhhdCB3ZSBhY3R1YWxseSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgKi9cbi1cdGlmICghZG11eC1cdTAwM2VyeCkge1xuLVx0XHRiYW1fZG11eF9wY192b3RlKGRtdXgsIGZhbHNlKTtcbi1cdFx0cmV0dXJuIC1FTlhJTztcbitcdHtcbitcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4rXG4rXHRcdC8qIEVuc3VyZSB0aGF0IHdlIGFjdHVhbGx5IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSAqL1xuK1x0XHRpZiAoIWRtdXgtXHUwMDNlcngpIHtcbitcdFx0XHRyZXQgPSAtRU5YSU87XG4rXHRcdH0gZWxzZSBpZiAoIWRtdXgtXHUwMDNldHgpIHtcbitcdFx0XHQvKiBSZXF1ZXN0IFRYIGNoYW5uZWwgaWYgbmVjZXNzYXJ5ICovXG4rXHRcdFx0ZG11eC1cdTAwM2V0eCA9IGRtYV9yZXF1ZXN0X2NoYW4oZGV2LCBcInR4XCIpO1xuK1x0XHRcdGlmIChJU19FUlIoZG11eC1cdTAwM2V0eCkpIHtcbitcdFx0XHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byByZXF1ZXN0IFRYIERNQSBjaGFubmVsOiAlcGVcXG5cIixcbitcdFx0XHRcdFx0ZG11eC1cdTAwM2V0eCk7XG4rXHRcdFx0XHRkbXV4LVx1MDAzZXR4ID0gTlVMTDtcbitcdFx0XHRcdHJldCA9IC1FTlhJTztcbitcdFx0XHR9XG4rXHRcdH1cbiBcdH1cbiBcbi1cdC8qIFJlcXVlc3QgVFggY2hhbm5lbCBpZiBuZWNlc3NhcnkgKi9cbi1cdGlmIChkbXV4LVx1MDAzZXR4KVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdGRtdXgtXHUwMDNldHggPSBkbWFfcmVxdWVzdF9jaGFuKGRldiwgXCJ0eFwiKTtcbi1cdGlmIChJU19FUlIoZG11eC1cdTAwM2V0eCkpIHtcbi1cdFx0ZGV2X2VycihkZXYsIFwiRmFpbGVkIHRvIHJlcXVlc3QgVFggRE1BIGNoYW5uZWw6ICVwZVxcblwiLCBkbXV4LVx1MDAzZXR4KTtcbi1cdFx0ZG11eC1cdTAwM2V0eCA9IE5VTEw7XG4rXHRpZiAocmV0KVxuIFx0XHRiYW1fZG11eF9ydW50aW1lX3N1c3BlbmQoZGV2KTtcbi1cdFx0cmV0dXJuIC1FTlhJTztcbi1cdH1cbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIFx0c3RydWN0IGJhbV9kbXV4ICpkbXV4O1xuLVx0aW50IHJldCwgcGNfYWNrX2lycSwgaTtcbitcdGludCByZXQsIGk7XG4gXHR1bnNpZ25lZCBpbnQgYml0O1xuK1x0Ym9vbCBwY19zdGF0ZTtcbiBcbiBcdGRtdXggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRtdXgpLCBHRlBfS0VSTkVMKTtcbiBcdGlmICghZG11eClcbkBAIC03ODAsOSArODg2LDkgQEAgc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKGRtdXgtXHUwMDNlcGNfaXJxIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZG11eC1cdTAwM2VwY19pcnE7XG4gXG4tXHRwY19hY2tfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgXCJwYy1hY2tcIik7XG4tXHRpZiAocGNfYWNrX2lycSBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHBjX2Fja19pcnE7XG4rXHRkbXV4LVx1MDAzZXBjX2Fja19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCBcInBjLWFja1wiKTtcbitcdGlmIChkbXV4LVx1MDAzZXBjX2Fja19pcnEgXHUwMDNjIDApXG4rXHRcdHJldHVybiBkbXV4LVx1MDAzZXBjX2Fja19pcnE7XG4gXG4gXHRkbXV4LVx1MDAzZXBjID0gZGV2bV9xY29tX3NtZW1fc3RhdGVfZ2V0KGRldiwgXCJwY1wiLCBcdTAwMjZiaXQpO1xuIFx0aWYgKElTX0VSUihkbXV4LVx1MDAzZXBjKSlcbkBAIC03OTksNiArOTA1LDkgQEAgc3RhdGljIGludCBiYW1fZG11eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZkbXV4LVx1MDAzZXBjX3dhaXQpO1xuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmRtdXgtXHUwMDNlcGNfYWNrX2NvbXBsZXRpb24pO1xuIFx0Y29tcGxldGVfYWxsKFx1MDAyNmRtdXgtXHUwMDNlcGNfYWNrX2NvbXBsZXRpb24pO1xuK1x0cmV0ID0gZGV2bV9tdXRleF9pbml0KGRldiwgXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZkbXV4LVx1MDAzZXR4X2xvY2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNmRtdXgtXHUwMDNldHhfd2FrZXVwX3dvcmssIGJhbV9kbXV4X3R4X3dha2V1cF93b3JrKTtcbkBAIC04MTcsMzEgKzkyNiw0MCBAQCBzdGF0aWMgaW50IGJhbV9kbXV4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZChkZXYpO1xuIFx0cG1fcnVudGltZV9lbmFibGUoZGV2KTtcbiBcbi1cdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBwY19hY2tfaXJxLCBOVUxMLCBiYW1fZG11eF9wY19hY2tfaXJxLFxuLVx0XHRcdFx0XHRJUlFGX09ORVNIT1QsIE5VTEwsIGRtdXgpO1xuK1x0cmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGRtdXgtXHUwMDNlcGNfYWNrX2lycSwgTlVMTCxcbitcdFx0XHRcdFx0YmFtX2RtdXhfcGNfYWNrX2lycSxcbitcdFx0XHRcdFx0SVJRRl9PTkVTSE9UIHwgSVJRRl9OT19BVVRPRU4sXG4rXHRcdFx0XHRcdE5VTEwsIGRtdXgpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfZGlzYWJsZV9wbTtcbiBcbiBcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBkbXV4LVx1MDAzZXBjX2lycSwgTlVMTCwgYmFtX2RtdXhfcGNfaXJxLFxuLVx0XHRcdFx0XHRJUlFGX09ORVNIT1QsIE5VTEwsIGRtdXgpO1xuK1x0XHRcdFx0XHRJUlFGX09ORVNIT1QgfCBJUlFGX05PX0FVVE9FTiwgTlVMTCwgZG11eCk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIGVycl9kaXNhYmxlX3BtO1xuK1x0XHRnb3RvIGVycl9wb3dlcl9vZmY7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4gXHRyZXQgPSBpcnFfZ2V0X2lycWNoaXBfc3RhdGUoZG11eC1cdTAwM2VwY19pcnEsIElSUUNISVBfU1RBVEVfTElORV9MRVZFTCxcbi1cdFx0XHRcdCAgICBcdTAwMjZkbXV4LVx1MDAzZXBjX3N0YXRlKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gZXJyX2Rpc2FibGVfcG07XG4rXHRcdFx0XHQgICAgXHUwMDI2cGNfc3RhdGUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcdFx0Z290byBlcnJfcG93ZXJfb2ZmO1xuK1x0fVxuIFxuIFx0LyogQ2hlY2sgaWYgcmVtb3RlIGZpbmlzaGVkIGluaXRpYWxpemF0aW9uIGJlZm9yZSB1cyAqL1xuLVx0aWYgKGRtdXgtXHUwMDNlcGNfc3RhdGUpIHtcbi1cdFx0aWYgKGJhbV9kbXV4X3Bvd2VyX29uKGRtdXgpKVxuLVx0XHRcdGJhbV9kbXV4X3BjX2FjayhkbXV4KTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcbi1cdH1cbitcdGJhbV9kbXV4X2hhbmRsZV9wYyhkbXV4LCBwY19zdGF0ZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbitcbitcdC8qIFN0YXJ0IGhhbmRsaW5nIHN0YXRlIGNoYW5nZXMgYWZ0ZXIgdGhlIGluaXRpYWwgc3RhdGUgaXMgcHJvY2Vzc2VkLiAqL1xuK1x0ZW5hYmxlX2lycShkbXV4LVx1MDAzZXBjX2Fja19pcnEpO1xuK1x0ZW5hYmxlX2lycShkbXV4LVx1MDAzZXBjX2lycSk7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbitlcnJfcG93ZXJfb2ZmOlxuK1x0bXV0ZXhfbG9jayhcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuK1x0YmFtX2RtdXhfcG93ZXJfb2ZmKGRtdXgpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRtdXgtXHUwMDNlcG93ZXJfbG9jayk7XG4gZXJyX2Rpc2FibGVfcG06XG4gXHRwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTtcbiBcdHBtX3J1bnRpbWVfZG9udF91c2VfYXV0b3N1c3BlbmQoZGV2KTtcbkBAIC04NzIsMTIgKzk5MCwxNiBAQCBzdGF0aWMgdm9pZCBiYW1fZG11eF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChkZXYpO1xuIFxuIFx0LyogVHJ5IHRvIHdhaXQgZm9yIHJlbW90ZSBzaWRlIHRvIGRyb3AgcG93ZXIgdm90ZSAqL1xuLVx0aWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoZG11eC1cdTAwM2VwY193YWl0LCAhZG11eC1cdTAwM2VyeCwgQkFNX0RNVVhfUkVNT1RFX1RJTUVPVVQpKVxuK1x0aWYgKCF3YWl0X2V2ZW50X3RpbWVvdXQoZG11eC1cdTAwM2VwY193YWl0LCAhUkVBRF9PTkNFKGRtdXgtXHUwMDNlcngpLFxuK1x0XHRcdFx0QkFNX0RNVVhfUkVNT1RFX1RJTUVPVVQpKVxuIFx0XHRkZXZfZXJyKGRldiwgXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgcmVtb3RlIHNpZGUgdG8gc3VzcGVuZFxcblwiKTtcbiBcbiBcdC8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNsZWFuZWQgdXAgYmVmb3JlIHdlIHJldHVybiAqL1xuK1x0ZGlzYWJsZV9pcnEoZG11eC1cdTAwM2VwY19hY2tfaXJxKTtcbiBcdGRpc2FibGVfaXJxKGRtdXgtXHUwMDNlcGNfaXJxKTtcbitcdG11dGV4X2xvY2soXHUwMDI2ZG11eC1cdTAwM2Vwb3dlcl9sb2NrKTtcbiBcdGJhbV9kbXV4X3Bvd2VyX29mZihkbXV4KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZkbXV4LVx1MDAzZXBvd2VyX2xvY2spO1xuIFx0YmFtX2RtdXhfZnJlZV9za2JzKGRtdXgtXHUwMDNldHhfc2ticywgRE1BX1RPX0RFVklDRSk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDU6NDAuMTU2NjI3MDNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQwNzczMzQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBgcWNvbV9iYW1fZG11eC5jYCwgd2hpY2gsIGZyb20gYSBxdWljayBnbGFuY2UsIHNlZW1zIHRvIGJlIGEgcG93ZXIgbWFuYWdlbWVudCBmaXggZm9yIHRoZSBRdWFsY29tbSBCQU0gRGF0YSBNdWx0aXBsZXhlciBkcml2ZXIuIEl0J3MgdG91Y2hpbmcgbXV0ZXhlcywgSVJRIGhhbmRsZXJzLCBhbmQgcnVudGltZSBzdXNwZW5kL3Jlc3VtZSBmdW5jdGlvbnMuIE15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGlzIGNvdWxkIGJlIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBidXQgbGV0J3MgZGl2ZSBkZWVwZXIgYW5kIHRoaW5rIHRoaXMgdGhyb3VnaCBtZXRob2RpY2FsbHkuXG5cbkZpcnN0LCB0aGUgY29yZSBxdWVzdGlvbjogaXMgdGhpcyBkcml2ZXIgKnJlYWNoYWJsZSogaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lPyBUaGF0J3MgdGhlIGNyaXRpY2FsIGZpbHRlciBoZXJlLiBUaGlzIGlzIGEgUXVhbGNvbW0tc3BlY2lmaWMgQkFNIERhdGEgTXVsdGlwbGV4ZXIgZHJpdmVyLCBzbyBJIG5lZWQgdG8gYXNzZXNzIGhvdyBsaWtlbHkgaXQgaXMgdG8gYmUgZW11bGF0ZWQgb3IgZXZlbiB0cmlnZ2VyIGl0cyBjb2RlIHBhdGhzIHdpdGhpbiBhIHZpcnR1YWwgbWFjaGluZS4gVGhpcyBzcGVjaWZpYyBkcml2ZXIgaXMgYHFjb21fYmFtX2RtdXguY2AgYW5kIGlzIGEgcGxhdGZvcm0gZHJpdmVyLlxuXG5NeSBleHBlcmllbmNlIHdpdGggUXVhbGNvbW0gaGFyZHdhcmUgc3VnZ2VzdHMgdGhhdCBkaXJlY3QgZW11bGF0aW9uIG9mIGNvbXBvbmVudHMgbGlrZSBCQU0gRE1BIG9yIFNoYXJlZCBNZW1vcnkgKFNNRU0pIGlzIG9mdGVuIHRyaWNreSBpbiBzdGFuZGFyZCBRRU1VIHVubGVzcyB0aGVyZSdzIGEgdmVyeSBzcGVjaWZpYyBtYWNoaW5lIG1vZGVsIHRoYXQgZXhwbGljaXRseSBpbmNsdWRlcyBpdC4gSG93ZXZlciwgdGhlIGZhY3QgdGhhdCBpdCdzIGEgKnBsYXRmb3JtKiBkcml2ZXIgZ2l2ZXMgbWUgYSBnbGltbWVyIG9mIGhvcGUuIFBsYXRmb3JtIGRyaXZlcnMgYXJlLCBpbiB0aGVvcnksIGVhc2llciB0byBtYW5pcHVsYXRlIGFuZCBwb3RlbnRpYWxseSBpbnN0YW50aWF0ZSB0aHJvdWdoIHRlY2huaXF1ZXMgbGlrZSBzeXprYWxsZXIuXG5cbkNhbiBzeXprYWxsZXIgY3JlYXRlIGEgXCJmYWtlXCIgcGxhdGZvcm0gZGV2aWNlIHRoYXQgdHJpZ2dlcnMgdGhpcyBkcml2ZXI/IE1heWJlLCB1c2luZyBgc3l6X2dlbl9zeXNmc2Agb3IgYnkgZGlyZWN0bHkgd3JpdGluZyB0byBgL3N5cy9kZXZpY2VzL3BsYXRmb3JtYCBpZiBzdWNoIGEgcGF0aHdheSBleGlzdHMuIEhvd2V2ZXIsIEkga25vdyBwbGF0Zm9ybSBkZXZpY2VzIGFyZSB1c3VhbGx5IGluc3RhbnRpYXRlZCBieSBEZXZpY2UgVHJlZSAoRFQpLlxuXG5UaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGlzIHRoZXJlIGEgRFQgbm9kZSBmb3IgYHFjb21fYmFtX2RtdXhgIHRoYXQgSSBjYW4gdHJ5IHRvIHRyaWdnZXI/IFdpdGhvdXQgYSBzcGVjaWZpYyBgc3l6bGFuZ2AgZGVzY3JpcHRpb24gb3IgYSBzdGFuZGFyZCBEVCBpbmplY3Rpb24gbWVjaGFuaXNtLCBpdCBzZWVtcyB1bmxpa2VseSB0aGF0IEkgY2FuIGp1c3QgdGhyb3cgaXQgaW4sIGJ1dCBJIHNob3VsZCBjaGVjayBhbmQgbWFrZSBzdXJlIHRoYXQgaXQgZG9lcyByZXF1aXJlIGEgYHFjb20sYmFtLWRtdXhgIGNvbXBhdGlibGUgc3RyaW5nIGluIERULiBNeSBpbnR1aXRpb24gaXMgdGhhdCBpdCB3aWxsIGJlIGRpZmZpY3VsdCB0byBhcmJpdHJhcmlseSBpbmplY3QgRFQgbm9kZXMgdW5sZXNzIGEgc3BlY2lmaWMgZHJpdmVyIGFsbG93cyBmb3IgaXQuXG5cblRoZSBwcm9tcHQsIGhvd2V2ZXIsIGhpZ2hsaWdodHMgYSBjcnVjaWFsIHBvaW50OiBpZiB0aGUgcGF0Y2ggb25seSBhZmZlY3RzIGNvZGUgdGhhdCdzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6YXRpb24sIHRoZW4gSSBzaG91bGQgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBDb252ZXJzZWx5LCBpZiBpdCB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgSSBzaG91bGQgdmVyaWZ5IGV4ZWN1dGFiaWxpdHkgYW5kIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5UaGVyZWZvcmUsIEkgbmVlZCB0byBrbm93IGlmIHN5emthbGxlciBpcyBhbHJlYWR5IGZ1enppbmcgdGhpcyBkcml2ZXIuIEknbGwgc2VhcmNoIGZvciBleGlzdGluZyBzeXprYWxsZXIgZGVzY3JpcHRpb25zIGZvciBgcWNvbV9iYW1fZG11eGAuIFRoaXMgd2lsbCBiZSBteSBmaXJzdCBzdGVwLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBwcmVkZWZpbmVkIHdheXMgdG8gaW50ZXJhY3Qgd2l0aCB0aGlzIGRyaXZlciB2aWEgZnV6emluZy4gSWYgc28sIHRoZW4gSSBjYW4gc2VlIHdoYXQgY29kZSBwYXRocyBhcmUgYWxyZWFkeSBiZWluZyBoaXQsIGFuZCBzZWUgaG93IHRoZSBwYXRjaCBpbXBhY3RzIHRoZW0uIElmIG5vdCwgdGhlbiBJIGNhbiBzZWUgaWYgdGhlcmUgaXMgYW55IHBhdGh3YXkgSSBjYW4gYXR0ZW1wdCB0byB0cmlnZ2VyIHdpdGhpbiBRRU1VLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzcyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDU6NTEuNTY0MzYyNzg1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzU0NjExMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicWNvbSxiYW0tZG11eFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC0zLS0tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sOjQ6JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvcWNvbSxiYW0tZG11eC55YW1sI1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTUtJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbD0yMz1wcm9wZXJ0aWVzOlxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sLTI0LSAgY29tcGF0aWJsZTpcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbDoyNTogICAgY29uc3Q6IHFjb20sYmFtLWRtdXhcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC0yNi1cXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcWNvbSxiYW0tZG11eC55YW1sPTg2PWV4YW1wbGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwtOTEtICAgICAgICBiYW0tZG11eCB7XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9xY29tLGJhbS1kbXV4LnlhbWw6OTI6ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJxY29tLGJhbS1kbXV4XFxcIjtcXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbC05My1cXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbXNtODkxNi1tc3MtcGlsLnlhbWw9MTY9cHJvcGVydGllczpcXG4tLVxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZW1vdGVwcm9jL3Fjb20sbXNtODkxNi1tc3MtcGlsLnlhbWwtMTU0LSAgYmFtLWRtdXg6XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtc204OTE2LW1zcy1waWwueWFtbDoxNTU6ICAgICRyZWY6IC9zY2hlbWFzL25ldC9xY29tLGJhbS1kbXV4LnlhbWwjXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlbW90ZXByb2MvcWNvbSxtc204OTE2LW1zcy1waWwueWFtbC0xNTYtICAgIGRlc2NyaXB0aW9uOlxcbi0tXFxuTUFJTlRBSU5FUlM9MjIxNzQ9UzpcXHRNYWludGFpbmVkXFxuTUFJTlRBSU5FUlM6MjIxNzU6RjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3Fjb20sYmFtLWRtdXgueWFtbFxcbk1BSU5UQUlORVJTLTIyMTc2LUY6XFx0ZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204MjI2LmR0c2k9OTc1PVxcdFxcdFxcdGJhbV9kbXV4OiBiYW0tZG11eCB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLW1zbTgyMjYuZHRzaTo5NzY6XFx0XFx0XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJxY29tLGJhbS1kbXV4XFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20tbXNtODIyNi5kdHNpLTk3Ny1cXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204OTc0LmR0c2k9MTU4OD1cXHRcXHRcXHRiYW1fZG11eDogYmFtLWRtdXgge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204OTc0LmR0c2k6MTU4OTpcXHRcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcInFjb20sYmFtLWRtdXhcXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1tc204OTc0LmR0c2ktMTU5MC1cXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2k9MTk3Nj1cXHRcXHRcXHRiYW1fZG11eDogYmFtLWRtdXgge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2k6MTk3NzpcXHRcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcInFjb20sYmFtLWRtdXhcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTE2LmR0c2ktMTk3OC1cXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM5LmR0c2k9MTc1NT1cXHRcXHRcXHRiYW1fZG11eDogYmFtLWRtdXgge1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM5LmR0c2k6MTc1NjpcXHRcXHRcXHRcXHRjb21wYXRpYmxlID0gXFxcInFjb20sYmFtLWRtdXhcXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvcWNvbS9tc204OTM5LmR0c2ktMTc1Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vcWNvbV9iYW1fZG11eC5jPTEwMTA9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYmFtX2RtdXhfb2ZfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYzoxMDExOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwicWNvbSxiYW0tZG11eFxcXCIgfSxcXG5kcml2ZXJzL25ldC93d2FuL3Fjb21fYmFtX2RtdXguYy0xMDEyLVxcdHsgLyogc2VudGluZWwgKi8gfVxcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYz0yMDY3PXN0YXRpYyBpbnQgcTZ2NV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYy0yMjAzLVxcbmRyaXZlcnMvcmVtb3RlcHJvYy9xY29tX3E2djVfbXNzLmM6MjIwNDpcXHRub2RlID0gb2ZfZ2V0X2NvbXBhdGlibGVfY2hpbGQocGRldi1cXHUwMDNlZGV2Lm9mX25vZGUsIFxcXCJxY29tLGJhbS1kbXV4XFxcIik7XFxuZHJpdmVycy9yZW1vdGVwcm9jL3Fjb21fcTZ2NV9tc3MuYy0yMjA1LVxcdHFwcm9jLVxcdTAwM2ViYW1fZG11eCA9IG9mX3BsYXRmb3JtX2RldmljZV9jcmVhdGUobm9kZSwgTlVMTCwgXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDA5OjQ1OjUzLjIzOTg1MjU5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjQxMzMyMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBhdGNoIEFwcGxpY2FiaWxpdHkgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGV4YW1pbmVkIHRoaXMgcGF0Y2ggYW5kIGl0J3MgbG9va2luZyBsaWtlIGEgZGVhZCBlbmQgZm9yIGZ1enppbmcgcHVycG9zZXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgY29kZSB3b24ndCBiZSByZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgcGF0Y2ggdGFyZ2V0cyB0aGUgYHFjb20sYmFtLWRtdXhgIHBsYXRmb3JtIGRyaXZlciwgYW5kIHRoYXQgaW1tZWRpYXRlbHkgc2V0cyBvZmYgc29tZSBhbGFybXMuIFBsYXRmb3JtIGRldmljZXMgYXJlIHR5cGljYWxseSBpbnN0YW50aWF0ZWQgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIGFuZCBpbiB0aGUgZGVmYXVsdCBRRU1VIHNldHVwIHVzZWQgYnkgc3l6a2FsbGVyICh3aGljaCBpcyB4ODZfNjQpLCB0aGlzIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGUgd29uJ3QgYmUgcHJlc2VudC4gRXZlbiBpZiB3ZSdyZSBvbiBBUk02NCBRRU1VLCBsaWtlIGEgYHZpcnRgIG1hY2hpbmUsIGl0J3MgaGlnaGx5IHVubGlrZWx5IHRoYXQgdGhpcyBzcGVjaWZpYyBub2RlIGhhcyBiZWVuIGV4cGxpY2l0bHkgYWRkZWQuXG5cblRoZSByZWFsIGtpY2tlciBpcyB0aGF0IHRoaXMgZHJpdmVyIGludGVyYWN0cyB3aXRoIFF1YWxjb21tLXNwZWNpZmljIGhhcmR3YXJlOiB0aGUgU01FTSAoc2hhcmVkIG1lbW9yeSkgc3RhdGUgdXNpbmcgYHFjb21fc21lbV9zdGF0ZV9nZXRgIGFuZCB0aGUgRE1BIGVuZ2luZSB3aXRoIGBkbWFfcmVxdWVzdF9jaGFuYC4gTmVpdGhlciBvZiB0aG9zZSBpcyBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIFRoaXMgbWVhbnMgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgd2l0aGluIGBxY29tX2JhbV9kbXV4LmNgIGFyZSBzaW1wbHkgaW5hY2Nlc3NpYmxlIGluIHR5cGljYWwgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIHRob3NlIHVzZWQgYnkgR0NFIG9yIFFFTVUuXG5cbkknbSBub3cgdGhpbmtpbmcgYWJvdXQgd2F5cyB0byB0cmlnZ2VyIHRoaXMuIFRoZSBkcml2ZXIgcmVxdWlyZXMgYWNjZXNzIHRvIFNNRU0gc3RhdGVzIFwicGNcIiBhbmQgXCJwYy1hY2ssXCIgYXMgd2VsbCBhcyBcInBjXCIgYW5kIFwicGMtYWNrXCIgSVJRcy4gVGhlIGxhY2sgb2YgdGhhdCBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgc3l6a2FsbGVyJ3MgY3VycmVudCBsaW1pdGF0aW9ucyB3aXRoIGVtdWxhdGluZyB0aGF0IGxlYWRzIG1lIHRvIGJlbGlldmUgdGhpcyBkcml2ZXIgd2lsbCBuZXZlciBzdWNjZXNzZnVsbHkgcHJvYmUsIGFuZCBpdHMgcnVudGltZSBQTS9JUlEgaGFuZGxlcnMgd2lsbCBuZXZlciBnZXQgZXhlY3V0ZWQuXG5cbkknbSBjb25maXJtaW5nIHRoYXQgbXkgYXNzZXNzbWVudCBmb2xsb3dzIHRoZSBndWlkZWxpbmVzOiBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCBhbHNvIGFwcGxpZXMgdG8gY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVVwiLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyAoUXVhbGNvbW0pIFNvQyBkcml2ZXIgdGhhdCBkZXBlbmRzIG9uIHNwZWNpZmljIGhhcmR3YXJlIChCQU0gRE1BLCBTTUVNKSB0aGF0IGlzbid0IGVtdWxhdGVkIGluIHRoZSBkZWZhdWx0IHNldHVwLlxuXG5JJ3ZlIHF1aWNrbHkgY2hlY2tlZCB0aGF0IHRoZSBvbmx5IGZpbGUgY2hhbmdlZCBpcyBgZHJpdmVycy9uZXQvd3dhbi9xY29tX2JhbV9kbXV4LmNgLlxuXG5UaGVyZWZvcmUsIEknbGwgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGFuZCBkb2N1bWVudCB0aGUgcmF0aW9uYWxlOiB0aGUgcGF0Y2ggaXMgaW5hY2Nlc3NpYmxlIHdpdGhpbiBhIHR5cGljYWwgZnV6emluZyBlbnZpcm9ubWVudCBkdWUgdG8gaXRzIGRlcGVuZGVuY2Ugb24gdW4tZW11bGF0ZWQsIFF1YWxjb21tLXNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzU3LCJPdXRwdXRUb2tlbnMiOjEwMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQwOTo0NjowMy44ODExODcyMjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdGhlIFF1YWxjb21tIEJBTSBEYXRhIE11bHRpcGxleGVyIChxY29tX2JhbV9kbXV4KSBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNvQyBkcml2ZXIuIEl0IHJlbGllcyBvbiBoYXJkd2FyZS1zcGVjaWZpYyBmZWF0dXJlcyBsaWtlIFF1YWxjb21tIFNNRU0gYW5kIEJBTSBETUEgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHRoZSBRdWFsY29tbSBCQU0gRGF0YSBNdWx0aXBsZXhlciAocWNvbV9iYW1fZG11eCkgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBTb0MgZHJpdmVyLiBJdCByZWxpZXMgb24gaGFyZHdhcmUtc3BlY2lmaWMgZmVhdHVyZXMgbGlrZSBRdWFsY29tbSBTTUVNIGFuZCBCQU0gRE1BIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMDk6NDY6MDMuODgxMjA5Njk5WiIsIlNlcSI6NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow5jvwp[1] Phase: Running StartedAt: 2026-08-22 09:46:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5jvwp[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-22 09:46:15 +0000 UTC FinishedAt: 2026-08-22 09:46:19 +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,}