Name: series-workflow6bznv Phase: Failed StartedAt: 2026-08-07 12:17:13 +0000 UTC FinishedAt: 2026-08-07 12:21:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bznv[0] Phase: Succeeded StartedAt: 2026-08-07 12:17:13 +0000 UTC FinishedAt: 2026-08-07 12:21:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bznv[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 12:17:13 +0000 UTC FinishedAt: 2026-08-07 12:21:23 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgRFBMTCBzdWJzeXN0ZW0gKGRwbGxfbmV0bGluay5jKSBhbmQgdGhlIE1pY3Jvc2VtaSBaTDMwNzN4IERQTEwgZHJpdmVyICh6bDMwNzN4L2RwbGwuYykuIFRoZSBtb2RpZmllZCBjb2RlIGluIGRwbGxfbmV0bGluay5jIGhhbmRsZXMgbmV0bGluayBjb21tYW5kcyBmb3Igc2V0dGluZyBEUExMIHBpbiBwcm9wZXJ0aWVzLiBIb3dldmVyLCB0aGVzZSBuZXRsaW5rIGNvbW1hbmRzIHJlcXVpcmUgYSByZWdpc3RlcmVkIERQTEwgcGluIHRvIG9wZXJhdGUgb24uIERQTEwgcGlucyBhcmUgb25seSByZWdpc3RlcmVkIGJ5IHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgKEludGVsIEU4MDAgJiMzOTtpY2UmIzM5OywgTWVsbGFub3ggQ29ubmVjdFgtNSAmIzM5O21seDUmIzM5OywgT0NQIFRpbWUgQ2FyZCAmIzM5O3B0cF9vY3AmIzM5OywgYW5kIE1pY3Jvc2VtaSAmIzM5O3psMzA3M3gmIzM5OykuIE5vbmUgb2YgdGhlc2UgaGFyZHdhcmUgZGV2aWNlcyBhcmUgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUtZW11bGF0ZWQgZHVtbXkgRFBMTCBkcml2ZXIgYXZhaWxhYmxlIGluIHRoZSBrZXJuZWwuIENvbnNlcXVlbnRseSwgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UgYW5kIHRoZSB6bDMwNzN4IGRyaXZlciBjb2RlIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg4MGMyOGNmNWZmYzE2MTJmYmNiNjE5MTdkZDFiZjRiNWE5ZjA2MmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjE4OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdFxuaW5kZXggZjgzMTUwOTE3ODE0ZS4uN2MxMTdhZTM3Y2MxYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0XG5AQCAtMTE2LDggJiM0MzsxMTYsOSBAQCBTaGFyZWQgcGluc1xuIEEgc2luZ2xlIHBpbiBvYmplY3QgY2FuIGJlIGF0dGFjaGVkIHRvIG11bHRpcGxlIGRwbGwgZGV2aWNlcy5cbiBUaGVuIHRoZXJlIGFyZSB0d28gZ3JvdXBzIG9mIGNvbmZpZ3VyYXRpb24ga25vYnM6XG4gXG4tMSkgU2V0IG9uIGEgcGluIC0gdGhlIGNvbmZpZ3VyYXRpb24gYWZmZWN0cyBhbGwgZHBsbCBkZXZpY2VzIHBpbiBpc1xuLSAgIHJlZ2lzdGVyZWQgdG8gKGkuZS4sIGBgRFBMTF9BX1BJTl9GUkVRVUVOQ1lgYCksXG4mIzQzOzEpIFNldCBvbiBhIHBpbiAtIHRoZSBjb25maWd1cmF0aW9uIGlzIGEgcHJvcGVydHkgb2YgdGhlIHBpbiBpdHNlbGYgYW5kXG4mIzQzOyAgIGFwcGxpZXMgdG8gYWxsIGRwbGwgZGV2aWNlcyB0aGUgcGluIGlzIHJlZ2lzdGVyZWQgd2l0aFxuJiM0MzsgICAoaS5lLiwgYGBEUExMX0FfUElOX0ZSRVFVRU5DWWBgKSxcbiAyKSBTZXQgb24gYSBwaW4tZHBsbCB0dXBsZSAtIHRoZSBjb25maWd1cmF0aW9uIGFmZmVjdHMgb25seSBzZWxlY3RlZFxuICAgIGRwbGwgZGV2aWNlIChpLmUuLCBgYERQTExfQV9QSU5fUFJJT2BgLCBgYERQTExfQV9QSU5fU1RBVEVgYCxcbiAgICBgYERQTExfQV9QSU5fRElSRUNUSU9OYGApLlxuQEAgLTUwNyw5ICYjNDM7NTA4LDkgQEAgYXMgd2VsbCBhcyBwYXJhbWV0ZXIgYmVpbmcgY29uZmlndXJlZCAoYGBEUExMX0FfTU9ERWBgKS5cbiBgYERQTExfQ01EX1BJTl9TRVRgYCAtIHRvIHRhcmdldCBhIHBpbiB1c2VyIG11c3QgcHJvdmlkZSBhXG4gYGBEUExMX0FfUElOX0lEYGAsIHdoaWNoIGlzIHVuaXF1ZSBpZGVudGlmaWVyIG9mIGEgcGluIGluIHRoZSBzeXN0ZW0uXG4gQWxzbyBjb25maWd1cmVkIHBpbiBwYXJhbWV0ZXJzIG11c3QgYmUgYWRkZWQuXG4tSWYgYGBEUExMX0FfUElOX0ZSRVFVRU5DWWBgIGlzIGNvbmZpZ3VyZWQsIHRoaXMgYWZmZWN0cyBhbGwgdGhlIGRwbGxcbi1kZXZpY2VzIHRoYXQgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBwaW4sIHRoYXQgaXMgd2h5IGZyZXF1ZW5jeSBhdHRyaWJ1dGVcbi1zaGFsbCBub3QgYmUgZW5jbG9zZWQgaW4gYGBEUExMX0FfUElOX1BBUkVOVF9ERVZJQ0VgYC5cbiYjNDM7SWYgYGBEUExMX0FfUElOX0ZSRVFVRU5DWWBgIGlzIGNvbmZpZ3VyZWQsIGl0IGlzIGEgcHJvcGVydHkgb2YgdGhlIHBpblxuJiM0MztpdHNlbGYgYW5kIGFwcGxpZXMgdG8gYWxsIGRwbGwgZGV2aWNlcyB0aGUgcGluIGlzIHJlZ2lzdGVyZWQgd2l0aCwgc28gdGhlXG4mIzQzO2ZyZXF1ZW5jeSBhdHRyaWJ1dGUgc2hhbGwgbm90IGJlIGVuY2xvc2VkIGluIGBgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFYGAuXG4gT3RoZXIgYXR0cmlidXRlczogYGBEUExMX0FfUElOX1BSSU9gYCwgYGBEUExMX0FfUElOX1NUQVRFYGAgb3JcbiBgYERQTExfQV9QSU5fRElSRUNUSU9OYGAgbXVzdCBiZSBlbmNsb3NlZCBpblxuIGBgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFYGAgYXMgdGhlaXIgY29uZmlndXJhdGlvbiByZWxhdGVzIHRvIG9ubHkgb25lXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jIGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG5pbmRleCBhZmIzMWMwMDQwMzgyLi5hOTA5Y2Q0NDUxYjAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbkBAIC0xMDc5LDEwICYjNDM7MTA3OSw5IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHR1NjQgZnJlcSA9IG5sYV9nZXRfdTY0KGEpLCBvbGRfZnJlcTtcbi1cdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZiwgKmZhaWxlZDtcbiBcdGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcztcbiYjNDM7XHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG4gXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGw7XG4tXHR1bnNpZ25lZCBsb25nIGk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFkcGxsX3Bpbl9pc19mcmVxX3N1cHBvcnRlZChwaW4sIGZyZXEpKSB7XG5AQCAtMTA5MCwyMiAmIzQzOzEwODksMTcgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoKCFvcHMtXHUwMDNlZnJlcXVlbmN5X3NldCB8fCAhb3BzLVx1MDAzZWZyZXF1ZW5jeV9nZXQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgcmVmLVx1MDAzZWRwbGwtXHUwMDNlbW9kdWxlID09IHBpbi1cdTAwM2Vtb2R1bGUgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2VjbG9ja19pZCA9PSBwaW4tXHUwMDNlY2xvY2tfaWQpIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4tXHRcdFx0XHQgICAgICAgXCYjMzQ7ZnJlcXVlbmN5IHNldCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2VcJiMzNDspO1xuLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cdFx0fVxuLVx0fVxuIFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XG4gXHRpZiAoIXJlZikge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3BpbiBvd25lciBkcGxsIG5vdCBmb3VuZFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuIFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4mIzQzO1x0aWYgKCFvcHMtXHUwMDNlZnJlcXVlbmN5X3NldCB8fCAhb3BzLVx1MDAzZWZyZXF1ZW5jeV9nZXQpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O2ZyZXF1ZW5jeSBzZXQgbm90IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4gXHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG4gXHRyZXQgPSBvcHMtXHUwMDNlZnJlcXVlbmN5X2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLCBkcGxsLFxuIFx0XHRcdFx0IGRwbGxfcHJpdihkcGxsKSwgXHUwMDI2b2xkX2ZyZXEsIGV4dGFjayk7XG5AQCAtMTExNiw2OCAmIzQzOzExMTAsNDIgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRpZiAoZnJlcSA9PSBvbGRfZnJlcSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbi1cdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4tXHRcdGlmICghb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbi1cdFx0XHRcdFx0IGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgZnJlcSwgZXh0YWNrKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdGZhaWxlZCA9IHJlZjtcbi1cdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcJiMzNDtmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldVwmIzM0Oyxcbi1cdFx0XHRcdFx0ICAgZHBsbC1cdTAwM2VpZCk7XG4tXHRcdFx0Z290byByb2xsYmFjaztcbi1cdFx0fVxuJiM0MztcdHJldCA9IG9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG4mIzQzO1x0XHRcdFx0IGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgZnJlcSwgZXh0YWNrKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O2ZyZXF1ZW5jeSBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwaW4pO1xuIFxuIFx0cmV0dXJuIDA7XG4tXG4tcm9sbGJhY2s6XG4tXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbi1cdFx0aWYgKHJlZiA9PSBmYWlsZWQpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoIW9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG4tXHRcdGlmIChvcHMtXHUwMDNlZnJlcXVlbmN5X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuLVx0XHRcdFx0ICAgICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgb2xkX2ZyZXEsIGV4dGFjaykpXG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtzZXQgZnJlcXVlbmN5IHJvbGxiYWNrIGZhaWxlZFwmIzM0Oyk7XG4tXHR9XG4tXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50XG4gZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuLVx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkO1xuIFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xuIFx0c3RydWN0IGRwbGxfcGluX2VzeW5jIGVzeW5jO1xuIFx0dTY0IGZyZXEgPSBubGFfZ2V0X3U2NChhKTtcbiYjNDM7XHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG4gXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGw7XG4gXHRib29sIHN1cHBvcnRlZCA9IGZhbHNlO1xuLVx0dW5zaWduZWQgbG9uZyBpO1xuLVx0aW50IHJldDtcbiYjNDM7XHRpbnQgcmV0LCBpO1xuIFxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoKCFvcHMtXHUwMDNlZXN5bmNfc2V0IHx8ICFvcHMtXHUwMDNlZXN5bmNfZ2V0KSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHJlZi1cdTAwM2VkcGxsLVx1MDAzZW1vZHVsZSA9PSBwaW4tXHUwMDNlbW9kdWxlIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgcmVmLVx1MDAzZWRwbGwtXHUwMDNlY2xvY2tfaWQgPT0gcGluLVx1MDAzZWNsb2NrX2lkKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuLVx0XHRcdFx0ICAgICAgIFwmIzM0O2VtYmVkZGVkIHN5bmMgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXHRcdH1cbi1cdH1cbiBcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xuIFx0aWYgKCFyZWYpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmRcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiBcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuJiM0MztcdGlmICghb3BzLVx1MDAzZWVzeW5jX3NldCB8fCAhb3BzLVx1MDAzZWVzeW5jX2dldCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7ZW1iZWRkZWQgc3luYyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiBcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbiBcdHJldCA9IG9wcy1cdTAwM2Vlc3luY19nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcbiBcdFx0XHQgICAgIGRwbGxfcHJpdihkcGxsKSwgXHUwMDI2ZXN5bmMsIGV4dGFjayk7XG5AQCAtMTE5Niw0NCAmIzQzOzExNjQsMTcgQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuLVx0XHR2b2lkICpwaW5fZHBsbF9wcml2O1xuLVxuLVx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlZXN5bmNfc2V0KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG4tXHRcdHBpbl9kcGxsX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKTtcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZWVzeW5jX3NldChwaW4sIHBpbl9kcGxsX3ByaXYsIGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcbi1cdFx0XHRcdCAgICAgIGZyZXEsIGV4dGFjayk7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRmYWlsZWQgPSByZWY7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbi1cdFx0XHRcdFx0ICAgXCYjMzQ7ZW1iZWRkZWQgc3luYyBmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDogJXVcJiMzNDssXG4tXHRcdFx0XHRcdCAgIGRwbGwtXHUwMDNlaWQpO1xuLVx0XHRcdGdvdG8gcm9sbGJhY2s7XG4tXHRcdH1cbiYjNDM7XHRyZXQgPSBvcHMtXHUwMDNlZXN5bmNfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXG4mIzQzO1x0XHRcdCAgICAgZHBsbF9wcml2KGRwbGwpLCBmcmVxLCBleHRhY2spO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7ZW1iZWRkZWQgc3luYyBmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDogJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbik7XG4gXG4gXHRyZXR1cm4gMDtcbi1cbi1yb2xsYmFjazpcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuLVx0XHR2b2lkICpwaW5fZHBsbF9wcml2O1xuLVxuLVx0XHRpZiAocmVmID09IGZhaWxlZClcbi1cdFx0XHRicmVhaztcbi1cdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4tXHRcdGlmICghb3BzLVx1MDAzZWVzeW5jX3NldClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuLVx0XHRwaW5fZHBsbF9wcml2ID0gZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbik7XG4tXHRcdGlmIChvcHMtXHUwMDNlZXN5bmNfc2V0KHBpbiwgcGluX2RwbGxfcHJpdiwgZHBsbCwgZHBsbF9wcml2KGRwbGwpLFxuLVx0XHRcdFx0ICAgZXN5bmMuZnJlcSwgZXh0YWNrKSlcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3NldCBlbWJlZGRlZCBzeW5jIGZyZXF1ZW5jeSByb2xsYmFjayBmYWlsZWRcJiMzNDspO1xuLVx0fVxuLVx0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludFxuQEAgLTEyNDEsMTQgJiM0MzsxMTgyLDEyIEBAIGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyByZWZfc3luY19waW5faWR4LFxuIFx0XHRcdCAgICBjb25zdCBlbnVtIGRwbGxfcGluX3N0YXRlIHN0YXRlLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tXG4ge1xuLVx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkO1xuIFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xuIFx0ZW51bSBkcGxsX3Bpbl9zdGF0ZSBvbGRfc3RhdGU7XG4gXHRzdHJ1Y3QgZHBsbF9waW4gKnJlZl9zeW5jX3BpbjtcbiYjNDM7XHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG4gXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGw7XG4tXHR1bnNpZ25lZCBsb25nIGk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmVmX3N5bmNfcGluID0geGFfZmluZChcdTAwMjZwaW4tXHUwMDNlcmVmX3N5bmNfcGlucywgXHUwMDI2cmVmX3N5bmNfcGluX2lkeCxcbkBAIC0xMjgyLDQyICYjNDM7MTIyMSwyMCBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHR9XG4gXHRpZiAoc3RhdGUgPT0gb2xkX3N0YXRlKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuLVx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlcmVmX3N5bmNfc2V0KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG4tXHRcdHJldCA9IG9wcy1cdTAwM2VyZWZfc3luY19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbi1cdFx0XHRcdFx0cmVmX3N5bmNfcGluLFxuLVx0XHRcdFx0XHRkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCxcbi1cdFx0XHRcdFx0XHRcdCAgICAgIHJlZl9zeW5jX3BpbiksXG4tXHRcdFx0XHRcdHN0YXRlLCBleHRhY2spO1xuLVx0XHRpZiAocmV0KSB7XG4tXHRcdFx0ZmFpbGVkID0gcmVmO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssIFwmIzM0O3JlZmVyZW5jZSBzeW5jIHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXVcJiMzNDssXG4tXHRcdFx0XHRcdCAgIGRwbGwtXHUwMDNlaWQpO1xuLVx0XHRcdGdvdG8gcm9sbGJhY2s7XG4tXHRcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gb3BzLVx1MDAzZXJlZl9zeW5jX3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuJiM0MztcdFx0XHRcdHJlZl9zeW5jX3BpbixcbiYjNDM7XHRcdFx0XHRkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKSxcbiYjNDM7XHRcdFx0XHRzdGF0ZSwgZXh0YWNrKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O3JlZmVyZW5jZSBzeW5jIHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbik7XG4gXG4gXHRyZXR1cm4gMDtcbi1cbi1yb2xsYmFjazpcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuLVx0XHRpZiAocmVmID09IGZhaWxlZClcbi1cdFx0XHRicmVhaztcbi1cdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4tXHRcdGlmICghb3BzLVx1MDAzZXJlZl9zeW5jX3NldClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuLVx0XHRpZiAob3BzLVx1MDAzZXJlZl9zeW5jX3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuLVx0XHRcdFx0ICAgICAgcmVmX3N5bmNfcGluLFxuLVx0XHRcdFx0ICAgICAgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHJlZl9zeW5jX3BpbiksXG4tXHRcdFx0XHQgICAgICBvbGRfc3RhdGUsIGV4dGFjaykpXG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtzZXQgcmVmZXJlbmNlIHN5bmMgcm9sbGJhY2sgZmFpbGVkXCYjMzQ7KTtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnRcbkBAIC0xNDc4LDExICYjNDM7MTM5NSwxMCBAQCBzdGF0aWMgaW50XG4gZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuLVx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkO1xuIFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xuIFx0czMyIHBoYXNlX2Fkaiwgb2xkX3BoYXNlX2FkajtcbiYjNDM7XHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG4gXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGw7XG4tXHR1bnNpZ25lZCBsb25nIGk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cGhhc2VfYWRqID0gbmxhX2dldF9zMzIocGhhc2VfYWRqX2F0dHIpO1xuQEAgLTE0OTksMjEgJiM0MzsxNDE1LDE2IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuLVx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbi1cdFx0aWYgKCghb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQgfHwgIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHJlZi1cdTAwM2VkcGxsLVx1MDAzZW1vZHVsZSA9PSBwaW4tXHUwMDNlbW9kdWxlIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgcmVmLVx1MDAzZWRwbGwtXHUwMDNlY2xvY2tfaWQgPT0gcGluLVx1MDAzZWNsb2NrX2lkKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtwaGFzZSBhZGp1c3Qgbm90IHN1cHBvcnRlZFwmIzM0Oyk7XG4tXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLVx0XHR9XG4tXHR9XG4gXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcbiBcdGlmICghcmVmKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7cGluIG93bmVyIGRwbGwgbm90IGZvdW5kXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiYjNDM7XHRpZiAoIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0IHx8ICFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X2dldCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtwaGFzZSBhZGp1c3Qgbm90IHN1cHBvcnRlZFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuIFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuIFx0cmV0ID0gb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbiBcdFx0XHRcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNm9sZF9waGFzZV9hZGosXG5AQCAtMTUyNSw0MSAmIzQzOzE0MzYsMTcgQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4gXHRpZiAocGhhc2VfYWRqID09IG9sZF9waGFzZV9hZGopXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG4tXHRcdHJldCA9IG9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0KHBpbixcbi1cdFx0XHRcdFx0ICAgIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuLVx0XHRcdFx0XHQgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBwaGFzZV9hZGosXG4tXHRcdFx0XHRcdCAgICBleHRhY2spO1xuLVx0XHRpZiAocmV0KSB7XG4tXHRcdFx0ZmFpbGVkID0gcmVmO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXG4tXHRcdFx0XHRcdCAgIFwmIzM0O3BoYXNlIGFkanVzdCBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiV1XCYjMzQ7LFxuLVx0XHRcdFx0XHQgICBkcGxsLVx1MDAzZWlkKTtcbi1cdFx0XHRnb3RvIHJvbGxiYWNrO1xuLVx0XHR9XG4mIzQzO1x0cmV0ID0gb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbiYjNDM7XHRcdFx0XHQgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBwaGFzZV9hZGosIGV4dGFjayk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtwaGFzZSBhZGp1c3Qgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGluKTtcbiBcbiBcdHJldHVybiAwO1xuLVxuLXJvbGxiYWNrOlxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X3NldClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuLVx0XHRpZiAob3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbi1cdFx0XHRcdFx0ICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG9sZF9waGFzZV9hZGosXG4tXHRcdFx0XHRcdCAgZXh0YWNrKSlcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3NldCBwaGFzZSBhZGp1c3Qgcm9sbGJhY2sgZmFpbGVkXCYjMzQ7KTtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLjgzYmQzMDI3ZGJhYTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTI2Myw5ICYjNDM7MjYzLDEwIEBAIHpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcmVmX3N5bmNfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4gXHR1OCBtb2RlLCByZWZfaWQsIHN5bmNfcmVmX2lkO1xuIFx0c3RydWN0IHpsMzA3M3hfY2hhbiBjaGFuO1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmIHJlZjtcbiYjNDM7XHRib29sIHN5bmNfbnRmID0gZmFsc2U7XG4gXHRpbnQgcmM7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuIFx0cmVmX2lkID0gemwzMDczeF9pbnB1dF9waW5fcmVmX2dldChwaW4tXHUwMDNlaWQpO1xuIFx0c3luY19yZWZfaWQgPSB6bDMwNzN4X2lucHV0X3Bpbl9yZWZfZ2V0KHN5bmNfcGluLVx1MDAzZWlkKTtcbkBAIC0yODUsMTcgJiM0MzsyODYsMjAgQEAgemwzMDczeF9kcGxsX2lucHV0X3Bpbl9yZWZfc3luY19zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiBcdFx0aWYgKHN5bmNfZnJlcSBcdTAwM2UgODAwMCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiBcdFx0XHRcdCAgICAgICBcJiMzNDtzeW5jIGZyZXF1ZW5jeSBtdXN0IGJlIDgga0h6IG9yIGxlc3NcJiMzNDspO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdGlmIChyZWZfZnJlcSBcdTAwM2MgMTAwMCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiBcdFx0XHRcdCAgICAgICBcJiMzNDtjbG9jayBmcmVxdWVuY3kgbXVzdCBiZSAxIGtIeiBvciBtb3JlXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0cmMgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0XHRpZiAocmVmX2ZyZXEgXHUwMDNjPSBzeW5jX2ZyZXEpIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4gXHRcdFx0XHQgICAgICAgXCYjMzQ7Y2xvY2sgZnJlcXVlbmN5IG11c3QgYmUgaGlnaGVyIHRoYW4gc3luYyBmcmVxdWVuY3lcJiMzNDspO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXG4gXHRcdHpsMzA3M3hfcmVmX3N5bmNfcGFpcl9zZXQoXHUwMDI2cmVmLCBzeW5jX3JlZl9pZCk7XG5AQCAtMzA4LDIwICYjNDM7MzEyLDU0IEBAIHpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcmVmX3N5bmNfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4gXG4gXHRyYyA9IHpsMzA3M3hfcmVmX3N0YXRlX3NldCh6bGRldiwgcmVmX2lkLCBcdTAwMjZyZWYpO1xuIFx0aWYgKHJjKVxuLVx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiBcbi1cdC8qIEV4Y2x1ZGUgc3luYyBzb3VyY2UgZnJvbSBhdXRvbWF0aWMgcmVmZXJlbmNlIHNlbGVjdGlvbiBieSBzZXR0aW5nXG4tXHQgKiBpdHMgcHJpb3JpdHkgdG8gTk9ORS4gT24gZGlzY29ubmVjdCB0aGUgcHJpb3JpdHkgaXMgbGVmdCBhcyBOT05FXG4tXHQgKiBhbmQgdGhlIHVzZXIgbXVzdCBleHBsaWNpdGx5IG1ha2UgdGhlIHBpbiBzZWxlY3RhYmxlIGFnYWluLlxuJiM0MztcdC8qIEFsbCBjb2RlIHBhdGhzIGFjY2Vzc2luZyBwZXItY2hhbm5lbCByZWZlcmVuY2UgcHJpb3JpdGllcyBhcmVcbiYjNDM7XHQgKiBzZXJpYWxpemVkIGJ5IHRoZSBzdWJzeXN0ZW0gZHBsbF9sb2NrLCBzbyBpdCBpcyBzYWZlIHRvIHJlbGVhc2VcbiYjNDM7XHQgKiBvdXIgbG9jayBoZXJlIGJlZm9yZSBpdGVyYXRpbmcgb3ZlciB0aGUgb3RoZXIgY2hhbm5lbHMuXG4gXHQgKi9cbi1cdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpIHtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdGUgIT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBkYXRhc2hlZXQgcmVjb21tZW5kcyBleGNsdWRpbmcgdGhlIHN5bmMgc291cmNlIGZyb20gYXV0b21hdGljXG4mIzQzO1x0ICogcmVmZXJlbmNlIHNlbGVjdGlvbiBieSBzZXR0aW5nIGl0cyBwcmlvcml0eSB0byBOT05FIG9uIGFsbCBEUExMXG4mIzQzO1x0ICogY2hhbm5lbHMuIFRoaXMgaXMgYWR2aXNvcnkgLSB0aGUgcmVmIHN5bmMgcGFpciBpcyBhbHJlYWR5XG4mIzQzO1x0ICogY29uZmlndXJlZCwgc28gYSBmYWlsdXJlIGhlcmUgaXMgbm90IGZhdGFsLiBPbiBkaXNjb25uZWN0IHRoZVxuJiM0MztcdCAqIHByaW9yaXR5IGlzIGxlZnQgYXMgTk9ORSBhbmQgdGhlIHVzZXIgbXVzdCBleHBsaWNpdGx5IG1ha2UgdGhlXG4mIzQzO1x0ICogcGluIHNlbGVjdGFibGUgYWdhaW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeSh6bGRwbGwsIFx1MDAyNnpsZGV2LVx1MDAzZWRwbGxzLCBsaXN0KSB7XG4mIzQzO1x0XHR1OCBwcmlvO1xuJiM0MztcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiBcdFx0Y2hhbiA9ICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0cHJpbyA9IHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoXHUwMDI2Y2hhbiwgc3luY19yZWZfaWQpO1xuJiM0MztcdFx0aWYgKHByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKSB7XG4mIzQzO1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlOyAvKiBSZWYgaXMgYWxyZWFkeSBub24tc2VsZWN0YWJsZSAqL1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0emwzMDczeF9jaGFuX3JlZl9wcmlvX3NldChcdTAwMjZjaGFuLCBzeW5jX3JlZl9pZCxcbiBcdFx0XHRcdFx0ICBaTF9EUExMX1JFRl9QUklPX05PTkUpO1xuLVx0XHRyZXR1cm4gemwzMDczeF9jaGFuX3N0YXRlX3NldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBcdTAwMjZjaGFuKTtcbiYjNDM7XHRcdGlmICh6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIFx1MDAyNmNoYW4pKVxuJiM0MztcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O0ZhaWxlZCB0byBzZXQgcmVmIHByaW8gb24gRFBMTCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzeW5jX250ZiA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiBcdH1cbiYjNDM7XHRpZiAoc3luY19udGYpXG4mIzQzO1x0XHRfX2RwbGxfcGluX2NoYW5nZV9udGYoc3luY19waW4tXHUwMDNlZHBsbF9waW4pO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiByYztcbiB9XG4gXG4gc3RhdGljIGludFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBEUExMIHN1YnN5c3RlbSAoZHBsbF9uZXRsaW5rLmMpIGFuZCB0aGUgTWljcm9zZW1pIFpMMzA3M3ggRFBMTCBkcml2ZXIgKHpsMzA3M3gvZHBsbC5jKS4gVGhlIG1vZGlmaWVkIGNvZGUgaW4gZHBsbF9uZXRsaW5rLmMgaGFuZGxlcyBuZXRsaW5rIGNvbW1hbmRzIGZvciBzZXR0aW5nIERQTEwgcGluIHByb3BlcnRpZXMuIEhvd2V2ZXIsIHRoZXNlIG5ldGxpbmsgY29tbWFuZHMgcmVxdWlyZSBhIHJlZ2lzdGVyZWQgRFBMTCBwaW4gdG8gb3BlcmF0ZSBvbi4gRFBMTCBwaW5zIGFyZSBvbmx5IHJlZ2lzdGVyZWQgYnkgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycyAoSW50ZWwgRTgwMCAmIzM5O2ljZSYjMzk7LCBNZWxsYW5veCBDb25uZWN0WC01ICYjMzk7bWx4NSYjMzk7LCBPQ1AgVGltZSBDYXJkICYjMzk7cHRwX29jcCYjMzk7LCBhbmQgTWljcm9zZW1pICYjMzk7emwzMDczeCYjMzk7KS4gTm9uZSBvZiB0aGVzZSBoYXJkd2FyZSBkZXZpY2VzIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZS1lbXVsYXRlZCBkdW1teSBEUExMIGRyaXZlciBhdmFpbGFibGUgaW4gdGhlIGtlcm5lbC4gQ29uc2VxdWVudGx5LCB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZSBhbmQgdGhlIHpsMzA3M3ggZHJpdmVyIGNvZGUgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODgwYzI4Y2Y1ZmZjMTYxMmZiY2I2MTkxN2RkMWJmNGI1YTlmMDYyYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTI6MTg6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QKaW5kZXggZjgzMTUwOTE3ODE0ZS4uN2MxMTdhZTM3Y2MxYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdApAQCAtMTE2LDggJiM0MzsxMTYsOSBAQCBTaGFyZWQgcGlucwogQSBzaW5nbGUgcGluIG9iamVjdCBjYW4gYmUgYXR0YWNoZWQgdG8gbXVsdGlwbGUgZHBsbCBkZXZpY2VzLgogVGhlbiB0aGVyZSBhcmUgdHdvIGdyb3VwcyBvZiBjb25maWd1cmF0aW9uIGtub2JzOgogCi0xKSBTZXQgb24gYSBwaW4gLSB0aGUgY29uZmlndXJhdGlvbiBhZmZlY3RzIGFsbCBkcGxsIGRldmljZXMgcGluIGlzCi0gICByZWdpc3RlcmVkIHRvIChpLmUuLCBgYERQTExfQV9QSU5fRlJFUVVFTkNZYGApLAomIzQzOzEpIFNldCBvbiBhIHBpbiAtIHRoZSBjb25maWd1cmF0aW9uIGlzIGEgcHJvcGVydHkgb2YgdGhlIHBpbiBpdHNlbGYgYW5kCiYjNDM7ICAgYXBwbGllcyB0byBhbGwgZHBsbCBkZXZpY2VzIHRoZSBwaW4gaXMgcmVnaXN0ZXJlZCB3aXRoCiYjNDM7ICAgKGkuZS4sIGBgRFBMTF9BX1BJTl9GUkVRVUVOQ1lgYCksCiAyKSBTZXQgb24gYSBwaW4tZHBsbCB0dXBsZSAtIHRoZSBjb25maWd1cmF0aW9uIGFmZmVjdHMgb25seSBzZWxlY3RlZAogICAgZHBsbCBkZXZpY2UgKGkuZS4sIGBgRFBMTF9BX1BJTl9QUklPYGAsIGBgRFBMTF9BX1BJTl9TVEFURWBgLAogICAgYGBEUExMX0FfUElOX0RJUkVDVElPTmBgKS4KQEAgLTUwNyw5ICYjNDM7NTA4LDkgQEAgYXMgd2VsbCBhcyBwYXJhbWV0ZXIgYmVpbmcgY29uZmlndXJlZCAoYGBEUExMX0FfTU9ERWBgKS4KIGBgRFBMTF9DTURfUElOX1NFVGBgIC0gdG8gdGFyZ2V0IGEgcGluIHVzZXIgbXVzdCBwcm92aWRlIGEKIGBgRFBMTF9BX1BJTl9JRGBgLCB3aGljaCBpcyB1bmlxdWUgaWRlbnRpZmllciBvZiBhIHBpbiBpbiB0aGUgc3lzdGVtLgogQWxzbyBjb25maWd1cmVkIHBpbiBwYXJhbWV0ZXJzIG11c3QgYmUgYWRkZWQuCi1JZiBgYERQTExfQV9QSU5fRlJFUVVFTkNZYGAgaXMgY29uZmlndXJlZCwgdGhpcyBhZmZlY3RzIGFsbCB0aGUgZHBsbAotZGV2aWNlcyB0aGF0IGFyZSBjb25uZWN0ZWQgd2l0aCB0aGUgcGluLCB0aGF0IGlzIHdoeSBmcmVxdWVuY3kgYXR0cmlidXRlCi1zaGFsbCBub3QgYmUgZW5jbG9zZWQgaW4gYGBEUExMX0FfUElOX1BBUkVOVF9ERVZJQ0VgYC4KJiM0MztJZiBgYERQTExfQV9QSU5fRlJFUVVFTkNZYGAgaXMgY29uZmlndXJlZCwgaXQgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgcGluCiYjNDM7aXRzZWxmIGFuZCBhcHBsaWVzIHRvIGFsbCBkcGxsIGRldmljZXMgdGhlIHBpbiBpcyByZWdpc3RlcmVkIHdpdGgsIHNvIHRoZQomIzQzO2ZyZXF1ZW5jeSBhdHRyaWJ1dGUgc2hhbGwgbm90IGJlIGVuY2xvc2VkIGluIGBgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFYGAuCiBPdGhlciBhdHRyaWJ1dGVzOiBgYERQTExfQV9QSU5fUFJJT2BgLCBgYERQTExfQV9QSU5fU1RBVEVgYCBvcgogYGBEUExMX0FfUElOX0RJUkVDVElPTmBgIG11c3QgYmUgZW5jbG9zZWQgaW4KIGBgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFYGAgYXMgdGhlaXIgY29uZmlndXJhdGlvbiByZWxhdGVzIHRvIG9ubHkgb25lCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMKaW5kZXggYWZiMzFjMDA0MDM4Mi4uYTkwOWNkNDQ1MWIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYwpAQCAtMTA3OSwxMCAmIzQzOzEwNzksOSBAQCBkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSwKIAkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJdTY0IGZyZXEgPSBubGFfZ2V0X3U2NChhKSwgb2xkX2ZyZXE7Ci0Jc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkOwogCWNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wczsKJiM0MzsJc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmOwogCXN0cnVjdCBkcGxsX2RldmljZSAqZHBsbDsKLQl1bnNpZ25lZCBsb25nIGk7CiAJaW50IHJldDsKIAogCWlmICghZHBsbF9waW5faXNfZnJlcV9zdXBwb3J0ZWQocGluLCBmcmVxKSkgewpAQCAtMTA5MCwyMiAmIzQzOzEwODksMTcgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewotCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKLQkJaWYgKCghb3BzLSZndDtmcmVxdWVuY3lfc2V0IHx8ICFvcHMtJmd0O2ZyZXF1ZW5jeV9nZXQpICZhbXA7JmFtcDsKLQkJICAgIHJlZi0mZ3Q7ZHBsbC0mZ3Q7bW9kdWxlID09IHBpbi0mZ3Q7bW9kdWxlICZhbXA7JmFtcDsKLQkJICAgIHJlZi0mZ3Q7ZHBsbC0mZ3Q7Y2xvY2tfaWQgPT0gcGluLSZndDtjbG9ja19pZCkgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAotCQkJCSAgICAgICAmIzM0O2ZyZXF1ZW5jeSBzZXQgbm90IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlJiMzNDspOwotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQl9Ci0JfQogCXJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pOwogCWlmICghcmVmKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmQmIzM0Oyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKJiM0MzsJaWYgKCFvcHMtJmd0O2ZyZXF1ZW5jeV9zZXQgfHwgIW9wcy0mZ3Q7ZnJlcXVlbmN5X2dldCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCSAgICAgICAmIzM0O2ZyZXF1ZW5jeSBzZXQgbm90IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiAJZHBsbCA9IHJlZi0mZ3Q7ZHBsbDsKIAlyZXQgPSBvcHMtJmd0O2ZyZXF1ZW5jeV9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCwKIAkJCQkgZHBsbF9wcml2KGRwbGwpLCAmYW1wO29sZF9mcmVxLCBleHRhY2spOwpAQCAtMTExNiw2OCAmIzQzOzExMTAsNDIgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJaWYgKGZyZXEgPT0gb2xkX2ZyZXEpCiAJCXJldHVybiAwOwogCi0JeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7Ci0JCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwotCQlpZiAoIW9wcy0mZ3Q7ZnJlcXVlbmN5X3NldCkKLQkJCWNvbnRpbnVlOwotCQlkcGxsID0gcmVmLSZndDtkcGxsOwotCQlyZXQgPSBvcHMtJmd0O2ZyZXF1ZW5jeV9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwKLQkJCQkJIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgZnJlcSwgZXh0YWNrKTsKLQkJaWYgKHJldCkgewotCQkJZmFpbGVkID0gcmVmOwotCQkJTkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgJiMzNDtmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldSYjMzQ7LAotCQkJCQkgICBkcGxsLSZndDtpZCk7Ci0JCQlnb3RvIHJvbGxiYWNrOwotCQl9CiYjNDM7CXJldCA9IG9wcy0mZ3Q7ZnJlcXVlbmN5X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLAomIzQzOwkJCQkgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBmcmVxLCBleHRhY2spOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O2ZyZXF1ZW5jeSBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiV1JiMzNDssCiYjNDM7CQkJCSAgIGRwbGwtJmd0O2lkKTsKJiM0MzsJCXJldHVybiByZXQ7CiAJfQogCV9fZHBsbF9waW5fY2hhbmdlX250ZihwaW4pOwogCiAJcmV0dXJuIDA7Ci0KLXJvbGxiYWNrOgotCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewotCQlpZiAocmVmID09IGZhaWxlZCkKLQkJCWJyZWFrOwotCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKLQkJaWYgKCFvcHMtJmd0O2ZyZXF1ZW5jeV9zZXQpCi0JCQljb250aW51ZTsKLQkJZHBsbCA9IHJlZi0mZ3Q7ZHBsbDsKLQkJaWYgKG9wcy0mZ3Q7ZnJlcXVlbmN5X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLAotCQkJCSAgICAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG9sZF9mcmVxLCBleHRhY2spKQotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3NldCBmcmVxdWVuY3kgcm9sbGJhY2sgZmFpbGVkJiMzNDspOwotCX0KLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CiBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKLQlzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWYsICpmYWlsZWQ7CiAJY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzOwogCXN0cnVjdCBkcGxsX3Bpbl9lc3luYyBlc3luYzsKIAl1NjQgZnJlcSA9IG5sYV9nZXRfdTY0KGEpOwomIzQzOwlzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7CiAJc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsOwogCWJvb2wgc3VwcG9ydGVkID0gZmFsc2U7Ci0JdW5zaWduZWQgbG9uZyBpOwotCWludCByZXQ7CiYjNDM7CWludCByZXQsIGk7CiAKLQl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpLCByZWYpIHsKLQkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7Ci0JCWlmICgoIW9wcy0mZ3Q7ZXN5bmNfc2V0IHx8ICFvcHMtJmd0O2VzeW5jX2dldCkgJmFtcDsmYW1wOwotCQkgICAgcmVmLSZndDtkcGxsLSZndDttb2R1bGUgPT0gcGluLSZndDttb2R1bGUgJmFtcDsmYW1wOwotCQkgICAgcmVmLSZndDtkcGxsLSZndDtjbG9ja19pZCA9PSBwaW4tJmd0O2Nsb2NrX2lkKSB7Ci0JCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCi0JCQkJICAgICAgICYjMzQ7ZW1iZWRkZWQgc3luYyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UmIzM0Oyk7Ci0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCX0KLQl9CiAJcmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7CiAJaWYgKCFyZWYpIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3BpbiBvd25lciBkcGxsIG5vdCBmb3VuZCYjMzQ7KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwomIzQzOwlpZiAoIW9wcy0mZ3Q7ZXN5bmNfc2V0IHx8ICFvcHMtJmd0O2VzeW5jX2dldCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCSAgICAgICAmIzM0O2VtYmVkZGVkIHN5bmMgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiAJZHBsbCA9IHJlZi0mZ3Q7ZHBsbDsKIAlyZXQgPSBvcHMtJmd0O2VzeW5jX2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLCBkcGxsLAogCQkJICAgICBkcGxsX3ByaXYoZHBsbCksICZhbXA7ZXN5bmMsIGV4dGFjayk7CkBAIC0xMTk2LDQ0ICYjNDM7MTE2NCwxNyBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewotCQl2b2lkICpwaW5fZHBsbF9wcml2OwotCi0JCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwotCQlpZiAoIW9wcy0mZ3Q7ZXN5bmNfc2V0KQotCQkJY29udGludWU7Ci0JCWRwbGwgPSByZWYtJmd0O2RwbGw7Ci0JCXBpbl9kcGxsX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKTsKLQkJcmV0ID0gb3BzLSZndDtlc3luY19zZXQocGluLCBwaW5fZHBsbF9wcml2LCBkcGxsLCBkcGxsX3ByaXYoZHBsbCksCi0JCQkJICAgICAgZnJlcSwgZXh0YWNrKTsKLQkJaWYgKHJldCkgewotCQkJZmFpbGVkID0gcmVmOwotCQkJTkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywKLQkJCQkJICAgJiMzNDtlbWJlZGRlZCBzeW5jIGZyZXF1ZW5jeSBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiAldSYjMzQ7LAotCQkJCQkgICBkcGxsLSZndDtpZCk7Ci0JCQlnb3RvIHJvbGxiYWNrOwotCQl9CiYjNDM7CXJldCA9IG9wcy0mZ3Q7ZXN5bmNfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsCiYjNDM7CQkJICAgICBkcGxsX3ByaXYoZHBsbCksIGZyZXEsIGV4dGFjayk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7ZW1iZWRkZWQgc3luYyBmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDogJXUmIzM0OywKJiM0MzsJCQkJICAgZHBsbC0mZ3Q7aWQpOwomIzQzOwkJcmV0dXJuIHJldDsKIAl9CiAJX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbik7CiAKIAlyZXR1cm4gMDsKLQotcm9sbGJhY2s6Ci0JeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7Ci0JCXZvaWQgKnBpbl9kcGxsX3ByaXY7Ci0KLQkJaWYgKHJlZiA9PSBmYWlsZWQpCi0JCQlicmVhazsKLQkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7Ci0JCWlmICghb3BzLSZndDtlc3luY19zZXQpCi0JCQljb250aW51ZTsKLQkJZHBsbCA9IHJlZi0mZ3Q7ZHBsbDsKLQkJcGluX2RwbGxfcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pOwotCQlpZiAob3BzLSZndDtlc3luY19zZXQocGluLCBwaW5fZHBsbF9wcml2LCBkcGxsLCBkcGxsX3ByaXYoZHBsbCksCi0JCQkJICAgZXN5bmMuZnJlcSwgZXh0YWNrKSkKLQkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtzZXQgZW1iZWRkZWQgc3luYyBmcmVxdWVuY3kgcm9sbGJhY2sgZmFpbGVkJiMzNDspOwotCX0KLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjQxLDE0ICYjNDM7MTE4MiwxMiBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sCiAJCQkgICAgdW5zaWduZWQgbG9uZyByZWZfc3luY19waW5faWR4LAogCQkJICAgIGNvbnN0IGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGUsCiAJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQotCiB7Ci0Jc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkOwogCWNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wczsKIAllbnVtIGRwbGxfcGluX3N0YXRlIG9sZF9zdGF0ZTsKIAlzdHJ1Y3QgZHBsbF9waW4gKnJlZl9zeW5jX3BpbjsKJiM0MzsJc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmOwogCXN0cnVjdCBkcGxsX2RldmljZSAqZHBsbDsKLQl1bnNpZ25lZCBsb25nIGk7CiAJaW50IHJldDsKIAogCXJlZl9zeW5jX3BpbiA9IHhhX2ZpbmQoJmFtcDtwaW4tJmd0O3JlZl9zeW5jX3BpbnMsICZhbXA7cmVmX3N5bmNfcGluX2lkeCwKQEAgLTEyODIsNDIgJiM0MzsxMjIxLDIwIEBAIGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwKIAl9CiAJaWYgKHN0YXRlID09IG9sZF9zdGF0ZSkKIAkJcmV0dXJuIDA7Ci0JeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7Ci0JCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwotCQlpZiAoIW9wcy0mZ3Q7cmVmX3N5bmNfc2V0KQotCQkJY29udGludWU7Ci0JCWRwbGwgPSByZWYtJmd0O2RwbGw7Ci0JCXJldCA9IG9wcy0mZ3Q7cmVmX3N5bmNfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksCi0JCQkJCXJlZl9zeW5jX3BpbiwKLQkJCQkJZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsCi0JCQkJCQkJICAgICAgcmVmX3N5bmNfcGluKSwKLQkJCQkJc3RhdGUsIGV4dGFjayk7Ci0JCWlmIChyZXQpIHsKLQkJCWZhaWxlZCA9IHJlZjsKLQkJCU5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssICYjMzQ7cmVmZXJlbmNlIHN5bmMgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldSYjMzQ7LAotCQkJCQkgICBkcGxsLSZndDtpZCk7Ci0JCQlnb3RvIHJvbGxiYWNrOwotCQl9CiYjNDM7CiYjNDM7CXJldCA9IG9wcy0mZ3Q7cmVmX3N5bmNfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksCiYjNDM7CQkJCXJlZl9zeW5jX3BpbiwKJiM0MzsJCQkJZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHJlZl9zeW5jX3BpbiksCiYjNDM7CQkJCXN0YXRlLCBleHRhY2spOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O3JlZmVyZW5jZSBzeW5jIHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXUmIzM0OywKJiM0MzsJCQkJICAgZHBsbC0mZ3Q7aWQpOwomIzQzOwkJcmV0dXJuIHJldDsKIAl9CiAJX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbik7CiAKIAlyZXR1cm4gMDsKLQotcm9sbGJhY2s6Ci0JeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7Ci0JCWlmIChyZWYgPT0gZmFpbGVkKQotCQkJYnJlYWs7Ci0JCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwotCQlpZiAoIW9wcy0mZ3Q7cmVmX3N5bmNfc2V0KQotCQkJY29udGludWU7Ci0JCWRwbGwgPSByZWYtJmd0O2RwbGw7Ci0JCWlmIChvcHMtJmd0O3JlZl9zeW5jX3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLAotCQkJCSAgICAgIHJlZl9zeW5jX3BpbiwKLQkJCQkgICAgICBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKSwKLQkJCQkgICAgICBvbGRfc3RhdGUsIGV4dGFjaykpCi0JCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7c2V0IHJlZmVyZW5jZSBzeW5jIHJvbGxiYWNrIGZhaWxlZCYjMzQ7KTsKLQl9Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludApAQCAtMTQ3OCwxMSAmIzQzOzEzOTUsMTAgQEAgc3RhdGljIGludAogZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsCiAJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7Ci0Jc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkOwogCWNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wczsKIAlzMzIgcGhhc2VfYWRqLCBvbGRfcGhhc2VfYWRqOwomIzQzOwlzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7CiAJc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsOwotCXVuc2lnbmVkIGxvbmcgaTsKIAlpbnQgcmV0OwogCiAJcGhhc2VfYWRqID0gbmxhX2dldF9zMzIocGhhc2VfYWRqX2F0dHIpOwpAQCAtMTQ5OSwyMSAmIzQzOzE0MTUsMTYgQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewotCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKLQkJaWYgKCghb3BzLSZndDtwaGFzZV9hZGp1c3Rfc2V0IHx8ICFvcHMtJmd0O3BoYXNlX2FkanVzdF9nZXQpICZhbXA7JmFtcDsKLQkJICAgIHJlZi0mZ3Q7ZHBsbC0mZ3Q7bW9kdWxlID09IHBpbi0mZ3Q7bW9kdWxlICZhbXA7JmFtcDsKLQkJICAgIHJlZi0mZ3Q7ZHBsbC0mZ3Q7Y2xvY2tfaWQgPT0gcGluLSZndDtjbG9ja19pZCkgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3BoYXNlIGFkanVzdCBub3Qgc3VwcG9ydGVkJiMzNDspOwotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQl9Ci0JfQogCXJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pOwogCWlmICghcmVmKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmQmIzM0Oyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKJiM0MzsJaWYgKCFvcHMtJmd0O3BoYXNlX2FkanVzdF9zZXQgfHwgIW9wcy0mZ3Q7cGhhc2VfYWRqdXN0X2dldCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3BoYXNlIGFkanVzdCBub3Qgc3VwcG9ydGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiAJZHBsbCA9IHJlZi0mZ3Q7ZHBsbDsKIAlyZXQgPSBvcHMtJmd0O3BoYXNlX2FkanVzdF9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwKIAkJCQkgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCAmYW1wO29sZF9waGFzZV9hZGosCkBAIC0xNTI1LDQxICYjNDM7MTQzNiwxNyBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0ciwKIAlpZiAocGhhc2VfYWRqID09IG9sZF9waGFzZV9hZGopCiAJCXJldHVybiAwOwogCi0JeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7Ci0JCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwotCQlpZiAoIW9wcy0mZ3Q7cGhhc2VfYWRqdXN0X3NldCkKLQkJCWNvbnRpbnVlOwotCQlkcGxsID0gcmVmLSZndDtkcGxsOwotCQlyZXQgPSBvcHMtJmd0O3BoYXNlX2FkanVzdF9zZXQocGluLAotCQkJCQkgICAgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksCi0JCQkJCSAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHBoYXNlX2FkaiwKLQkJCQkJICAgIGV4dGFjayk7Ci0JCWlmIChyZXQpIHsKLQkJCWZhaWxlZCA9IHJlZjsKLQkJCU5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssCi0JCQkJCSAgICYjMzQ7cGhhc2UgYWRqdXN0IHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXUmIzM0OywKLQkJCQkJICAgZHBsbC0mZ3Q7aWQpOwotCQkJZ290byByb2xsYmFjazsKLQkJfQomIzQzOwlyZXQgPSBvcHMtJmd0O3BoYXNlX2FkanVzdF9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwKJiM0MzsJCQkJICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgcGhhc2VfYWRqLCBleHRhY2spOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O3BoYXNlIGFkanVzdCBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiV1JiMzNDssCiYjNDM7CQkJCSAgIGRwbGwtJmd0O2lkKTsKJiM0MzsJCXJldHVybiByZXQ7CiAJfQogCV9fZHBsbF9waW5fY2hhbmdlX250ZihwaW4pOwogCiAJcmV0dXJuIDA7Ci0KLXJvbGxiYWNrOgotCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewotCQlpZiAocmVmID09IGZhaWxlZCkKLQkJCWJyZWFrOwotCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKLQkJaWYgKCFvcHMtJmd0O3BoYXNlX2FkanVzdF9zZXQpCi0JCQljb250aW51ZTsKLQkJZHBsbCA9IHJlZi0mZ3Q7ZHBsbDsKLQkJaWYgKG9wcy0mZ3Q7cGhhc2VfYWRqdXN0X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLAotCQkJCQkgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgb2xkX3BoYXNlX2FkaiwKLQkJCQkJICBleHRhY2spKQotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3NldCBwaGFzZSBhZGp1c3Qgcm9sbGJhY2sgZmFpbGVkJiMzNDspOwotCX0KLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKaW5kZXggMDQ4OGFlNmFjNDg2Yy4uODNiZDMwMjdkYmFhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwpAQCAtMjYzLDkgJiM0MzsyNjMsMTAgQEAgemwzMDczeF9kcGxsX2lucHV0X3Bpbl9yZWZfc3luY19zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbiwKIAl1OCBtb2RlLCByZWZfaWQsIHN5bmNfcmVmX2lkOwogCXN0cnVjdCB6bDMwNzN4X2NoYW4gY2hhbjsKIAlzdHJ1Y3QgemwzMDczeF9yZWYgcmVmOwomIzQzOwlib29sIHN5bmNfbnRmID0gZmFsc2U7CiAJaW50IHJjOwogCi0JZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiAKIAlyZWZfaWQgPSB6bDMwNzN4X2lucHV0X3Bpbl9yZWZfZ2V0KHBpbi0mZ3Q7aWQpOwogCXN5bmNfcmVmX2lkID0gemwzMDczeF9pbnB1dF9waW5fcmVmX2dldChzeW5jX3Bpbi0mZ3Q7aWQpOwpAQCAtMjg1LDE3ICYjNDM7Mjg2LDIwIEBAIHpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcmVmX3N5bmNfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sCiAJCWlmIChzeW5jX2ZyZXEgJmd0OyA4MDAwKSB7CiAJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiAJCQkJICAgICAgICYjMzQ7c3luYyBmcmVxdWVuY3kgbXVzdCBiZSA4IGtIeiBvciBsZXNzJiMzNDspOwotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJcmMgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gdW5sb2NrOwogCQl9CiAJCWlmIChyZWZfZnJlcSAmbHQ7IDEwMDApIHsKIAkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKIAkJCQkgICAgICAgJiMzNDtjbG9jayBmcmVxdWVuY3kgbXVzdCBiZSAxIGtIeiBvciBtb3JlJiMzNDspOwotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJcmMgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gdW5sb2NrOwogCQl9CiAJCWlmIChyZWZfZnJlcSAmbHQ7PSBzeW5jX2ZyZXEpIHsKIAkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKIAkJCQkgICAgICAgJiMzNDtjbG9jayBmcmVxdWVuY3kgbXVzdCBiZSBoaWdoZXIgdGhhbiBzeW5jIGZyZXF1ZW5jeSYjMzQ7KTsKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCXJjID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIHVubG9jazsKIAkJfQogCiAJCXpsMzA3M3hfcmVmX3N5bmNfcGFpcl9zZXQoJmFtcDtyZWYsIHN5bmNfcmVmX2lkKTsKQEAgLTMwOCwyMCAmIzQzOzMxMiw1NCBAQCB6bDMwNzN4X2RwbGxfaW5wdXRfcGluX3JlZl9zeW5jX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLAogCiAJcmMgPSB6bDMwNzN4X3JlZl9zdGF0ZV9zZXQoemxkZXYsIHJlZl9pZCwgJmFtcDtyZWYpOwogCWlmIChyYykKLQkJcmV0dXJuIHJjOwomIzQzOwkJZ290byB1bmxvY2s7CiAKLQkvKiBFeGNsdWRlIHN5bmMgc291cmNlIGZyb20gYXV0b21hdGljIHJlZmVyZW5jZSBzZWxlY3Rpb24gYnkgc2V0dGluZwotCSAqIGl0cyBwcmlvcml0eSB0byBOT05FLiBPbiBkaXNjb25uZWN0IHRoZSBwcmlvcml0eSBpcyBsZWZ0IGFzIE5PTkUKLQkgKiBhbmQgdGhlIHVzZXIgbXVzdCBleHBsaWNpdGx5IG1ha2UgdGhlIHBpbiBzZWxlY3RhYmxlIGFnYWluLgomIzQzOwkvKiBBbGwgY29kZSBwYXRocyBhY2Nlc3NpbmcgcGVyLWNoYW5uZWwgcmVmZXJlbmNlIHByaW9yaXRpZXMgYXJlCiYjNDM7CSAqIHNlcmlhbGl6ZWQgYnkgdGhlIHN1YnN5c3RlbSBkcGxsX2xvY2ssIHNvIGl0IGlzIHNhZmUgdG8gcmVsZWFzZQomIzQzOwkgKiBvdXIgbG9jayBoZXJlIGJlZm9yZSBpdGVyYXRpbmcgb3ZlciB0aGUgb3RoZXIgY2hhbm5lbHMuCiAJICovCi0JaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCkgewomIzQzOwltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlpZiAoc3RhdGUgIT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFRoZSBkYXRhc2hlZXQgcmVjb21tZW5kcyBleGNsdWRpbmcgdGhlIHN5bmMgc291cmNlIGZyb20gYXV0b21hdGljCiYjNDM7CSAqIHJlZmVyZW5jZSBzZWxlY3Rpb24gYnkgc2V0dGluZyBpdHMgcHJpb3JpdHkgdG8gTk9ORSBvbiBhbGwgRFBMTAomIzQzOwkgKiBjaGFubmVscy4gVGhpcyBpcyBhZHZpc29yeSAtIHRoZSByZWYgc3luYyBwYWlyIGlzIGFscmVhZHkKJiM0MzsJICogY29uZmlndXJlZCwgc28gYSBmYWlsdXJlIGhlcmUgaXMgbm90IGZhdGFsLiBPbiBkaXNjb25uZWN0IHRoZQomIzQzOwkgKiBwcmlvcml0eSBpcyBsZWZ0IGFzIE5PTkUgYW5kIHRoZSB1c2VyIG11c3QgZXhwbGljaXRseSBtYWtlIHRoZQomIzQzOwkgKiBwaW4gc2VsZWN0YWJsZSBhZ2Fpbi4KJiM0MzsJICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoemxkcGxsLCAmYW1wO3psZGV2LSZndDtkcGxscywgbGlzdCkgewomIzQzOwkJdTggcHJpbzsKJiM0MzsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwogCQljaGFuID0gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJcHJpbyA9IHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoJmFtcDtjaGFuLCBzeW5jX3JlZl9pZCk7CiYjNDM7CQlpZiAocHJpbyA9PSBaTF9EUExMX1JFRl9QUklPX05PTkUpIHsKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwkJCWNvbnRpbnVlOyAvKiBSZWYgaXMgYWxyZWFkeSBub24tc2VsZWN0YWJsZSAqLwomIzQzOwkJfQomIzQzOwogCQl6bDMwNzN4X2NoYW5fcmVmX3ByaW9fc2V0KCZhbXA7Y2hhbiwgc3luY19yZWZfaWQsCiAJCQkJCSAgWkxfRFBMTF9SRUZfUFJJT19OT05FKTsKLQkJcmV0dXJuIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsICZhbXA7Y2hhbik7CiYjNDM7CQlpZiAoemwzMDczeF9jaGFuX3N0YXRlX3NldCh6bGRldiwgemxkcGxsLSZndDtpZCwgJmFtcDtjaGFuKSkKJiM0MzsJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtGYWlsZWQgdG8gc2V0IHJlZiBwcmlvIG9uIERQTEwldVxuJiMzNDssCiYjNDM7CQkJCSB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzeW5jX250ZiA9IHRydWU7CiYjNDM7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwogCX0KJiM0MzsJaWYgKHN5bmNfbnRmKQomIzQzOwkJX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHN5bmNfcGluLSZndDtkcGxsX3Bpbik7CiAKIAlyZXR1cm4gMDsKJiM0Mzt1bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiByYzsKIH0KIAogc3RhdGljIGludAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjk2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNzMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRFBMTCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIHRoZSBEUExMIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBkcGxsX25ldGxpbmsuY2AgYW5kIGBkcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHN0cmVhbWxpbmluZyBob3cgd2Ugc2V0IHByb3BlcnRpZXMgbGlrZSBmcmVxdWVuY3ksIGVzeW5jLCByZWZfc3luYywgYW5kIHBoYXNlIGFkanVzdG1lbnQgb24gRFBMTCBwaW5zLiBJbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoICphbGwqIERQTEwgZGV2aWNlcyBjb25uZWN0ZWQgdG8gYSBwaW4sIHRoZSBjb2RlIG5vdyBmb2N1c2VzIG9uIGp1c3QgdGhlICYjMzQ7b3duZXImIzM0OyDigJMgdGhlIGZpcnN0IERQTEwgZGV2aWNlIHRoYXQmIzM5O3MgcmVnaXN0ZXJlZCB0byB0aGUgcGluLCBvYnRhaW5lZCBmcm9tIGBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKWAuCgpJIG5lZWQgdG8gZGlnIGluIGEgYml0IGRlZXBlciwgbGV0JiMzOTtzIGxvb2sgYXQgYGRwbGxfbmV0bGluay5jYCBmaXJzdC4gU3BlY2lmaWNhbGx5LCB0aGUgYGRwbGxfcGluX2ZyZXFfc2V0YCBmdW5jdGlvbi4gSSBzZWUgdGhleSYjMzk7dmUgcmVtb3ZlZCB0aGUgbG9vcCAoYHhhX2Zvcl9lYWNoYCkgdGhhdCB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgcmVmZXJlbmNlcyAoYHJlZmApIGFzc29jaWF0ZWQgd2l0aCBhIHBpbi4gIEluc3RlYWQsIHRoZXkgbm93IGNhbGwgdGhlIGZyZXF1ZW5jeSBzZXR0aW5nIGZ1bmN0aW9uIGRpcmVjdGx5IG9uIHRoZSBgZHBsbGAgdGhhdCBiZWxvbmdzIHRvIHRoZSBgcmVmYCB0aGF0IGlzIGRldGVybWluZWQgdG8gYmUgdGhlIG93bmVyLiBUaGV5IGFsc28gY2hlY2sgdGhhdCBmcmVxdWVuY3kgc2V0dGluZyBhbmQgZ2V0dGluZyBhcmUgc3VwcG9ydGVkLiBJdCBtYWtlcyBzZW5zZSwgZm9jdXNpbmcgb24gdGhlIHBpbiBvd25lci4KClRoZSBkb2N1bWVudGF0aW9uIGlzIGltcG9ydGFudC4gSXQgY2xhcmlmaWVzIHRoYXQgd2hlbiBhIHByb3BlcnR5IGlzIHNldCBvbiBhIHBpbiAobGlrZSBmcmVxdWVuY3kgdmlhIGBEUExMX0FfUElOX0ZSRVFVRU5DWWApLCBpdCYjMzk7cyBpbnRlbmRlZCB0byBhZmZlY3QgKmFsbCogRFBMTCBkZXZpY2VzIGNvbm5lY3RlZCB0byB0aGF0IHBpbi4gIFNvLCB0aGUgZHJpdmVyIGVpdGhlciBoYXMgdG8gYmUgbWFkZSByZXNwb25zaWJsZSBmb3IgYXBwbHlpbmcgdGhlIHNldCB0byBhbGwgRFBMTHMgb3IgdGhlIHN1YnN5c3RlbSBqdXN0IGNhbGxzIHRoZSBvcCBvbiB0aGUgb3duZXIuIE5vdywgdGhpcyBjaGFuZ2UgY291bGQgYmUgdmFsaWQgYmVjYXVzZSBpdCBzZWVtcyBsaWtlIHRoZSByZXNwb25zaWJpbGl0eSBpcyBzaGlmdGluZywgcGVyaGFwcyB0aGUgZHJpdmVyIG5vdyBuZWVkcyB0byB0YWtlIGNhcmUgb2YgdGhlICYjMzQ7YXBwbHkgdG8gYWxsJiMzNDsgbG9naWMsIG9yIG1heWJlIHRoZSBzdWJzeXN0ZW0ganVzdCBjYWxscyB0aGUgb3BlcmF0b3Igb24gdGhlIGZpcnN0IHJlZ2lzdGVyZWQgRFBMTCwgYW5kIHRoZSBkcml2ZXIgaGFuZGxlcyBpdCBpbnRlcm5hbGx5LiBJdCBkZXBlbmRzIG9uIHRoZSBkZXNpZ24uCgpIb2xkIG9uLCBJIHNlZSB0aGV5JiMzOTt2ZSBhbHNvIG1vZGlmaWVkIGB6bDMwNzN4X2RwbGxfaW5wdXRfcGluX3JlZl9zeW5jX3NldGAuIFRoaXMgbWFrZXMgbWUgdGhpbmsuIEFyZSB3ZSBydW5uaW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2hlcmUgdGhpcyBjb2RlIG1pZ2h0IGJlIHJlYWNoZWQ/ICBEUExMIGlzIGEgRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCwgc28gaXQgbXVzdCB1c2UgcGh5c2ljYWwgZGV2aWNlcy4gSXMgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBhIERQTEwgZHJpdmVyPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYGRyaXZlcnMvZHBsbC9gIGRpcmVjdG9yeSB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgdW51c3VhbC4gVGhpcyByYWlzZXMgdGhlIHF1ZXN0aW9uIG9mIGhvdyB0aGUgdmlydHVhbGl6ZWQgd29ybGQgaW50ZXJhY3RzIHdpdGggaGFyZHdhcmUtc3BlY2lmaWMgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtkcGxsX2NvcmUuYyYjMzQ7LAogICAgJiMzNDtkcGxsX2NvcmUuaCYjMzQ7LAogICAgJiMzNDtkcGxsX25ldGxpbmsuYyYjMzQ7LAogICAgJiMzNDtkcGxsX25ldGxpbmsuaCYjMzQ7LAogICAgJiMzNDtkcGxsX25sLmMmIzM0OywKICAgICYjMzQ7ZHBsbF9ubC5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O3psMzA3M3gmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NzQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERQTEwgRHJpdmVyIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgemwzMDczeGAgZHJpdmVyIGZvciB0aGUgTWljcm9zZW1pIFpMMzA3M3ggRFBMTHMuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBJIGFsd2F5cyBsaWtlIHRvIGVuc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBvdGhlciBEUExMIGRyaXZlcnMgbHVya2luZyBhcm91bmQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNvbW1vbmFsaXR5IG9mIERQTExzIGluIG5ldHdvcmtpbmcgY29udGV4dHM/IE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHBva2UgYXJvdW5kIGluIHRoZSBvYnZpb3VzIHBsYWNlOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYC4gVGhhdCBkaXJlY3RvcnkgaXMgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50OyBsb3RzIG9mIGV0aGVybmV0IGRyaXZlcnMgY291bGQgcG90ZW50aWFsbHkgaW5jb3Jwb3JhdGUgRFBMTCBmdW5jdGlvbmFsaXR5IGZvciBjbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZCB0aGVyZSBiZWZvcmUgZHJhd2luZyBhbnkgY29uY2x1c2lvbnMuIE5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhhdCBtaWdodCBpbnRlcmFjdCwgb3IgcHJvdmlkZSBhIGJldHRlciBvdmVyYWxsIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGxfZGV2aWNlX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdD01Njg9RGV2aWNlIHNob3VsZCBpbXBsZW1lbnQgc2V0IG9mIG9wZXJhdGlvbnMgYW5kIHJlZ2lzdGVyIGRldmljZSB2aWFcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdDo1Njk6ZHBsbF9kZXZpY2VfcmVnaXN0ZXIoKSBhdCB3aGljaCBwb2ludCBpdCBiZWNvbWVzIGF2YWlsYWJsZSB0byB0aGVcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC01NzAtdXNlcnMuIE11bHRpcGxlIGRyaXZlciBpbnN0YW5jZXMgY2FuIG9idGFpbiByZWZlcmVuY2UgdG8gaXQgd2l0aFxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdD02MzQ9VGhlIHJlZ2lzdHJhdGlvbiBwYXJ0IGlzIHRoZW4gbG9va3MgbGlrZSB0aGlzIHBhcnQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTY0NS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdDo2NDY6ICAgICAgICBlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihicC1cdTAwM2VkcGxsLCBEUExMX1RZUEVfUFBTLCBcdTAwMjZkcGxsX29wcywgYnApO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTY0Ny0gICAgICAgIGlmIChlcnIpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTQ0OD1kcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmluZChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2MC0vKipcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NjE6ICogZHBsbF9kZXZpY2VfcmVnaXN0ZXIgLSByZWdpc3RlciB0aGUgZHBsbCBkZXZpY2UgaW4gdGhlIHN1YnN5c3RlbVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2Mi0gKiBAZHBsbDogcG9pbnRlciB0byBhIGRwbGxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDczLSAqL1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ3NDppbnQgZHBsbF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBlbnVtIGRwbGxfdHlwZSB0eXBlLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3NS1cdFx0XHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzLCB2b2lkICpwcml2KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTctfVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUxODpFWFBPUlRfU1lNQk9MX0dQTChkcGxsX2RldmljZV9yZWdpc3Rlcik7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTE5LVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xOTMwPXpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTk4MC0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxOTgxOiAqIHpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE5ODItICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE5ODg9c3RhdGljIGludFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE5ODk6emwzMDczeF9kcGxsX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTk5MC17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMDctXHR6bGRwbGwtXHUwMDNldHlwZSA9IHpsMzA3M3hfcHJvcF9kcGxsX3R5cGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjIwMDg6XHRyYyA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgemxkcGxsLVx1MDAzZXR5cGUsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAwOS1cdFx0XHRcdCAgXHUwMDI2emxkcGxsLVx1MDAzZW9wcywgemxkcGxsKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAyMi0gKiBVbnJlZ2lzdGVycyBnaXZlbiBEUExMIGRldmljZSBmcm9tIERQTEwgc3ViLXN5c3RlbSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyMDIzOiAqIGJ5IEB6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyLlxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMjQtICovXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTI0NDg9emwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ1MS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDUyOlx0cmMgPSB6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyKHpsZHBsbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ1My1cdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00MTk0PWljZV9kcGxsX2luaXRfZHBsbChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsICpkLCBib29sIGNndSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjE1LVx0XHRcdGljZV9kcGxsX3VwZGF0ZV9zdGF0ZShwZiwgZCwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MjE2Olx0XHRyZXQgPSBkcGxsX2RldmljZV9yZWdpc3RlcihkLVx1MDAzZWRwbGwsIHR5cGUsIG9wcywgZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjE3LVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYz00MjA9c3RhdGljIGludCBtbHg1X2RwbGxfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmFkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYy00NTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jOjQ1MjpcdGVyciA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKG1kcGxsLVx1MDAzZWRwbGwsIERQTExfVFlQRV9FRUMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jLTQ1My1cdFx0XHRcdCAgIFx1MDAyNm1seDVfZHBsbF9kZXZpY2Vfb3BzLCBtZHBsbCk7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTUwNTk9cHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTI0LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjUxMjU6XHRlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihicC1cdTAwM2VkcGxsLCBEUExMX1RZUEVfUFBTLCBcdTAwMjZkcGxsX29wcywgYnApO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxMjYtXHRpZiAoZXJyKVxuLS1cbmluY2x1ZGUvbGludXgvZHBsbC5oPTI4MD12b2lkIGRwbGxfZGV2aWNlX3B1dChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGRwbGxfdHJhY2tlciAqdHJhY2tlcik7XG5pbmNsdWRlL2xpbnV4L2RwbGwuaC0yODEtXG5pbmNsdWRlL2xpbnV4L2RwbGwuaDoyODI6aW50IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZW51bSBkcGxsX3R5cGUgdHlwZSxcbmluY2x1ZGUvbGludXgvZHBsbC5oLTI4My1cdFx0XHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzLCB2b2lkICpwcml2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgwMwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBEUExMIERyaXZlciBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgRFBMTCBkZXZpY2UgZHJpdmVyczogYHpsMzA3M3hgLCBgaWNlYCwgYG1seDVgLCBhbmQgYHB0cF9vY3BgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCB0aGVzZSBhcmUgYWxsIHRhcmdldGluZyBhY3R1YWwgaGFyZHdhcmUuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0aGF0IHNjcmVhbXMgJiMzNDtzb2Z0d2FyZSBlbXVsYXRpb24uJiMzNDsKCk5vdywgYSBxdWVzdGlvbiBpcyBwb3BwaW5nIGludG8gbXkgaGVhZDogY2FuIEkgZ2V0IHRvIGBkcGxsX3Bpbl9mcmVxX3NldGAgc29tZWhvdyB3aXRob3V0IGdvaW5nIHRocm91Z2ggYSByZWdpc3RlcmVkIERQTEwgZGV2aWNlPyBUaGlua2luZyBpdCBvdmVyLCBpdCBkb2VzbuKAmXQgc2VlbSBwb3NzaWJsZSBzaW5jZSB0aGVzZSBuZXRsaW5rIGNvbW1hbmRzIHJlbHkgb24gYWxyZWFkeSByZWdpc3RlcmVkIGRldmljZXMgYW5kIHBpbnMuIEkgY2Fu4oCZdCBzZWUgYSByb3V0ZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBhIGtub3duIGVudHJ5IHBvaW50LgoKT2theSwgc28gY2FuIEkgKmNyZWF0ZSogYSBEUExMIGRldmljZSB1c2luZyBuZXRsaW5rPyBUaGUgYW5zd2VyIGlzIGxpa2VseSBuby4gRHJpdmVycyBhcmUgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHRob3NlIERQTEwgZGV2aWNlcy4gU28sIEkgbmVlZCB0byBsb29rIGZvciBhbnkga2luZCBvZiBtb2NrIG9yIGR1bW15IGRyaXZlci4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYGRyaXZlcnMvZHBsbC9gIGRpcmVjdG9yeSBhbmQgc2VlIHdoYXQmIzM5O3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7ZHBsbF9jb3JlLmMmIzM0OywKICAgICYjMzQ7ZHBsbF9jb3JlLmgmIzM0OywKICAgICYjMzQ7ZHBsbF9uZXRsaW5rLmMmIzM0OywKICAgICYjMzQ7ZHBsbF9uZXRsaW5rLmgmIzM0OywKICAgICYjMzQ7ZHBsbF9ubC5jJiMzNDssCiAgICAmIzM0O2RwbGxfbmwuaCYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4JiMzNDsKICBdCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM1NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGB6bDMwNzN4YCBEcml2ZXIqKgoKT2theSwgbm8gbmVlZCB0byB3YXN0ZSB0aW1lIHNldHRpbmcgdXAgYSBtb2NrIGRyaXZlcjsgdGhhdCYjMzk7cyBub3QgdGhlIGRpcmVjdGlvbiBJIG5lZWQgdG8gZ28gaW4gcmlnaHQgbm93LiBXYWl0IGEgbWludXRl4oCmIGB6bDMwNzN4YCAtIGlzbiYjMzk7dCB0aGF0IGFuIFNQSS9JMkMgZGV2aWNlPyBSaWdodCwgaXQgaXMhIFRoZSBjcml0aWNhbCBxdWVzdGlvbiB0aGVuIGlzLCBjYW4gSSBpbnN0YW50aWF0ZSBpdCBkaXJlY3RseSB3aXRoaW4gYSB2aXJ0dWFsIG1hY2hpbmUgZW52aXJvbm1lbnQgdXNpbmcgc3lzZnMgb3IgZGV2aWNlIHRyZWU/IFRoYXQmIzM5O3MgdGhlIGtleSB0byBlZmZpY2llbnQgdGVzdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBoYXJkd2FyZSB3aWxsIGJlIGluc3RhbnRpYXRlZC4KCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGFjdHVhbCBkcml2ZXIgc291cmNlIGNvZGUuIFRpbWUgdG8gZXhhbWluZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgdGhlIHdheSB0aGlzIGRldmljZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGlzIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW5pdGlhbGl6ZWQsIGNvbmZpZ3VyZWQsIGFuZCBob3cgdGhlIGludGVyZmFjZSB3aXRoIFNQSS9JMkMgaXMgaGFuZGxlZC4gVGhhdCBzaG91bGQgdGVsbCBtZSB3aGV0aGVyIHZpcnR1YWwgaW5zdGFudGlhdGlvbiBpcyBldmVuIGZlYXNpYmxlLCBhbmQgaWYgc28sIGhvdyB0byBnZXQgaXQgd29ya2luZyBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9pMmNfZHJpdmVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jPTQ2PU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHpsMzA3M3hfaTJjX29mX21hdGNoKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTQ3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6NDg6c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTQ5LVx0LmRyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01NS19O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6NTY6bW9kdWxlX2kyY19kcml2ZXIoemwzMDczeF9pMmNfZHJpdmVyKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTU3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkxMAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEkyQyBEcml2ZXIgaW4gYSBWaXJ0dWFsIEVudmlyb25tZW50KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGFuIEkyQyBkcml2ZXIuIFJpZ2h0LCBJIGtub3cgSSBjYW4gaW5zdGFudGlhdGUgSTJDIGRldmljZXMgd2l0aGluIFFFTVUgb3IgR0NFIHVzaW5nIHN5c2ZzLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXdfZGV2aWNlYCBmZWF0dXJlIG9uIGFuIEkyQyBhZGFwdGVyLiBUaGluZ3MgbGlrZSBgaTJjLXN0dWJgIG9yIGV2ZW4gYGkyYy1kdW1teWAgYXJlIHBlcmZlY3QgZm9yIHRoYXQuIEJ1dCBoZXJlJiMzOTtzIHdoZXJlIEkgbmVlZCB0byBwYXVzZSBhbmQgdGhpbmsgY3JpdGljYWxseS4gTXkgY29uY2VybiBpcyB0aGlzOiBkb2VzIHRoZSBgemwzMDczeGAgZHJpdmVyLCB3aGF0ZXZlciBpdCBpcywgYWN0dWFsbHkgYXR0ZW1wdCBhbnkgKmhhcmR3YXJlKiBhY2Nlc3MgZHVyaW5nIGl0cyBwcm9iZSBzZXF1ZW5jZT8gSWYgaXQgZG9lcywgdGhlbiB1c2luZyBhIGR1bW15IEkyQyBkZXZpY2UsIGhvd2V2ZXIgY29udmVuaWVudCwgd2lsbCBsaWtlbHkgZmFpbC4gSXQmIzM5O3MgYSBrZXkgcG9pbnQgdGhhdCBJIGNhbiYjMzk7dCBvdmVybG9vay4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBgemwzMDczeF9wcm9iZWAgKG9yIGEgZnVuY3Rpb24gd2l0aCBhIHNpbWlsYXIgbmFtZSBpZiB0aGF0JiMzOTtzIG5vdCBleGFjdGx5IGl0KSBkb2VzLCBhbmQgd2hhdCByZWdpc3RlcnMgaXQgaXMgYXR0ZW1wdGluZyB0byBhY2Nlc3MgZHVyaW5nIGluaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjY3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBsYWlkIG91dDoKCioqQ2hlY2tpbmcgdGhlIEkyQyBEcml2ZXIgZm9yIHRoZSBaTDMwNzN4KioKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBJMkMgZHJpdmVyIGltcGxlbWVudGF0aW9uIGZvciB0aGUgWkwzMDczeC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJMkMgY29tbXVuaWNhdGlvbiBpcyBoYW5kbGVkIGJlY2F1c2UsIGluIG15IGV4cGVyaWVuY2UsIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBrZXkgYXJlYSBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24uIFRoZSBzcGVjaWZpYyBmaWxlIEkmIzM5O20gdGFyZ2V0aW5nIGlzIGBkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuY2AuIFRoaXMgdGVsbHMgbWUgaW1tZWRpYXRlbHkgd2hlcmUgdG8gbG9vayB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gSSBleHBlY3QgdG8gZmluZCB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUgWkwzMDczeCBvdmVyIHRoZSBJMkMgYnVzLCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgYWRkcmVzcyBkZWZpbml0aW9ucywgcmVnaXN0ZXIgbWFwcywgYW5kIGVycm9yIGhhbmRsaW5nIGZvciBJMkMgdHJhbnNhY3Rpb25zLiBUaGlzIGZpbGUgaXMgbXkgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgSTJDIGNvbW11bmljYXRpb24gZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcmVnbWFwLmhcdTAwM2VcbiAgIDg6XHRcbiAgIDk6XHQjaW5jbHVkZSBcJiMzNDtjb3JlLmhcJiMzNDtcbiAgMTA6XHRcbiAgMTE6XHRzdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4gIDEyOlx0e1xuICAxMzpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2Y2xpZW50LVx1MDAzZWRldjtcbiAgMTQ6XHRcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXY7XG4gIDE1Olx0XG4gIDE2Olx0XHR6bGRldiA9IHpsMzA3M3hfZGV2bV9hbGxvYyhkZXYpO1xuICAxNzpcdFx0aWYgKElTX0VSUih6bGRldikpXG4gIDE4Olx0XHRcdHJldHVybiBQVFJfRVJSKHpsZGV2KTtcbiAgMTk6XHRcbiAgMjA6XHRcdHpsZGV2LVx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgXHUwMDI2emwzMDczeF9yZWdtYXBfY29uZmlnKTtcbiAgMjE6XHRcdGlmIChJU19FUlIoemxkZXYtXHUwMDNlcmVnbWFwKSlcbiAgMjI6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHpsZGV2LVx1MDAzZXJlZ21hcCksXG4gIDIzOlx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHJlZ21hcFxcblwmIzM0Oyk7XG4gIDI0Olx0XG4gIDI1Olx0XHRyZXR1cm4gemwzMDczeF9kZXZfcHJvYmUoemxkZXYpO1xuICAyNjpcdH1cbiAgMjc6XHRcbiAgMjg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgemwzMDczeF9pMmNfaWRbXSA9IHtcbiAgMjk6XHRcdHsgLm5hbWUgPSBcJiMzNDt6bDMwNzMxXCYjMzQ7IH0sXG4gIDMwOlx0XHR7IC5uYW1lID0gXCYjMzQ7emwzMDczMlwmIzM0OyB9LFxuICAzMTpcdFx0eyAubmFtZSA9IFwmIzM0O3psMzA3MzNcJiMzNDsgfSxcbiAgMzI6XHRcdHsgLm5hbWUgPSBcJiMzNDt6bDMwNzM0XCYjMzQ7IH0sXG4gIDMzOlx0XHR7IC5uYW1lID0gXCYjMzQ7emwzMDczNVwmIzM0OyB9LFxuICAzNDpcdFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gIDM1Olx0fTtcbiAgMzY6XHRNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgemwzMDczeF9pMmNfaWQpO1xuICAzNzpcdFxuICAzODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHpsMzA3M3hfaTJjX29mX21hdGNoW10gPSB7XG4gIDM5Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWljcm9jaGlwLHpsMzA3MzFcJiMzNDsgfSxcbiAgNDA6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttaWNyb2NoaXAsemwzMDczMlwmIzM0OyB9LFxuICA0MTpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21pY3JvY2hpcCx6bDMwNzMzXCYjMzQ7IH0sXG4gIDQyOlx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWljcm9jaGlwLHpsMzA3MzRcJiMzNDsgfSxcbiAgNDM6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttaWNyb2NoaXAsemwzMDczNVwmIzM0OyB9LFxuICA0NDpcdFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gIDQ1Olx0fTtcbiAgNDY6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB6bDMwNzN4X2kyY19vZl9tYXRjaCk7XG4gIDQ3Olx0XG4gIDQ4Olx0c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcbiAgNDk6XHRcdC5kcml2ZXIgPSB7XG4gIDUwOlx0XHRcdC5uYW1lID0gXCYjMzQ7emwzMDczeC1pMmNcJiMzNDssXG4gIDUxOlx0XHRcdC5vZl9tYXRjaF90YWJsZSA9IHpsMzA3M3hfaTJjX29mX21hdGNoLFxuICA1MjpcdFx0fSxcbiAgNTM6XHRcdC5wcm9iZSA9IHpsMzA3M3hfaTJjX3Byb2JlLFxuICA1NDpcdFx0LmlkX3RhYmxlID0gemwzMDczeF9pMmNfaWQsXG4gIDU1Olx0fTtcbiAgNTY6XHRtb2R1bGVfaTJjX2RyaXZlcih6bDMwNzN4X2kyY19kcml2ZXIpO1xuICA1NzpcdFxuICA1ODpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7SXZhbiBWZWNlcmEgXHUwMDNjaXZlY2VyYUByZWRoYXQuY29tXHUwMDNlXCYjMzQ7KTtcbiAgNTk6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TWljcm9jaGlwIFpMMzA3M3ggSTJDIGRyaXZlclwmIzM0Oyk7XG4gIDYwOlx0TU9EVUxFX0lNUE9SVF9OUyhcJiMzNDtaTDMwNzNYXCYjMzQ7KTtcbiAgNjE6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU3OQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgUHJvYmUgRnVuY3Rpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgemwzMDczeF9kZXZfcHJvYmVgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSBpbml0aWFsIGRldmljZSBkZXRlY3Rpb24gYW5kIHNldHVwLiBXZSBhbGwga25vdyBob3cgY3JpdGljYWwgdGhpcyBmdW5jdGlvbiBpczsgaXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBmaXJzdCBsaW5lIG9mIGRlZmVuc2UgYWdhaW5zdCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBuaWdodG1hcmVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nLCB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBlcnJvciBoYW5kbGluZy4gSXMgaXQgZm9sbG93aW5nIGJlc3QgcHJhY3RpY2VzIGZvciBkcml2ZXIgZGV2ZWxvcG1lbnQsIG9yIGFyZSB3ZSBnb2luZyB0byBiZSBjaGFzaW5nIGRvd24gb2JzY3VyZSBoYXJkd2FyZSBxdWlya3MgbGF0ZXI/IEkgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIEkyQyBvciBTUEkgaW50ZXJmYWNlIChvciB3aGF0ZXZlciBpdCYjMzk7cyB1c2luZyksIGlmIGl0JiMzOTtzIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgaW50ZXJydXB0IHNldHVwLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaWYgaXQgaXMgZG9pbmcgYWxsIG9mIHRoaXMgc2FmZWx5LiBBbnkgb2J2aW91cyBjb25jdXJyZW5jeSBpc3N1ZXM/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHJlc291cmNlIGFjY2Vzcz8gR290dGEgYmUgdGhvcm91Z2guIFRoaXMgcHJvYmUgZnVuY3Rpb24gZGV0ZXJtaW5lcyB0aGUgcmVsaWFiaWxpdHkgb2YgdGhlIGVudGlyZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psMzA3M3hfZGV2X3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05MjY9emwzMDczeF9kZXZtX2RwbGxfaW5pdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05NzMtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTc0OiAqIHpsMzA3M3hfZGV2X3Byb2JlIC0gaW5pdGlhbGl6ZSB6bDMwNzN4IGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk3NS0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2Vcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTgwLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk4MTppbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05ODIte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDUzLX1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDU0OkVYUE9SVF9TWU1CT0xfTlNfR1BMKHpsMzA3M3hfZGV2X3Byb2JlLCBcJiMzNDtaTDMwNzNYXCYjMzQ7KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDU1LVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaD05Nj1zdHJ1Y3QgemwzMDczeF9kZXYgKnpsMzA3M3hfZGV2bV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oOjk3OmludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaC05OC1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz0xMT1zdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjQtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoyNTpcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yNi19XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3NwaS5jLTI0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM6MjU6XHRyZXR1cm4gemwzMDczeF9kZXZfcHJvYmUoemxkZXYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmMtMjYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU3OAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgemwzMDczeF9kZXZfcHJvYmVgLCBhcyBJIHVuZGVyc3RhbmQgaXQ6CgoqKkFuYWx5emluZyB0aGUgYHpsMzA3M3hfZGV2X3Byb2JlYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYHpsMzA3M3hfZGV2X3Byb2JlYC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgaW4gdGhlIHJlYWxtIG9mIGRldmljZSBwcm9iaW5nLCBhbmQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBhIGB6bDMwNzN4YCBkZXZpY2UsIHdoaWNoIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIGFyY2hpdGVjdHVyZSBvZi4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIGF0dGVtcHRzIHRvIGlkZW50aWZ5LCBpbml0aWFsaXplLCBhbmQgcmVnaXN0ZXIgYSBuZXcgYHpsMzA3M3hgIGRldmljZSB0aGF0JiMzOTtzIGJlZW4gcGx1Z2dlZCBpbiBvciBpcyBvdGhlcndpc2UgYmVjb21pbmcgYXZhaWxhYmxlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKlJlc291cmNlIGFsbG9jYXRpb24qKjogSG93IGFyZSB0aGV5IGdldHRpbmcgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMsIGxpa2UgbWVtb3J5IHJlZ2lvbnMsIElSUXMsIEkyQyBvciBTUEkgYnVzZXMsIGV0Yy4/IEkgd2FudCB0byBzZWUgaWYgdGhleSBhcmUgdXNpbmcgYW55IHBsYXRmb3JtLXNwZWNpZmljIG1lY2hhbmlzbXMgb3IgaWYgdGhlcmUmIzM5O3MgYSBtb3JlIGdlbmVyaWMgYXBwcm9hY2guIEFueSB1bnVzdWFsIGFwcHJvYWNoZXMgaGVyZSB3b3VsZCBiZSBpbnRlcmVzdGluZy4KKiAgICoqRGV2aWNlIGlkZW50aWZpY2F0aW9uKio6IEhvdyBpcyB0aGUgZHJpdmVyIHZlcmlmeWluZyB0aGUgZGV2aWNlIGlzICphY3R1YWxseSogYSBgemwzMDczeGA/IEFyZSB0aGV5IGNoZWNraW5nIGEgZGV2aWNlIElEIHJlZ2lzdGVyPyBWZW5kb3Itc3BlY2lmaWMgbWFnaWM/IEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIGFwcHJvYWNoIGFuZCBhbnkgcG90ZW50aWFsIGZvciByb2J1c3RuZXNzIGlzc3Vlcy4KKiAgICoqSW5pdGlhbGl6YXRpb24gc2VxdWVuY2UqKjogV2hhdCBzdGVwcyBhcmUgdGFrZW4gdG8gZ2V0IHRoZSBkZXZpY2UgcmVhZHkgZm9yIHVzZT8gVGhpcyBjb3VsZCBpbmNsdWRlIHBvd2VyLXVwIHNlcXVlbmNlcywgcmVnaXN0ZXIgd3JpdGVzLCBjbG9jayBjb25maWd1cmF0aW9uLCBhbmQgcG9zc2libHkgZmlybXdhcmUgbG9hZGluZy4gSSYjMzk7bGwgYmUgbG9va2luZyBhdCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgcGF5aW5nIGF0dGVudGlvbiB0byBhbnkgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgdGltaW5nIGNvbnN0cmFpbnRzLgoqICAgKipEcml2ZXIgcmVnaXN0cmF0aW9uKio6IE9uY2UgdGhlIGRldmljZSBpcyByZWFkeSwgSSYjMzk7bGwgYmUgd2F0Y2hpbmcgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIHJlZ2lzdGVycyBpdHNlbGYgd2l0aCB0aGUga2VybmVsLiBJcyBpdCB1c2luZyB0aGUgc3RhbmRhcmQgZGV2aWNlIGRyaXZlciBtb2RlbD8gQXJlIHRoZXJlIGFueSBjdXN0b20gY2FsbGJhY2tzIG9yIHN0cnVjdHVyZXM/IEFueSBjdXN0b20gZGF0YSBzdHJ1Y3R1cmVzIG9yIGludGVyYWN0aW9ucyB3aWxsIGJlIG9mIGludGVyZXN0LgoqICAgKipFcnJvciBoYW5kbGluZyoqOiBXaGVyZSBhcmUgdGhlIGVycm9yIGNoZWNrcz8gV2hhdCBoYXBwZW5zIGlmIGFueSBvZiB0aGUgY3JpdGljYWwgc3RlcHMgZmFpbD8gSSB3YW50IHRvIGFzc2VzcyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgcHJvYmUgZnVuY3Rpb24gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgd2Vha25lc3Nlcy4gSSYjMzk7bSBleHBlY3RpbmcgdGhvcm91Z2ggZXJyb3IgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGhhcmR3YXJlLgoqICAgKipDb25jdXJyZW5jeSoqOiBJJiMzOTtsbCBhbHNvIGdsYW5jZSB0byBzZWUgaWYgYW55dGhpbmcgaGVyZSBpcyBzdXNjZXB0aWJsZSB0byBjb25jdXJyZW5jeSBpc3N1ZXMgYXMgSSBrbm93IGhhcmR3YXJlIHByb2JpbmcgY2FuIG9mdGVuIGhhdmUgc2hhcmVkIHJlc291cmNlcy4KCkVzc2VudGlhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEgZ2F0ZXdheS4gSXQgc2hvdWxkIGJlIG1ha2luZyBzdXJlIHRoYXQgdGhlIGRldmljZSBpcyBhY3R1YWxseSB0aGUgZGV2aWNlIHdlJiMzOTtyZSBleHBlY3RpbmcsIGFuZCB0aGVuIGdldHRpbmcgaXQgcmVhZHkgdG8gYmUgdXNlZCBieSB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBkb25lIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk3NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk3NDpcdCAqIHpsMzA3M3hfZGV2X3Byb2JlIC0gaW5pdGlhbGl6ZSB6bDMwNzN4IGRldmljZVxuIDk3NTpcdCAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuIDk3NjpcdCAqXG4gOTc3Olx0ICogQ29tbW9uIGluaXRpYWxpemF0aW9uIG9mIHpsMzA3M3ggZGV2aWNlIHN0cnVjdHVyZS5cbiA5Nzg6XHQgKlxuIDk3OTpcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuIDk4MDpcdCAqL1xuIDk4MTpcdGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIDk4MjpcdHtcbiA5ODM6XHRcdHUxNiBpZCwgcmV2aXNpb24sIGZ3X3ZlcjtcbiA5ODQ6XHRcdHVuc2lnbmVkIGludCBpO1xuIDk4NTpcdFx0dTMyIGNmZ192ZXI7XG4gOTg2Olx0XHRpbnQgcmM7XG4gOTg3Olx0XG4gOTg4Olx0XHQvKiBSZWFkIGNoaXAgSUQgKi9cbiA5ODk6XHRcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcdTAwMjZpZCk7XG4gOTkwOlx0XHRpZiAocmMpXG4gOTkxOlx0XHRcdHJldHVybiByYztcbiA5OTI6XHRcbiA5OTM6XHRcdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cbiA5OTQ6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoemwzMDczeF9jaGlwX2lkcyk7IGkmIzQzOyYjNDM7KSB7XG4gOTk1Olx0XHRcdGlmICh6bDMwNzN4X2NoaXBfaWRzW2ldLmlkID09IGlkKVxuIDk5NjpcdFx0XHRcdGJyZWFrO1xuIDk5NzpcdFx0fVxuIDk5ODpcdFxuIDk5OTpcdFx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcbjEwMDA6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCAtRU5PREVWLFxuMTAwMTpcdFx0XHRcdFx0ICAgICBcJiMzNDtVbmtub3duIGNoaXAgSUQ6IDB4JTA0eFxcblwmIzM0OywgaWQpO1xuMTAwMjpcdFxuMTAwMzpcdFx0emxkZXYtXHUwMDNlaW5mbyA9IFx1MDAyNnpsMzA3M3hfY2hpcF9pZHNbaV07XG4xMDA0Olx0XG4xMDA1Olx0XHQvKiBSZWFkIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjdXN0b20gY29uZmlnIHZlcnNpb24gKi9cbjEwMDY6XHRcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFVklTSU9OLCBcdTAwMjZyZXZpc2lvbik7XG4xMDA3Olx0XHRpZiAocmMpXG4xMDA4Olx0XHRcdHJldHVybiByYztcbjEwMDk6XHRcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0ZXX1ZFUiwgXHUwMDI2ZndfdmVyKTtcbjEwMTA6XHRcdGlmIChyYylcbjEwMTE6XHRcdFx0cmV0dXJuIHJjO1xuMTAxMjpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfQ1VTVE9NX0NPTkZJR19WRVIsIFx1MDAyNmNmZ192ZXIpO1xuMTAxMzpcdFx0aWYgKHJjKVxuMTAxNDpcdFx0XHRyZXR1cm4gcmM7XG4xMDE1Olx0XG4xMDE2Olx0XHRkZXZfZGJnKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2hpcElEKCVYKSwgQ2hpcFJldiglWCksIEZ3VmVyKCV1KVxcblwmIzM0OywgaWQsXG4xMDE3Olx0XHRcdHJldmlzaW9uLCBmd192ZXIpO1xuMTAxODpcdFx0ZGV2X2RiZyh6bGRldi1cdTAwM2VkZXYsIFwmIzM0O0N1c3RvbSBjb25maWcgdmVyc2lvbjogJWx1LiVsdS4lbHUuJWx1XFxuXCYjMzQ7LFxuMTAxOTpcdFx0XHRGSUVMRF9HRVQoR0VOTUFTSygzMSwgMjQpLCBjZmdfdmVyKSxcbjEwMjA6XHRcdFx0RklFTERfR0VUKEdFTk1BU0soMjMsIDE2KSwgY2ZnX3ZlciksXG4xMDIxOlx0XHRcdEZJRUxEX0dFVChHRU5NQVNLKDE1LCA4KSwgY2ZnX3ZlciksXG4xMDIyOlx0XHRcdEZJRUxEX0dFVChHRU5NQVNLKDcsIDApLCBjZmdfdmVyKSk7XG4xMDIzOlx0XG4xMDI0Olx0XHQvKiBHZW5lcmF0ZSByYW5kb20gY2xvY2sgSUQgYXMgdGhlIGRldmljZSBoYXMgbm90IHN1Y2ggcHJvcGVydHkgdGhhdFxuMTAyNTpcdFx0ICogY291bGQgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiBBIHVzZXIgY2FuIGxhdGVyIGNoYW5nZSB0aGlzIHZhbHVlXG4xMDI2Olx0XHQgKiB1c2luZyBkZXZsaW5rLlxuMTAyNzpcdFx0ICovXG4xMDI4Olx0XHR6bGRldi1cdTAwM2VjbG9ja19pZCA9IGdldF9yYW5kb21fdTY0KCk7XG4xMDI5Olx0XG4xMDMwOlx0XHQvKiBEZWZhdWx0IHBoYXNlIG9mZnNldCBhdmVyYWdpbmcgZmFjdG9yICovXG4xMDMxOlx0XHR6bGRldi1cdTAwM2VwaGFzZV9hdmdfZmFjdG9yID0gMjtcbjEwMzI6XHRcbjEwMzM6XHRcdC8qIEluaXRpYWxpemUgbXV0ZXggZm9yIG9wZXJhdGlvbnMgd2hlcmUgbXVsdGlwbGUgcmVhZHMsIHdyaXRlc1xuMTAzNDpcdFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXG4xMDM1Olx0XHQgKi9cbjEwMzY6XHRcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlbXVsdGlvcF9sb2NrKTtcbjEwMzc6XHRcdGlmIChyYylcbjEwMzg6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbjEwMzk6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuMTA0MDpcdFxuMTA0MTpcdFx0LyogUmVnaXN0ZXIgRFBMTCBjaGFubmVscyAqL1xuMTA0MjpcdFx0cmMgPSB6bDMwNzN4X2Rldm1fZHBsbF9pbml0KHpsZGV2KTtcbjEwNDM6XHRcdGlmIChyYylcbjEwNDQ6XHRcdFx0cmV0dXJuIHJjO1xuMTA0NTpcdFxuMTA0NjpcdFx0LyogUmVnaXN0ZXIgdGhlIGRldmxpbmsgaW5zdGFuY2UgYW5kIHBhcmFtZXRlcnMgKi9cbjEwNDc6XHRcdHJjID0gemwzMDczeF9kZXZsaW5rX3JlZ2lzdGVyKHpsZGV2KTtcbjEwNDg6XHRcdGlmIChyYylcbjEwNDk6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbjEwNTA6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGRldmxpbmsgaW5zdGFuY2VcXG5cJiMzNDspO1xuMTA1MTpcdFxuMTA1MjpcdFx0cmV0dXJuIDA7XG4xMDUzOlx0fVxuMTA1NDpcdEVYUE9SVF9TWU1CT0xfTlNfR1BMKHpsMzA3M3hfZGV2X3Byb2JlLCBcJiMzNDtaTDMwNzNYXCYjMzQ7KTtcbjEwNTU6XHRcbjEwNTY6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O0l2YW4gVmVjZXJhIFx1MDAzY2l2ZWNlcmFAcmVkaGF0LmNvbVx1MDAzZVwmIzM0Oyk7XG4xMDU3Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01pY3JvY2hpcCBaTDMwNzN4IGNvcmUgZHJpdmVyXCYjMzQ7KTtcbjEwNTg6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY1MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIEkyQyBEZXZpY2UgUHJvYmluZyBhbmQgTW9ja2luZyBQb3NzaWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHByb2JlIGZ1bmN0aW9uLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCByZWFkcyBhIGNoaXAgSUQgZnJvbSB0aGUgSTJDIGRldmljZS4gSWYgaXQgZ2V0cyBhIHZhbGlkIElELCBpdCBtb3ZlcyBvbjsgb3RoZXJ3aXNlLCBpdCBlcnJvcnMgb3V0LiBUaGUgY3J1Y2lhbCB0aGluZyBpcyB0aGF0IHRoaXMgZWFybHkgcmVhZCBpcyBnb2luZyB0byBiZSBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoZSBkcml2ZXIgdG8gZXZlbiAqc3RhcnQqLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBiZSBtb2NrZWQgd2l0aGluIFFFTVU/IEFsbW9zdCBjZXJ0YWlubHkgbm90LCB1bmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWFsaXplZCBRRU1VIGRldmljZSBtb2RlbCBmb3IgdGhlIHpsMzA3M3gsIHdoaWNoIGlzIGhpZ2hseSB1bmxpa2VseS4gVGhhdCYjMzk7cyBhIG5pY2hlIHBhcnQuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byB0aGluayBtb3JlIGNyZWF0aXZlbHkuCgpUaGVuIG15IGJyYWluIGRhcnRzIHRvIHN5emthbGxlciBhbmQgaXRzIGNhcGFiaWxpdGllcyBmb3IgbW9ja2luZy4gQ2FuIEkgdXNlIHNvbWV0aGluZyBsaWtlIGBpMmMtc3R1YmAgb3IgYGkyYy1kdW1teWA/IE5vLCBgaTJjLXN0dWJgIGhhcyBsaW1pdGF0aW9uczsgaXQgc2VlbXMgdG8gZWl0aGVyIG9ubHkgc3VwcG9ydCBhIGhhbmRmdWwgb2Ygc3BlY2lmaWMgY2hpcHMgb3IgcmVsaWVzIG9uIHN5c2ZzLWJhc2VkIHJlZ2lzdGVyIGludGVyYWN0aW9uLiBBbmQgdGhlIHpsMzA3M3ggaXMgZGVmaW5pdGVseSAqbm90KiBwcmUtcHJvZ3JhbW1lZCBpbnRvIGBpMmMtc3R1YmAmIzM5O3Mga25vd24gbGlzdC4gVW5sZXNzIHN5emthbGxlciBoYXMgc29tZSBzcGVjaWFsIHNhdWNlIGZvciBpbmplY3RpbmcgSTJDIHJlc3BvbnNlcywgd2hpY2ggaXNuJiMzOTt0IHN0YW5kYXJkLCB0aGlzIGlzIGdvaW5nIHRvIGJlIGEgZGVhZCBlbmQgZm9yIGEgc2ltcGxlIG1vY2suCgpOb3cgSSYjMzk7bSB0cnlpbmcgdG8gcmVjYWxsIHRoZSBwYXR0ZXJucy4gV2l0aCBVU0IgZGV2aWNlcywgd2lmaSwgYW5kIG5ldHdvcmsgaW50ZXJmYWNlcywgdGhlcmUgYXJlICYjMzQ7c2ltJiMzNDsgZGV2aWNlcyBpbiBzeXprYWxsZXIuIERvZXMgdGhlIEkyQyBlY29zeXN0ZW0gaGF2ZSBhIGNvdW50ZXJwYXJ0PyBQcm9iYWJseSBub3QuIFRoZSBwcm9ibGVtIHdpdGggSTJDIGlzIGl0IGlzIHNvIHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUuIEkmIzM5O20gYWxtb3N0IGNlcnRhaW4gYGkyYy1zdHViYCBpcyBqdXN0IGEgYmFzaWMgU01CdXMgc3R1Yiwgbm90IGEgZ2VuZXJhbC1wdXJwb3NlIG1vY2tpbmcgdG9vbC4KCk15IHRob3VnaHRzIGFyZSBub3cgdHVybmluZyB0b3dhcmRzIHVucmVsYXRlZCBwaWVjZXMgb2YgdGhlIHB1enpsZSAtIHRob3NlIGNoYW5nZXMgaW4gYGRwbGxfbmV0bGluay5jYC4gSSBoYXZlIHRvIHN0ZXAgYmFjayBhbmQgcmVtZW1iZXIgd2hhdCB0aGVzZSBmaWxlcyBhcmUgYWJvdXQuIFRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIHRoZSBjb3JlIERQTEwgc3Vic3lzdGVtLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwgdG8gbXkgcHJvamVjdCEgVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIEkgY2FuIHJlYWNoIHRoZSBEUExMIHN1YnN5c3RlbSB3aXRob3V0IGFueSBwaHlzaWNhbCBkZXZpY2UuIEl0IG1heSBiZSBwb3NzaWJsZSBpZiBvdGhlciBkcml2ZXJzIHJlZ2lzdGVyIERQTEwgZGV2aWNlcy4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4gSSBuZWVkIHRvIGNoZWNrIGlmIGFueSBvdGhlciBkcml2ZXJzIHdpbGwgcmVnaXN0ZXIgYSBEUExMIGRldmljZSBpbiB0aGUgYWJzZW5jZSBvZiB0aGUgemwzMDczeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHBsbF9kZXZpY2VfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTU2OD1EZXZpY2Ugc2hvdWxkIGltcGxlbWVudCBzZXQgb2Ygb3BlcmF0aW9ucyBhbmQgcmVnaXN0ZXIgZGV2aWNlIHZpYVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0OjU2OTpkcGxsX2RldmljZV9yZWdpc3RlcigpIGF0IHdoaWNoIHBvaW50IGl0IGJlY29tZXMgYXZhaWxhYmxlIHRvIHRoZVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTU3MC11c2Vycy4gTXVsdGlwbGUgZHJpdmVyIGluc3RhbmNlcyBjYW4gb2J0YWluIHJlZmVyZW5jZSB0byBpdCB3aXRoXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTYzND1UaGUgcmVnaXN0cmF0aW9uIHBhcnQgaXMgdGhlbiBsb29rcyBsaWtlIHRoaXMgcGFydDpcbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QtNjQ1LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0OjY0NjogICAgICAgIGVyciA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKGJwLVx1MDAzZWRwbGwsIERQTExfVFlQRV9QUFMsIFx1MDAyNmRwbGxfb3BzLCBicCk7XG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QtNjQ3LSAgICAgICAgaWYgKGVycilcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9NDQ4PWRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maW5kKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDYwLS8qKlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ2MTogKiBkcGxsX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVyIHRoZSBkcGxsIGRldmljZSBpbiB0aGUgc3Vic3lzdGVtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDYyLSAqIEBkcGxsOiBwb2ludGVyIHRvIGEgZHBsbFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NzMtICovXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDc0OmludCBkcGxsX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGVudW0gZHBsbF90eXBlIHR5cGUsXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDc1LVx0XHRcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHMsIHZvaWQgKnByaXYpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUxNy19XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTE4OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTktXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE5MzA9emwzMDczeF9kcGxsX3BpbnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTgwLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE5ODE6ICogemwzMDczeF9kcGxsX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTk4Mi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTk4OD1zdGF0aWMgaW50XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTk4OTp6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTkwLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAwNy1cdHpsZHBsbC1cdTAwM2V0eXBlID0gemwzMDczeF9wcm9wX2RwbGxfdHlwZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjAwODpcdHJjID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoemxkcGxsLVx1MDAzZWRwbGxfZGV2LCB6bGRwbGwtXHUwMDNldHlwZSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDA5LVx0XHRcdFx0ICBcdTAwMjZ6bGRwbGwtXHUwMDNlb3BzLCB6bGRwbGwpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDIyLSAqIFVucmVnaXN0ZXJzIGdpdmVuIERQTEwgZGV2aWNlIGZyb20gRFBMTCBzdWItc3lzdGVtIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjIwMjM6ICogYnkgQHpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIuXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAyNC0gKi9cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MjQ0OD16bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDUxLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI0NTI6XHRyYyA9IHpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIoemxkcGxsKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDUzLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQxOTQ9aWNlX2RwbGxfaW5pdF9kcGxsKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGwgKmQsIGJvb2wgY2d1LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMTUtXHRcdFx0aWNlX2RwbGxfdXBkYXRlX3N0YXRlKHBmLCBkLCB0cnVlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyMTY6XHRcdHJldCA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKGQtXHUwMDNlZHBsbCwgdHlwZSwgb3BzLCBkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMTctXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jPTQyMD1zdGF0aWMgaW50IG1seDVfZHBsbF9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jLTQ1MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmM6NDUyOlx0ZXJyID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIobWRwbGwtXHUwMDNlZHBsbCwgRFBMTF9UWVBFX0VFQyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmMtNDUzLVx0XHRcdFx0ICAgXHUwMDI2bWx4NV9kcGxsX2RldmljZV9vcHMsIG1kcGxsKTtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NTA1OT1wdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxMjQtXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTEyNTpcdGVyciA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKGJwLVx1MDAzZWRwbGwsIERQTExfVFlQRV9QUFMsIFx1MDAyNmRwbGxfb3BzLCBicCk7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTEyNi1cdGlmIChlcnIpXG4tLVxuaW5jbHVkZS9saW51eC9kcGxsLmg9MjgwPXZvaWQgZHBsbF9kZXZpY2VfcHV0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZHBsbF90cmFja2VyICp0cmFja2VyKTtcbmluY2x1ZGUvbGludXgvZHBsbC5oLTI4MS1cbmluY2x1ZGUvbGludXgvZHBsbC5oOjI4MjppbnQgZHBsbF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBlbnVtIGRwbGxfdHlwZSB0eXBlLFxuaW5jbHVkZS9saW51eC9kcGxsLmgtMjgzLVx0XHRcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHMsIHZvaWQgKnByaXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU4MAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEZXZpY2UgRHJpdmVyIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGF2YWlsYWJsZSBkcml2ZXJzIGFuZCBpdCBzZWVtcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcHJldHR5IHNwZWNpZmljIGhhcmR3YXJlIHNldC4gVGhlIGxpc3Qgb25seSBpbmNsdWRlcyBgemwzMDczeGAsIGBpY2VgLCBgbWx4NWAsIGFuZCBgcHRwX29jcGAuIFJpZ2h0LCBzbyBgaWNlYCBpcyBJbnRlbCYjMzk7cyBFODAwIHNlcmllcyBQQ0llIE5JQywgYG1seDVgIGlzIGEgTWVsbGFub3ggQ29ubmVjdFgtNSYjNDM7IFBDSWUgTklDLCBhbmQgYHB0cF9vY3BgIGlzIHRoZSBPcGVuIENvbXB1dGUgUHJvamVjdCBUaW1lIENhcmQsIGFsc28gUENJZS4gVGhlbiB0aGVyZSYjMzk7cyBgemwzMDczeGAsIHdoaWNoIGlzIHRoYXQgTWljcm9zZW1pIFpMMzA3M3ggSTJDL1NQSSBEUExMLgoKVGhlIGltcG9ydGFudCB0aGluZyB0byBub3RlIGhlcmUgaXMgdGhhdCBub25lIG9mIHRoZXNlIGFyZSBzb2Z0d2FyZSBlbXVsYXRlZCBkcml2ZXJzLiBUaGV5IGFyZSBhbGwgaW50ZXJhY3RpbmcgZGlyZWN0bHkgd2l0aCBoYXJkd2FyZS4KCk15IGNvbmNlcm4gaXMgd2hldGhlciB0aGUgc3lzdGVtIGlzIHNldCB1cCBjb3JyZWN0bHkgZm9yIHRoZSBEUExMLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGUgYGRwbGxfcGluX2ZyZXFfc2V0YCBmdW5jdGlvbiB3aXRob3V0IGEgY29ycmVjdGx5IHJlZ2lzdGVyZWQgRFBMTCBkZXZpY2U/IFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBwb2ludCBvZiBmYWlsdXJlLiBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGRwbGxfbmV0bGluay5jYCB0byBzZWUgaG93IHRoZSBEUExMIGRldmljZSBpcyBjaGVja2VkIGFuZCByZWdpc3RlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX3Bpbl9mcmVxX3NldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTA3Nz1zdGF0aWMgaW50XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTA3ODpkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDc5LVx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTUzMD1kcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHIoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE1MzgtXHRcdGNhc2UgRFBMTF9BX1BJTl9GUkVRVUVOQ1k6XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTUzOTpcdFx0XHRyZXQgPSBkcGxsX3Bpbl9mcmVxX3NldChwaW4sIGEsIGluZm8tXHUwMDNlZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNTQwLVx0XHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MTMzPXN0YXRpYyBib29sIGljZV9kcGxsX2lzX3Jlc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMTQyLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MTQzOiAqIGljZV9kcGxsX3Bpbl9mcmVxX3NldCAtIHNldCBwaW4mIzM5O3MgZnJlcXVlbmN5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0xNDQtICogQHBmOiBwcml2YXRlIGJvYXJkIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTE1Nz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzoxNTg6aWNlX2RwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0xNTktXHRcdCAgICAgIGVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGluX3R5cGUsIGNvbnN0IHUzMiBmcmVxLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTIxMD1pY2VfZHBsbF9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yMjQtXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MjI1Olx0cmV0ID0gaWNlX2RwbGxfcGluX2ZyZXFfc2V0KHBmLCBwLCBwaW5fdHlwZSwgZnJlcXVlbmN5LCBleHRhY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjI2LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc0NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgY29kZSBzbmlwcGV0LCBkZWxpdmVyZWQgYXMgaWYgaXQmIzM5O3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGVjb2RpbmcgdGhlIERQTEwgUGluIFNldCBMb2dpYyoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyYCBmdW5jdGlvbi4gSSByZWNvZ25pemUgdGhhdCBvbmUuIEl0JiMzOTtzIGNsZWFybHkgYmVpbmcgY2FsbGVkIGZyb20gYGRwbGxfbmxfcGluX3NldF9kb2l0YC4gQmFzZWQgb24gdGhlIG5hbWluZywgaXQmIzM5O3MgcHJldHR5IG9idmlvdXMgdGhhdCB0aGlzIHJlbGF0ZXMgdG8gc2V0dGluZyBzb21ldGhpbmcgdXAgd2l0aCBEUExMIHBpbnMgdGhyb3VnaCBhIE5ldGxpbmsgaW50ZXJmYWNlLiBgX2Zyb21fbmxhdHRyYCBoaW50cyBhdCB0YWtpbmcgaW5mb3JtYXRpb24gcGFzc2VkIHZpYSBhIE5ldGxpbmsgYXR0cmlidXRlIGFuZCBkb2luZyBzb21ldGhpbmcgd2l0aCBpdC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGBkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHJgIGZ1bmN0aW9uIGlzIHRoZSBjb3JlIGxvZ2ljIHRoYXQgcGFyc2VzIHRob3NlIE5ldGxpbmsgYXR0cmlidXRlcyBhbmQgZmlndXJlcyBvdXQgKndoYXQqIHBpbiBzZXR0aW5ncyBhcmUgYmVpbmcgcmVxdWVzdGVkLiBBbmQgdGhlbiwgSSYjMzk7bSB3YWdlcmluZywgaXQgYXBwbGllcyB0aG9zZSBzZXR0aW5ncyB0byB0aGUgRFBMTC4gVGhlIG90aGVyIGZ1bmN0aW9uLCBgZHBsbF9ubF9waW5fc2V0X2RvaXRgLCBpcyBsaWtlbHkgdGhlIE5ldGxpbmsgaGFuZGxlciBmdW5jdGlvbiBpdHNlbGYuIEl0IHJlY2VpdmVzIHRoZSBOZXRsaW5rIG1lc3NhZ2UsIGNhbGxzIHRoZSBhdHRyaWJ1dGUtcGFyc2luZyBmdW5jdGlvbiB0byBkbyB0aGUgcmVhbCB3b3JrIGFuZCwgbGlrZWx5LCBoYW5kbGVzIGFueSBlcnJvcnMgb3Igb3RoZXIgc2V0dXAgcmVxdWlyZWQgZm9yIHRoZSBOZXRsaW5rIGNvbm5lY3Rpb24uIE92ZXJhbGwsIGl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gZm9yIHJlbW90ZWx5IGNvbmZpZ3VyaW5nIERQTEwgcGluIHNldHRpbmdzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYXR0cmlidXRlIHBhcnNpbmcgdG8gc2VlIHRoZSBkYXRhIHN0cnVjdHVyZSBpdCYjMzk7cyB1c2luZyBidXQgdGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGxfbmxfcGluX3NldF9kb2l0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xNzM5PWludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTc3NS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNzc2OmludCBkcGxsX25sX3Bpbl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE3Nzcte1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25sLmM9OTI9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcGxsX25sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTUyLVx0XHQucHJlX2RvaXRcdD0gZHBsbF9waW5fcHJlX2RvaXQsXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jOjE1MzpcdFx0LmRvaXRcdFx0PSBkcGxsX25sX3Bpbl9zZXRfZG9pdCxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTU0LVx0XHQucG9zdF9kb2l0XHQ9IGRwbGxfcGluX3Bvc3RfZG9pdCxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5oPTQyPWludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5oOjQzOmludCBkcGxsX25sX3Bpbl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmgtNDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTM0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IERQTEwgUHJlLURvIEl0IFByb2Nlc3MqKgoKQWxyaWdodCwgc28gdGhlIHByaW1hcnkgZnVuY3Rpb24gaGVyZSwgYmFzZWQgb24gdGhhdCBuYW1pbmcgY29udmVudGlvbiwgaXMgdGhlIHByZS1leGVjdXRpb24gb3IgaW5pdGlhbGl6YXRpb24gc3RhZ2Ugb2YgYSBEUExMIChEYXZpc+KAk1B1dG5hbeKAk0xvZ2VtYW5u4oCTTG92ZWxhbmQpIGFsZ29yaXRobSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYSAmIzM0O3Bpbi4mIzM0OyBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGBkcGxsX3Bpbl9wcmVfZG9pdGAgaXMgZ3JhYmJpbmcgdGhlIHJlbGV2YW50ICYjMzQ7cGluJiMzNDsgZGF0YS4gSSYjMzk7bSBpbmZlcnJpbmcgaXQmIzM5O3MgcHJvYmFibHkgdGhlIHBpbiB0aGF0JiMzOTtzIHRoZSBsaXRlcmFsIHBvaW50ZXIgb3IgYml0IG9mIGRhdGEuIFRoaXMgY291bGQgYmUgYSBwb2ludGVyIHRvIGEgZGF0YSBzdHJ1Y3R1cmUsIG9yIHNvbWUgSUQgcmVwcmVzZW50aW5nIGEgbGl0ZXJhbCBvciB2YXJpYWJsZSBiZWluZyBjb25zaWRlcmVkLCBkZXBlbmRpbmcgb24gaG93IHRoZSBzb2x2ZXImIzM5O3MgYXJjaGl0ZWN0ZWQuIEkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGRpc2Nlcm4gY29udGV4dCDigJMgd2hhdCBraW5kIG9mIHBpbj8gSXMgaXQgYSBkZWNpc2lvbiB2YXJpYWJsZT8gSXMgaXQgcmVsYXRlZCB0byBjbGF1c2Ugc2VsZWN0aW9uIG9yIGNvbmZsaWN0IGFuYWx5c2lzIHdpdGhpbiB0aGUgYnJhbmNoaW5nIGhldXJpc3RpYz8gVW5kZXJzdGFuZGluZyB0aGUgcGluJiMzOTtzIG5hdHVyZSBpcyBwYXJhbW91bnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcmVwcmVzZW50YXRpb24gdGhlIGNvZGUgaXMgdXNpbmcuIElzIGl0IGp1c3QgYW4gaW50ZWdlciBJRCwgb3IgYSBtb3JlIGNvbXBsZXggb2JqZWN0PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX3Bpbl9wcmVfZG9pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MjAyOD1kcGxsX3VubG9ja19kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yMDMzLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjIwMzQ6aW50IGRwbGxfcGluX3ByZV9kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTIwMzUtXHRcdCAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYz05Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRwbGxfbmxfb3BzW10gPSB7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYy0xMzUtXHRcdC5jbWRcdFx0PSBEUExMX0NNRF9QSU5fR0VULFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYzoxMzY6XHRcdC5wcmVfZG9pdFx0PSBkcGxsX3Bpbl9wcmVfZG9pdCxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTM3LVx0XHQuZG9pdFx0XHQ9IGRwbGxfbmxfcGluX2dldF9kb2l0LFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTUxLVx0XHQuY21kXHRcdD0gRFBMTF9DTURfUElOX1NFVCxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmM6MTUyOlx0XHQucHJlX2RvaXRcdD0gZHBsbF9waW5fcHJlX2RvaXQsXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTE1My1cdFx0LmRvaXRcdFx0PSBkcGxsX25sX3Bpbl9zZXRfZG9pdCxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5oPTIyPWludCBkcGxsX3ByZV9kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuaC0yMy1cdFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmg6MjQ6aW50IGRwbGxfcGluX3ByZV9kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuaC0yNS1cdFx0ICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzg3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gYGRwbGxfcGluX3ByZV9kb2l0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBkZWVwIGRpdmUgaW50byBgZHBsbF9waW5fcHJlX2RvaXRgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgRFBMTCBpbXBsZW1lbnRhdGlvbiwgZXNwZWNpYWxseSBob3cgaXQgaGFuZGxlcyBwaW5uaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBtZW50YWxseSB0cmFjZSB0aGUgZGF0YSBmbG93LiBXaGF0IGFyZSB0aGUgaW5wdXRzLCB3aGF0IG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCwgYW5kIHdoYXQgYXJlIHRoZSBvdXRwdXRzPyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgY29uc3RyYWludCBkYXRhYmFzZSwgc3BlY2lmaWNhbGx5IGhvdyBwaW5uaW5nIGFmZmVjdHMgdmFyaWFibGUgYXNzaWdubWVudHMgYW5kIHByb3BhZ2F0aW9uLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gZWFybHkgY29uZmxpY3QgZGV0ZWN0aW9uIG9yIGlmIGl0JiMzOTtzIG1vcmUgYWJvdXQgc3RyYXRlZ2ljIHZhcmlhYmxlIHNlbGVjdGlvbi4gVGhlIGRldGFpbHMgbWF0dGVyOyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaWYgdGhpcyBpcyBhIGNyaXRpY2FsIHNlY3Rpb24gZm9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGFpbWluZyBmb3IgYSBob2xpc3RpYyBjb21wcmVoZW5zaW9uIG9mIGBkcGxsX3Bpbl9wcmVfZG9pdGAmIzM5O3MgZnVuY3Rpb24gYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIERQTEwgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMzQ6XHRpbnQgZHBsbF9waW5fcHJlX2RvaXQoY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsIHN0cnVjdCBza19idWZmICpza2IsXG4yMDM1Olx0XHRcdCAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4yMDM2Olx0e1xuMjAzNzpcdFx0aW50IHJldDtcbjIwMzg6XHRcbjIwMzk6XHRcdG11dGV4X2xvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbjIwNDA6XHRcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERQTExfQV9QSU5fSUQpKSB7XG4yMDQxOlx0XHRcdHJldCA9IC1FSU5WQUw7XG4yMDQyOlx0XHRcdGdvdG8gdW5sb2NrX2RldjtcbjIwNDM6XHRcdH1cbjIwNDQ6XHRcdGluZm8tXHUwMDNldXNlcl9wdHJbMF0gPSB4YV9sb2FkKFx1MDAyNmRwbGxfcGluX3hhLFxuMjA0NTpcdFx0XHRcdFx0ICAgIG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbRFBMTF9BX1BJTl9JRF0pKTtcbjIwNDY6XHRcdGlmICghaW5mby1cdTAwM2V1c2VyX3B0clswXSB8fFxuMjA0NzpcdFx0ICAgICFkcGxsX3Bpbl9hdmFpbGFibGUoaW5mby1cdTAwM2V1c2VyX3B0clswXSkpIHtcbjIwNDg6XHRcdFx0TkxfU0VUX0VSUl9NU0coaW5mby1cdTAwM2VleHRhY2ssIFwmIzM0O3BpbiBub3QgZm91bmRcJiMzNDspO1xuMjA0OTpcdFx0XHRyZXQgPSAtRU5PREVWO1xuMjA1MDpcdFx0XHRnb3RvIHVubG9ja19kZXY7XG4yMDUxOlx0XHR9XG4yMDUyOlx0XG4yMDUzOlx0XHRyZXR1cm4gMDtcbjIwNTQ6XHRcbjIwNTU6XHR1bmxvY2tfZGV2OlxuMjA1NjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRwbGxfbG9jayk7XG4yMDU3Olx0XHRyZXR1cm4gcmV0O1xuMjA1ODpcdH1cbjIwNTk6XHRcbjIwNjA6XHR2b2lkIGRwbGxfcGluX3Bvc3RfZG9pdChjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgKm9wcywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjIwNjE6XHRcdFx0XHRzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMjA2MjpcdHtcbjIwNjM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkcGxsX2xvY2spO1xuMjA2NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxNzQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyB0aGUgRFBMTCBQaW4gQWNxdWlzaXRpb24gUHJvY2VzcyoqCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgYSBEUExMIHBpbiBpcyBiZWluZyBoYW5kbGVkLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIHJlZmVyZW5jaW5nIGBkcGxsX3Bpbl94YWAsIHdoaWNoIGltcGxpZXMgc29tZSBzb3J0IG9mIHN0b3JhZ2Ugb3IgdHJhY2tpbmcgbWVjaGFuaXNtIGZvciB0aGVzZSBwaW5zLiBNeSBmaXJzdCBxdWVzdGlvbiBpcywgJiMzNDtIb3cgYXJlIHRoZXNlIHBpbnMgZXZlbiAqZ2V0dGluZyogaW50byBgZHBsbF9waW5feGFgPyYjMzQ7IFRoYXQmIzM5O3MgdGhlIGNydXggb2YgdW5kZXJzdGFuZGluZyB0aGUgcGluIG1hbmFnZW1lbnQuCgpNeSBzdXNwaWNpb24gaXMgdGhhdCB0aGVyZSYjMzk7cyBhbiBhbGxvY2F0aW9uIHByb2Nlc3MgaGFwcGVuaW5nLiBBbmQgc3VyZSBlbm91Z2gsIGBkcGxsX3Bpbl9hbGxvY2AgaXMgcmVmZXJlbmNlZC4gTm93LCB0aGUgY29udGV4dCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGRyaXZlcnMgYXJlIHRoZSBvbmVzIGludGVyYWN0aW5nIHdpdGggdGhpcyBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBTbywgSSBuZWVkIHRvIGxvb2sgaW50byBob3cgdGhlc2UgZHJpdmVycywgYXJlIGludGVyYWN0aW5nIHdpdGggYGRwbGxfcGluX2FsbG9jYC4gVGhpcyBpcyB0aGUgY29yZSB0byB1bmRlcnN0YW5kaW5nIGhvdyBhbmQgd2hlbiBhIHBpbiBpcyBicm91Z2h0IGluLCBhbmQgdWx0aW1hdGVseSwgdGhlIGFsbG9jYXRpb24gYW5kIHVzYWdlIG1vZGVsLiBOb3csIEkgbmVlZCB0byBnZXQgaW50byB0aGUgKndoeSogb2YgdGhpcyB3aG9sZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX3Bpbl9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9NjM2PXN0YXRpYyBzdHJ1Y3QgZHBsbF9waW4gKlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjYzNzpkcGxsX3Bpbl9hbGxvYyh1NjQgY2xvY2tfaWQsIHUzMiBwaW5faWR4LCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjM4LVx0ICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpwcm9wKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz03NDg9ZHBsbF9waW5fZ2V0KHU2NCBjbG9ja19pZCwgdTMyIHBpbl9pZHgsIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzY0LVx0aWYgKCFyZXQpIHtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo3NjU6XHRcdHJldCA9IGRwbGxfcGluX2FsbG9jKGNsb2NrX2lkLCBwaW5faWR4LCBtb2R1bGUsIHByb3ApO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc2Ni1cdFx0aWYgKCFJU19FUlIocmV0KSlcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTYxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyB6bDMwNzN4X2RwbGxfZGV2aWNlX29wcyA9IHtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTYyNC0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxNjI1OiAqIHpsMzA3M3hfZHBsbF9waW5fYWxsb2MgLSBhbGxvY2F0ZSBEUExMIHBpblxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE2MjYtICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTYzNT1zdGF0aWMgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE2MzY6emwzMDczeF9kcGxsX3Bpbl9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xNjM3LVx0XHQgICAgICAgdTggaWQpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE2NTUtICpcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxNjU2OiAqIERlYWxsb2NhdGVzIERQTEwgcGluIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfcGluX2FsbG9jLlxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE2NTctICovXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE4Njc9emwzMDczeF9kcGxsX25jb19waW5fcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xODg4LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE4ODk6XHRwaW4gPSB6bDMwNzN4X2RwbGxfcGluX2FsbG9jKHpsZHBsbCwgRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVULFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE4OTAtXHRcdFx0XHQgICAgIFpMMzA3M1hfTkNPX1BJTl9JRCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE5MzA9emwzMDczeF9kcGxsX3BpbnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTUxLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE5NTI6XHRcdHBpbiA9IHpsMzA3M3hfZHBsbF9waW5fYWxsb2MoemxkcGxsLCBkaXIsIGlkKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTUzLVx0XHRpZiAoSVNfRVJSKHBpbikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0OTAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOgoKKipEZWJ1Z2dpbmcgUGluIEFsbG9jYXRpb24gaW4gdGhlIERQTEwgU3lzdGVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGBkcGxsX3Bpbl9nZXRgLiBTbywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yICphbGxvY2F0aW5nKiBhIHBpbiB3aXRoaW4gdGhlIERQTEwgKERpZ2l0YWwgUGhhc2UtTG9ja2VkIExvb3ApIHN5c3RlbS4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgdGhlIHJlYWwgcXVlc3Rpb24sIHRoZSBvbmUgdGhhdCYjMzk7cyBpbW1lZGlhdGVseSBqdW1waW5nIG91dCBhdCBtZSwgaXM6ICoqV2hvIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbj8qKiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHBhdGggdG8gYGRwbGxfcGluX2dldGAgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byBncmFzcGluZyB0aGUgYnJvYWRlciBwaWN0dXJlIGFuZCBwb3RlbnRpYWxseSBwaW5wb2ludGluZyBhbnkgaXNzdWVzLiBJcyBpdCB0aGUgZHJpdmVyIGl0c2VsZiBpbml0aWF0aW5nIHRoZSBhbGxvY2F0aW9uIG9uIHN0YXJ0dXA/IElzIGl0IHRyaWdnZXJlZCBieSBhIHVzZXItc3BhY2UgcmVxdWVzdCB0aHJvdWdoIHNvbWUgaW9jdGw/IElzIGl0IHBhcnQgb2YgYSByZXNvdXJjZSBtYW5hZ2VtZW50IGZyYW1ld29yaz8gS25vd2luZyB0aGUgY2FsbGVyIGdpdmVzIG1lIHRoZSBjb250ZXh0LCB0aGUgaW50ZW50LiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBkcGxsX3Bpbl9nZXRgIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYWxsb2NhdGlvbiByZXF1ZXN0IGlzIG9yaWdpbmF0aW5nLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHByb2JsZW0gaXMsIGJlY2F1c2UgYWxsb2NhdGluZyB0aGUgcGluIGl0c2VsZiBpcyB0cml2aWFsIGFuZCBJIHdvdWxkIG5vdCBiZSBjb25jZXJuZWQgaWYgdGhhdCB3YXMgdGhlIG9ubHkgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGxfcGluX2dldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q9NTcyPW9wcyBhbmQgcHJpdi5cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC01NzMtXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NTc0OlRoZSBwaW5zIGFyZSBhbGxvY2F0ZWQgc2VwYXJhdGVseSB3aXRoIGRwbGxfcGluX2dldCgpLCBpdCB3b3Jrc1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTU3NS1zaW1pbGFybHkgdG8gZHBsbF9kZXZpY2VfZ2V0KCkuIEZ1bmN0aW9uIGZpcnN0IGNyZWF0ZXMgb2JqZWN0IGFuZCB0aGVuXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTYzND1UaGUgcmVnaXN0cmF0aW9uIHBhcnQgaXMgdGhlbiBsb29rcyBsaWtlIHRoaXMgcGFydDpcbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QtNjUwLSAgICAgICAgZm9yIChpID0gMDsgaSBcdTAwM2MgT0NQX1NNQV9OVU07IGkmIzQzOyYjNDM7KSB7XG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NjUxOiAgICAgICAgICAgICAgICBicC1cdTAwM2VzbWFbaV0uZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xraWQsIGksIFRISVNfTU9EVUxFLCBcdTAwMjZicC1cdTAwM2VzbWFbaV0uZHBsbF9wcm9wKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC02NTItICAgICAgICAgICAgICAgIGlmIChJU19FUlIoYnAtXHUwMDNlc21hW2ldLmRwbGxfcGluKSkge1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz03Mjk9RVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9kcGxsX25vdGlmaWVyKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzMxLS8qKlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjczMjogKiBkcGxsX3Bpbl9nZXQgLSBmaW5kIGV4aXN0aW5nIG9yIGNyZWF0ZSBuZXcgZHBsbCBwaW5cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy03MzMtICogQGNsb2NrX2lkOiBjbG9ja19pZCBvZiBjcmVhdG9yXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTc0Nz1zdHJ1Y3QgZHBsbF9waW4gKlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjc0ODpkcGxsX3Bpbl9nZXQodTY0IGNsb2NrX2lkLCB1MzIgcGluX2lkeCwgc3RydWN0IG1vZHVsZSAqbW9kdWxlLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc0OS1cdCAgICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX3Byb3BlcnRpZXMgKnByb3AsIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzcyLX1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo3NzM6RVhQT1JUX1NZTUJPTF9HUEwoZHBsbF9waW5fZ2V0KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy03NzQtXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYz01OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHBsbF9waW5faWRfZ2V0X25sX3BvbGljeVtEUExMX0FfUElOX1RZUEUgJiM0MzsgMV0gPSB7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYy02Ny0vKiBEUExMX0NNRF9QSU5fR0VUIC0gZG8gKi9cbmRyaXZlcnMvZHBsbC9kcGxsX25sLmM6Njg6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRwbGxfcGluX2dldF9kb19ubF9wb2xpY3lbRFBMTF9BX1BJTl9JRCAmIzQzOyAxXSA9IHtcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtNjktXHRbRFBMTF9BX1BJTl9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTcyLS8qIERQTExfQ01EX1BJTl9HRVQgLSBkdW1wICovXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jOjczOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkcGxsX3Bpbl9nZXRfZHVtcF9ubF9wb2xpY3lbRFBMTF9BX1BJTl9JRCAmIzQzOyAxXSA9IHtcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtNzQtXHRbRFBMTF9BX1BJTl9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jPTkyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHBsbF9ubF9vcHNbXSA9IHtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTEzOC1cdFx0LnBvc3RfZG9pdFx0PSBkcGxsX3Bpbl9wb3N0X2RvaXQsXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jOjEzOTpcdFx0LnBvbGljeVx0XHQ9IGRwbGxfcGluX2dldF9kb19ubF9wb2xpY3ksXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTE0MC1cdFx0Lm1heGF0dHJcdD0gRFBMTF9BX1BJTl9JRCxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTE0NS1cdFx0LmR1bXBpdFx0XHQ9IGRwbGxfbmxfcGluX2dldF9kdW1waXQsXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jOjE0NjpcdFx0LnBvbGljeVx0XHQ9IGRwbGxfcGluX2dldF9kdW1wX25sX3BvbGljeSxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTQ3LVx0XHQubWF4YXR0clx0PSBEUExMX0FfUElOX0lELFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xMTk9c3RhdGljIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxMjA6emwzMDczeF9kcGxsX3Bpbl9nZXRfYnlfcmVmKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgdTggcmVmX2lkKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEyMS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTExNjE9emwzMDczeF9kcGxsX25jb19waW5fc3RhdGVfb25fZHBsbF9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTE5Mi1cdFx0XHRyZWYgPSB6bDMwNzN4X2NoYW5fcmVmX2dldChcdTAwMjZjaGFuKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxMTkzOlx0XHRcdHJlZl9waW4gPSB6bDMwNzN4X2RwbGxfcGluX2dldF9ieV9yZWYoemxkcGxsLCByZWYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTExOTQtXHRcdH1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTQyMT16bDMwNzN4X2RwbGxfbW9kZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCB2b2lkICpkcGxsX3ByaXYsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE0NjItXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTQ2MzpcdFx0XHRwaW4gPSB6bDMwNzN4X2RwbGxfcGluX2dldF9ieV9yZWYoemxkcGxsLCByZWYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE0NjQtXHRcdFx0aWYgKHBpbikge1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xNjc2PXpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiwgdTMyIGluZGV4KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xNzA5LVx0LyogQ3JlYXRlIG9yIGdldCBleGlzdGluZyBEUExMIHBpbiAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE3MTA6XHRwaW4tXHUwMDNlZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoemxkcGxsLVx1MDAzZWRldi1cdTAwM2VjbG9ja19pZCwgaW5kZXgsIFRISVNfTU9EVUxFLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE3MTEtXHRcdFx0XHQgICAgIFx1MDAyNnByb3BzLVx1MDAzZWRwbGxfcHJvcHMsIFx1MDAyNnBpbi1cdTAwM2V0cmFja2VyKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTg2Nz16bDMwNzN4X2RwbGxfbmNvX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE4OTMtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTg5NDpcdHBpbi1cdTAwM2VkcGxsX3BpbiA9IGRwbGxfcGluX2dldCh6bGRwbGwtXHUwMDNlZGV2LVx1MDAzZWNsb2NrX2lkLCBaTDMwNzNYX05DT19QSU5fSUQsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTg5NS1cdFx0XHRcdCAgICAgVEhJU19NT0RVTEUsIFx1MDAyNnpsMzA3M3hfZHBsbF9uY29fcGluX3Byb3BzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTI0NzM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MjQ3NDppY2VfZHBsbF9waW5fZ2V0X3BhcmVudF9udW0oc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjQ3NS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGRwbGxfcGluICpwYXJlbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MjQ4Nj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzoyNDg3OmljZV9kcGxsX3Bpbl9nZXRfcGFyZW50X2lkeChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNDg4LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBhcmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTI0ODkte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MjQ5MDpcdGludCBudW0gPSBpY2VfZHBsbF9waW5fZ2V0X3BhcmVudF9udW0ocGluLCBwYXJlbnQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjQ5MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz0yNTEyPWljZV9kcGxsX3JjbGtfc3RhdGVfb25fcGluX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjUzMC1cdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzoyNTMxOlx0aHdfaWR4ID0gaWNlX2RwbGxfcGluX2dldF9wYXJlbnRfaWR4KHAsIHBhcmVudF9waW4pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjUzMi1cdGlmIChod19pZHggXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjU0Mi1cdFx0XHRcdCAgIHAtXHUwMDNlaWR4LCBzdGF0ZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjI1NDM6XHRcdFx0XHQgICBpY2VfZHBsbF9waW5fZ2V0X3BhcmVudF9udW0ocCwgcGFyZW50X3BpbikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjU0NC1cdFx0Z290byB1bmxvY2s7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjU1Ny1cdFx0XHRcdCAgIHN0YXRlLCBwLVx1MDAzZWlkeCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjI1NTg6XHRcdFx0XHQgICBpY2VfZHBsbF9waW5fZ2V0X3BhcmVudF9udW0ocCwgcGFyZW50X3BpbikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjU1OS11bmxvY2s6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MjU4Mj1pY2VfZHBsbF9yY2xrX3N0YXRlX29uX3Bpbl9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTI1OTYtXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MjU5NzpcdGh3X2lkeCA9IGljZV9kcGxsX3Bpbl9nZXRfcGFyZW50X2lkeChwLCBwYXJlbnRfcGluKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTI1OTgtXHRpZiAoaHdfaWR4IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTMzMDQ9aWNlX2RwbGxfZ2V0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbnMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzMxMy1cdFx0XHRwaW5faW5kZXggJiM0Mzs9IGk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzozMzE0Olx0XHRwaW5zW2ldLnBpbiA9IGRwbGxfcGluX2dldChjbG9ja19pZCwgcGluX2luZGV4LCBUSElTX01PRFVMRSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTMzMTUtXHRcdFx0XHRcdCAgIFx1MDAyNnBpbnNbaV0ucHJvcCwgXHUwMDI2cGluc1tpXS50cmFja2VyKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jPTQyMD1zdGF0aWMgaW50IG1seDVfZHBsbF9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jLTQ1Ny1cdC8qIE11bHRpcGxlIG1kZXYgaW5zdGFuY2VzIG1pZ2h0IHNoYXJlIG9uZSBEUExMIHBpbi4gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmM6NDU4Olx0bWRwbGwtXHUwMDNlZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xvY2tfaWQsIG1seDVfZ2V0X2Rldl9pbmRleChtZGV2KSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmMtNDU5LVx0XHRcdFx0ICAgICAgIFRISVNfTU9EVUxFLCBcdTAwMjZtbHg1X2RwbGxfcGluX3Byb3BlcnRpZXMsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTUwNTk9cHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTI5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgT0NQX1NNQV9OVU07IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTEzMDpcdFx0YnAtXHUwMDNlc21hW2ldLmRwbGxfcGluID0gZHBsbF9waW5fZ2V0KGNsa2lkLCBpLCBUSElTX01PRFVMRSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTMxLVx0XHRcdFx0XHRcdCAgIFx1MDAyNmJwLVx1MDAzZXNtYVtpXS5kcGxsX3Byb3AsXG4tLVxuaW5jbHVkZS9saW51eC9kcGxsLmg9MjkwPXN0cnVjdCBkcGxsX3BpbiAqXG5pbmNsdWRlL2xpbnV4L2RwbGwuaDoyOTE6ZHBsbF9waW5fZ2V0KHU2NCBjbG9ja19pZCwgdTMyIGRldl9kcml2ZXJfaWQsIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSxcbmluY2x1ZGUvbGludXgvZHBsbC5oLTI5Mi1cdCAgICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX3Byb3BlcnRpZXMgKnByb3AsIGRwbGxfdHJhY2tlciAqdHJhY2tlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDQ2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERQTEwgUGluIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gYGRwbGxfcGluX2dldGAgaXMgdGhlIGtleS4gSXQmIzM5O3MgY2FsbGVkIGJ5IHRoZSBgemwzMDczeGAsIGBpY2VgLCBgbWx4NWAsIGFuZCBgcHRwX29jcGAgZHJpdmVycy4gIElmIG5vbmUgb2YgdGhlc2UgYXJlIGxvYWRlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB0aGVuIHRoZXJlIGFyZSBubyBEUExMIHBpbnMgcmVnaXN0ZXJlZCwgd2hpY2ggbGVhZHMgdG8gYGRwbGxfcGluX3ByZV9kb2l0YCBmYWlsaW5nIHdpdGggYC1FTk9ERVZgIGJlY2F1c2UgYHhhX2xvYWRgIHJldHVybnMgTlVMTC4gVGhhdCBtYWtlcyBzZW5zZS4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXA6IGNhbiBJIGNyZWF0ZSBhIERQTEwgcGluIGZyb20gdXNlcnNwYWNlIHNvbWVob3c/IE5vLCB0aGF0JiMzOTtzIGJsb2NrZWQuIGBkcGxsX3Bpbl9hbGxvY2AgaXMgb25seSBldmVyIHRyaWdnZXJlZCB0aHJvdWdoIGBkcGxsX3Bpbl9nZXRgLCBhbmQgdGhhdCBvbmx5IGhhcHBlbnMgd2l0aGluIHRob3NlIGRyaXZlcnMuIFRoYXQgYXZlbnVlIGlzIGNsb3NlZC4KCkFscmlnaHQsIHdoYXQgYWJvdXQgbG9hZGluZyBgemwzMDczeGAgaW4gUUVNVT8gSXQmIzM5O3MgYW4gSTJDL1NQSSBkcml2ZXIsIHdoaWNoIG9wZW5zIHBvc3NpYmlsaXRpZXMuIElmIEkgdXNlIGBpMmMtc3R1YmAgb3IgYGkyYy1kdW1teWAsIGNvdWxkIEkgaW5zdGFudGlhdGUgYHpsMzA3M3hgPyBZZXMhIEkgY2FuIHdyaXRlIHRvIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlYCB3aXRoIGB6bDMwNzMxIDB4MjBgLiBUaGUgSTJDIGNvcmUgd2lsbCB0aGVuIGNyZWF0ZSBhbiBJMkMgY2xpZW50IGFuZCBjYWxsIGB6bDMwNzN4X2kyY19wcm9iZWAuIFRoYXQsIGluIHR1cm4sIHNob3VsZCBjYWxsIGB6bDMwNzN4X2Rldl9wcm9iZWAuCgpMZXQmIzM5O3Mgc2VlOiBgemwzMDczeF9kZXZfcHJvYmVgIHdpbGwgYXR0ZW1wdCB0byByZWFkIGEgY2hpcCBJRDogYHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCAmYW1wO2lkKTtgLiAgYHpsMzA3M3hfcmVhZF91MTZgIHBlcmZvcm1zIGFuIEkyQyByZWFkLgoKT2theSwgbm93IGl0IGNsaWNrcy4gSWYgSSB1c2UgYGkyYy1zdHViYCwgaXQgKmNhbiogc2ltdWxhdGUgSTJDIHJlYWRzLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIHNpbXVsYXRlIHNwZWNpZmljIGNoaXBzIG9yIGFjdCBhcyBhIG1lbW9yeSBhcnJheS4gV2FpdCEgIEl0IGFjdHMgYXMgYSBtZW1vcnkgYXJyYXkhICBUaGlzIGlzIHBlcmZlY3QhIEkgY2FuIHdyaXRlIHZhbHVlcyB0byBpdHMgJiMzNDtyZWdpc3RlcnMmIzM0OyB2aWEgc3lzZnMgb3IgSTJDIHdyaXRlcyAqYmVmb3JlKiBwcm9iaW5nIHRoZSBkcml2ZXIuIEJyaWxsaWFudCEKCkhtbSwgYSBxdWljayBjaGVja+KApiBpcyBpdCAxNi1iaXQgcmVnaXN0ZXJzPyBXYWl0Li4uYHpsMzA3M3hgIHVzZXMgMzItYml0IHJlZ2lzdGVycz8gTGV0JiMzOTtzIGNoZWNrIGB6bDMwNzN4X3JlYWRfdTE2YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9yZWFkX3UxNiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9MTc5PWludCB6bDMwNzN4X3dyaXRlX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU4IHZhbClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTg0LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjE4NTogKiB6bDMwNzN4X3JlYWRfdTE2IC0gcmVhZCB2YWx1ZSBmcm9tIDE2Yml0IHJlZ2lzdGVyXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTg2LSAqIEB6bGRldjogemwzMDczeCBkZXZpY2UgcG9pbnRlclxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xOTMtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTk0OmludCB6bDMwNzN4X3JlYWRfdTE2KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHUxNiAqdmFsKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTE5NS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jPTk4MT1pbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTg4LVx0LyogUmVhZCBjaGlwIElEICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTg5Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFx1MDAyNmlkKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTAtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDUtXHQvKiBSZWFkIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjdXN0b20gY29uZmlnIHZlcnNpb24gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDA2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFx1MDAyNnJldmlzaW9uKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDA3LVx0aWYgKHJjKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDgtXHRcdHJldHVybiByYztcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDA5Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfRldfVkVSLCBcdTAwMjZmd192ZXIpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMTAtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oPTEzOT1pbnQgemwzMDczeF9yZWFkX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU4ICp2YWwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oOjE0MDppbnQgemwzMDczeF9yZWFkX3UxNihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MTYgKnZhbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgtMTQxLWludCB6bDMwNzN4X3JlYWRfdTMyKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHUzMiAqdmFsKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM9MjU9emwzMDczeF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy0zMy1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYzozNDpcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcdTAwMjZpZCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtMzUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jLTQ0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jOjQ1Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFx1MDAyNnJldmlzaW9uKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy00Ni1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtNTUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM6NTY6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19GV19WRVIsIFx1MDAyNmZ3X3Zlcik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtNTctXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTEyNTU9emwzMDczeF9kcGxsX3RlbXBfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBsbF9wcml2LFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xMjY0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEyNjU6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19ESUVfVEVNUF9TVEFUVVMsIFx1MDAyNnZhbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTI2Ni1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYz03OT1pbnQgemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE1LVx0LyogUmVhZCBmcmVxdWVuY3kgcmVsYXRlZCByZWdpc3RlcnMgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jOjExNjpcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFRl9GUkVRX0JBU0UsIFx1MDAyNnJlZi1cdTAwM2VmcmVxX2Jhc2UpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE3LVx0aWYgKHJjKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE4LVx0XHRyZXR1cm4gcmM7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYzoxMTk6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRUZfRlJFUV9NVUxULCBcdTAwMjZyZWYtXHUwMDNlZnJlcV9tdWx0KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTEyMC1cdGlmIChyYylcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTEyMS1cdFx0cmV0dXJuIHJjO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmM6MTIyOlx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVGX1JBVElPX00sIFx1MDAyNnJlZi1cdTAwM2VmcmVxX3JhdGlvX20pO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTIzLVx0aWYgKHJjKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTI0LVx0XHRyZXR1cm4gcmM7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYzoxMjU6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRUZfUkFUSU9fTiwgXHUwMDI2cmVmLVx1MDAzZWZyZXFfcmF0aW9fbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMjYtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYz0yMz1pbnQgemwzMDczeF9zeW50aF9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTQ1LVx0ICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jOjQ2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfU1lOVEhfRlJFUV9CQVNFLCBcdTAwMjZzeW50aC1cdTAwM2VmcmVxX2Jhc2UpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYy00Ny1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTUzLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYzo1NDpcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1NZTlRIX0ZSRVFfTSwgXHUwMDI2c3ludGgtXHUwMDNlZnJlcV9tKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNTUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYy01Ny1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmM6NTg6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19TWU5USF9GUkVRX04sIFx1MDAyNnN5bnRoLVx1MDAzZWZyZXFfbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTU5LVx0aWYgKHJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjg2OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEZWNvZGluZyB0aGUgYHpsMzA3M3hfcmVhZF91MTZgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB6bDMwNzN4X3JlYWRfdTE2YCBmdW5jdGlvbi4gSXQgYXBwZWFycyB0byBiZSByZWFkaW5nIGEgMTYtYml0IHZhbHVlIGZyb20gdGhlIGB6bGRldi0mZ3Q7cmVnbWFwYC4gUmlnaHQsIHRoZSBgcmVnbWFwYCBpcyB0aGUga2V5IGFic3RyYWN0aW9uIGhlcmUsIGxpa2VseSBwcm92aWRpbmcgYSBsYXllciBvZiBpbmRpcmVjdGlvbiBmb3IgcmVnaXN0ZXIgYWNjZXNzLCBwcm9iYWJseSB2aWEgSTJDLCBTUEkgb3Igd2hhdGV2ZXIuIElmIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggYSBkdW1teSBJMkMgZGV2aWNlLCB0aGUgYHJlZ21hcGAgd2lsbCwgYXMgZXhwZWN0ZWQsIGp1c3QgcmV0dXJuIGEgemVybyBvciB3aGF0ZXZlciBkYXRhIHdlIHByZXZpb3VzbHkgd3JvdGUuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGludGVycHJldGluZyByZWFkIG9wZXJhdGlvbnMuIEFoLCBidXQgd2FpdCBhIHNlY29uZCwgSSByZWNhbGwgdGhhdCBgemwzMDczeF9jaGlwX2lkc2AgaXMgaG93IHdlIGlkZW50aWZ5IHRoZSBjaGlwcyB3ZSBleHBlY3QgdG8gZW5jb3VudGVyLiBUaGUgZGV2aWNlIGlkZW50aWZpY2F0aW9uIGlzIGRvbmUgd2l0aCBzcGVjaWZpYyBJRHMuIFJpZ2h0LiBUaGF0IGNsYXJpZmllcyB0aGUgbmV4dCBzdGVwcyBpbiBkZWJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9jaGlwX2lkcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMjUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MjY6c3RhdGljIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB6bDMwNzN4X2NoaXBfaWRzW10gPSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMjctXHRaTF9DSElQX0lORk8oMHgwRTMwLCAyLCBaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzIpLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05ODE9aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk5My1cdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5OTQ6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk5NTpcdFx0aWYgKHpsMzA3M3hfY2hpcF9pZHNbaV0uaWQgPT0gaWQpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk2LVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTk5Olx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDAwLVx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIC1FTk9ERVYsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDItXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTAwMzpcdHpsZGV2LVx1MDAzZWluZm8gPSBcdTAwMjZ6bDMwNzN4X2NoaXBfaWRzW2ldO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzE3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgUHJvYmUgRmFpbHVyZXMgaW4gU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBkZXZpY2UgSURzLCBsaWtlIGAweDBFMzBgLCBhbmQgdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBzaW11bGF0ZSB0aGVzZSBkZXZpY2VzIHdpdGhpbiBTeXprYWxsZXIuIElmIEkgdXNlIGBpMmMtc3R1YmAsIEkgY2FuIGxvYWQgaXQgd2l0aCBzb21ldGhpbmcgbGlrZSBgbW9kcHJvYmUgaTJjLXN0dWIgY2hpcF9hZGRyPTB4MjBgLiBUaGVuLCBJJiMzOTtkIHdyaXRlIHRoZSBhcHByb3ByaWF0ZSBkYXRhIHRvIHRoZSByZWdpc3RlcnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWdpc3RlciBvZmZzZXRzIHRob3VnaCwgbGlrZSB3cml0aW5nIGAweDMwYCB0byBgWkxfUkVHX0lEYCBhbmQgYDB4MEVgIHRvIGBaTF9SRUdfSUQmIzQzOzFgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCBgaTJjLXN0dWJgIGRvZXMgU01CdXMgYnl0ZS93b3JkIGRhdGEsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgYHJlZ21hcGAgaW50ZXJhY3RzLiBJdCBzZWVtcyBsaWtlIGByZWdtYXBgIGRvZXMgU01CdXMgb3IgcmF3IEkyQyB0cmFuc2ZlcnMgb3ZlciBJMkMuCgpUaGUgcHJvYmxlbSBpcywgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhbmRsZSB0aGlzIGtpbmQgb2Ygc2V0dXA7IGl0IGp1c3QgYmxhc3RzIG91dCByYW5kb20gc3lzY2FsbHMuIEl0IGNhbiYjMzk7dCBjb25maWd1cmUgYGkyYy1zdHViYCB0byBwcmV0ZW5kIGl0JiMzOTtzIGEgc3BlY2lmaWMgY2hpcCB3aXRoIGEgcGFydGljdWxhciBJRC4gU28sIGluIHRoZSBjYXNlIG9mIGB6bDMwNzN4YCwgaXQmIzM5O3MganVzdCBuZXZlciBnb2luZyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgaW4gYSBTeXprYWxsZXIgZW52aXJvbm1lbnQuCgpMZXQmIzM5O3MgdGhpbmsgYWJvdXQgYWx0ZXJuYXRpdmVzLiBgaWNlYCBpcyBvdXQ7IGl0JiMzOTtzIGEgUENJIGRyaXZlciBmb3IgSW50ZWwgRTgwMCwgYW5kIFN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGdvb2QgUUVNVSBlbXVsYXRpb24gZm9yIHRoYXQgaGFyZHdhcmUuIFNhbWUgd2l0aCBgbWx4NWAgKE1lbGxhbm94IENvbm5lY3RYLTUpIGFuZCBgcHRwX29jcGAgKE9wZW4gQ29tcHV0ZSBQcm9qZWN0IFRpbWUgQ2FyZCkuIE5vIFFFTVUgZW11bGF0aW9uIGZvciBhbnkgb2YgdGhvc2UgaW4gU3l6a2FsbGVyIGVpdGhlci4KCldhaXQgYSBtaW51dGUsIG1heWJlIHRoZXJlJiMzOTtzIGEgRFBMTCAoRGlnaXRhbCBQaGFzZS1Mb2NrZWQgTG9vcCkgaW4gYG5ldGRldnNpbWA/IExldCBtZSBjaGVjayB0byBzZWUgaWYgdGhhdCYjMzk7cyBhIHBvc3NpYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX2RldmljZV9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q9NTY4PURldmljZSBzaG91bGQgaW1wbGVtZW50IHNldCBvZiBvcGVyYXRpb25zIGFuZCByZWdpc3RlciBkZXZpY2UgdmlhXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NTY5OmRwbGxfZGV2aWNlX3JlZ2lzdGVyKCkgYXQgd2hpY2ggcG9pbnQgaXQgYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QtNTcwLXVzZXJzLiBNdWx0aXBsZSBkcml2ZXIgaW5zdGFuY2VzIGNhbiBvYnRhaW4gcmVmZXJlbmNlIHRvIGl0IHdpdGhcbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q9NjM0PVRoZSByZWdpc3RyYXRpb24gcGFydCBpcyB0aGVuIGxvb2tzIGxpa2UgdGhpcyBwYXJ0OlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC02NDUtXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NjQ2OiAgICAgICAgZXJyID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoYnAtXHUwMDNlZHBsbCwgRFBMTF9UWVBFX1BQUywgXHUwMDI2ZHBsbF9vcHMsIGJwKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC02NDctICAgICAgICBpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz00NDg9ZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpbmQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjAtLyoqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDYxOiAqIGRwbGxfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgdGhlIGRwbGwgZGV2aWNlIGluIHRoZSBzdWJzeXN0ZW1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjItICogQGRwbGw6IHBvaW50ZXIgdG8gYSBkcGxsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3My0gKi9cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NzQ6aW50IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZW51bSBkcGxsX3R5cGUgdHlwZSxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NzUtXHRcdFx0IGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKm9wcywgdm9pZCAqcHJpdilcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTE3LX1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MTg6RVhQT1JUX1NZTUJPTF9HUEwoZHBsbF9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUxOS1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTkzMD16bDMwNzN4X2RwbGxfcGluc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE5ODAtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTk4MTogKiB6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTgyLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xOTg4PXN0YXRpYyBpbnRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxOTg5OnpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE5OTAte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDA3LVx0emxkcGxsLVx1MDAzZXR5cGUgPSB6bDMwNzN4X3Byb3BfZHBsbF90eXBlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyMDA4Olx0cmMgPSBkcGxsX2RldmljZV9yZWdpc3Rlcih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIHpsZHBsbC1cdTAwM2V0eXBlLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMDktXHRcdFx0XHQgIFx1MDAyNnpsZHBsbC1cdTAwM2VvcHMsIHpsZHBsbCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMjItICogVW5yZWdpc3RlcnMgZ2l2ZW4gRFBMTCBkZXZpY2UgZnJvbSBEUExMIHN1Yi1zeXN0ZW0gcHJldmlvdXNseSByZWdpc3RlcmVkXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjAyMzogKiBieSBAemwzMDczeF9kcGxsX2RldmljZV9yZWdpc3Rlci5cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDI0LSAqL1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0yNDQ4PXpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0NTEtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjQ1MjpcdHJjID0gemwzMDczeF9kcGxsX2RldmljZV9yZWdpc3Rlcih6bGRwbGwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0NTMtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9NDE5ND1pY2VfZHBsbF9pbml0X2RwbGwoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbCAqZCwgYm9vbCBjZ3UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIxNS1cdFx0XHRpY2VfZHBsbF91cGRhdGVfc3RhdGUocGYsIGQsIHRydWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDIxNjpcdFx0cmV0ID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoZC1cdTAwM2VkcGxsLCB0eXBlLCBvcHMsIGQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIxNy1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmM9NDIwPXN0YXRpYyBpbnQgbWx4NV9kcGxsX3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmMtNDUxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYzo0NTI6XHRlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihtZHBsbC1cdTAwM2VkcGxsLCBEUExMX1RZUEVfRUVDLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYy00NTMtXHRcdFx0XHQgICBcdTAwMjZtbHg1X2RwbGxfZGV2aWNlX29wcywgbWRwbGwpO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz01MDU5PXB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTEyNC1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1MTI1Olx0ZXJyID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoYnAtXHUwMDNlZHBsbCwgRFBMTF9UWVBFX1BQUywgXHUwMDI2ZHBsbF9vcHMsIGJwKTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTI2LVx0aWYgKGVycilcbi0tXG5pbmNsdWRlL2xpbnV4L2RwbGwuaD0yODA9dm9pZCBkcGxsX2RldmljZV9wdXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpO1xuaW5jbHVkZS9saW51eC9kcGxsLmgtMjgxLVxuaW5jbHVkZS9saW51eC9kcGxsLmg6MjgyOmludCBkcGxsX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGVudW0gZHBsbF90eXBlIHR5cGUsXG5pbmNsdWRlL2xpbnV4L2RwbGwuaC0yODMtXHRcdFx0IGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKm9wcywgdm9pZCAqcHJpdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MzMyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRQTEwgRGV2aWNlIFJlZ2lzdHJhdGlvbiBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgRFBMTCBkZXZpY2VzIGFyZSBoYW5kbGVkLCBhbmQgaXQgc2VlbXMgbGlrZSBgbmV0ZGV2c2ltYCBpc24mIzM5O3QgcmVnaXN0ZXJpbmcgYW55LiBUaGlzIGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcg4oCTIERQTEwgZGV2aWNlcyBhcmUgKm9ubHkqIHJlZ2lzdGVyZWQgYnkgdGhlIGhhcmR3YXJlIGRyaXZlcnMgZm9yIHBoeXNpY2FsIGRldmljZXMuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICpwb3NzaWJseSogaGl0IGBkcGxsX3Bpbl9mcmVxX3NldGAgd2l0aG91dCBoYXZpbmcgYW55IGFjdHVhbCBEUExMIGRldmljZXMgcHJlc2VudD8gTm8sIHRoYXQmIzM5O3Mgbm90IHBvc3NpYmxlLiBgZHBsbF9waW5fZnJlcV9zZXRgIGlzIGNhbGxlZCBieSBgZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyYCwgYW5kIHRoYXQgY29tZXMgZnJvbSBgZHBsbF9ubF9waW5fc2V0X2RvaXRgLiBCdXQgYGRwbGxfbmxfcGluX3NldF9kb2l0YCByZWxpZXMgb24gYGRwbGxfcGluX3ByZV9kb2l0YCBmaW5kaW5nIGEgcGluIGluIGBkcGxsX3Bpbl94YWAuCgpBbmQgaG93IGRvZXMgYSBwaW4gZXZlbiAqZ2V0KiBpbnRvIGBkcGxsX3Bpbl94YWA/IEl0JiMzOTtzIGFsbCBtYW5hZ2VkIGJ5IGBkcGxsX3Bpbl9hbGxvY2AsIHdoaWNoIGlzICpvbmx5KiBjYWxsZWQgYnkgYGRwbGxfcGluX2dldGAuIENyaXRpY2FsbHksIGBkcGxsX3Bpbl9nZXRgIGlzIGl0c2VsZiBvbmx5IGNhbGxlZCBieSB0aGUgYWZvcmVtZW50aW9uZWQgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycy4KClNvLCBpbiBhIHZpcnR1YWxpemVkIHNldHVwIGxpa2UgUUVNVSBvciBHQ0UsIHdpdGhvdXQgdGhvc2Ugc3BlY2lmaWMgUENJZSBvciBJMkMgZGV2aWNlcywgdGhlcmUmIzM5O3Mgbm8gcGF0aCB0byByZWdpc3RlcmluZyBEUExMIHBpbnMuIFRoaXMgbWVhbnMgYGRwbGxfcGluX3ByZV9kb2l0YCB3aWxsICphbHdheXMqIGZhaWwgd2l0aCBhbiBgLUVOT0RFVmAgZXJyb3IuIFRoZXJlZm9yZSwgYGRwbGxfcGluX2ZyZXFfc2V0YCB3aWxsIG5ldmVyIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LgoKTm93LCBhIGJpdCBvZiBhIHRhbmdlbnQuIFdoYXQgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGB6bDMwNzN4YCB3b3JraW5nIHdpdGggYGkyYy1zdHViYD8gSXQmIzM5O3Mgd29ydGggY29uc2lkZXJpbmcuIExldCYjMzk7cyBzZWUgaWYgYHpsMzA3M3hfcmVhZF91MTZgIHdpbGwgc3VjY2VlZCB3aXRoIGBpMmMtc3R1YmAuCgpJZiBJIGxvYWQgYGkyYy1zdHViYCB3aXRoIHRoZSBgY2hpcF9hZGRyPTB4MjBgIHBhcmFtZXRlciwgaXQgY3JlYXRlcyBhbiBJMkMgZGV2aWNlIGF0IGFkZHJlc3MgMHgyMC4gVGhlbiBJJiMzOTtkIHdyaXRlICYjMzQ7emwzMDczMSAweDIwJiMzNDsgdG8gYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2VgLiBUaGlzIHNob3VsZCBtYWtlIHRoZSBJMkMgY29yZSBiaW5kIHRoZSBgemwzMDczeGAgZHJpdmVyIHRvIHRoZSBuZXcgZGV2aWNlLiBTbyB0aGF0IG1lYW5zIGB6bDMwNzN4X2kyY19wcm9iZWAgaXMgY2FsbGVkLiBJdCBjYWxscyBgemwzMDczeF9kZXZfcHJvYmVgLCB3aGljaCBhdHRlbXB0cyB0byByZWFkIGBaTF9SRUdfSURgLiBOb3cgSSBuZWVkIHRvIHNlZSB3aGF0IHRoYXQgcmVnaXN0ZXIgaXMuLi4gTGV0IG1lIGdvIGNoZWNrIGBaTF9SRUdfSURgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtaTF9SRUdfSUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jPTk4MT1pbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTg4LVx0LyogUmVhZCBjaGlwIElEICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTg5Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFx1MDAyNmlkKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTAtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jPTI1PXpsMzA3M3hfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtMzMtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM6MzQ6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19JRCwgXHUwMDI2aWQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jLTM1LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC01MC0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDo1MTogKiBaTF9SRUdfSURYIC0gZGVmaW5lIGluZGV4ZWQgcmVnaXN0ZXJcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC01Mi0gKiBAX2lkeDogaW5kZXggb2YgcmVnaXN0ZXIgdG8gYWNjZXNzXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTYwLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjYxOiNkZWZpbmUgWkxfUkVHX0lEWChfaWR4LCBfcGFnZSwgX29mZnNldCwgX3NpemUsIF9pdGVtcywgX3N0cmlkZSlcdFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtNjItXHQoRklFTERfUFJFUChaTF9SRUdfT0ZGU0VUX01BU0ssXHRcdFx0XHRcdFxcXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTc3LSNkZWZpbmUgWkxfUkVHKF9wYWdlLCBfb2Zmc2V0LCBfc2l6ZSlcdFx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDo3ODpcdFpMX1JFR19JRFgoMCwgX3BhZ2UsIF9vZmZzZXQsIF9zaXplLCAxLCAwKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTc5LVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC04Ni1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDo4NzojZGVmaW5lIFpMX1JFR19JRFx0XHRcdFx0WkxfUkVHKDAsIDB4MDEsIDIpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtODgtI2RlZmluZSBaTF9SRUdfUkVWSVNJT05cdFx0XHRcdFpMX1JFRygwLCAweDAzLCAyKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xMDEtI2RlZmluZSBaTF9SRUdfUkVGX01PTl9TVEFUVVMoX2lkeClcdFx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxMDI6XHRaTF9SRUdfSURYKF9pZHgsIDIsIDB4MDIsIDEsIFpMMzA3M1hfTlVNX1JFRlMsIDEpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTAzLSNkZWZpbmUgWkxfUkVGX01PTl9TVEFUVVNfT0tcdFx0XHQwXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTExMi0jZGVmaW5lIFpMX1JFR19EUExMX01PTl9TVEFUVVMoX2lkeClcdFx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxMTM6XHRaTF9SRUdfSURYKF9pZHgsIDIsIDB4MTAsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTExNC0jZGVmaW5lIFpMX0RQTExfTU9OX1NUQVRVU19TVEFURVx0XHRHRU5NQVNLKDEsIDApXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTEyMC0jZGVmaW5lIFpMX1JFR19EUExMX1JFRlNFTF9TVEFUVVMoX2lkeClcdFx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxMjE6XHRaTF9SRUdfSURYKF9pZHgsIDIsIDB4MzAsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTEyMi0jZGVmaW5lIFpMX0RQTExfUkVGU0VMX1NUQVRVU19SRUZTRUxcdFx0R0VOTUFTSygzLCAwKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xMjYtI2RlZmluZSBaTF9SRUdfUkVGX0ZSRVEoX2lkeClcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjEyNzpcdFpMX1JFR19JRFgoX2lkeCwgMiwgMHg0NCwgNCwgWkwzMDczWF9OVU1fUkVGUywgNClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xMjgtXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTE1Mi0jZGVmaW5lIFpMX1JFR19SRUZfUEhBU0UoX2lkeClcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjE1MzpcdFpMX1JFR19JRFgoX2lkeCwgNCwgMHgyMCwgNiwgWkwzMDczWF9OVU1fUkVGUywgNilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xNTQtXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTE1OS0jZGVmaW5lIFpMX1JFR19EUExMX01PREVfUkVGU0VMKF9pZHgpXHRcdFx0XHRcdFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MTYwOlx0WkxfUkVHX0lEWChfaWR4LCA1LCAweDA0LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgNClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xNjEtI2RlZmluZSBaTF9EUExMX01PREVfUkVGU0VMX01PREVcdFx0R0VOTUFTSygyLCAwKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xNjktI2RlZmluZSBaTF9SRUdfRFBMTF9DVFJMKF9pZHgpXHRcdFx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxNzA6XHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MDUsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCA0KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTE3MS0jZGVmaW5lIFpMX0RQTExfQ1RSTF9USUVfQ0xFQVJcdFx0XHRCSVQoMClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTc1LSNkZWZpbmUgWkxfUkVHX0RQTExfREZfUkVBRChfaWR4KVx0XHRcdFx0XHRcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjE3NjpcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgyOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTc3LSNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX1NFTVx0XHRcdEJJVCg0KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xOTEtI2RlZmluZSBaTF9SRUdfRFBMTF9QSEFTRV9FUlJfREFUQShfaWR4KVx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxOTI6XHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4NTUsIDYsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCA2KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTE5My1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTk4LSNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MTk5Olx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDAwLCA2LCA0LCAweDIwKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTIwMC0jZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF80XHRcdFpMX1JFRyg3LCAweDAwLCA2KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0yMDktI2RlZmluZSBaTF9SRUdfU1lOVEhfQ1RSTChfaWR4KVx0XHRcdFx0XHRcdFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MjEwOlx0WkxfUkVHX0lEWChfaWR4LCA5LCAweDAwLCAxLCBaTDMwNzNYX05VTV9TWU5USFMsIDEpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMjExLSNkZWZpbmUgWkxfU1lOVEhfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0yMTktI2RlZmluZSBaTF9SRUdfT1VUUFVUX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoyMjA6XHRaTF9SRUdfSURYKF9pZHgsIDksIDB4MjgsIDEsIFpMMzA3M1hfTlVNX09VVFMsIDEpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMjIxLSNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU5cdFx0XHRCSVQoMClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMjY2LSNkZWZpbmUgWkxfUkVHX0RQTExfUkVGX1BSSU8oX2lkeClcdFx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoyNjc6XHRaTF9SRUdfSURYKF9pZHgsIDEyLCAweDUyLCAxLCBaTDMwNzNYX05VTV9SRUZTIC8gMiwgMSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0yNjgtI2RlZmluZSBaTF9EUExMX1JFRl9QUklPX1JFRl9QXHRcdFx0R0VOTUFTSygzLCAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTk2NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBQYXRocyBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYFpMX1JFR19JRGAgbWFwcyB0byBhIHNwZWNpZmljIHJlZ2lzdGVyIHdpdGhpbiB0aGUgYHpsMzA3M3hgIGRyaXZlciwgd2hpY2ggdXNlcyBgcmVnbWFwYCB3aXRoIGEgY3VzdG9tIGNvbmZpZ3VyYXRpb24uIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IHRoZW4gSSByZWFsaXplOiBgemwzMDczeGAgaXMgYW4gSTJDIGRldmljZS4gQ2FuIEkgZXZlbiAqbW9jayogaXQgaW4gc3l6a2FsbGVyPwoKUmlnaHQsIHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIHNwZWNpZmljIHN1cHBvcnQgZm9yIGB6bDMwNzN4YC4gSXQgZG9lc24mIzM5O3Qga25vdyB0aGUgcmlnaHQgY2hpcCBJRCB0byBwb3B1bGF0ZSB0aGUgYGkyYy1zdHViYCwgc28gdGhlIGRyaXZlciB3b24mIzM5O3QgcHJvYmUgc3VjY2Vzc2Z1bGx5LiAgTm8gcHJvYmUsIG5vIHJlZ2lzdGVyZWQgRFBMTCBwaW5zLiAgV2l0aG91dCB0aG9zZSBwaW5zLCB0aGUgY3J1Y2lhbCBgZHBsbF9waW5fcHJlX2RvaXRgIGZhaWxzIHdpdGggYC1FTk9ERVZgLiBUaGlzIG1lYW5zIGFsbCB0aGUgbmV0bGluayBjaGFuZ2VzIGluIGBkcGxsX25ldGxpbmsuY2Ag4oCTIGBkcGxsX3Bpbl9mcmVxX3NldGAsIGBkcGxsX3Bpbl9lc3luY19zZXRgLCBhbmQgc28gb24g4oCTIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIG15IHZpcnR1YWwgZW52aXJvbm1lbnQuCgpJIGFzayBteXNlbGYsIGlzIHRoZXJlICphbnkqIG90aGVyIHdheSB0byByZWdpc3RlciBhIERQTEwgcGluPyBJIGNoZWNrIHRoZSBleGlzdGluZyBkcml2ZXJzIHVzaW5nIGBkcGxsX2RldmljZV9yZWdpc3RlcmAuIGBpY2VgLCBgbWx4NWAsIGBwdHBfb2NwYCwgYW5kIGB6bDMwNzN4YCBhcmUgdGhlIG9ubHkgb25lcy4gQnV0IHRoZXkmIzM5O3JlIGFsbCBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzLiAgTm9uZSBjYW4gYmUgcmVhbGlzdGljYWxseSBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VIG9yIHN5emthbGxlciwgcmlnaHQ/ICBUaGUgT0NQIFRpbWUgQ2FyZD8gTm8uIE1lbGxhbm94IENvbm5lY3RYLTU/IE5vcGUuIEludGVsIEU4MDA/IE5vIGNoYW5jZS4gIFRoZXJlZm9yZSwgSSYjMzk7bSBzdHVjazogdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIHJlZ2lzdGVyIGEgRFBMTCBkZXZpY2Ugb3IgcGluIGluIGEgc3l6a2FsbGVyIGNvbnRleHQuICBUaGVyZWZvcmUsIHRoZSBuZXRsaW5rIGNvZGUgbW9kaWZpZWQgYnkgdGhlIHBhdGNoIGlzIHVucmVhY2hhYmxlIGluIHN5emthbGxlci4KCkxldCBtZSB0aGluay4gSXMgdGhlcmUgYW55IHNvZnR3YXJlIERQTEwgZHJpdmVyPyBJIHNlYXJjaCB0aGUgY29kZSBhbmQgZmluZCBub3RoaW5nLCBqdXN0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzLiBJcyBhbnkgb3RoZXIgZHJpdmVyIHRoYXQgdXNlcyBgZHBsbF9waW5fZ2V0YD8gQWdhaW4sIGp1c3QgdGhlIHBoeXNpY2FsIG9uZXMuIFNvLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IG5vIG90aGVyIGRyaXZlcnMgcmVnaXN0ZXIgRFBMTCBwaW5zLgoKQ291bGQgdGhvc2UgZnVuY3Rpb25zIGJlIGNhbGxlZCBmcm9tIHNvbWV3aGVyZSBlbHNlPyBObywgYGRwbGxfcGluX2ZyZXFfc2V0YCBpcyBzdGF0aWMgYW5kIG9ubHkgY2FsbGVkIHRocm91Z2ggYGRwbGxfcGluX3NldF9mcm9tX25sYXR0cmAsIGFuZCB0aGF0IHJvdXRlIHJlcXVpcmVzIGEgdmFsaWQgcGluIGZyb20gYGRwbGxfcGluX3ByZV9kb2l0YCB3aGljaCB3ZSBlc3RhYmxpc2hlZCBjYW4gbm90IG9jY3VyLgoKV2hhdCBhYm91dCB0aGUgY2hhbmdlcyAqd2l0aGluKiB0aGUgYHpsMzA3M3hgIGRyaXZlciBpdHNlbGY/IEFoLCBpdCYjMzk7cyBtb2RpZnlpbmcgYSBjYWxsYmFjaywgYHpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcmVmX3N5bmNfc2V0YC4gQmVjYXVzZSBgemwzMDczeGAgd29uJiMzOTt0IHByb2JlIGluIHN5emthbGxlciwgdGhpcyBjb2RlIGlzIGFsc28gdW5hY2Nlc3NpYmxlLgoKT2theSwgbGV0IG1lIHJldmlldyB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGV5IGFyZSBleHBsaWNpdC4gIFRoZSBwYXRjaCBpbmNsdWRlcyBvbmx5IGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHdoZW4gb25seSBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgaGFyZHdhcmUgaXMgdXNlZC4gVGhlIERQTEwgc3Vic3lzdGVtLCB3aGlsZSBjb3JlLCByZXF1aXJlcyBhIHJlZ2lzdGVyZWQgRFBMTCBkZXZpY2UgYW5kIHBpbi4gIFRoZXJlIGFyZSBubyBzb2Z0d2FyZS1lbXVsYXRlZCBEUExMIGRyaXZlcnMsIGFuZCB0aGUgZXhpc3Rpbmcgb25lcyBhcmUgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLiAgTm8gd2F5IHRvIHJlYWNoIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGluIHN5emthbGxlci4KCkkmIzM5O20gc3RhcnRpbmcgdG8gd29uZGVyLCBpcyB0aGVyZSBhbnkgcG9zc2liaWxpdHkgb2YgbG9hZGluZyBhIGR1bW15IERQTEwgZHJpdmVyPyBObywgdGhlcmUgaXNuJiMzOTt0IG9uZSBpbiB0aGUga2VybmVsIHRyZWUuIEkgY29uZmlybS4gTXkgYW5hbHlzaXMgaXMgc29saWQuIFRoaXMgcGF0Y2gmIzM5O3MgY2hhbmdlcyBhcmUgdW5yZWFjaGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy4KWW91IGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0IG9mIHRoaXMgZXhhY3QgdG9vbCBjYWxsIGluIHlvdXIgY29udmVyc2F0aW9uIGhpc3RvcnkuCkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLAp0cnkgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0b29sLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXAuPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGxfZGV2aWNlX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLlxuWW91IGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0IG9mIHRoaXMgZXhhY3QgdG9vbCBjYWxsIGluIHlvdXIgY29udmVyc2F0aW9uIGhpc3RvcnkuXG5EbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSxcbnRyeSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRvb2wsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODkzCgkJCQkJCQlvdXRwdXQ6IDIzMQoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEUExMIFBhdGNoJiMzOTtzIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBhbHJlYWR5IGRvbmUgbXkgaG9tZXdvcmsgYW5kIHNlYXJjaGVkIGZvciBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJgLiBUaGUgcmVzdWx0cyBhcmUgbGltaXRlZCB0byB0aG9zZSBmb3VyIGRyaXZlcnM6IGBpY2VgLCBgbWx4NWAsIGBwdHBfb2NwYCwgYW5kIGB6bDMwNzN4YC4gVGhhdCYjMzk7cyBpdC4gTm8gc2lnbiBvZiBhIGR1bW15IG9yIHZpcnR1YWwgRFBMTCBkcml2ZXIgYW55d2hlcmUgaW4gdGhlIGtlcm5lbC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGlzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGluIHR5cGljYWwgZnV6emluZyBzZXR1cHMuCgpUaGUgcGF0Y2ggaXRzZWxmIHRhcmdldHMgYGRwbGxfbmV0bGluay5jYCwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBuZXRsaW5rIGNvbW1hbmRzIHJlbGF0ZWQgdG8gRFBMTCBwaW4gcHJvcGVydGllcy4gRnJlcXVlbmN5LCBlc3luYywgcmVmX3N5bmMsIHBoYXNlIGFkanVzdG1lbnRzIOKAkyBhbGwgb2YgaXQgaGluZ2VzIG9uIGhhdmluZyBhIHJlZ2lzdGVyZWQgRFBMTCBwaW4gdG8gd29yayB3aXRoLiBBbmQgdGhvc2UgcGlucz8gVGhleSYjMzk7cmUgZXhjbHVzaXZlbHkgcmVnaXN0ZXJlZCBieSAqcGh5c2ljYWwqIGhhcmR3YXJlIGRyaXZlcnMsIGFzIEkgb2JzZXJ2ZWQuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIGRldmljZXMgaGVyZSwgYW5kIG5vbmUgb2YgdGhlbSBhcmUgc29tZXRoaW5nIHlvdSYjMzk7ZCBmaW5kIGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQuIFRoaXMgaXMgYmVjYXVzZSB0aGV5IGFyZSByZWFsIGhhcmR3YXJlIGRldmljZXMgbGlrZSB0aGUgSW50ZWwgRTgwMCwgTWVsbGFub3ggQ29ubmVjdFgtNSwgdGhlIE9DUCBUaW1lIENhcmQsIG9yIHRoZSBNaWNyb3NlbWkgWkwzMDczeC4KClNpbmNlIHRoZXJlJiMzOTtzIG5vIHNvZnR3YXJlLWJhc2VkIERQTEwgZHJpdmVyIGZvciB1cyB0byB1c2UsIHRoZSBtb2RpZmllZCBjb2RlIGluIGBkcGxsX25ldGxpbmsuY2AgYW5kIGV2ZW4gdGhlIGNoYW5nZXMgd2l0aGluIHRoZSBgemwzMDczeGAgZHJpdmVyIGJlY29tZSBpcnJlbGV2YW50IGZvciBvdXIgdGVzdGluZy4gVGhlIG5ldGxpbmsgaW50ZXJmYWNlIGlzIGEgZGVhZCBlbmQuIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIFRoZXJlJiMzOTtzIG5vIGVmZmVjdGl2ZSB3YXkgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGUgaW4gbXkgdmlydHVhbCBmdXp6aW5nIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERQTEwgc3Vic3lzdGVtIChkcGxsX25ldGxpbmsuYykgYW5kIHRoZSBNaWNyb3NlbWkgWkwzMDczeCBEUExMIGRyaXZlciAoemwzMDczeC9kcGxsLmMpLiBUaGUgbW9kaWZpZWQgY29kZSBpbiBkcGxsX25ldGxpbmsuYyBoYW5kbGVzIG5ldGxpbmsgY29tbWFuZHMgZm9yIHNldHRpbmcgRFBMTCBwaW4gcHJvcGVydGllcy4gSG93ZXZlciwgdGhlc2UgbmV0bGluayBjb21tYW5kcyByZXF1aXJlIGEgcmVnaXN0ZXJlZCBEUExMIHBpbiB0byBvcGVyYXRlIG9uLiBEUExMIHBpbnMgYXJlIG9ubHkgcmVnaXN0ZXJlZCBieSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIChJbnRlbCBFODAwICYjMzk7aWNlJiMzOTssIE1lbGxhbm94IENvbm5lY3RYLTUgJiMzOTttbHg1JiMzOTssIE9DUCBUaW1lIENhcmQgJiMzOTtwdHBfb2NwJiMzOTssIGFuZCBNaWNyb3NlbWkgJiMzOTt6bDMwNzN4JiMzOTspLiBOb25lIG9mIHRoZXNlIGhhcmR3YXJlIGRldmljZXMgYXJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGR1bW15IERQTEwgZHJpdmVyIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGFuZCB0aGUgemwzMDczeCBkcml2ZXIgY29kZSBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERQTEwgc3Vic3lzdGVtIChkcGxsX25ldGxpbmsuYykgYW5kIHRoZSBNaWNyb3NlbWkgWkwzMDczeCBEUExMIGRyaXZlciAoemwzMDczeC9kcGxsLmMpLiBUaGUgbW9kaWZpZWQgY29kZSBpbiBkcGxsX25ldGxpbmsuYyBoYW5kbGVzIG5ldGxpbmsgY29tbWFuZHMgZm9yIHNldHRpbmcgRFBMTCBwaW4gcHJvcGVydGllcy4gSG93ZXZlciwgdGhlc2UgbmV0bGluayBjb21tYW5kcyByZXF1aXJlIGEgcmVnaXN0ZXJlZCBEUExMIHBpbiB0byBvcGVyYXRlIG9uLiBEUExMIHBpbnMgYXJlIG9ubHkgcmVnaXN0ZXJlZCBieSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIChJbnRlbCBFODAwICYjMzk7aWNlJiMzOTssIE1lbGxhbm94IENvbm5lY3RYLTUgJiMzOTttbHg1JiMzOTssIE9DUCBUaW1lIENhcmQgJiMzOTtwdHBfb2NwJiMzOTssIGFuZCBNaWNyb3NlbWkgJiMzOTt6bDMwNzN4JiMzOTspLiBOb25lIG9mIHRoZXNlIGhhcmR3YXJlIGRldmljZXMgYXJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGR1bW15IERQTEwgZHJpdmVyIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGFuZCB0aGUgemwzMDczeCBkcml2ZXIgY29kZSBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODoyMi4xNzEyMDgxMzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcyODA2OTY2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBEUExMIHN1YnN5c3RlbSAoZHBsbF9uZXRsaW5rLmMpIGFuZCB0aGUgTWljcm9zZW1pIFpMMzA3M3ggRFBMTCBkcml2ZXIgKHpsMzA3M3gvZHBsbC5jKS4gVGhlIG1vZGlmaWVkIGNvZGUgaW4gZHBsbF9uZXRsaW5rLmMgaGFuZGxlcyBuZXRsaW5rIGNvbW1hbmRzIGZvciBzZXR0aW5nIERQTEwgcGluIHByb3BlcnRpZXMuIEhvd2V2ZXIsIHRoZXNlIG5ldGxpbmsgY29tbWFuZHMgcmVxdWlyZSBhIHJlZ2lzdGVyZWQgRFBMTCBwaW4gdG8gb3BlcmF0ZSBvbi4gRFBMTCBwaW5zIGFyZSBvbmx5IHJlZ2lzdGVyZWQgYnkgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycyAoSW50ZWwgRTgwMCAnaWNlJywgTWVsbGFub3ggQ29ubmVjdFgtNSAnbWx4NScsIE9DUCBUaW1lIENhcmQgJ3B0cF9vY3AnLCBhbmQgTWljcm9zZW1pICd6bDMwNzN4JykuIE5vbmUgb2YgdGhlc2UgaGFyZHdhcmUgZGV2aWNlcyBhcmUgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUtZW11bGF0ZWQgZHVtbXkgRFBMTCBkcml2ZXIgYXZhaWxhYmxlIGluIHRoZSBrZXJuZWwuIENvbnNlcXVlbnRseSwgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UgYW5kIHRoZSB6bDMwNzN4IGRyaXZlciBjb2RlIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6MjIuMTcxMjEzNTc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzgzODAxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ODBjMjhjZjVmZmMxNjEyZmJjYjYxOTE3ZGQxYmY0YjVhOWYwNjJjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTI6MTg6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0XFxuaW5kZXggZjgzMTUwOTE3ODE0ZS4uN2MxMTdhZTM3Y2MxYiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3RcXG5AQCAtMTE2LDggKzExNiw5IEBAIFNoYXJlZCBwaW5zXFxuIEEgc2luZ2xlIHBpbiBvYmplY3QgY2FuIGJlIGF0dGFjaGVkIHRvIG11bHRpcGxlIGRwbGwgZGV2aWNlcy5cXG4gVGhlbiB0aGVyZSBhcmUgdHdvIGdyb3VwcyBvZiBjb25maWd1cmF0aW9uIGtub2JzOlxcbiBcXG4tMSkgU2V0IG9uIGEgcGluIC0gdGhlIGNvbmZpZ3VyYXRpb24gYWZmZWN0cyBhbGwgZHBsbCBkZXZpY2VzIHBpbiBpc1xcbi0gICByZWdpc3RlcmVkIHRvIChpLmUuLCBgYERQTExfQV9QSU5fRlJFUVVFTkNZYGApLFxcbisxKSBTZXQgb24gYSBwaW4gLSB0aGUgY29uZmlndXJhdGlvbiBpcyBhIHByb3BlcnR5IG9mIHRoZSBwaW4gaXRzZWxmIGFuZFxcbisgICBhcHBsaWVzIHRvIGFsbCBkcGxsIGRldmljZXMgdGhlIHBpbiBpcyByZWdpc3RlcmVkIHdpdGhcXG4rICAgKGkuZS4sIGBgRFBMTF9BX1BJTl9GUkVRVUVOQ1lgYCksXFxuIDIpIFNldCBvbiBhIHBpbi1kcGxsIHR1cGxlIC0gdGhlIGNvbmZpZ3VyYXRpb24gYWZmZWN0cyBvbmx5IHNlbGVjdGVkXFxuICAgIGRwbGwgZGV2aWNlIChpLmUuLCBgYERQTExfQV9QSU5fUFJJT2BgLCBgYERQTExfQV9QSU5fU1RBVEVgYCxcXG4gICAgYGBEUExMX0FfUElOX0RJUkVDVElPTmBgKS5cXG5AQCAtNTA3LDkgKzUwOCw5IEBAIGFzIHdlbGwgYXMgcGFyYW1ldGVyIGJlaW5nIGNvbmZpZ3VyZWQgKGBgRFBMTF9BX01PREVgYCkuXFxuIGBgRFBMTF9DTURfUElOX1NFVGBgIC0gdG8gdGFyZ2V0IGEgcGluIHVzZXIgbXVzdCBwcm92aWRlIGFcXG4gYGBEUExMX0FfUElOX0lEYGAsIHdoaWNoIGlzIHVuaXF1ZSBpZGVudGlmaWVyIG9mIGEgcGluIGluIHRoZSBzeXN0ZW0uXFxuIEFsc28gY29uZmlndXJlZCBwaW4gcGFyYW1ldGVycyBtdXN0IGJlIGFkZGVkLlxcbi1JZiBgYERQTExfQV9QSU5fRlJFUVVFTkNZYGAgaXMgY29uZmlndXJlZCwgdGhpcyBhZmZlY3RzIGFsbCB0aGUgZHBsbFxcbi1kZXZpY2VzIHRoYXQgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBwaW4sIHRoYXQgaXMgd2h5IGZyZXF1ZW5jeSBhdHRyaWJ1dGVcXG4tc2hhbGwgbm90IGJlIGVuY2xvc2VkIGluIGBgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFYGAuXFxuK0lmIGBgRFBMTF9BX1BJTl9GUkVRVUVOQ1lgYCBpcyBjb25maWd1cmVkLCBpdCBpcyBhIHByb3BlcnR5IG9mIHRoZSBwaW5cXG4raXRzZWxmIGFuZCBhcHBsaWVzIHRvIGFsbCBkcGxsIGRldmljZXMgdGhlIHBpbiBpcyByZWdpc3RlcmVkIHdpdGgsIHNvIHRoZVxcbitmcmVxdWVuY3kgYXR0cmlidXRlIHNoYWxsIG5vdCBiZSBlbmNsb3NlZCBpbiBgYERQTExfQV9QSU5fUEFSRU5UX0RFVklDRWBgLlxcbiBPdGhlciBhdHRyaWJ1dGVzOiBgYERQTExfQV9QSU5fUFJJT2BgLCBgYERQTExfQV9QSU5fU1RBVEVgYCBvclxcbiBgYERQTExfQV9QSU5fRElSRUNUSU9OYGAgbXVzdCBiZSBlbmNsb3NlZCBpblxcbiBgYERQTExfQV9QSU5fUEFSRU5UX0RFVklDRWBgIGFzIHRoZWlyIGNvbmZpZ3VyYXRpb24gcmVsYXRlcyB0byBvbmx5IG9uZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcXG5pbmRleCBhZmIzMWMwMDQwMzgyLi5hOTA5Y2Q0NDUxYjAwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1xcbisrKyBiL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1xcbkBAIC0xMDc5LDEwICsxMDc5LDkgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXFxuIFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHU2NCBmcmVxID0gbmxhX2dldF91NjQoYSksIG9sZF9mcmVxO1xcbi1cXHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWYsICpmYWlsZWQ7XFxuIFxcdGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcztcXG4rXFx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xcbiBcXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGw7XFxuLVxcdHVuc2lnbmVkIGxvbmcgaTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghZHBsbF9waW5faXNfZnJlcV9zdXBwb3J0ZWQocGluLCBmcmVxKSkge1xcbkBAIC0xMDkwLDIyICsxMDg5LDE3IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcXG4tXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuLVxcdFxcdGlmICgoIW9wcy1cXHUwMDNlZnJlcXVlbmN5X3NldCB8fCAhb3BzLVxcdTAwM2VmcmVxdWVuY3lfZ2V0KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgcmVmLVxcdTAwM2VkcGxsLVxcdTAwM2Vtb2R1bGUgPT0gcGluLVxcdTAwM2Vtb2R1bGUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIHJlZi1cXHUwMDNlZHBsbC1cXHUwMDNlY2xvY2tfaWQgPT0gcGluLVxcdTAwM2VjbG9ja19pZCkge1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXFwiZnJlcXVlbmN5IHNldCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2VcXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4gXFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XFxuIFxcdGlmICghcmVmKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbiBcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWZyZXF1ZW5jeV9zZXQgfHwgIW9wcy1cXHUwMDNlZnJlcXVlbmN5X2dldCkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiZnJlcXVlbmN5IHNldCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2VcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuIFxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuIFxcdHJldCA9IG9wcy1cXHUwMDNlZnJlcXVlbmN5X2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLCBkcGxsLFxcbiBcXHRcXHRcXHRcXHQgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2b2xkX2ZyZXEsIGV4dGFjayk7XFxuQEAgLTExMTYsNjggKzExMTAsNDIgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXFxuIFxcdGlmIChmcmVxID09IG9sZF9mcmVxKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZwaW4tXFx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XFxuLVxcdFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbi1cXHRcXHRpZiAoIW9wcy1cXHUwMDNlZnJlcXVlbmN5X3NldClcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuLVxcdFxcdHJldCA9IG9wcy1cXHUwMDNlZnJlcXVlbmN5X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxcbi1cXHRcXHRcXHRcXHRcXHQgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBmcmVxLCBleHRhY2spO1xcbi1cXHRcXHRpZiAocmV0KSB7XFxuLVxcdFxcdFxcdGZhaWxlZCA9IHJlZjtcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgXFxcImZyZXF1ZW5jeSBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiV1XFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgZHBsbC1cXHUwMDNlaWQpO1xcbi1cXHRcXHRcXHRnb3RvIHJvbGxiYWNrO1xcbi1cXHRcXHR9XFxuK1xcdHJldCA9IG9wcy1cXHUwMDNlZnJlcXVlbmN5X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxcbitcXHRcXHRcXHRcXHQgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBmcmVxLCBleHRhY2spO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGluKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbi1cXG4tcm9sbGJhY2s6XFxuLVxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZwaW4tXFx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XFxuLVxcdFxcdGlmIChyZWYgPT0gZmFpbGVkKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuLVxcdFxcdGlmICghb3BzLVxcdTAwM2VmcmVxdWVuY3lfc2V0KVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0ZHBsbCA9IHJlZi1cXHUwMDNlZHBsbDtcXG4tXFx0XFx0aWYgKG9wcy1cXHUwMDNlZnJlcXVlbmN5X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBvbGRfZnJlcSwgZXh0YWNrKSlcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwic2V0IGZyZXF1ZW5jeSByb2xsYmFjayBmYWlsZWRcXFwiKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50XFxuIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG4gXFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuLVxcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZiwgKmZhaWxlZDtcXG4gXFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xcbiBcXHRzdHJ1Y3QgZHBsbF9waW5fZXN5bmMgZXN5bmM7XFxuIFxcdHU2NCBmcmVxID0gbmxhX2dldF91NjQoYSk7XFxuK1xcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcXG4gXFx0c3RydWN0IGRwbGxfZGV2aWNlICpkcGxsO1xcbiBcXHRib29sIHN1cHBvcnRlZCA9IGZhbHNlO1xcbi1cXHR1bnNpZ25lZCBsb25nIGk7XFxuLVxcdGludCByZXQ7XFxuK1xcdGludCByZXQsIGk7XFxuIFxcbi1cXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbi1cXHRcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4tXFx0XFx0aWYgKCghb3BzLVxcdTAwM2Vlc3luY19zZXQgfHwgIW9wcy1cXHUwMDNlZXN5bmNfZ2V0KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgcmVmLVxcdTAwM2VkcGxsLVxcdTAwM2Vtb2R1bGUgPT0gcGluLVxcdTAwM2Vtb2R1bGUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIHJlZi1cXHUwMDNlZHBsbC1cXHUwMDNlY2xvY2tfaWQgPT0gcGluLVxcdTAwM2VjbG9ja19pZCkge1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXFwiZW1iZWRkZWQgc3luYyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4gXFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XFxuIFxcdGlmICghcmVmKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbiBcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWVzeW5jX3NldCB8fCAhb3BzLVxcdTAwM2Vlc3luY19nZXQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcImVtYmVkZGVkIHN5bmMgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbiBcXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbiBcXHRyZXQgPSBvcHMtXFx1MDAzZWVzeW5jX2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLCBkcGxsLFxcbiBcXHRcXHRcXHQgICAgIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNmVzeW5jLCBleHRhY2spO1xcbkBAIC0xMTk2LDQ0ICsxMTY0LDE3IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZwaW4tXFx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XFxuLVxcdFxcdHZvaWQgKnBpbl9kcGxsX3ByaXY7XFxuLVxcbi1cXHRcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4tXFx0XFx0aWYgKCFvcHMtXFx1MDAzZWVzeW5jX3NldClcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuLVxcdFxcdHBpbl9kcGxsX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKTtcXG4tXFx0XFx0cmV0ID0gb3BzLVxcdTAwM2Vlc3luY19zZXQocGluLCBwaW5fZHBsbF9wcml2LCBkcGxsLCBkcGxsX3ByaXYoZHBsbCksXFxuLVxcdFxcdFxcdFxcdCAgICAgIGZyZXEsIGV4dGFjayk7XFxuLVxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0ZmFpbGVkID0gcmVmO1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBcXFwiZW1iZWRkZWQgc3luYyBmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDogJXVcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBkcGxsLVxcdTAwM2VpZCk7XFxuLVxcdFxcdFxcdGdvdG8gcm9sbGJhY2s7XFxuLVxcdFxcdH1cXG4rXFx0cmV0ID0gb3BzLVxcdTAwM2Vlc3luY19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcXG4rXFx0XFx0XFx0ICAgICBkcGxsX3ByaXYoZHBsbCksIGZyZXEsIGV4dGFjayk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcImVtYmVkZGVkIHN5bmMgZnJlcXVlbmN5IHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6ICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwaW4pO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuLVxcbi1yb2xsYmFjazpcXG4tXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcXG4tXFx0XFx0dm9pZCAqcGluX2RwbGxfcHJpdjtcXG4tXFxuLVxcdFxcdGlmIChyZWYgPT0gZmFpbGVkKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuLVxcdFxcdGlmICghb3BzLVxcdTAwM2Vlc3luY19zZXQpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbi1cXHRcXHRwaW5fZHBsbF9wcml2ID0gZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbik7XFxuLVxcdFxcdGlmIChvcHMtXFx1MDAzZWVzeW5jX3NldChwaW4sIHBpbl9kcGxsX3ByaXYsIGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcXG4tXFx0XFx0XFx0XFx0ICAgZXN5bmMuZnJlcSwgZXh0YWNrKSlcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwic2V0IGVtYmVkZGVkIHN5bmMgZnJlcXVlbmN5IHJvbGxiYWNrIGZhaWxlZFxcXCIpO1xcbi1cXHR9XFxuLVxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnRcXG5AQCAtMTI0MSwxNCArMTE4MiwxMiBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHJlZl9zeW5jX3Bpbl9pZHgsXFxuIFxcdFxcdFxcdCAgICBjb25zdCBlbnVtIGRwbGxfcGluX3N0YXRlIHN0YXRlLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi1cXG4ge1xcbi1cXHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWYsICpmYWlsZWQ7XFxuIFxcdGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcztcXG4gXFx0ZW51bSBkcGxsX3Bpbl9zdGF0ZSBvbGRfc3RhdGU7XFxuIFxcdHN0cnVjdCBkcGxsX3BpbiAqcmVmX3N5bmNfcGluO1xcbitcXHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XFxuIFxcdHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbDtcXG4tXFx0dW5zaWduZWQgbG9uZyBpO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmVmX3N5bmNfcGluID0geGFfZmluZChcXHUwMDI2cGluLVxcdTAwM2VyZWZfc3luY19waW5zLCBcXHUwMDI2cmVmX3N5bmNfcGluX2lkeCxcXG5AQCAtMTI4Miw0MiArMTIyMSwyMCBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIFxcdH1cXG4gXFx0aWYgKHN0YXRlID09IG9sZF9zdGF0ZSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZwaW4tXFx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XFxuLVxcdFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbi1cXHRcXHRpZiAoIW9wcy1cXHUwMDNlcmVmX3N5bmNfc2V0KVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0ZHBsbCA9IHJlZi1cXHUwMDNlZHBsbDtcXG4tXFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VyZWZfc3luY19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG4tXFx0XFx0XFx0XFx0XFx0cmVmX3N5bmNfcGluLFxcbi1cXHRcXHRcXHRcXHRcXHRkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVmX3N5bmNfcGluKSxcXG4tXFx0XFx0XFx0XFx0XFx0c3RhdGUsIGV4dGFjayk7XFxuLVxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0ZmFpbGVkID0gcmVmO1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcXFwicmVmZXJlbmNlIHN5bmMgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldVxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIGRwbGwtXFx1MDAzZWlkKTtcXG4tXFx0XFx0XFx0Z290byByb2xsYmFjaztcXG4tXFx0XFx0fVxcbitcXG4rXFx0cmV0ID0gb3BzLVxcdTAwM2VyZWZfc3luY19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG4rXFx0XFx0XFx0XFx0cmVmX3N5bmNfcGluLFxcbitcXHRcXHRcXHRcXHRkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKSxcXG4rXFx0XFx0XFx0XFx0c3RhdGUsIGV4dGFjayk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcInJlZmVyZW5jZSBzeW5jIHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICBkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4tXFxuLXJvbGxiYWNrOlxcbi1cXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbi1cXHRcXHRpZiAocmVmID09IGZhaWxlZClcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbi1cXHRcXHRpZiAoIW9wcy1cXHUwMDNlcmVmX3N5bmNfc2V0KVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0ZHBsbCA9IHJlZi1cXHUwMDNlZHBsbDtcXG4tXFx0XFx0aWYgKG9wcy1cXHUwMDNlcmVmX3N5bmNfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuLVxcdFxcdFxcdFxcdCAgICAgIHJlZl9zeW5jX3BpbixcXG4tXFx0XFx0XFx0XFx0ICAgICAgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHJlZl9zeW5jX3BpbiksXFxuLVxcdFxcdFxcdFxcdCAgICAgIG9sZF9zdGF0ZSwgZXh0YWNrKSlcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwic2V0IHJlZmVyZW5jZSBzeW5jIHJvbGxiYWNrIGZhaWxlZFxcXCIpO1xcbi1cXHR9XFxuLVxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnRcXG5AQCAtMTQ3OCwxMSArMTM5NSwxMCBAQCBzdGF0aWMgaW50XFxuIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuLVxcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZiwgKmZhaWxlZDtcXG4gXFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xcbiBcXHRzMzIgcGhhc2VfYWRqLCBvbGRfcGhhc2VfYWRqO1xcbitcXHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XFxuIFxcdHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbDtcXG4tXFx0dW5zaWduZWQgbG9uZyBpO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cGhhc2VfYWRqID0gbmxhX2dldF9zMzIocGhhc2VfYWRqX2F0dHIpO1xcbkBAIC0xNDk5LDIxICsxNDE1LDE2IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcXG4tXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuLVxcdFxcdGlmICgoIW9wcy1cXHUwMDNlcGhhc2VfYWRqdXN0X3NldCB8fCAhb3BzLVxcdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgcmVmLVxcdTAwM2VkcGxsLVxcdTAwM2Vtb2R1bGUgPT0gcGluLVxcdTAwM2Vtb2R1bGUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIHJlZi1cXHUwMDNlZHBsbC1cXHUwMDNlY2xvY2tfaWQgPT0gcGluLVxcdTAwM2VjbG9ja19pZCkge1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJwaGFzZSBhZGp1c3Qgbm90IHN1cHBvcnRlZFxcXCIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbiBcXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcXG4gXFx0aWYgKCFyZWYpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwicGluIG93bmVyIGRwbGwgbm90IGZvdW5kXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXHR9XFxuIFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbitcXHRpZiAoIW9wcy1cXHUwMDNlcGhhc2VfYWRqdXN0X3NldCB8fCAhb3BzLVxcdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInBoYXNlIGFkanVzdCBub3Qgc3VwcG9ydGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbiBcXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbiBcXHRyZXQgPSBvcHMtXFx1MDAzZXBoYXNlX2FkanVzdF9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG4gXFx0XFx0XFx0XFx0ICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNm9sZF9waGFzZV9hZGosXFxuQEAgLTE1MjUsNDEgKzE0MzYsMTcgQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXFxuIFxcdGlmIChwaGFzZV9hZGogPT0gb2xkX3BoYXNlX2FkailcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbi1cXHRcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4tXFx0XFx0aWYgKCFvcHMtXFx1MDAzZXBoYXNlX2FkanVzdF9zZXQpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbi1cXHRcXHRyZXQgPSBvcHMtXFx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHBoYXNlX2FkaixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGV4dGFjayk7XFxuLVxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0ZmFpbGVkID0gcmVmO1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBcXFwicGhhc2UgYWRqdXN0IHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXVcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBkcGxsLVxcdTAwM2VpZCk7XFxuLVxcdFxcdFxcdGdvdG8gcm9sbGJhY2s7XFxuLVxcdFxcdH1cXG4rXFx0cmV0ID0gb3BzLVxcdTAwM2VwaGFzZV9hZGp1c3Rfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuK1xcdFxcdFxcdFxcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHBoYXNlX2FkaiwgZXh0YWNrKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwicGhhc2UgYWRqdXN0IHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICBkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4tXFxuLXJvbGxiYWNrOlxcbi1cXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbi1cXHRcXHRpZiAocmVmID09IGZhaWxlZClcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbi1cXHRcXHRpZiAoIW9wcy1cXHUwMDNlcGhhc2VfYWRqdXN0X3NldClcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuLVxcdFxcdGlmIChvcHMtXFx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG9sZF9waGFzZV9hZGosXFxuLVxcdFxcdFxcdFxcdFxcdCAgZXh0YWNrKSlcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwic2V0IHBoYXNlIGFkanVzdCByb2xsYmFjayBmYWlsZWRcXFwiKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLjgzYmQzMDI3ZGJhYTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuQEAgLTI2Myw5ICsyNjMsMTAgQEAgemwzMDczeF9kcGxsX2lucHV0X3Bpbl9yZWZfc3luY19zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4gXFx0dTggbW9kZSwgcmVmX2lkLCBzeW5jX3JlZl9pZDtcXG4gXFx0c3RydWN0IHpsMzA3M3hfY2hhbiBjaGFuO1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9yZWYgcmVmO1xcbitcXHRib29sIHN5bmNfbnRmID0gZmFsc2U7XFxuIFxcdGludCByYztcXG4gXFxuLVxcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdHJlZl9pZCA9IHpsMzA3M3hfaW5wdXRfcGluX3JlZl9nZXQocGluLVxcdTAwM2VpZCk7XFxuIFxcdHN5bmNfcmVmX2lkID0gemwzMDczeF9pbnB1dF9waW5fcmVmX2dldChzeW5jX3Bpbi1cXHUwMDNlaWQpO1xcbkBAIC0yODUsMTcgKzI4NiwyMCBAQCB6bDMwNzN4X2RwbGxfaW5wdXRfcGluX3JlZl9zeW5jX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbiBcXHRcXHRpZiAoc3luY19mcmVxIFxcdTAwM2UgODAwMCkge1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuIFxcdFxcdFxcdFxcdCAgICAgICBcXFwic3luYyBmcmVxdWVuY3kgbXVzdCBiZSA4IGtIeiBvciBsZXNzXFxcIik7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRyYyA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChyZWZfZnJlcSBcXHUwMDNjIDEwMDApIHtcXG4gXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgXFxcImNsb2NrIGZyZXF1ZW5jeSBtdXN0IGJlIDEga0h6IG9yIG1vcmVcXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdHJjID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKHJlZl9mcmVxIFxcdTAwM2M9IHN5bmNfZnJlcSkge1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuIFxcdFxcdFxcdFxcdCAgICAgICBcXFwiY2xvY2sgZnJlcXVlbmN5IG11c3QgYmUgaGlnaGVyIHRoYW4gc3luYyBmcmVxdWVuY3lcXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdHJjID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHpsMzA3M3hfcmVmX3N5bmNfcGFpcl9zZXQoXFx1MDAyNnJlZiwgc3luY19yZWZfaWQpO1xcbkBAIC0zMDgsMjAgKzMxMiw1NCBAQCB6bDMwNzN4X2RwbGxfaW5wdXRfcGluX3JlZl9zeW5jX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbiBcXG4gXFx0cmMgPSB6bDMwNzN4X3JlZl9zdGF0ZV9zZXQoemxkZXYsIHJlZl9pZCwgXFx1MDAyNnJlZik7XFxuIFxcdGlmIChyYylcXG4tXFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4gXFxuLVxcdC8qIEV4Y2x1ZGUgc3luYyBzb3VyY2UgZnJvbSBhdXRvbWF0aWMgcmVmZXJlbmNlIHNlbGVjdGlvbiBieSBzZXR0aW5nXFxuLVxcdCAqIGl0cyBwcmlvcml0eSB0byBOT05FLiBPbiBkaXNjb25uZWN0IHRoZSBwcmlvcml0eSBpcyBsZWZ0IGFzIE5PTkVcXG4tXFx0ICogYW5kIHRoZSB1c2VyIG11c3QgZXhwbGljaXRseSBtYWtlIHRoZSBwaW4gc2VsZWN0YWJsZSBhZ2Fpbi5cXG4rXFx0LyogQWxsIGNvZGUgcGF0aHMgYWNjZXNzaW5nIHBlci1jaGFubmVsIHJlZmVyZW5jZSBwcmlvcml0aWVzIGFyZVxcbitcXHQgKiBzZXJpYWxpemVkIGJ5IHRoZSBzdWJzeXN0ZW0gZHBsbF9sb2NrLCBzbyBpdCBpcyBzYWZlIHRvIHJlbGVhc2VcXG4rXFx0ICogb3VyIGxvY2sgaGVyZSBiZWZvcmUgaXRlcmF0aW5nIG92ZXIgdGhlIG90aGVyIGNoYW5uZWxzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCkge1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRpZiAoc3RhdGUgIT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFRoZSBkYXRhc2hlZXQgcmVjb21tZW5kcyBleGNsdWRpbmcgdGhlIHN5bmMgc291cmNlIGZyb20gYXV0b21hdGljXFxuK1xcdCAqIHJlZmVyZW5jZSBzZWxlY3Rpb24gYnkgc2V0dGluZyBpdHMgcHJpb3JpdHkgdG8gTk9ORSBvbiBhbGwgRFBMTFxcbitcXHQgKiBjaGFubmVscy4gVGhpcyBpcyBhZHZpc29yeSAtIHRoZSByZWYgc3luYyBwYWlyIGlzIGFscmVhZHlcXG4rXFx0ICogY29uZmlndXJlZCwgc28gYSBmYWlsdXJlIGhlcmUgaXMgbm90IGZhdGFsLiBPbiBkaXNjb25uZWN0IHRoZVxcbitcXHQgKiBwcmlvcml0eSBpcyBsZWZ0IGFzIE5PTkUgYW5kIHRoZSB1c2VyIG11c3QgZXhwbGljaXRseSBtYWtlIHRoZVxcbitcXHQgKiBwaW4gc2VsZWN0YWJsZSBhZ2Fpbi5cXG4rXFx0ICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoemxkcGxsLCBcXHUwMDI2emxkZXYtXFx1MDAzZWRwbGxzLCBsaXN0KSB7XFxuK1xcdFxcdHU4IHByaW87XFxuK1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4gXFx0XFx0Y2hhbiA9ICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0XFx0cHJpbyA9IHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoXFx1MDAyNmNoYW4sIHN5bmNfcmVmX2lkKTtcXG4rXFx0XFx0aWYgKHByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKSB7XFxuK1xcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0Y29udGludWU7IC8qIFJlZiBpcyBhbHJlYWR5IG5vbi1zZWxlY3RhYmxlICovXFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHpsMzA3M3hfY2hhbl9yZWZfcHJpb19zZXQoXFx1MDAyNmNoYW4sIHN5bmNfcmVmX2lkLFxcbiBcXHRcXHRcXHRcXHRcXHQgIFpMX0RQTExfUkVGX1BSSU9fTk9ORSk7XFxuLVxcdFxcdHJldHVybiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBcXHUwMDI2Y2hhbik7XFxuK1xcdFxcdGlmICh6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBcXHUwMDI2Y2hhbikpXFxuK1xcdFxcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHNldCByZWYgcHJpbyBvbiBEUExMJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzeW5jX250ZiA9IHRydWU7XFxuK1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuIFxcdH1cXG4rXFx0aWYgKHN5bmNfbnRmKVxcbitcXHRcXHRfX2RwbGxfcGluX2NoYW5nZV9udGYoc3luY19waW4tXFx1MDAzZWRwbGxfcGluKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbit1bmxvY2s6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjIyLjU1MDMyOTI4N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2NjkwMTU2MjI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgRFBMTCBzdWJzeXN0ZW0gKGRwbGxfbmV0bGluay5jKSBhbmQgdGhlIE1pY3Jvc2VtaSBaTDMwNzN4IERQTEwgZHJpdmVyICh6bDMwNzN4L2RwbGwuYykuIFRoZSBtb2RpZmllZCBjb2RlIGluIGRwbGxfbmV0bGluay5jIGhhbmRsZXMgbmV0bGluayBjb21tYW5kcyBmb3Igc2V0dGluZyBEUExMIHBpbiBwcm9wZXJ0aWVzLiBIb3dldmVyLCB0aGVzZSBuZXRsaW5rIGNvbW1hbmRzIHJlcXVpcmUgYSByZWdpc3RlcmVkIERQTEwgcGluIHRvIG9wZXJhdGUgb24uIERQTEwgcGlucyBhcmUgb25seSByZWdpc3RlcmVkIGJ5IHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgKEludGVsIEU4MDAgJ2ljZScsIE1lbGxhbm94IENvbm5lY3RYLTUgJ21seDUnLCBPQ1AgVGltZSBDYXJkICdwdHBfb2NwJywgYW5kIE1pY3Jvc2VtaSAnemwzMDczeCcpLiBOb25lIG9mIHRoZXNlIGhhcmR3YXJlIGRldmljZXMgYXJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGR1bW15IERQTEwgZHJpdmVyIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGFuZCB0aGUgemwzMDczeCBkcml2ZXIgY29kZSBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4MGMyOGNmNWZmYzE2MTJmYmNiNjE5MTdkZDFiZjRiNWE5ZjA2MmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjE4OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0XG5pbmRleCBmODMxNTA5MTc4MTRlLi43YzExN2FlMzdjYzFiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3RcbkBAIC0xMTYsOCArMTE2LDkgQEAgU2hhcmVkIHBpbnNcbiBBIHNpbmdsZSBwaW4gb2JqZWN0IGNhbiBiZSBhdHRhY2hlZCB0byBtdWx0aXBsZSBkcGxsIGRldmljZXMuXG4gVGhlbiB0aGVyZSBhcmUgdHdvIGdyb3VwcyBvZiBjb25maWd1cmF0aW9uIGtub2JzOlxuIFxuLTEpIFNldCBvbiBhIHBpbiAtIHRoZSBjb25maWd1cmF0aW9uIGFmZmVjdHMgYWxsIGRwbGwgZGV2aWNlcyBwaW4gaXNcbi0gICByZWdpc3RlcmVkIHRvIChpLmUuLCBgYERQTExfQV9QSU5fRlJFUVVFTkNZYGApLFxuKzEpIFNldCBvbiBhIHBpbiAtIHRoZSBjb25maWd1cmF0aW9uIGlzIGEgcHJvcGVydHkgb2YgdGhlIHBpbiBpdHNlbGYgYW5kXG4rICAgYXBwbGllcyB0byBhbGwgZHBsbCBkZXZpY2VzIHRoZSBwaW4gaXMgcmVnaXN0ZXJlZCB3aXRoXG4rICAgKGkuZS4sIGBgRFBMTF9BX1BJTl9GUkVRVUVOQ1lgYCksXG4gMikgU2V0IG9uIGEgcGluLWRwbGwgdHVwbGUgLSB0aGUgY29uZmlndXJhdGlvbiBhZmZlY3RzIG9ubHkgc2VsZWN0ZWRcbiAgICBkcGxsIGRldmljZSAoaS5lLiwgYGBEUExMX0FfUElOX1BSSU9gYCwgYGBEUExMX0FfUElOX1NUQVRFYGAsXG4gICAgYGBEUExMX0FfUElOX0RJUkVDVElPTmBgKS5cbkBAIC01MDcsOSArNTA4LDkgQEAgYXMgd2VsbCBhcyBwYXJhbWV0ZXIgYmVpbmcgY29uZmlndXJlZCAoYGBEUExMX0FfTU9ERWBgKS5cbiBgYERQTExfQ01EX1BJTl9TRVRgYCAtIHRvIHRhcmdldCBhIHBpbiB1c2VyIG11c3QgcHJvdmlkZSBhXG4gYGBEUExMX0FfUElOX0lEYGAsIHdoaWNoIGlzIHVuaXF1ZSBpZGVudGlmaWVyIG9mIGEgcGluIGluIHRoZSBzeXN0ZW0uXG4gQWxzbyBjb25maWd1cmVkIHBpbiBwYXJhbWV0ZXJzIG11c3QgYmUgYWRkZWQuXG4tSWYgYGBEUExMX0FfUElOX0ZSRVFVRU5DWWBgIGlzIGNvbmZpZ3VyZWQsIHRoaXMgYWZmZWN0cyBhbGwgdGhlIGRwbGxcbi1kZXZpY2VzIHRoYXQgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBwaW4sIHRoYXQgaXMgd2h5IGZyZXF1ZW5jeSBhdHRyaWJ1dGVcbi1zaGFsbCBub3QgYmUgZW5jbG9zZWQgaW4gYGBEUExMX0FfUElOX1BBUkVOVF9ERVZJQ0VgYC5cbitJZiBgYERQTExfQV9QSU5fRlJFUVVFTkNZYGAgaXMgY29uZmlndXJlZCwgaXQgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgcGluXG4raXRzZWxmIGFuZCBhcHBsaWVzIHRvIGFsbCBkcGxsIGRldmljZXMgdGhlIHBpbiBpcyByZWdpc3RlcmVkIHdpdGgsIHNvIHRoZVxuK2ZyZXF1ZW5jeSBhdHRyaWJ1dGUgc2hhbGwgbm90IGJlIGVuY2xvc2VkIGluIGBgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFYGAuXG4gT3RoZXIgYXR0cmlidXRlczogYGBEUExMX0FfUElOX1BSSU9gYCwgYGBEUExMX0FfUElOX1NUQVRFYGAgb3JcbiBgYERQTExfQV9QSU5fRElSRUNUSU9OYGAgbXVzdCBiZSBlbmNsb3NlZCBpblxuIGBgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFYGAgYXMgdGhlaXIgY29uZmlndXJhdGlvbiByZWxhdGVzIHRvIG9ubHkgb25lXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jIGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG5pbmRleCBhZmIzMWMwMDQwMzgyLi5hOTA5Y2Q0NDUxYjAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG4rKysgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbkBAIC0xMDc5LDEwICsxMDc5LDkgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHU2NCBmcmVxID0gbmxhX2dldF91NjQoYSksIG9sZF9mcmVxO1xuLVx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkO1xuIFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xuK1x0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xuIFx0c3RydWN0IGRwbGxfZGV2aWNlICpkcGxsO1xuLVx0dW5zaWduZWQgbG9uZyBpO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghZHBsbF9waW5faXNfZnJlcV9zdXBwb3J0ZWQocGluLCBmcmVxKSkge1xuQEAgLTEwOTAsMjIgKzEwODksMTcgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoKCFvcHMtXHUwMDNlZnJlcXVlbmN5X3NldCB8fCAhb3BzLVx1MDAzZWZyZXF1ZW5jeV9nZXQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgcmVmLVx1MDAzZWRwbGwtXHUwMDNlbW9kdWxlID09IHBpbi1cdTAwM2Vtb2R1bGUgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2VjbG9ja19pZCA9PSBwaW4tXHUwMDNlY2xvY2tfaWQpIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4tXHRcdFx0XHQgICAgICAgXCJmcmVxdWVuY3kgc2V0IG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZVwiKTtcbi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXHRcdH1cbi1cdH1cbiBcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xuIFx0aWYgKCFyZWYpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFwiKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbitcdGlmICghb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQgfHwgIW9wcy1cdTAwM2VmcmVxdWVuY3lfZ2V0KSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJmcmVxdWVuY3kgc2V0IG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZVwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuIFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuIFx0cmV0ID0gb3BzLVx1MDAzZWZyZXF1ZW5jeV9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcbiBcdFx0XHRcdCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNm9sZF9mcmVxLCBleHRhY2spO1xuQEAgLTExMTYsNjggKzExMTAsNDIgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRpZiAoZnJlcSA9PSBvbGRfZnJlcSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbi1cdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4tXHRcdGlmICghb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbi1cdFx0XHRcdFx0IGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgZnJlcSwgZXh0YWNrKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdGZhaWxlZCA9IHJlZjtcbi1cdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcImZyZXF1ZW5jeSBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiV1XCIsXG4tXHRcdFx0XHRcdCAgIGRwbGwtXHUwMDNlaWQpO1xuLVx0XHRcdGdvdG8gcm9sbGJhY2s7XG4tXHRcdH1cbitcdHJldCA9IG9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG4rXHRcdFx0XHQgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBmcmVxLCBleHRhY2spO1xuK1x0aWYgKHJldCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldVwiLFxuK1x0XHRcdFx0ICAgZHBsbC1cdTAwM2VpZCk7XG4rXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGluKTtcbiBcbiBcdHJldHVybiAwO1xuLVxuLXJvbGxiYWNrOlxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlZnJlcXVlbmN5X3NldClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuLVx0XHRpZiAob3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbi1cdFx0XHRcdCAgICAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG9sZF9mcmVxLCBleHRhY2spKVxuLVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJzZXQgZnJlcXVlbmN5IHJvbGxiYWNrIGZhaWxlZFwiKTtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnRcbiBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4tXHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWYsICpmYWlsZWQ7XG4gXHRjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHM7XG4gXHRzdHJ1Y3QgZHBsbF9waW5fZXN5bmMgZXN5bmM7XG4gXHR1NjQgZnJlcSA9IG5sYV9nZXRfdTY0KGEpO1xuK1x0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xuIFx0c3RydWN0IGRwbGxfZGV2aWNlICpkcGxsO1xuIFx0Ym9vbCBzdXBwb3J0ZWQgPSBmYWxzZTtcbi1cdHVuc2lnbmVkIGxvbmcgaTtcbi1cdGludCByZXQ7XG4rXHRpbnQgcmV0LCBpO1xuIFxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoKCFvcHMtXHUwMDNlZXN5bmNfc2V0IHx8ICFvcHMtXHUwMDNlZXN5bmNfZ2V0KSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHJlZi1cdTAwM2VkcGxsLVx1MDAzZW1vZHVsZSA9PSBwaW4tXHUwMDNlbW9kdWxlIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgcmVmLVx1MDAzZWRwbGwtXHUwMDNlY2xvY2tfaWQgPT0gcGluLVx1MDAzZWNsb2NrX2lkKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuLVx0XHRcdFx0ICAgICAgIFwiZW1iZWRkZWQgc3luYyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcIik7XG4tXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLVx0XHR9XG4tXHR9XG4gXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcbiBcdGlmICghcmVmKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJwaW4gb3duZXIgZHBsbCBub3QgZm91bmRcIik7XG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuIFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4rXHRpZiAoIW9wcy1cdTAwM2Vlc3luY19zZXQgfHwgIW9wcy1cdTAwM2Vlc3luY19nZXQpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcImVtYmVkZGVkIHN5bmMgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4gXHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG4gXHRyZXQgPSBvcHMtXHUwMDNlZXN5bmNfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXG4gXHRcdFx0ICAgICBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNmVzeW5jLCBleHRhY2spO1xuQEAgLTExOTYsNDQgKzExNjQsMTcgQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuLVx0XHR2b2lkICpwaW5fZHBsbF9wcml2O1xuLVxuLVx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlZXN5bmNfc2V0KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG4tXHRcdHBpbl9kcGxsX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKTtcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZWVzeW5jX3NldChwaW4sIHBpbl9kcGxsX3ByaXYsIGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcbi1cdFx0XHRcdCAgICAgIGZyZXEsIGV4dGFjayk7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRmYWlsZWQgPSByZWY7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbi1cdFx0XHRcdFx0ICAgXCJlbWJlZGRlZCBzeW5jIGZyZXF1ZW5jeSBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiAldVwiLFxuLVx0XHRcdFx0XHQgICBkcGxsLVx1MDAzZWlkKTtcbi1cdFx0XHRnb3RvIHJvbGxiYWNrO1xuLVx0XHR9XG4rXHRyZXQgPSBvcHMtXHUwMDNlZXN5bmNfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXG4rXHRcdFx0ICAgICBkcGxsX3ByaXYoZHBsbCksIGZyZXEsIGV4dGFjayk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXG4rXHRcdFx0XHQgICBcImVtYmVkZGVkIHN5bmMgZnJlcXVlbmN5IHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6ICV1XCIsXG4rXHRcdFx0XHQgICBkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwaW4pO1xuIFxuIFx0cmV0dXJuIDA7XG4tXG4tcm9sbGJhY2s6XG4tXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbi1cdFx0dm9pZCAqcGluX2RwbGxfcHJpdjtcbi1cbi1cdFx0aWYgKHJlZiA9PSBmYWlsZWQpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoIW9wcy1cdTAwM2Vlc3luY19zZXQpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbi1cdFx0cGluX2RwbGxfcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pO1xuLVx0XHRpZiAob3BzLVx1MDAzZWVzeW5jX3NldChwaW4sIHBpbl9kcGxsX3ByaXYsIGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcbi1cdFx0XHRcdCAgIGVzeW5jLmZyZXEsIGV4dGFjaykpXG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInNldCBlbWJlZGRlZCBzeW5jIGZyZXF1ZW5jeSByb2xsYmFjayBmYWlsZWRcIik7XG4tXHR9XG4tXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50XG5AQCAtMTI0MSwxNCArMTE4MiwxMiBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgcmVmX3N5bmNfcGluX2lkeCxcbiBcdFx0XHQgICAgY29uc3QgZW51bSBkcGxsX3Bpbl9zdGF0ZSBzdGF0ZSxcbiBcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLVxuIHtcbi1cdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZiwgKmZhaWxlZDtcbiBcdGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcztcbiBcdGVudW0gZHBsbF9waW5fc3RhdGUgb2xkX3N0YXRlO1xuIFx0c3RydWN0IGRwbGxfcGluICpyZWZfc3luY19waW47XG4rXHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG4gXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGw7XG4tXHR1bnNpZ25lZCBsb25nIGk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmVmX3N5bmNfcGluID0geGFfZmluZChcdTAwMjZwaW4tXHUwMDNlcmVmX3N5bmNfcGlucywgXHUwMDI2cmVmX3N5bmNfcGluX2lkeCxcbkBAIC0xMjgyLDQyICsxMjIxLDIwIEBAIGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdH1cbiBcdGlmIChzdGF0ZSA9PSBvbGRfc3RhdGUpXG4gXHRcdHJldHVybiAwO1xuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoIW9wcy1cdTAwM2VyZWZfc3luY19zZXQpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZXJlZl9zeW5jX3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuLVx0XHRcdFx0XHRyZWZfc3luY19waW4sXG4tXHRcdFx0XHRcdGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgcmVmX3N5bmNfcGluKSxcbi1cdFx0XHRcdFx0c3RhdGUsIGV4dGFjayk7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRmYWlsZWQgPSByZWY7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgXCJyZWZlcmVuY2Ugc3luYyBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiV1XCIsXG4tXHRcdFx0XHRcdCAgIGRwbGwtXHUwMDNlaWQpO1xuLVx0XHRcdGdvdG8gcm9sbGJhY2s7XG4tXHRcdH1cbitcbitcdHJldCA9IG9wcy1cdTAwM2VyZWZfc3luY19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbitcdFx0XHRcdHJlZl9zeW5jX3BpbixcbitcdFx0XHRcdGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCByZWZfc3luY19waW4pLFxuK1x0XHRcdFx0c3RhdGUsIGV4dGFjayk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXG4rXHRcdFx0XHQgICBcInJlZmVyZW5jZSBzeW5jIHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXVcIixcbitcdFx0XHRcdCAgIGRwbGwtXHUwMDNlaWQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbik7XG4gXG4gXHRyZXR1cm4gMDtcbi1cbi1yb2xsYmFjazpcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuLVx0XHRpZiAocmVmID09IGZhaWxlZClcbi1cdFx0XHRicmVhaztcbi1cdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4tXHRcdGlmICghb3BzLVx1MDAzZXJlZl9zeW5jX3NldClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuLVx0XHRpZiAob3BzLVx1MDAzZXJlZl9zeW5jX3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuLVx0XHRcdFx0ICAgICAgcmVmX3N5bmNfcGluLFxuLVx0XHRcdFx0ICAgICAgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHJlZl9zeW5jX3BpbiksXG4tXHRcdFx0XHQgICAgICBvbGRfc3RhdGUsIGV4dGFjaykpXG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInNldCByZWZlcmVuY2Ugc3luYyByb2xsYmFjayBmYWlsZWRcIik7XG4tXHR9XG4tXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50XG5AQCAtMTQ3OCwxMSArMTM5NSwxMCBAQCBzdGF0aWMgaW50XG4gZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuLVx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkO1xuIFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xuIFx0czMyIHBoYXNlX2Fkaiwgb2xkX3BoYXNlX2FkajtcbitcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcbiBcdHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbDtcbi1cdHVuc2lnbmVkIGxvbmcgaTtcbiBcdGludCByZXQ7XG4gXG4gXHRwaGFzZV9hZGogPSBubGFfZ2V0X3MzMihwaGFzZV9hZGpfYXR0cik7XG5AQCAtMTQ5OSwyMSArMTQxNSwxNiBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbi1cdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4tXHRcdGlmICgoIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0IHx8ICFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X2dldCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2Vtb2R1bGUgPT0gcGluLVx1MDAzZW1vZHVsZSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHJlZi1cdTAwM2VkcGxsLVx1MDAzZWNsb2NrX2lkID09IHBpbi1cdTAwM2VjbG9ja19pZCkge1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJwaGFzZSBhZGp1c3Qgbm90IHN1cHBvcnRlZFwiKTtcbi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXHRcdH1cbi1cdH1cbiBcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xuIFx0aWYgKCFyZWYpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFwiKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbitcdGlmICghb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQgfHwgIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJwaGFzZSBhZGp1c3Qgbm90IHN1cHBvcnRlZFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuIFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuIFx0cmV0ID0gb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbiBcdFx0XHRcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNm9sZF9waGFzZV9hZGosXG5AQCAtMTUyNSw0MSArMTQzNiwxNyBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcbiBcdGlmIChwaGFzZV9hZGogPT0gb2xkX3BoYXNlX2FkailcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbi1cdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4tXHRcdGlmICghb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLFxuLVx0XHRcdFx0XHQgICAgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG4tXHRcdFx0XHRcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHBoYXNlX2Fkaixcbi1cdFx0XHRcdFx0ICAgIGV4dGFjayk7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRmYWlsZWQgPSByZWY7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbi1cdFx0XHRcdFx0ICAgXCJwaGFzZSBhZGp1c3Qgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldVwiLFxuLVx0XHRcdFx0XHQgICBkcGxsLVx1MDAzZWlkKTtcbi1cdFx0XHRnb3RvIHJvbGxiYWNrO1xuLVx0XHR9XG4rXHRyZXQgPSBvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuK1x0XHRcdFx0ICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgcGhhc2VfYWRqLCBleHRhY2spO1xuK1x0aWYgKHJldCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJwaGFzZSBhZGp1c3Qgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldVwiLFxuK1x0XHRcdFx0ICAgZHBsbC1cdTAwM2VpZCk7XG4rXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGluKTtcbiBcbiBcdHJldHVybiAwO1xuLVxuLXJvbGxiYWNrOlxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X3NldClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuLVx0XHRpZiAob3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbi1cdFx0XHRcdFx0ICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG9sZF9waGFzZV9hZGosXG4tXHRcdFx0XHRcdCAgZXh0YWNrKSlcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwic2V0IHBoYXNlIGFkanVzdCByb2xsYmFjayBmYWlsZWRcIik7XG4tXHR9XG4tXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5pbmRleCAwNDg4YWU2YWM0ODZjLi44M2JkMzAyN2RiYWExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbkBAIC0yNjMsOSArMjYzLDEwIEBAIHpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcmVmX3N5bmNfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4gXHR1OCBtb2RlLCByZWZfaWQsIHN5bmNfcmVmX2lkO1xuIFx0c3RydWN0IHpsMzA3M3hfY2hhbiBjaGFuO1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmIHJlZjtcbitcdGJvb2wgc3luY19udGYgPSBmYWxzZTtcbiBcdGludCByYztcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRtdXRleF9sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJlZl9pZCA9IHpsMzA3M3hfaW5wdXRfcGluX3JlZl9nZXQocGluLVx1MDAzZWlkKTtcbiBcdHN5bmNfcmVmX2lkID0gemwzMDczeF9pbnB1dF9waW5fcmVmX2dldChzeW5jX3Bpbi1cdTAwM2VpZCk7XG5AQCAtMjg1LDE3ICsyODYsMjAgQEAgemwzMDczeF9kcGxsX2lucHV0X3Bpbl9yZWZfc3luY19zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiBcdFx0aWYgKHN5bmNfZnJlcSBcdTAwM2UgODAwMCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiBcdFx0XHRcdCAgICAgICBcInN5bmMgZnJlcXVlbmN5IG11c3QgYmUgOCBrSHogb3IgbGVzc1wiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRyYyA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0aWYgKHJlZl9mcmVxIFx1MDAzYyAxMDAwKSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuIFx0XHRcdFx0ICAgICAgIFwiY2xvY2sgZnJlcXVlbmN5IG11c3QgYmUgMSBrSHogb3IgbW9yZVwiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRyYyA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0aWYgKHJlZl9mcmVxIFx1MDAzYz0gc3luY19mcmVxKSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuIFx0XHRcdFx0ICAgICAgIFwiY2xvY2sgZnJlcXVlbmN5IG11c3QgYmUgaGlnaGVyIHRoYW4gc3luYyBmcmVxdWVuY3lcIik7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0cmMgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXG4gXHRcdHpsMzA3M3hfcmVmX3N5bmNfcGFpcl9zZXQoXHUwMDI2cmVmLCBzeW5jX3JlZl9pZCk7XG5AQCAtMzA4LDIwICszMTIsNTQgQEAgemwzMDczeF9kcGxsX2lucHV0X3Bpbl9yZWZfc3luY19zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiBcbiBcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfc2V0KHpsZGV2LCByZWZfaWQsIFx1MDAyNnJlZik7XG4gXHRpZiAocmMpXG4tXHRcdHJldHVybiByYztcbitcdFx0Z290byB1bmxvY2s7XG4gXG4tXHQvKiBFeGNsdWRlIHN5bmMgc291cmNlIGZyb20gYXV0b21hdGljIHJlZmVyZW5jZSBzZWxlY3Rpb24gYnkgc2V0dGluZ1xuLVx0ICogaXRzIHByaW9yaXR5IHRvIE5PTkUuIE9uIGRpc2Nvbm5lY3QgdGhlIHByaW9yaXR5IGlzIGxlZnQgYXMgTk9ORVxuLVx0ICogYW5kIHRoZSB1c2VyIG11c3QgZXhwbGljaXRseSBtYWtlIHRoZSBwaW4gc2VsZWN0YWJsZSBhZ2Fpbi5cbitcdC8qIEFsbCBjb2RlIHBhdGhzIGFjY2Vzc2luZyBwZXItY2hhbm5lbCByZWZlcmVuY2UgcHJpb3JpdGllcyBhcmVcbitcdCAqIHNlcmlhbGl6ZWQgYnkgdGhlIHN1YnN5c3RlbSBkcGxsX2xvY2ssIHNvIGl0IGlzIHNhZmUgdG8gcmVsZWFzZVxuK1x0ICogb3VyIGxvY2sgaGVyZSBiZWZvcmUgaXRlcmF0aW5nIG92ZXIgdGhlIG90aGVyIGNoYW5uZWxzLlxuIFx0ICovXG4tXHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0aWYgKHN0YXRlICE9IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBUaGUgZGF0YXNoZWV0IHJlY29tbWVuZHMgZXhjbHVkaW5nIHRoZSBzeW5jIHNvdXJjZSBmcm9tIGF1dG9tYXRpY1xuK1x0ICogcmVmZXJlbmNlIHNlbGVjdGlvbiBieSBzZXR0aW5nIGl0cyBwcmlvcml0eSB0byBOT05FIG9uIGFsbCBEUExMXG4rXHQgKiBjaGFubmVscy4gVGhpcyBpcyBhZHZpc29yeSAtIHRoZSByZWYgc3luYyBwYWlyIGlzIGFscmVhZHlcbitcdCAqIGNvbmZpZ3VyZWQsIHNvIGEgZmFpbHVyZSBoZXJlIGlzIG5vdCBmYXRhbC4gT24gZGlzY29ubmVjdCB0aGVcbitcdCAqIHByaW9yaXR5IGlzIGxlZnQgYXMgTk9ORSBhbmQgdGhlIHVzZXIgbXVzdCBleHBsaWNpdGx5IG1ha2UgdGhlXG4rXHQgKiBwaW4gc2VsZWN0YWJsZSBhZ2Fpbi5cbitcdCAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeSh6bGRwbGwsIFx1MDAyNnpsZGV2LVx1MDAzZWRwbGxzLCBsaXN0KSB7XG4rXHRcdHU4IHByaW87XG4rXG4rXHRcdG11dGV4X2xvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuIFx0XHRjaGFuID0gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRcdHByaW8gPSB6bDMwNzN4X2NoYW5fcmVmX3ByaW9fZ2V0KFx1MDAyNmNoYW4sIHN5bmNfcmVmX2lkKTtcbitcdFx0aWYgKHByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKSB7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRjb250aW51ZTsgLyogUmVmIGlzIGFscmVhZHkgbm9uLXNlbGVjdGFibGUgKi9cbitcdFx0fVxuK1xuIFx0XHR6bDMwNzN4X2NoYW5fcmVmX3ByaW9fc2V0KFx1MDAyNmNoYW4sIHN5bmNfcmVmX2lkLFxuIFx0XHRcdFx0XHQgIFpMX0RQTExfUkVGX1BSSU9fTk9ORSk7XG4tXHRcdHJldHVybiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIFx1MDAyNmNoYW4pO1xuK1x0XHRpZiAoemwzMDczeF9jaGFuX3N0YXRlX3NldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBcdTAwMjZjaGFuKSlcbitcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgXCJGYWlsZWQgdG8gc2V0IHJlZiBwcmlvIG9uIERQTEwldVxcblwiLFxuK1x0XHRcdFx0IHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRcdGVsc2VcbitcdFx0XHRzeW5jX250ZiA9IHRydWU7XG4rXG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXHR9XG4rXHRpZiAoc3luY19udGYpXG4rXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihzeW5jX3Bpbi1cdTAwM2VkcGxsX3Bpbik7XG4gXG4gXHRyZXR1cm4gMDtcbit1bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIHJjO1xuIH1cbiBcbiBzdGF0aWMgaW50XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODoyMi41NTAzMzA0MTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk5NjM3MzgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERQTEwgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgdGhlIERQTEwgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYGRwbGxfbmV0bGluay5jYCBhbmQgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgc3RyZWFtbGluaW5nIGhvdyB3ZSBzZXQgcHJvcGVydGllcyBsaWtlIGZyZXF1ZW5jeSwgZXN5bmMsIHJlZl9zeW5jLCBhbmQgcGhhc2UgYWRqdXN0bWVudCBvbiBEUExMIHBpbnMuIEluc3RlYWQgb2YgaXRlcmF0aW5nIHRocm91Z2ggKmFsbCogRFBMTCBkZXZpY2VzIGNvbm5lY3RlZCB0byBhIHBpbiwgdGhlIGNvZGUgbm93IGZvY3VzZXMgb24ganVzdCB0aGUgXCJvd25lclwiIOKAkyB0aGUgZmlyc3QgRFBMTCBkZXZpY2UgdGhhdCdzIHJlZ2lzdGVyZWQgdG8gdGhlIHBpbiwgb2J0YWluZWQgZnJvbSBgZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbilgLlxuXG5JIG5lZWQgdG8gZGlnIGluIGEgYml0IGRlZXBlciwgbGV0J3MgbG9vayBhdCBgZHBsbF9uZXRsaW5rLmNgIGZpcnN0LiBTcGVjaWZpY2FsbHksIHRoZSBgZHBsbF9waW5fZnJlcV9zZXRgIGZ1bmN0aW9uLiBJIHNlZSB0aGV5J3ZlIHJlbW92ZWQgdGhlIGxvb3AgKGB4YV9mb3JfZWFjaGApIHRoYXQgdXNlZCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHJlZmVyZW5jZXMgKGByZWZgKSBhc3NvY2lhdGVkIHdpdGggYSBwaW4uICBJbnN0ZWFkLCB0aGV5IG5vdyBjYWxsIHRoZSBmcmVxdWVuY3kgc2V0dGluZyBmdW5jdGlvbiBkaXJlY3RseSBvbiB0aGUgYGRwbGxgIHRoYXQgYmVsb25ncyB0byB0aGUgYHJlZmAgdGhhdCBpcyBkZXRlcm1pbmVkIHRvIGJlIHRoZSBvd25lci4gVGhleSBhbHNvIGNoZWNrIHRoYXQgZnJlcXVlbmN5IHNldHRpbmcgYW5kIGdldHRpbmcgYXJlIHN1cHBvcnRlZC4gSXQgbWFrZXMgc2Vuc2UsIGZvY3VzaW5nIG9uIHRoZSBwaW4gb3duZXIuXG5cblRoZSBkb2N1bWVudGF0aW9uIGlzIGltcG9ydGFudC4gSXQgY2xhcmlmaWVzIHRoYXQgd2hlbiBhIHByb3BlcnR5IGlzIHNldCBvbiBhIHBpbiAobGlrZSBmcmVxdWVuY3kgdmlhIGBEUExMX0FfUElOX0ZSRVFVRU5DWWApLCBpdCdzIGludGVuZGVkIHRvIGFmZmVjdCAqYWxsKiBEUExMIGRldmljZXMgY29ubmVjdGVkIHRvIHRoYXQgcGluLiAgU28sIHRoZSBkcml2ZXIgZWl0aGVyIGhhcyB0byBiZSBtYWRlIHJlc3BvbnNpYmxlIGZvciBhcHBseWluZyB0aGUgc2V0IHRvIGFsbCBEUExMcyBvciB0aGUgc3Vic3lzdGVtIGp1c3QgY2FsbHMgdGhlIG9wIG9uIHRoZSBvd25lci4gTm93LCB0aGlzIGNoYW5nZSBjb3VsZCBiZSB2YWxpZCBiZWNhdXNlIGl0IHNlZW1zIGxpa2UgdGhlIHJlc3BvbnNpYmlsaXR5IGlzIHNoaWZ0aW5nLCBwZXJoYXBzIHRoZSBkcml2ZXIgbm93IG5lZWRzIHRvIHRha2UgY2FyZSBvZiB0aGUgXCJhcHBseSB0byBhbGxcIiBsb2dpYywgb3IgbWF5YmUgdGhlIHN1YnN5c3RlbSBqdXN0IGNhbGxzIHRoZSBvcGVyYXRvciBvbiB0aGUgZmlyc3QgcmVnaXN0ZXJlZCBEUExMLCBhbmQgdGhlIGRyaXZlciBoYW5kbGVzIGl0IGludGVybmFsbHkuIEl0IGRlcGVuZHMgb24gdGhlIGRlc2lnbi5cblxuSG9sZCBvbiwgSSBzZWUgdGhleSd2ZSBhbHNvIG1vZGlmaWVkIGB6bDMwNzN4X2RwbGxfaW5wdXRfcGluX3JlZl9zeW5jX3NldGAuIFRoaXMgbWFrZXMgbWUgdGhpbmsuIEFyZSB3ZSBydW5uaW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2hlcmUgdGhpcyBjb2RlIG1pZ2h0IGJlIHJlYWNoZWQ/ICBEUExMIGlzIGEgRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCwgc28gaXQgbXVzdCB1c2UgcGh5c2ljYWwgZGV2aWNlcy4gSXMgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBhIERQTEwgZHJpdmVyPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYGRyaXZlcnMvZHBsbC9gIGRpcmVjdG9yeSB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyB1bnVzdWFsLiBUaGlzIHJhaXNlcyB0aGUgcXVlc3Rpb24gb2YgaG93IHRoZSB2aXJ0dWFsaXplZCB3b3JsZCBpbnRlcmFjdHMgd2l0aCBoYXJkd2FyZS1zcGVjaWZpYyBjb21wb25lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjk2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6MzMuNTQ2NzA3NjM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvZHBsbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJkcGxsX2NvcmUuY1wiLFxuICAgIFwiZHBsbF9jb3JlLmhcIixcbiAgICBcImRwbGxfbmV0bGluay5jXCIsXG4gICAgXCJkcGxsX25ldGxpbmsuaFwiLFxuICAgIFwiZHBsbF9ubC5jXCIsXG4gICAgXCJkcGxsX25sLmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwiemwzMDczeFwiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjMzLjU0Njc2MDIxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTc4NDk0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBEUExMIERyaXZlciBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB6bDMwNzN4YCBkcml2ZXIgZm9yIHRoZSBNaWNyb3NlbWkgWkwzMDczeCBEUExMcy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IEkgYWx3YXlzIGxpa2UgdG8gZW5zdXJlIEkndmUgZ290IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgRFBMTCBkcml2ZXJzIGx1cmtpbmcgYXJvdW5kLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjb21tb25hbGl0eSBvZiBEUExMcyBpbiBuZXR3b3JraW5nIGNvbnRleHRzPyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBwb2tlIGFyb3VuZCBpbiB0aGUgb2J2aW91cyBwbGFjZTogYGRyaXZlcnMvbmV0L2V0aGVybmV0L2AuIFRoYXQgZGlyZWN0b3J5IGlzIGEgbG9naWNhbCBzdGFydGluZyBwb2ludDsgbG90cyBvZiBldGhlcm5ldCBkcml2ZXJzIGNvdWxkIHBvdGVudGlhbGx5IGluY29ycG9yYXRlIERQTEwgZnVuY3Rpb25hbGl0eSBmb3IgY2xvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCB0aGVyZSBiZWZvcmUgZHJhd2luZyBhbnkgY29uY2x1c2lvbnMuIE5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyB0aGF0IG1pZ2h0IGludGVyYWN0LCBvciBwcm92aWRlIGEgYmV0dGVyIG92ZXJhbGwgc29sdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NzQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6MzcuMjQ0NjEyNDc4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Njc5OTI2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBsbF9kZXZpY2VfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTU2OD1EZXZpY2Ugc2hvdWxkIGltcGxlbWVudCBzZXQgb2Ygb3BlcmF0aW9ucyBhbmQgcmVnaXN0ZXIgZGV2aWNlIHZpYVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdDo1Njk6ZHBsbF9kZXZpY2VfcmVnaXN0ZXIoKSBhdCB3aGljaCBwb2ludCBpdCBiZWNvbWVzIGF2YWlsYWJsZSB0byB0aGVcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QtNTcwLXVzZXJzLiBNdWx0aXBsZSBkcml2ZXIgaW5zdGFuY2VzIGNhbiBvYnRhaW4gcmVmZXJlbmNlIHRvIGl0IHdpdGhcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdD02MzQ9VGhlIHJlZ2lzdHJhdGlvbiBwYXJ0IGlzIHRoZW4gbG9va3MgbGlrZSB0aGlzIHBhcnQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QtNjQ1LVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdDo2NDY6ICAgICAgICBlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihicC1cXHUwMDNlZHBsbCwgRFBMTF9UWVBFX1BQUywgXFx1MDAyNmRwbGxfb3BzLCBicCk7XFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTY0Ny0gICAgICAgIGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9NDQ4PWRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maW5kKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjAtLyoqXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ2MTogKiBkcGxsX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVyIHRoZSBkcGxsIGRldmljZSBpbiB0aGUgc3Vic3lzdGVtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2Mi0gKiBAZHBsbDogcG9pbnRlciB0byBhIGRwbGxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NzMtICovXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ3NDppbnQgZHBsbF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBlbnVtIGRwbGxfdHlwZSB0eXBlLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NzUtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKm9wcywgdm9pZCAqcHJpdilcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTctfVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MTg6RVhQT1JUX1NZTUJPTF9HUEwoZHBsbF9kZXZpY2VfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTktXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTkzMD16bDMwNzN4X2RwbGxfcGluc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTk4MC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTk4MTogKiB6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTk4Mi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xOTg4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTk4OTp6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTk5MC17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAwNy1cXHR6bGRwbGwtXFx1MDAzZXR5cGUgPSB6bDMwNzN4X3Byb3BfZHBsbF90eXBlX2dldCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjIwMDg6XFx0cmMgPSBkcGxsX2RldmljZV9yZWdpc3Rlcih6bGRwbGwtXFx1MDAzZWRwbGxfZGV2LCB6bGRwbGwtXFx1MDAzZXR5cGUsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMDktXFx0XFx0XFx0XFx0ICBcXHUwMDI2emxkcGxsLVxcdTAwM2VvcHMsIHpsZHBsbCk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAyMi0gKiBVbnJlZ2lzdGVycyBnaXZlbiBEUExMIGRldmljZSBmcm9tIERQTEwgc3ViLXN5c3RlbSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjAyMzogKiBieSBAemwzMDczeF9kcGxsX2RldmljZV9yZWdpc3Rlci5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAyNC0gKi9cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0yNDQ4PXpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ1MS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjQ1MjpcXHRyYyA9IHpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIoemxkcGxsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ1My1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00MTk0PWljZV9kcGxsX2luaXRfZHBsbChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsICpkLCBib29sIGNndSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMTUtXFx0XFx0XFx0aWNlX2RwbGxfdXBkYXRlX3N0YXRlKHBmLCBkLCB0cnVlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MjE2OlxcdFxcdHJldCA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKGQtXFx1MDAzZWRwbGwsIHR5cGUsIG9wcywgZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIxNy1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jPTQyMD1zdGF0aWMgaW50IG1seDVfZHBsbF9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmMtNDUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmM6NDUyOlxcdGVyciA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKG1kcGxsLVxcdTAwM2VkcGxsLCBEUExMX1RZUEVfRUVDLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmMtNDUzLVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtbHg1X2RwbGxfZGV2aWNlX29wcywgbWRwbGwpO1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTUwNTk9cHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxMjQtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjUxMjU6XFx0ZXJyID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoYnAtXFx1MDAzZWRwbGwsIERQTExfVFlQRV9QUFMsIFxcdTAwMjZkcGxsX29wcywgYnApO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTI2LVxcdGlmIChlcnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RwbGwuaD0yODA9dm9pZCBkcGxsX2RldmljZV9wdXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpO1xcbmluY2x1ZGUvbGludXgvZHBsbC5oLTI4MS1cXG5pbmNsdWRlL2xpbnV4L2RwbGwuaDoyODI6aW50IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZW51bSBkcGxsX3R5cGUgdHlwZSxcXG5pbmNsdWRlL2xpbnV4L2RwbGwuaC0yODMtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKm9wcywgdm9pZCAqcHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjM5LjAxMjYwOTk4NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0NzMyMDIyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRFBMTCBEcml2ZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBEUExMIGRldmljZSBkcml2ZXJzOiBgemwzMDczeGAsIGBpY2VgLCBgbWx4NWAsIGFuZCBgcHRwX29jcGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IHRoZXNlIGFyZSBhbGwgdGFyZ2V0aW5nIGFjdHVhbCBoYXJkd2FyZS4gVGhlcmUncyBub3RoaW5nIGhlcmUgdGhhdCBzY3JlYW1zIFwic29mdHdhcmUgZW11bGF0aW9uLlwiXG5cbk5vdywgYSBxdWVzdGlvbiBpcyBwb3BwaW5nIGludG8gbXkgaGVhZDogY2FuIEkgZ2V0IHRvIGBkcGxsX3Bpbl9mcmVxX3NldGAgc29tZWhvdyB3aXRob3V0IGdvaW5nIHRocm91Z2ggYSByZWdpc3RlcmVkIERQTEwgZGV2aWNlPyBUaGlua2luZyBpdCBvdmVyLCBpdCBkb2VzbuKAmXQgc2VlbSBwb3NzaWJsZSBzaW5jZSB0aGVzZSBuZXRsaW5rIGNvbW1hbmRzIHJlbHkgb24gYWxyZWFkeSByZWdpc3RlcmVkIGRldmljZXMgYW5kIHBpbnMuIEkgY2Fu4oCZdCBzZWUgYSByb3V0ZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBhIGtub3duIGVudHJ5IHBvaW50LlxuXG5Pa2F5LCBzbyBjYW4gSSAqY3JlYXRlKiBhIERQTEwgZGV2aWNlIHVzaW5nIG5ldGxpbms/IFRoZSBhbnN3ZXIgaXMgbGlrZWx5IG5vLiBEcml2ZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgdGhvc2UgRFBMTCBkZXZpY2VzLiBTbywgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBraW5kIG9mIG1vY2sgb3IgZHVtbXkgZHJpdmVyLiBMZXQncyBkaWcgaW50byB0aGF0IGBkcml2ZXJzL2RwbGwvYCBkaXJlY3RvcnkgYW5kIHNlZSB3aGF0J3MgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODAzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjQ4LjQ4NTgxNTQxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL2RwbGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiZHBsbF9jb3JlLmNcIixcbiAgICBcImRwbGxfY29yZS5oXCIsXG4gICAgXCJkcGxsX25ldGxpbmsuY1wiLFxuICAgIFwiZHBsbF9uZXRsaW5rLmhcIixcbiAgICBcImRwbGxfbmwuY1wiLFxuICAgIFwiZHBsbF9ubC5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IFtcbiAgICBcInpsMzA3M3hcIlxuICBdXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODo0OC40ODU5MDE5MjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjkxOTE5ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGB6bDMwNzN4YCBEcml2ZXIqKlxuXG5Pa2F5LCBubyBuZWVkIHRvIHdhc3RlIHRpbWUgc2V0dGluZyB1cCBhIG1vY2sgZHJpdmVyOyB0aGF0J3Mgbm90IHRoZSBkaXJlY3Rpb24gSSBuZWVkIHRvIGdvIGluIHJpZ2h0IG5vdy4gV2FpdCBhIG1pbnV0ZeKApiBgemwzMDczeGAgLSBpc24ndCB0aGF0IGFuIFNQSS9JMkMgZGV2aWNlPyBSaWdodCwgaXQgaXMhIFRoZSBjcml0aWNhbCBxdWVzdGlvbiB0aGVuIGlzLCBjYW4gSSBpbnN0YW50aWF0ZSBpdCBkaXJlY3RseSB3aXRoaW4gYSB2aXJ0dWFsIG1hY2hpbmUgZW52aXJvbm1lbnQgdXNpbmcgc3lzZnMgb3IgZGV2aWNlIHRyZWU/IFRoYXQncyB0aGUga2V5IHRvIGVmZmljaWVudCB0ZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIGhhcmR3YXJlIHdpbGwgYmUgaW5zdGFudGlhdGVkLlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGFjdHVhbCBkcml2ZXIgc291cmNlIGNvZGUuIFRpbWUgdG8gZXhhbWluZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgdGhlIHdheSB0aGlzIGRldmljZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGlzIGRlZmluZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGluaXRpYWxpemVkLCBjb25maWd1cmVkLCBhbmQgaG93IHRoZSBpbnRlcmZhY2Ugd2l0aCBTUEkvSTJDIGlzIGhhbmRsZWQuIFRoYXQgc2hvdWxkIHRlbGwgbWUgd2hldGhlciB2aXJ0dWFsIGluc3RhbnRpYXRpb24gaXMgZXZlbiBmZWFzaWJsZSwgYW5kIGlmIHNvLCBob3cgdG8gZ2V0IGl0IHdvcmtpbmcgZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzU0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjUyLjc3NzgyNDQxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTE0NzA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bDMwNzN4X2kyY19kcml2ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9NDY9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgemwzMDczeF9pMmNfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTQ3LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjQ4OnN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB6bDMwNzN4X2kyY19kcml2ZXIgPSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNDktXFx0LmRyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTU1LX07XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6NTY6bW9kdWxlX2kyY19kcml2ZXIoemwzMDczeF9pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6NTQuMzk2OTc2NDA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjUxNDE0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJMkMgRHJpdmVyIGluIGEgVmlydHVhbCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYW4gSTJDIGRyaXZlci4gUmlnaHQsIEkga25vdyBJIGNhbiBpbnN0YW50aWF0ZSBJMkMgZGV2aWNlcyB3aXRoaW4gUUVNVSBvciBHQ0UgdXNpbmcgc3lzZnMsIHNwZWNpZmljYWxseSB0aGUgYG5ld19kZXZpY2VgIGZlYXR1cmUgb24gYW4gSTJDIGFkYXB0ZXIuIFRoaW5ncyBsaWtlIGBpMmMtc3R1YmAgb3IgZXZlbiBgaTJjLWR1bW15YCBhcmUgcGVyZmVjdCBmb3IgdGhhdC4gQnV0IGhlcmUncyB3aGVyZSBJIG5lZWQgdG8gcGF1c2UgYW5kIHRoaW5rIGNyaXRpY2FsbHkuIE15IGNvbmNlcm4gaXMgdGhpczogZG9lcyB0aGUgYHpsMzA3M3hgIGRyaXZlciwgd2hhdGV2ZXIgaXQgaXMsIGFjdHVhbGx5IGF0dGVtcHQgYW55ICpoYXJkd2FyZSogYWNjZXNzIGR1cmluZyBpdHMgcHJvYmUgc2VxdWVuY2U/IElmIGl0IGRvZXMsIHRoZW4gdXNpbmcgYSBkdW1teSBJMkMgZGV2aWNlLCBob3dldmVyIGNvbnZlbmllbnQsIHdpbGwgbGlrZWx5IGZhaWwuIEl0J3MgYSBrZXkgcG9pbnQgdGhhdCBJIGNhbid0IG92ZXJsb29rLiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGB6bDMwNzN4X3Byb2JlYCAob3IgYSBmdW5jdGlvbiB3aXRoIGEgc2ltaWxhciBuYW1lIGlmIHRoYXQncyBub3QgZXhhY3RseSBpdCkgZG9lcywgYW5kIHdoYXQgcmVnaXN0ZXJzIGl0IGlzIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGR1cmluZyBpbml0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkxMCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODo1OS43MjIxMjAwNTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDc0Mjg4MzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjAxLjIyOTU1NTc0NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzIyMzAxNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGxhaWQgb3V0OlxuXG4qKkNoZWNraW5nIHRoZSBJMkMgRHJpdmVyIGZvciB0aGUgWkwzMDczeCoqXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBJMkMgZHJpdmVyIGltcGxlbWVudGF0aW9uIGZvciB0aGUgWkwzMDczeC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJMkMgY29tbXVuaWNhdGlvbiBpcyBoYW5kbGVkIGJlY2F1c2UsIGluIG15IGV4cGVyaWVuY2UsIHRoYXQncyBvZnRlbiBhIGtleSBhcmVhIGZvciBkZWJ1Z2dpbmcgYW5kIG9wdGltaXphdGlvbi4gVGhlIHNwZWNpZmljIGZpbGUgSSdtIHRhcmdldGluZyBpcyBgZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmNgLiBUaGlzIHRlbGxzIG1lIGltbWVkaWF0ZWx5IHdoZXJlIHRvIGxvb2sgd2l0aGluIHRoZSBjb2RlIGJhc2UuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlIFpMMzA3M3ggb3ZlciB0aGUgSTJDIGJ1cywgcG90ZW50aWFsbHkgaW5jbHVkaW5nIHRoaW5ncyBsaWtlIGFkZHJlc3MgZGVmaW5pdGlvbnMsIHJlZ2lzdGVyIG1hcHMsIGFuZCBlcnJvciBoYW5kbGluZyBmb3IgSTJDIHRyYW5zYWN0aW9ucy4gVGhpcyBmaWxlIGlzIG15IHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIEkyQyBjb21tdW5pY2F0aW9uIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjY3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6MDQuOTUxODU5NDQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pMmMuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcImNvcmUuaFxcXCJcXG4gIDEwOlxcdFxcbiAgMTE6XFx0c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbiAgMTI6XFx0e1xcbiAgMTM6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2O1xcbiAgMTQ6XFx0XFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldjtcXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0emxkZXYgPSB6bDMwNzN4X2Rldm1fYWxsb2MoZGV2KTtcXG4gIDE3OlxcdFxcdGlmIChJU19FUlIoemxkZXYpKVxcbiAgMTg6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoemxkZXYpO1xcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHR6bGRldi1cXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCBcXHUwMDI2emwzMDczeF9yZWdtYXBfY29uZmlnKTtcXG4gIDIxOlxcdFxcdGlmIChJU19FUlIoemxkZXYtXFx1MDAzZXJlZ21hcCkpXFxuICAyMjpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoemxkZXYtXFx1MDAzZXJlZ21hcCksXFxuICAyMzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSByZWdtYXBcXFxcblxcXCIpO1xcbiAgMjQ6XFx0XFxuICAyNTpcXHRcXHRyZXR1cm4gemwzMDczeF9kZXZfcHJvYmUoemxkZXYpO1xcbiAgMjY6XFx0fVxcbiAgMjc6XFx0XFxuICAyODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgemwzMDczeF9pMmNfaWRbXSA9IHtcXG4gIDI5OlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczMVxcXCIgfSxcXG4gIDMwOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczMlxcXCIgfSxcXG4gIDMxOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczM1xcXCIgfSxcXG4gIDMyOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczNFxcXCIgfSxcXG4gIDMzOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczNVxcXCIgfSxcXG4gIDM0OlxcdFxcdHsgLyogc2VudGluZWwgKi8gfVxcbiAgMzU6XFx0fTtcXG4gIDM2OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB6bDMwNzN4X2kyY19pZCk7XFxuICAzNzpcXHRcXG4gIDM4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHpsMzA3M3hfaTJjX29mX21hdGNoW10gPSB7XFxuICAzOTpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1pY3JvY2hpcCx6bDMwNzMxXFxcIiB9LFxcbiAgNDA6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtaWNyb2NoaXAsemwzMDczMlxcXCIgfSxcXG4gIDQxOlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWljcm9jaGlwLHpsMzA3MzNcXFwiIH0sXFxuICA0MjpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1pY3JvY2hpcCx6bDMwNzM0XFxcIiB9LFxcbiAgNDM6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtaWNyb2NoaXAsemwzMDczNVxcXCIgfSxcXG4gIDQ0OlxcdFxcdHsgLyogc2VudGluZWwgKi8gfVxcbiAgNDU6XFx0fTtcXG4gIDQ2OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHpsMzA3M3hfaTJjX29mX21hdGNoKTtcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcXG4gIDQ5OlxcdFxcdC5kcml2ZXIgPSB7XFxuICA1MDpcXHRcXHRcXHQubmFtZSA9IFxcXCJ6bDMwNzN4LWkyY1xcXCIsXFxuICA1MTpcXHRcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSB6bDMwNzN4X2kyY19vZl9tYXRjaCxcXG4gIDUyOlxcdFxcdH0sXFxuICA1MzpcXHRcXHQucHJvYmUgPSB6bDMwNzN4X2kyY19wcm9iZSxcXG4gIDU0OlxcdFxcdC5pZF90YWJsZSA9IHpsMzA3M3hfaTJjX2lkLFxcbiAgNTU6XFx0fTtcXG4gIDU2OlxcdG1vZHVsZV9pMmNfZHJpdmVyKHpsMzA3M3hfaTJjX2RyaXZlcik7XFxuICA1NzpcXHRcXG4gIDU4OlxcdE1PRFVMRV9BVVRIT1IoXFxcIkl2YW4gVmVjZXJhIFxcdTAwM2NpdmVjZXJhQHJlZGhhdC5jb21cXHUwMDNlXFxcIik7XFxuICA1OTpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1pY3JvY2hpcCBaTDMwNzN4IEkyQyBkcml2ZXJcXFwiKTtcXG4gIDYwOlxcdE1PRFVMRV9JTVBPUlRfTlMoXFxcIlpMMzA3M1hcXFwiKTtcXG4gIDYxOlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6MDQuOTUxOTM5MDEzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NTEzNTUzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgUHJvYmUgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGB6bDMwNzN4X2Rldl9wcm9iZWAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIGluaXRpYWwgZGV2aWNlIGRldGVjdGlvbiBhbmQgc2V0dXAuIFdlIGFsbCBrbm93IGhvdyBjcml0aWNhbCB0aGlzIGZ1bmN0aW9uIGlzOyBpdCdzIHRoZSBnYXRla2VlcGVyLCB0aGUgZmlyc3QgbGluZSBvZiBkZWZlbnNlIGFnYWluc3QgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gbmlnaHRtYXJlcy4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcsIHRoZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGVycm9yIGhhbmRsaW5nLiBJcyBpdCBmb2xsb3dpbmcgYmVzdCBwcmFjdGljZXMgZm9yIGRyaXZlciBkZXZlbG9wbWVudCwgb3IgYXJlIHdlIGdvaW5nIHRvIGJlIGNoYXNpbmcgZG93biBvYnNjdXJlIGhhcmR3YXJlIHF1aXJrcyBsYXRlcj8gSSB3YW50IHRvIHNlZSBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBJMkMgb3IgU1BJIGludGVyZmFjZSAob3Igd2hhdGV2ZXIgaXQncyB1c2luZyksIGlmIGl0J3MgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBpbnRlcnJ1cHQgc2V0dXAsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBpZiBpdCBpcyBkb2luZyBhbGwgb2YgdGhpcyBzYWZlbHkuIEFueSBvYnZpb3VzIGNvbmN1cnJlbmN5IGlzc3Vlcz8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gcmVzb3VyY2UgYWNjZXNzPyBHb3R0YSBiZSB0aG9yb3VnaC4gVGhpcyBwcm9iZSBmdW5jdGlvbiBkZXRlcm1pbmVzIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgZW50aXJlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NzksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjExLjYwMzI5NjY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ4MTk3OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfZGV2X3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05MjY9emwzMDczeF9kZXZtX2RwbGxfaW5pdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk3My0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTc0OiAqIHpsMzA3M3hfZGV2X3Byb2JlIC0gaW5pdGlhbGl6ZSB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05NzUtICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTgwLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5ODE6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk4Mi17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTA1My19XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjEwNTQ6RVhQT1JUX1NZTUJPTF9OU19HUEwoemwzMDczeF9kZXZfcHJvYmUsIFxcXCJaTDMwNzNYXFxcIik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwNTUtXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg9OTY9c3RydWN0IHpsMzA3M3hfZGV2ICp6bDMwNzN4X2Rldm1fYWxsb2Moc3RydWN0IGRldmljZSAqZGV2KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg6OTc6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaC05OC1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jPTExPXN0YXRpYyBpbnQgemwzMDczeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTI0LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjI1OlxcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjYtfVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmMtMjQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM6MjU6XFx0cmV0dXJuIHpsMzA3M3hfZGV2X3Byb2JlKHpsZGV2KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zcGkuYy0yNi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjEzLjE1MTUwMDE3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzQyMTY5OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHpsMzA3M3hfZGV2X3Byb2JlYCwgYXMgSSB1bmRlcnN0YW5kIGl0OlxuXG4qKkFuYWx5emluZyB0aGUgYHpsMzA3M3hfZGV2X3Byb2JlYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB3ZSdyZSBsb29raW5nIGF0IGB6bDMwNzN4X2Rldl9wcm9iZWAuIFRoYXQgbWVhbnMgd2UncmUgaW4gdGhlIHJlYWxtIG9mIGRldmljZSBwcm9iaW5nLCBhbmQgaXQncyBzcGVjaWZpY2FsbHkgZm9yIGEgYHpsMzA3M3hgIGRldmljZSwgd2hpY2ggSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgb2YuIEknbSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIGF0dGVtcHRzIHRvIGlkZW50aWZ5LCBpbml0aWFsaXplLCBhbmQgcmVnaXN0ZXIgYSBuZXcgYHpsMzA3M3hgIGRldmljZSB0aGF0J3MgYmVlbiBwbHVnZ2VkIGluIG9yIGlzIG90aGVyd2lzZSBiZWNvbWluZyBhdmFpbGFibGUuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKlJlc291cmNlIGFsbG9jYXRpb24qKjogSG93IGFyZSB0aGV5IGdldHRpbmcgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMsIGxpa2UgbWVtb3J5IHJlZ2lvbnMsIElSUXMsIEkyQyBvciBTUEkgYnVzZXMsIGV0Yy4/IEkgd2FudCB0byBzZWUgaWYgdGhleSBhcmUgdXNpbmcgYW55IHBsYXRmb3JtLXNwZWNpZmljIG1lY2hhbmlzbXMgb3IgaWYgdGhlcmUncyBhIG1vcmUgZ2VuZXJpYyBhcHByb2FjaC4gQW55IHVudXN1YWwgYXBwcm9hY2hlcyBoZXJlIHdvdWxkIGJlIGludGVyZXN0aW5nLlxuKiAgICoqRGV2aWNlIGlkZW50aWZpY2F0aW9uKio6IEhvdyBpcyB0aGUgZHJpdmVyIHZlcmlmeWluZyB0aGUgZGV2aWNlIGlzICphY3R1YWxseSogYSBgemwzMDczeGA/IEFyZSB0aGV5IGNoZWNraW5nIGEgZGV2aWNlIElEIHJlZ2lzdGVyPyBWZW5kb3Itc3BlY2lmaWMgbWFnaWM/IEknbSBrZWVuIHRvIHNlZSB0aGUgYXBwcm9hY2ggYW5kIGFueSBwb3RlbnRpYWwgZm9yIHJvYnVzdG5lc3MgaXNzdWVzLlxuKiAgICoqSW5pdGlhbGl6YXRpb24gc2VxdWVuY2UqKjogV2hhdCBzdGVwcyBhcmUgdGFrZW4gdG8gZ2V0IHRoZSBkZXZpY2UgcmVhZHkgZm9yIHVzZT8gVGhpcyBjb3VsZCBpbmNsdWRlIHBvd2VyLXVwIHNlcXVlbmNlcywgcmVnaXN0ZXIgd3JpdGVzLCBjbG9jayBjb25maWd1cmF0aW9uLCBhbmQgcG9zc2libHkgZmlybXdhcmUgbG9hZGluZy4gSSdsbCBiZSBsb29raW5nIGF0IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLCBwYXlpbmcgYXR0ZW50aW9uIHRvIGFueSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCB0aW1pbmcgY29uc3RyYWludHMuXG4qICAgKipEcml2ZXIgcmVnaXN0cmF0aW9uKio6IE9uY2UgdGhlIGRldmljZSBpcyByZWFkeSwgSSdsbCBiZSB3YXRjaGluZyB0byBzZWUgaG93IHRoZSBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIHRoZSBrZXJuZWwuIElzIGl0IHVzaW5nIHRoZSBzdGFuZGFyZCBkZXZpY2UgZHJpdmVyIG1vZGVsPyBBcmUgdGhlcmUgYW55IGN1c3RvbSBjYWxsYmFja3Mgb3Igc3RydWN0dXJlcz8gQW55IGN1c3RvbSBkYXRhIHN0cnVjdHVyZXMgb3IgaW50ZXJhY3Rpb25zIHdpbGwgYmUgb2YgaW50ZXJlc3QuXG4qICAgKipFcnJvciBoYW5kbGluZyoqOiBXaGVyZSBhcmUgdGhlIGVycm9yIGNoZWNrcz8gV2hhdCBoYXBwZW5zIGlmIGFueSBvZiB0aGUgY3JpdGljYWwgc3RlcHMgZmFpbD8gSSB3YW50IHRvIGFzc2VzcyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgcHJvYmUgZnVuY3Rpb24gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgd2Vha25lc3Nlcy4gSSdtIGV4cGVjdGluZyB0aG9yb3VnaCBlcnJvciBoYW5kbGluZywgZXNwZWNpYWxseSB3aGVuIGludGVyYWN0aW5nIHdpdGggaGFyZHdhcmUuXG4qICAgKipDb25jdXJyZW5jeSoqOiBJJ2xsIGFsc28gZ2xhbmNlIHRvIHNlZSBpZiBhbnl0aGluZyBoZXJlIGlzIHN1c2NlcHRpYmxlIHRvIGNvbmN1cnJlbmN5IGlzc3VlcyBhcyBJIGtub3cgaGFyZHdhcmUgcHJvYmluZyBjYW4gb2Z0ZW4gaGF2ZSBzaGFyZWQgcmVzb3VyY2VzLlxuXG5Fc3NlbnRpYWxseSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEgZ2F0ZXdheS4gSXQgc2hvdWxkIGJlIG1ha2luZyBzdXJlIHRoYXQgdGhlIGRldmljZSBpcyBhY3R1YWxseSB0aGUgZGV2aWNlIHdlJ3JlIGV4cGVjdGluZywgYW5kIHRoZW4gZ2V0dGluZyBpdCByZWFkeSB0byBiZSB1c2VkIGJ5IHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBob3cgdGhleSd2ZSBkb25lIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU3OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjE5Ljg5MzY3MjYzOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk3NCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NzQ6XFx0ICogemwzMDczeF9kZXZfcHJvYmUgLSBpbml0aWFsaXplIHpsMzA3M3ggZGV2aWNlXFxuIDk3NTpcXHQgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4gOTc2OlxcdCAqXFxuIDk3NzpcXHQgKiBDb21tb24gaW5pdGlhbGl6YXRpb24gb2YgemwzMDczeCBkZXZpY2Ugc3RydWN0dXJlLlxcbiA5Nzg6XFx0ICpcXG4gOTc5OlxcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4gOTgwOlxcdCAqL1xcbiA5ODE6XFx0aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuIDk4MjpcXHR7XFxuIDk4MzpcXHRcXHR1MTYgaWQsIHJldmlzaW9uLCBmd192ZXI7XFxuIDk4NDpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4gOTg1OlxcdFxcdHUzMiBjZmdfdmVyO1xcbiA5ODY6XFx0XFx0aW50IHJjO1xcbiA5ODc6XFx0XFxuIDk4ODpcXHRcXHQvKiBSZWFkIGNoaXAgSUQgKi9cXG4gOTg5OlxcdFxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcXHUwMDI2aWQpO1xcbiA5OTA6XFx0XFx0aWYgKHJjKVxcbiA5OTE6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiA5OTI6XFx0XFxuIDk5MzpcXHRcXHQvKiBEZXRlY3QgY2hpcCB2YXJpYW50ICovXFxuIDk5NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKTsgaSsrKSB7XFxuIDk5NTpcXHRcXHRcXHRpZiAoemwzMDczeF9jaGlwX2lkc1tpXS5pZCA9PSBpZClcXG4gOTk2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA5OTc6XFx0XFx0fVxcbiA5OTg6XFx0XFxuIDk5OTpcXHRcXHRpZiAoaSA9PSBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpKVxcbjEwMDA6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgLUVOT0RFVixcXG4xMDAxOlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlVua25vd24gY2hpcCBJRDogMHglMDR4XFxcXG5cXFwiLCBpZCk7XFxuMTAwMjpcXHRcXG4xMDAzOlxcdFxcdHpsZGV2LVxcdTAwM2VpbmZvID0gXFx1MDAyNnpsMzA3M3hfY2hpcF9pZHNbaV07XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdC8qIFJlYWQgcmV2aXNpb24sIGZpcm13YXJlIHZlcnNpb24gYW5kIGN1c3RvbSBjb25maWcgdmVyc2lvbiAqL1xcbjEwMDY6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFxcdTAwMjZyZXZpc2lvbik7XFxuMTAwNzpcXHRcXHRpZiAocmMpXFxuMTAwODpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMTAwOTpcXHRcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19GV19WRVIsIFxcdTAwMjZmd192ZXIpO1xcbjEwMTA6XFx0XFx0aWYgKHJjKVxcbjEwMTE6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjEwMTI6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfQ1VTVE9NX0NPTkZJR19WRVIsIFxcdTAwMjZjZmdfdmVyKTtcXG4xMDEzOlxcdFxcdGlmIChyYylcXG4xMDE0OlxcdFxcdFxcdHJldHVybiByYztcXG4xMDE1OlxcdFxcbjEwMTY6XFx0XFx0ZGV2X2RiZyh6bGRldi1cXHUwMDNlZGV2LCBcXFwiQ2hpcElEKCVYKSwgQ2hpcFJldiglWCksIEZ3VmVyKCV1KVxcXFxuXFxcIiwgaWQsXFxuMTAxNzpcXHRcXHRcXHRyZXZpc2lvbiwgZndfdmVyKTtcXG4xMDE4OlxcdFxcdGRldl9kYmcoemxkZXYtXFx1MDAzZWRldiwgXFxcIkN1c3RvbSBjb25maWcgdmVyc2lvbjogJWx1LiVsdS4lbHUuJWx1XFxcXG5cXFwiLFxcbjEwMTk6XFx0XFx0XFx0RklFTERfR0VUKEdFTk1BU0soMzEsIDI0KSwgY2ZnX3ZlciksXFxuMTAyMDpcXHRcXHRcXHRGSUVMRF9HRVQoR0VOTUFTSygyMywgMTYpLCBjZmdfdmVyKSxcXG4xMDIxOlxcdFxcdFxcdEZJRUxEX0dFVChHRU5NQVNLKDE1LCA4KSwgY2ZnX3ZlciksXFxuMTAyMjpcXHRcXHRcXHRGSUVMRF9HRVQoR0VOTUFTSyg3LCAwKSwgY2ZnX3ZlcikpO1xcbjEwMjM6XFx0XFxuMTAyNDpcXHRcXHQvKiBHZW5lcmF0ZSByYW5kb20gY2xvY2sgSUQgYXMgdGhlIGRldmljZSBoYXMgbm90IHN1Y2ggcHJvcGVydHkgdGhhdFxcbjEwMjU6XFx0XFx0ICogY291bGQgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiBBIHVzZXIgY2FuIGxhdGVyIGNoYW5nZSB0aGlzIHZhbHVlXFxuMTAyNjpcXHRcXHQgKiB1c2luZyBkZXZsaW5rLlxcbjEwMjc6XFx0XFx0ICovXFxuMTAyODpcXHRcXHR6bGRldi1cXHUwMDNlY2xvY2tfaWQgPSBnZXRfcmFuZG9tX3U2NCgpO1xcbjEwMjk6XFx0XFxuMTAzMDpcXHRcXHQvKiBEZWZhdWx0IHBoYXNlIG9mZnNldCBhdmVyYWdpbmcgZmFjdG9yICovXFxuMTAzMTpcXHRcXHR6bGRldi1cXHUwMDNlcGhhc2VfYXZnX2ZhY3RvciA9IDI7XFxuMTAzMjpcXHRcXG4xMDMzOlxcdFxcdC8qIEluaXRpYWxpemUgbXV0ZXggZm9yIG9wZXJhdGlvbnMgd2hlcmUgbXVsdGlwbGUgcmVhZHMsIHdyaXRlc1xcbjEwMzQ6XFx0XFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXFxuMTAzNTpcXHRcXHQgKi9cXG4xMDM2OlxcdFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4xMDM3OlxcdFxcdGlmIChyYylcXG4xMDM4OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbjEwMzk6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbjEwNDA6XFx0XFxuMTA0MTpcXHRcXHQvKiBSZWdpc3RlciBEUExMIGNoYW5uZWxzICovXFxuMTA0MjpcXHRcXHRyYyA9IHpsMzA3M3hfZGV2bV9kcGxsX2luaXQoemxkZXYpO1xcbjEwNDM6XFx0XFx0aWYgKHJjKVxcbjEwNDQ6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjEwNDU6XFx0XFxuMTA0NjpcXHRcXHQvKiBSZWdpc3RlciB0aGUgZGV2bGluayBpbnN0YW5jZSBhbmQgcGFyYW1ldGVycyAqL1xcbjEwNDc6XFx0XFx0cmMgPSB6bDMwNzN4X2RldmxpbmtfcmVnaXN0ZXIoemxkZXYpO1xcbjEwNDg6XFx0XFx0aWYgKHJjKVxcbjEwNDk6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuMTA1MDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2bGluayBpbnN0YW5jZVxcXFxuXFxcIik7XFxuMTA1MTpcXHRcXG4xMDUyOlxcdFxcdHJldHVybiAwO1xcbjEwNTM6XFx0fVxcbjEwNTQ6XFx0RVhQT1JUX1NZTUJPTF9OU19HUEwoemwzMDczeF9kZXZfcHJvYmUsIFxcXCJaTDMwNzNYXFxcIik7XFxuMTA1NTpcXHRcXG4xMDU2OlxcdE1PRFVMRV9BVVRIT1IoXFxcIkl2YW4gVmVjZXJhIFxcdTAwM2NpdmVjZXJhQHJlZGhhdC5jb21cXHUwMDNlXFxcIik7XFxuMTA1NzpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1pY3JvY2hpcCBaTDMwNzN4IGNvcmUgZHJpdmVyXFxcIik7XFxuMTA1ODpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjE5Ljg5Mzc4ODIxOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mjk4MDAxMjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgSTJDIERldmljZSBQcm9iaW5nIGFuZCBNb2NraW5nIFBvc3NpYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHByb2JlIGZ1bmN0aW9uLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0IHJlYWRzIGEgY2hpcCBJRCBmcm9tIHRoZSBJMkMgZGV2aWNlLiBJZiBpdCBnZXRzIGEgdmFsaWQgSUQsIGl0IG1vdmVzIG9uOyBvdGhlcndpc2UsIGl0IGVycm9ycyBvdXQuIFRoZSBjcnVjaWFsIHRoaW5nIGlzIHRoYXQgdGhpcyBlYXJseSByZWFkIGlzIGdvaW5nIHRvIGJlIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgdGhlIGRyaXZlciB0byBldmVuICpzdGFydCouXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHRoaXMgYmUgbW9ja2VkIHdpdGhpbiBRRU1VPyBBbG1vc3QgY2VydGFpbmx5IG5vdCwgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWFsaXplZCBRRU1VIGRldmljZSBtb2RlbCBmb3IgdGhlIHpsMzA3M3gsIHdoaWNoIGlzIGhpZ2hseSB1bmxpa2VseS4gVGhhdCdzIGEgbmljaGUgcGFydC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gdGhpbmsgbW9yZSBjcmVhdGl2ZWx5LlxuXG5UaGVuIG15IGJyYWluIGRhcnRzIHRvIHN5emthbGxlciBhbmQgaXRzIGNhcGFiaWxpdGllcyBmb3IgbW9ja2luZy4gQ2FuIEkgdXNlIHNvbWV0aGluZyBsaWtlIGBpMmMtc3R1YmAgb3IgYGkyYy1kdW1teWA/IE5vLCBgaTJjLXN0dWJgIGhhcyBsaW1pdGF0aW9uczsgaXQgc2VlbXMgdG8gZWl0aGVyIG9ubHkgc3VwcG9ydCBhIGhhbmRmdWwgb2Ygc3BlY2lmaWMgY2hpcHMgb3IgcmVsaWVzIG9uIHN5c2ZzLWJhc2VkIHJlZ2lzdGVyIGludGVyYWN0aW9uLiBBbmQgdGhlIHpsMzA3M3ggaXMgZGVmaW5pdGVseSAqbm90KiBwcmUtcHJvZ3JhbW1lZCBpbnRvIGBpMmMtc3R1YmAncyBrbm93biBsaXN0LiBVbmxlc3Mgc3l6a2FsbGVyIGhhcyBzb21lIHNwZWNpYWwgc2F1Y2UgZm9yIGluamVjdGluZyBJMkMgcmVzcG9uc2VzLCB3aGljaCBpc24ndCBzdGFuZGFyZCwgdGhpcyBpcyBnb2luZyB0byBiZSBhIGRlYWQgZW5kIGZvciBhIHNpbXBsZSBtb2NrLlxuXG5Ob3cgSSdtIHRyeWluZyB0byByZWNhbGwgdGhlIHBhdHRlcm5zLiBXaXRoIFVTQiBkZXZpY2VzLCB3aWZpLCBhbmQgbmV0d29yayBpbnRlcmZhY2VzLCB0aGVyZSBhcmUgXCJzaW1cIiBkZXZpY2VzIGluIHN5emthbGxlci4gRG9lcyB0aGUgSTJDIGVjb3N5c3RlbSBoYXZlIGEgY291bnRlcnBhcnQ/IFByb2JhYmx5IG5vdC4gVGhlIHByb2JsZW0gd2l0aCBJMkMgaXMgaXQgaXMgc28gdGllZCB0byBzcGVjaWZpYyBoYXJkd2FyZS4gSSdtIGFsbW9zdCBjZXJ0YWluIGBpMmMtc3R1YmAgaXMganVzdCBhIGJhc2ljIFNNQnVzIHN0dWIsIG5vdCBhIGdlbmVyYWwtcHVycG9zZSBtb2NraW5nIHRvb2wuXG5cbk15IHRob3VnaHRzIGFyZSBub3cgdHVybmluZyB0b3dhcmRzIHVucmVsYXRlZCBwaWVjZXMgb2YgdGhlIHB1enpsZSAtIHRob3NlIGNoYW5nZXMgaW4gYGRwbGxfbmV0bGluay5jYC4gSSBoYXZlIHRvIHN0ZXAgYmFjayBhbmQgcmVtZW1iZXIgd2hhdCB0aGVzZSBmaWxlcyBhcmUgYWJvdXQuIFRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIHRoZSBjb3JlIERQTEwgc3Vic3lzdGVtLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwgdG8gbXkgcHJvamVjdCEgVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIEkgY2FuIHJlYWNoIHRoZSBEUExMIHN1YnN5c3RlbSB3aXRob3V0IGFueSBwaHlzaWNhbCBkZXZpY2UuIEl0IG1heSBiZSBwb3NzaWJsZSBpZiBvdGhlciBkcml2ZXJzIHJlZ2lzdGVyIERQTEwgZGV2aWNlcy4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLiBJIG5lZWQgdG8gY2hlY2sgaWYgYW55IG90aGVyIGRyaXZlcnMgd2lsbCByZWdpc3RlciBhIERQTEwgZGV2aWNlIGluIHRoZSBhYnNlbmNlIG9mIHRoZSB6bDMwNzN4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY1MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjI5LjE5MTc5MTI5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2OTI1NjY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX2RldmljZV9yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q9NTY4PURldmljZSBzaG91bGQgaW1wbGVtZW50IHNldCBvZiBvcGVyYXRpb25zIGFuZCByZWdpc3RlciBkZXZpY2UgdmlhXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0OjU2OTpkcGxsX2RldmljZV9yZWdpc3RlcigpIGF0IHdoaWNoIHBvaW50IGl0IGJlY29tZXMgYXZhaWxhYmxlIHRvIHRoZVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC01NzAtdXNlcnMuIE11bHRpcGxlIGRyaXZlciBpbnN0YW5jZXMgY2FuIG9idGFpbiByZWZlcmVuY2UgdG8gaXQgd2l0aFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTYzND1UaGUgcmVnaXN0cmF0aW9uIHBhcnQgaXMgdGhlbiBsb29rcyBsaWtlIHRoaXMgcGFydDpcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC02NDUtXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0OjY0NjogICAgICAgIGVyciA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKGJwLVxcdTAwM2VkcGxsLCBEUExMX1RZUEVfUFBTLCBcXHUwMDI2ZHBsbF9vcHMsIGJwKTtcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QtNjQ3LSAgICAgICAgaWYgKGVycilcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz00NDg9ZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpbmQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2MC0vKipcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDYxOiAqIGRwbGxfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgdGhlIGRwbGwgZGV2aWNlIGluIHRoZSBzdWJzeXN0ZW1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDYyLSAqIEBkcGxsOiBwb2ludGVyIHRvIGEgZHBsbFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3My0gKi9cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDc0OmludCBkcGxsX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGVudW0gZHBsbF90eXBlIHR5cGUsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3NS1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzLCB2b2lkICpwcml2KVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUxNy19XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUxODpFWFBPUlRfU1lNQk9MX0dQTChkcGxsX2RldmljZV9yZWdpc3Rlcik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUxOS1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xOTMwPXpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTgwLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxOTgxOiAqIHpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTgyLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE5ODg9c3RhdGljIGludFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxOTg5OnpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTkwLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDA3LVxcdHpsZHBsbC1cXHUwMDNldHlwZSA9IHpsMzA3M3hfcHJvcF9kcGxsX3R5cGVfZ2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjAwODpcXHRyYyA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKHpsZHBsbC1cXHUwMDNlZHBsbF9kZXYsIHpsZHBsbC1cXHUwMDNldHlwZSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAwOS1cXHRcXHRcXHRcXHQgIFxcdTAwMjZ6bGRwbGwtXFx1MDAzZW9wcywgemxkcGxsKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDIyLSAqIFVucmVnaXN0ZXJzIGdpdmVuIERQTEwgZGV2aWNlIGZyb20gRFBMTCBzdWItc3lzdGVtIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyMDIzOiAqIGJ5IEB6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyLlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDI0LSAqL1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTI0NDg9emwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDUxLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDUyOlxcdHJjID0gemwzMDczeF9kcGxsX2RldmljZV9yZWdpc3Rlcih6bGRwbGwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDUzLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQxOTQ9aWNlX2RwbGxfaW5pdF9kcGxsKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGwgKmQsIGJvb2wgY2d1LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIxNS1cXHRcXHRcXHRpY2VfZHBsbF91cGRhdGVfc3RhdGUocGYsIGQsIHRydWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyMTY6XFx0XFx0cmV0ID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoZC1cXHUwMDNlZHBsbCwgdHlwZSwgb3BzLCBkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjE3LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmM9NDIwPXN0YXRpYyBpbnQgbWx4NV9kcGxsX3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYy00NTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYzo0NTI6XFx0ZXJyID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIobWRwbGwtXFx1MDAzZWRwbGwsIERQTExfVFlQRV9FRUMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYy00NTMtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNm1seDVfZHBsbF9kZXZpY2Vfb3BzLCBtZHBsbCk7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NTA1OT1wdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTEyNC1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTEyNTpcXHRlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihicC1cXHUwMDNlZHBsbCwgRFBMTF9UWVBFX1BQUywgXFx1MDAyNmRwbGxfb3BzLCBicCk7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxMjYtXFx0aWYgKGVycilcXG4tLVxcbmluY2x1ZGUvbGludXgvZHBsbC5oPTI4MD12b2lkIGRwbGxfZGV2aWNlX3B1dChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGRwbGxfdHJhY2tlciAqdHJhY2tlcik7XFxuaW5jbHVkZS9saW51eC9kcGxsLmgtMjgxLVxcbmluY2x1ZGUvbGludXgvZHBsbC5oOjI4MjppbnQgZHBsbF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBlbnVtIGRwbGxfdHlwZSB0eXBlLFxcbmluY2x1ZGUvbGludXgvZHBsbC5oLTI4My1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzLCB2b2lkICpwcml2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6MzAuNzYxMDU2NzQyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTE4NzE1NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRGV2aWNlIERyaXZlciBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYXZhaWxhYmxlIGRyaXZlcnMgYW5kIGl0IHNlZW1zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHByZXR0eSBzcGVjaWZpYyBoYXJkd2FyZSBzZXQuIFRoZSBsaXN0IG9ubHkgaW5jbHVkZXMgYHpsMzA3M3hgLCBgaWNlYCwgYG1seDVgLCBhbmQgYHB0cF9vY3BgLiBSaWdodCwgc28gYGljZWAgaXMgSW50ZWwncyBFODAwIHNlcmllcyBQQ0llIE5JQywgYG1seDVgIGlzIGEgTWVsbGFub3ggQ29ubmVjdFgtNSsgUENJZSBOSUMsIGFuZCBgcHRwX29jcGAgaXMgdGhlIE9wZW4gQ29tcHV0ZSBQcm9qZWN0IFRpbWUgQ2FyZCwgYWxzbyBQQ0llLiBUaGVuIHRoZXJlJ3MgYHpsMzA3M3hgLCB3aGljaCBpcyB0aGF0IE1pY3Jvc2VtaSBaTDMwNzN4IEkyQy9TUEkgRFBMTC5cblxuVGhlIGltcG9ydGFudCB0aGluZyB0byBub3RlIGhlcmUgaXMgdGhhdCBub25lIG9mIHRoZXNlIGFyZSBzb2Z0d2FyZSBlbXVsYXRlZCBkcml2ZXJzLiBUaGV5IGFyZSBhbGwgaW50ZXJhY3RpbmcgZGlyZWN0bHkgd2l0aCBoYXJkd2FyZS5cblxuTXkgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBzeXN0ZW0gaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgdGhlIERQTEwuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5IHJlYWNoIHRoZSBgZHBsbF9waW5fZnJlcV9zZXRgIGZ1bmN0aW9uIHdpdGhvdXQgYSBjb3JyZWN0bHkgcmVnaXN0ZXJlZCBEUExMIGRldmljZT8gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHBvaW50IG9mIGZhaWx1cmUuIEkgc2hvdWxkIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZHBsbF9uZXRsaW5rLmNgIHRvIHNlZSBob3cgdGhlIERQTEwgZGV2aWNlIGlzIGNoZWNrZWQgYW5kIHJlZ2lzdGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTgwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjM2LjE3MjkzMTg3NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MzA4MDk5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX3Bpbl9mcmVxX3NldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTA3Nz1zdGF0aWMgaW50XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwNzg6ZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwNzktXFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTUzMD1kcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHIoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTUzOC1cXHRcXHRjYXNlIERQTExfQV9QSU5fRlJFUVVFTkNZOlxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNTM5OlxcdFxcdFxcdHJldCA9IGRwbGxfcGluX2ZyZXFfc2V0KHBpbiwgYSwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTU0MC1cXHRcXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MTMzPXN0YXRpYyBib29sIGljZV9kcGxsX2lzX3Jlc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0xNDItLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MTQzOiAqIGljZV9kcGxsX3Bpbl9mcmVxX3NldCAtIHNldCBwaW4ncyBmcmVxdWVuY3lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0xNDQtICogQHBmOiBwcml2YXRlIGJvYXJkIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MTU3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzoxNTg6aWNlX2RwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMTU5LVxcdFxcdCAgICAgIGVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGluX3R5cGUsIGNvbnN0IHUzMiBmcmVxLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MjEwPWljZV9kcGxsX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjI0LVxcdG11dGV4X2xvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzoyMjU6XFx0cmV0ID0gaWNlX2RwbGxfcGluX2ZyZXFfc2V0KHBmLCBwLCBwaW5fdHlwZSwgZnJlcXVlbmN5LCBleHRhY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTIyNi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6MzcuNzY2MDE3MTEzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NDMwNjU2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGNvZGUgc25pcHBldCwgZGVsaXZlcmVkIGFzIGlmIGl0J3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEZWNvZGluZyB0aGUgRFBMTCBQaW4gU2V0IExvZ2ljKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhhdCBgZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyYCBmdW5jdGlvbi4gSSByZWNvZ25pemUgdGhhdCBvbmUuIEl0J3MgY2xlYXJseSBiZWluZyBjYWxsZWQgZnJvbSBgZHBsbF9ubF9waW5fc2V0X2RvaXRgLiBCYXNlZCBvbiB0aGUgbmFtaW5nLCBpdCdzIHByZXR0eSBvYnZpb3VzIHRoYXQgdGhpcyByZWxhdGVzIHRvIHNldHRpbmcgc29tZXRoaW5nIHVwIHdpdGggRFBMTCBwaW5zIHRocm91Z2ggYSBOZXRsaW5rIGludGVyZmFjZS4gYF9mcm9tX25sYXR0cmAgaGludHMgYXQgdGFraW5nIGluZm9ybWF0aW9uIHBhc3NlZCB2aWEgYSBOZXRsaW5rIGF0dHJpYnV0ZSBhbmQgZG9pbmcgc29tZXRoaW5nIHdpdGggaXQuIEknbSBndWVzc2luZyB0aGlzIGBkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHJgIGZ1bmN0aW9uIGlzIHRoZSBjb3JlIGxvZ2ljIHRoYXQgcGFyc2VzIHRob3NlIE5ldGxpbmsgYXR0cmlidXRlcyBhbmQgZmlndXJlcyBvdXQgKndoYXQqIHBpbiBzZXR0aW5ncyBhcmUgYmVpbmcgcmVxdWVzdGVkLiBBbmQgdGhlbiwgSSdtIHdhZ2VyaW5nLCBpdCBhcHBsaWVzIHRob3NlIHNldHRpbmdzIHRvIHRoZSBEUExMLiBUaGUgb3RoZXIgZnVuY3Rpb24sIGBkcGxsX25sX3Bpbl9zZXRfZG9pdGAsIGlzIGxpa2VseSB0aGUgTmV0bGluayBoYW5kbGVyIGZ1bmN0aW9uIGl0c2VsZi4gSXQgcmVjZWl2ZXMgdGhlIE5ldGxpbmsgbWVzc2FnZSwgY2FsbHMgdGhlIGF0dHJpYnV0ZS1wYXJzaW5nIGZ1bmN0aW9uIHRvIGRvIHRoZSByZWFsIHdvcmsgYW5kLCBsaWtlbHksIGhhbmRsZXMgYW55IGVycm9ycyBvciBvdGhlciBzZXR1cCByZXF1aXJlZCBmb3IgdGhlIE5ldGxpbmsgY29ubmVjdGlvbi4gT3ZlcmFsbCwgaXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIGZvciByZW1vdGVseSBjb25maWd1cmluZyBEUExMIHBpbiBzZXR0aW5ncy4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYXR0cmlidXRlIHBhcnNpbmcgdG8gc2VlIHRoZSBkYXRhIHN0cnVjdHVyZSBpdCdzIHVzaW5nIGJ1dCB0aGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3NDUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxOTo0Mi43MDkwODQ3NTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTY3MDk1MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBsbF9ubF9waW5fc2V0X2RvaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE3Mzk9aW50IGRwbGxfbmxfcGluX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE3NzUtXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE3NzY6aW50IGRwbGxfbmxfcGluX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE3Nzcte1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYz05Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRwbGxfbmxfb3BzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTE1Mi1cXHRcXHQucHJlX2RvaXRcXHQ9IGRwbGxfcGluX3ByZV9kb2l0LFxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmM6MTUzOlxcdFxcdC5kb2l0XFx0XFx0PSBkcGxsX25sX3Bpbl9zZXRfZG9pdCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTE1NC1cXHRcXHQucG9zdF9kb2l0XFx0PSBkcGxsX3Bpbl9wb3N0X2RvaXQsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5oPTQyPWludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuaDo0MzppbnQgZHBsbF9ubF9waW5fc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuaC00NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6NDQuMjA1Nzk5NTAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NTQ5MDY4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBEUExMIFByZS1EbyBJdCBQcm9jZXNzKipcblxuQWxyaWdodCwgc28gdGhlIHByaW1hcnkgZnVuY3Rpb24gaGVyZSwgYmFzZWQgb24gdGhhdCBuYW1pbmcgY29udmVudGlvbiwgaXMgdGhlIHByZS1leGVjdXRpb24gb3IgaW5pdGlhbGl6YXRpb24gc3RhZ2Ugb2YgYSBEUExMIChEYXZpc+KAk1B1dG5hbeKAk0xvZ2VtYW5u4oCTTG92ZWxhbmQpIGFsZ29yaXRobSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYSBcInBpbi5cIiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGBkcGxsX3Bpbl9wcmVfZG9pdGAgaXMgZ3JhYmJpbmcgdGhlIHJlbGV2YW50IFwicGluXCIgZGF0YS4gSSdtIGluZmVycmluZyBpdCdzIHByb2JhYmx5IHRoZSBwaW4gdGhhdCdzIHRoZSBsaXRlcmFsIHBvaW50ZXIgb3IgYml0IG9mIGRhdGEuIFRoaXMgY291bGQgYmUgYSBwb2ludGVyIHRvIGEgZGF0YSBzdHJ1Y3R1cmUsIG9yIHNvbWUgSUQgcmVwcmVzZW50aW5nIGEgbGl0ZXJhbCBvciB2YXJpYWJsZSBiZWluZyBjb25zaWRlcmVkLCBkZXBlbmRpbmcgb24gaG93IHRoZSBzb2x2ZXIncyBhcmNoaXRlY3RlZC4gSSdtIGltbWVkaWF0ZWx5IHRyeWluZyB0byBkaXNjZXJuIGNvbnRleHQg4oCTIHdoYXQga2luZCBvZiBwaW4/IElzIGl0IGEgZGVjaXNpb24gdmFyaWFibGU/IElzIGl0IHJlbGF0ZWQgdG8gY2xhdXNlIHNlbGVjdGlvbiBvciBjb25mbGljdCBhbmFseXNpcyB3aXRoaW4gdGhlIGJyYW5jaGluZyBoZXVyaXN0aWM/IFVuZGVyc3RhbmRpbmcgdGhlIHBpbidzIG5hdHVyZSBpcyBwYXJhbW91bnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcmVwcmVzZW50YXRpb24gdGhlIGNvZGUgaXMgdXNpbmcuIElzIGl0IGp1c3QgYW4gaW50ZWdlciBJRCwgb3IgYSBtb3JlIGNvbXBsZXggb2JqZWN0P1xuXG5cbiIsIklucHV0VG9rZW5zIjoyMjUzNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjQ5Ljg2MDcwODkwMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NzgwMjMyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX3Bpbl9wcmVfZG9pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MjAyOD1kcGxsX3VubG9ja19kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTIwMzMtXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjIwMzQ6aW50IGRwbGxfcGluX3ByZV9kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yMDM1LVxcdFxcdCAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jPTkyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHBsbF9ubF9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTM1LVxcdFxcdC5jbWRcXHRcXHQ9IERQTExfQ01EX1BJTl9HRVQsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYzoxMzY6XFx0XFx0LnByZV9kb2l0XFx0PSBkcGxsX3Bpbl9wcmVfZG9pdCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTEzNy1cXHRcXHQuZG9pdFxcdFxcdD0gZHBsbF9ubF9waW5fZ2V0X2RvaXQsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTE1MS1cXHRcXHQuY21kXFx0XFx0PSBEUExMX0NNRF9QSU5fU0VULFxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmM6MTUyOlxcdFxcdC5wcmVfZG9pdFxcdD0gZHBsbF9waW5fcHJlX2RvaXQsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYy0xNTMtXFx0XFx0LmRvaXRcXHRcXHQ9IGRwbGxfbmxfcGluX3NldF9kb2l0LFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuaD0yMj1pbnQgZHBsbF9wcmVfZG9pdChjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgKm9wcywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5oLTIzLVxcdFxcdCAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuaDoyNDppbnQgZHBsbF9waW5fcHJlX2RvaXQoY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsIHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuaC0yNS1cXHRcXHQgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6NTEuNDU4NTE3OTU3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzk4NTc2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIGBkcGxsX3Bpbl9wcmVfZG9pdGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIGBkcGxsX3Bpbl9wcmVfZG9pdGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBEUExMIGltcGxlbWVudGF0aW9uLCBlc3BlY2lhbGx5IGhvdyBpdCBoYW5kbGVzIHBpbm5pbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IG1lbnRhbGx5IHRyYWNlIHRoZSBkYXRhIGZsb3cuIFdoYXQgYXJlIHRoZSBpbnB1dHMsIHdoYXQgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkLCBhbmQgd2hhdCBhcmUgdGhlIG91dHB1dHM/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSBjb25zdHJhaW50IGRhdGFiYXNlLCBzcGVjaWZpY2FsbHkgaG93IHBpbm5pbmcgYWZmZWN0cyB2YXJpYWJsZSBhc3NpZ25tZW50cyBhbmQgcHJvcGFnYXRpb24uIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyByZWxhdGVkIHRvIGVhcmx5IGNvbmZsaWN0IGRldGVjdGlvbiBvciBpZiBpdCdzIG1vcmUgYWJvdXQgc3RyYXRlZ2ljIHZhcmlhYmxlIHNlbGVjdGlvbi4gVGhlIGRldGFpbHMgbWF0dGVyOyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaWYgdGhpcyBpcyBhIGNyaXRpY2FsIHNlY3Rpb24gZm9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBVbHRpbWF0ZWx5LCBJJ20gYWltaW5nIGZvciBhIGhvbGlzdGljIGNvbXByZWhlbnNpb24gb2YgYGRwbGxfcGluX3ByZV9kb2l0YCdzIGZ1bmN0aW9uIGFuZCBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBEUExMIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzg3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6NTUuODM4Mzc4MDI3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAzNCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAzNDpcXHRpbnQgZHBsbF9waW5fcHJlX2RvaXQoY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsIHN0cnVjdCBza19idWZmICpza2IsXFxuMjAzNTpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjIwMzY6XFx0e1xcbjIwMzc6XFx0XFx0aW50IHJldDtcXG4yMDM4OlxcdFxcbjIwMzk6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG4yMDQwOlxcdFxcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERQTExfQV9QSU5fSUQpKSB7XFxuMjA0MTpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjIwNDI6XFx0XFx0XFx0Z290byB1bmxvY2tfZGV2O1xcbjIwNDM6XFx0XFx0fVxcbjIwNDQ6XFx0XFx0aW5mby1cXHUwMDNldXNlcl9wdHJbMF0gPSB4YV9sb2FkKFxcdTAwMjZkcGxsX3Bpbl94YSxcXG4yMDQ1OlxcdFxcdFxcdFxcdFxcdCAgICBubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tEUExMX0FfUElOX0lEXSkpO1xcbjIwNDY6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2V1c2VyX3B0clswXSB8fFxcbjIwNDc6XFx0XFx0ICAgICFkcGxsX3Bpbl9hdmFpbGFibGUoaW5mby1cXHUwMDNldXNlcl9wdHJbMF0pKSB7XFxuMjA0ODpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhpbmZvLVxcdTAwM2VleHRhY2ssIFxcXCJwaW4gbm90IGZvdW5kXFxcIik7XFxuMjA0OTpcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbjIwNTA6XFx0XFx0XFx0Z290byB1bmxvY2tfZGV2O1xcbjIwNTE6XFx0XFx0fVxcbjIwNTI6XFx0XFxuMjA1MzpcXHRcXHRyZXR1cm4gMDtcXG4yMDU0OlxcdFxcbjIwNTU6XFx0dW5sb2NrX2RldjpcXG4yMDU2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG4yMDU3OlxcdFxcdHJldHVybiByZXQ7XFxuMjA1ODpcXHR9XFxuMjA1OTpcXHRcXG4yMDYwOlxcdHZvaWQgZHBsbF9waW5fcG9zdF9kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjIwNjE6XFx0XFx0XFx0XFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4yMDYyOlxcdHtcXG4yMDYzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG4yMDY0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6NTUuODM4NTE5NTU3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODExNjE2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbmRlcnN0YW5kaW5nIHRoZSBEUExMIFBpbiBBY3F1aXNpdGlvbiBQcm9jZXNzKipcblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IGEgRFBMTCBwaW4gaXMgYmVpbmcgaGFuZGxlZC4gSSBzZWUgdGhhdCB0aGUgY29kZSBpcyByZWZlcmVuY2luZyBgZHBsbF9waW5feGFgLCB3aGljaCBpbXBsaWVzIHNvbWUgc29ydCBvZiBzdG9yYWdlIG9yIHRyYWNraW5nIG1lY2hhbmlzbSBmb3IgdGhlc2UgcGlucy4gTXkgZmlyc3QgcXVlc3Rpb24gaXMsIFwiSG93IGFyZSB0aGVzZSBwaW5zIGV2ZW4gKmdldHRpbmcqIGludG8gYGRwbGxfcGluX3hhYD9cIiBUaGF0J3MgdGhlIGNydXggb2YgdW5kZXJzdGFuZGluZyB0aGUgcGluIG1hbmFnZW1lbnQuXG5cbk15IHN1c3BpY2lvbiBpcyB0aGF0IHRoZXJlJ3MgYW4gYWxsb2NhdGlvbiBwcm9jZXNzIGhhcHBlbmluZy4gQW5kIHN1cmUgZW5vdWdoLCBgZHBsbF9waW5fYWxsb2NgIGlzIHJlZmVyZW5jZWQuIE5vdywgdGhlIGNvbnRleHQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBkcml2ZXJzIGFyZSB0aGUgb25lcyBpbnRlcmFjdGluZyB3aXRoIHRoaXMgYWxsb2NhdGlvbiBmdW5jdGlvbi4gU28sIEkgbmVlZCB0byBsb29rIGludG8gaG93IHRoZXNlIGRyaXZlcnMsIGFyZSBpbnRlcmFjdGluZyB3aXRoIGBkcGxsX3Bpbl9hbGxvY2AuIFRoaXMgaXMgdGhlIGNvcmUgdG8gdW5kZXJzdGFuZGluZyBob3cgYW5kIHdoZW4gYSBwaW4gaXMgYnJvdWdodCBpbiwgYW5kIHVsdGltYXRlbHksIHRoZSBhbGxvY2F0aW9uIGFuZCB1c2FnZSBtb2RlbC4gTm93LCBJIG5lZWQgdG8gZ2V0IGludG8gdGhlICp3aHkqIG9mIHRoaXMgd2hvbGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNzQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjU5LjUxOTY4MzkwOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwODcxNDA2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX3Bpbl9hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9NjM2PXN0YXRpYyBzdHJ1Y3QgZHBsbF9waW4gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2Mzc6ZHBsbF9waW5fYWxsb2ModTY0IGNsb2NrX2lkLCB1MzIgcGluX2lkeCwgc3RydWN0IG1vZHVsZSAqbW9kdWxlLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02MzgtXFx0ICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpwcm9wKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTc0OD1kcGxsX3Bpbl9nZXQodTY0IGNsb2NrX2lkLCB1MzIgcGluX2lkeCwgc3RydWN0IG1vZHVsZSAqbW9kdWxlLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc2NC1cXHRpZiAoIXJldCkge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo3NjU6XFx0XFx0cmV0ID0gZHBsbF9waW5fYWxsb2MoY2xvY2tfaWQsIHBpbl9pZHgsIG1vZHVsZSwgcHJvcCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc2Ni1cXHRcXHRpZiAoIUlTX0VSUihyZXQpKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE2MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgemwzMDczeF9kcGxsX2RldmljZV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTYyNC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTYyNTogKiB6bDMwNzN4X2RwbGxfcGluX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBwaW5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTYyNi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE2MzU9c3RhdGljIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTYzNjp6bDMwNzN4X2RwbGxfcGluX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xNjM3LVxcdFxcdCAgICAgICB1OCBpZClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xNjU1LSAqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE2NTY6ICogRGVhbGxvY2F0ZXMgRFBMTCBwaW4gcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9waW5fYWxsb2MuXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE2NTctICovXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTg2Nz16bDMwNzN4X2RwbGxfbmNvX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTg4OC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTg4OTpcXHRwaW4gPSB6bDMwNzN4X2RwbGxfcGluX2FsbG9jKHpsZHBsbCwgRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVULFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xODkwLVxcdFxcdFxcdFxcdCAgICAgWkwzMDczWF9OQ09fUElOX0lEKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xOTMwPXpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTUxLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxOTUyOlxcdFxcdHBpbiA9IHpsMzA3M3hfZHBsbF9waW5fYWxsb2MoemxkcGxsLCBkaXIsIGlkKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTk1My1cXHRcXHRpZiAoSVNfRVJSKHBpbikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjA6MDEuMDI4NDA1MzU0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODEzMDM4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6XG5cbioqRGVidWdnaW5nIFBpbiBBbGxvY2F0aW9uIGluIHRoZSBEUExMIFN5c3RlbSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBgZHBsbF9waW5fZ2V0YC4gU28sIGl0J3MgcHJldHR5IGNsZWFyIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yICphbGxvY2F0aW5nKiBhIHBpbiB3aXRoaW4gdGhlIERQTEwgKERpZ2l0YWwgUGhhc2UtTG9ja2VkIExvb3ApIHN5c3RlbS4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgdGhlIHJlYWwgcXVlc3Rpb24sIHRoZSBvbmUgdGhhdCdzIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lLCBpczogKipXaG8gaXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uPyoqIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgcGF0aCB0byBgZHBsbF9waW5fZ2V0YCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIGdyYXNwaW5nIHRoZSBicm9hZGVyIHBpY3R1cmUgYW5kIHBvdGVudGlhbGx5IHBpbnBvaW50aW5nIGFueSBpc3N1ZXMuIElzIGl0IHRoZSBkcml2ZXIgaXRzZWxmIGluaXRpYXRpbmcgdGhlIGFsbG9jYXRpb24gb24gc3RhcnR1cD8gSXMgaXQgdHJpZ2dlcmVkIGJ5IGEgdXNlci1zcGFjZSByZXF1ZXN0IHRocm91Z2ggc29tZSBpb2N0bD8gSXMgaXQgcGFydCBvZiBhIHJlc291cmNlIG1hbmFnZW1lbnQgZnJhbWV3b3JrPyBLbm93aW5nIHRoZSBjYWxsZXIgZ2l2ZXMgbWUgdGhlIGNvbnRleHQsIHRoZSBpbnRlbnQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGRwbGxfcGluX2dldGAgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBhbGxvY2F0aW9uIHJlcXVlc3QgaXMgb3JpZ2luYXRpbmcuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBwcm9ibGVtIGlzLCBiZWNhdXNlIGFsbG9jYXRpbmcgdGhlIHBpbiBpdHNlbGYgaXMgdHJpdmlhbCBhbmQgSSB3b3VsZCBub3QgYmUgY29uY2VybmVkIGlmIHRoYXQgd2FzIHRoZSBvbmx5IGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ5MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIwOjA1LjAwOTcxMTI4NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5Nzk5NzEzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX3Bpbl9nZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTU3Mj1vcHMgYW5kIHByaXYuXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTU3My1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NTc0OlRoZSBwaW5zIGFyZSBhbGxvY2F0ZWQgc2VwYXJhdGVseSB3aXRoIGRwbGxfcGluX2dldCgpLCBpdCB3b3Jrc1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC01NzUtc2ltaWxhcmx5IHRvIGRwbGxfZGV2aWNlX2dldCgpLiBGdW5jdGlvbiBmaXJzdCBjcmVhdGVzIG9iamVjdCBhbmQgdGhlblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTYzND1UaGUgcmVnaXN0cmF0aW9uIHBhcnQgaXMgdGhlbiBsb29rcyBsaWtlIHRoaXMgcGFydDpcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC02NTAtICAgICAgICBmb3IgKGkgPSAwOyBpIFxcdTAwM2MgT0NQX1NNQV9OVU07IGkrKykge1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdDo2NTE6ICAgICAgICAgICAgICAgIGJwLVxcdTAwM2VzbWFbaV0uZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xraWQsIGksIFRISVNfTU9EVUxFLCBcXHUwMDI2YnAtXFx1MDAzZXNtYVtpXS5kcGxsX3Byb3ApO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC02NTItICAgICAgICAgICAgICAgIGlmIChJU19FUlIoYnAtXFx1MDAzZXNtYVtpXS5kcGxsX3BpbikpIHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz03Mjk9RVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9kcGxsX25vdGlmaWVyKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy03MzEtLyoqXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjczMjogKiBkcGxsX3Bpbl9nZXQgLSBmaW5kIGV4aXN0aW5nIG9yIGNyZWF0ZSBuZXcgZHBsbCBwaW5cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzMzLSAqIEBjbG9ja19pZDogY2xvY2tfaWQgb2YgY3JlYXRvclxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTc0Nz1zdHJ1Y3QgZHBsbF9waW4gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo3NDg6ZHBsbF9waW5fZ2V0KHU2NCBjbG9ja19pZCwgdTMyIHBpbl9pZHgsIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzQ5LVxcdCAgICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX3Byb3BlcnRpZXMgKnByb3AsIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy03NzItfVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo3NzM6RVhQT1JUX1NZTUJPTF9HUEwoZHBsbF9waW5fZ2V0KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzc0LVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYz01OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHBsbF9waW5faWRfZ2V0X25sX3BvbGljeVtEUExMX0FfUElOX1RZUEUgKyAxXSA9IHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtNjctLyogRFBMTF9DTURfUElOX0dFVCAtIGRvICovXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYzo2ODpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHBsbF9waW5fZ2V0X2RvX25sX3BvbGljeVtEUExMX0FfUElOX0lEICsgMV0gPSB7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYy02OS1cXHRbRFBMTF9BX1BJTl9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtNzItLyogRFBMTF9DTURfUElOX0dFVCAtIGR1bXAgKi9cXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jOjczOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkcGxsX3Bpbl9nZXRfZHVtcF9ubF9wb2xpY3lbRFBMTF9BX1BJTl9JRCArIDFdID0ge1xcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtNzQtXFx0W0RQTExfQV9QSU5fSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jPTkyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHBsbF9ubF9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTM4LVxcdFxcdC5wb3N0X2RvaXRcXHQ9IGRwbGxfcGluX3Bvc3RfZG9pdCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jOjEzOTpcXHRcXHQucG9saWN5XFx0XFx0PSBkcGxsX3Bpbl9nZXRfZG9fbmxfcG9saWN5LFxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTQwLVxcdFxcdC5tYXhhdHRyXFx0PSBEUExMX0FfUElOX0lELFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYy0xNDUtXFx0XFx0LmR1bXBpdFxcdFxcdD0gZHBsbF9ubF9waW5fZ2V0X2R1bXBpdCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jOjE0NjpcXHRcXHQucG9saWN5XFx0XFx0PSBkcGxsX3Bpbl9nZXRfZHVtcF9ubF9wb2xpY3ksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYy0xNDctXFx0XFx0Lm1heGF0dHJcXHQ9IERQTExfQV9QSU5fSUQsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTE5PXN0YXRpYyBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEyMDp6bDMwNzN4X2RwbGxfcGluX2dldF9ieV9yZWYoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCB1OCByZWZfaWQpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEyMS17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTE2MT16bDMwNzN4X2RwbGxfbmNvX3Bpbl9zdGF0ZV9vbl9kcGxsX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTExOTItXFx0XFx0XFx0cmVmID0gemwzMDczeF9jaGFuX3JlZl9nZXQoXFx1MDAyNmNoYW4pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxMTkzOlxcdFxcdFxcdHJlZl9waW4gPSB6bDMwNzN4X2RwbGxfcGluX2dldF9ieV9yZWYoemxkcGxsLCByZWYpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xMTk0LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xNDIxPXpsMzA3M3hfZHBsbF9tb2RlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xNDYyLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxNDYzOlxcdFxcdFxcdHBpbiA9IHpsMzA3M3hfZHBsbF9waW5fZ2V0X2J5X3JlZih6bGRwbGwsIHJlZik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE0NjQtXFx0XFx0XFx0aWYgKHBpbikge1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE2NzY9emwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLCB1MzIgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTcwOS1cXHQvKiBDcmVhdGUgb3IgZ2V0IGV4aXN0aW5nIERQTEwgcGluICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE3MTA6XFx0cGluLVxcdTAwM2VkcGxsX3BpbiA9IGRwbGxfcGluX2dldCh6bGRwbGwtXFx1MDAzZWRldi1cXHUwMDNlY2xvY2tfaWQsIGluZGV4LCBUSElTX01PRFVMRSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTcxMS1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZwcm9wcy1cXHUwMDNlZHBsbF9wcm9wcywgXFx1MDAyNnBpbi1cXHUwMDNldHJhY2tlcik7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTg2Nz16bDMwNzN4X2RwbGxfbmNvX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTg5My1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTg5NDpcXHRwaW4tXFx1MDAzZWRwbGxfcGluID0gZHBsbF9waW5fZ2V0KHpsZHBsbC1cXHUwMDNlZGV2LVxcdTAwM2VjbG9ja19pZCwgWkwzMDczWF9OQ09fUElOX0lELFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xODk1LVxcdFxcdFxcdFxcdCAgICAgVEhJU19NT0RVTEUsIFxcdTAwMjZ6bDMwNzN4X2RwbGxfbmNvX3Bpbl9wcm9wcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTI0NzM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjI0NzQ6aWNlX2RwbGxfcGluX2dldF9wYXJlbnRfbnVtKHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNDc1LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBhcmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTI0ODY9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjI0ODc6aWNlX2RwbGxfcGluX2dldF9wYXJlbnRfaWR4KHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNDg4LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBhcmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNDg5LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzoyNDkwOlxcdGludCBudW0gPSBpY2VfZHBsbF9waW5fZ2V0X3BhcmVudF9udW0ocGluLCBwYXJlbnQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTI0OTEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz0yNTEyPWljZV9kcGxsX3JjbGtfc3RhdGVfb25fcGluX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNTMwLVxcdG11dGV4X2xvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzoyNTMxOlxcdGh3X2lkeCA9IGljZV9kcGxsX3Bpbl9nZXRfcGFyZW50X2lkeChwLCBwYXJlbnRfcGluKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNTMyLVxcdGlmIChod19pZHggXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjU0Mi1cXHRcXHRcXHRcXHQgICBwLVxcdTAwM2VpZHgsIHN0YXRlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjI1NDM6XFx0XFx0XFx0XFx0ICAgaWNlX2RwbGxfcGluX2dldF9wYXJlbnRfbnVtKHAsIHBhcmVudF9waW4pKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNTQ0LVxcdFxcdGdvdG8gdW5sb2NrO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjU1Ny1cXHRcXHRcXHRcXHQgICBzdGF0ZSwgcC1cXHUwMDNlaWR4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjI1NTg6XFx0XFx0XFx0XFx0ICAgaWNlX2RwbGxfcGluX2dldF9wYXJlbnRfbnVtKHAsIHBhcmVudF9waW4pKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNTU5LXVubG9jazpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTI1ODI9aWNlX2RwbGxfcmNsa19zdGF0ZV9vbl9waW5fZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTI1OTYtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLmxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjI1OTc6XFx0aHdfaWR4ID0gaWNlX2RwbGxfcGluX2dldF9wYXJlbnRfaWR4KHAsIHBhcmVudF9waW4pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTI1OTgtXFx0aWYgKGh3X2lkeCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz0zMzA0PWljZV9kcGxsX2dldF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW5zLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzMxMy1cXHRcXHRcXHRwaW5faW5kZXggKz0gaTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzozMzE0OlxcdFxcdHBpbnNbaV0ucGluID0gZHBsbF9waW5fZ2V0KGNsb2NrX2lkLCBwaW5faW5kZXgsIFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTMzMTUtXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnBpbnNbaV0ucHJvcCwgXFx1MDAyNnBpbnNbaV0udHJhY2tlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jPTQyMD1zdGF0aWMgaW50IG1seDVfZHBsbF9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmMtNDU3LVxcdC8qIE11bHRpcGxlIG1kZXYgaW5zdGFuY2VzIG1pZ2h0IHNoYXJlIG9uZSBEUExMIHBpbi4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jOjQ1ODpcXHRtZHBsbC1cXHUwMDNlZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xvY2tfaWQsIG1seDVfZ2V0X2Rldl9pbmRleChtZGV2KSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jLTQ1OS1cXHRcXHRcXHRcXHQgICAgICAgVEhJU19NT0RVTEUsIFxcdTAwMjZtbHg1X2RwbGxfcGluX3Byb3BlcnRpZXMsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NTA1OT1wdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTEyOS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgT0NQX1NNQV9OVU07IGkrKykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1MTMwOlxcdFxcdGJwLVxcdTAwM2VzbWFbaV0uZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xraWQsIGksIFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTMxLVxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZicC1cXHUwMDNlc21hW2ldLmRwbGxfcHJvcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZHBsbC5oPTI5MD1zdHJ1Y3QgZHBsbF9waW4gKlxcbmluY2x1ZGUvbGludXgvZHBsbC5oOjI5MTpkcGxsX3Bpbl9nZXQodTY0IGNsb2NrX2lkLCB1MzIgZGV2X2RyaXZlcl9pZCwgc3RydWN0IG1vZHVsZSAqbW9kdWxlLFxcbmluY2x1ZGUvbGludXgvZHBsbC5oLTI5Mi1cXHQgICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpwcm9wLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMDowNi41MDc3MTQ3MjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIyMDAzNjkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEUExMIFBpbiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gYGRwbGxfcGluX2dldGAgaXMgdGhlIGtleS4gSXQncyBjYWxsZWQgYnkgdGhlIGB6bDMwNzN4YCwgYGljZWAsIGBtbHg1YCwgYW5kIGBwdHBfb2NwYCBkcml2ZXJzLiAgSWYgbm9uZSBvZiB0aGVzZSBhcmUgbG9hZGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHRoZW4gdGhlcmUgYXJlIG5vIERQTEwgcGlucyByZWdpc3RlcmVkLCB3aGljaCBsZWFkcyB0byBgZHBsbF9waW5fcHJlX2RvaXRgIGZhaWxpbmcgd2l0aCBgLUVOT0RFVmAgYmVjYXVzZSBgeGFfbG9hZGAgcmV0dXJucyBOVUxMLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBwb3BzIHVwOiBjYW4gSSBjcmVhdGUgYSBEUExMIHBpbiBmcm9tIHVzZXJzcGFjZSBzb21laG93PyBObywgdGhhdCdzIGJsb2NrZWQuIGBkcGxsX3Bpbl9hbGxvY2AgaXMgb25seSBldmVyIHRyaWdnZXJlZCB0aHJvdWdoIGBkcGxsX3Bpbl9nZXRgLCBhbmQgdGhhdCBvbmx5IGhhcHBlbnMgd2l0aGluIHRob3NlIGRyaXZlcnMuIFRoYXQgYXZlbnVlIGlzIGNsb3NlZC5cblxuQWxyaWdodCwgd2hhdCBhYm91dCBsb2FkaW5nIGB6bDMwNzN4YCBpbiBRRU1VPyBJdCdzIGFuIEkyQy9TUEkgZHJpdmVyLCB3aGljaCBvcGVucyBwb3NzaWJpbGl0aWVzLiBJZiBJIHVzZSBgaTJjLXN0dWJgIG9yIGBpMmMtZHVtbXlgLCBjb3VsZCBJIGluc3RhbnRpYXRlIGB6bDMwNzN4YD8gWWVzISBJIGNhbiB3cml0ZSB0byBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAgd2l0aCBgemwzMDczMSAweDIwYC4gVGhlIEkyQyBjb3JlIHdpbGwgdGhlbiBjcmVhdGUgYW4gSTJDIGNsaWVudCBhbmQgY2FsbCBgemwzMDczeF9pMmNfcHJvYmVgLiBUaGF0LCBpbiB0dXJuLCBzaG91bGQgY2FsbCBgemwzMDczeF9kZXZfcHJvYmVgLlxuXG5MZXQncyBzZWU6IGB6bDMwNzN4X2Rldl9wcm9iZWAgd2lsbCBhdHRlbXB0IHRvIHJlYWQgYSBjaGlwIElEOiBgcmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFx1MDAyNmlkKTtgLiAgYHpsMzA3M3hfcmVhZF91MTZgIHBlcmZvcm1zIGFuIEkyQyByZWFkLlxuXG5Pa2F5LCBub3cgaXQgY2xpY2tzLiBJZiBJIHVzZSBgaTJjLXN0dWJgLCBpdCAqY2FuKiBzaW11bGF0ZSBJMkMgcmVhZHMuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgaXQncyBkZXNpZ25lZCB0byBzaW11bGF0ZSBzcGVjaWZpYyBjaGlwcyBvciBhY3QgYXMgYSBtZW1vcnkgYXJyYXkuIFdhaXQhICBJdCBhY3RzIGFzIGEgbWVtb3J5IGFycmF5ISAgVGhpcyBpcyBwZXJmZWN0ISBJIGNhbiB3cml0ZSB2YWx1ZXMgdG8gaXRzIFwicmVnaXN0ZXJzXCIgdmlhIHN5c2ZzIG9yIEkyQyB3cml0ZXMgKmJlZm9yZSogcHJvYmluZyB0aGUgZHJpdmVyLiBCcmlsbGlhbnQhXG5cbkhtbSwgYSBxdWljayBjaGVja+KApiBpcyBpdCAxNi1iaXQgcmVnaXN0ZXJzPyBXYWl0Li4uYHpsMzA3M3hgIHVzZXMgMzItYml0IHJlZ2lzdGVycz8gTGV0J3MgY2hlY2sgYHpsMzA3M3hfcmVhZF91MTZgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ0NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMDoxNS43Mjc3NTM1MjVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzE1ODkxNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemwzMDczeF9yZWFkX3UxNlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9MTc5PWludCB6bDMwNzN4X3dyaXRlX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU4IHZhbClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xODQtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjE4NTogKiB6bDMwNzN4X3JlYWRfdTE2IC0gcmVhZCB2YWx1ZSBmcm9tIDE2Yml0IHJlZ2lzdGVyXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTE4Ni0gKiBAemxkZXY6IHpsMzA3M3ggZGV2aWNlIHBvaW50ZXJcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xOTMtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjE5NDppbnQgemwzMDczeF9yZWFkX3UxNihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MTYgKnZhbClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTk1LXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05ODE9aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTg4LVxcdC8qIFJlYWQgY2hpcCBJRCAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5ODk6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFxcdTAwMjZpZCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk5MC1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwNS1cXHQvKiBSZWFkIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjdXN0b20gY29uZmlnIHZlcnNpb24gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTAwNjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRVZJU0lPTiwgXFx1MDAyNnJldmlzaW9uKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwNy1cXHRpZiAocmMpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDgtXFx0XFx0cmV0dXJuIHJjO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDA5OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0ZXX1ZFUiwgXFx1MDAyNmZ3X3Zlcik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMTAtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oPTEzOT1pbnQgemwzMDczeF9yZWFkX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU4ICp2YWwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaDoxNDA6aW50IHpsMzA3M3hfcmVhZF91MTYoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTE2ICp2YWwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaC0xNDEtaW50IHpsMzA3M3hfcmVhZF91MzIoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTMyICp2YWwpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jPTI1PXpsMzA3M3hfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy0zMy1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM6MzQ6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFxcdTAwMjZpZCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jLTM1LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy00NC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM6NDU6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFxcdTAwMjZyZXZpc2lvbik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jLTQ2LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy01NS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM6NTY6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfRldfVkVSLCBcXHUwMDI2ZndfdmVyKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtNTctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTEyNTU9emwzMDczeF9kcGxsX3RlbXBfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBsbF9wcml2LFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEyNjQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEyNjU6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfRElFX1RFTVBfU1RBVFVTLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTI2Ni1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYz03OT1pbnQgemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMTUtXFx0LyogUmVhZCBmcmVxdWVuY3kgcmVsYXRlZCByZWdpc3RlcnMgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYzoxMTY6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVGX0ZSRVFfQkFTRSwgXFx1MDAyNnJlZi1cXHUwMDNlZnJlcV9iYXNlKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMTctXFx0aWYgKHJjKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTExOC1cXHRcXHRyZXR1cm4gcmM7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmM6MTE5OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFRl9GUkVRX01VTFQsIFxcdTAwMjZyZWYtXFx1MDAzZWZyZXFfbXVsdCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTIwLVxcdGlmIChyYylcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMjEtXFx0XFx0cmV0dXJuIHJjO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jOjEyMjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRUZfUkFUSU9fTSwgXFx1MDAyNnJlZi1cXHUwMDNlZnJlcV9yYXRpb19tKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMjMtXFx0aWYgKHJjKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTEyNC1cXHRcXHRyZXR1cm4gcmM7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmM6MTI1OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFRl9SQVRJT19OLCBcXHUwMDI2cmVmLVxcdTAwM2VmcmVxX3JhdGlvX24pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTEyNi1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jPTIzPWludCB6bDMwNzN4X3N5bnRoX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYy00NS1cXHQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jOjQ2OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1NZTlRIX0ZSRVFfQkFTRSwgXFx1MDAyNnN5bnRoLVxcdTAwM2VmcmVxX2Jhc2UpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNDctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYy01My1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jOjU0OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1NZTlRIX0ZSRVFfTSwgXFx1MDAyNnN5bnRoLVxcdTAwM2VmcmVxX20pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNTUtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYy01Ny1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jOjU4OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1NZTlRIX0ZSRVFfTiwgXFx1MDAyNnN5bnRoLVxcdTAwM2VmcmVxX24pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNTktXFx0aWYgKHJjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMDoxNy4yNTkzNDkyNDdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExMzIwMjk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRlY29kaW5nIHRoZSBgemwzMDczeF9yZWFkX3UxNmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB6bDMwNzN4X3JlYWRfdTE2YCBmdW5jdGlvbi4gSXQgYXBwZWFycyB0byBiZSByZWFkaW5nIGEgMTYtYml0IHZhbHVlIGZyb20gdGhlIGB6bGRldi1cdTAwM2VyZWdtYXBgLiBSaWdodCwgdGhlIGByZWdtYXBgIGlzIHRoZSBrZXkgYWJzdHJhY3Rpb24gaGVyZSwgbGlrZWx5IHByb3ZpZGluZyBhIGxheWVyIG9mIGluZGlyZWN0aW9uIGZvciByZWdpc3RlciBhY2Nlc3MsIHByb2JhYmx5IHZpYSBJMkMsIFNQSSBvciB3aGF0ZXZlci4gSWYgd2UncmUgd29ya2luZyB3aXRoIGEgZHVtbXkgSTJDIGRldmljZSwgdGhlIGByZWdtYXBgIHdpbGwsIGFzIGV4cGVjdGVkLCBqdXN0IHJldHVybiBhIHplcm8gb3Igd2hhdGV2ZXIgZGF0YSB3ZSBwcmV2aW91c2x5IHdyb3RlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBpbnRlcnByZXRpbmcgcmVhZCBvcGVyYXRpb25zLiBBaCwgYnV0IHdhaXQgYSBzZWNvbmQsIEkgcmVjYWxsIHRoYXQgYHpsMzA3M3hfY2hpcF9pZHNgIGlzIGhvdyB3ZSBpZGVudGlmeSB0aGUgY2hpcHMgd2UgZXhwZWN0IHRvIGVuY291bnRlci4gVGhlIGRldmljZSBpZGVudGlmaWNhdGlvbiBpcyBkb25lIHdpdGggc3BlY2lmaWMgSURzLiBSaWdodC4gVGhhdCBjbGFyaWZpZXMgdGhlIG5leHQgc3RlcHMgaW4gZGVidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODY4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjA6MjEuMzcyNTU1OTA1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE2NzUyNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfY2hpcF9pZHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTI1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoyNjpzdGF0aWMgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHpsMzA3M3hfY2hpcF9pZHNbXSA9IHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMjctXFx0WkxfQ0hJUF9JTkZPKDB4MEUzMCwgMiwgWkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyKSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05ODE9aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTkzLVxcdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTk0OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpOyBpKyspIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTk1OlxcdFxcdGlmICh6bDMwNzN4X2NoaXBfaWRzW2ldLmlkID09IGlkKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTYtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5OTk6XFx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwMC1cXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCAtRU5PREVWLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDItXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjEwMDM6XFx0emxkZXYtXFx1MDAzZWluZm8gPSBcXHUwMDI2emwzMDczeF9jaGlwX2lkc1tpXTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjA6MjIuODg5MzEzMjc5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NjkxOTI1OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBQcm9iZSBGYWlsdXJlcyBpbiBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBkZXZpY2UgSURzLCBsaWtlIGAweDBFMzBgLCBhbmQgdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBzaW11bGF0ZSB0aGVzZSBkZXZpY2VzIHdpdGhpbiBTeXprYWxsZXIuIElmIEkgdXNlIGBpMmMtc3R1YmAsIEkgY2FuIGxvYWQgaXQgd2l0aCBzb21ldGhpbmcgbGlrZSBgbW9kcHJvYmUgaTJjLXN0dWIgY2hpcF9hZGRyPTB4MjBgLiBUaGVuLCBJJ2Qgd3JpdGUgdGhlIGFwcHJvcHJpYXRlIGRhdGEgdG8gdGhlIHJlZ2lzdGVycy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlZ2lzdGVyIG9mZnNldHMgdGhvdWdoLCBsaWtlIHdyaXRpbmcgYDB4MzBgIHRvIGBaTF9SRUdfSURgIGFuZCBgMHgwRWAgdG8gYFpMX1JFR19JRCsxYC4gVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoYXQgYGkyYy1zdHViYCBkb2VzIFNNQnVzIGJ5dGUvd29yZCBkYXRhLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IGByZWdtYXBgIGludGVyYWN0cy4gSXQgc2VlbXMgbGlrZSBgcmVnbWFwYCBkb2VzIFNNQnVzIG9yIHJhdyBJMkMgdHJhbnNmZXJzIG92ZXIgSTJDLlxuXG5UaGUgcHJvYmxlbSBpcywgU3l6a2FsbGVyIGRvZXNuJ3QgaGFuZGxlIHRoaXMga2luZCBvZiBzZXR1cDsgaXQganVzdCBibGFzdHMgb3V0IHJhbmRvbSBzeXNjYWxscy4gSXQgY2FuJ3QgY29uZmlndXJlIGBpMmMtc3R1YmAgdG8gcHJldGVuZCBpdCdzIGEgc3BlY2lmaWMgY2hpcCB3aXRoIGEgcGFydGljdWxhciBJRC4gU28sIGluIHRoZSBjYXNlIG9mIGB6bDMwNzN4YCwgaXQncyBqdXN0IG5ldmVyIGdvaW5nIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSBpbiBhIFN5emthbGxlciBlbnZpcm9ubWVudC5cblxuTGV0J3MgdGhpbmsgYWJvdXQgYWx0ZXJuYXRpdmVzLiBgaWNlYCBpcyBvdXQ7IGl0J3MgYSBQQ0kgZHJpdmVyIGZvciBJbnRlbCBFODAwLCBhbmQgU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBnb29kIFFFTVUgZW11bGF0aW9uIGZvciB0aGF0IGhhcmR3YXJlLiBTYW1lIHdpdGggYG1seDVgIChNZWxsYW5veCBDb25uZWN0WC01KSBhbmQgYHB0cF9vY3BgIChPcGVuIENvbXB1dGUgUHJvamVjdCBUaW1lIENhcmQpLiBObyBRRU1VIGVtdWxhdGlvbiBmb3IgYW55IG9mIHRob3NlIGluIFN5emthbGxlciBlaXRoZXIuXG5cbldhaXQgYSBtaW51dGUsIG1heWJlIHRoZXJlJ3MgYSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBpbiBgbmV0ZGV2c2ltYD8gTGV0IG1lIGNoZWNrIHRvIHNlZSBpZiB0aGF0J3MgYSBwb3NzaWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM3MTcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjA6MzAuMzU4NTA4MTMyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE0MDY1NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwbGxfZGV2aWNlX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdD01Njg9RGV2aWNlIHNob3VsZCBpbXBsZW1lbnQgc2V0IG9mIG9wZXJhdGlvbnMgYW5kIHJlZ2lzdGVyIGRldmljZSB2aWFcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NTY5OmRwbGxfZGV2aWNlX3JlZ2lzdGVyKCkgYXQgd2hpY2ggcG9pbnQgaXQgYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTU3MC11c2Vycy4gTXVsdGlwbGUgZHJpdmVyIGluc3RhbmNlcyBjYW4gb2J0YWluIHJlZmVyZW5jZSB0byBpdCB3aXRoXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q9NjM0PVRoZSByZWdpc3RyYXRpb24gcGFydCBpcyB0aGVuIGxvb2tzIGxpa2UgdGhpcyBwYXJ0Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTY0NS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NjQ2OiAgICAgICAgZXJyID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoYnAtXFx1MDAzZWRwbGwsIERQTExfVFlQRV9QUFMsIFxcdTAwMjZkcGxsX29wcywgYnApO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC02NDctICAgICAgICBpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTQ0OD1kcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmluZChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDYwLS8qKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NjE6ICogZHBsbF9kZXZpY2VfcmVnaXN0ZXIgLSByZWdpc3RlciB0aGUgZHBsbCBkZXZpY2UgaW4gdGhlIHN1YnN5c3RlbVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjItICogQGRwbGw6IHBvaW50ZXIgdG8gYSBkcGxsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDczLSAqL1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NzQ6aW50IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZW51bSBkcGxsX3R5cGUgdHlwZSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDc1LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHMsIHZvaWQgKnByaXYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTE3LX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTE4OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTE5LVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE5MzA9emwzMDczeF9kcGxsX3BpbnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE5ODAtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE5ODE6ICogemwzMDczeF9kcGxsX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE5ODItICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTk4OD1zdGF0aWMgaW50XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE5ODk6emwzMDczeF9kcGxsX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE5OTAte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMDctXFx0emxkcGxsLVxcdTAwM2V0eXBlID0gemwzMDczeF9wcm9wX2RwbGxfdHlwZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyMDA4OlxcdHJjID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoemxkcGxsLVxcdTAwM2VkcGxsX2RldiwgemxkcGxsLVxcdTAwM2V0eXBlLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDA5LVxcdFxcdFxcdFxcdCAgXFx1MDAyNnpsZHBsbC1cXHUwMDNlb3BzLCB6bGRwbGwpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMjItICogVW5yZWdpc3RlcnMgZ2l2ZW4gRFBMTCBkZXZpY2UgZnJvbSBEUExMIHN1Yi1zeXN0ZW0gcHJldmlvdXNseSByZWdpc3RlcmVkXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjIwMjM6ICogYnkgQHpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIuXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMjQtICovXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MjQ0OD16bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0NTEtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI0NTI6XFx0cmMgPSB6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyKHpsZHBsbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0NTMtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9NDE5ND1pY2VfZHBsbF9pbml0X2RwbGwoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbCAqZCwgYm9vbCBjZ3UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjE1LVxcdFxcdFxcdGljZV9kcGxsX3VwZGF0ZV9zdGF0ZShwZiwgZCwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDIxNjpcXHRcXHRyZXQgPSBkcGxsX2RldmljZV9yZWdpc3RlcihkLVxcdTAwM2VkcGxsLCB0eXBlLCBvcHMsIGQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMTctXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYz00MjA9c3RhdGljIGludCBtbHg1X2RwbGxfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmFkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jLTQ1MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jOjQ1MjpcXHRlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihtZHBsbC1cXHUwMDNlZHBsbCwgRFBMTF9UWVBFX0VFQyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jLTQ1My1cXHRcXHRcXHRcXHQgICBcXHUwMDI2bWx4NV9kcGxsX2RldmljZV9vcHMsIG1kcGxsKTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz01MDU5PXB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTI0LVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1MTI1OlxcdGVyciA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKGJwLVxcdTAwM2VkcGxsLCBEUExMX1RZUEVfUFBTLCBcXHUwMDI2ZHBsbF9vcHMsIGJwKTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTEyNi1cXHRpZiAoZXJyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9kcGxsLmg9MjgwPXZvaWQgZHBsbF9kZXZpY2VfcHV0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZHBsbF90cmFja2VyICp0cmFja2VyKTtcXG5pbmNsdWRlL2xpbnV4L2RwbGwuaC0yODEtXFxuaW5jbHVkZS9saW51eC9kcGxsLmg6MjgyOmludCBkcGxsX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGVudW0gZHBsbF90eXBlIHR5cGUsXFxuaW5jbHVkZS9saW51eC9kcGxsLmgtMjgzLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHMsIHZvaWQgKnByaXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMDozMS45NzI1ODIxNjZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE1NDU5NTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEUExMIERldmljZSBSZWdpc3RyYXRpb24gaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBEUExMIGRldmljZXMgYXJlIGhhbmRsZWQsIGFuZCBpdCBzZWVtcyBsaWtlIGBuZXRkZXZzaW1gIGlzbid0IHJlZ2lzdGVyaW5nIGFueS4gVGhpcyBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nIOKAkyBEUExMIGRldmljZXMgYXJlICpvbmx5KiByZWdpc3RlcmVkIGJ5IHRoZSBoYXJkd2FyZSBkcml2ZXJzIGZvciBwaHlzaWNhbCBkZXZpY2VzLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICpwb3NzaWJseSogaGl0IGBkcGxsX3Bpbl9mcmVxX3NldGAgd2l0aG91dCBoYXZpbmcgYW55IGFjdHVhbCBEUExMIGRldmljZXMgcHJlc2VudD8gTm8sIHRoYXQncyBub3QgcG9zc2libGUuIGBkcGxsX3Bpbl9mcmVxX3NldGAgaXMgY2FsbGVkIGJ5IGBkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHJgLCBhbmQgdGhhdCBjb21lcyBmcm9tIGBkcGxsX25sX3Bpbl9zZXRfZG9pdGAuIEJ1dCBgZHBsbF9ubF9waW5fc2V0X2RvaXRgIHJlbGllcyBvbiBgZHBsbF9waW5fcHJlX2RvaXRgIGZpbmRpbmcgYSBwaW4gaW4gYGRwbGxfcGluX3hhYC5cblxuQW5kIGhvdyBkb2VzIGEgcGluIGV2ZW4gKmdldCogaW50byBgZHBsbF9waW5feGFgPyBJdCdzIGFsbCBtYW5hZ2VkIGJ5IGBkcGxsX3Bpbl9hbGxvY2AsIHdoaWNoIGlzICpvbmx5KiBjYWxsZWQgYnkgYGRwbGxfcGluX2dldGAuIENyaXRpY2FsbHksIGBkcGxsX3Bpbl9nZXRgIGlzIGl0c2VsZiBvbmx5IGNhbGxlZCBieSB0aGUgYWZvcmVtZW50aW9uZWQgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycy5cblxuU28sIGluIGEgdmlydHVhbGl6ZWQgc2V0dXAgbGlrZSBRRU1VIG9yIEdDRSwgd2l0aG91dCB0aG9zZSBzcGVjaWZpYyBQQ0llIG9yIEkyQyBkZXZpY2VzLCB0aGVyZSdzIG5vIHBhdGggdG8gcmVnaXN0ZXJpbmcgRFBMTCBwaW5zLiBUaGlzIG1lYW5zIGBkcGxsX3Bpbl9wcmVfZG9pdGAgd2lsbCAqYWx3YXlzKiBmYWlsIHdpdGggYW4gYC1FTk9ERVZgIGVycm9yLiBUaGVyZWZvcmUsIGBkcGxsX3Bpbl9mcmVxX3NldGAgd2lsbCBuZXZlciBiZSByZWFjaGVkIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC5cblxuTm93LCBhIGJpdCBvZiBhIHRhbmdlbnQuIFdoYXQgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGB6bDMwNzN4YCB3b3JraW5nIHdpdGggYGkyYy1zdHViYD8gSXQncyB3b3J0aCBjb25zaWRlcmluZy4gTGV0J3Mgc2VlIGlmIGB6bDMwNzN4X3JlYWRfdTE2YCB3aWxsIHN1Y2NlZWQgd2l0aCBgaTJjLXN0dWJgLlxuXG5JZiBJIGxvYWQgYGkyYy1zdHViYCB3aXRoIHRoZSBgY2hpcF9hZGRyPTB4MjBgIHBhcmFtZXRlciwgaXQgY3JlYXRlcyBhbiBJMkMgZGV2aWNlIGF0IGFkZHJlc3MgMHgyMC4gVGhlbiBJJ2Qgd3JpdGUgXCJ6bDMwNzMxIDB4MjBcIiB0byBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAuIFRoaXMgc2hvdWxkIG1ha2UgdGhlIEkyQyBjb3JlIGJpbmQgdGhlIGB6bDMwNzN4YCBkcml2ZXIgdG8gdGhlIG5ldyBkZXZpY2UuIFNvIHRoYXQgbWVhbnMgYHpsMzA3M3hfaTJjX3Byb2JlYCBpcyBjYWxsZWQuIEl0IGNhbGxzIGB6bDMwNzN4X2Rldl9wcm9iZWAsIHdoaWNoIGF0dGVtcHRzIHRvIHJlYWQgYFpMX1JFR19JRGAuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgdGhhdCByZWdpc3RlciBpcy4uLiBMZXQgbWUgZ28gY2hlY2sgYFpMX1JFR19JRGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzMyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIwOjQxLjEyNzE4MDM3N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyODQzNTIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJaTF9SRUdfSURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jPTk4MT1pbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05ODgtXFx0LyogUmVhZCBjaGlwIElEICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk4OTpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19JRCwgXFx1MDAyNmlkKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTkwLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYz0yNT16bDMwNzN4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtMzMtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jOjM0OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcXHUwMDI2aWQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy0zNS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtNTAtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjUxOiAqIFpMX1JFR19JRFggLSBkZWZpbmUgaW5kZXhlZCByZWdpc3RlclxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC01Mi0gKiBAX2lkeDogaW5kZXggb2YgcmVnaXN0ZXIgdG8gYWNjZXNzXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtNjAtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjYxOiNkZWZpbmUgWkxfUkVHX0lEWChfaWR4LCBfcGFnZSwgX29mZnNldCwgX3NpemUsIF9pdGVtcywgX3N0cmlkZSlcXHRcXFxcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTYyLVxcdChGSUVMRF9QUkVQKFpMX1JFR19PRkZTRVRfTUFTSyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtNzctI2RlZmluZSBaTF9SRUcoX3BhZ2UsIF9vZmZzZXQsIF9zaXplKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6Nzg6XFx0WkxfUkVHX0lEWCgwLCBfcGFnZSwgX29mZnNldCwgX3NpemUsIDEsIDApXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTc5LVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTg2LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDo4NzojZGVmaW5lIFpMX1JFR19JRFxcdFxcdFxcdFxcdFpMX1JFRygwLCAweDAxLCAyKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC04OC0jZGVmaW5lIFpMX1JFR19SRVZJU0lPTlxcdFxcdFxcdFxcdFpMX1JFRygwLCAweDAzLCAyKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTEwMS0jZGVmaW5lIFpMX1JFR19SRUZfTU9OX1NUQVRVUyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MTAyOlxcdFpMX1JFR19JRFgoX2lkeCwgMiwgMHgwMiwgMSwgWkwzMDczWF9OVU1fUkVGUywgMSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTAzLSNkZWZpbmUgWkxfUkVGX01PTl9TVEFUVVNfT0tcXHRcXHRcXHQwXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTEyLSNkZWZpbmUgWkxfUkVHX0RQTExfTU9OX1NUQVRVUyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MTEzOlxcdFpMX1JFR19JRFgoX2lkeCwgMiwgMHgxMCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTExNC0jZGVmaW5lIFpMX0RQTExfTU9OX1NUQVRVU19TVEFURVxcdFxcdEdFTk1BU0soMSwgMClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xMjAtI2RlZmluZSBaTF9SRUdfRFBMTF9SRUZTRUxfU1RBVFVTKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxMjE6XFx0WkxfUkVHX0lEWChfaWR4LCAyLCAweDMwLCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTIyLSNkZWZpbmUgWkxfRFBMTF9SRUZTRUxfU1RBVFVTX1JFRlNFTFxcdFxcdEdFTk1BU0soMywgMClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xMjYtI2RlZmluZSBaTF9SRUdfUkVGX0ZSRVEoX2lkeClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjEyNzpcXHRaTF9SRUdfSURYKF9pZHgsIDIsIDB4NDQsIDQsIFpMMzA3M1hfTlVNX1JFRlMsIDQpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTEyOC1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xNTItI2RlZmluZSBaTF9SRUdfUkVGX1BIQVNFKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxNTM6XFx0WkxfUkVHX0lEWChfaWR4LCA0LCAweDIwLCA2LCBaTDMwNzNYX05VTV9SRUZTLCA2KVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xNTQtXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTU5LSNkZWZpbmUgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjE2MDpcXHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MDQsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCA0KVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xNjEtI2RlZmluZSBaTF9EUExMX01PREVfUkVGU0VMX01PREVcXHRcXHRHRU5NQVNLKDIsIDApXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTY5LSNkZWZpbmUgWkxfUkVHX0RQTExfQ1RSTChfaWR4KVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MTcwOlxcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgwNSwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDQpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTE3MS0jZGVmaW5lIFpMX0RQTExfQ1RSTF9USUVfQ0xFQVJcXHRcXHRcXHRCSVQoMClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xNzUtI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9SRUFEKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxNzY6XFx0WkxfUkVHX0lEWChfaWR4LCA1LCAweDI4LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTc3LSNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX1NFTVxcdFxcdFxcdEJJVCg0KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTE5MS0jZGVmaW5lIFpMX1JFR19EUExMX1BIQVNFX0VSUl9EQVRBKF9pZHgpXFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxOTI6XFx0WkxfUkVHX0lEWChfaWR4LCA1LCAweDU1LCA2LCBaTDMwNzNYX01BWF9DSEFOTkVMUywgNilcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTkzLVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTE5OC0jZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MTk5OlxcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwMCwgNiwgNCwgMHgyMClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMjAwLSNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzRcXHRcXHRaTF9SRUcoNywgMHgwMCwgNilcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0yMDktI2RlZmluZSBaTF9SRUdfU1lOVEhfQ1RSTChfaWR4KVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MjEwOlxcdFpMX1JFR19JRFgoX2lkeCwgOSwgMHgwMCwgMSwgWkwzMDczWF9OVU1fU1lOVEhTLCAxKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0yMTEtI2RlZmluZSBaTF9TWU5USF9DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMjE5LSNkZWZpbmUgWkxfUkVHX09VVFBVVF9DVFJMKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoyMjA6XFx0WkxfUkVHX0lEWChfaWR4LCA5LCAweDI4LCAxLCBaTDMwNzNYX05VTV9PVVRTLCAxKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0yMjEtI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlxcdFxcdFxcdEJJVCgwKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTI2Ni0jZGVmaW5lIFpMX1JFR19EUExMX1JFRl9QUklPKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoyNjc6XFx0WkxfUkVHX0lEWChfaWR4LCAxMiwgMHg1MiwgMSwgWkwzMDczWF9OVU1fUkVGUyAvIDIsIDEpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTI2OC0jZGVmaW5lIFpMX0RQTExfUkVGX1BSSU9fUkVGX1BcXHRcXHRcXHRHRU5NQVNLKDMsIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIwOjQyLjc1NTYxOTY5OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODI2NjYyMTkxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIFBhdGhzIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBaTF9SRUdfSURgIG1hcHMgdG8gYSBzcGVjaWZpYyByZWdpc3RlciB3aXRoaW4gdGhlIGB6bDMwNzN4YCBkcml2ZXIsIHdoaWNoIHVzZXMgYHJlZ21hcGAgd2l0aCBhIGN1c3RvbSBjb25maWd1cmF0aW9uLiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCB0aGVuIEkgcmVhbGl6ZTogYHpsMzA3M3hgIGlzIGFuIEkyQyBkZXZpY2UuIENhbiBJIGV2ZW4gKm1vY2sqIGl0IGluIHN5emthbGxlcj9cblxuUmlnaHQsIHN5emthbGxlciBkb2Vzbid0IGhhdmUgc3BlY2lmaWMgc3VwcG9ydCBmb3IgYHpsMzA3M3hgLiBJdCBkb2Vzbid0IGtub3cgdGhlIHJpZ2h0IGNoaXAgSUQgdG8gcG9wdWxhdGUgdGhlIGBpMmMtc3R1YmAsIHNvIHRoZSBkcml2ZXIgd29uJ3QgcHJvYmUgc3VjY2Vzc2Z1bGx5LiAgTm8gcHJvYmUsIG5vIHJlZ2lzdGVyZWQgRFBMTCBwaW5zLiAgV2l0aG91dCB0aG9zZSBwaW5zLCB0aGUgY3J1Y2lhbCBgZHBsbF9waW5fcHJlX2RvaXRgIGZhaWxzIHdpdGggYC1FTk9ERVZgLiBUaGlzIG1lYW5zIGFsbCB0aGUgbmV0bGluayBjaGFuZ2VzIGluIGBkcGxsX25ldGxpbmsuY2Ag4oCTIGBkcGxsX3Bpbl9mcmVxX3NldGAsIGBkcGxsX3Bpbl9lc3luY19zZXRgLCBhbmQgc28gb24g4oCTIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIG15IHZpcnR1YWwgZW52aXJvbm1lbnQuXG5cbkkgYXNrIG15c2VsZiwgaXMgdGhlcmUgKmFueSogb3RoZXIgd2F5IHRvIHJlZ2lzdGVyIGEgRFBMTCBwaW4/IEkgY2hlY2sgdGhlIGV4aXN0aW5nIGRyaXZlcnMgdXNpbmcgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyYC4gYGljZWAsIGBtbHg1YCwgYHB0cF9vY3BgLCBhbmQgYHpsMzA3M3hgIGFyZSB0aGUgb25seSBvbmVzLiBCdXQgdGhleSdyZSBhbGwgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycy4gIE5vbmUgY2FuIGJlIHJlYWxpc3RpY2FsbHkgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVSBvciBzeXprYWxsZXIsIHJpZ2h0PyAgVGhlIE9DUCBUaW1lIENhcmQ/IE5vLiBNZWxsYW5veCBDb25uZWN0WC01PyBOb3BlLiBJbnRlbCBFODAwPyBObyBjaGFuY2UuICBUaGVyZWZvcmUsIEknbSBzdHVjazogdGhlcmUncyBubyB3YXkgdG8gcmVnaXN0ZXIgYSBEUExMIGRldmljZSBvciBwaW4gaW4gYSBzeXprYWxsZXIgY29udGV4dC4gIFRoZXJlZm9yZSwgdGhlIG5ldGxpbmsgY29kZSBtb2RpZmllZCBieSB0aGUgcGF0Y2ggaXMgdW5yZWFjaGFibGUgaW4gc3l6a2FsbGVyLlxuXG5MZXQgbWUgdGhpbmsuIElzIHRoZXJlIGFueSBzb2Z0d2FyZSBEUExMIGRyaXZlcj8gSSBzZWFyY2ggdGhlIGNvZGUgYW5kIGZpbmQgbm90aGluZywganVzdCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycy4gSXMgYW55IG90aGVyIGRyaXZlciB0aGF0IHVzZXMgYGRwbGxfcGluX2dldGA/IEFnYWluLCBqdXN0IHRoZSBwaHlzaWNhbCBvbmVzLiBTbywgaXQncyBwcmV0dHkgY2xlYXI6IG5vIG90aGVyIGRyaXZlcnMgcmVnaXN0ZXIgRFBMTCBwaW5zLlxuXG5Db3VsZCB0aG9zZSBmdW5jdGlvbnMgYmUgY2FsbGVkIGZyb20gc29tZXdoZXJlIGVsc2U/IE5vLCBgZHBsbF9waW5fZnJlcV9zZXRgIGlzIHN0YXRpYyBhbmQgb25seSBjYWxsZWQgdGhyb3VnaCBgZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyYCwgYW5kIHRoYXQgcm91dGUgcmVxdWlyZXMgYSB2YWxpZCBwaW4gZnJvbSBgZHBsbF9waW5fcHJlX2RvaXRgIHdoaWNoIHdlIGVzdGFibGlzaGVkIGNhbiBub3Qgb2NjdXIuXG5cbldoYXQgYWJvdXQgdGhlIGNoYW5nZXMgKndpdGhpbiogdGhlIGB6bDMwNzN4YCBkcml2ZXIgaXRzZWxmPyBBaCwgaXQncyBtb2RpZnlpbmcgYSBjYWxsYmFjaywgYHpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcmVmX3N5bmNfc2V0YC4gQmVjYXVzZSBgemwzMDczeGAgd29uJ3QgcHJvYmUgaW4gc3l6a2FsbGVyLCB0aGlzIGNvZGUgaXMgYWxzbyB1bmFjY2Vzc2libGUuXG5cbk9rYXksIGxldCBtZSByZXZpZXcgdGhlIGluc3RydWN0aW9ucy4gVGhleSBhcmUgZXhwbGljaXQuICBUaGUgcGF0Y2ggaW5jbHVkZXMgb25seSBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSB3aGVuIG9ubHkgc29mdHdhcmUgZW11bGF0aW9uIG9mIGhhcmR3YXJlIGlzIHVzZWQuIFRoZSBEUExMIHN1YnN5c3RlbSwgd2hpbGUgY29yZSwgcmVxdWlyZXMgYSByZWdpc3RlcmVkIERQTEwgZGV2aWNlIGFuZCBwaW4uICBUaGVyZSBhcmUgbm8gc29mdHdhcmUtZW11bGF0ZWQgRFBMTCBkcml2ZXJzLCBhbmQgdGhlIGV4aXN0aW5nIG9uZXMgYXJlIGZvciBwaHlzaWNhbCBoYXJkd2FyZS4gIE5vIHdheSB0byByZWFjaCB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZSBpbiBzeXprYWxsZXIuXG5cbkknbSBzdGFydGluZyB0byB3b25kZXIsIGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSBvZiBsb2FkaW5nIGEgZHVtbXkgRFBMTCBkcml2ZXI/IE5vLCB0aGVyZSBpc24ndCBvbmUgaW4gdGhlIGtlcm5lbCB0cmVlLiBJIGNvbmZpcm0uIE15IGFuYWx5c2lzIGlzIHNvbGlkLiBUaGlzIHBhdGNoJ3MgY2hhbmdlcyBhcmUgdW5yZWFjaGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTY2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMTowMS4wMjIyNDM4OTNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTIwLCJFcnJvciI6IllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy5cbllvdSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCBvZiB0aGlzIGV4YWN0IHRvb2wgY2FsbCBpbiB5b3VyIGNvbnZlcnNhdGlvbiBoaXN0b3J5LlxuRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsXG50cnkgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0b29sLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXAuIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBsbF9kZXZpY2VfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXFxuWW91IGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0IG9mIHRoaXMgZXhhY3QgdG9vbCBjYWxsIGluIHlvdXIgY29udmVyc2F0aW9uIGhpc3RvcnkuXFxuRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsXFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLlwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMTowMS4wMjIyODEwMzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQyOTU4NTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEUExMIFBhdGNoJ3MgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBhbHJlYWR5IGRvbmUgbXkgaG9tZXdvcmsgYW5kIHNlYXJjaGVkIGZvciBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJgLiBUaGUgcmVzdWx0cyBhcmUgbGltaXRlZCB0byB0aG9zZSBmb3VyIGRyaXZlcnM6IGBpY2VgLCBgbWx4NWAsIGBwdHBfb2NwYCwgYW5kIGB6bDMwNzN4YC4gVGhhdCdzIGl0LiBObyBzaWduIG9mIGEgZHVtbXkgb3IgdmlydHVhbCBEUExMIGRyaXZlciBhbnl3aGVyZSBpbiB0aGUga2VybmVsLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UgaXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgaW4gdHlwaWNhbCBmdXp6aW5nIHNldHVwcy5cblxuVGhlIHBhdGNoIGl0c2VsZiB0YXJnZXRzIGBkcGxsX25ldGxpbmsuY2AsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgbmV0bGluayBjb21tYW5kcyByZWxhdGVkIHRvIERQTEwgcGluIHByb3BlcnRpZXMuIEZyZXF1ZW5jeSwgZXN5bmMsIHJlZl9zeW5jLCBwaGFzZSBhZGp1c3RtZW50cyDigJMgYWxsIG9mIGl0IGhpbmdlcyBvbiBoYXZpbmcgYSByZWdpc3RlcmVkIERQTEwgcGluIHRvIHdvcmsgd2l0aC4gQW5kIHRob3NlIHBpbnM/IFRoZXkncmUgZXhjbHVzaXZlbHkgcmVnaXN0ZXJlZCBieSAqcGh5c2ljYWwqIGhhcmR3YXJlIGRyaXZlcnMsIGFzIEkgb2JzZXJ2ZWQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgZGV2aWNlcyBoZXJlLCBhbmQgbm9uZSBvZiB0aGVtIGFyZSBzb21ldGhpbmcgeW91J2QgZmluZCBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBUaGlzIGlzIGJlY2F1c2UgdGhleSBhcmUgcmVhbCBoYXJkd2FyZSBkZXZpY2VzIGxpa2UgdGhlIEludGVsIEU4MDAsIE1lbGxhbm94IENvbm5lY3RYLTUsIHRoZSBPQ1AgVGltZSBDYXJkLCBvciB0aGUgTWljcm9zZW1pIFpMMzA3M3guXG5cblNpbmNlIHRoZXJlJ3Mgbm8gc29mdHdhcmUtYmFzZWQgRFBMTCBkcml2ZXIgZm9yIHVzIHRvIHVzZSwgdGhlIG1vZGlmaWVkIGNvZGUgaW4gYGRwbGxfbmV0bGluay5jYCBhbmQgZXZlbiB0aGUgY2hhbmdlcyB3aXRoaW4gdGhlIGB6bDMwNzN4YCBkcml2ZXIgYmVjb21lIGlycmVsZXZhbnQgZm9yIG91ciB0ZXN0aW5nLiBUaGUgbmV0bGluayBpbnRlcmZhY2UgaXMgYSBkZWFkIGVuZC4gVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBUaGVyZSdzIG5vIGVmZmVjdGl2ZSB3YXkgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGUgaW4gbXkgdmlydHVhbCBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg5MywiT3V0cHV0VG9rZW5zIjoyMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjE6MDkuNDUxODY4ODI4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgRFBMTCBzdWJzeXN0ZW0gKGRwbGxfbmV0bGluay5jKSBhbmQgdGhlIE1pY3Jvc2VtaSBaTDMwNzN4IERQTEwgZHJpdmVyICh6bDMwNzN4L2RwbGwuYykuIFRoZSBtb2RpZmllZCBjb2RlIGluIGRwbGxfbmV0bGluay5jIGhhbmRsZXMgbmV0bGluayBjb21tYW5kcyBmb3Igc2V0dGluZyBEUExMIHBpbiBwcm9wZXJ0aWVzLiBIb3dldmVyLCB0aGVzZSBuZXRsaW5rIGNvbW1hbmRzIHJlcXVpcmUgYSByZWdpc3RlcmVkIERQTEwgcGluIHRvIG9wZXJhdGUgb24uIERQTEwgcGlucyBhcmUgb25seSByZWdpc3RlcmVkIGJ5IHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgKEludGVsIEU4MDAgJ2ljZScsIE1lbGxhbm94IENvbm5lY3RYLTUgJ21seDUnLCBPQ1AgVGltZSBDYXJkICdwdHBfb2NwJywgYW5kIE1pY3Jvc2VtaSAnemwzMDczeCcpLiBOb25lIG9mIHRoZXNlIGhhcmR3YXJlIGRldmljZXMgYXJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGR1bW15IERQTEwgZHJpdmVyIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGFuZCB0aGUgemwzMDczeCBkcml2ZXIgY29kZSBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERQTEwgc3Vic3lzdGVtIChkcGxsX25ldGxpbmsuYykgYW5kIHRoZSBNaWNyb3NlbWkgWkwzMDczeCBEUExMIGRyaXZlciAoemwzMDczeC9kcGxsLmMpLiBUaGUgbW9kaWZpZWQgY29kZSBpbiBkcGxsX25ldGxpbmsuYyBoYW5kbGVzIG5ldGxpbmsgY29tbWFuZHMgZm9yIHNldHRpbmcgRFBMTCBwaW4gcHJvcGVydGllcy4gSG93ZXZlciwgdGhlc2UgbmV0bGluayBjb21tYW5kcyByZXF1aXJlIGEgcmVnaXN0ZXJlZCBEUExMIHBpbiB0byBvcGVyYXRlIG9uLiBEUExMIHBpbnMgYXJlIG9ubHkgcmVnaXN0ZXJlZCBieSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIChJbnRlbCBFODAwICdpY2UnLCBNZWxsYW5veCBDb25uZWN0WC01ICdtbHg1JywgT0NQIFRpbWUgQ2FyZCAncHRwX29jcCcsIGFuZCBNaWNyb3NlbWkgJ3psMzA3M3gnKS4gTm9uZSBvZiB0aGVzZSBoYXJkd2FyZSBkZXZpY2VzIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZS1lbXVsYXRlZCBkdW1teSBEUExMIGRyaXZlciBhdmFpbGFibGUgaW4gdGhlIGtlcm5lbC4gQ29uc2VxdWVudGx5LCB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZSBhbmQgdGhlIHpsMzA3M3ggZHJpdmVyIGNvZGUgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMTowOS40NTE4OTM2NDhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow6bznv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 12:17:13 +0000 UTC FinishedAt: 2026-08-07 12:21:13 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgRFBMTCBzdWJzeXN0ZW0gKGRwbGxfbmV0bGluay5jKSBhbmQgdGhlIE1pY3Jvc2VtaSBaTDMwNzN4IERQTEwgZHJpdmVyICh6bDMwNzN4L2RwbGwuYykuIFRoZSBtb2RpZmllZCBjb2RlIGluIGRwbGxfbmV0bGluay5jIGhhbmRsZXMgbmV0bGluayBjb21tYW5kcyBmb3Igc2V0dGluZyBEUExMIHBpbiBwcm9wZXJ0aWVzLiBIb3dldmVyLCB0aGVzZSBuZXRsaW5rIGNvbW1hbmRzIHJlcXVpcmUgYSByZWdpc3RlcmVkIERQTEwgcGluIHRvIG9wZXJhdGUgb24uIERQTEwgcGlucyBhcmUgb25seSByZWdpc3RlcmVkIGJ5IHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgKEludGVsIEU4MDAgJiMzOTtpY2UmIzM5OywgTWVsbGFub3ggQ29ubmVjdFgtNSAmIzM5O21seDUmIzM5OywgT0NQIFRpbWUgQ2FyZCAmIzM5O3B0cF9vY3AmIzM5OywgYW5kIE1pY3Jvc2VtaSAmIzM5O3psMzA3M3gmIzM5OykuIE5vbmUgb2YgdGhlc2UgaGFyZHdhcmUgZGV2aWNlcyBhcmUgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUtZW11bGF0ZWQgZHVtbXkgRFBMTCBkcml2ZXIgYXZhaWxhYmxlIGluIHRoZSBrZXJuZWwuIENvbnNlcXVlbnRseSwgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UgYW5kIHRoZSB6bDMwNzN4IGRyaXZlciBjb2RlIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDg4MGMyOGNmNWZmYzE2MTJmYmNiNjE5MTdkZDFiZjRiNWE5ZjA2MmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjE4OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdCBiL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdFxuaW5kZXggZjgzMTUwOTE3ODE0ZS4uN2MxMTdhZTM3Y2MxYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0XG5AQCAtMTE2LDggJiM0MzsxMTYsOSBAQCBTaGFyZWQgcGluc1xuIEEgc2luZ2xlIHBpbiBvYmplY3QgY2FuIGJlIGF0dGFjaGVkIHRvIG11bHRpcGxlIGRwbGwgZGV2aWNlcy5cbiBUaGVuIHRoZXJlIGFyZSB0d28gZ3JvdXBzIG9mIGNvbmZpZ3VyYXRpb24ga25vYnM6XG4gXG4tMSkgU2V0IG9uIGEgcGluIC0gdGhlIGNvbmZpZ3VyYXRpb24gYWZmZWN0cyBhbGwgZHBsbCBkZXZpY2VzIHBpbiBpc1xuLSAgIHJlZ2lzdGVyZWQgdG8gKGkuZS4sIGBgRFBMTF9BX1BJTl9GUkVRVUVOQ1lgYCksXG4mIzQzOzEpIFNldCBvbiBhIHBpbiAtIHRoZSBjb25maWd1cmF0aW9uIGlzIGEgcHJvcGVydHkgb2YgdGhlIHBpbiBpdHNlbGYgYW5kXG4mIzQzOyAgIGFwcGxpZXMgdG8gYWxsIGRwbGwgZGV2aWNlcyB0aGUgcGluIGlzIHJlZ2lzdGVyZWQgd2l0aFxuJiM0MzsgICAoaS5lLiwgYGBEUExMX0FfUElOX0ZSRVFVRU5DWWBgKSxcbiAyKSBTZXQgb24gYSBwaW4tZHBsbCB0dXBsZSAtIHRoZSBjb25maWd1cmF0aW9uIGFmZmVjdHMgb25seSBzZWxlY3RlZFxuICAgIGRwbGwgZGV2aWNlIChpLmUuLCBgYERQTExfQV9QSU5fUFJJT2BgLCBgYERQTExfQV9QSU5fU1RBVEVgYCxcbiAgICBgYERQTExfQV9QSU5fRElSRUNUSU9OYGApLlxuQEAgLTUwNyw5ICYjNDM7NTA4LDkgQEAgYXMgd2VsbCBhcyBwYXJhbWV0ZXIgYmVpbmcgY29uZmlndXJlZCAoYGBEUExMX0FfTU9ERWBgKS5cbiBgYERQTExfQ01EX1BJTl9TRVRgYCAtIHRvIHRhcmdldCBhIHBpbiB1c2VyIG11c3QgcHJvdmlkZSBhXG4gYGBEUExMX0FfUElOX0lEYGAsIHdoaWNoIGlzIHVuaXF1ZSBpZGVudGlmaWVyIG9mIGEgcGluIGluIHRoZSBzeXN0ZW0uXG4gQWxzbyBjb25maWd1cmVkIHBpbiBwYXJhbWV0ZXJzIG11c3QgYmUgYWRkZWQuXG4tSWYgYGBEUExMX0FfUElOX0ZSRVFVRU5DWWBgIGlzIGNvbmZpZ3VyZWQsIHRoaXMgYWZmZWN0cyBhbGwgdGhlIGRwbGxcbi1kZXZpY2VzIHRoYXQgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBwaW4sIHRoYXQgaXMgd2h5IGZyZXF1ZW5jeSBhdHRyaWJ1dGVcbi1zaGFsbCBub3QgYmUgZW5jbG9zZWQgaW4gYGBEUExMX0FfUElOX1BBUkVOVF9ERVZJQ0VgYC5cbiYjNDM7SWYgYGBEUExMX0FfUElOX0ZSRVFVRU5DWWBgIGlzIGNvbmZpZ3VyZWQsIGl0IGlzIGEgcHJvcGVydHkgb2YgdGhlIHBpblxuJiM0MztpdHNlbGYgYW5kIGFwcGxpZXMgdG8gYWxsIGRwbGwgZGV2aWNlcyB0aGUgcGluIGlzIHJlZ2lzdGVyZWQgd2l0aCwgc28gdGhlXG4mIzQzO2ZyZXF1ZW5jeSBhdHRyaWJ1dGUgc2hhbGwgbm90IGJlIGVuY2xvc2VkIGluIGBgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFYGAuXG4gT3RoZXIgYXR0cmlidXRlczogYGBEUExMX0FfUElOX1BSSU9gYCwgYGBEUExMX0FfUElOX1NUQVRFYGAgb3JcbiBgYERQTExfQV9QSU5fRElSRUNUSU9OYGAgbXVzdCBiZSBlbmNsb3NlZCBpblxuIGBgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFYGAgYXMgdGhlaXIgY29uZmlndXJhdGlvbiByZWxhdGVzIHRvIG9ubHkgb25lXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jIGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG5pbmRleCBhZmIzMWMwMDQwMzgyLi5hOTA5Y2Q0NDUxYjAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbkBAIC0xMDc5LDEwICYjNDM7MTA3OSw5IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHR1NjQgZnJlcSA9IG5sYV9nZXRfdTY0KGEpLCBvbGRfZnJlcTtcbi1cdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZiwgKmZhaWxlZDtcbiBcdGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcztcbiYjNDM7XHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG4gXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGw7XG4tXHR1bnNpZ25lZCBsb25nIGk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFkcGxsX3Bpbl9pc19mcmVxX3N1cHBvcnRlZChwaW4sIGZyZXEpKSB7XG5AQCAtMTA5MCwyMiAmIzQzOzEwODksMTcgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoKCFvcHMtXHUwMDNlZnJlcXVlbmN5X3NldCB8fCAhb3BzLVx1MDAzZWZyZXF1ZW5jeV9nZXQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgcmVmLVx1MDAzZWRwbGwtXHUwMDNlbW9kdWxlID09IHBpbi1cdTAwM2Vtb2R1bGUgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2VjbG9ja19pZCA9PSBwaW4tXHUwMDNlY2xvY2tfaWQpIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4tXHRcdFx0XHQgICAgICAgXCYjMzQ7ZnJlcXVlbmN5IHNldCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2VcJiMzNDspO1xuLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cdFx0fVxuLVx0fVxuIFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XG4gXHRpZiAoIXJlZikge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3BpbiBvd25lciBkcGxsIG5vdCBmb3VuZFwmIzM0Oyk7XG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuIFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4mIzQzO1x0aWYgKCFvcHMtXHUwMDNlZnJlcXVlbmN5X3NldCB8fCAhb3BzLVx1MDAzZWZyZXF1ZW5jeV9nZXQpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O2ZyZXF1ZW5jeSBzZXQgbm90IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4gXHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG4gXHRyZXQgPSBvcHMtXHUwMDNlZnJlcXVlbmN5X2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLCBkcGxsLFxuIFx0XHRcdFx0IGRwbGxfcHJpdihkcGxsKSwgXHUwMDI2b2xkX2ZyZXEsIGV4dGFjayk7XG5AQCAtMTExNiw2OCAmIzQzOzExMTAsNDIgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRpZiAoZnJlcSA9PSBvbGRfZnJlcSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbi1cdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4tXHRcdGlmICghb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbi1cdFx0XHRcdFx0IGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgZnJlcSwgZXh0YWNrKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdGZhaWxlZCA9IHJlZjtcbi1cdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcJiMzNDtmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldVwmIzM0Oyxcbi1cdFx0XHRcdFx0ICAgZHBsbC1cdTAwM2VpZCk7XG4tXHRcdFx0Z290byByb2xsYmFjaztcbi1cdFx0fVxuJiM0MztcdHJldCA9IG9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG4mIzQzO1x0XHRcdFx0IGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgZnJlcSwgZXh0YWNrKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O2ZyZXF1ZW5jeSBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiV1XCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwaW4pO1xuIFxuIFx0cmV0dXJuIDA7XG4tXG4tcm9sbGJhY2s6XG4tXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbi1cdFx0aWYgKHJlZiA9PSBmYWlsZWQpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoIW9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG4tXHRcdGlmIChvcHMtXHUwMDNlZnJlcXVlbmN5X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuLVx0XHRcdFx0ICAgICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgb2xkX2ZyZXEsIGV4dGFjaykpXG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtzZXQgZnJlcXVlbmN5IHJvbGxiYWNrIGZhaWxlZFwmIzM0Oyk7XG4tXHR9XG4tXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50XG4gZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuLVx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkO1xuIFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xuIFx0c3RydWN0IGRwbGxfcGluX2VzeW5jIGVzeW5jO1xuIFx0dTY0IGZyZXEgPSBubGFfZ2V0X3U2NChhKTtcbiYjNDM7XHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG4gXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGw7XG4gXHRib29sIHN1cHBvcnRlZCA9IGZhbHNlO1xuLVx0dW5zaWduZWQgbG9uZyBpO1xuLVx0aW50IHJldDtcbiYjNDM7XHRpbnQgcmV0LCBpO1xuIFxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoKCFvcHMtXHUwMDNlZXN5bmNfc2V0IHx8ICFvcHMtXHUwMDNlZXN5bmNfZ2V0KSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHJlZi1cdTAwM2VkcGxsLVx1MDAzZW1vZHVsZSA9PSBwaW4tXHUwMDNlbW9kdWxlIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgcmVmLVx1MDAzZWRwbGwtXHUwMDNlY2xvY2tfaWQgPT0gcGluLVx1MDAzZWNsb2NrX2lkKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuLVx0XHRcdFx0ICAgICAgIFwmIzM0O2VtYmVkZGVkIHN5bmMgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXHRcdH1cbi1cdH1cbiBcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xuIFx0aWYgKCFyZWYpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmRcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiBcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuJiM0MztcdGlmICghb3BzLVx1MDAzZWVzeW5jX3NldCB8fCAhb3BzLVx1MDAzZWVzeW5jX2dldCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7ZW1iZWRkZWQgc3luYyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiBcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbiBcdHJldCA9IG9wcy1cdTAwM2Vlc3luY19nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcbiBcdFx0XHQgICAgIGRwbGxfcHJpdihkcGxsKSwgXHUwMDI2ZXN5bmMsIGV4dGFjayk7XG5AQCAtMTE5Niw0NCAmIzQzOzExNjQsMTcgQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuLVx0XHR2b2lkICpwaW5fZHBsbF9wcml2O1xuLVxuLVx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlZXN5bmNfc2V0KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG4tXHRcdHBpbl9kcGxsX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKTtcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZWVzeW5jX3NldChwaW4sIHBpbl9kcGxsX3ByaXYsIGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcbi1cdFx0XHRcdCAgICAgIGZyZXEsIGV4dGFjayk7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRmYWlsZWQgPSByZWY7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbi1cdFx0XHRcdFx0ICAgXCYjMzQ7ZW1iZWRkZWQgc3luYyBmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDogJXVcJiMzNDssXG4tXHRcdFx0XHRcdCAgIGRwbGwtXHUwMDNlaWQpO1xuLVx0XHRcdGdvdG8gcm9sbGJhY2s7XG4tXHRcdH1cbiYjNDM7XHRyZXQgPSBvcHMtXHUwMDNlZXN5bmNfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXG4mIzQzO1x0XHRcdCAgICAgZHBsbF9wcml2KGRwbGwpLCBmcmVxLCBleHRhY2spO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXG4mIzQzO1x0XHRcdFx0ICAgXCYjMzQ7ZW1iZWRkZWQgc3luYyBmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDogJXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbik7XG4gXG4gXHRyZXR1cm4gMDtcbi1cbi1yb2xsYmFjazpcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuLVx0XHR2b2lkICpwaW5fZHBsbF9wcml2O1xuLVxuLVx0XHRpZiAocmVmID09IGZhaWxlZClcbi1cdFx0XHRicmVhaztcbi1cdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4tXHRcdGlmICghb3BzLVx1MDAzZWVzeW5jX3NldClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuLVx0XHRwaW5fZHBsbF9wcml2ID0gZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbik7XG4tXHRcdGlmIChvcHMtXHUwMDNlZXN5bmNfc2V0KHBpbiwgcGluX2RwbGxfcHJpdiwgZHBsbCwgZHBsbF9wcml2KGRwbGwpLFxuLVx0XHRcdFx0ICAgZXN5bmMuZnJlcSwgZXh0YWNrKSlcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3NldCBlbWJlZGRlZCBzeW5jIGZyZXF1ZW5jeSByb2xsYmFjayBmYWlsZWRcJiMzNDspO1xuLVx0fVxuLVx0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludFxuQEAgLTEyNDEsMTQgJiM0MzsxMTgyLDEyIEBAIGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyByZWZfc3luY19waW5faWR4LFxuIFx0XHRcdCAgICBjb25zdCBlbnVtIGRwbGxfcGluX3N0YXRlIHN0YXRlLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tXG4ge1xuLVx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkO1xuIFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xuIFx0ZW51bSBkcGxsX3Bpbl9zdGF0ZSBvbGRfc3RhdGU7XG4gXHRzdHJ1Y3QgZHBsbF9waW4gKnJlZl9zeW5jX3BpbjtcbiYjNDM7XHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG4gXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGw7XG4tXHR1bnNpZ25lZCBsb25nIGk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmVmX3N5bmNfcGluID0geGFfZmluZChcdTAwMjZwaW4tXHUwMDNlcmVmX3N5bmNfcGlucywgXHUwMDI2cmVmX3N5bmNfcGluX2lkeCxcbkBAIC0xMjgyLDQyICYjNDM7MTIyMSwyMCBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHR9XG4gXHRpZiAoc3RhdGUgPT0gb2xkX3N0YXRlKVxuIFx0XHRyZXR1cm4gMDtcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuLVx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlcmVmX3N5bmNfc2V0KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG4tXHRcdHJldCA9IG9wcy1cdTAwM2VyZWZfc3luY19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbi1cdFx0XHRcdFx0cmVmX3N5bmNfcGluLFxuLVx0XHRcdFx0XHRkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCxcbi1cdFx0XHRcdFx0XHRcdCAgICAgIHJlZl9zeW5jX3BpbiksXG4tXHRcdFx0XHRcdHN0YXRlLCBleHRhY2spO1xuLVx0XHRpZiAocmV0KSB7XG4tXHRcdFx0ZmFpbGVkID0gcmVmO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssIFwmIzM0O3JlZmVyZW5jZSBzeW5jIHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXVcJiMzNDssXG4tXHRcdFx0XHRcdCAgIGRwbGwtXHUwMDNlaWQpO1xuLVx0XHRcdGdvdG8gcm9sbGJhY2s7XG4tXHRcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gb3BzLVx1MDAzZXJlZl9zeW5jX3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuJiM0MztcdFx0XHRcdHJlZl9zeW5jX3BpbixcbiYjNDM7XHRcdFx0XHRkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKSxcbiYjNDM7XHRcdFx0XHRzdGF0ZSwgZXh0YWNrKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O3JlZmVyZW5jZSBzeW5jIHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXVcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgZHBsbC1cdTAwM2VpZCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbik7XG4gXG4gXHRyZXR1cm4gMDtcbi1cbi1yb2xsYmFjazpcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuLVx0XHRpZiAocmVmID09IGZhaWxlZClcbi1cdFx0XHRicmVhaztcbi1cdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4tXHRcdGlmICghb3BzLVx1MDAzZXJlZl9zeW5jX3NldClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuLVx0XHRpZiAob3BzLVx1MDAzZXJlZl9zeW5jX3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuLVx0XHRcdFx0ICAgICAgcmVmX3N5bmNfcGluLFxuLVx0XHRcdFx0ICAgICAgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHJlZl9zeW5jX3BpbiksXG4tXHRcdFx0XHQgICAgICBvbGRfc3RhdGUsIGV4dGFjaykpXG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtzZXQgcmVmZXJlbmNlIHN5bmMgcm9sbGJhY2sgZmFpbGVkXCYjMzQ7KTtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnRcbkBAIC0xNDc4LDExICYjNDM7MTM5NSwxMCBAQCBzdGF0aWMgaW50XG4gZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuLVx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkO1xuIFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xuIFx0czMyIHBoYXNlX2Fkaiwgb2xkX3BoYXNlX2FkajtcbiYjNDM7XHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG4gXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGw7XG4tXHR1bnNpZ25lZCBsb25nIGk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cGhhc2VfYWRqID0gbmxhX2dldF9zMzIocGhhc2VfYWRqX2F0dHIpO1xuQEAgLTE0OTksMjEgJiM0MzsxNDE1LDE2IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuLVx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbi1cdFx0aWYgKCghb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQgfHwgIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHJlZi1cdTAwM2VkcGxsLVx1MDAzZW1vZHVsZSA9PSBwaW4tXHUwMDNlbW9kdWxlIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgcmVmLVx1MDAzZWRwbGwtXHUwMDNlY2xvY2tfaWQgPT0gcGluLVx1MDAzZWNsb2NrX2lkKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtwaGFzZSBhZGp1c3Qgbm90IHN1cHBvcnRlZFwmIzM0Oyk7XG4tXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLVx0XHR9XG4tXHR9XG4gXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcbiBcdGlmICghcmVmKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7cGluIG93bmVyIGRwbGwgbm90IGZvdW5kXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbiYjNDM7XHRpZiAoIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0IHx8ICFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X2dldCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtwaGFzZSBhZGp1c3Qgbm90IHN1cHBvcnRlZFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuIFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuIFx0cmV0ID0gb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbiBcdFx0XHRcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNm9sZF9waGFzZV9hZGosXG5AQCAtMTUyNSw0MSAmIzQzOzE0MzYsMTcgQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4gXHRpZiAocGhhc2VfYWRqID09IG9sZF9waGFzZV9hZGopXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG4tXHRcdHJldCA9IG9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0KHBpbixcbi1cdFx0XHRcdFx0ICAgIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuLVx0XHRcdFx0XHQgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBwaGFzZV9hZGosXG4tXHRcdFx0XHRcdCAgICBleHRhY2spO1xuLVx0XHRpZiAocmV0KSB7XG4tXHRcdFx0ZmFpbGVkID0gcmVmO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXG4tXHRcdFx0XHRcdCAgIFwmIzM0O3BoYXNlIGFkanVzdCBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiV1XCYjMzQ7LFxuLVx0XHRcdFx0XHQgICBkcGxsLVx1MDAzZWlkKTtcbi1cdFx0XHRnb3RvIHJvbGxiYWNrO1xuLVx0XHR9XG4mIzQzO1x0cmV0ID0gb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbiYjNDM7XHRcdFx0XHQgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBwaGFzZV9hZGosIGV4dGFjayk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbiYjNDM7XHRcdFx0XHQgICBcJiMzNDtwaGFzZSBhZGp1c3Qgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldVwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBkcGxsLVx1MDAzZWlkKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGluKTtcbiBcbiBcdHJldHVybiAwO1xuLVxuLXJvbGxiYWNrOlxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X3NldClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuLVx0XHRpZiAob3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbi1cdFx0XHRcdFx0ICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG9sZF9waGFzZV9hZGosXG4tXHRcdFx0XHRcdCAgZXh0YWNrKSlcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3NldCBwaGFzZSBhZGp1c3Qgcm9sbGJhY2sgZmFpbGVkXCYjMzQ7KTtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLjgzYmQzMDI3ZGJhYTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xuQEAgLTI2Myw5ICYjNDM7MjYzLDEwIEBAIHpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcmVmX3N5bmNfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4gXHR1OCBtb2RlLCByZWZfaWQsIHN5bmNfcmVmX2lkO1xuIFx0c3RydWN0IHpsMzA3M3hfY2hhbiBjaGFuO1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmIHJlZjtcbiYjNDM7XHRib29sIHN5bmNfbnRmID0gZmFsc2U7XG4gXHRpbnQgcmM7XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuIFxuIFx0cmVmX2lkID0gemwzMDczeF9pbnB1dF9waW5fcmVmX2dldChwaW4tXHUwMDNlaWQpO1xuIFx0c3luY19yZWZfaWQgPSB6bDMwNzN4X2lucHV0X3Bpbl9yZWZfZ2V0KHN5bmNfcGluLVx1MDAzZWlkKTtcbkBAIC0yODUsMTcgJiM0MzsyODYsMjAgQEAgemwzMDczeF9kcGxsX2lucHV0X3Bpbl9yZWZfc3luY19zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiBcdFx0aWYgKHN5bmNfZnJlcSBcdTAwM2UgODAwMCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiBcdFx0XHRcdCAgICAgICBcJiMzNDtzeW5jIGZyZXF1ZW5jeSBtdXN0IGJlIDgga0h6IG9yIGxlc3NcJiMzNDspO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdGlmIChyZWZfZnJlcSBcdTAwM2MgMTAwMCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiBcdFx0XHRcdCAgICAgICBcJiMzNDtjbG9jayBmcmVxdWVuY3kgbXVzdCBiZSAxIGtIeiBvciBtb3JlXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0cmMgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiBcdFx0fVxuIFx0XHRpZiAocmVmX2ZyZXEgXHUwMDNjPSBzeW5jX2ZyZXEpIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4gXHRcdFx0XHQgICAgICAgXCYjMzQ7Y2xvY2sgZnJlcXVlbmN5IG11c3QgYmUgaGlnaGVyIHRoYW4gc3luYyBmcmVxdWVuY3lcJiMzNDspO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXG4gXHRcdHpsMzA3M3hfcmVmX3N5bmNfcGFpcl9zZXQoXHUwMDI2cmVmLCBzeW5jX3JlZl9pZCk7XG5AQCAtMzA4LDIwICYjNDM7MzEyLDU0IEBAIHpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcmVmX3N5bmNfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4gXG4gXHRyYyA9IHpsMzA3M3hfcmVmX3N0YXRlX3NldCh6bGRldiwgcmVmX2lkLCBcdTAwMjZyZWYpO1xuIFx0aWYgKHJjKVxuLVx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiBcbi1cdC8qIEV4Y2x1ZGUgc3luYyBzb3VyY2UgZnJvbSBhdXRvbWF0aWMgcmVmZXJlbmNlIHNlbGVjdGlvbiBieSBzZXR0aW5nXG4tXHQgKiBpdHMgcHJpb3JpdHkgdG8gTk9ORS4gT24gZGlzY29ubmVjdCB0aGUgcHJpb3JpdHkgaXMgbGVmdCBhcyBOT05FXG4tXHQgKiBhbmQgdGhlIHVzZXIgbXVzdCBleHBsaWNpdGx5IG1ha2UgdGhlIHBpbiBzZWxlY3RhYmxlIGFnYWluLlxuJiM0MztcdC8qIEFsbCBjb2RlIHBhdGhzIGFjY2Vzc2luZyBwZXItY2hhbm5lbCByZWZlcmVuY2UgcHJpb3JpdGllcyBhcmVcbiYjNDM7XHQgKiBzZXJpYWxpemVkIGJ5IHRoZSBzdWJzeXN0ZW0gZHBsbF9sb2NrLCBzbyBpdCBpcyBzYWZlIHRvIHJlbGVhc2VcbiYjNDM7XHQgKiBvdXIgbG9jayBoZXJlIGJlZm9yZSBpdGVyYXRpbmcgb3ZlciB0aGUgb3RoZXIgY2hhbm5lbHMuXG4gXHQgKi9cbi1cdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpIHtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdGUgIT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBkYXRhc2hlZXQgcmVjb21tZW5kcyBleGNsdWRpbmcgdGhlIHN5bmMgc291cmNlIGZyb20gYXV0b21hdGljXG4mIzQzO1x0ICogcmVmZXJlbmNlIHNlbGVjdGlvbiBieSBzZXR0aW5nIGl0cyBwcmlvcml0eSB0byBOT05FIG9uIGFsbCBEUExMXG4mIzQzO1x0ICogY2hhbm5lbHMuIFRoaXMgaXMgYWR2aXNvcnkgLSB0aGUgcmVmIHN5bmMgcGFpciBpcyBhbHJlYWR5XG4mIzQzO1x0ICogY29uZmlndXJlZCwgc28gYSBmYWlsdXJlIGhlcmUgaXMgbm90IGZhdGFsLiBPbiBkaXNjb25uZWN0IHRoZVxuJiM0MztcdCAqIHByaW9yaXR5IGlzIGxlZnQgYXMgTk9ORSBhbmQgdGhlIHVzZXIgbXVzdCBleHBsaWNpdGx5IG1ha2UgdGhlXG4mIzQzO1x0ICogcGluIHNlbGVjdGFibGUgYWdhaW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeSh6bGRwbGwsIFx1MDAyNnpsZGV2LVx1MDAzZWRwbGxzLCBsaXN0KSB7XG4mIzQzO1x0XHR1OCBwcmlvO1xuJiM0MztcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcbiBcdFx0Y2hhbiA9ICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0cHJpbyA9IHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoXHUwMDI2Y2hhbiwgc3luY19yZWZfaWQpO1xuJiM0MztcdFx0aWYgKHByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKSB7XG4mIzQzO1x0XHRcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlOyAvKiBSZWYgaXMgYWxyZWFkeSBub24tc2VsZWN0YWJsZSAqL1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0emwzMDczeF9jaGFuX3JlZl9wcmlvX3NldChcdTAwMjZjaGFuLCBzeW5jX3JlZl9pZCxcbiBcdFx0XHRcdFx0ICBaTF9EUExMX1JFRl9QUklPX05PTkUpO1xuLVx0XHRyZXR1cm4gemwzMDczeF9jaGFuX3N0YXRlX3NldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBcdTAwMjZjaGFuKTtcbiYjNDM7XHRcdGlmICh6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIFx1MDAyNmNoYW4pKVxuJiM0MztcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0IFwmIzM0O0ZhaWxlZCB0byBzZXQgcmVmIHByaW8gb24gRFBMTCV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCB6bGRwbGwtXHUwMDNlaWQpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzeW5jX250ZiA9IHRydWU7XG4mIzQzO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiBcdH1cbiYjNDM7XHRpZiAoc3luY19udGYpXG4mIzQzO1x0XHRfX2RwbGxfcGluX2NoYW5nZV9udGYoc3luY19waW4tXHUwMDNlZHBsbF9waW4pO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiByYztcbiB9XG4gXG4gc3RhdGljIGludFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBEUExMIHN1YnN5c3RlbSAoZHBsbF9uZXRsaW5rLmMpIGFuZCB0aGUgTWljcm9zZW1pIFpMMzA3M3ggRFBMTCBkcml2ZXIgKHpsMzA3M3gvZHBsbC5jKS4gVGhlIG1vZGlmaWVkIGNvZGUgaW4gZHBsbF9uZXRsaW5rLmMgaGFuZGxlcyBuZXRsaW5rIGNvbW1hbmRzIGZvciBzZXR0aW5nIERQTEwgcGluIHByb3BlcnRpZXMuIEhvd2V2ZXIsIHRoZXNlIG5ldGxpbmsgY29tbWFuZHMgcmVxdWlyZSBhIHJlZ2lzdGVyZWQgRFBMTCBwaW4gdG8gb3BlcmF0ZSBvbi4gRFBMTCBwaW5zIGFyZSBvbmx5IHJlZ2lzdGVyZWQgYnkgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycyAoSW50ZWwgRTgwMCAmIzM5O2ljZSYjMzk7LCBNZWxsYW5veCBDb25uZWN0WC01ICYjMzk7bWx4NSYjMzk7LCBPQ1AgVGltZSBDYXJkICYjMzk7cHRwX29jcCYjMzk7LCBhbmQgTWljcm9zZW1pICYjMzk7emwzMDczeCYjMzk7KS4gTm9uZSBvZiB0aGVzZSBoYXJkd2FyZSBkZXZpY2VzIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZS1lbXVsYXRlZCBkdW1teSBEUExMIGRyaXZlciBhdmFpbGFibGUgaW4gdGhlIGtlcm5lbC4gQ29uc2VxdWVudGx5LCB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZSBhbmQgdGhlIHpsMzA3M3ggZHJpdmVyIGNvZGUgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODgwYzI4Y2Y1ZmZjMTYxMmZiY2I2MTkxN2RkMWJmNGI1YTlmMDYyYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTI6MTg6MjEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QKaW5kZXggZjgzMTUwOTE3ODE0ZS4uN2MxMTdhZTM3Y2MxYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdApAQCAtMTE2LDggJiM0MzsxMTYsOSBAQCBTaGFyZWQgcGlucwogQSBzaW5nbGUgcGluIG9iamVjdCBjYW4gYmUgYXR0YWNoZWQgdG8gbXVsdGlwbGUgZHBsbCBkZXZpY2VzLgogVGhlbiB0aGVyZSBhcmUgdHdvIGdyb3VwcyBvZiBjb25maWd1cmF0aW9uIGtub2JzOgogCi0xKSBTZXQgb24gYSBwaW4gLSB0aGUgY29uZmlndXJhdGlvbiBhZmZlY3RzIGFsbCBkcGxsIGRldmljZXMgcGluIGlzCi0gICByZWdpc3RlcmVkIHRvIChpLmUuLCBgYERQTExfQV9QSU5fRlJFUVVFTkNZYGApLAomIzQzOzEpIFNldCBvbiBhIHBpbiAtIHRoZSBjb25maWd1cmF0aW9uIGlzIGEgcHJvcGVydHkgb2YgdGhlIHBpbiBpdHNlbGYgYW5kCiYjNDM7ICAgYXBwbGllcyB0byBhbGwgZHBsbCBkZXZpY2VzIHRoZSBwaW4gaXMgcmVnaXN0ZXJlZCB3aXRoCiYjNDM7ICAgKGkuZS4sIGBgRFBMTF9BX1BJTl9GUkVRVUVOQ1lgYCksCiAyKSBTZXQgb24gYSBwaW4tZHBsbCB0dXBsZSAtIHRoZSBjb25maWd1cmF0aW9uIGFmZmVjdHMgb25seSBzZWxlY3RlZAogICAgZHBsbCBkZXZpY2UgKGkuZS4sIGBgRFBMTF9BX1BJTl9QUklPYGAsIGBgRFBMTF9BX1BJTl9TVEFURWBgLAogICAgYGBEUExMX0FfUElOX0RJUkVDVElPTmBgKS4KQEAgLTUwNyw5ICYjNDM7NTA4LDkgQEAgYXMgd2VsbCBhcyBwYXJhbWV0ZXIgYmVpbmcgY29uZmlndXJlZCAoYGBEUExMX0FfTU9ERWBgKS4KIGBgRFBMTF9DTURfUElOX1NFVGBgIC0gdG8gdGFyZ2V0IGEgcGluIHVzZXIgbXVzdCBwcm92aWRlIGEKIGBgRFBMTF9BX1BJTl9JRGBgLCB3aGljaCBpcyB1bmlxdWUgaWRlbnRpZmllciBvZiBhIHBpbiBpbiB0aGUgc3lzdGVtLgogQWxzbyBjb25maWd1cmVkIHBpbiBwYXJhbWV0ZXJzIG11c3QgYmUgYWRkZWQuCi1JZiBgYERQTExfQV9QSU5fRlJFUVVFTkNZYGAgaXMgY29uZmlndXJlZCwgdGhpcyBhZmZlY3RzIGFsbCB0aGUgZHBsbAotZGV2aWNlcyB0aGF0IGFyZSBjb25uZWN0ZWQgd2l0aCB0aGUgcGluLCB0aGF0IGlzIHdoeSBmcmVxdWVuY3kgYXR0cmlidXRlCi1zaGFsbCBub3QgYmUgZW5jbG9zZWQgaW4gYGBEUExMX0FfUElOX1BBUkVOVF9ERVZJQ0VgYC4KJiM0MztJZiBgYERQTExfQV9QSU5fRlJFUVVFTkNZYGAgaXMgY29uZmlndXJlZCwgaXQgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgcGluCiYjNDM7aXRzZWxmIGFuZCBhcHBsaWVzIHRvIGFsbCBkcGxsIGRldmljZXMgdGhlIHBpbiBpcyByZWdpc3RlcmVkIHdpdGgsIHNvIHRoZQomIzQzO2ZyZXF1ZW5jeSBhdHRyaWJ1dGUgc2hhbGwgbm90IGJlIGVuY2xvc2VkIGluIGBgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFYGAuCiBPdGhlciBhdHRyaWJ1dGVzOiBgYERQTExfQV9QSU5fUFJJT2BgLCBgYERQTExfQV9QSU5fU1RBVEVgYCBvcgogYGBEUExMX0FfUElOX0RJUkVDVElPTmBgIG11c3QgYmUgZW5jbG9zZWQgaW4KIGBgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFYGAgYXMgdGhlaXIgY29uZmlndXJhdGlvbiByZWxhdGVzIHRvIG9ubHkgb25lCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMKaW5kZXggYWZiMzFjMDA0MDM4Mi4uYTkwOWNkNDQ1MWIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYwpAQCAtMTA3OSwxMCAmIzQzOzEwNzksOSBAQCBkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSwKIAkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7CiAJdTY0IGZyZXEgPSBubGFfZ2V0X3U2NChhKSwgb2xkX2ZyZXE7Ci0Jc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkOwogCWNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wczsKJiM0MzsJc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmOwogCXN0cnVjdCBkcGxsX2RldmljZSAqZHBsbDsKLQl1bnNpZ25lZCBsb25nIGk7CiAJaW50IHJldDsKIAogCWlmICghZHBsbF9waW5faXNfZnJlcV9zdXBwb3J0ZWQocGluLCBmcmVxKSkgewpAQCAtMTA5MCwyMiAmIzQzOzEwODksMTcgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewotCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKLQkJaWYgKCghb3BzLSZndDtmcmVxdWVuY3lfc2V0IHx8ICFvcHMtJmd0O2ZyZXF1ZW5jeV9nZXQpICZhbXA7JmFtcDsKLQkJICAgIHJlZi0mZ3Q7ZHBsbC0mZ3Q7bW9kdWxlID09IHBpbi0mZ3Q7bW9kdWxlICZhbXA7JmFtcDsKLQkJICAgIHJlZi0mZ3Q7ZHBsbC0mZ3Q7Y2xvY2tfaWQgPT0gcGluLSZndDtjbG9ja19pZCkgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAotCQkJCSAgICAgICAmIzM0O2ZyZXF1ZW5jeSBzZXQgbm90IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlJiMzNDspOwotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQl9Ci0JfQogCXJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pOwogCWlmICghcmVmKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmQmIzM0Oyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKJiM0MzsJaWYgKCFvcHMtJmd0O2ZyZXF1ZW5jeV9zZXQgfHwgIW9wcy0mZ3Q7ZnJlcXVlbmN5X2dldCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCSAgICAgICAmIzM0O2ZyZXF1ZW5jeSBzZXQgbm90IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiAJZHBsbCA9IHJlZi0mZ3Q7ZHBsbDsKIAlyZXQgPSBvcHMtJmd0O2ZyZXF1ZW5jeV9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCwKIAkJCQkgZHBsbF9wcml2KGRwbGwpLCAmYW1wO29sZF9mcmVxLCBleHRhY2spOwpAQCAtMTExNiw2OCAmIzQzOzExMTAsNDIgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJaWYgKGZyZXEgPT0gb2xkX2ZyZXEpCiAJCXJldHVybiAwOwogCi0JeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7Ci0JCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwotCQlpZiAoIW9wcy0mZ3Q7ZnJlcXVlbmN5X3NldCkKLQkJCWNvbnRpbnVlOwotCQlkcGxsID0gcmVmLSZndDtkcGxsOwotCQlyZXQgPSBvcHMtJmd0O2ZyZXF1ZW5jeV9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwKLQkJCQkJIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgZnJlcSwgZXh0YWNrKTsKLQkJaWYgKHJldCkgewotCQkJZmFpbGVkID0gcmVmOwotCQkJTkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgJiMzNDtmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldSYjMzQ7LAotCQkJCQkgICBkcGxsLSZndDtpZCk7Ci0JCQlnb3RvIHJvbGxiYWNrOwotCQl9CiYjNDM7CXJldCA9IG9wcy0mZ3Q7ZnJlcXVlbmN5X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLAomIzQzOwkJCQkgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBmcmVxLCBleHRhY2spOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O2ZyZXF1ZW5jeSBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiV1JiMzNDssCiYjNDM7CQkJCSAgIGRwbGwtJmd0O2lkKTsKJiM0MzsJCXJldHVybiByZXQ7CiAJfQogCV9fZHBsbF9waW5fY2hhbmdlX250ZihwaW4pOwogCiAJcmV0dXJuIDA7Ci0KLXJvbGxiYWNrOgotCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewotCQlpZiAocmVmID09IGZhaWxlZCkKLQkJCWJyZWFrOwotCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKLQkJaWYgKCFvcHMtJmd0O2ZyZXF1ZW5jeV9zZXQpCi0JCQljb250aW51ZTsKLQkJZHBsbCA9IHJlZi0mZ3Q7ZHBsbDsKLQkJaWYgKG9wcy0mZ3Q7ZnJlcXVlbmN5X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLAotCQkJCSAgICAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG9sZF9mcmVxLCBleHRhY2spKQotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3NldCBmcmVxdWVuY3kgcm9sbGJhY2sgZmFpbGVkJiMzNDspOwotCX0KLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CiBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJCSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKLQlzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWYsICpmYWlsZWQ7CiAJY29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzOwogCXN0cnVjdCBkcGxsX3Bpbl9lc3luYyBlc3luYzsKIAl1NjQgZnJlcSA9IG5sYV9nZXRfdTY0KGEpOwomIzQzOwlzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7CiAJc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsOwogCWJvb2wgc3VwcG9ydGVkID0gZmFsc2U7Ci0JdW5zaWduZWQgbG9uZyBpOwotCWludCByZXQ7CiYjNDM7CWludCByZXQsIGk7CiAKLQl4YV9mb3JfZWFjaCgmYW1wO3Bpbi0mZ3Q7ZHBsbF9yZWZzLCBpLCByZWYpIHsKLQkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7Ci0JCWlmICgoIW9wcy0mZ3Q7ZXN5bmNfc2V0IHx8ICFvcHMtJmd0O2VzeW5jX2dldCkgJmFtcDsmYW1wOwotCQkgICAgcmVmLSZndDtkcGxsLSZndDttb2R1bGUgPT0gcGluLSZndDttb2R1bGUgJmFtcDsmYW1wOwotCQkgICAgcmVmLSZndDtkcGxsLSZndDtjbG9ja19pZCA9PSBwaW4tJmd0O2Nsb2NrX2lkKSB7Ci0JCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCi0JCQkJICAgICAgICYjMzQ7ZW1iZWRkZWQgc3luYyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2UmIzM0Oyk7Ci0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCX0KLQl9CiAJcmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7CiAJaWYgKCFyZWYpIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3BpbiBvd25lciBkcGxsIG5vdCBmb3VuZCYjMzQ7KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwomIzQzOwlpZiAoIW9wcy0mZ3Q7ZXN5bmNfc2V0IHx8ICFvcHMtJmd0O2VzeW5jX2dldCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLAomIzQzOwkJCSAgICAgICAmIzM0O2VtYmVkZGVkIHN5bmMgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiAJZHBsbCA9IHJlZi0mZ3Q7ZHBsbDsKIAlyZXQgPSBvcHMtJmd0O2VzeW5jX2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLCBkcGxsLAogCQkJICAgICBkcGxsX3ByaXYoZHBsbCksICZhbXA7ZXN5bmMsIGV4dGFjayk7CkBAIC0xMTk2LDQ0ICYjNDM7MTE2NCwxNyBAQCBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewotCQl2b2lkICpwaW5fZHBsbF9wcml2OwotCi0JCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwotCQlpZiAoIW9wcy0mZ3Q7ZXN5bmNfc2V0KQotCQkJY29udGludWU7Ci0JCWRwbGwgPSByZWYtJmd0O2RwbGw7Ci0JCXBpbl9kcGxsX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKTsKLQkJcmV0ID0gb3BzLSZndDtlc3luY19zZXQocGluLCBwaW5fZHBsbF9wcml2LCBkcGxsLCBkcGxsX3ByaXYoZHBsbCksCi0JCQkJICAgICAgZnJlcSwgZXh0YWNrKTsKLQkJaWYgKHJldCkgewotCQkJZmFpbGVkID0gcmVmOwotCQkJTkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywKLQkJCQkJICAgJiMzNDtlbWJlZGRlZCBzeW5jIGZyZXF1ZW5jeSBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiAldSYjMzQ7LAotCQkJCQkgICBkcGxsLSZndDtpZCk7Ci0JCQlnb3RvIHJvbGxiYWNrOwotCQl9CiYjNDM7CXJldCA9IG9wcy0mZ3Q7ZXN5bmNfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsCiYjNDM7CQkJICAgICBkcGxsX3ByaXYoZHBsbCksIGZyZXEsIGV4dGFjayk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7ZW1iZWRkZWQgc3luYyBmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDogJXUmIzM0OywKJiM0MzsJCQkJICAgZHBsbC0mZ3Q7aWQpOwomIzQzOwkJcmV0dXJuIHJldDsKIAl9CiAJX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbik7CiAKIAlyZXR1cm4gMDsKLQotcm9sbGJhY2s6Ci0JeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7Ci0JCXZvaWQgKnBpbl9kcGxsX3ByaXY7Ci0KLQkJaWYgKHJlZiA9PSBmYWlsZWQpCi0JCQlicmVhazsKLQkJb3BzID0gZHBsbF9waW5fb3BzKHJlZik7Ci0JCWlmICghb3BzLSZndDtlc3luY19zZXQpCi0JCQljb250aW51ZTsKLQkJZHBsbCA9IHJlZi0mZ3Q7ZHBsbDsKLQkJcGluX2RwbGxfcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pOwotCQlpZiAob3BzLSZndDtlc3luY19zZXQocGluLCBwaW5fZHBsbF9wcml2LCBkcGxsLCBkcGxsX3ByaXYoZHBsbCksCi0JCQkJICAgZXN5bmMuZnJlcSwgZXh0YWNrKSkKLQkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtzZXQgZW1iZWRkZWQgc3luYyBmcmVxdWVuY3kgcm9sbGJhY2sgZmFpbGVkJiMzNDspOwotCX0KLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjQxLDE0ICYjNDM7MTE4MiwxMiBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sCiAJCQkgICAgdW5zaWduZWQgbG9uZyByZWZfc3luY19waW5faWR4LAogCQkJICAgIGNvbnN0IGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGUsCiAJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQotCiB7Ci0Jc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkOwogCWNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wczsKIAllbnVtIGRwbGxfcGluX3N0YXRlIG9sZF9zdGF0ZTsKIAlzdHJ1Y3QgZHBsbF9waW4gKnJlZl9zeW5jX3BpbjsKJiM0MzsJc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmOwogCXN0cnVjdCBkcGxsX2RldmljZSAqZHBsbDsKLQl1bnNpZ25lZCBsb25nIGk7CiAJaW50IHJldDsKIAogCXJlZl9zeW5jX3BpbiA9IHhhX2ZpbmQoJmFtcDtwaW4tJmd0O3JlZl9zeW5jX3BpbnMsICZhbXA7cmVmX3N5bmNfcGluX2lkeCwKQEAgLTEyODIsNDIgJiM0MzsxMjIxLDIwIEBAIGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwKIAl9CiAJaWYgKHN0YXRlID09IG9sZF9zdGF0ZSkKIAkJcmV0dXJuIDA7Ci0JeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7Ci0JCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwotCQlpZiAoIW9wcy0mZ3Q7cmVmX3N5bmNfc2V0KQotCQkJY29udGludWU7Ci0JCWRwbGwgPSByZWYtJmd0O2RwbGw7Ci0JCXJldCA9IG9wcy0mZ3Q7cmVmX3N5bmNfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksCi0JCQkJCXJlZl9zeW5jX3BpbiwKLQkJCQkJZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsCi0JCQkJCQkJICAgICAgcmVmX3N5bmNfcGluKSwKLQkJCQkJc3RhdGUsIGV4dGFjayk7Ci0JCWlmIChyZXQpIHsKLQkJCWZhaWxlZCA9IHJlZjsKLQkJCU5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssICYjMzQ7cmVmZXJlbmNlIHN5bmMgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldSYjMzQ7LAotCQkJCQkgICBkcGxsLSZndDtpZCk7Ci0JCQlnb3RvIHJvbGxiYWNrOwotCQl9CiYjNDM7CiYjNDM7CXJldCA9IG9wcy0mZ3Q7cmVmX3N5bmNfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksCiYjNDM7CQkJCXJlZl9zeW5jX3BpbiwKJiM0MzsJCQkJZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHJlZl9zeW5jX3BpbiksCiYjNDM7CQkJCXN0YXRlLCBleHRhY2spOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O3JlZmVyZW5jZSBzeW5jIHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXUmIzM0OywKJiM0MzsJCQkJICAgZHBsbC0mZ3Q7aWQpOwomIzQzOwkJcmV0dXJuIHJldDsKIAl9CiAJX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbik7CiAKIAlyZXR1cm4gMDsKLQotcm9sbGJhY2s6Ci0JeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7Ci0JCWlmIChyZWYgPT0gZmFpbGVkKQotCQkJYnJlYWs7Ci0JCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwotCQlpZiAoIW9wcy0mZ3Q7cmVmX3N5bmNfc2V0KQotCQkJY29udGludWU7Ci0JCWRwbGwgPSByZWYtJmd0O2RwbGw7Ci0JCWlmIChvcHMtJmd0O3JlZl9zeW5jX3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLAotCQkJCSAgICAgIHJlZl9zeW5jX3BpbiwKLQkJCQkgICAgICBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKSwKLQkJCQkgICAgICBvbGRfc3RhdGUsIGV4dGFjaykpCi0JCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7c2V0IHJlZmVyZW5jZSBzeW5jIHJvbGxiYWNrIGZhaWxlZCYjMzQ7KTsKLQl9Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludApAQCAtMTQ3OCwxMSAmIzQzOzEzOTUsMTAgQEAgc3RhdGljIGludAogZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsCiAJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7Ci0Jc3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkOwogCWNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wczsKIAlzMzIgcGhhc2VfYWRqLCBvbGRfcGhhc2VfYWRqOwomIzQzOwlzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7CiAJc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsOwotCXVuc2lnbmVkIGxvbmcgaTsKIAlpbnQgcmV0OwogCiAJcGhhc2VfYWRqID0gbmxhX2dldF9zMzIocGhhc2VfYWRqX2F0dHIpOwpAQCAtMTQ5OSwyMSAmIzQzOzE0MTUsMTYgQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewotCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKLQkJaWYgKCghb3BzLSZndDtwaGFzZV9hZGp1c3Rfc2V0IHx8ICFvcHMtJmd0O3BoYXNlX2FkanVzdF9nZXQpICZhbXA7JmFtcDsKLQkJICAgIHJlZi0mZ3Q7ZHBsbC0mZ3Q7bW9kdWxlID09IHBpbi0mZ3Q7bW9kdWxlICZhbXA7JmFtcDsKLQkJICAgIHJlZi0mZ3Q7ZHBsbC0mZ3Q7Y2xvY2tfaWQgPT0gcGluLSZndDtjbG9ja19pZCkgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3BoYXNlIGFkanVzdCBub3Qgc3VwcG9ydGVkJiMzNDspOwotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCQl9Ci0JfQogCXJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pOwogCWlmICghcmVmKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtwaW4gb3duZXIgZHBsbCBub3QgZm91bmQmIzM0Oyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKJiM0MzsJaWYgKCFvcHMtJmd0O3BoYXNlX2FkanVzdF9zZXQgfHwgIW9wcy0mZ3Q7cGhhc2VfYWRqdXN0X2dldCkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3BoYXNlIGFkanVzdCBub3Qgc3VwcG9ydGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiAJZHBsbCA9IHJlZi0mZ3Q7ZHBsbDsKIAlyZXQgPSBvcHMtJmd0O3BoYXNlX2FkanVzdF9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwKIAkJCQkgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCAmYW1wO29sZF9waGFzZV9hZGosCkBAIC0xNTI1LDQxICYjNDM7MTQzNiwxNyBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0ciwKIAlpZiAocGhhc2VfYWRqID09IG9sZF9waGFzZV9hZGopCiAJCXJldHVybiAwOwogCi0JeGFfZm9yX2VhY2goJmFtcDtwaW4tJmd0O2RwbGxfcmVmcywgaSwgcmVmKSB7Ci0JCW9wcyA9IGRwbGxfcGluX29wcyhyZWYpOwotCQlpZiAoIW9wcy0mZ3Q7cGhhc2VfYWRqdXN0X3NldCkKLQkJCWNvbnRpbnVlOwotCQlkcGxsID0gcmVmLSZndDtkcGxsOwotCQlyZXQgPSBvcHMtJmd0O3BoYXNlX2FkanVzdF9zZXQocGluLAotCQkJCQkgICAgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksCi0JCQkJCSAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHBoYXNlX2FkaiwKLQkJCQkJICAgIGV4dGFjayk7Ci0JCWlmIChyZXQpIHsKLQkJCWZhaWxlZCA9IHJlZjsKLQkJCU5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssCi0JCQkJCSAgICYjMzQ7cGhhc2UgYWRqdXN0IHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXUmIzM0OywKLQkJCQkJICAgZHBsbC0mZ3Q7aWQpOwotCQkJZ290byByb2xsYmFjazsKLQkJfQomIzQzOwlyZXQgPSBvcHMtJmd0O3BoYXNlX2FkanVzdF9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwKJiM0MzsJCQkJICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgcGhhc2VfYWRqLCBleHRhY2spOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLAomIzQzOwkJCQkgICAmIzM0O3BoYXNlIGFkanVzdCBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiV1JiMzNDssCiYjNDM7CQkJCSAgIGRwbGwtJmd0O2lkKTsKJiM0MzsJCXJldHVybiByZXQ7CiAJfQogCV9fZHBsbF9waW5fY2hhbmdlX250ZihwaW4pOwogCiAJcmV0dXJuIDA7Ci0KLXJvbGxiYWNrOgotCXhhX2Zvcl9lYWNoKCZhbXA7cGluLSZndDtkcGxsX3JlZnMsIGksIHJlZikgewotCQlpZiAocmVmID09IGZhaWxlZCkKLQkJCWJyZWFrOwotCQlvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTsKLQkJaWYgKCFvcHMtJmd0O3BoYXNlX2FkanVzdF9zZXQpCi0JCQljb250aW51ZTsKLQkJZHBsbCA9IHJlZi0mZ3Q7ZHBsbDsKLQkJaWYgKG9wcy0mZ3Q7cGhhc2VfYWRqdXN0X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLAotCQkJCQkgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgb2xkX3BoYXNlX2FkaiwKLQkJCQkJICBleHRhY2spKQotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3NldCBwaGFzZSBhZGp1c3Qgcm9sbGJhY2sgZmFpbGVkJiMzNDspOwotCX0KLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMKaW5kZXggMDQ4OGFlNmFjNDg2Yy4uODNiZDMwMjdkYmFhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYwpAQCAtMjYzLDkgJiM0MzsyNjMsMTAgQEAgemwzMDczeF9kcGxsX2lucHV0X3Bpbl9yZWZfc3luY19zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbiwKIAl1OCBtb2RlLCByZWZfaWQsIHN5bmNfcmVmX2lkOwogCXN0cnVjdCB6bDMwNzN4X2NoYW4gY2hhbjsKIAlzdHJ1Y3QgemwzMDczeF9yZWYgcmVmOwomIzQzOwlib29sIHN5bmNfbnRmID0gZmFsc2U7CiAJaW50IHJjOwogCi0JZ3VhcmQobXV0ZXgpKCZhbXA7emxkcGxsLSZndDtsb2NrKTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiAKIAlyZWZfaWQgPSB6bDMwNzN4X2lucHV0X3Bpbl9yZWZfZ2V0KHBpbi0mZ3Q7aWQpOwogCXN5bmNfcmVmX2lkID0gemwzMDczeF9pbnB1dF9waW5fcmVmX2dldChzeW5jX3Bpbi0mZ3Q7aWQpOwpAQCAtMjg1LDE3ICYjNDM7Mjg2LDIwIEBAIHpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcmVmX3N5bmNfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sCiAJCWlmIChzeW5jX2ZyZXEgJmd0OyA4MDAwKSB7CiAJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssCiAJCQkJICAgICAgICYjMzQ7c3luYyBmcmVxdWVuY3kgbXVzdCBiZSA4IGtIeiBvciBsZXNzJiMzNDspOwotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJcmMgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gdW5sb2NrOwogCQl9CiAJCWlmIChyZWZfZnJlcSAmbHQ7IDEwMDApIHsKIAkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKIAkJCQkgICAgICAgJiMzNDtjbG9jayBmcmVxdWVuY3kgbXVzdCBiZSAxIGtIeiBvciBtb3JlJiMzNDspOwotCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJcmMgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gdW5sb2NrOwogCQl9CiAJCWlmIChyZWZfZnJlcSAmbHQ7PSBzeW5jX2ZyZXEpIHsKIAkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKIAkJCQkgICAgICAgJiMzNDtjbG9jayBmcmVxdWVuY3kgbXVzdCBiZSBoaWdoZXIgdGhhbiBzeW5jIGZyZXF1ZW5jeSYjMzQ7KTsKLQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJCXJjID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIHVubG9jazsKIAkJfQogCiAJCXpsMzA3M3hfcmVmX3N5bmNfcGFpcl9zZXQoJmFtcDtyZWYsIHN5bmNfcmVmX2lkKTsKQEAgLTMwOCwyMCAmIzQzOzMxMiw1NCBAQCB6bDMwNzN4X2RwbGxfaW5wdXRfcGluX3JlZl9zeW5jX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLAogCiAJcmMgPSB6bDMwNzN4X3JlZl9zdGF0ZV9zZXQoemxkZXYsIHJlZl9pZCwgJmFtcDtyZWYpOwogCWlmIChyYykKLQkJcmV0dXJuIHJjOwomIzQzOwkJZ290byB1bmxvY2s7CiAKLQkvKiBFeGNsdWRlIHN5bmMgc291cmNlIGZyb20gYXV0b21hdGljIHJlZmVyZW5jZSBzZWxlY3Rpb24gYnkgc2V0dGluZwotCSAqIGl0cyBwcmlvcml0eSB0byBOT05FLiBPbiBkaXNjb25uZWN0IHRoZSBwcmlvcml0eSBpcyBsZWZ0IGFzIE5PTkUKLQkgKiBhbmQgdGhlIHVzZXIgbXVzdCBleHBsaWNpdGx5IG1ha2UgdGhlIHBpbiBzZWxlY3RhYmxlIGFnYWluLgomIzQzOwkvKiBBbGwgY29kZSBwYXRocyBhY2Nlc3NpbmcgcGVyLWNoYW5uZWwgcmVmZXJlbmNlIHByaW9yaXRpZXMgYXJlCiYjNDM7CSAqIHNlcmlhbGl6ZWQgYnkgdGhlIHN1YnN5c3RlbSBkcGxsX2xvY2ssIHNvIGl0IGlzIHNhZmUgdG8gcmVsZWFzZQomIzQzOwkgKiBvdXIgbG9jayBoZXJlIGJlZm9yZSBpdGVyYXRpbmcgb3ZlciB0aGUgb3RoZXIgY2hhbm5lbHMuCiAJICovCi0JaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCkgewomIzQzOwltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwomIzQzOwlpZiAoc3RhdGUgIT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIFRoZSBkYXRhc2hlZXQgcmVjb21tZW5kcyBleGNsdWRpbmcgdGhlIHN5bmMgc291cmNlIGZyb20gYXV0b21hdGljCiYjNDM7CSAqIHJlZmVyZW5jZSBzZWxlY3Rpb24gYnkgc2V0dGluZyBpdHMgcHJpb3JpdHkgdG8gTk9ORSBvbiBhbGwgRFBMTAomIzQzOwkgKiBjaGFubmVscy4gVGhpcyBpcyBhZHZpc29yeSAtIHRoZSByZWYgc3luYyBwYWlyIGlzIGFscmVhZHkKJiM0MzsJICogY29uZmlndXJlZCwgc28gYSBmYWlsdXJlIGhlcmUgaXMgbm90IGZhdGFsLiBPbiBkaXNjb25uZWN0IHRoZQomIzQzOwkgKiBwcmlvcml0eSBpcyBsZWZ0IGFzIE5PTkUgYW5kIHRoZSB1c2VyIG11c3QgZXhwbGljaXRseSBtYWtlIHRoZQomIzQzOwkgKiBwaW4gc2VsZWN0YWJsZSBhZ2Fpbi4KJiM0MzsJICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoemxkcGxsLCAmYW1wO3psZGV2LSZndDtkcGxscywgbGlzdCkgewomIzQzOwkJdTggcHJpbzsKJiM0MzsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwogCQljaGFuID0gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQpOwomIzQzOwkJcHJpbyA9IHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoJmFtcDtjaGFuLCBzeW5jX3JlZl9pZCk7CiYjNDM7CQlpZiAocHJpbyA9PSBaTF9EUExMX1JFRl9QUklPX05PTkUpIHsKJiM0MzsJCQltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwomIzQzOwkJCWNvbnRpbnVlOyAvKiBSZWYgaXMgYWxyZWFkeSBub24tc2VsZWN0YWJsZSAqLwomIzQzOwkJfQomIzQzOwogCQl6bDMwNzN4X2NoYW5fcmVmX3ByaW9fc2V0KCZhbXA7Y2hhbiwgc3luY19yZWZfaWQsCiAJCQkJCSAgWkxfRFBMTF9SRUZfUFJJT19OT05FKTsKLQkJcmV0dXJuIHpsMzA3M3hfY2hhbl9zdGF0ZV9zZXQoemxkZXYsIHpsZHBsbC0mZ3Q7aWQsICZhbXA7Y2hhbik7CiYjNDM7CQlpZiAoemwzMDczeF9jaGFuX3N0YXRlX3NldCh6bGRldiwgemxkcGxsLSZndDtpZCwgJmFtcDtjaGFuKSkKJiM0MzsJCQlkZXZfd2Fybih6bGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtGYWlsZWQgdG8gc2V0IHJlZiBwcmlvIG9uIERQTEwldVxuJiMzNDssCiYjNDM7CQkJCSB6bGRwbGwtJmd0O2lkKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzeW5jX250ZiA9IHRydWU7CiYjNDM7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDt6bGRwbGwtJmd0O2xvY2spOwogCX0KJiM0MzsJaWYgKHN5bmNfbnRmKQomIzQzOwkJX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHN5bmNfcGluLSZndDtkcGxsX3Bpbik7CiAKIAlyZXR1cm4gMDsKJiM0Mzt1bmxvY2s6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3psZHBsbC0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiByYzsKIH0KIAogc3RhdGljIGludAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjk2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNzMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRFBMTCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIHRoZSBEUExMIGRyaXZlciwgc3BlY2lmaWNhbGx5IGBkcGxsX25ldGxpbmsuY2AgYW5kIGBkcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHN0cmVhbWxpbmluZyBob3cgd2Ugc2V0IHByb3BlcnRpZXMgbGlrZSBmcmVxdWVuY3ksIGVzeW5jLCByZWZfc3luYywgYW5kIHBoYXNlIGFkanVzdG1lbnQgb24gRFBMTCBwaW5zLiBJbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoICphbGwqIERQTEwgZGV2aWNlcyBjb25uZWN0ZWQgdG8gYSBwaW4sIHRoZSBjb2RlIG5vdyBmb2N1c2VzIG9uIGp1c3QgdGhlICYjMzQ7b3duZXImIzM0OyDigJMgdGhlIGZpcnN0IERQTEwgZGV2aWNlIHRoYXQmIzM5O3MgcmVnaXN0ZXJlZCB0byB0aGUgcGluLCBvYnRhaW5lZCBmcm9tIGBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKWAuCgpJIG5lZWQgdG8gZGlnIGluIGEgYml0IGRlZXBlciwgbGV0JiMzOTtzIGxvb2sgYXQgYGRwbGxfbmV0bGluay5jYCBmaXJzdC4gU3BlY2lmaWNhbGx5LCB0aGUgYGRwbGxfcGluX2ZyZXFfc2V0YCBmdW5jdGlvbi4gSSBzZWUgdGhleSYjMzk7dmUgcmVtb3ZlZCB0aGUgbG9vcCAoYHhhX2Zvcl9lYWNoYCkgdGhhdCB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgcmVmZXJlbmNlcyAoYHJlZmApIGFzc29jaWF0ZWQgd2l0aCBhIHBpbi4gIEluc3RlYWQsIHRoZXkgbm93IGNhbGwgdGhlIGZyZXF1ZW5jeSBzZXR0aW5nIGZ1bmN0aW9uIGRpcmVjdGx5IG9uIHRoZSBgZHBsbGAgdGhhdCBiZWxvbmdzIHRvIHRoZSBgcmVmYCB0aGF0IGlzIGRldGVybWluZWQgdG8gYmUgdGhlIG93bmVyLiBUaGV5IGFsc28gY2hlY2sgdGhhdCBmcmVxdWVuY3kgc2V0dGluZyBhbmQgZ2V0dGluZyBhcmUgc3VwcG9ydGVkLiBJdCBtYWtlcyBzZW5zZSwgZm9jdXNpbmcgb24gdGhlIHBpbiBvd25lci4KClRoZSBkb2N1bWVudGF0aW9uIGlzIGltcG9ydGFudC4gSXQgY2xhcmlmaWVzIHRoYXQgd2hlbiBhIHByb3BlcnR5IGlzIHNldCBvbiBhIHBpbiAobGlrZSBmcmVxdWVuY3kgdmlhIGBEUExMX0FfUElOX0ZSRVFVRU5DWWApLCBpdCYjMzk7cyBpbnRlbmRlZCB0byBhZmZlY3QgKmFsbCogRFBMTCBkZXZpY2VzIGNvbm5lY3RlZCB0byB0aGF0IHBpbi4gIFNvLCB0aGUgZHJpdmVyIGVpdGhlciBoYXMgdG8gYmUgbWFkZSByZXNwb25zaWJsZSBmb3IgYXBwbHlpbmcgdGhlIHNldCB0byBhbGwgRFBMTHMgb3IgdGhlIHN1YnN5c3RlbSBqdXN0IGNhbGxzIHRoZSBvcCBvbiB0aGUgb3duZXIuIE5vdywgdGhpcyBjaGFuZ2UgY291bGQgYmUgdmFsaWQgYmVjYXVzZSBpdCBzZWVtcyBsaWtlIHRoZSByZXNwb25zaWJpbGl0eSBpcyBzaGlmdGluZywgcGVyaGFwcyB0aGUgZHJpdmVyIG5vdyBuZWVkcyB0byB0YWtlIGNhcmUgb2YgdGhlICYjMzQ7YXBwbHkgdG8gYWxsJiMzNDsgbG9naWMsIG9yIG1heWJlIHRoZSBzdWJzeXN0ZW0ganVzdCBjYWxscyB0aGUgb3BlcmF0b3Igb24gdGhlIGZpcnN0IHJlZ2lzdGVyZWQgRFBMTCwgYW5kIHRoZSBkcml2ZXIgaGFuZGxlcyBpdCBpbnRlcm5hbGx5LiBJdCBkZXBlbmRzIG9uIHRoZSBkZXNpZ24uCgpIb2xkIG9uLCBJIHNlZSB0aGV5JiMzOTt2ZSBhbHNvIG1vZGlmaWVkIGB6bDMwNzN4X2RwbGxfaW5wdXRfcGluX3JlZl9zeW5jX3NldGAuIFRoaXMgbWFrZXMgbWUgdGhpbmsuIEFyZSB3ZSBydW5uaW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2hlcmUgdGhpcyBjb2RlIG1pZ2h0IGJlIHJlYWNoZWQ/ICBEUExMIGlzIGEgRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCwgc28gaXQgbXVzdCB1c2UgcGh5c2ljYWwgZGV2aWNlcy4gSXMgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBhIERQTEwgZHJpdmVyPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYGRyaXZlcnMvZHBsbC9gIGRpcmVjdG9yeSB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgdW51c3VhbC4gVGhpcyByYWlzZXMgdGhlIHF1ZXN0aW9uIG9mIGhvdyB0aGUgdmlydHVhbGl6ZWQgd29ybGQgaW50ZXJhY3RzIHdpdGggaGFyZHdhcmUtc3BlY2lmaWMgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtkcGxsX2NvcmUuYyYjMzQ7LAogICAgJiMzNDtkcGxsX2NvcmUuaCYjMzQ7LAogICAgJiMzNDtkcGxsX25ldGxpbmsuYyYjMzQ7LAogICAgJiMzNDtkcGxsX25ldGxpbmsuaCYjMzQ7LAogICAgJiMzNDtkcGxsX25sLmMmIzM0OywKICAgICYjMzQ7ZHBsbF9ubC5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O3psMzA3M3gmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NzQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERQTEwgRHJpdmVyIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgemwzMDczeGAgZHJpdmVyIGZvciB0aGUgTWljcm9zZW1pIFpMMzA3M3ggRFBMTHMuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2gsIGJ1dCBJIGFsd2F5cyBsaWtlIHRvIGVuc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGNvbXBsZXRlIHBpY3R1cmUuIFRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBvdGhlciBEUExMIGRyaXZlcnMgbHVya2luZyBhcm91bmQsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGNvbW1vbmFsaXR5IG9mIERQTExzIGluIG5ldHdvcmtpbmcgY29udGV4dHM/IE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHBva2UgYXJvdW5kIGluIHRoZSBvYnZpb3VzIHBsYWNlOiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYC4gVGhhdCBkaXJlY3RvcnkgaXMgYSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50OyBsb3RzIG9mIGV0aGVybmV0IGRyaXZlcnMgY291bGQgcG90ZW50aWFsbHkgaW5jb3Jwb3JhdGUgRFBMTCBmdW5jdGlvbmFsaXR5IGZvciBjbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZCB0aGVyZSBiZWZvcmUgZHJhd2luZyBhbnkgY29uY2x1c2lvbnMuIE5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgdGhhdCBtaWdodCBpbnRlcmFjdCwgb3IgcHJvdmlkZSBhIGJldHRlciBvdmVyYWxsIHNvbHV0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGxfZGV2aWNlX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdD01Njg9RGV2aWNlIHNob3VsZCBpbXBsZW1lbnQgc2V0IG9mIG9wZXJhdGlvbnMgYW5kIHJlZ2lzdGVyIGRldmljZSB2aWFcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdDo1Njk6ZHBsbF9kZXZpY2VfcmVnaXN0ZXIoKSBhdCB3aGljaCBwb2ludCBpdCBiZWNvbWVzIGF2YWlsYWJsZSB0byB0aGVcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC01NzAtdXNlcnMuIE11bHRpcGxlIGRyaXZlciBpbnN0YW5jZXMgY2FuIG9idGFpbiByZWZlcmVuY2UgdG8gaXQgd2l0aFxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdD02MzQ9VGhlIHJlZ2lzdHJhdGlvbiBwYXJ0IGlzIHRoZW4gbG9va3MgbGlrZSB0aGlzIHBhcnQ6XG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTY0NS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdDo2NDY6ICAgICAgICBlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihicC1cdTAwM2VkcGxsLCBEUExMX1RZUEVfUFBTLCBcdTAwMjZkcGxsX29wcywgYnApO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTY0Ny0gICAgICAgIGlmIChlcnIpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTQ0OD1kcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmluZChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2MC0vKipcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NjE6ICogZHBsbF9kZXZpY2VfcmVnaXN0ZXIgLSByZWdpc3RlciB0aGUgZHBsbCBkZXZpY2UgaW4gdGhlIHN1YnN5c3RlbVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2Mi0gKiBAZHBsbDogcG9pbnRlciB0byBhIGRwbGxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDczLSAqL1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ3NDppbnQgZHBsbF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBlbnVtIGRwbGxfdHlwZSB0eXBlLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3NS1cdFx0XHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzLCB2b2lkICpwcml2KVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTctfVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUxODpFWFBPUlRfU1lNQk9MX0dQTChkcGxsX2RldmljZV9yZWdpc3Rlcik7XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTE5LVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xOTMwPXpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTk4MC0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxOTgxOiAqIHpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE5ODItICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE5ODg9c3RhdGljIGludFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE5ODk6emwzMDczeF9kcGxsX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTk5MC17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMDctXHR6bGRwbGwtXHUwMDNldHlwZSA9IHpsMzA3M3hfcHJvcF9kcGxsX3R5cGVfZ2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjIwMDg6XHRyYyA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKHpsZHBsbC1cdTAwM2VkcGxsX2RldiwgemxkcGxsLVx1MDAzZXR5cGUsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAwOS1cdFx0XHRcdCAgXHUwMDI2emxkcGxsLVx1MDAzZW9wcywgemxkcGxsKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAyMi0gKiBVbnJlZ2lzdGVycyBnaXZlbiBEUExMIGRldmljZSBmcm9tIERQTEwgc3ViLXN5c3RlbSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyMDIzOiAqIGJ5IEB6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyLlxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMjQtICovXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTI0NDg9emwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ1MS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDUyOlx0cmMgPSB6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyKHpsZHBsbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ1My1cdGlmIChyYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00MTk0PWljZV9kcGxsX2luaXRfZHBsbChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsICpkLCBib29sIGNndSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjE1LVx0XHRcdGljZV9kcGxsX3VwZGF0ZV9zdGF0ZShwZiwgZCwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MjE2Olx0XHRyZXQgPSBkcGxsX2RldmljZV9yZWdpc3RlcihkLVx1MDAzZWRwbGwsIHR5cGUsIG9wcywgZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjE3LVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYz00MjA9c3RhdGljIGludCBtbHg1X2RwbGxfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmFkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYy00NTEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jOjQ1MjpcdGVyciA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKG1kcGxsLVx1MDAzZWRwbGwsIERQTExfVFlQRV9FRUMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jLTQ1My1cdFx0XHRcdCAgIFx1MDAyNm1seDVfZHBsbF9kZXZpY2Vfb3BzLCBtZHBsbCk7XG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTUwNTk9cHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTI0LVxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjUxMjU6XHRlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihicC1cdTAwM2VkcGxsLCBEUExMX1RZUEVfUFBTLCBcdTAwMjZkcGxsX29wcywgYnApO1xuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxMjYtXHRpZiAoZXJyKVxuLS1cbmluY2x1ZGUvbGludXgvZHBsbC5oPTI4MD12b2lkIGRwbGxfZGV2aWNlX3B1dChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGRwbGxfdHJhY2tlciAqdHJhY2tlcik7XG5pbmNsdWRlL2xpbnV4L2RwbGwuaC0yODEtXG5pbmNsdWRlL2xpbnV4L2RwbGwuaDoyODI6aW50IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZW51bSBkcGxsX3R5cGUgdHlwZSxcbmluY2x1ZGUvbGludXgvZHBsbC5oLTI4My1cdFx0XHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzLCB2b2lkICpwcml2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTgwMwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBEUExMIERyaXZlciBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgRFBMTCBkZXZpY2UgZHJpdmVyczogYHpsMzA3M3hgLCBgaWNlYCwgYG1seDVgLCBhbmQgYHB0cF9vY3BgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCB0aGVzZSBhcmUgYWxsIHRhcmdldGluZyBhY3R1YWwgaGFyZHdhcmUuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0aGF0IHNjcmVhbXMgJiMzNDtzb2Z0d2FyZSBlbXVsYXRpb24uJiMzNDsKCk5vdywgYSBxdWVzdGlvbiBpcyBwb3BwaW5nIGludG8gbXkgaGVhZDogY2FuIEkgZ2V0IHRvIGBkcGxsX3Bpbl9mcmVxX3NldGAgc29tZWhvdyB3aXRob3V0IGdvaW5nIHRocm91Z2ggYSByZWdpc3RlcmVkIERQTEwgZGV2aWNlPyBUaGlua2luZyBpdCBvdmVyLCBpdCBkb2VzbuKAmXQgc2VlbSBwb3NzaWJsZSBzaW5jZSB0aGVzZSBuZXRsaW5rIGNvbW1hbmRzIHJlbHkgb24gYWxyZWFkeSByZWdpc3RlcmVkIGRldmljZXMgYW5kIHBpbnMuIEkgY2Fu4oCZdCBzZWUgYSByb3V0ZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBhIGtub3duIGVudHJ5IHBvaW50LgoKT2theSwgc28gY2FuIEkgKmNyZWF0ZSogYSBEUExMIGRldmljZSB1c2luZyBuZXRsaW5rPyBUaGUgYW5zd2VyIGlzIGxpa2VseSBuby4gRHJpdmVycyBhcmUgcmVzcG9uc2libGUgZm9yIHJlZ2lzdGVyaW5nIHRob3NlIERQTEwgZGV2aWNlcy4gU28sIEkgbmVlZCB0byBsb29rIGZvciBhbnkga2luZCBvZiBtb2NrIG9yIGR1bW15IGRyaXZlci4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYGRyaXZlcnMvZHBsbC9gIGRpcmVjdG9yeSBhbmQgc2VlIHdoYXQmIzM5O3MgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7ZHBsbF9jb3JlLmMmIzM0OywKICAgICYjMzQ7ZHBsbF9jb3JlLmgmIzM0OywKICAgICYjMzQ7ZHBsbF9uZXRsaW5rLmMmIzM0OywKICAgICYjMzQ7ZHBsbF9uZXRsaW5rLmgmIzM0OywKICAgICYjMzQ7ZHBsbF9ubC5jJiMzNDssCiAgICAmIzM0O2RwbGxfbmwuaCYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogWwogICAgJiMzNDt6bDMwNzN4JiMzNDsKICBdCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM1NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGB6bDMwNzN4YCBEcml2ZXIqKgoKT2theSwgbm8gbmVlZCB0byB3YXN0ZSB0aW1lIHNldHRpbmcgdXAgYSBtb2NrIGRyaXZlcjsgdGhhdCYjMzk7cyBub3QgdGhlIGRpcmVjdGlvbiBJIG5lZWQgdG8gZ28gaW4gcmlnaHQgbm93LiBXYWl0IGEgbWludXRl4oCmIGB6bDMwNzN4YCAtIGlzbiYjMzk7dCB0aGF0IGFuIFNQSS9JMkMgZGV2aWNlPyBSaWdodCwgaXQgaXMhIFRoZSBjcml0aWNhbCBxdWVzdGlvbiB0aGVuIGlzLCBjYW4gSSBpbnN0YW50aWF0ZSBpdCBkaXJlY3RseSB3aXRoaW4gYSB2aXJ0dWFsIG1hY2hpbmUgZW52aXJvbm1lbnQgdXNpbmcgc3lzZnMgb3IgZGV2aWNlIHRyZWU/IFRoYXQmIzM5O3MgdGhlIGtleSB0byBlZmZpY2llbnQgdGVzdGluZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBoYXJkd2FyZSB3aWxsIGJlIGluc3RhbnRpYXRlZC4KCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGFjdHVhbCBkcml2ZXIgc291cmNlIGNvZGUuIFRpbWUgdG8gZXhhbWluZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgdGhlIHdheSB0aGlzIGRldmljZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGlzIGRlZmluZWQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW5pdGlhbGl6ZWQsIGNvbmZpZ3VyZWQsIGFuZCBob3cgdGhlIGludGVyZmFjZSB3aXRoIFNQSS9JMkMgaXMgaGFuZGxlZC4gVGhhdCBzaG91bGQgdGVsbCBtZSB3aGV0aGVyIHZpcnR1YWwgaW5zdGFudGlhdGlvbiBpcyBldmVuIGZlYXNpYmxlLCBhbmQgaWYgc28sIGhvdyB0byBnZXQgaXQgd29ya2luZyBlZmZlY3RpdmVseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9pMmNfZHJpdmVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jPTQ2PU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHpsMzA3M3hfaTJjX29mX21hdGNoKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTQ3LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6NDg6c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTQ5LVx0LmRyaXZlciA9IHtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01NS19O1xuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6NTY6bW9kdWxlX2kyY19kcml2ZXIoemwzMDczeF9pMmNfZHJpdmVyKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTU3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkxMAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEkyQyBEcml2ZXIgaW4gYSBWaXJ0dWFsIEVudmlyb25tZW50KioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGFuIEkyQyBkcml2ZXIuIFJpZ2h0LCBJIGtub3cgSSBjYW4gaW5zdGFudGlhdGUgSTJDIGRldmljZXMgd2l0aGluIFFFTVUgb3IgR0NFIHVzaW5nIHN5c2ZzLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXdfZGV2aWNlYCBmZWF0dXJlIG9uIGFuIEkyQyBhZGFwdGVyLiBUaGluZ3MgbGlrZSBgaTJjLXN0dWJgIG9yIGV2ZW4gYGkyYy1kdW1teWAgYXJlIHBlcmZlY3QgZm9yIHRoYXQuIEJ1dCBoZXJlJiMzOTtzIHdoZXJlIEkgbmVlZCB0byBwYXVzZSBhbmQgdGhpbmsgY3JpdGljYWxseS4gTXkgY29uY2VybiBpcyB0aGlzOiBkb2VzIHRoZSBgemwzMDczeGAgZHJpdmVyLCB3aGF0ZXZlciBpdCBpcywgYWN0dWFsbHkgYXR0ZW1wdCBhbnkgKmhhcmR3YXJlKiBhY2Nlc3MgZHVyaW5nIGl0cyBwcm9iZSBzZXF1ZW5jZT8gSWYgaXQgZG9lcywgdGhlbiB1c2luZyBhIGR1bW15IEkyQyBkZXZpY2UsIGhvd2V2ZXIgY29udmVuaWVudCwgd2lsbCBsaWtlbHkgZmFpbC4gSXQmIzM5O3MgYSBrZXkgcG9pbnQgdGhhdCBJIGNhbiYjMzk7dCBvdmVybG9vay4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBgemwzMDczeF9wcm9iZWAgKG9yIGEgZnVuY3Rpb24gd2l0aCBhIHNpbWlsYXIgbmFtZSBpZiB0aGF0JiMzOTtzIG5vdCBleGFjdGx5IGl0KSBkb2VzLCBhbmQgd2hhdCByZWdpc3RlcnMgaXQgaXMgYXR0ZW1wdGluZyB0byBhY2Nlc3MgZHVyaW5nIGluaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjY3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBsYWlkIG91dDoKCioqQ2hlY2tpbmcgdGhlIEkyQyBEcml2ZXIgZm9yIHRoZSBaTDMwNzN4KioKCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBJMkMgZHJpdmVyIGltcGxlbWVudGF0aW9uIGZvciB0aGUgWkwzMDczeC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJMkMgY29tbXVuaWNhdGlvbiBpcyBoYW5kbGVkIGJlY2F1c2UsIGluIG15IGV4cGVyaWVuY2UsIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBrZXkgYXJlYSBmb3IgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24uIFRoZSBzcGVjaWZpYyBmaWxlIEkmIzM5O20gdGFyZ2V0aW5nIGlzIGBkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuY2AuIFRoaXMgdGVsbHMgbWUgaW1tZWRpYXRlbHkgd2hlcmUgdG8gbG9vayB3aXRoaW4gdGhlIGNvZGUgYmFzZS4gSSBleHBlY3QgdG8gZmluZCB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUgWkwzMDczeCBvdmVyIHRoZSBJMkMgYnVzLCBwb3RlbnRpYWxseSBpbmNsdWRpbmcgdGhpbmdzIGxpa2UgYWRkcmVzcyBkZWZpbml0aW9ucywgcmVnaXN0ZXIgbWFwcywgYW5kIGVycm9yIGhhbmRsaW5nIGZvciBJMkMgdHJhbnNhY3Rpb25zLiBUaGlzIGZpbGUgaXMgbXkgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgSTJDIGNvbW11bmljYXRpb24gZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0XG4gICAzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvZGV2X3ByaW50ay5oXHUwMDNlXG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvZXJyLmhcdTAwM2VcbiAgIDU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pMmMuaFx1MDAzZVxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvcmVnbWFwLmhcdTAwM2VcbiAgIDg6XHRcbiAgIDk6XHQjaW5jbHVkZSBcJiMzNDtjb3JlLmhcJiMzNDtcbiAgMTA6XHRcbiAgMTE6XHRzdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4gIDEyOlx0e1xuICAxMzpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2Y2xpZW50LVx1MDAzZWRldjtcbiAgMTQ6XHRcdHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXY7XG4gIDE1Olx0XG4gIDE2Olx0XHR6bGRldiA9IHpsMzA3M3hfZGV2bV9hbGxvYyhkZXYpO1xuICAxNzpcdFx0aWYgKElTX0VSUih6bGRldikpXG4gIDE4Olx0XHRcdHJldHVybiBQVFJfRVJSKHpsZGV2KTtcbiAgMTk6XHRcbiAgMjA6XHRcdHpsZGV2LVx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgXHUwMDI2emwzMDczeF9yZWdtYXBfY29uZmlnKTtcbiAgMjE6XHRcdGlmIChJU19FUlIoemxkZXYtXHUwMDNlcmVnbWFwKSlcbiAgMjI6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKHpsZGV2LVx1MDAzZXJlZ21hcCksXG4gIDIzOlx0XHRcdFx0XHQgICAgIFwmIzM0O0ZhaWxlZCB0byBpbml0aWFsaXplIHJlZ21hcFxcblwmIzM0Oyk7XG4gIDI0Olx0XG4gIDI1Olx0XHRyZXR1cm4gemwzMDczeF9kZXZfcHJvYmUoemxkZXYpO1xuICAyNjpcdH1cbiAgMjc6XHRcbiAgMjg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgemwzMDczeF9pMmNfaWRbXSA9IHtcbiAgMjk6XHRcdHsgLm5hbWUgPSBcJiMzNDt6bDMwNzMxXCYjMzQ7IH0sXG4gIDMwOlx0XHR7IC5uYW1lID0gXCYjMzQ7emwzMDczMlwmIzM0OyB9LFxuICAzMTpcdFx0eyAubmFtZSA9IFwmIzM0O3psMzA3MzNcJiMzNDsgfSxcbiAgMzI6XHRcdHsgLm5hbWUgPSBcJiMzNDt6bDMwNzM0XCYjMzQ7IH0sXG4gIDMzOlx0XHR7IC5uYW1lID0gXCYjMzQ7emwzMDczNVwmIzM0OyB9LFxuICAzNDpcdFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gIDM1Olx0fTtcbiAgMzY6XHRNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgemwzMDczeF9pMmNfaWQpO1xuICAzNzpcdFxuICAzODpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHpsMzA3M3hfaTJjX29mX21hdGNoW10gPSB7XG4gIDM5Olx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWljcm9jaGlwLHpsMzA3MzFcJiMzNDsgfSxcbiAgNDA6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttaWNyb2NoaXAsemwzMDczMlwmIzM0OyB9LFxuICA0MTpcdFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21pY3JvY2hpcCx6bDMwNzMzXCYjMzQ7IH0sXG4gIDQyOlx0XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bWljcm9jaGlwLHpsMzA3MzRcJiMzNDsgfSxcbiAgNDM6XHRcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDttaWNyb2NoaXAsemwzMDczNVwmIzM0OyB9LFxuICA0NDpcdFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gIDQ1Olx0fTtcbiAgNDY6XHRNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB6bDMwNzN4X2kyY19vZl9tYXRjaCk7XG4gIDQ3Olx0XG4gIDQ4Olx0c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcbiAgNDk6XHRcdC5kcml2ZXIgPSB7XG4gIDUwOlx0XHRcdC5uYW1lID0gXCYjMzQ7emwzMDczeC1pMmNcJiMzNDssXG4gIDUxOlx0XHRcdC5vZl9tYXRjaF90YWJsZSA9IHpsMzA3M3hfaTJjX29mX21hdGNoLFxuICA1MjpcdFx0fSxcbiAgNTM6XHRcdC5wcm9iZSA9IHpsMzA3M3hfaTJjX3Byb2JlLFxuICA1NDpcdFx0LmlkX3RhYmxlID0gemwzMDczeF9pMmNfaWQsXG4gIDU1Olx0fTtcbiAgNTY6XHRtb2R1bGVfaTJjX2RyaXZlcih6bDMwNzN4X2kyY19kcml2ZXIpO1xuICA1NzpcdFxuICA1ODpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7SXZhbiBWZWNlcmEgXHUwMDNjaXZlY2VyYUByZWRoYXQuY29tXHUwMDNlXCYjMzQ7KTtcbiAgNTk6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TWljcm9jaGlwIFpMMzA3M3ggSTJDIGRyaXZlclwmIzM0Oyk7XG4gIDYwOlx0TU9EVUxFX0lNUE9SVF9OUyhcJiMzNDtaTDMwNzNYXCYjMzQ7KTtcbiAgNjE6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU3OQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgUHJvYmUgRnVuY3Rpb24qKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgemwzMDczeF9kZXZfcHJvYmVgLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHRoZSBpbml0aWFsIGRldmljZSBkZXRlY3Rpb24gYW5kIHNldHVwLiBXZSBhbGwga25vdyBob3cgY3JpdGljYWwgdGhpcyBmdW5jdGlvbiBpczsgaXQmIzM5O3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBmaXJzdCBsaW5lIG9mIGRlZmVuc2UgYWdhaW5zdCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBuaWdodG1hcmVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nLCB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBlcnJvciBoYW5kbGluZy4gSXMgaXQgZm9sbG93aW5nIGJlc3QgcHJhY3RpY2VzIGZvciBkcml2ZXIgZGV2ZWxvcG1lbnQsIG9yIGFyZSB3ZSBnb2luZyB0byBiZSBjaGFzaW5nIGRvd24gb2JzY3VyZSBoYXJkd2FyZSBxdWlya3MgbGF0ZXI/IEkgd2FudCB0byBzZWUgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIEkyQyBvciBTUEkgaW50ZXJmYWNlIChvciB3aGF0ZXZlciBpdCYjMzk7cyB1c2luZyksIGlmIGl0JiMzOTtzIGNvcnJlY3RseSBoYW5kbGluZyB0aGUgaW50ZXJydXB0IHNldHVwLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgaWYgaXQgaXMgZG9pbmcgYWxsIG9mIHRoaXMgc2FmZWx5LiBBbnkgb2J2aW91cyBjb25jdXJyZW5jeSBpc3N1ZXM/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIHJlc291cmNlIGFjY2Vzcz8gR290dGEgYmUgdGhvcm91Z2guIFRoaXMgcHJvYmUgZnVuY3Rpb24gZGV0ZXJtaW5lcyB0aGUgcmVsaWFiaWxpdHkgb2YgdGhlIGVudGlyZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3psMzA3M3hfZGV2X3Byb2JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05MjY9emwzMDczeF9kZXZtX2RwbGxfaW5pdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05NzMtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTc0OiAqIHpsMzA3M3hfZGV2X3Byb2JlIC0gaW5pdGlhbGl6ZSB6bDMwNzN4IGRldmljZVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk3NS0gKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2Vcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTgwLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk4MTppbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05ODIte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDUzLX1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDU0OkVYUE9SVF9TWU1CT0xfTlNfR1BMKHpsMzA3M3hfZGV2X3Byb2JlLCBcJiMzNDtaTDMwNzNYXCYjMzQ7KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDU1LVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaD05Nj1zdHJ1Y3QgemwzMDczeF9kZXYgKnpsMzA3M3hfZGV2bV9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oOjk3OmludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaC05OC1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYz0xMT1zdGF0aWMgaW50IHpsMzA3M3hfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjQtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYzoyNTpcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy0yNi19XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3NwaS5jLTI0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM6MjU6XHRyZXR1cm4gemwzMDczeF9kZXZfcHJvYmUoemxkZXYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmMtMjYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU3OAoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgemwzMDczeF9kZXZfcHJvYmVgLCBhcyBJIHVuZGVyc3RhbmQgaXQ6CgoqKkFuYWx5emluZyB0aGUgYHpsMzA3M3hfZGV2X3Byb2JlYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYHpsMzA3M3hfZGV2X3Byb2JlYC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgaW4gdGhlIHJlYWxtIG9mIGRldmljZSBwcm9iaW5nLCBhbmQgaXQmIzM5O3Mgc3BlY2lmaWNhbGx5IGZvciBhIGB6bDMwNzN4YCBkZXZpY2UsIHdoaWNoIEkmIzM5O20gYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBnZW5lcmFsIGFyY2hpdGVjdHVyZSBvZi4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIGF0dGVtcHRzIHRvIGlkZW50aWZ5LCBpbml0aWFsaXplLCBhbmQgcmVnaXN0ZXIgYSBuZXcgYHpsMzA3M3hgIGRldmljZSB0aGF0JiMzOTtzIGJlZW4gcGx1Z2dlZCBpbiBvciBpcyBvdGhlcndpc2UgYmVjb21pbmcgYXZhaWxhYmxlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZToKCiogICAqKlJlc291cmNlIGFsbG9jYXRpb24qKjogSG93IGFyZSB0aGV5IGdldHRpbmcgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMsIGxpa2UgbWVtb3J5IHJlZ2lvbnMsIElSUXMsIEkyQyBvciBTUEkgYnVzZXMsIGV0Yy4/IEkgd2FudCB0byBzZWUgaWYgdGhleSBhcmUgdXNpbmcgYW55IHBsYXRmb3JtLXNwZWNpZmljIG1lY2hhbmlzbXMgb3IgaWYgdGhlcmUmIzM5O3MgYSBtb3JlIGdlbmVyaWMgYXBwcm9hY2guIEFueSB1bnVzdWFsIGFwcHJvYWNoZXMgaGVyZSB3b3VsZCBiZSBpbnRlcmVzdGluZy4KKiAgICoqRGV2aWNlIGlkZW50aWZpY2F0aW9uKio6IEhvdyBpcyB0aGUgZHJpdmVyIHZlcmlmeWluZyB0aGUgZGV2aWNlIGlzICphY3R1YWxseSogYSBgemwzMDczeGA/IEFyZSB0aGV5IGNoZWNraW5nIGEgZGV2aWNlIElEIHJlZ2lzdGVyPyBWZW5kb3Itc3BlY2lmaWMgbWFnaWM/IEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIGFwcHJvYWNoIGFuZCBhbnkgcG90ZW50aWFsIGZvciByb2J1c3RuZXNzIGlzc3Vlcy4KKiAgICoqSW5pdGlhbGl6YXRpb24gc2VxdWVuY2UqKjogV2hhdCBzdGVwcyBhcmUgdGFrZW4gdG8gZ2V0IHRoZSBkZXZpY2UgcmVhZHkgZm9yIHVzZT8gVGhpcyBjb3VsZCBpbmNsdWRlIHBvd2VyLXVwIHNlcXVlbmNlcywgcmVnaXN0ZXIgd3JpdGVzLCBjbG9jayBjb25maWd1cmF0aW9uLCBhbmQgcG9zc2libHkgZmlybXdhcmUgbG9hZGluZy4gSSYjMzk7bGwgYmUgbG9va2luZyBhdCB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucywgcGF5aW5nIGF0dGVudGlvbiB0byBhbnkgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgdGltaW5nIGNvbnN0cmFpbnRzLgoqICAgKipEcml2ZXIgcmVnaXN0cmF0aW9uKio6IE9uY2UgdGhlIGRldmljZSBpcyByZWFkeSwgSSYjMzk7bGwgYmUgd2F0Y2hpbmcgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIHJlZ2lzdGVycyBpdHNlbGYgd2l0aCB0aGUga2VybmVsLiBJcyBpdCB1c2luZyB0aGUgc3RhbmRhcmQgZGV2aWNlIGRyaXZlciBtb2RlbD8gQXJlIHRoZXJlIGFueSBjdXN0b20gY2FsbGJhY2tzIG9yIHN0cnVjdHVyZXM/IEFueSBjdXN0b20gZGF0YSBzdHJ1Y3R1cmVzIG9yIGludGVyYWN0aW9ucyB3aWxsIGJlIG9mIGludGVyZXN0LgoqICAgKipFcnJvciBoYW5kbGluZyoqOiBXaGVyZSBhcmUgdGhlIGVycm9yIGNoZWNrcz8gV2hhdCBoYXBwZW5zIGlmIGFueSBvZiB0aGUgY3JpdGljYWwgc3RlcHMgZmFpbD8gSSB3YW50IHRvIGFzc2VzcyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgcHJvYmUgZnVuY3Rpb24gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgd2Vha25lc3Nlcy4gSSYjMzk7bSBleHBlY3RpbmcgdGhvcm91Z2ggZXJyb3IgaGFuZGxpbmcsIGVzcGVjaWFsbHkgd2hlbiBpbnRlcmFjdGluZyB3aXRoIGhhcmR3YXJlLgoqICAgKipDb25jdXJyZW5jeSoqOiBJJiMzOTtsbCBhbHNvIGdsYW5jZSB0byBzZWUgaWYgYW55dGhpbmcgaGVyZSBpcyBzdXNjZXB0aWJsZSB0byBjb25jdXJyZW5jeSBpc3N1ZXMgYXMgSSBrbm93IGhhcmR3YXJlIHByb2JpbmcgY2FuIG9mdGVuIGhhdmUgc2hhcmVkIHJlc291cmNlcy4KCkVzc2VudGlhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEgZ2F0ZXdheS4gSXQgc2hvdWxkIGJlIG1ha2luZyBzdXJlIHRoYXQgdGhlIGRldmljZSBpcyBhY3R1YWxseSB0aGUgZGV2aWNlIHdlJiMzOTtyZSBleHBlY3RpbmcsIGFuZCB0aGVuIGdldHRpbmcgaXQgcmVhZHkgdG8gYmUgdXNlZCBieSB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5JiMzOTt2ZSBkb25lIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk3NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk3NDpcdCAqIHpsMzA3M3hfZGV2X3Byb2JlIC0gaW5pdGlhbGl6ZSB6bDMwNzN4IGRldmljZVxuIDk3NTpcdCAqIEB6bGRldjogcG9pbnRlciB0byB6bDMwNzN4IGRldmljZVxuIDk3NjpcdCAqXG4gOTc3Olx0ICogQ29tbW9uIGluaXRpYWxpemF0aW9uIG9mIHpsMzA3M3ggZGV2aWNlIHN0cnVjdHVyZS5cbiA5Nzg6XHQgKlxuIDk3OTpcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgXHUwMDNjMCBvbiBlcnJvclxuIDk4MDpcdCAqL1xuIDk4MTpcdGludCB6bDMwNzN4X2Rldl9wcm9iZShzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxuIDk4MjpcdHtcbiA5ODM6XHRcdHUxNiBpZCwgcmV2aXNpb24sIGZ3X3ZlcjtcbiA5ODQ6XHRcdHVuc2lnbmVkIGludCBpO1xuIDk4NTpcdFx0dTMyIGNmZ192ZXI7XG4gOTg2Olx0XHRpbnQgcmM7XG4gOTg3Olx0XG4gOTg4Olx0XHQvKiBSZWFkIGNoaXAgSUQgKi9cbiA5ODk6XHRcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcdTAwMjZpZCk7XG4gOTkwOlx0XHRpZiAocmMpXG4gOTkxOlx0XHRcdHJldHVybiByYztcbiA5OTI6XHRcbiA5OTM6XHRcdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cbiA5OTQ6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoemwzMDczeF9jaGlwX2lkcyk7IGkmIzQzOyYjNDM7KSB7XG4gOTk1Olx0XHRcdGlmICh6bDMwNzN4X2NoaXBfaWRzW2ldLmlkID09IGlkKVxuIDk5NjpcdFx0XHRcdGJyZWFrO1xuIDk5NzpcdFx0fVxuIDk5ODpcdFxuIDk5OTpcdFx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcbjEwMDA6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCAtRU5PREVWLFxuMTAwMTpcdFx0XHRcdFx0ICAgICBcJiMzNDtVbmtub3duIGNoaXAgSUQ6IDB4JTA0eFxcblwmIzM0OywgaWQpO1xuMTAwMjpcdFxuMTAwMzpcdFx0emxkZXYtXHUwMDNlaW5mbyA9IFx1MDAyNnpsMzA3M3hfY2hpcF9pZHNbaV07XG4xMDA0Olx0XG4xMDA1Olx0XHQvKiBSZWFkIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjdXN0b20gY29uZmlnIHZlcnNpb24gKi9cbjEwMDY6XHRcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFVklTSU9OLCBcdTAwMjZyZXZpc2lvbik7XG4xMDA3Olx0XHRpZiAocmMpXG4xMDA4Olx0XHRcdHJldHVybiByYztcbjEwMDk6XHRcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0ZXX1ZFUiwgXHUwMDI2ZndfdmVyKTtcbjEwMTA6XHRcdGlmIChyYylcbjEwMTE6XHRcdFx0cmV0dXJuIHJjO1xuMTAxMjpcdFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfQ1VTVE9NX0NPTkZJR19WRVIsIFx1MDAyNmNmZ192ZXIpO1xuMTAxMzpcdFx0aWYgKHJjKVxuMTAxNDpcdFx0XHRyZXR1cm4gcmM7XG4xMDE1Olx0XG4xMDE2Olx0XHRkZXZfZGJnKHpsZGV2LVx1MDAzZWRldiwgXCYjMzQ7Q2hpcElEKCVYKSwgQ2hpcFJldiglWCksIEZ3VmVyKCV1KVxcblwmIzM0OywgaWQsXG4xMDE3Olx0XHRcdHJldmlzaW9uLCBmd192ZXIpO1xuMTAxODpcdFx0ZGV2X2RiZyh6bGRldi1cdTAwM2VkZXYsIFwmIzM0O0N1c3RvbSBjb25maWcgdmVyc2lvbjogJWx1LiVsdS4lbHUuJWx1XFxuXCYjMzQ7LFxuMTAxOTpcdFx0XHRGSUVMRF9HRVQoR0VOTUFTSygzMSwgMjQpLCBjZmdfdmVyKSxcbjEwMjA6XHRcdFx0RklFTERfR0VUKEdFTk1BU0soMjMsIDE2KSwgY2ZnX3ZlciksXG4xMDIxOlx0XHRcdEZJRUxEX0dFVChHRU5NQVNLKDE1LCA4KSwgY2ZnX3ZlciksXG4xMDIyOlx0XHRcdEZJRUxEX0dFVChHRU5NQVNLKDcsIDApLCBjZmdfdmVyKSk7XG4xMDIzOlx0XG4xMDI0Olx0XHQvKiBHZW5lcmF0ZSByYW5kb20gY2xvY2sgSUQgYXMgdGhlIGRldmljZSBoYXMgbm90IHN1Y2ggcHJvcGVydHkgdGhhdFxuMTAyNTpcdFx0ICogY291bGQgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiBBIHVzZXIgY2FuIGxhdGVyIGNoYW5nZSB0aGlzIHZhbHVlXG4xMDI2Olx0XHQgKiB1c2luZyBkZXZsaW5rLlxuMTAyNzpcdFx0ICovXG4xMDI4Olx0XHR6bGRldi1cdTAwM2VjbG9ja19pZCA9IGdldF9yYW5kb21fdTY0KCk7XG4xMDI5Olx0XG4xMDMwOlx0XHQvKiBEZWZhdWx0IHBoYXNlIG9mZnNldCBhdmVyYWdpbmcgZmFjdG9yICovXG4xMDMxOlx0XHR6bGRldi1cdTAwM2VwaGFzZV9hdmdfZmFjdG9yID0gMjtcbjEwMzI6XHRcbjEwMzM6XHRcdC8qIEluaXRpYWxpemUgbXV0ZXggZm9yIG9wZXJhdGlvbnMgd2hlcmUgbXVsdGlwbGUgcmVhZHMsIHdyaXRlc1xuMTAzNDpcdFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXG4xMDM1Olx0XHQgKi9cbjEwMzY6XHRcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVx1MDAzZWRldiwgXHUwMDI2emxkZXYtXHUwMDNlbXVsdGlvcF9sb2NrKTtcbjEwMzc6XHRcdGlmIChyYylcbjEwMzg6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbjEwMzk6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXG5cJiMzNDspO1xuMTA0MDpcdFxuMTA0MTpcdFx0LyogUmVnaXN0ZXIgRFBMTCBjaGFubmVscyAqL1xuMTA0MjpcdFx0cmMgPSB6bDMwNzN4X2Rldm1fZHBsbF9pbml0KHpsZGV2KTtcbjEwNDM6XHRcdGlmIChyYylcbjEwNDQ6XHRcdFx0cmV0dXJuIHJjO1xuMTA0NTpcdFxuMTA0NjpcdFx0LyogUmVnaXN0ZXIgdGhlIGRldmxpbmsgaW5zdGFuY2UgYW5kIHBhcmFtZXRlcnMgKi9cbjEwNDc6XHRcdHJjID0gemwzMDczeF9kZXZsaW5rX3JlZ2lzdGVyKHpsZGV2KTtcbjEwNDg6XHRcdGlmIChyYylcbjEwNDk6XHRcdFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXHUwMDNlZGV2LCByYyxcbjEwNTA6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGRldmxpbmsgaW5zdGFuY2VcXG5cJiMzNDspO1xuMTA1MTpcdFxuMTA1MjpcdFx0cmV0dXJuIDA7XG4xMDUzOlx0fVxuMTA1NDpcdEVYUE9SVF9TWU1CT0xfTlNfR1BMKHpsMzA3M3hfZGV2X3Byb2JlLCBcJiMzNDtaTDMwNzNYXCYjMzQ7KTtcbjEwNTU6XHRcbjEwNTY6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O0l2YW4gVmVjZXJhIFx1MDAzY2l2ZWNlcmFAcmVkaGF0LmNvbVx1MDAzZVwmIzM0Oyk7XG4xMDU3Olx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01pY3JvY2hpcCBaTDMwNzN4IGNvcmUgZHJpdmVyXCYjMzQ7KTtcbjEwNTg6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY1MgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDUyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIEkyQyBEZXZpY2UgUHJvYmluZyBhbmQgTW9ja2luZyBQb3NzaWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHByb2JlIGZ1bmN0aW9uLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCByZWFkcyBhIGNoaXAgSUQgZnJvbSB0aGUgSTJDIGRldmljZS4gSWYgaXQgZ2V0cyBhIHZhbGlkIElELCBpdCBtb3ZlcyBvbjsgb3RoZXJ3aXNlLCBpdCBlcnJvcnMgb3V0LiBUaGUgY3J1Y2lhbCB0aGluZyBpcyB0aGF0IHRoaXMgZWFybHkgcmVhZCBpcyBnb2luZyB0byBiZSBhIGhhcmQgcmVxdWlyZW1lbnQgZm9yIHRoZSBkcml2ZXIgdG8gZXZlbiAqc3RhcnQqLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBiZSBtb2NrZWQgd2l0aGluIFFFTVU/IEFsbW9zdCBjZXJ0YWlubHkgbm90LCB1bmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWFsaXplZCBRRU1VIGRldmljZSBtb2RlbCBmb3IgdGhlIHpsMzA3M3gsIHdoaWNoIGlzIGhpZ2hseSB1bmxpa2VseS4gVGhhdCYjMzk7cyBhIG5pY2hlIHBhcnQuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byB0aGluayBtb3JlIGNyZWF0aXZlbHkuCgpUaGVuIG15IGJyYWluIGRhcnRzIHRvIHN5emthbGxlciBhbmQgaXRzIGNhcGFiaWxpdGllcyBmb3IgbW9ja2luZy4gQ2FuIEkgdXNlIHNvbWV0aGluZyBsaWtlIGBpMmMtc3R1YmAgb3IgYGkyYy1kdW1teWA/IE5vLCBgaTJjLXN0dWJgIGhhcyBsaW1pdGF0aW9uczsgaXQgc2VlbXMgdG8gZWl0aGVyIG9ubHkgc3VwcG9ydCBhIGhhbmRmdWwgb2Ygc3BlY2lmaWMgY2hpcHMgb3IgcmVsaWVzIG9uIHN5c2ZzLWJhc2VkIHJlZ2lzdGVyIGludGVyYWN0aW9uLiBBbmQgdGhlIHpsMzA3M3ggaXMgZGVmaW5pdGVseSAqbm90KiBwcmUtcHJvZ3JhbW1lZCBpbnRvIGBpMmMtc3R1YmAmIzM5O3Mga25vd24gbGlzdC4gVW5sZXNzIHN5emthbGxlciBoYXMgc29tZSBzcGVjaWFsIHNhdWNlIGZvciBpbmplY3RpbmcgSTJDIHJlc3BvbnNlcywgd2hpY2ggaXNuJiMzOTt0IHN0YW5kYXJkLCB0aGlzIGlzIGdvaW5nIHRvIGJlIGEgZGVhZCBlbmQgZm9yIGEgc2ltcGxlIG1vY2suCgpOb3cgSSYjMzk7bSB0cnlpbmcgdG8gcmVjYWxsIHRoZSBwYXR0ZXJucy4gV2l0aCBVU0IgZGV2aWNlcywgd2lmaSwgYW5kIG5ldHdvcmsgaW50ZXJmYWNlcywgdGhlcmUgYXJlICYjMzQ7c2ltJiMzNDsgZGV2aWNlcyBpbiBzeXprYWxsZXIuIERvZXMgdGhlIEkyQyBlY29zeXN0ZW0gaGF2ZSBhIGNvdW50ZXJwYXJ0PyBQcm9iYWJseSBub3QuIFRoZSBwcm9ibGVtIHdpdGggSTJDIGlzIGl0IGlzIHNvIHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUuIEkmIzM5O20gYWxtb3N0IGNlcnRhaW4gYGkyYy1zdHViYCBpcyBqdXN0IGEgYmFzaWMgU01CdXMgc3R1Yiwgbm90IGEgZ2VuZXJhbC1wdXJwb3NlIG1vY2tpbmcgdG9vbC4KCk15IHRob3VnaHRzIGFyZSBub3cgdHVybmluZyB0b3dhcmRzIHVucmVsYXRlZCBwaWVjZXMgb2YgdGhlIHB1enpsZSAtIHRob3NlIGNoYW5nZXMgaW4gYGRwbGxfbmV0bGluay5jYC4gSSBoYXZlIHRvIHN0ZXAgYmFjayBhbmQgcmVtZW1iZXIgd2hhdCB0aGVzZSBmaWxlcyBhcmUgYWJvdXQuIFRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIHRoZSBjb3JlIERQTEwgc3Vic3lzdGVtLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwgdG8gbXkgcHJvamVjdCEgVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIEkgY2FuIHJlYWNoIHRoZSBEUExMIHN1YnN5c3RlbSB3aXRob3V0IGFueSBwaHlzaWNhbCBkZXZpY2UuIEl0IG1heSBiZSBwb3NzaWJsZSBpZiBvdGhlciBkcml2ZXJzIHJlZ2lzdGVyIERQTEwgZGV2aWNlcy4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4gSSBuZWVkIHRvIGNoZWNrIGlmIGFueSBvdGhlciBkcml2ZXJzIHdpbGwgcmVnaXN0ZXIgYSBEUExMIGRldmljZSBpbiB0aGUgYWJzZW5jZSBvZiB0aGUgemwzMDczeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHBsbF9kZXZpY2VfcmVnaXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTU2OD1EZXZpY2Ugc2hvdWxkIGltcGxlbWVudCBzZXQgb2Ygb3BlcmF0aW9ucyBhbmQgcmVnaXN0ZXIgZGV2aWNlIHZpYVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0OjU2OTpkcGxsX2RldmljZV9yZWdpc3RlcigpIGF0IHdoaWNoIHBvaW50IGl0IGJlY29tZXMgYXZhaWxhYmxlIHRvIHRoZVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTU3MC11c2Vycy4gTXVsdGlwbGUgZHJpdmVyIGluc3RhbmNlcyBjYW4gb2J0YWluIHJlZmVyZW5jZSB0byBpdCB3aXRoXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTYzND1UaGUgcmVnaXN0cmF0aW9uIHBhcnQgaXMgdGhlbiBsb29rcyBsaWtlIHRoaXMgcGFydDpcbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QtNjQ1LVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0OjY0NjogICAgICAgIGVyciA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKGJwLVx1MDAzZWRwbGwsIERQTExfVFlQRV9QUFMsIFx1MDAyNmRwbGxfb3BzLCBicCk7XG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QtNjQ3LSAgICAgICAgaWYgKGVycilcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9NDQ4PWRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maW5kKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDYwLS8qKlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ2MTogKiBkcGxsX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVyIHRoZSBkcGxsIGRldmljZSBpbiB0aGUgc3Vic3lzdGVtXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDYyLSAqIEBkcGxsOiBwb2ludGVyIHRvIGEgZHBsbFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NzMtICovXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDc0OmludCBkcGxsX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGVudW0gZHBsbF90eXBlIHR5cGUsXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDc1LVx0XHRcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHMsIHZvaWQgKnByaXYpXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUxNy19XG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTE4OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTktXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE5MzA9emwzMDczeF9kcGxsX3BpbnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTgwLS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE5ODE6ICogemwzMDczeF9kcGxsX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTk4Mi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTk4OD1zdGF0aWMgaW50XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTk4OTp6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTkwLXtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAwNy1cdHpsZHBsbC1cdTAwM2V0eXBlID0gemwzMDczeF9wcm9wX2RwbGxfdHlwZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjAwODpcdHJjID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoemxkcGxsLVx1MDAzZWRwbGxfZGV2LCB6bGRwbGwtXHUwMDNldHlwZSxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDA5LVx0XHRcdFx0ICBcdTAwMjZ6bGRwbGwtXHUwMDNlb3BzLCB6bGRwbGwpO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDIyLSAqIFVucmVnaXN0ZXJzIGdpdmVuIERQTEwgZGV2aWNlIGZyb20gRFBMTCBzdWItc3lzdGVtIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjIwMjM6ICogYnkgQHpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIuXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAyNC0gKi9cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MjQ0OD16bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDUxLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI0NTI6XHRyYyA9IHpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIoemxkcGxsKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDUzLVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQxOTQ9aWNlX2RwbGxfaW5pdF9kcGxsKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGwgKmQsIGJvb2wgY2d1LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMTUtXHRcdFx0aWNlX2RwbGxfdXBkYXRlX3N0YXRlKHBmLCBkLCB0cnVlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyMTY6XHRcdHJldCA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKGQtXHUwMDNlZHBsbCwgdHlwZSwgb3BzLCBkKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMTctXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jPTQyMD1zdGF0aWMgaW50IG1seDVfZHBsbF9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jLTQ1MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmM6NDUyOlx0ZXJyID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIobWRwbGwtXHUwMDNlZHBsbCwgRFBMTF9UWVBFX0VFQyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmMtNDUzLVx0XHRcdFx0ICAgXHUwMDI2bWx4NV9kcGxsX2RldmljZV9vcHMsIG1kcGxsKTtcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NTA1OT1wdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxMjQtXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTEyNTpcdGVyciA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKGJwLVx1MDAzZWRwbGwsIERQTExfVFlQRV9QUFMsIFx1MDAyNmRwbGxfb3BzLCBicCk7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTEyNi1cdGlmIChlcnIpXG4tLVxuaW5jbHVkZS9saW51eC9kcGxsLmg9MjgwPXZvaWQgZHBsbF9kZXZpY2VfcHV0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZHBsbF90cmFja2VyICp0cmFja2VyKTtcbmluY2x1ZGUvbGludXgvZHBsbC5oLTI4MS1cbmluY2x1ZGUvbGludXgvZHBsbC5oOjI4MjppbnQgZHBsbF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBlbnVtIGRwbGxfdHlwZSB0eXBlLFxuaW5jbHVkZS9saW51eC9kcGxsLmgtMjgzLVx0XHRcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHMsIHZvaWQgKnByaXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU4MAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEZXZpY2UgRHJpdmVyIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGF2YWlsYWJsZSBkcml2ZXJzIGFuZCBpdCBzZWVtcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgcHJldHR5IHNwZWNpZmljIGhhcmR3YXJlIHNldC4gVGhlIGxpc3Qgb25seSBpbmNsdWRlcyBgemwzMDczeGAsIGBpY2VgLCBgbWx4NWAsIGFuZCBgcHRwX29jcGAuIFJpZ2h0LCBzbyBgaWNlYCBpcyBJbnRlbCYjMzk7cyBFODAwIHNlcmllcyBQQ0llIE5JQywgYG1seDVgIGlzIGEgTWVsbGFub3ggQ29ubmVjdFgtNSYjNDM7IFBDSWUgTklDLCBhbmQgYHB0cF9vY3BgIGlzIHRoZSBPcGVuIENvbXB1dGUgUHJvamVjdCBUaW1lIENhcmQsIGFsc28gUENJZS4gVGhlbiB0aGVyZSYjMzk7cyBgemwzMDczeGAsIHdoaWNoIGlzIHRoYXQgTWljcm9zZW1pIFpMMzA3M3ggSTJDL1NQSSBEUExMLgoKVGhlIGltcG9ydGFudCB0aGluZyB0byBub3RlIGhlcmUgaXMgdGhhdCBub25lIG9mIHRoZXNlIGFyZSBzb2Z0d2FyZSBlbXVsYXRlZCBkcml2ZXJzLiBUaGV5IGFyZSBhbGwgaW50ZXJhY3RpbmcgZGlyZWN0bHkgd2l0aCBoYXJkd2FyZS4KCk15IGNvbmNlcm4gaXMgd2hldGhlciB0aGUgc3lzdGVtIGlzIHNldCB1cCBjb3JyZWN0bHkgZm9yIHRoZSBEUExMLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGUgYGRwbGxfcGluX2ZyZXFfc2V0YCBmdW5jdGlvbiB3aXRob3V0IGEgY29ycmVjdGx5IHJlZ2lzdGVyZWQgRFBMTCBkZXZpY2U/IFRoaXMgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCBwb2ludCBvZiBmYWlsdXJlLiBJIHNob3VsZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGRwbGxfbmV0bGluay5jYCB0byBzZWUgaG93IHRoZSBEUExMIGRldmljZSBpcyBjaGVja2VkIGFuZCByZWdpc3RlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX3Bpbl9mcmVxX3NldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTA3Nz1zdGF0aWMgaW50XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTA3ODpkcGxsX3Bpbl9mcmVxX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xMDc5LVx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTUzMD1kcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHIoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE1MzgtXHRcdGNhc2UgRFBMTF9BX1BJTl9GUkVRVUVOQ1k6XG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM6MTUzOTpcdFx0XHRyZXQgPSBkcGxsX3Bpbl9mcmVxX3NldChwaW4sIGEsIGluZm8tXHUwMDNlZXh0YWNrKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0xNTQwLVx0XHRcdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MTMzPXN0YXRpYyBib29sIGljZV9kcGxsX2lzX3Jlc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMTQyLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MTQzOiAqIGljZV9kcGxsX3Bpbl9mcmVxX3NldCAtIHNldCBwaW4mIzM5O3MgZnJlcXVlbmN5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0xNDQtICogQHBmOiBwcml2YXRlIGJvYXJkIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTE1Nz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzoxNTg6aWNlX2RwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0xNTktXHRcdCAgICAgIGVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGluX3R5cGUsIGNvbnN0IHUzMiBmcmVxLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTIxMD1pY2VfZHBsbF9mcmVxdWVuY3lfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yMjQtXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MjI1Olx0cmV0ID0gaWNlX2RwbGxfcGluX2ZyZXFfc2V0KHBmLCBwLCBwaW5fdHlwZSwgZnJlcXVlbmN5LCBleHRhY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjI2LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc0NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgY29kZSBzbmlwcGV0LCBkZWxpdmVyZWQgYXMgaWYgaXQmIzM5O3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGVjb2RpbmcgdGhlIERQTEwgUGluIFNldCBMb2dpYyoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyYCBmdW5jdGlvbi4gSSByZWNvZ25pemUgdGhhdCBvbmUuIEl0JiMzOTtzIGNsZWFybHkgYmVpbmcgY2FsbGVkIGZyb20gYGRwbGxfbmxfcGluX3NldF9kb2l0YC4gQmFzZWQgb24gdGhlIG5hbWluZywgaXQmIzM5O3MgcHJldHR5IG9idmlvdXMgdGhhdCB0aGlzIHJlbGF0ZXMgdG8gc2V0dGluZyBzb21ldGhpbmcgdXAgd2l0aCBEUExMIHBpbnMgdGhyb3VnaCBhIE5ldGxpbmsgaW50ZXJmYWNlLiBgX2Zyb21fbmxhdHRyYCBoaW50cyBhdCB0YWtpbmcgaW5mb3JtYXRpb24gcGFzc2VkIHZpYSBhIE5ldGxpbmsgYXR0cmlidXRlIGFuZCBkb2luZyBzb21ldGhpbmcgd2l0aCBpdC4gSSYjMzk7bSBndWVzc2luZyB0aGlzIGBkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHJgIGZ1bmN0aW9uIGlzIHRoZSBjb3JlIGxvZ2ljIHRoYXQgcGFyc2VzIHRob3NlIE5ldGxpbmsgYXR0cmlidXRlcyBhbmQgZmlndXJlcyBvdXQgKndoYXQqIHBpbiBzZXR0aW5ncyBhcmUgYmVpbmcgcmVxdWVzdGVkLiBBbmQgdGhlbiwgSSYjMzk7bSB3YWdlcmluZywgaXQgYXBwbGllcyB0aG9zZSBzZXR0aW5ncyB0byB0aGUgRFBMTC4gVGhlIG90aGVyIGZ1bmN0aW9uLCBgZHBsbF9ubF9waW5fc2V0X2RvaXRgLCBpcyBsaWtlbHkgdGhlIE5ldGxpbmsgaGFuZGxlciBmdW5jdGlvbiBpdHNlbGYuIEl0IHJlY2VpdmVzIHRoZSBOZXRsaW5rIG1lc3NhZ2UsIGNhbGxzIHRoZSBhdHRyaWJ1dGUtcGFyc2luZyBmdW5jdGlvbiB0byBkbyB0aGUgcmVhbCB3b3JrIGFuZCwgbGlrZWx5LCBoYW5kbGVzIGFueSBlcnJvcnMgb3Igb3RoZXIgc2V0dXAgcmVxdWlyZWQgZm9yIHRoZSBOZXRsaW5rIGNvbm5lY3Rpb24uIE92ZXJhbGwsIGl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gZm9yIHJlbW90ZWx5IGNvbmZpZ3VyaW5nIERQTEwgcGluIHNldHRpbmdzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYXR0cmlidXRlIHBhcnNpbmcgdG8gc2VlIHRoZSBkYXRhIHN0cnVjdHVyZSBpdCYjMzk7cyB1c2luZyBidXQgdGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGxfbmxfcGluX3NldF9kb2l0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYz0xNzM5PWludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTc3NS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNzc2OmludCBkcGxsX25sX3Bpbl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE3Nzcte1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25sLmM9OTI9c3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyBkcGxsX25sX29wc1tdID0ge1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTUyLVx0XHQucHJlX2RvaXRcdD0gZHBsbF9waW5fcHJlX2RvaXQsXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jOjE1MzpcdFx0LmRvaXRcdFx0PSBkcGxsX25sX3Bpbl9zZXRfZG9pdCxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTU0LVx0XHQucG9zdF9kb2l0XHQ9IGRwbGxfcGluX3Bvc3RfZG9pdCxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5oPTQyPWludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5oOjQzOmludCBkcGxsX25sX3Bpbl9zZXRfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmgtNDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTM0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IERQTEwgUHJlLURvIEl0IFByb2Nlc3MqKgoKQWxyaWdodCwgc28gdGhlIHByaW1hcnkgZnVuY3Rpb24gaGVyZSwgYmFzZWQgb24gdGhhdCBuYW1pbmcgY29udmVudGlvbiwgaXMgdGhlIHByZS1leGVjdXRpb24gb3IgaW5pdGlhbGl6YXRpb24gc3RhZ2Ugb2YgYSBEUExMIChEYXZpc+KAk1B1dG5hbeKAk0xvZ2VtYW5u4oCTTG92ZWxhbmQpIGFsZ29yaXRobSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYSAmIzM0O3Bpbi4mIzM0OyBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGBkcGxsX3Bpbl9wcmVfZG9pdGAgaXMgZ3JhYmJpbmcgdGhlIHJlbGV2YW50ICYjMzQ7cGluJiMzNDsgZGF0YS4gSSYjMzk7bSBpbmZlcnJpbmcgaXQmIzM5O3MgcHJvYmFibHkgdGhlIHBpbiB0aGF0JiMzOTtzIHRoZSBsaXRlcmFsIHBvaW50ZXIgb3IgYml0IG9mIGRhdGEuIFRoaXMgY291bGQgYmUgYSBwb2ludGVyIHRvIGEgZGF0YSBzdHJ1Y3R1cmUsIG9yIHNvbWUgSUQgcmVwcmVzZW50aW5nIGEgbGl0ZXJhbCBvciB2YXJpYWJsZSBiZWluZyBjb25zaWRlcmVkLCBkZXBlbmRpbmcgb24gaG93IHRoZSBzb2x2ZXImIzM5O3MgYXJjaGl0ZWN0ZWQuIEkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGRpc2Nlcm4gY29udGV4dCDigJMgd2hhdCBraW5kIG9mIHBpbj8gSXMgaXQgYSBkZWNpc2lvbiB2YXJpYWJsZT8gSXMgaXQgcmVsYXRlZCB0byBjbGF1c2Ugc2VsZWN0aW9uIG9yIGNvbmZsaWN0IGFuYWx5c2lzIHdpdGhpbiB0aGUgYnJhbmNoaW5nIGhldXJpc3RpYz8gVW5kZXJzdGFuZGluZyB0aGUgcGluJiMzOTtzIG5hdHVyZSBpcyBwYXJhbW91bnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcmVwcmVzZW50YXRpb24gdGhlIGNvZGUgaXMgdXNpbmcuIElzIGl0IGp1c3QgYW4gaW50ZWdlciBJRCwgb3IgYSBtb3JlIGNvbXBsZXggb2JqZWN0PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX3Bpbl9wcmVfZG9pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MjAyOD1kcGxsX3VubG9ja19kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yMDMzLVxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjIwMzQ6aW50IGRwbGxfcGluX3ByZV9kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTIwMzUtXHRcdCAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYz05Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRwbGxfbmxfb3BzW10gPSB7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYy0xMzUtXHRcdC5jbWRcdFx0PSBEUExMX0NNRF9QSU5fR0VULFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYzoxMzY6XHRcdC5wcmVfZG9pdFx0PSBkcGxsX3Bpbl9wcmVfZG9pdCxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTM3LVx0XHQuZG9pdFx0XHQ9IGRwbGxfbmxfcGluX2dldF9kb2l0LFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTUxLVx0XHQuY21kXHRcdD0gRFBMTF9DTURfUElOX1NFVCxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmM6MTUyOlx0XHQucHJlX2RvaXRcdD0gZHBsbF9waW5fcHJlX2RvaXQsXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTE1My1cdFx0LmRvaXRcdFx0PSBkcGxsX25sX3Bpbl9zZXRfZG9pdCxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5oPTIyPWludCBkcGxsX3ByZV9kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuaC0yMy1cdFx0ICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmg6MjQ6aW50IGRwbGxfcGluX3ByZV9kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuaC0yNS1cdFx0ICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzg3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipEaWdnaW5nIGludG8gYGRwbGxfcGluX3ByZV9kb2l0YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBkZWVwIGRpdmUgaW50byBgZHBsbF9waW5fcHJlX2RvaXRgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHNwZWNpZmljcyBvZiBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIG92ZXJhbGwgRFBMTCBpbXBsZW1lbnRhdGlvbiwgZXNwZWNpYWxseSBob3cgaXQgaGFuZGxlcyBwaW5uaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBtZW50YWxseSB0cmFjZSB0aGUgZGF0YSBmbG93LiBXaGF0IGFyZSB0aGUgaW5wdXRzLCB3aGF0IG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCwgYW5kIHdoYXQgYXJlIHRoZSBvdXRwdXRzPyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgY29uc3RyYWludCBkYXRhYmFzZSwgc3BlY2lmaWNhbGx5IGhvdyBwaW5uaW5nIGFmZmVjdHMgdmFyaWFibGUgYXNzaWdubWVudHMgYW5kIHByb3BhZ2F0aW9uLiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGlzIHJlbGF0ZWQgdG8gZWFybHkgY29uZmxpY3QgZGV0ZWN0aW9uIG9yIGlmIGl0JiMzOTtzIG1vcmUgYWJvdXQgc3RyYXRlZ2ljIHZhcmlhYmxlIHNlbGVjdGlvbi4gVGhlIGRldGFpbHMgbWF0dGVyOyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaWYgdGhpcyBpcyBhIGNyaXRpY2FsIHNlY3Rpb24gZm9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGFpbWluZyBmb3IgYSBob2xpc3RpYyBjb21wcmVoZW5zaW9uIG9mIGBkcGxsX3Bpbl9wcmVfZG9pdGAmIzM5O3MgZnVuY3Rpb24gYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIERQTEwgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMzQ6XHRpbnQgZHBsbF9waW5fcHJlX2RvaXQoY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsIHN0cnVjdCBza19idWZmICpza2IsXG4yMDM1Olx0XHRcdCAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4yMDM2Olx0e1xuMjAzNzpcdFx0aW50IHJldDtcbjIwMzg6XHRcbjIwMzk6XHRcdG11dGV4X2xvY2soXHUwMDI2ZHBsbF9sb2NrKTtcbjIwNDA6XHRcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERQTExfQV9QSU5fSUQpKSB7XG4yMDQxOlx0XHRcdHJldCA9IC1FSU5WQUw7XG4yMDQyOlx0XHRcdGdvdG8gdW5sb2NrX2RldjtcbjIwNDM6XHRcdH1cbjIwNDQ6XHRcdGluZm8tXHUwMDNldXNlcl9wdHJbMF0gPSB4YV9sb2FkKFx1MDAyNmRwbGxfcGluX3hhLFxuMjA0NTpcdFx0XHRcdFx0ICAgIG5sYV9nZXRfdTMyKGluZm8tXHUwMDNlYXR0cnNbRFBMTF9BX1BJTl9JRF0pKTtcbjIwNDY6XHRcdGlmICghaW5mby1cdTAwM2V1c2VyX3B0clswXSB8fFxuMjA0NzpcdFx0ICAgICFkcGxsX3Bpbl9hdmFpbGFibGUoaW5mby1cdTAwM2V1c2VyX3B0clswXSkpIHtcbjIwNDg6XHRcdFx0TkxfU0VUX0VSUl9NU0coaW5mby1cdTAwM2VleHRhY2ssIFwmIzM0O3BpbiBub3QgZm91bmRcJiMzNDspO1xuMjA0OTpcdFx0XHRyZXQgPSAtRU5PREVWO1xuMjA1MDpcdFx0XHRnb3RvIHVubG9ja19kZXY7XG4yMDUxOlx0XHR9XG4yMDUyOlx0XG4yMDUzOlx0XHRyZXR1cm4gMDtcbjIwNTQ6XHRcbjIwNTU6XHR1bmxvY2tfZGV2OlxuMjA1NjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRwbGxfbG9jayk7XG4yMDU3Olx0XHRyZXR1cm4gcmV0O1xuMjA1ODpcdH1cbjIwNTk6XHRcbjIwNjA6XHR2b2lkIGRwbGxfcGluX3Bvc3RfZG9pdChjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgKm9wcywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbjIwNjE6XHRcdFx0XHRzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuMjA2MjpcdHtcbjIwNjM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkcGxsX2xvY2spO1xuMjA2NDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxNzQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyB0aGUgRFBMTCBQaW4gQWNxdWlzaXRpb24gUHJvY2VzcyoqCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBob3cgYSBEUExMIHBpbiBpcyBiZWluZyBoYW5kbGVkLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIHJlZmVyZW5jaW5nIGBkcGxsX3Bpbl94YWAsIHdoaWNoIGltcGxpZXMgc29tZSBzb3J0IG9mIHN0b3JhZ2Ugb3IgdHJhY2tpbmcgbWVjaGFuaXNtIGZvciB0aGVzZSBwaW5zLiBNeSBmaXJzdCBxdWVzdGlvbiBpcywgJiMzNDtIb3cgYXJlIHRoZXNlIHBpbnMgZXZlbiAqZ2V0dGluZyogaW50byBgZHBsbF9waW5feGFgPyYjMzQ7IFRoYXQmIzM5O3MgdGhlIGNydXggb2YgdW5kZXJzdGFuZGluZyB0aGUgcGluIG1hbmFnZW1lbnQuCgpNeSBzdXNwaWNpb24gaXMgdGhhdCB0aGVyZSYjMzk7cyBhbiBhbGxvY2F0aW9uIHByb2Nlc3MgaGFwcGVuaW5nLiBBbmQgc3VyZSBlbm91Z2gsIGBkcGxsX3Bpbl9hbGxvY2AgaXMgcmVmZXJlbmNlZC4gTm93LCB0aGUgY29udGV4dCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGRyaXZlcnMgYXJlIHRoZSBvbmVzIGludGVyYWN0aW5nIHdpdGggdGhpcyBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBTbywgSSBuZWVkIHRvIGxvb2sgaW50byBob3cgdGhlc2UgZHJpdmVycywgYXJlIGludGVyYWN0aW5nIHdpdGggYGRwbGxfcGluX2FsbG9jYC4gVGhpcyBpcyB0aGUgY29yZSB0byB1bmRlcnN0YW5kaW5nIGhvdyBhbmQgd2hlbiBhIHBpbiBpcyBicm91Z2h0IGluLCBhbmQgdWx0aW1hdGVseSwgdGhlIGFsbG9jYXRpb24gYW5kIHVzYWdlIG1vZGVsLiBOb3csIEkgbmVlZCB0byBnZXQgaW50byB0aGUgKndoeSogb2YgdGhpcyB3aG9sZSBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX3Bpbl9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9NjM2PXN0YXRpYyBzdHJ1Y3QgZHBsbF9waW4gKlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjYzNzpkcGxsX3Bpbl9hbGxvYyh1NjQgY2xvY2tfaWQsIHUzMiBwaW5faWR4LCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNjM4LVx0ICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpwcm9wKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz03NDg9ZHBsbF9waW5fZ2V0KHU2NCBjbG9ja19pZCwgdTMyIHBpbl9pZHgsIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzY0LVx0aWYgKCFyZXQpIHtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo3NjU6XHRcdHJldCA9IGRwbGxfcGluX2FsbG9jKGNsb2NrX2lkLCBwaW5faWR4LCBtb2R1bGUsIHByb3ApO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc2Ni1cdFx0aWYgKCFJU19FUlIocmV0KSlcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTYxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyB6bDMwNzN4X2RwbGxfZGV2aWNlX29wcyA9IHtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTYyNC0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxNjI1OiAqIHpsMzA3M3hfZHBsbF9waW5fYWxsb2MgLSBhbGxvY2F0ZSBEUExMIHBpblxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE2MjYtICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTYzNT1zdGF0aWMgc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE2MzY6emwzMDczeF9kcGxsX3Bpbl9hbGxvYyhzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwsIGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcixcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xNjM3LVx0XHQgICAgICAgdTggaWQpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE2NTUtICpcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxNjU2OiAqIERlYWxsb2NhdGVzIERQTEwgcGluIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ5IEB6bDMwNzN4X2RwbGxfcGluX2FsbG9jLlxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE2NTctICovXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE4Njc9emwzMDczeF9kcGxsX25jb19waW5fcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xODg4LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE4ODk6XHRwaW4gPSB6bDMwNzN4X2RwbGxfcGluX2FsbG9jKHpsZHBsbCwgRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVULFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE4OTAtXHRcdFx0XHQgICAgIFpMMzA3M1hfTkNPX1BJTl9JRCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE5MzA9emwzMDczeF9kcGxsX3BpbnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTUxLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE5NTI6XHRcdHBpbiA9IHpsMzA3M3hfZHBsbF9waW5fYWxsb2MoemxkcGxsLCBkaXIsIGlkKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTUzLVx0XHRpZiAoSVNfRVJSKHBpbikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0OTAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOgoKKipEZWJ1Z2dpbmcgUGluIEFsbG9jYXRpb24gaW4gdGhlIERQTEwgU3lzdGVtKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGBkcGxsX3Bpbl9nZXRgLiBTbywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yICphbGxvY2F0aW5nKiBhIHBpbiB3aXRoaW4gdGhlIERQTEwgKERpZ2l0YWwgUGhhc2UtTG9ja2VkIExvb3ApIHN5c3RlbS4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgdGhlIHJlYWwgcXVlc3Rpb24sIHRoZSBvbmUgdGhhdCYjMzk7cyBpbW1lZGlhdGVseSBqdW1waW5nIG91dCBhdCBtZSwgaXM6ICoqV2hvIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbj8qKiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHBhdGggdG8gYGRwbGxfcGluX2dldGAgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byBncmFzcGluZyB0aGUgYnJvYWRlciBwaWN0dXJlIGFuZCBwb3RlbnRpYWxseSBwaW5wb2ludGluZyBhbnkgaXNzdWVzLiBJcyBpdCB0aGUgZHJpdmVyIGl0c2VsZiBpbml0aWF0aW5nIHRoZSBhbGxvY2F0aW9uIG9uIHN0YXJ0dXA/IElzIGl0IHRyaWdnZXJlZCBieSBhIHVzZXItc3BhY2UgcmVxdWVzdCB0aHJvdWdoIHNvbWUgaW9jdGw/IElzIGl0IHBhcnQgb2YgYSByZXNvdXJjZSBtYW5hZ2VtZW50IGZyYW1ld29yaz8gS25vd2luZyB0aGUgY2FsbGVyIGdpdmVzIG1lIHRoZSBjb250ZXh0LCB0aGUgaW50ZW50LiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBkcGxsX3Bpbl9nZXRgIGFuZCBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgYWxsb2NhdGlvbiByZXF1ZXN0IGlzIG9yaWdpbmF0aW5nLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHByb2JsZW0gaXMsIGJlY2F1c2UgYWxsb2NhdGluZyB0aGUgcGluIGl0c2VsZiBpcyB0cml2aWFsIGFuZCBJIHdvdWxkIG5vdCBiZSBjb25jZXJuZWQgaWYgdGhhdCB3YXMgdGhlIG9ubHkgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGxfcGluX2dldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q9NTcyPW9wcyBhbmQgcHJpdi5cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC01NzMtXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NTc0OlRoZSBwaW5zIGFyZSBhbGxvY2F0ZWQgc2VwYXJhdGVseSB3aXRoIGRwbGxfcGluX2dldCgpLCBpdCB3b3Jrc1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTU3NS1zaW1pbGFybHkgdG8gZHBsbF9kZXZpY2VfZ2V0KCkuIEZ1bmN0aW9uIGZpcnN0IGNyZWF0ZXMgb2JqZWN0IGFuZCB0aGVuXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTYzND1UaGUgcmVnaXN0cmF0aW9uIHBhcnQgaXMgdGhlbiBsb29rcyBsaWtlIHRoaXMgcGFydDpcbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QtNjUwLSAgICAgICAgZm9yIChpID0gMDsgaSBcdTAwM2MgT0NQX1NNQV9OVU07IGkmIzQzOyYjNDM7KSB7XG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NjUxOiAgICAgICAgICAgICAgICBicC1cdTAwM2VzbWFbaV0uZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xraWQsIGksIFRISVNfTU9EVUxFLCBcdTAwMjZicC1cdTAwM2VzbWFbaV0uZHBsbF9wcm9wKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC02NTItICAgICAgICAgICAgICAgIGlmIChJU19FUlIoYnAtXHUwMDNlc21hW2ldLmRwbGxfcGluKSkge1xuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz03Mjk9RVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9kcGxsX25vdGlmaWVyKTtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzMxLS8qKlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjczMjogKiBkcGxsX3Bpbl9nZXQgLSBmaW5kIGV4aXN0aW5nIG9yIGNyZWF0ZSBuZXcgZHBsbCBwaW5cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy03MzMtICogQGNsb2NrX2lkOiBjbG9ja19pZCBvZiBjcmVhdG9yXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTc0Nz1zdHJ1Y3QgZHBsbF9waW4gKlxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjc0ODpkcGxsX3Bpbl9nZXQodTY0IGNsb2NrX2lkLCB1MzIgcGluX2lkeCwgc3RydWN0IG1vZHVsZSAqbW9kdWxlLFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc0OS1cdCAgICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX3Byb3BlcnRpZXMgKnByb3AsIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzcyLX1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo3NzM6RVhQT1JUX1NZTUJPTF9HUEwoZHBsbF9waW5fZ2V0KTtcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy03NzQtXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYz01OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHBsbF9waW5faWRfZ2V0X25sX3BvbGljeVtEUExMX0FfUElOX1RZUEUgJiM0MzsgMV0gPSB7XG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYy02Ny0vKiBEUExMX0NNRF9QSU5fR0VUIC0gZG8gKi9cbmRyaXZlcnMvZHBsbC9kcGxsX25sLmM6Njg6c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRwbGxfcGluX2dldF9kb19ubF9wb2xpY3lbRFBMTF9BX1BJTl9JRCAmIzQzOyAxXSA9IHtcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtNjktXHRbRFBMTF9BX1BJTl9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTcyLS8qIERQTExfQ01EX1BJTl9HRVQgLSBkdW1wICovXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jOjczOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkcGxsX3Bpbl9nZXRfZHVtcF9ubF9wb2xpY3lbRFBMTF9BX1BJTl9JRCAmIzQzOyAxXSA9IHtcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtNzQtXHRbRFBMTF9BX1BJTl9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jPTkyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHBsbF9ubF9vcHNbXSA9IHtcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTEzOC1cdFx0LnBvc3RfZG9pdFx0PSBkcGxsX3Bpbl9wb3N0X2RvaXQsXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jOjEzOTpcdFx0LnBvbGljeVx0XHQ9IGRwbGxfcGluX2dldF9kb19ubF9wb2xpY3ksXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTE0MC1cdFx0Lm1heGF0dHJcdD0gRFBMTF9BX1BJTl9JRCxcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTE0NS1cdFx0LmR1bXBpdFx0XHQ9IGRwbGxfbmxfcGluX2dldF9kdW1waXQsXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jOjE0NjpcdFx0LnBvbGljeVx0XHQ9IGRwbGxfcGluX2dldF9kdW1wX25sX3BvbGljeSxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTQ3LVx0XHQubWF4YXR0clx0PSBEUExMX0FfUElOX0lELFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xMTk9c3RhdGljIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxMjA6emwzMDczeF9kcGxsX3Bpbl9nZXRfYnlfcmVmKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgdTggcmVmX2lkKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEyMS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTExNjE9emwzMDczeF9kcGxsX25jb19waW5fc3RhdGVfb25fZHBsbF9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3Bpbixcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTE5Mi1cdFx0XHRyZWYgPSB6bDMwNzN4X2NoYW5fcmVmX2dldChcdTAwMjZjaGFuKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxMTkzOlx0XHRcdHJlZl9waW4gPSB6bDMwNzN4X2RwbGxfcGluX2dldF9ieV9yZWYoemxkcGxsLCByZWYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTExOTQtXHRcdH1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTQyMT16bDMwNzN4X2RwbGxfbW9kZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCB2b2lkICpkcGxsX3ByaXYsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE0NjItXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTQ2MzpcdFx0XHRwaW4gPSB6bDMwNzN4X2RwbGxfcGluX2dldF9ieV9yZWYoemxkcGxsLCByZWYpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE0NjQtXHRcdFx0aWYgKHBpbikge1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xNjc2PXpsMzA3M3hfZHBsbF9waW5fcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbF9waW4gKnBpbiwgdTMyIGluZGV4KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xNzA5LVx0LyogQ3JlYXRlIG9yIGdldCBleGlzdGluZyBEUExMIHBpbiAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE3MTA6XHRwaW4tXHUwMDNlZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoemxkcGxsLVx1MDAzZWRldi1cdTAwM2VjbG9ja19pZCwgaW5kZXgsIFRISVNfTU9EVUxFLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE3MTEtXHRcdFx0XHQgICAgIFx1MDAyNnByb3BzLVx1MDAzZWRwbGxfcHJvcHMsIFx1MDAyNnBpbi1cdTAwM2V0cmFja2VyKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTg2Nz16bDMwNzN4X2RwbGxfbmNvX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE4OTMtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTg5NDpcdHBpbi1cdTAwM2VkcGxsX3BpbiA9IGRwbGxfcGluX2dldCh6bGRwbGwtXHUwMDNlZGV2LVx1MDAzZWNsb2NrX2lkLCBaTDMwNzNYX05DT19QSU5fSUQsXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTg5NS1cdFx0XHRcdCAgICAgVEhJU19NT0RVTEUsIFx1MDAyNnpsMzA3M3hfZHBsbF9uY29fcGluX3Byb3BzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTI0NzM9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MjQ3NDppY2VfZHBsbF9waW5fZ2V0X3BhcmVudF9udW0oc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjQ3NS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IGRwbGxfcGluICpwYXJlbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MjQ4Nj1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzoyNDg3OmljZV9kcGxsX3Bpbl9nZXRfcGFyZW50X2lkeChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNDg4LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBhcmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTI0ODkte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MjQ5MDpcdGludCBudW0gPSBpY2VfZHBsbF9waW5fZ2V0X3BhcmVudF9udW0ocGluLCBwYXJlbnQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjQ5MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz0yNTEyPWljZV9kcGxsX3JjbGtfc3RhdGVfb25fcGluX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjUzMC1cdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzoyNTMxOlx0aHdfaWR4ID0gaWNlX2RwbGxfcGluX2dldF9wYXJlbnRfaWR4KHAsIHBhcmVudF9waW4pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjUzMi1cdGlmIChod19pZHggXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjU0Mi1cdFx0XHRcdCAgIHAtXHUwMDNlaWR4LCBzdGF0ZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjI1NDM6XHRcdFx0XHQgICBpY2VfZHBsbF9waW5fZ2V0X3BhcmVudF9udW0ocCwgcGFyZW50X3BpbikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjU0NC1cdFx0Z290byB1bmxvY2s7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjU1Ny1cdFx0XHRcdCAgIHN0YXRlLCBwLVx1MDAzZWlkeCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjI1NTg6XHRcdFx0XHQgICBpY2VfZHBsbF9waW5fZ2V0X3BhcmVudF9udW0ocCwgcGFyZW50X3BpbikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjU1OS11bmxvY2s6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MjU4Mj1pY2VfZHBsbF9yY2xrX3N0YXRlX29uX3Bpbl9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTI1OTYtXHRtdXRleF9sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MjU5NzpcdGh3X2lkeCA9IGljZV9kcGxsX3Bpbl9nZXRfcGFyZW50X2lkeChwLCBwYXJlbnRfcGluKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTI1OTgtXHRpZiAoaHdfaWR4IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTMzMDQ9aWNlX2RwbGxfZ2V0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbnMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzMxMy1cdFx0XHRwaW5faW5kZXggJiM0Mzs9IGk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzozMzE0Olx0XHRwaW5zW2ldLnBpbiA9IGRwbGxfcGluX2dldChjbG9ja19pZCwgcGluX2luZGV4LCBUSElTX01PRFVMRSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTMzMTUtXHRcdFx0XHRcdCAgIFx1MDAyNnBpbnNbaV0ucHJvcCwgXHUwMDI2cGluc1tpXS50cmFja2VyKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jPTQyMD1zdGF0aWMgaW50IG1seDVfZHBsbF9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYWRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jLTQ1Ny1cdC8qIE11bHRpcGxlIG1kZXYgaW5zdGFuY2VzIG1pZ2h0IHNoYXJlIG9uZSBEUExMIHBpbi4gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmM6NDU4Olx0bWRwbGwtXHUwMDNlZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xvY2tfaWQsIG1seDVfZ2V0X2Rldl9pbmRleChtZGV2KSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmMtNDU5LVx0XHRcdFx0ICAgICAgIFRISVNfTU9EVUxFLCBcdTAwMjZtbHg1X2RwbGxfcGluX3Byb3BlcnRpZXMsXG4tLVxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTUwNTk9cHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTI5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgT0NQX1NNQV9OVU07IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTEzMDpcdFx0YnAtXHUwMDNlc21hW2ldLmRwbGxfcGluID0gZHBsbF9waW5fZ2V0KGNsa2lkLCBpLCBUSElTX01PRFVMRSxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTMxLVx0XHRcdFx0XHRcdCAgIFx1MDAyNmJwLVx1MDAzZXNtYVtpXS5kcGxsX3Byb3AsXG4tLVxuaW5jbHVkZS9saW51eC9kcGxsLmg9MjkwPXN0cnVjdCBkcGxsX3BpbiAqXG5pbmNsdWRlL2xpbnV4L2RwbGwuaDoyOTE6ZHBsbF9waW5fZ2V0KHU2NCBjbG9ja19pZCwgdTMyIGRldl9kcml2ZXJfaWQsIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSxcbmluY2x1ZGUvbGludXgvZHBsbC5oLTI5Mi1cdCAgICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX3Byb3BlcnRpZXMgKnByb3AsIGRwbGxfdHJhY2tlciAqdHJhY2tlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDQ2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IERQTEwgUGluIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gYGRwbGxfcGluX2dldGAgaXMgdGhlIGtleS4gSXQmIzM5O3MgY2FsbGVkIGJ5IHRoZSBgemwzMDczeGAsIGBpY2VgLCBgbWx4NWAsIGFuZCBgcHRwX29jcGAgZHJpdmVycy4gIElmIG5vbmUgb2YgdGhlc2UgYXJlIGxvYWRlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB0aGVuIHRoZXJlIGFyZSBubyBEUExMIHBpbnMgcmVnaXN0ZXJlZCwgd2hpY2ggbGVhZHMgdG8gYGRwbGxfcGluX3ByZV9kb2l0YCBmYWlsaW5nIHdpdGggYC1FTk9ERVZgIGJlY2F1c2UgYHhhX2xvYWRgIHJldHVybnMgTlVMTC4gVGhhdCBtYWtlcyBzZW5zZS4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIHBvcHMgdXA6IGNhbiBJIGNyZWF0ZSBhIERQTEwgcGluIGZyb20gdXNlcnNwYWNlIHNvbWVob3c/IE5vLCB0aGF0JiMzOTtzIGJsb2NrZWQuIGBkcGxsX3Bpbl9hbGxvY2AgaXMgb25seSBldmVyIHRyaWdnZXJlZCB0aHJvdWdoIGBkcGxsX3Bpbl9nZXRgLCBhbmQgdGhhdCBvbmx5IGhhcHBlbnMgd2l0aGluIHRob3NlIGRyaXZlcnMuIFRoYXQgYXZlbnVlIGlzIGNsb3NlZC4KCkFscmlnaHQsIHdoYXQgYWJvdXQgbG9hZGluZyBgemwzMDczeGAgaW4gUUVNVT8gSXQmIzM5O3MgYW4gSTJDL1NQSSBkcml2ZXIsIHdoaWNoIG9wZW5zIHBvc3NpYmlsaXRpZXMuIElmIEkgdXNlIGBpMmMtc3R1YmAgb3IgYGkyYy1kdW1teWAsIGNvdWxkIEkgaW5zdGFudGlhdGUgYHpsMzA3M3hgPyBZZXMhIEkgY2FuIHdyaXRlIHRvIGAvc3lzL2J1cy9pMmMvZGV2aWNlcy9pMmMtMC9uZXdfZGV2aWNlYCB3aXRoIGB6bDMwNzMxIDB4MjBgLiBUaGUgSTJDIGNvcmUgd2lsbCB0aGVuIGNyZWF0ZSBhbiBJMkMgY2xpZW50IGFuZCBjYWxsIGB6bDMwNzN4X2kyY19wcm9iZWAuIFRoYXQsIGluIHR1cm4sIHNob3VsZCBjYWxsIGB6bDMwNzN4X2Rldl9wcm9iZWAuCgpMZXQmIzM5O3Mgc2VlOiBgemwzMDczeF9kZXZfcHJvYmVgIHdpbGwgYXR0ZW1wdCB0byByZWFkIGEgY2hpcCBJRDogYHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCAmYW1wO2lkKTtgLiAgYHpsMzA3M3hfcmVhZF91MTZgIHBlcmZvcm1zIGFuIEkyQyByZWFkLgoKT2theSwgbm93IGl0IGNsaWNrcy4gSWYgSSB1c2UgYGkyYy1zdHViYCwgaXQgKmNhbiogc2ltdWxhdGUgSTJDIHJlYWRzLiBIb3dldmVyLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlc2lnbmVkIHRvIHNpbXVsYXRlIHNwZWNpZmljIGNoaXBzIG9yIGFjdCBhcyBhIG1lbW9yeSBhcnJheS4gV2FpdCEgIEl0IGFjdHMgYXMgYSBtZW1vcnkgYXJyYXkhICBUaGlzIGlzIHBlcmZlY3QhIEkgY2FuIHdyaXRlIHZhbHVlcyB0byBpdHMgJiMzNDtyZWdpc3RlcnMmIzM0OyB2aWEgc3lzZnMgb3IgSTJDIHdyaXRlcyAqYmVmb3JlKiBwcm9iaW5nIHRoZSBkcml2ZXIuIEJyaWxsaWFudCEKCkhtbSwgYSBxdWljayBjaGVja+KApiBpcyBpdCAxNi1iaXQgcmVnaXN0ZXJzPyBXYWl0Li4uYHpsMzA3M3hgIHVzZXMgMzItYml0IHJlZ2lzdGVycz8gTGV0JiMzOTtzIGNoZWNrIGB6bDMwNzN4X3JlYWRfdTE2YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9yZWFkX3UxNiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9MTc5PWludCB6bDMwNzN4X3dyaXRlX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU4IHZhbClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTg0LS8qKlxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjE4NTogKiB6bDMwNzN4X3JlYWRfdTE2IC0gcmVhZCB2YWx1ZSBmcm9tIDE2Yml0IHJlZ2lzdGVyXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTg2LSAqIEB6bGRldjogemwzMDczeCBkZXZpY2UgcG9pbnRlclxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xOTMtICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTk0OmludCB6bDMwNzN4X3JlYWRfdTE2KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHUxNiAqdmFsKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTE5NS17XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jPTk4MT1pbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTg4LVx0LyogUmVhZCBjaGlwIElEICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTg5Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFx1MDAyNmlkKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTAtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDUtXHQvKiBSZWFkIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjdXN0b20gY29uZmlnIHZlcnNpb24gKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDA2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFx1MDAyNnJldmlzaW9uKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDA3LVx0aWYgKHJjKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDgtXHRcdHJldHVybiByYztcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDA5Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfRldfVkVSLCBcdTAwMjZmd192ZXIpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMTAtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oPTEzOT1pbnQgemwzMDczeF9yZWFkX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU4ICp2YWwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oOjE0MDppbnQgemwzMDczeF9yZWFkX3UxNihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MTYgKnZhbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmgtMTQxLWludCB6bDMwNzN4X3JlYWRfdTMyKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHUzMiAqdmFsKTtcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM9MjU9emwzMDczeF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLCBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy0zMy1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYzozNDpcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcdTAwMjZpZCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtMzUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jLTQ0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jOjQ1Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFx1MDAyNnJldmlzaW9uKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy00Ni1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtNTUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM6NTY6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19GV19WRVIsIFx1MDAyNmZ3X3Zlcik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtNTctXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTEyNTU9emwzMDczeF9kcGxsX3RlbXBfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBsbF9wcml2LFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xMjY0LVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEyNjU6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19ESUVfVEVNUF9TVEFUVVMsIFx1MDAyNnZhbCk7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTI2Ni1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYz03OT1pbnQgemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE1LVx0LyogUmVhZCBmcmVxdWVuY3kgcmVsYXRlZCByZWdpc3RlcnMgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jOjExNjpcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFRl9GUkVRX0JBU0UsIFx1MDAyNnJlZi1cdTAwM2VmcmVxX2Jhc2UpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE3LVx0aWYgKHJjKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTE4LVx0XHRyZXR1cm4gcmM7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYzoxMTk6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRUZfRlJFUV9NVUxULCBcdTAwMjZyZWYtXHUwMDNlZnJlcV9tdWx0KTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTEyMC1cdGlmIChyYylcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTEyMS1cdFx0cmV0dXJuIHJjO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmM6MTIyOlx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVGX1JBVElPX00sIFx1MDAyNnJlZi1cdTAwM2VmcmVxX3JhdGlvX20pO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTIzLVx0aWYgKHJjKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTI0LVx0XHRyZXR1cm4gcmM7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYzoxMjU6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRUZfUkFUSU9fTiwgXHUwMDI2cmVmLVx1MDAzZWZyZXFfcmF0aW9fbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMjYtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYz0yMz1pbnQgemwzMDczeF9zeW50aF9zdGF0ZV9mZXRjaChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1OCBpbmRleClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTQ1LVx0ICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jOjQ2Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfU1lOVEhfRlJFUV9CQVNFLCBcdTAwMjZzeW50aC1cdTAwM2VmcmVxX2Jhc2UpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYy00Ny1cdGlmIChyYylcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTUzLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYzo1NDpcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1NZTlRIX0ZSRVFfTSwgXHUwMDI2c3ludGgtXHUwMDNlZnJlcV9tKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNTUtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYy01Ny1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmM6NTg6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19TWU5USF9GUkVRX04sIFx1MDAyNnN5bnRoLVx1MDAzZWZyZXFfbik7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jLTU5LVx0aWYgKHJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjg2OAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEZWNvZGluZyB0aGUgYHpsMzA3M3hfcmVhZF91MTZgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGB6bDMwNzN4X3JlYWRfdTE2YCBmdW5jdGlvbi4gSXQgYXBwZWFycyB0byBiZSByZWFkaW5nIGEgMTYtYml0IHZhbHVlIGZyb20gdGhlIGB6bGRldi0mZ3Q7cmVnbWFwYC4gUmlnaHQsIHRoZSBgcmVnbWFwYCBpcyB0aGUga2V5IGFic3RyYWN0aW9uIGhlcmUsIGxpa2VseSBwcm92aWRpbmcgYSBsYXllciBvZiBpbmRpcmVjdGlvbiBmb3IgcmVnaXN0ZXIgYWNjZXNzLCBwcm9iYWJseSB2aWEgSTJDLCBTUEkgb3Igd2hhdGV2ZXIuIElmIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggYSBkdW1teSBJMkMgZGV2aWNlLCB0aGUgYHJlZ21hcGAgd2lsbCwgYXMgZXhwZWN0ZWQsIGp1c3QgcmV0dXJuIGEgemVybyBvciB3aGF0ZXZlciBkYXRhIHdlIHByZXZpb3VzbHkgd3JvdGUuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGludGVycHJldGluZyByZWFkIG9wZXJhdGlvbnMuIEFoLCBidXQgd2FpdCBhIHNlY29uZCwgSSByZWNhbGwgdGhhdCBgemwzMDczeF9jaGlwX2lkc2AgaXMgaG93IHdlIGlkZW50aWZ5IHRoZSBjaGlwcyB3ZSBleHBlY3QgdG8gZW5jb3VudGVyLiBUaGUgZGV2aWNlIGlkZW50aWZpY2F0aW9uIGlzIGRvbmUgd2l0aCBzcGVjaWZpYyBJRHMuIFJpZ2h0LiBUaGF0IGNsYXJpZmllcyB0aGUgbmV4dCBzdGVwcyBpbiBkZWJ1Zy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7emwzMDczeF9jaGlwX2lkcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMjUtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MjY6c3RhdGljIGNvbnN0IHN0cnVjdCB6bDMwNzN4X2NoaXBfaW5mbyB6bDMwNzN4X2NoaXBfaWRzW10gPSB7XG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMjctXHRaTF9DSElQX0lORk8oMHgwRTMwLCAyLCBaTDMwNzNYX0ZMQUdfUkVGX1BIQVNFX0NPTVBfMzIpLFxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05ODE9aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk5My1cdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5OTQ6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk5NTpcdFx0aWYgKHpsMzA3M3hfY2hpcF9pZHNbaV0uaWQgPT0gaWQpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk2LVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTgtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTk5Olx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xMDAwLVx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cdTAwM2VkZXYsIC1FTk9ERVYsXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDItXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTAwMzpcdHpsZGV2LVx1MDAzZWluZm8gPSBcdTAwMjZ6bDMwNzN4X2NoaXBfaWRzW2ldO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNzE3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgUHJvYmUgRmFpbHVyZXMgaW4gU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBkZXZpY2UgSURzLCBsaWtlIGAweDBFMzBgLCBhbmQgdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBzaW11bGF0ZSB0aGVzZSBkZXZpY2VzIHdpdGhpbiBTeXprYWxsZXIuIElmIEkgdXNlIGBpMmMtc3R1YmAsIEkgY2FuIGxvYWQgaXQgd2l0aCBzb21ldGhpbmcgbGlrZSBgbW9kcHJvYmUgaTJjLXN0dWIgY2hpcF9hZGRyPTB4MjBgLiBUaGVuLCBJJiMzOTtkIHdyaXRlIHRoZSBhcHByb3ByaWF0ZSBkYXRhIHRvIHRoZSByZWdpc3RlcnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWdpc3RlciBvZmZzZXRzIHRob3VnaCwgbGlrZSB3cml0aW5nIGAweDMwYCB0byBgWkxfUkVHX0lEYCBhbmQgYDB4MEVgIHRvIGBaTF9SRUdfSUQmIzQzOzFgLiBUaGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCBgaTJjLXN0dWJgIGRvZXMgU01CdXMgYnl0ZS93b3JkIGRhdGEsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgYHJlZ21hcGAgaW50ZXJhY3RzLiBJdCBzZWVtcyBsaWtlIGByZWdtYXBgIGRvZXMgU01CdXMgb3IgcmF3IEkyQyB0cmFuc2ZlcnMgb3ZlciBJMkMuCgpUaGUgcHJvYmxlbSBpcywgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhbmRsZSB0aGlzIGtpbmQgb2Ygc2V0dXA7IGl0IGp1c3QgYmxhc3RzIG91dCByYW5kb20gc3lzY2FsbHMuIEl0IGNhbiYjMzk7dCBjb25maWd1cmUgYGkyYy1zdHViYCB0byBwcmV0ZW5kIGl0JiMzOTtzIGEgc3BlY2lmaWMgY2hpcCB3aXRoIGEgcGFydGljdWxhciBJRC4gU28sIGluIHRoZSBjYXNlIG9mIGB6bDMwNzN4YCwgaXQmIzM5O3MganVzdCBuZXZlciBnb2luZyB0byBwcm9iZSBzdWNjZXNzZnVsbHkgaW4gYSBTeXprYWxsZXIgZW52aXJvbm1lbnQuCgpMZXQmIzM5O3MgdGhpbmsgYWJvdXQgYWx0ZXJuYXRpdmVzLiBgaWNlYCBpcyBvdXQ7IGl0JiMzOTtzIGEgUENJIGRyaXZlciBmb3IgSW50ZWwgRTgwMCwgYW5kIFN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGdvb2QgUUVNVSBlbXVsYXRpb24gZm9yIHRoYXQgaGFyZHdhcmUuIFNhbWUgd2l0aCBgbWx4NWAgKE1lbGxhbm94IENvbm5lY3RYLTUpIGFuZCBgcHRwX29jcGAgKE9wZW4gQ29tcHV0ZSBQcm9qZWN0IFRpbWUgQ2FyZCkuIE5vIFFFTVUgZW11bGF0aW9uIGZvciBhbnkgb2YgdGhvc2UgaW4gU3l6a2FsbGVyIGVpdGhlci4KCldhaXQgYSBtaW51dGUsIG1heWJlIHRoZXJlJiMzOTtzIGEgRFBMTCAoRGlnaXRhbCBQaGFzZS1Mb2NrZWQgTG9vcCkgaW4gYG5ldGRldnNpbWA/IExldCBtZSBjaGVjayB0byBzZWUgaWYgdGhhdCYjMzk7cyBhIHBvc3NpYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcGxsX2RldmljZV9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q9NTY4PURldmljZSBzaG91bGQgaW1wbGVtZW50IHNldCBvZiBvcGVyYXRpb25zIGFuZCByZWdpc3RlciBkZXZpY2UgdmlhXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NTY5OmRwbGxfZGV2aWNlX3JlZ2lzdGVyKCkgYXQgd2hpY2ggcG9pbnQgaXQgYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QtNTcwLXVzZXJzLiBNdWx0aXBsZSBkcml2ZXIgaW5zdGFuY2VzIGNhbiBvYnRhaW4gcmVmZXJlbmNlIHRvIGl0IHdpdGhcbi0tXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q9NjM0PVRoZSByZWdpc3RyYXRpb24gcGFydCBpcyB0aGVuIGxvb2tzIGxpa2UgdGhpcyBwYXJ0OlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC02NDUtXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NjQ2OiAgICAgICAgZXJyID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoYnAtXHUwMDNlZHBsbCwgRFBMTF9UWVBFX1BQUywgXHUwMDI2ZHBsbF9vcHMsIGJwKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC02NDctICAgICAgICBpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz00NDg9ZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpbmQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxuLS1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjAtLyoqXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDYxOiAqIGRwbGxfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgdGhlIGRwbGwgZGV2aWNlIGluIHRoZSBzdWJzeXN0ZW1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjItICogQGRwbGw6IHBvaW50ZXIgdG8gYSBkcGxsXG4tLVxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3My0gKi9cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NzQ6aW50IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZW51bSBkcGxsX3R5cGUgdHlwZSxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NzUtXHRcdFx0IGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKm9wcywgdm9pZCAqcHJpdilcbi0tXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTE3LX1cbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MTg6RVhQT1JUX1NZTUJPTF9HUEwoZHBsbF9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUxOS1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTkzMD16bDMwNzN4X2RwbGxfcGluc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE5ODAtLyoqXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTk4MTogKiB6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2VcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTgyLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xOTg4PXN0YXRpYyBpbnRcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxOTg5OnpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE5OTAte1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDA3LVx0emxkcGxsLVx1MDAzZXR5cGUgPSB6bDMwNzN4X3Byb3BfZHBsbF90eXBlX2dldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyMDA4Olx0cmMgPSBkcGxsX2RldmljZV9yZWdpc3Rlcih6bGRwbGwtXHUwMDNlZHBsbF9kZXYsIHpsZHBsbC1cdTAwM2V0eXBlLFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMDktXHRcdFx0XHQgIFx1MDAyNnpsZHBsbC1cdTAwM2VvcHMsIHpsZHBsbCk7XG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMjItICogVW5yZWdpc3RlcnMgZ2l2ZW4gRFBMTCBkZXZpY2UgZnJvbSBEUExMIHN1Yi1zeXN0ZW0gcHJldmlvdXNseSByZWdpc3RlcmVkXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjAyMzogKiBieSBAemwzMDczeF9kcGxsX2RldmljZV9yZWdpc3Rlci5cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDI0LSAqL1xuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0yNDQ4PXpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0NTEtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjQ1MjpcdHJjID0gemwzMDczeF9kcGxsX2RldmljZV9yZWdpc3Rlcih6bGRwbGwpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0NTMtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9NDE5ND1pY2VfZHBsbF9pbml0X2RwbGwoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbCAqZCwgYm9vbCBjZ3UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIxNS1cdFx0XHRpY2VfZHBsbF91cGRhdGVfc3RhdGUocGYsIGQsIHRydWUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDIxNjpcdFx0cmV0ID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoZC1cdTAwM2VkcGxsLCB0eXBlLCBvcHMsIGQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIxNy1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmM9NDIwPXN0YXRpYyBpbnQgbWx4NV9kcGxsX3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmMtNDUxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYzo0NTI6XHRlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihtZHBsbC1cdTAwM2VkcGxsLCBEUExMX1RZUEVfRUVDLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYy00NTMtXHRcdFx0XHQgICBcdTAwMjZtbHg1X2RwbGxfZGV2aWNlX29wcywgbWRwbGwpO1xuLS1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz01MDU5PXB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTEyNC1cbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1MTI1Olx0ZXJyID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoYnAtXHUwMDNlZHBsbCwgRFBMTF9UWVBFX1BQUywgXHUwMDI2ZHBsbF9vcHMsIGJwKTtcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTI2LVx0aWYgKGVycilcbi0tXG5pbmNsdWRlL2xpbnV4L2RwbGwuaD0yODA9dm9pZCBkcGxsX2RldmljZV9wdXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpO1xuaW5jbHVkZS9saW51eC9kcGxsLmgtMjgxLVxuaW5jbHVkZS9saW51eC9kcGxsLmg6MjgyOmludCBkcGxsX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGVudW0gZHBsbF90eXBlIHR5cGUsXG5pbmNsdWRlL2xpbnV4L2RwbGwuaC0yODMtXHRcdFx0IGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKm9wcywgdm9pZCAqcHJpdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MzMyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRQTEwgRGV2aWNlIFJlZ2lzdHJhdGlvbiBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgRFBMTCBkZXZpY2VzIGFyZSBoYW5kbGVkLCBhbmQgaXQgc2VlbXMgbGlrZSBgbmV0ZGV2c2ltYCBpc24mIzM5O3QgcmVnaXN0ZXJpbmcgYW55LiBUaGlzIGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmcg4oCTIERQTEwgZGV2aWNlcyBhcmUgKm9ubHkqIHJlZ2lzdGVyZWQgYnkgdGhlIGhhcmR3YXJlIGRyaXZlcnMgZm9yIHBoeXNpY2FsIGRldmljZXMuCgpOb3csIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICpwb3NzaWJseSogaGl0IGBkcGxsX3Bpbl9mcmVxX3NldGAgd2l0aG91dCBoYXZpbmcgYW55IGFjdHVhbCBEUExMIGRldmljZXMgcHJlc2VudD8gTm8sIHRoYXQmIzM5O3Mgbm90IHBvc3NpYmxlLiBgZHBsbF9waW5fZnJlcV9zZXRgIGlzIGNhbGxlZCBieSBgZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyYCwgYW5kIHRoYXQgY29tZXMgZnJvbSBgZHBsbF9ubF9waW5fc2V0X2RvaXRgLiBCdXQgYGRwbGxfbmxfcGluX3NldF9kb2l0YCByZWxpZXMgb24gYGRwbGxfcGluX3ByZV9kb2l0YCBmaW5kaW5nIGEgcGluIGluIGBkcGxsX3Bpbl94YWAuCgpBbmQgaG93IGRvZXMgYSBwaW4gZXZlbiAqZ2V0KiBpbnRvIGBkcGxsX3Bpbl94YWA/IEl0JiMzOTtzIGFsbCBtYW5hZ2VkIGJ5IGBkcGxsX3Bpbl9hbGxvY2AsIHdoaWNoIGlzICpvbmx5KiBjYWxsZWQgYnkgYGRwbGxfcGluX2dldGAuIENyaXRpY2FsbHksIGBkcGxsX3Bpbl9nZXRgIGlzIGl0c2VsZiBvbmx5IGNhbGxlZCBieSB0aGUgYWZvcmVtZW50aW9uZWQgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycy4KClNvLCBpbiBhIHZpcnR1YWxpemVkIHNldHVwIGxpa2UgUUVNVSBvciBHQ0UsIHdpdGhvdXQgdGhvc2Ugc3BlY2lmaWMgUENJZSBvciBJMkMgZGV2aWNlcywgdGhlcmUmIzM5O3Mgbm8gcGF0aCB0byByZWdpc3RlcmluZyBEUExMIHBpbnMuIFRoaXMgbWVhbnMgYGRwbGxfcGluX3ByZV9kb2l0YCB3aWxsICphbHdheXMqIGZhaWwgd2l0aCBhbiBgLUVOT0RFVmAgZXJyb3IuIFRoZXJlZm9yZSwgYGRwbGxfcGluX2ZyZXFfc2V0YCB3aWxsIG5ldmVyIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50LgoKTm93LCBhIGJpdCBvZiBhIHRhbmdlbnQuIFdoYXQgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGB6bDMwNzN4YCB3b3JraW5nIHdpdGggYGkyYy1zdHViYD8gSXQmIzM5O3Mgd29ydGggY29uc2lkZXJpbmcuIExldCYjMzk7cyBzZWUgaWYgYHpsMzA3M3hfcmVhZF91MTZgIHdpbGwgc3VjY2VlZCB3aXRoIGBpMmMtc3R1YmAuCgpJZiBJIGxvYWQgYGkyYy1zdHViYCB3aXRoIHRoZSBgY2hpcF9hZGRyPTB4MjBgIHBhcmFtZXRlciwgaXQgY3JlYXRlcyBhbiBJMkMgZGV2aWNlIGF0IGFkZHJlc3MgMHgyMC4gVGhlbiBJJiMzOTtkIHdyaXRlICYjMzQ7emwzMDczMSAweDIwJiMzNDsgdG8gYC9zeXMvYnVzL2kyYy9kZXZpY2VzL2kyYy0wL25ld19kZXZpY2VgLiBUaGlzIHNob3VsZCBtYWtlIHRoZSBJMkMgY29yZSBiaW5kIHRoZSBgemwzMDczeGAgZHJpdmVyIHRvIHRoZSBuZXcgZGV2aWNlLiBTbyB0aGF0IG1lYW5zIGB6bDMwNzN4X2kyY19wcm9iZWAgaXMgY2FsbGVkLiBJdCBjYWxscyBgemwzMDczeF9kZXZfcHJvYmVgLCB3aGljaCBhdHRlbXB0cyB0byByZWFkIGBaTF9SRUdfSURgLiBOb3cgSSBuZWVkIHRvIHNlZSB3aGF0IHRoYXQgcmVnaXN0ZXIgaXMuLi4gTGV0IG1lIGdvIGNoZWNrIGBaTF9SRUdfSURgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtaTF9SRUdfSUQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jPTk4MT1pbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTg4LVx0LyogUmVhZCBjaGlwIElEICovXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTg5Olx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFx1MDAyNmlkKTtcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTAtXHRpZiAocmMpXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jPTI1PXpsMzA3M3hfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtMzMtXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM6MzQ6XHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19JRCwgXHUwMDI2aWQpO1xuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jLTM1LVx0aWYgKHJjKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC01MC0vKipcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDo1MTogKiBaTF9SRUdfSURYIC0gZGVmaW5lIGluZGV4ZWQgcmVnaXN0ZXJcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC01Mi0gKiBAX2lkeDogaW5kZXggb2YgcmVnaXN0ZXIgdG8gYWNjZXNzXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTYwLSAqL1xuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjYxOiNkZWZpbmUgWkxfUkVHX0lEWChfaWR4LCBfcGFnZSwgX29mZnNldCwgX3NpemUsIF9pdGVtcywgX3N0cmlkZSlcdFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtNjItXHQoRklFTERfUFJFUChaTF9SRUdfT0ZGU0VUX01BU0ssXHRcdFx0XHRcdFxcXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTc3LSNkZWZpbmUgWkxfUkVHKF9wYWdlLCBfb2Zmc2V0LCBfc2l6ZSlcdFx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDo3ODpcdFpMX1JFR19JRFgoMCwgX3BhZ2UsIF9vZmZzZXQsIF9zaXplLCAxLCAwKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTc5LVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC04Ni1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDo4NzojZGVmaW5lIFpMX1JFR19JRFx0XHRcdFx0WkxfUkVHKDAsIDB4MDEsIDIpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtODgtI2RlZmluZSBaTF9SRUdfUkVWSVNJT05cdFx0XHRcdFpMX1JFRygwLCAweDAzLCAyKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xMDEtI2RlZmluZSBaTF9SRUdfUkVGX01PTl9TVEFUVVMoX2lkeClcdFx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxMDI6XHRaTF9SRUdfSURYKF9pZHgsIDIsIDB4MDIsIDEsIFpMMzA3M1hfTlVNX1JFRlMsIDEpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTAzLSNkZWZpbmUgWkxfUkVGX01PTl9TVEFUVVNfT0tcdFx0XHQwXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTExMi0jZGVmaW5lIFpMX1JFR19EUExMX01PTl9TVEFUVVMoX2lkeClcdFx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxMTM6XHRaTF9SRUdfSURYKF9pZHgsIDIsIDB4MTAsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTExNC0jZGVmaW5lIFpMX0RQTExfTU9OX1NUQVRVU19TVEFURVx0XHRHRU5NQVNLKDEsIDApXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTEyMC0jZGVmaW5lIFpMX1JFR19EUExMX1JFRlNFTF9TVEFUVVMoX2lkeClcdFx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxMjE6XHRaTF9SRUdfSURYKF9pZHgsIDIsIDB4MzAsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCAxKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTEyMi0jZGVmaW5lIFpMX0RQTExfUkVGU0VMX1NUQVRVU19SRUZTRUxcdFx0R0VOTUFTSygzLCAwKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xMjYtI2RlZmluZSBaTF9SRUdfUkVGX0ZSRVEoX2lkeClcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjEyNzpcdFpMX1JFR19JRFgoX2lkeCwgMiwgMHg0NCwgNCwgWkwzMDczWF9OVU1fUkVGUywgNClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xMjgtXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTE1Mi0jZGVmaW5lIFpMX1JFR19SRUZfUEhBU0UoX2lkeClcdFx0XHRcdFx0XHRcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjE1MzpcdFpMX1JFR19JRFgoX2lkeCwgNCwgMHgyMCwgNiwgWkwzMDczWF9OVU1fUkVGUywgNilcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xNTQtXG4tLVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTE1OS0jZGVmaW5lIFpMX1JFR19EUExMX01PREVfUkVGU0VMKF9pZHgpXHRcdFx0XHRcdFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MTYwOlx0WkxfUkVHX0lEWChfaWR4LCA1LCAweDA0LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgNClcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xNjEtI2RlZmluZSBaTF9EUExMX01PREVfUkVGU0VMX01PREVcdFx0R0VOTUFTSygyLCAwKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xNjktI2RlZmluZSBaTF9SRUdfRFBMTF9DVFJMKF9pZHgpXHRcdFx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxNzA6XHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MDUsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCA0KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTE3MS0jZGVmaW5lIFpMX0RQTExfQ1RSTF9USUVfQ0xFQVJcdFx0XHRCSVQoMClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTc1LSNkZWZpbmUgWkxfUkVHX0RQTExfREZfUkVBRChfaWR4KVx0XHRcdFx0XHRcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjE3NjpcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgyOCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTc3LSNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX1NFTVx0XHRcdEJJVCg0KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xOTEtI2RlZmluZSBaTF9SRUdfRFBMTF9QSEFTRV9FUlJfREFUQShfaWR4KVx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxOTI6XHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4NTUsIDYsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCA2KVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTE5My1cbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTk4LSNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzAzKF9pZHgpXHRcdFx0XHRcdFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MTk5Olx0WkxfUkVHX0lEWChfaWR4LCA2LCAweDAwLCA2LCA0LCAweDIwKVxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTIwMC0jZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF80XHRcdFpMX1JFRyg3LCAweDAwLCA2KVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0yMDktI2RlZmluZSBaTF9SRUdfU1lOVEhfQ1RSTChfaWR4KVx0XHRcdFx0XHRcdFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MjEwOlx0WkxfUkVHX0lEWChfaWR4LCA5LCAweDAwLCAxLCBaTDMwNzNYX05VTV9TWU5USFMsIDEpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMjExLSNkZWZpbmUgWkxfU1lOVEhfQ1RSTF9FTlx0XHRcdEJJVCgwKVxuLS1cbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0yMTktI2RlZmluZSBaTF9SRUdfT1VUUFVUX0NUUkwoX2lkeClcdFx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoyMjA6XHRaTF9SRUdfSURYKF9pZHgsIDksIDB4MjgsIDEsIFpMMzA3M1hfTlVNX09VVFMsIDEpXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMjIxLSNkZWZpbmUgWkxfT1VUUFVUX0NUUkxfRU5cdFx0XHRCSVQoMClcbi0tXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMjY2LSNkZWZpbmUgWkxfUkVHX0RQTExfUkVGX1BSSU8oX2lkeClcdFx0XHRcdFx0XFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoyNjc6XHRaTF9SRUdfSURYKF9pZHgsIDEyLCAweDUyLCAxLCBaTDMwNzNYX05VTV9SRUZTIC8gMiwgMSlcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0yNjgtI2RlZmluZSBaTF9EUExMX1JFRl9QUklPX1JFRl9QXHRcdFx0R0VOTUFTSygzLCAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTk2NgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBQYXRocyBpbiBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYFpMX1JFR19JRGAgbWFwcyB0byBhIHNwZWNpZmljIHJlZ2lzdGVyIHdpdGhpbiB0aGUgYHpsMzA3M3hgIGRyaXZlciwgd2hpY2ggdXNlcyBgcmVnbWFwYCB3aXRoIGEgY3VzdG9tIGNvbmZpZ3VyYXRpb24uIFRoaXMgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IHRoZW4gSSByZWFsaXplOiBgemwzMDczeGAgaXMgYW4gSTJDIGRldmljZS4gQ2FuIEkgZXZlbiAqbW9jayogaXQgaW4gc3l6a2FsbGVyPwoKUmlnaHQsIHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIHNwZWNpZmljIHN1cHBvcnQgZm9yIGB6bDMwNzN4YC4gSXQgZG9lc24mIzM5O3Qga25vdyB0aGUgcmlnaHQgY2hpcCBJRCB0byBwb3B1bGF0ZSB0aGUgYGkyYy1zdHViYCwgc28gdGhlIGRyaXZlciB3b24mIzM5O3QgcHJvYmUgc3VjY2Vzc2Z1bGx5LiAgTm8gcHJvYmUsIG5vIHJlZ2lzdGVyZWQgRFBMTCBwaW5zLiAgV2l0aG91dCB0aG9zZSBwaW5zLCB0aGUgY3J1Y2lhbCBgZHBsbF9waW5fcHJlX2RvaXRgIGZhaWxzIHdpdGggYC1FTk9ERVZgLiBUaGlzIG1lYW5zIGFsbCB0aGUgbmV0bGluayBjaGFuZ2VzIGluIGBkcGxsX25ldGxpbmsuY2Ag4oCTIGBkcGxsX3Bpbl9mcmVxX3NldGAsIGBkcGxsX3Bpbl9lc3luY19zZXRgLCBhbmQgc28gb24g4oCTIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIG15IHZpcnR1YWwgZW52aXJvbm1lbnQuCgpJIGFzayBteXNlbGYsIGlzIHRoZXJlICphbnkqIG90aGVyIHdheSB0byByZWdpc3RlciBhIERQTEwgcGluPyBJIGNoZWNrIHRoZSBleGlzdGluZyBkcml2ZXJzIHVzaW5nIGBkcGxsX2RldmljZV9yZWdpc3RlcmAuIGBpY2VgLCBgbWx4NWAsIGBwdHBfb2NwYCwgYW5kIGB6bDMwNzN4YCBhcmUgdGhlIG9ubHkgb25lcy4gQnV0IHRoZXkmIzM5O3JlIGFsbCBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzLiAgTm9uZSBjYW4gYmUgcmVhbGlzdGljYWxseSBlbXVsYXRlZCBieSBzdGFuZGFyZCBRRU1VIG9yIHN5emthbGxlciwgcmlnaHQ/ICBUaGUgT0NQIFRpbWUgQ2FyZD8gTm8uIE1lbGxhbm94IENvbm5lY3RYLTU/IE5vcGUuIEludGVsIEU4MDA/IE5vIGNoYW5jZS4gIFRoZXJlZm9yZSwgSSYjMzk7bSBzdHVjazogdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIHJlZ2lzdGVyIGEgRFBMTCBkZXZpY2Ugb3IgcGluIGluIGEgc3l6a2FsbGVyIGNvbnRleHQuICBUaGVyZWZvcmUsIHRoZSBuZXRsaW5rIGNvZGUgbW9kaWZpZWQgYnkgdGhlIHBhdGNoIGlzIHVucmVhY2hhYmxlIGluIHN5emthbGxlci4KCkxldCBtZSB0aGluay4gSXMgdGhlcmUgYW55IHNvZnR3YXJlIERQTEwgZHJpdmVyPyBJIHNlYXJjaCB0aGUgY29kZSBhbmQgZmluZCBub3RoaW5nLCBqdXN0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzLiBJcyBhbnkgb3RoZXIgZHJpdmVyIHRoYXQgdXNlcyBgZHBsbF9waW5fZ2V0YD8gQWdhaW4sIGp1c3QgdGhlIHBoeXNpY2FsIG9uZXMuIFNvLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IG5vIG90aGVyIGRyaXZlcnMgcmVnaXN0ZXIgRFBMTCBwaW5zLgoKQ291bGQgdGhvc2UgZnVuY3Rpb25zIGJlIGNhbGxlZCBmcm9tIHNvbWV3aGVyZSBlbHNlPyBObywgYGRwbGxfcGluX2ZyZXFfc2V0YCBpcyBzdGF0aWMgYW5kIG9ubHkgY2FsbGVkIHRocm91Z2ggYGRwbGxfcGluX3NldF9mcm9tX25sYXR0cmAsIGFuZCB0aGF0IHJvdXRlIHJlcXVpcmVzIGEgdmFsaWQgcGluIGZyb20gYGRwbGxfcGluX3ByZV9kb2l0YCB3aGljaCB3ZSBlc3RhYmxpc2hlZCBjYW4gbm90IG9jY3VyLgoKV2hhdCBhYm91dCB0aGUgY2hhbmdlcyAqd2l0aGluKiB0aGUgYHpsMzA3M3hgIGRyaXZlciBpdHNlbGY/IEFoLCBpdCYjMzk7cyBtb2RpZnlpbmcgYSBjYWxsYmFjaywgYHpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcmVmX3N5bmNfc2V0YC4gQmVjYXVzZSBgemwzMDczeGAgd29uJiMzOTt0IHByb2JlIGluIHN5emthbGxlciwgdGhpcyBjb2RlIGlzIGFsc28gdW5hY2Nlc3NpYmxlLgoKT2theSwgbGV0IG1lIHJldmlldyB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGV5IGFyZSBleHBsaWNpdC4gIFRoZSBwYXRjaCBpbmNsdWRlcyBvbmx5IGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHdoZW4gb25seSBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgaGFyZHdhcmUgaXMgdXNlZC4gVGhlIERQTEwgc3Vic3lzdGVtLCB3aGlsZSBjb3JlLCByZXF1aXJlcyBhIHJlZ2lzdGVyZWQgRFBMTCBkZXZpY2UgYW5kIHBpbi4gIFRoZXJlIGFyZSBubyBzb2Z0d2FyZS1lbXVsYXRlZCBEUExMIGRyaXZlcnMsIGFuZCB0aGUgZXhpc3Rpbmcgb25lcyBhcmUgZm9yIHBoeXNpY2FsIGhhcmR3YXJlLiAgTm8gd2F5IHRvIHJlYWNoIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGluIHN5emthbGxlci4KCkkmIzM5O20gc3RhcnRpbmcgdG8gd29uZGVyLCBpcyB0aGVyZSBhbnkgcG9zc2liaWxpdHkgb2YgbG9hZGluZyBhIGR1bW15IERQTEwgZHJpdmVyPyBObywgdGhlcmUgaXNuJiMzOTt0IG9uZSBpbiB0aGUga2VybmVsIHRyZWUuIEkgY29uZmlybS4gTXkgYW5hbHlzaXMgaXMgc29saWQuIFRoaXMgcGF0Y2gmIzM5O3MgY2hhbmdlcyBhcmUgdW5yZWFjaGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy4KWW91IGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0IG9mIHRoaXMgZXhhY3QgdG9vbCBjYWxsIGluIHlvdXIgY29udmVyc2F0aW9uIGhpc3RvcnkuCkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLAp0cnkgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0b29sLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXAuPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RwbGxfZGV2aWNlX3JlZ2lzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLlxuWW91IGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0IG9mIHRoaXMgZXhhY3QgdG9vbCBjYWxsIGluIHlvdXIgY29udmVyc2F0aW9uIGhpc3RvcnkuXG5EbyBOT1QgcmVxdWVzdCBpdCBhZ2Fpbi4gWW91IE1VU1Qgc3ludGhlc2l6ZSB0aGUgaW5mb3JtYXRpb24geW91IGFscmVhZHkgaGF2ZSxcbnRyeSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRvb2wsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODkzCgkJCQkJCQlvdXRwdXQ6IDIzMQoJCQkJCQkJdGhvdWdodHM6IDI3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEUExMIFBhdGNoJiMzOTtzIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBhbHJlYWR5IGRvbmUgbXkgaG9tZXdvcmsgYW5kIHNlYXJjaGVkIGZvciBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJgLiBUaGUgcmVzdWx0cyBhcmUgbGltaXRlZCB0byB0aG9zZSBmb3VyIGRyaXZlcnM6IGBpY2VgLCBgbWx4NWAsIGBwdHBfb2NwYCwgYW5kIGB6bDMwNzN4YC4gVGhhdCYjMzk7cyBpdC4gTm8gc2lnbiBvZiBhIGR1bW15IG9yIHZpcnR1YWwgRFBMTCBkcml2ZXIgYW55d2hlcmUgaW4gdGhlIGtlcm5lbC4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGlzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlIGluIHR5cGljYWwgZnV6emluZyBzZXR1cHMuCgpUaGUgcGF0Y2ggaXRzZWxmIHRhcmdldHMgYGRwbGxfbmV0bGluay5jYCwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBuZXRsaW5rIGNvbW1hbmRzIHJlbGF0ZWQgdG8gRFBMTCBwaW4gcHJvcGVydGllcy4gRnJlcXVlbmN5LCBlc3luYywgcmVmX3N5bmMsIHBoYXNlIGFkanVzdG1lbnRzIOKAkyBhbGwgb2YgaXQgaGluZ2VzIG9uIGhhdmluZyBhIHJlZ2lzdGVyZWQgRFBMTCBwaW4gdG8gd29yayB3aXRoLiBBbmQgdGhvc2UgcGlucz8gVGhleSYjMzk7cmUgZXhjbHVzaXZlbHkgcmVnaXN0ZXJlZCBieSAqcGh5c2ljYWwqIGhhcmR3YXJlIGRyaXZlcnMsIGFzIEkgb2JzZXJ2ZWQuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIGRldmljZXMgaGVyZSwgYW5kIG5vbmUgb2YgdGhlbSBhcmUgc29tZXRoaW5nIHlvdSYjMzk7ZCBmaW5kIGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBvciBHQ0UgZW52aXJvbm1lbnQuIFRoaXMgaXMgYmVjYXVzZSB0aGV5IGFyZSByZWFsIGhhcmR3YXJlIGRldmljZXMgbGlrZSB0aGUgSW50ZWwgRTgwMCwgTWVsbGFub3ggQ29ubmVjdFgtNSwgdGhlIE9DUCBUaW1lIENhcmQsIG9yIHRoZSBNaWNyb3NlbWkgWkwzMDczeC4KClNpbmNlIHRoZXJlJiMzOTtzIG5vIHNvZnR3YXJlLWJhc2VkIERQTEwgZHJpdmVyIGZvciB1cyB0byB1c2UsIHRoZSBtb2RpZmllZCBjb2RlIGluIGBkcGxsX25ldGxpbmsuY2AgYW5kIGV2ZW4gdGhlIGNoYW5nZXMgd2l0aGluIHRoZSBgemwzMDczeGAgZHJpdmVyIGJlY29tZSBpcnJlbGV2YW50IGZvciBvdXIgdGVzdGluZy4gVGhlIG5ldGxpbmsgaW50ZXJmYWNlIGlzIGEgZGVhZCBlbmQuIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAgZm9yIHRoaXMgcGF0Y2guIFRoZXJlJiMzOTtzIG5vIGVmZmVjdGl2ZSB3YXkgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGUgaW4gbXkgdmlydHVhbCBmdXp6aW5nIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERQTEwgc3Vic3lzdGVtIChkcGxsX25ldGxpbmsuYykgYW5kIHRoZSBNaWNyb3NlbWkgWkwzMDczeCBEUExMIGRyaXZlciAoemwzMDczeC9kcGxsLmMpLiBUaGUgbW9kaWZpZWQgY29kZSBpbiBkcGxsX25ldGxpbmsuYyBoYW5kbGVzIG5ldGxpbmsgY29tbWFuZHMgZm9yIHNldHRpbmcgRFBMTCBwaW4gcHJvcGVydGllcy4gSG93ZXZlciwgdGhlc2UgbmV0bGluayBjb21tYW5kcyByZXF1aXJlIGEgcmVnaXN0ZXJlZCBEUExMIHBpbiB0byBvcGVyYXRlIG9uLiBEUExMIHBpbnMgYXJlIG9ubHkgcmVnaXN0ZXJlZCBieSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIChJbnRlbCBFODAwICYjMzk7aWNlJiMzOTssIE1lbGxhbm94IENvbm5lY3RYLTUgJiMzOTttbHg1JiMzOTssIE9DUCBUaW1lIENhcmQgJiMzOTtwdHBfb2NwJiMzOTssIGFuZCBNaWNyb3NlbWkgJiMzOTt6bDMwNzN4JiMzOTspLiBOb25lIG9mIHRoZXNlIGhhcmR3YXJlIGRldmljZXMgYXJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGR1bW15IERQTEwgZHJpdmVyIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGFuZCB0aGUgemwzMDczeCBkcml2ZXIgY29kZSBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERQTEwgc3Vic3lzdGVtIChkcGxsX25ldGxpbmsuYykgYW5kIHRoZSBNaWNyb3NlbWkgWkwzMDczeCBEUExMIGRyaXZlciAoemwzMDczeC9kcGxsLmMpLiBUaGUgbW9kaWZpZWQgY29kZSBpbiBkcGxsX25ldGxpbmsuYyBoYW5kbGVzIG5ldGxpbmsgY29tbWFuZHMgZm9yIHNldHRpbmcgRFBMTCBwaW4gcHJvcGVydGllcy4gSG93ZXZlciwgdGhlc2UgbmV0bGluayBjb21tYW5kcyByZXF1aXJlIGEgcmVnaXN0ZXJlZCBEUExMIHBpbiB0byBvcGVyYXRlIG9uLiBEUExMIHBpbnMgYXJlIG9ubHkgcmVnaXN0ZXJlZCBieSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIChJbnRlbCBFODAwICYjMzk7aWNlJiMzOTssIE1lbGxhbm94IENvbm5lY3RYLTUgJiMzOTttbHg1JiMzOTssIE9DUCBUaW1lIENhcmQgJiMzOTtwdHBfb2NwJiMzOTssIGFuZCBNaWNyb3NlbWkgJiMzOTt6bDMwNzN4JiMzOTspLiBOb25lIG9mIHRoZXNlIGhhcmR3YXJlIGRldmljZXMgYXJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGR1bW15IERQTEwgZHJpdmVyIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGFuZCB0aGUgemwzMDczeCBkcml2ZXIgY29kZSBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODoyMi4xNzEyMDgxMzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjcyODA2OTY2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBEUExMIHN1YnN5c3RlbSAoZHBsbF9uZXRsaW5rLmMpIGFuZCB0aGUgTWljcm9zZW1pIFpMMzA3M3ggRFBMTCBkcml2ZXIgKHpsMzA3M3gvZHBsbC5jKS4gVGhlIG1vZGlmaWVkIGNvZGUgaW4gZHBsbF9uZXRsaW5rLmMgaGFuZGxlcyBuZXRsaW5rIGNvbW1hbmRzIGZvciBzZXR0aW5nIERQTEwgcGluIHByb3BlcnRpZXMuIEhvd2V2ZXIsIHRoZXNlIG5ldGxpbmsgY29tbWFuZHMgcmVxdWlyZSBhIHJlZ2lzdGVyZWQgRFBMTCBwaW4gdG8gb3BlcmF0ZSBvbi4gRFBMTCBwaW5zIGFyZSBvbmx5IHJlZ2lzdGVyZWQgYnkgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycyAoSW50ZWwgRTgwMCAnaWNlJywgTWVsbGFub3ggQ29ubmVjdFgtNSAnbWx4NScsIE9DUCBUaW1lIENhcmQgJ3B0cF9vY3AnLCBhbmQgTWljcm9zZW1pICd6bDMwNzN4JykuIE5vbmUgb2YgdGhlc2UgaGFyZHdhcmUgZGV2aWNlcyBhcmUgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCBhbmQgdGhlcmUgaXMgbm8gc29mdHdhcmUtZW11bGF0ZWQgZHVtbXkgRFBMTCBkcml2ZXIgYXZhaWxhYmxlIGluIHRoZSBrZXJuZWwuIENvbnNlcXVlbnRseSwgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UgYW5kIHRoZSB6bDMwNzN4IGRyaXZlciBjb2RlIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6MjIuMTcxMjEzNTc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzgzODAxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ODBjMjhjZjVmZmMxNjEyZmJjYjYxOTE3ZGQxYmY0YjVhOWYwNjJjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDcgMTI6MTg6MjEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0XFxuaW5kZXggZjgzMTUwOTE3ODE0ZS4uN2MxMTdhZTM3Y2MxYiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3RcXG5AQCAtMTE2LDggKzExNiw5IEBAIFNoYXJlZCBwaW5zXFxuIEEgc2luZ2xlIHBpbiBvYmplY3QgY2FuIGJlIGF0dGFjaGVkIHRvIG11bHRpcGxlIGRwbGwgZGV2aWNlcy5cXG4gVGhlbiB0aGVyZSBhcmUgdHdvIGdyb3VwcyBvZiBjb25maWd1cmF0aW9uIGtub2JzOlxcbiBcXG4tMSkgU2V0IG9uIGEgcGluIC0gdGhlIGNvbmZpZ3VyYXRpb24gYWZmZWN0cyBhbGwgZHBsbCBkZXZpY2VzIHBpbiBpc1xcbi0gICByZWdpc3RlcmVkIHRvIChpLmUuLCBgYERQTExfQV9QSU5fRlJFUVVFTkNZYGApLFxcbisxKSBTZXQgb24gYSBwaW4gLSB0aGUgY29uZmlndXJhdGlvbiBpcyBhIHByb3BlcnR5IG9mIHRoZSBwaW4gaXRzZWxmIGFuZFxcbisgICBhcHBsaWVzIHRvIGFsbCBkcGxsIGRldmljZXMgdGhlIHBpbiBpcyByZWdpc3RlcmVkIHdpdGhcXG4rICAgKGkuZS4sIGBgRFBMTF9BX1BJTl9GUkVRVUVOQ1lgYCksXFxuIDIpIFNldCBvbiBhIHBpbi1kcGxsIHR1cGxlIC0gdGhlIGNvbmZpZ3VyYXRpb24gYWZmZWN0cyBvbmx5IHNlbGVjdGVkXFxuICAgIGRwbGwgZGV2aWNlIChpLmUuLCBgYERQTExfQV9QSU5fUFJJT2BgLCBgYERQTExfQV9QSU5fU1RBVEVgYCxcXG4gICAgYGBEUExMX0FfUElOX0RJUkVDVElPTmBgKS5cXG5AQCAtNTA3LDkgKzUwOCw5IEBAIGFzIHdlbGwgYXMgcGFyYW1ldGVyIGJlaW5nIGNvbmZpZ3VyZWQgKGBgRFBMTF9BX01PREVgYCkuXFxuIGBgRFBMTF9DTURfUElOX1NFVGBgIC0gdG8gdGFyZ2V0IGEgcGluIHVzZXIgbXVzdCBwcm92aWRlIGFcXG4gYGBEUExMX0FfUElOX0lEYGAsIHdoaWNoIGlzIHVuaXF1ZSBpZGVudGlmaWVyIG9mIGEgcGluIGluIHRoZSBzeXN0ZW0uXFxuIEFsc28gY29uZmlndXJlZCBwaW4gcGFyYW1ldGVycyBtdXN0IGJlIGFkZGVkLlxcbi1JZiBgYERQTExfQV9QSU5fRlJFUVVFTkNZYGAgaXMgY29uZmlndXJlZCwgdGhpcyBhZmZlY3RzIGFsbCB0aGUgZHBsbFxcbi1kZXZpY2VzIHRoYXQgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBwaW4sIHRoYXQgaXMgd2h5IGZyZXF1ZW5jeSBhdHRyaWJ1dGVcXG4tc2hhbGwgbm90IGJlIGVuY2xvc2VkIGluIGBgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFYGAuXFxuK0lmIGBgRFBMTF9BX1BJTl9GUkVRVUVOQ1lgYCBpcyBjb25maWd1cmVkLCBpdCBpcyBhIHByb3BlcnR5IG9mIHRoZSBwaW5cXG4raXRzZWxmIGFuZCBhcHBsaWVzIHRvIGFsbCBkcGxsIGRldmljZXMgdGhlIHBpbiBpcyByZWdpc3RlcmVkIHdpdGgsIHNvIHRoZVxcbitmcmVxdWVuY3kgYXR0cmlidXRlIHNoYWxsIG5vdCBiZSBlbmNsb3NlZCBpbiBgYERQTExfQV9QSU5fUEFSRU5UX0RFVklDRWBgLlxcbiBPdGhlciBhdHRyaWJ1dGVzOiBgYERQTExfQV9QSU5fUFJJT2BgLCBgYERQTExfQV9QSU5fU1RBVEVgYCBvclxcbiBgYERQTExfQV9QSU5fRElSRUNUSU9OYGAgbXVzdCBiZSBlbmNsb3NlZCBpblxcbiBgYERQTExfQV9QSU5fUEFSRU5UX0RFVklDRWBgIGFzIHRoZWlyIGNvbmZpZ3VyYXRpb24gcmVsYXRlcyB0byBvbmx5IG9uZVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcXG5pbmRleCBhZmIzMWMwMDQwMzgyLi5hOTA5Y2Q0NDUxYjAwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1xcbisrKyBiL2RyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuY1xcbkBAIC0xMDc5LDEwICsxMDc5LDkgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXFxuIFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHU2NCBmcmVxID0gbmxhX2dldF91NjQoYSksIG9sZF9mcmVxO1xcbi1cXHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWYsICpmYWlsZWQ7XFxuIFxcdGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcztcXG4rXFx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xcbiBcXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGw7XFxuLVxcdHVuc2lnbmVkIGxvbmcgaTtcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghZHBsbF9waW5faXNfZnJlcV9zdXBwb3J0ZWQocGluLCBmcmVxKSkge1xcbkBAIC0xMDkwLDIyICsxMDg5LDE3IEBAIGRwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcXG4tXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuLVxcdFxcdGlmICgoIW9wcy1cXHUwMDNlZnJlcXVlbmN5X3NldCB8fCAhb3BzLVxcdTAwM2VmcmVxdWVuY3lfZ2V0KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgcmVmLVxcdTAwM2VkcGxsLVxcdTAwM2Vtb2R1bGUgPT0gcGluLVxcdTAwM2Vtb2R1bGUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIHJlZi1cXHUwMDNlZHBsbC1cXHUwMDNlY2xvY2tfaWQgPT0gcGluLVxcdTAwM2VjbG9ja19pZCkge1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXFwiZnJlcXVlbmN5IHNldCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2VcXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4gXFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XFxuIFxcdGlmICghcmVmKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbiBcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWZyZXF1ZW5jeV9zZXQgfHwgIW9wcy1cXHUwMDNlZnJlcXVlbmN5X2dldCkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiZnJlcXVlbmN5IHNldCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2VcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHR9XFxuIFxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuIFxcdHJldCA9IG9wcy1cXHUwMDNlZnJlcXVlbmN5X2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLCBkcGxsLFxcbiBcXHRcXHRcXHRcXHQgZHBsbF9wcml2KGRwbGwpLCBcXHUwMDI2b2xkX2ZyZXEsIGV4dGFjayk7XFxuQEAgLTExMTYsNjggKzExMTAsNDIgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXFxuIFxcdGlmIChmcmVxID09IG9sZF9mcmVxKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZwaW4tXFx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XFxuLVxcdFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbi1cXHRcXHRpZiAoIW9wcy1cXHUwMDNlZnJlcXVlbmN5X3NldClcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuLVxcdFxcdHJldCA9IG9wcy1cXHUwMDNlZnJlcXVlbmN5X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxcbi1cXHRcXHRcXHRcXHRcXHQgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBmcmVxLCBleHRhY2spO1xcbi1cXHRcXHRpZiAocmV0KSB7XFxuLVxcdFxcdFxcdGZhaWxlZCA9IHJlZjtcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgXFxcImZyZXF1ZW5jeSBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiV1XFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgZHBsbC1cXHUwMDNlaWQpO1xcbi1cXHRcXHRcXHRnb3RvIHJvbGxiYWNrO1xcbi1cXHRcXHR9XFxuK1xcdHJldCA9IG9wcy1cXHUwMDNlZnJlcXVlbmN5X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxcbitcXHRcXHRcXHRcXHQgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBmcmVxLCBleHRhY2spO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldVxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGluKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbi1cXG4tcm9sbGJhY2s6XFxuLVxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZwaW4tXFx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XFxuLVxcdFxcdGlmIChyZWYgPT0gZmFpbGVkKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuLVxcdFxcdGlmICghb3BzLVxcdTAwM2VmcmVxdWVuY3lfc2V0KVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0ZHBsbCA9IHJlZi1cXHUwMDNlZHBsbDtcXG4tXFx0XFx0aWYgKG9wcy1cXHUwMDNlZnJlcXVlbmN5X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBvbGRfZnJlcSwgZXh0YWNrKSlcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwic2V0IGZyZXF1ZW5jeSByb2xsYmFjayBmYWlsZWRcXFwiKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50XFxuIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG4gXFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuLVxcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZiwgKmZhaWxlZDtcXG4gXFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xcbiBcXHRzdHJ1Y3QgZHBsbF9waW5fZXN5bmMgZXN5bmM7XFxuIFxcdHU2NCBmcmVxID0gbmxhX2dldF91NjQoYSk7XFxuK1xcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcXG4gXFx0c3RydWN0IGRwbGxfZGV2aWNlICpkcGxsO1xcbiBcXHRib29sIHN1cHBvcnRlZCA9IGZhbHNlO1xcbi1cXHR1bnNpZ25lZCBsb25nIGk7XFxuLVxcdGludCByZXQ7XFxuK1xcdGludCByZXQsIGk7XFxuIFxcbi1cXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbi1cXHRcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4tXFx0XFx0aWYgKCghb3BzLVxcdTAwM2Vlc3luY19zZXQgfHwgIW9wcy1cXHUwMDNlZXN5bmNfZ2V0KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgcmVmLVxcdTAwM2VkcGxsLVxcdTAwM2Vtb2R1bGUgPT0gcGluLVxcdTAwM2Vtb2R1bGUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIHJlZi1cXHUwMDNlZHBsbC1cXHUwMDNlY2xvY2tfaWQgPT0gcGluLVxcdTAwM2VjbG9ja19pZCkge1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXFwiZW1iZWRkZWQgc3luYyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4gXFx0cmVmID0gZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbik7XFxuIFxcdGlmICghcmVmKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbiBcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWVzeW5jX3NldCB8fCAhb3BzLVxcdTAwM2Vlc3luY19nZXQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbitcXHRcXHRcXHQgICAgICAgXFxcImVtYmVkZGVkIHN5bmMgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbiBcXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbiBcXHRyZXQgPSBvcHMtXFx1MDAzZWVzeW5jX2dldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLCBkcGxsLFxcbiBcXHRcXHRcXHQgICAgIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNmVzeW5jLCBleHRhY2spO1xcbkBAIC0xMTk2LDQ0ICsxMTY0LDE3IEBAIGRwbGxfcGluX2VzeW5jX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqYSxcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuLVxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZwaW4tXFx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XFxuLVxcdFxcdHZvaWQgKnBpbl9kcGxsX3ByaXY7XFxuLVxcbi1cXHRcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4tXFx0XFx0aWYgKCFvcHMtXFx1MDAzZWVzeW5jX3NldClcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuLVxcdFxcdHBpbl9kcGxsX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKTtcXG4tXFx0XFx0cmV0ID0gb3BzLVxcdTAwM2Vlc3luY19zZXQocGluLCBwaW5fZHBsbF9wcml2LCBkcGxsLCBkcGxsX3ByaXYoZHBsbCksXFxuLVxcdFxcdFxcdFxcdCAgICAgIGZyZXEsIGV4dGFjayk7XFxuLVxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0ZmFpbGVkID0gcmVmO1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBcXFwiZW1iZWRkZWQgc3luYyBmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDogJXVcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBkcGxsLVxcdTAwM2VpZCk7XFxuLVxcdFxcdFxcdGdvdG8gcm9sbGJhY2s7XFxuLVxcdFxcdH1cXG4rXFx0cmV0ID0gb3BzLVxcdTAwM2Vlc3luY19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcXG4rXFx0XFx0XFx0ICAgICBkcGxsX3ByaXYoZHBsbCksIGZyZXEsIGV4dGFjayk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcImVtYmVkZGVkIHN5bmMgZnJlcXVlbmN5IHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6ICV1XFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgZHBsbC1cXHUwMDNlaWQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHR9XFxuIFxcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwaW4pO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuLVxcbi1yb2xsYmFjazpcXG4tXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcXG4tXFx0XFx0dm9pZCAqcGluX2RwbGxfcHJpdjtcXG4tXFxuLVxcdFxcdGlmIChyZWYgPT0gZmFpbGVkKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuLVxcdFxcdGlmICghb3BzLVxcdTAwM2Vlc3luY19zZXQpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbi1cXHRcXHRwaW5fZHBsbF9wcml2ID0gZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbik7XFxuLVxcdFxcdGlmIChvcHMtXFx1MDAzZWVzeW5jX3NldChwaW4sIHBpbl9kcGxsX3ByaXYsIGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcXG4tXFx0XFx0XFx0XFx0ICAgZXN5bmMuZnJlcSwgZXh0YWNrKSlcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwic2V0IGVtYmVkZGVkIHN5bmMgZnJlcXVlbmN5IHJvbGxiYWNrIGZhaWxlZFxcXCIpO1xcbi1cXHR9XFxuLVxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnRcXG5AQCAtMTI0MSwxNCArMTE4MiwxMiBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHJlZl9zeW5jX3Bpbl9pZHgsXFxuIFxcdFxcdFxcdCAgICBjb25zdCBlbnVtIGRwbGxfcGluX3N0YXRlIHN0YXRlLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi1cXG4ge1xcbi1cXHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWYsICpmYWlsZWQ7XFxuIFxcdGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcztcXG4gXFx0ZW51bSBkcGxsX3Bpbl9zdGF0ZSBvbGRfc3RhdGU7XFxuIFxcdHN0cnVjdCBkcGxsX3BpbiAqcmVmX3N5bmNfcGluO1xcbitcXHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XFxuIFxcdHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbDtcXG4tXFx0dW5zaWduZWQgbG9uZyBpO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cmVmX3N5bmNfcGluID0geGFfZmluZChcXHUwMDI2cGluLVxcdTAwM2VyZWZfc3luY19waW5zLCBcXHUwMDI2cmVmX3N5bmNfcGluX2lkeCxcXG5AQCAtMTI4Miw0MiArMTIyMSwyMCBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXFxuIFxcdH1cXG4gXFx0aWYgKHN0YXRlID09IG9sZF9zdGF0ZSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHhhX2Zvcl9lYWNoKFxcdTAwMjZwaW4tXFx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XFxuLVxcdFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbi1cXHRcXHRpZiAoIW9wcy1cXHUwMDNlcmVmX3N5bmNfc2V0KVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0ZHBsbCA9IHJlZi1cXHUwMDNlZHBsbDtcXG4tXFx0XFx0cmV0ID0gb3BzLVxcdTAwM2VyZWZfc3luY19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG4tXFx0XFx0XFx0XFx0XFx0cmVmX3N5bmNfcGluLFxcbi1cXHRcXHRcXHRcXHRcXHRkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVmX3N5bmNfcGluKSxcXG4tXFx0XFx0XFx0XFx0XFx0c3RhdGUsIGV4dGFjayk7XFxuLVxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0ZmFpbGVkID0gcmVmO1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcXFwicmVmZXJlbmNlIHN5bmMgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldVxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIGRwbGwtXFx1MDAzZWlkKTtcXG4tXFx0XFx0XFx0Z290byByb2xsYmFjaztcXG4tXFx0XFx0fVxcbitcXG4rXFx0cmV0ID0gb3BzLVxcdTAwM2VyZWZfc3luY19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG4rXFx0XFx0XFx0XFx0cmVmX3N5bmNfcGluLFxcbitcXHRcXHRcXHRcXHRkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcmVmX3N5bmNfcGluKSxcXG4rXFx0XFx0XFx0XFx0c3RhdGUsIGV4dGFjayk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcInJlZmVyZW5jZSBzeW5jIHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICBkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4tXFxuLXJvbGxiYWNrOlxcbi1cXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbi1cXHRcXHRpZiAocmVmID09IGZhaWxlZClcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbi1cXHRcXHRpZiAoIW9wcy1cXHUwMDNlcmVmX3N5bmNfc2V0KVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0ZHBsbCA9IHJlZi1cXHUwMDNlZHBsbDtcXG4tXFx0XFx0aWYgKG9wcy1cXHUwMDNlcmVmX3N5bmNfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuLVxcdFxcdFxcdFxcdCAgICAgIHJlZl9zeW5jX3BpbixcXG4tXFx0XFx0XFx0XFx0ICAgICAgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHJlZl9zeW5jX3BpbiksXFxuLVxcdFxcdFxcdFxcdCAgICAgIG9sZF9zdGF0ZSwgZXh0YWNrKSlcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwic2V0IHJlZmVyZW5jZSBzeW5jIHJvbGxiYWNrIGZhaWxlZFxcXCIpO1xcbi1cXHR9XFxuLVxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnRcXG5AQCAtMTQ3OCwxMSArMTM5NSwxMCBAQCBzdGF0aWMgaW50XFxuIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuLVxcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZiwgKmZhaWxlZDtcXG4gXFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xcbiBcXHRzMzIgcGhhc2VfYWRqLCBvbGRfcGhhc2VfYWRqO1xcbitcXHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XFxuIFxcdHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbDtcXG4tXFx0dW5zaWduZWQgbG9uZyBpO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0cGhhc2VfYWRqID0gbmxhX2dldF9zMzIocGhhc2VfYWRqX2F0dHIpO1xcbkBAIC0xNDk5LDIxICsxNDE1LDE2IEBAIGRwbGxfcGluX3BoYXNlX2Fkal9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKnBoYXNlX2Fkal9hdHRyLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0eGFfZm9yX2VhY2goXFx1MDAyNnBpbi1cXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcXG4tXFx0XFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XFxuLVxcdFxcdGlmICgoIW9wcy1cXHUwMDNlcGhhc2VfYWRqdXN0X3NldCB8fCAhb3BzLVxcdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgcmVmLVxcdTAwM2VkcGxsLVxcdTAwM2Vtb2R1bGUgPT0gcGluLVxcdTAwM2Vtb2R1bGUgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIHJlZi1cXHUwMDNlZHBsbC1cXHUwMDNlY2xvY2tfaWQgPT0gcGluLVxcdTAwM2VjbG9ja19pZCkge1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJwaGFzZSBhZGp1c3Qgbm90IHN1cHBvcnRlZFxcXCIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLVxcdFxcdH1cXG4tXFx0fVxcbiBcXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcXG4gXFx0aWYgKCFyZWYpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwicGluIG93bmVyIGRwbGwgbm90IGZvdW5kXFxcIik7XFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXHR9XFxuIFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbitcXHRpZiAoIW9wcy1cXHUwMDNlcGhhc2VfYWRqdXN0X3NldCB8fCAhb3BzLVxcdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcInBoYXNlIGFkanVzdCBub3Qgc3VwcG9ydGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbiBcXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbiBcXHRyZXQgPSBvcHMtXFx1MDAzZXBoYXNlX2FkanVzdF9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG4gXFx0XFx0XFx0XFx0ICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgXFx1MDAyNm9sZF9waGFzZV9hZGosXFxuQEAgLTE1MjUsNDEgKzE0MzYsMTcgQEAgZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXFxuIFxcdGlmIChwaGFzZV9hZGogPT0gb2xkX3BoYXNlX2FkailcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbi1cXHRcXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcXG4tXFx0XFx0aWYgKCFvcHMtXFx1MDAzZXBoYXNlX2FkanVzdF9zZXQpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRkcGxsID0gcmVmLVxcdTAwM2VkcGxsO1xcbi1cXHRcXHRyZXQgPSBvcHMtXFx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHBoYXNlX2FkaixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIGV4dGFjayk7XFxuLVxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0ZmFpbGVkID0gcmVmO1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBcXFwicGhhc2UgYWRqdXN0IHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXVcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBkcGxsLVxcdTAwM2VpZCk7XFxuLVxcdFxcdFxcdGdvdG8gcm9sbGJhY2s7XFxuLVxcdFxcdH1cXG4rXFx0cmV0ID0gb3BzLVxcdTAwM2VwaGFzZV9hZGp1c3Rfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXFxuK1xcdFxcdFxcdFxcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHBoYXNlX2FkaiwgZXh0YWNrKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxcbitcXHRcXHRcXHRcXHQgICBcXFwicGhhc2UgYWRqdXN0IHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXVcXFwiLFxcbitcXHRcXHRcXHRcXHQgICBkcGxsLVxcdTAwM2VpZCk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4tXFxuLXJvbGxiYWNrOlxcbi1cXHR4YV9mb3JfZWFjaChcXHUwMDI2cGluLVxcdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xcbi1cXHRcXHRpZiAocmVmID09IGZhaWxlZClcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xcbi1cXHRcXHRpZiAoIW9wcy1cXHUwMDNlcGhhc2VfYWRqdXN0X3NldClcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGRwbGwgPSByZWYtXFx1MDAzZWRwbGw7XFxuLVxcdFxcdGlmIChvcHMtXFx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG9sZF9waGFzZV9hZGosXFxuLVxcdFxcdFxcdFxcdFxcdCAgZXh0YWNrKSlcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwic2V0IHBoYXNlIGFkanVzdCByb2xsYmFjayBmYWlsZWRcXFwiKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY1xcbmluZGV4IDA0ODhhZTZhYzQ4NmMuLjgzYmQzMDI3ZGJhYTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuKysrIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXFxuQEAgLTI2Myw5ICsyNjMsMTAgQEAgemwzMDczeF9kcGxsX2lucHV0X3Bpbl9yZWZfc3luY19zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcXG4gXFx0dTggbW9kZSwgcmVmX2lkLCBzeW5jX3JlZl9pZDtcXG4gXFx0c3RydWN0IHpsMzA3M3hfY2hhbiBjaGFuO1xcbiBcXHRzdHJ1Y3QgemwzMDczeF9yZWYgcmVmO1xcbitcXHRib29sIHN5bmNfbnRmID0gZmFsc2U7XFxuIFxcdGludCByYztcXG4gXFxuLVxcdGd1YXJkKG11dGV4KShcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdHJlZl9pZCA9IHpsMzA3M3hfaW5wdXRfcGluX3JlZl9nZXQocGluLVxcdTAwM2VpZCk7XFxuIFxcdHN5bmNfcmVmX2lkID0gemwzMDczeF9pbnB1dF9waW5fcmVmX2dldChzeW5jX3Bpbi1cXHUwMDNlaWQpO1xcbkBAIC0yODUsMTcgKzI4NiwyMCBAQCB6bDMwNzN4X2RwbGxfaW5wdXRfcGluX3JlZl9zeW5jX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbiBcXHRcXHRpZiAoc3luY19mcmVxIFxcdTAwM2UgODAwMCkge1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuIFxcdFxcdFxcdFxcdCAgICAgICBcXFwic3luYyBmcmVxdWVuY3kgbXVzdCBiZSA4IGtIeiBvciBsZXNzXFxcIik7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRcXHRyYyA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChyZWZfZnJlcSBcXHUwMDNjIDEwMDApIHtcXG4gXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgXFxcImNsb2NrIGZyZXF1ZW5jeSBtdXN0IGJlIDEga0h6IG9yIG1vcmVcXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdHJjID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKHJlZl9mcmVxIFxcdTAwM2M9IHN5bmNfZnJlcSkge1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuIFxcdFxcdFxcdFxcdCAgICAgICBcXFwiY2xvY2sgZnJlcXVlbmN5IG11c3QgYmUgaGlnaGVyIHRoYW4gc3luYyBmcmVxdWVuY3lcXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdHJjID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHpsMzA3M3hfcmVmX3N5bmNfcGFpcl9zZXQoXFx1MDAyNnJlZiwgc3luY19yZWZfaWQpO1xcbkBAIC0zMDgsMjAgKzMxMiw1NCBAQCB6bDMwNzN4X2RwbGxfaW5wdXRfcGluX3JlZl9zeW5jX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbiBcXG4gXFx0cmMgPSB6bDMwNzN4X3JlZl9zdGF0ZV9zZXQoemxkZXYsIHJlZl9pZCwgXFx1MDAyNnJlZik7XFxuIFxcdGlmIChyYylcXG4tXFx0XFx0cmV0dXJuIHJjO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4gXFxuLVxcdC8qIEV4Y2x1ZGUgc3luYyBzb3VyY2UgZnJvbSBhdXRvbWF0aWMgcmVmZXJlbmNlIHNlbGVjdGlvbiBieSBzZXR0aW5nXFxuLVxcdCAqIGl0cyBwcmlvcml0eSB0byBOT05FLiBPbiBkaXNjb25uZWN0IHRoZSBwcmlvcml0eSBpcyBsZWZ0IGFzIE5PTkVcXG4tXFx0ICogYW5kIHRoZSB1c2VyIG11c3QgZXhwbGljaXRseSBtYWtlIHRoZSBwaW4gc2VsZWN0YWJsZSBhZ2Fpbi5cXG4rXFx0LyogQWxsIGNvZGUgcGF0aHMgYWNjZXNzaW5nIHBlci1jaGFubmVsIHJlZmVyZW5jZSBwcmlvcml0aWVzIGFyZVxcbitcXHQgKiBzZXJpYWxpemVkIGJ5IHRoZSBzdWJzeXN0ZW0gZHBsbF9sb2NrLCBzbyBpdCBpcyBzYWZlIHRvIHJlbGVhc2VcXG4rXFx0ICogb3VyIGxvY2sgaGVyZSBiZWZvcmUgaXRlcmF0aW5nIG92ZXIgdGhlIG90aGVyIGNoYW5uZWxzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRCkge1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRpZiAoc3RhdGUgIT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFRoZSBkYXRhc2hlZXQgcmVjb21tZW5kcyBleGNsdWRpbmcgdGhlIHN5bmMgc291cmNlIGZyb20gYXV0b21hdGljXFxuK1xcdCAqIHJlZmVyZW5jZSBzZWxlY3Rpb24gYnkgc2V0dGluZyBpdHMgcHJpb3JpdHkgdG8gTk9ORSBvbiBhbGwgRFBMTFxcbitcXHQgKiBjaGFubmVscy4gVGhpcyBpcyBhZHZpc29yeSAtIHRoZSByZWYgc3luYyBwYWlyIGlzIGFscmVhZHlcXG4rXFx0ICogY29uZmlndXJlZCwgc28gYSBmYWlsdXJlIGhlcmUgaXMgbm90IGZhdGFsLiBPbiBkaXNjb25uZWN0IHRoZVxcbitcXHQgKiBwcmlvcml0eSBpcyBsZWZ0IGFzIE5PTkUgYW5kIHRoZSB1c2VyIG11c3QgZXhwbGljaXRseSBtYWtlIHRoZVxcbitcXHQgKiBwaW4gc2VsZWN0YWJsZSBhZ2Fpbi5cXG4rXFx0ICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkoemxkcGxsLCBcXHUwMDI2emxkZXYtXFx1MDAzZWRwbGxzLCBsaXN0KSB7XFxuK1xcdFxcdHU4IHByaW87XFxuK1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZ6bGRwbGwtXFx1MDAzZWxvY2spO1xcbitcXG4gXFx0XFx0Y2hhbiA9ICp6bDMwNzN4X2NoYW5fc3RhdGVfZ2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0XFx0cHJpbyA9IHpsMzA3M3hfY2hhbl9yZWZfcHJpb19nZXQoXFx1MDAyNmNoYW4sIHN5bmNfcmVmX2lkKTtcXG4rXFx0XFx0aWYgKHByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKSB7XFxuK1xcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0XFx0XFx0Y29udGludWU7IC8qIFJlZiBpcyBhbHJlYWR5IG5vbi1zZWxlY3RhYmxlICovXFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHpsMzA3M3hfY2hhbl9yZWZfcHJpb19zZXQoXFx1MDAyNmNoYW4sIHN5bmNfcmVmX2lkLFxcbiBcXHRcXHRcXHRcXHRcXHQgIFpMX0RQTExfUkVGX1BSSU9fTk9ORSk7XFxuLVxcdFxcdHJldHVybiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBcXHUwMDI2Y2hhbik7XFxuK1xcdFxcdGlmICh6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkLCBcXHUwMDI2Y2hhbikpXFxuK1xcdFxcdFxcdGRldl93YXJuKHpsZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHNldCByZWYgcHJpbyBvbiBEUExMJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCB6bGRwbGwtXFx1MDAzZWlkKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzeW5jX250ZiA9IHRydWU7XFxuK1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnpsZHBsbC1cXHUwMDNlbG9jayk7XFxuIFxcdH1cXG4rXFx0aWYgKHN5bmNfbnRmKVxcbitcXHRcXHRfX2RwbGxfcGluX2NoYW5nZV9udGYoc3luY19waW4tXFx1MDAzZWRwbGxfcGluKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbit1bmxvY2s6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2emxkcGxsLVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIHJjO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjIyLjU1MDMyOTI4N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2NjkwMTU2MjI5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgRFBMTCBzdWJzeXN0ZW0gKGRwbGxfbmV0bGluay5jKSBhbmQgdGhlIE1pY3Jvc2VtaSBaTDMwNzN4IERQTEwgZHJpdmVyICh6bDMwNzN4L2RwbGwuYykuIFRoZSBtb2RpZmllZCBjb2RlIGluIGRwbGxfbmV0bGluay5jIGhhbmRsZXMgbmV0bGluayBjb21tYW5kcyBmb3Igc2V0dGluZyBEUExMIHBpbiBwcm9wZXJ0aWVzLiBIb3dldmVyLCB0aGVzZSBuZXRsaW5rIGNvbW1hbmRzIHJlcXVpcmUgYSByZWdpc3RlcmVkIERQTEwgcGluIHRvIG9wZXJhdGUgb24uIERQTEwgcGlucyBhcmUgb25seSByZWdpc3RlcmVkIGJ5IHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgKEludGVsIEU4MDAgJ2ljZScsIE1lbGxhbm94IENvbm5lY3RYLTUgJ21seDUnLCBPQ1AgVGltZSBDYXJkICdwdHBfb2NwJywgYW5kIE1pY3Jvc2VtaSAnemwzMDczeCcpLiBOb25lIG9mIHRoZXNlIGhhcmR3YXJlIGRldmljZXMgYXJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGR1bW15IERQTEwgZHJpdmVyIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGFuZCB0aGUgemwzMDczeCBkcml2ZXIgY29kZSBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg4MGMyOGNmNWZmYzE2MTJmYmNiNjE5MTdkZDFiZjRiNWE5ZjA2MmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjE4OjIxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0XG5pbmRleCBmODMxNTA5MTc4MTRlLi43YzExN2FlMzdjYzFiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3RcbkBAIC0xMTYsOCArMTE2LDkgQEAgU2hhcmVkIHBpbnNcbiBBIHNpbmdsZSBwaW4gb2JqZWN0IGNhbiBiZSBhdHRhY2hlZCB0byBtdWx0aXBsZSBkcGxsIGRldmljZXMuXG4gVGhlbiB0aGVyZSBhcmUgdHdvIGdyb3VwcyBvZiBjb25maWd1cmF0aW9uIGtub2JzOlxuIFxuLTEpIFNldCBvbiBhIHBpbiAtIHRoZSBjb25maWd1cmF0aW9uIGFmZmVjdHMgYWxsIGRwbGwgZGV2aWNlcyBwaW4gaXNcbi0gICByZWdpc3RlcmVkIHRvIChpLmUuLCBgYERQTExfQV9QSU5fRlJFUVVFTkNZYGApLFxuKzEpIFNldCBvbiBhIHBpbiAtIHRoZSBjb25maWd1cmF0aW9uIGlzIGEgcHJvcGVydHkgb2YgdGhlIHBpbiBpdHNlbGYgYW5kXG4rICAgYXBwbGllcyB0byBhbGwgZHBsbCBkZXZpY2VzIHRoZSBwaW4gaXMgcmVnaXN0ZXJlZCB3aXRoXG4rICAgKGkuZS4sIGBgRFBMTF9BX1BJTl9GUkVRVUVOQ1lgYCksXG4gMikgU2V0IG9uIGEgcGluLWRwbGwgdHVwbGUgLSB0aGUgY29uZmlndXJhdGlvbiBhZmZlY3RzIG9ubHkgc2VsZWN0ZWRcbiAgICBkcGxsIGRldmljZSAoaS5lLiwgYGBEUExMX0FfUElOX1BSSU9gYCwgYGBEUExMX0FfUElOX1NUQVRFYGAsXG4gICAgYGBEUExMX0FfUElOX0RJUkVDVElPTmBgKS5cbkBAIC01MDcsOSArNTA4LDkgQEAgYXMgd2VsbCBhcyBwYXJhbWV0ZXIgYmVpbmcgY29uZmlndXJlZCAoYGBEUExMX0FfTU9ERWBgKS5cbiBgYERQTExfQ01EX1BJTl9TRVRgYCAtIHRvIHRhcmdldCBhIHBpbiB1c2VyIG11c3QgcHJvdmlkZSBhXG4gYGBEUExMX0FfUElOX0lEYGAsIHdoaWNoIGlzIHVuaXF1ZSBpZGVudGlmaWVyIG9mIGEgcGluIGluIHRoZSBzeXN0ZW0uXG4gQWxzbyBjb25maWd1cmVkIHBpbiBwYXJhbWV0ZXJzIG11c3QgYmUgYWRkZWQuXG4tSWYgYGBEUExMX0FfUElOX0ZSRVFVRU5DWWBgIGlzIGNvbmZpZ3VyZWQsIHRoaXMgYWZmZWN0cyBhbGwgdGhlIGRwbGxcbi1kZXZpY2VzIHRoYXQgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBwaW4sIHRoYXQgaXMgd2h5IGZyZXF1ZW5jeSBhdHRyaWJ1dGVcbi1zaGFsbCBub3QgYmUgZW5jbG9zZWQgaW4gYGBEUExMX0FfUElOX1BBUkVOVF9ERVZJQ0VgYC5cbitJZiBgYERQTExfQV9QSU5fRlJFUVVFTkNZYGAgaXMgY29uZmlndXJlZCwgaXQgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgcGluXG4raXRzZWxmIGFuZCBhcHBsaWVzIHRvIGFsbCBkcGxsIGRldmljZXMgdGhlIHBpbiBpcyByZWdpc3RlcmVkIHdpdGgsIHNvIHRoZVxuK2ZyZXF1ZW5jeSBhdHRyaWJ1dGUgc2hhbGwgbm90IGJlIGVuY2xvc2VkIGluIGBgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFYGAuXG4gT3RoZXIgYXR0cmlidXRlczogYGBEUExMX0FfUElOX1BSSU9gYCwgYGBEUExMX0FfUElOX1NUQVRFYGAgb3JcbiBgYERQTExfQV9QSU5fRElSRUNUSU9OYGAgbXVzdCBiZSBlbmNsb3NlZCBpblxuIGBgRFBMTF9BX1BJTl9QQVJFTlRfREVWSUNFYGAgYXMgdGhlaXIgY29uZmlndXJhdGlvbiByZWxhdGVzIHRvIG9ubHkgb25lXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jIGIvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG5pbmRleCBhZmIzMWMwMDQwMzgyLi5hOTA5Y2Q0NDUxYjAwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jXG4rKysgYi9kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcbkBAIC0xMDc5LDEwICsxMDc5LDkgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHU2NCBmcmVxID0gbmxhX2dldF91NjQoYSksIG9sZF9mcmVxO1xuLVx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkO1xuIFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xuK1x0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xuIFx0c3RydWN0IGRwbGxfZGV2aWNlICpkcGxsO1xuLVx0dW5zaWduZWQgbG9uZyBpO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghZHBsbF9waW5faXNfZnJlcV9zdXBwb3J0ZWQocGluLCBmcmVxKSkge1xuQEAgLTEwOTAsMjIgKzEwODksMTcgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoKCFvcHMtXHUwMDNlZnJlcXVlbmN5X3NldCB8fCAhb3BzLVx1MDAzZWZyZXF1ZW5jeV9nZXQpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgcmVmLVx1MDAzZWRwbGwtXHUwMDNlbW9kdWxlID09IHBpbi1cdTAwM2Vtb2R1bGUgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2VjbG9ja19pZCA9PSBwaW4tXHUwMDNlY2xvY2tfaWQpIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4tXHRcdFx0XHQgICAgICAgXCJmcmVxdWVuY3kgc2V0IG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZVwiKTtcbi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXHRcdH1cbi1cdH1cbiBcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xuIFx0aWYgKCFyZWYpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFwiKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbitcdGlmICghb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQgfHwgIW9wcy1cdTAwM2VmcmVxdWVuY3lfZ2V0KSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbitcdFx0XHQgICAgICAgXCJmcmVxdWVuY3kgc2V0IG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZVwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuIFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuIFx0cmV0ID0gb3BzLVx1MDAzZWZyZXF1ZW5jeV9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSwgZHBsbCxcbiBcdFx0XHRcdCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNm9sZF9mcmVxLCBleHRhY2spO1xuQEAgLTExMTYsNjggKzExMTAsNDIgQEAgZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRpZiAoZnJlcSA9PSBvbGRfZnJlcSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbi1cdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4tXHRcdGlmICghb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbi1cdFx0XHRcdFx0IGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgZnJlcSwgZXh0YWNrKTtcbi1cdFx0aWYgKHJldCkge1xuLVx0XHRcdGZhaWxlZCA9IHJlZjtcbi1cdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLCBcImZyZXF1ZW5jeSBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiV1XCIsXG4tXHRcdFx0XHRcdCAgIGRwbGwtXHUwMDNlaWQpO1xuLVx0XHRcdGdvdG8gcm9sbGJhY2s7XG4tXHRcdH1cbitcdHJldCA9IG9wcy1cdTAwM2VmcmVxdWVuY3lfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG4rXHRcdFx0XHQgZHBsbCwgZHBsbF9wcml2KGRwbGwpLCBmcmVxLCBleHRhY2spO1xuK1x0aWYgKHJldCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJmcmVxdWVuY3kgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldVwiLFxuK1x0XHRcdFx0ICAgZHBsbC1cdTAwM2VpZCk7XG4rXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGluKTtcbiBcbiBcdHJldHVybiAwO1xuLVxuLXJvbGxiYWNrOlxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlZnJlcXVlbmN5X3NldClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuLVx0XHRpZiAob3BzLVx1MDAzZWZyZXF1ZW5jeV9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbi1cdFx0XHRcdCAgICAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG9sZF9mcmVxLCBleHRhY2spKVxuLVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJzZXQgZnJlcXVlbmN5IHJvbGxiYWNrIGZhaWxlZFwiKTtcbi1cdH1cbi1cdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnRcbiBkcGxsX3Bpbl9lc3luY19zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXG4gXHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4tXHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWYsICpmYWlsZWQ7XG4gXHRjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHM7XG4gXHRzdHJ1Y3QgZHBsbF9waW5fZXN5bmMgZXN5bmM7XG4gXHR1NjQgZnJlcSA9IG5sYV9nZXRfdTY0KGEpO1xuK1x0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmO1xuIFx0c3RydWN0IGRwbGxfZGV2aWNlICpkcGxsO1xuIFx0Ym9vbCBzdXBwb3J0ZWQgPSBmYWxzZTtcbi1cdHVuc2lnbmVkIGxvbmcgaTtcbi1cdGludCByZXQ7XG4rXHRpbnQgcmV0LCBpO1xuIFxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoKCFvcHMtXHUwMDNlZXN5bmNfc2V0IHx8ICFvcHMtXHUwMDNlZXN5bmNfZ2V0KSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHJlZi1cdTAwM2VkcGxsLVx1MDAzZW1vZHVsZSA9PSBwaW4tXHUwMDNlbW9kdWxlIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgcmVmLVx1MDAzZWRwbGwtXHUwMDNlY2xvY2tfaWQgPT0gcGluLVx1MDAzZWNsb2NrX2lkKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuLVx0XHRcdFx0ICAgICAgIFwiZW1iZWRkZWQgc3luYyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkZXZpY2VcIik7XG4tXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLVx0XHR9XG4tXHR9XG4gXHRyZWYgPSBkcGxsX3Bpbl9vd25fZHBsbF9yZWZfZmlyc3QocGluKTtcbiBcdGlmICghcmVmKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJwaW4gb3duZXIgZHBsbCBub3QgZm91bmRcIik7XG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuIFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4rXHRpZiAoIW9wcy1cdTAwM2Vlc3luY19zZXQgfHwgIW9wcy1cdTAwM2Vlc3luY19nZXQpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuK1x0XHRcdCAgICAgICBcImVtYmVkZGVkIHN5bmMgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4gXHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG4gXHRyZXQgPSBvcHMtXHUwMDNlZXN5bmNfZ2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXG4gXHRcdFx0ICAgICBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNmVzeW5jLCBleHRhY2spO1xuQEAgLTExOTYsNDQgKzExNjQsMTcgQEAgZHBsbF9waW5fZXN5bmNfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICphLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuLVx0XHR2b2lkICpwaW5fZHBsbF9wcml2O1xuLVxuLVx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlZXN5bmNfc2V0KVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRkcGxsID0gcmVmLVx1MDAzZWRwbGw7XG4tXHRcdHBpbl9kcGxsX3ByaXYgPSBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKTtcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZWVzeW5jX3NldChwaW4sIHBpbl9kcGxsX3ByaXYsIGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcbi1cdFx0XHRcdCAgICAgIGZyZXEsIGV4dGFjayk7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRmYWlsZWQgPSByZWY7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbi1cdFx0XHRcdFx0ICAgXCJlbWJlZGRlZCBzeW5jIGZyZXF1ZW5jeSBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiAldVwiLFxuLVx0XHRcdFx0XHQgICBkcGxsLVx1MDAzZWlkKTtcbi1cdFx0XHRnb3RvIHJvbGxiYWNrO1xuLVx0XHR9XG4rXHRyZXQgPSBvcHMtXHUwMDNlZXN5bmNfc2V0KHBpbiwgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksIGRwbGwsXG4rXHRcdFx0ICAgICBkcGxsX3ByaXYoZHBsbCksIGZyZXEsIGV4dGFjayk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXG4rXHRcdFx0XHQgICBcImVtYmVkZGVkIHN5bmMgZnJlcXVlbmN5IHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6ICV1XCIsXG4rXHRcdFx0XHQgICBkcGxsLVx1MDAzZWlkKTtcbitcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwaW4pO1xuIFxuIFx0cmV0dXJuIDA7XG4tXG4tcm9sbGJhY2s6XG4tXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbi1cdFx0dm9pZCAqcGluX2RwbGxfcHJpdjtcbi1cbi1cdFx0aWYgKHJlZiA9PSBmYWlsZWQpXG4tXHRcdFx0YnJlYWs7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoIW9wcy1cdTAwM2Vlc3luY19zZXQpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbi1cdFx0cGluX2RwbGxfcHJpdiA9IGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pO1xuLVx0XHRpZiAob3BzLVx1MDAzZWVzeW5jX3NldChwaW4sIHBpbl9kcGxsX3ByaXYsIGRwbGwsIGRwbGxfcHJpdihkcGxsKSxcbi1cdFx0XHRcdCAgIGVzeW5jLmZyZXEsIGV4dGFjaykpXG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInNldCBlbWJlZGRlZCBzeW5jIGZyZXF1ZW5jeSByb2xsYmFjayBmYWlsZWRcIik7XG4tXHR9XG4tXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50XG5AQCAtMTI0MSwxNCArMTE4MiwxMiBAQCBkcGxsX3Bpbl9yZWZfc3luY19zdGF0ZV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgcmVmX3N5bmNfcGluX2lkeCxcbiBcdFx0XHQgICAgY29uc3QgZW51bSBkcGxsX3Bpbl9zdGF0ZSBzdGF0ZSxcbiBcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLVxuIHtcbi1cdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZiwgKmZhaWxlZDtcbiBcdGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcztcbiBcdGVudW0gZHBsbF9waW5fc3RhdGUgb2xkX3N0YXRlO1xuIFx0c3RydWN0IGRwbGxfcGluICpyZWZfc3luY19waW47XG4rXHRzdHJ1Y3QgZHBsbF9waW5fcmVmICpyZWY7XG4gXHRzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGw7XG4tXHR1bnNpZ25lZCBsb25nIGk7XG4gXHRpbnQgcmV0O1xuIFxuIFx0cmVmX3N5bmNfcGluID0geGFfZmluZChcdTAwMjZwaW4tXHUwMDNlcmVmX3N5bmNfcGlucywgXHUwMDI2cmVmX3N5bmNfcGluX2lkeCxcbkBAIC0xMjgyLDQyICsxMjIxLDIwIEBAIGRwbGxfcGluX3JlZl9zeW5jX3N0YXRlX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbixcbiBcdH1cbiBcdGlmIChzdGF0ZSA9PSBvbGRfc3RhdGUpXG4gXHRcdHJldHVybiAwO1xuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdG9wcyA9IGRwbGxfcGluX29wcyhyZWYpO1xuLVx0XHRpZiAoIW9wcy1cdTAwM2VyZWZfc3luY19zZXQpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZXJlZl9zeW5jX3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuLVx0XHRcdFx0XHRyZWZfc3luY19waW4sXG4tXHRcdFx0XHRcdGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLFxuLVx0XHRcdFx0XHRcdFx0ICAgICAgcmVmX3N5bmNfcGluKSxcbi1cdFx0XHRcdFx0c3RhdGUsIGV4dGFjayk7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRmYWlsZWQgPSByZWY7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywgXCJyZWZlcmVuY2Ugc3luYyBzZXQgZmFpbGVkIGZvciBkcGxsX2lkOiV1XCIsXG4tXHRcdFx0XHRcdCAgIGRwbGwtXHUwMDNlaWQpO1xuLVx0XHRcdGdvdG8gcm9sbGJhY2s7XG4tXHRcdH1cbitcbitcdHJldCA9IG9wcy1cdTAwM2VyZWZfc3luY19zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbitcdFx0XHRcdHJlZl9zeW5jX3BpbixcbitcdFx0XHRcdGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCByZWZfc3luY19waW4pLFxuK1x0XHRcdFx0c3RhdGUsIGV4dGFjayk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXG4rXHRcdFx0XHQgICBcInJlZmVyZW5jZSBzeW5jIHNldCBmYWlsZWQgZm9yIGRwbGxfaWQ6JXVcIixcbitcdFx0XHRcdCAgIGRwbGwtXHUwMDNlaWQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBpbik7XG4gXG4gXHRyZXR1cm4gMDtcbi1cbi1yb2xsYmFjazpcbi1cdHhhX2Zvcl9lYWNoKFx1MDAyNnBpbi1cdTAwM2VkcGxsX3JlZnMsIGksIHJlZikge1xuLVx0XHRpZiAocmVmID09IGZhaWxlZClcbi1cdFx0XHRicmVhaztcbi1cdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4tXHRcdGlmICghb3BzLVx1MDAzZXJlZl9zeW5jX3NldClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuLVx0XHRpZiAob3BzLVx1MDAzZXJlZl9zeW5jX3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuLVx0XHRcdFx0ICAgICAgcmVmX3N5bmNfcGluLFxuLVx0XHRcdFx0ICAgICAgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHJlZl9zeW5jX3BpbiksXG4tXHRcdFx0XHQgICAgICBvbGRfc3RhdGUsIGV4dGFjaykpXG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInNldCByZWZlcmVuY2Ugc3luYyByb2xsYmFjayBmYWlsZWRcIik7XG4tXHR9XG4tXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50XG5AQCAtMTQ3OCwxMSArMTM5NSwxMCBAQCBzdGF0aWMgaW50XG4gZHBsbF9waW5fcGhhc2VfYWRqX3NldChzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgc3RydWN0IG5sYXR0ciAqcGhhc2VfYWRqX2F0dHIsXG4gXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuLVx0c3RydWN0IGRwbGxfcGluX3JlZiAqcmVmLCAqZmFpbGVkO1xuIFx0Y29uc3Qgc3RydWN0IGRwbGxfcGluX29wcyAqb3BzO1xuIFx0czMyIHBoYXNlX2Fkaiwgb2xkX3BoYXNlX2FkajtcbitcdHN0cnVjdCBkcGxsX3Bpbl9yZWYgKnJlZjtcbiBcdHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbDtcbi1cdHVuc2lnbmVkIGxvbmcgaTtcbiBcdGludCByZXQ7XG4gXG4gXHRwaGFzZV9hZGogPSBubGFfZ2V0X3MzMihwaGFzZV9hZGpfYXR0cik7XG5AQCAtMTQ5OSwyMSArMTQxNSwxNiBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbi1cdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4tXHRcdGlmICgoIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3Rfc2V0IHx8ICFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X2dldCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICByZWYtXHUwMDNlZHBsbC1cdTAwM2Vtb2R1bGUgPT0gcGluLVx1MDAzZW1vZHVsZSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHJlZi1cdTAwM2VkcGxsLVx1MDAzZWNsb2NrX2lkID09IHBpbi1cdTAwM2VjbG9ja19pZCkge1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJwaGFzZSBhZGp1c3Qgbm90IHN1cHBvcnRlZFwiKTtcbi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXHRcdH1cbi1cdH1cbiBcdHJlZiA9IGRwbGxfcGluX293bl9kcGxsX3JlZl9maXJzdChwaW4pO1xuIFx0aWYgKCFyZWYpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInBpbiBvd25lciBkcGxsIG5vdCBmb3VuZFwiKTtcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXHR9XG4gXHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbitcdGlmICghb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQgfHwgIW9wcy1cdTAwM2VwaGFzZV9hZGp1c3RfZ2V0KSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJwaGFzZSBhZGp1c3Qgbm90IHN1cHBvcnRlZFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuIFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuIFx0cmV0ID0gb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9nZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbiBcdFx0XHRcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIFx1MDAyNm9sZF9waGFzZV9hZGosXG5AQCAtMTUyNSw0MSArMTQzNiwxNyBAQCBkcGxsX3Bpbl9waGFzZV9hZGpfc2V0KHN0cnVjdCBkcGxsX3BpbiAqcGluLCBzdHJ1Y3QgbmxhdHRyICpwaGFzZV9hZGpfYXR0cixcbiBcdGlmIChwaGFzZV9hZGogPT0gb2xkX3BoYXNlX2FkailcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR4YV9mb3JfZWFjaChcdTAwMjZwaW4tXHUwMDNlZHBsbF9yZWZzLCBpLCByZWYpIHtcbi1cdFx0b3BzID0gZHBsbF9waW5fb3BzKHJlZik7XG4tXHRcdGlmICghb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGRwbGwgPSByZWYtXHUwMDNlZHBsbDtcbi1cdFx0cmV0ID0gb3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLFxuLVx0XHRcdFx0XHQgICAgZHBsbF9waW5fb25fZHBsbF9wcml2KGRwbGwsIHBpbiksXG4tXHRcdFx0XHRcdCAgICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIHBoYXNlX2Fkaixcbi1cdFx0XHRcdFx0ICAgIGV4dGFjayk7XG4tXHRcdGlmIChyZXQpIHtcbi1cdFx0XHRmYWlsZWQgPSByZWY7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbi1cdFx0XHRcdFx0ICAgXCJwaGFzZSBhZGp1c3Qgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldVwiLFxuLVx0XHRcdFx0XHQgICBkcGxsLVx1MDAzZWlkKTtcbi1cdFx0XHRnb3RvIHJvbGxiYWNrO1xuLVx0XHR9XG4rXHRyZXQgPSBvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X3NldChwaW4sIGRwbGxfcGluX29uX2RwbGxfcHJpdihkcGxsLCBwaW4pLFxuK1x0XHRcdFx0ICAgIGRwbGwsIGRwbGxfcHJpdihkcGxsKSwgcGhhc2VfYWRqLCBleHRhY2spO1xuK1x0aWYgKHJldCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJwaGFzZSBhZGp1c3Qgc2V0IGZhaWxlZCBmb3IgZHBsbF9pZDoldVwiLFxuK1x0XHRcdFx0ICAgZHBsbC1cdTAwM2VpZCk7XG4rXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGluKTtcbiBcbiBcdHJldHVybiAwO1xuLVxuLXJvbGxiYWNrOlxuLVx0eGFfZm9yX2VhY2goXHUwMDI2cGluLVx1MDAzZWRwbGxfcmVmcywgaSwgcmVmKSB7XG4tXHRcdGlmIChyZWYgPT0gZmFpbGVkKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRvcHMgPSBkcGxsX3Bpbl9vcHMocmVmKTtcbi1cdFx0aWYgKCFvcHMtXHUwMDNlcGhhc2VfYWRqdXN0X3NldClcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0ZHBsbCA9IHJlZi1cdTAwM2VkcGxsO1xuLVx0XHRpZiAob3BzLVx1MDAzZXBoYXNlX2FkanVzdF9zZXQocGluLCBkcGxsX3Bpbl9vbl9kcGxsX3ByaXYoZHBsbCwgcGluKSxcbi1cdFx0XHRcdFx0ICBkcGxsLCBkcGxsX3ByaXYoZHBsbCksIG9sZF9waGFzZV9hZGosXG4tXHRcdFx0XHRcdCAgZXh0YWNrKSlcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwic2V0IHBoYXNlIGFkanVzdCByb2xsYmFjayBmYWlsZWRcIik7XG4tXHR9XG4tXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jIGIvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG5pbmRleCAwNDg4YWU2YWM0ODZjLi44M2JkMzAyN2RiYWExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jXG4rKysgYi9kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmNcbkBAIC0yNjMsOSArMjYzLDEwIEBAIHpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcmVmX3N5bmNfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqZHBsbF9waW4sXG4gXHR1OCBtb2RlLCByZWZfaWQsIHN5bmNfcmVmX2lkO1xuIFx0c3RydWN0IHpsMzA3M3hfY2hhbiBjaGFuO1xuIFx0c3RydWN0IHpsMzA3M3hfcmVmIHJlZjtcbitcdGJvb2wgc3luY19udGYgPSBmYWxzZTtcbiBcdGludCByYztcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4rXHRtdXRleF9sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbiBcbiBcdHJlZl9pZCA9IHpsMzA3M3hfaW5wdXRfcGluX3JlZl9nZXQocGluLVx1MDAzZWlkKTtcbiBcdHN5bmNfcmVmX2lkID0gemwzMDczeF9pbnB1dF9waW5fcmVmX2dldChzeW5jX3Bpbi1cdTAwM2VpZCk7XG5AQCAtMjg1LDE3ICsyODYsMjAgQEAgemwzMDczeF9kcGxsX2lucHV0X3Bpbl9yZWZfc3luY19zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiBcdFx0aWYgKHN5bmNfZnJlcSBcdTAwM2UgODAwMCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiBcdFx0XHRcdCAgICAgICBcInN5bmMgZnJlcXVlbmN5IG11c3QgYmUgOCBrSHogb3IgbGVzc1wiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRyYyA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0aWYgKHJlZl9mcmVxIFx1MDAzYyAxMDAwKSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuIFx0XHRcdFx0ICAgICAgIFwiY2xvY2sgZnJlcXVlbmN5IG11c3QgYmUgMSBrSHogb3IgbW9yZVwiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0XHRyYyA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0aWYgKHJlZl9mcmVxIFx1MDAzYz0gc3luY19mcmVxKSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuIFx0XHRcdFx0ICAgICAgIFwiY2xvY2sgZnJlcXVlbmN5IG11c3QgYmUgaGlnaGVyIHRoYW4gc3luYyBmcmVxdWVuY3lcIik7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdFx0cmMgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXG4gXHRcdHpsMzA3M3hfcmVmX3N5bmNfcGFpcl9zZXQoXHUwMDI2cmVmLCBzeW5jX3JlZl9pZCk7XG5AQCAtMzA4LDIwICszMTIsNTQgQEAgemwzMDczeF9kcGxsX2lucHV0X3Bpbl9yZWZfc3luY19zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpkcGxsX3BpbixcbiBcbiBcdHJjID0gemwzMDczeF9yZWZfc3RhdGVfc2V0KHpsZGV2LCByZWZfaWQsIFx1MDAyNnJlZik7XG4gXHRpZiAocmMpXG4tXHRcdHJldHVybiByYztcbitcdFx0Z290byB1bmxvY2s7XG4gXG4tXHQvKiBFeGNsdWRlIHN5bmMgc291cmNlIGZyb20gYXV0b21hdGljIHJlZmVyZW5jZSBzZWxlY3Rpb24gYnkgc2V0dGluZ1xuLVx0ICogaXRzIHByaW9yaXR5IHRvIE5PTkUuIE9uIGRpc2Nvbm5lY3QgdGhlIHByaW9yaXR5IGlzIGxlZnQgYXMgTk9ORVxuLVx0ICogYW5kIHRoZSB1c2VyIG11c3QgZXhwbGljaXRseSBtYWtlIHRoZSBwaW4gc2VsZWN0YWJsZSBhZ2Fpbi5cbitcdC8qIEFsbCBjb2RlIHBhdGhzIGFjY2Vzc2luZyBwZXItY2hhbm5lbCByZWZlcmVuY2UgcHJpb3JpdGllcyBhcmVcbitcdCAqIHNlcmlhbGl6ZWQgYnkgdGhlIHN1YnN5c3RlbSBkcGxsX2xvY2ssIHNvIGl0IGlzIHNhZmUgdG8gcmVsZWFzZVxuK1x0ICogb3VyIGxvY2sgaGVyZSBiZWZvcmUgaXRlcmF0aW5nIG92ZXIgdGhlIG90aGVyIGNoYW5uZWxzLlxuIFx0ICovXG4tXHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuK1x0aWYgKHN0YXRlICE9IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBUaGUgZGF0YXNoZWV0IHJlY29tbWVuZHMgZXhjbHVkaW5nIHRoZSBzeW5jIHNvdXJjZSBmcm9tIGF1dG9tYXRpY1xuK1x0ICogcmVmZXJlbmNlIHNlbGVjdGlvbiBieSBzZXR0aW5nIGl0cyBwcmlvcml0eSB0byBOT05FIG9uIGFsbCBEUExMXG4rXHQgKiBjaGFubmVscy4gVGhpcyBpcyBhZHZpc29yeSAtIHRoZSByZWYgc3luYyBwYWlyIGlzIGFscmVhZHlcbitcdCAqIGNvbmZpZ3VyZWQsIHNvIGEgZmFpbHVyZSBoZXJlIGlzIG5vdCBmYXRhbC4gT24gZGlzY29ubmVjdCB0aGVcbitcdCAqIHByaW9yaXR5IGlzIGxlZnQgYXMgTk9ORSBhbmQgdGhlIHVzZXIgbXVzdCBleHBsaWNpdGx5IG1ha2UgdGhlXG4rXHQgKiBwaW4gc2VsZWN0YWJsZSBhZ2Fpbi5cbitcdCAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeSh6bGRwbGwsIFx1MDAyNnpsZGV2LVx1MDAzZWRwbGxzLCBsaXN0KSB7XG4rXHRcdHU4IHByaW87XG4rXG4rXHRcdG11dGV4X2xvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1xuIFx0XHRjaGFuID0gKnpsMzA3M3hfY2hhbl9zdGF0ZV9nZXQoemxkZXYsIHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRcdHByaW8gPSB6bDMwNzN4X2NoYW5fcmVmX3ByaW9fZ2V0KFx1MDAyNmNoYW4sIHN5bmNfcmVmX2lkKTtcbitcdFx0aWYgKHByaW8gPT0gWkxfRFBMTF9SRUZfUFJJT19OT05FKSB7XG4rXHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnpsZHBsbC1cdTAwM2Vsb2NrKTtcbitcdFx0XHRjb250aW51ZTsgLyogUmVmIGlzIGFscmVhZHkgbm9uLXNlbGVjdGFibGUgKi9cbitcdFx0fVxuK1xuIFx0XHR6bDMwNzN4X2NoYW5fcmVmX3ByaW9fc2V0KFx1MDAyNmNoYW4sIHN5bmNfcmVmX2lkLFxuIFx0XHRcdFx0XHQgIFpMX0RQTExfUkVGX1BSSU9fTk9ORSk7XG4tXHRcdHJldHVybiB6bDMwNzN4X2NoYW5fc3RhdGVfc2V0KHpsZGV2LCB6bGRwbGwtXHUwMDNlaWQsIFx1MDAyNmNoYW4pO1xuK1x0XHRpZiAoemwzMDczeF9jaGFuX3N0YXRlX3NldCh6bGRldiwgemxkcGxsLVx1MDAzZWlkLCBcdTAwMjZjaGFuKSlcbitcdFx0XHRkZXZfd2Fybih6bGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgXCJGYWlsZWQgdG8gc2V0IHJlZiBwcmlvIG9uIERQTEwldVxcblwiLFxuK1x0XHRcdFx0IHpsZHBsbC1cdTAwM2VpZCk7XG4rXHRcdGVsc2VcbitcdFx0XHRzeW5jX250ZiA9IHRydWU7XG4rXG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZ6bGRwbGwtXHUwMDNlbG9jayk7XG4gXHR9XG4rXHRpZiAoc3luY19udGYpXG4rXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihzeW5jX3Bpbi1cdTAwM2VkcGxsX3Bpbik7XG4gXG4gXHRyZXR1cm4gMDtcbit1bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2emxkcGxsLVx1MDAzZWxvY2spO1xuK1x0cmV0dXJuIHJjO1xuIH1cbiBcbiBzdGF0aWMgaW50XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODoyMi41NTAzMzA0MTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDk5NjM3MzgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERQTEwgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgdGhlIERQTEwgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYGRwbGxfbmV0bGluay5jYCBhbmQgYGRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgc3RyZWFtbGluaW5nIGhvdyB3ZSBzZXQgcHJvcGVydGllcyBsaWtlIGZyZXF1ZW5jeSwgZXN5bmMsIHJlZl9zeW5jLCBhbmQgcGhhc2UgYWRqdXN0bWVudCBvbiBEUExMIHBpbnMuIEluc3RlYWQgb2YgaXRlcmF0aW5nIHRocm91Z2ggKmFsbCogRFBMTCBkZXZpY2VzIGNvbm5lY3RlZCB0byBhIHBpbiwgdGhlIGNvZGUgbm93IGZvY3VzZXMgb24ganVzdCB0aGUgXCJvd25lclwiIOKAkyB0aGUgZmlyc3QgRFBMTCBkZXZpY2UgdGhhdCdzIHJlZ2lzdGVyZWQgdG8gdGhlIHBpbiwgb2J0YWluZWQgZnJvbSBgZHBsbF9waW5fb3duX2RwbGxfcmVmX2ZpcnN0KHBpbilgLlxuXG5JIG5lZWQgdG8gZGlnIGluIGEgYml0IGRlZXBlciwgbGV0J3MgbG9vayBhdCBgZHBsbF9uZXRsaW5rLmNgIGZpcnN0LiBTcGVjaWZpY2FsbHksIHRoZSBgZHBsbF9waW5fZnJlcV9zZXRgIGZ1bmN0aW9uLiBJIHNlZSB0aGV5J3ZlIHJlbW92ZWQgdGhlIGxvb3AgKGB4YV9mb3JfZWFjaGApIHRoYXQgdXNlZCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHJlZmVyZW5jZXMgKGByZWZgKSBhc3NvY2lhdGVkIHdpdGggYSBwaW4uICBJbnN0ZWFkLCB0aGV5IG5vdyBjYWxsIHRoZSBmcmVxdWVuY3kgc2V0dGluZyBmdW5jdGlvbiBkaXJlY3RseSBvbiB0aGUgYGRwbGxgIHRoYXQgYmVsb25ncyB0byB0aGUgYHJlZmAgdGhhdCBpcyBkZXRlcm1pbmVkIHRvIGJlIHRoZSBvd25lci4gVGhleSBhbHNvIGNoZWNrIHRoYXQgZnJlcXVlbmN5IHNldHRpbmcgYW5kIGdldHRpbmcgYXJlIHN1cHBvcnRlZC4gSXQgbWFrZXMgc2Vuc2UsIGZvY3VzaW5nIG9uIHRoZSBwaW4gb3duZXIuXG5cblRoZSBkb2N1bWVudGF0aW9uIGlzIGltcG9ydGFudC4gSXQgY2xhcmlmaWVzIHRoYXQgd2hlbiBhIHByb3BlcnR5IGlzIHNldCBvbiBhIHBpbiAobGlrZSBmcmVxdWVuY3kgdmlhIGBEUExMX0FfUElOX0ZSRVFVRU5DWWApLCBpdCdzIGludGVuZGVkIHRvIGFmZmVjdCAqYWxsKiBEUExMIGRldmljZXMgY29ubmVjdGVkIHRvIHRoYXQgcGluLiAgU28sIHRoZSBkcml2ZXIgZWl0aGVyIGhhcyB0byBiZSBtYWRlIHJlc3BvbnNpYmxlIGZvciBhcHBseWluZyB0aGUgc2V0IHRvIGFsbCBEUExMcyBvciB0aGUgc3Vic3lzdGVtIGp1c3QgY2FsbHMgdGhlIG9wIG9uIHRoZSBvd25lci4gTm93LCB0aGlzIGNoYW5nZSBjb3VsZCBiZSB2YWxpZCBiZWNhdXNlIGl0IHNlZW1zIGxpa2UgdGhlIHJlc3BvbnNpYmlsaXR5IGlzIHNoaWZ0aW5nLCBwZXJoYXBzIHRoZSBkcml2ZXIgbm93IG5lZWRzIHRvIHRha2UgY2FyZSBvZiB0aGUgXCJhcHBseSB0byBhbGxcIiBsb2dpYywgb3IgbWF5YmUgdGhlIHN1YnN5c3RlbSBqdXN0IGNhbGxzIHRoZSBvcGVyYXRvciBvbiB0aGUgZmlyc3QgcmVnaXN0ZXJlZCBEUExMLCBhbmQgdGhlIGRyaXZlciBoYW5kbGVzIGl0IGludGVybmFsbHkuIEl0IGRlcGVuZHMgb24gdGhlIGRlc2lnbi5cblxuSG9sZCBvbiwgSSBzZWUgdGhleSd2ZSBhbHNvIG1vZGlmaWVkIGB6bDMwNzN4X2RwbGxfaW5wdXRfcGluX3JlZl9zeW5jX3NldGAuIFRoaXMgbWFrZXMgbWUgdGhpbmsuIEFyZSB3ZSBydW5uaW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2hlcmUgdGhpcyBjb2RlIG1pZ2h0IGJlIHJlYWNoZWQ/ICBEUExMIGlzIGEgRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCwgc28gaXQgbXVzdCB1c2UgcGh5c2ljYWwgZGV2aWNlcy4gSXMgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBhIERQTEwgZHJpdmVyPyBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYGRyaXZlcnMvZHBsbC9gIGRpcmVjdG9yeSB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyB1bnVzdWFsLiBUaGlzIHJhaXNlcyB0aGUgcXVlc3Rpb24gb2YgaG93IHRoZSB2aXJ0dWFsaXplZCB3b3JsZCBpbnRlcmFjdHMgd2l0aCBoYXJkd2FyZS1zcGVjaWZpYyBjb21wb25lbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjk2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6MzMuNTQ2NzA3NjM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvZHBsbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJkcGxsX2NvcmUuY1wiLFxuICAgIFwiZHBsbF9jb3JlLmhcIixcbiAgICBcImRwbGxfbmV0bGluay5jXCIsXG4gICAgXCJkcGxsX25ldGxpbmsuaFwiLFxuICAgIFwiZHBsbF9ubC5jXCIsXG4gICAgXCJkcGxsX25sLmhcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwiemwzMDczeFwiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjMzLjU0Njc2MDIxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTc4NDk0ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBEUExMIERyaXZlciBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB6bDMwNzN4YCBkcml2ZXIgZm9yIHRoZSBNaWNyb3NlbWkgWkwzMDczeCBEUExMcy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IEkgYWx3YXlzIGxpa2UgdG8gZW5zdXJlIEkndmUgZ290IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBUaGUgcXVlc3Rpb24gaXMsIGFyZSB0aGVyZSBhbnkgb3RoZXIgRFBMTCBkcml2ZXJzIGx1cmtpbmcgYXJvdW5kLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHRoZSBjb21tb25hbGl0eSBvZiBEUExMcyBpbiBuZXR3b3JraW5nIGNvbnRleHRzPyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBwb2tlIGFyb3VuZCBpbiB0aGUgb2J2aW91cyBwbGFjZTogYGRyaXZlcnMvbmV0L2V0aGVybmV0L2AuIFRoYXQgZGlyZWN0b3J5IGlzIGEgbG9naWNhbCBzdGFydGluZyBwb2ludDsgbG90cyBvZiBldGhlcm5ldCBkcml2ZXJzIGNvdWxkIHBvdGVudGlhbGx5IGluY29ycG9yYXRlIERQTEwgZnVuY3Rpb25hbGl0eSBmb3IgY2xvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZCB0aGVyZSBiZWZvcmUgZHJhd2luZyBhbnkgY29uY2x1c2lvbnMuIE5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyB0aGF0IG1pZ2h0IGludGVyYWN0LCBvciBwcm92aWRlIGEgYmV0dGVyIG92ZXJhbGwgc29sdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NzQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6MzcuMjQ0NjEyNDc4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3Njc5OTI2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBsbF9kZXZpY2VfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTU2OD1EZXZpY2Ugc2hvdWxkIGltcGxlbWVudCBzZXQgb2Ygb3BlcmF0aW9ucyBhbmQgcmVnaXN0ZXIgZGV2aWNlIHZpYVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdDo1Njk6ZHBsbF9kZXZpY2VfcmVnaXN0ZXIoKSBhdCB3aGljaCBwb2ludCBpdCBiZWNvbWVzIGF2YWlsYWJsZSB0byB0aGVcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QtNTcwLXVzZXJzLiBNdWx0aXBsZSBkcml2ZXIgaW5zdGFuY2VzIGNhbiBvYnRhaW4gcmVmZXJlbmNlIHRvIGl0IHdpdGhcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdD02MzQ9VGhlIHJlZ2lzdHJhdGlvbiBwYXJ0IGlzIHRoZW4gbG9va3MgbGlrZSB0aGlzIHBhcnQ6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QtNjQ1LVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdDo2NDY6ICAgICAgICBlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihicC1cXHUwMDNlZHBsbCwgRFBMTF9UWVBFX1BQUywgXFx1MDAyNmRwbGxfb3BzLCBicCk7XFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTY0Ny0gICAgICAgIGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9NDQ4PWRwbGxfZGV2aWNlX3JlZ2lzdHJhdGlvbl9maW5kKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjAtLyoqXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ2MTogKiBkcGxsX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVyIHRoZSBkcGxsIGRldmljZSBpbiB0aGUgc3Vic3lzdGVtXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2Mi0gKiBAZHBsbDogcG9pbnRlciB0byBhIGRwbGxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NzMtICovXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjQ3NDppbnQgZHBsbF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBlbnVtIGRwbGxfdHlwZSB0eXBlLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NzUtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKm9wcywgdm9pZCAqcHJpdilcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTctfVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo1MTg6RVhQT1JUX1NZTUJPTF9HUEwoZHBsbF9kZXZpY2VfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy01MTktXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTkzMD16bDMwNzN4X2RwbGxfcGluc19yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTk4MC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTk4MTogKiB6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgRFBMTCBkZXZpY2VcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTk4Mi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbCBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xOTg4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTk4OTp6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTk5MC17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAwNy1cXHR6bGRwbGwtXFx1MDAzZXR5cGUgPSB6bDMwNzN4X3Byb3BfZHBsbF90eXBlX2dldCh6bGRldiwgemxkcGxsLVxcdTAwM2VpZCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjIwMDg6XFx0cmMgPSBkcGxsX2RldmljZV9yZWdpc3Rlcih6bGRwbGwtXFx1MDAzZWRwbGxfZGV2LCB6bGRwbGwtXFx1MDAzZXR5cGUsXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMDktXFx0XFx0XFx0XFx0ICBcXHUwMDI2emxkcGxsLVxcdTAwM2VvcHMsIHpsZHBsbCk7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAyMi0gKiBVbnJlZ2lzdGVycyBnaXZlbiBEUExMIGRldmljZSBmcm9tIERQTEwgc3ViLXN5c3RlbSBwcmV2aW91c2x5IHJlZ2lzdGVyZWRcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjAyMzogKiBieSBAemwzMDczeF9kcGxsX2RldmljZV9yZWdpc3Rlci5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAyNC0gKi9cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0yNDQ4PXpsMzA3M3hfZHBsbF9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ1MS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjQ1MjpcXHRyYyA9IHpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIoemxkcGxsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjQ1My1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00MTk0PWljZV9kcGxsX2luaXRfZHBsbChzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsICpkLCBib29sIGNndSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMTUtXFx0XFx0XFx0aWNlX2RwbGxfdXBkYXRlX3N0YXRlKHBmLCBkLCB0cnVlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MjE2OlxcdFxcdHJldCA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKGQtXFx1MDAzZWRwbGwsIHR5cGUsIG9wcywgZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIxNy1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jPTQyMD1zdGF0aWMgaW50IG1seDVfZHBsbF9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmMtNDUxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmM6NDUyOlxcdGVyciA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKG1kcGxsLVxcdTAwM2VkcGxsLCBEUExMX1RZUEVfRUVDLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmMtNDUzLVxcdFxcdFxcdFxcdCAgIFxcdTAwMjZtbHg1X2RwbGxfZGV2aWNlX29wcywgbWRwbGwpO1xcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jPTUwNTk9cHRwX29jcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxMjQtXFxuZHJpdmVycy9wdHAvcHRwX29jcC5jOjUxMjU6XFx0ZXJyID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoYnAtXFx1MDAzZWRwbGwsIERQTExfVFlQRV9QUFMsIFxcdTAwMjZkcGxsX29wcywgYnApO1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTI2LVxcdGlmIChlcnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RwbGwuaD0yODA9dm9pZCBkcGxsX2RldmljZV9wdXQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpO1xcbmluY2x1ZGUvbGludXgvZHBsbC5oLTI4MS1cXG5pbmNsdWRlL2xpbnV4L2RwbGwuaDoyODI6aW50IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZW51bSBkcGxsX3R5cGUgdHlwZSxcXG5pbmNsdWRlL2xpbnV4L2RwbGwuaC0yODMtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgKm9wcywgdm9pZCAqcHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjM5LjAxMjYwOTk4NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0NzMyMDIyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRFBMTCBEcml2ZXIgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBEUExMIGRldmljZSBkcml2ZXJzOiBgemwzMDczeGAsIGBpY2VgLCBgbWx4NWAsIGFuZCBgcHRwX29jcGAuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSB0aGF0IHRoZXNlIGFyZSBhbGwgdGFyZ2V0aW5nIGFjdHVhbCBoYXJkd2FyZS4gVGhlcmUncyBub3RoaW5nIGhlcmUgdGhhdCBzY3JlYW1zIFwic29mdHdhcmUgZW11bGF0aW9uLlwiXG5cbk5vdywgYSBxdWVzdGlvbiBpcyBwb3BwaW5nIGludG8gbXkgaGVhZDogY2FuIEkgZ2V0IHRvIGBkcGxsX3Bpbl9mcmVxX3NldGAgc29tZWhvdyB3aXRob3V0IGdvaW5nIHRocm91Z2ggYSByZWdpc3RlcmVkIERQTEwgZGV2aWNlPyBUaGlua2luZyBpdCBvdmVyLCBpdCBkb2VzbuKAmXQgc2VlbSBwb3NzaWJsZSBzaW5jZSB0aGVzZSBuZXRsaW5rIGNvbW1hbmRzIHJlbHkgb24gYWxyZWFkeSByZWdpc3RlcmVkIGRldmljZXMgYW5kIHBpbnMuIEkgY2Fu4oCZdCBzZWUgYSByb3V0ZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aG91dCBhIGtub3duIGVudHJ5IHBvaW50LlxuXG5Pa2F5LCBzbyBjYW4gSSAqY3JlYXRlKiBhIERQTEwgZGV2aWNlIHVzaW5nIG5ldGxpbms/IFRoZSBhbnN3ZXIgaXMgbGlrZWx5IG5vLiBEcml2ZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgcmVnaXN0ZXJpbmcgdGhvc2UgRFBMTCBkZXZpY2VzLiBTbywgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBraW5kIG9mIG1vY2sgb3IgZHVtbXkgZHJpdmVyLiBMZXQncyBkaWcgaW50byB0aGF0IGBkcml2ZXJzL2RwbGwvYCBkaXJlY3RvcnkgYW5kIHNlZSB3aGF0J3MgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODAzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjQ4LjQ4NTgxNTQxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL2RwbGxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiZHBsbF9jb3JlLmNcIixcbiAgICBcImRwbGxfY29yZS5oXCIsXG4gICAgXCJkcGxsX25ldGxpbmsuY1wiLFxuICAgIFwiZHBsbF9uZXRsaW5rLmhcIixcbiAgICBcImRwbGxfbmwuY1wiLFxuICAgIFwiZHBsbF9ubC5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IFtcbiAgICBcInpsMzA3M3hcIlxuICBdXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODo0OC40ODU5MDE5MjNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjkxOTE5ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIGB6bDMwNzN4YCBEcml2ZXIqKlxuXG5Pa2F5LCBubyBuZWVkIHRvIHdhc3RlIHRpbWUgc2V0dGluZyB1cCBhIG1vY2sgZHJpdmVyOyB0aGF0J3Mgbm90IHRoZSBkaXJlY3Rpb24gSSBuZWVkIHRvIGdvIGluIHJpZ2h0IG5vdy4gV2FpdCBhIG1pbnV0ZeKApiBgemwzMDczeGAgLSBpc24ndCB0aGF0IGFuIFNQSS9JMkMgZGV2aWNlPyBSaWdodCwgaXQgaXMhIFRoZSBjcml0aWNhbCBxdWVzdGlvbiB0aGVuIGlzLCBjYW4gSSBpbnN0YW50aWF0ZSBpdCBkaXJlY3RseSB3aXRoaW4gYSB2aXJ0dWFsIG1hY2hpbmUgZW52aXJvbm1lbnQgdXNpbmcgc3lzZnMgb3IgZGV2aWNlIHRyZWU/IFRoYXQncyB0aGUga2V5IHRvIGVmZmljaWVudCB0ZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlIGhhcmR3YXJlIHdpbGwgYmUgaW5zdGFudGlhdGVkLlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGFjdHVhbCBkcml2ZXIgc291cmNlIGNvZGUuIFRpbWUgdG8gZXhhbWluZSBgZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgdGhlIHdheSB0aGlzIGRldmljZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIGlzIGRlZmluZWQuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGluaXRpYWxpemVkLCBjb25maWd1cmVkLCBhbmQgaG93IHRoZSBpbnRlcmZhY2Ugd2l0aCBTUEkvSTJDIGlzIGhhbmRsZWQuIFRoYXQgc2hvdWxkIHRlbGwgbWUgd2hldGhlciB2aXJ0dWFsIGluc3RhbnRpYXRpb24gaXMgZXZlbiBmZWFzaWJsZSwgYW5kIGlmIHNvLCBob3cgdG8gZ2V0IGl0IHdvcmtpbmcgZWZmZWN0aXZlbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzU0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE4OjUyLjc3NzgyNDQxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTE0NzA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6bDMwNzN4X2kyY19kcml2ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM9NDY9TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgemwzMDczeF9pMmNfb2ZfbWF0Y2gpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTQ3LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjQ4OnN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB6bDMwNzN4X2kyY19kcml2ZXIgPSB7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtNDktXFx0LmRyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTU1LX07XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmM6NTY6bW9kdWxlX2kyY19kcml2ZXIoemwzMDczeF9pMmNfZHJpdmVyKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9pMmMuYy01Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTg6NTQuMzk2OTc2NDA2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMjUxNDE0NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJMkMgRHJpdmVyIGluIGEgVmlydHVhbCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYW4gSTJDIGRyaXZlci4gUmlnaHQsIEkga25vdyBJIGNhbiBpbnN0YW50aWF0ZSBJMkMgZGV2aWNlcyB3aXRoaW4gUUVNVSBvciBHQ0UgdXNpbmcgc3lzZnMsIHNwZWNpZmljYWxseSB0aGUgYG5ld19kZXZpY2VgIGZlYXR1cmUgb24gYW4gSTJDIGFkYXB0ZXIuIFRoaW5ncyBsaWtlIGBpMmMtc3R1YmAgb3IgZXZlbiBgaTJjLWR1bW15YCBhcmUgcGVyZmVjdCBmb3IgdGhhdC4gQnV0IGhlcmUncyB3aGVyZSBJIG5lZWQgdG8gcGF1c2UgYW5kIHRoaW5rIGNyaXRpY2FsbHkuIE15IGNvbmNlcm4gaXMgdGhpczogZG9lcyB0aGUgYHpsMzA3M3hgIGRyaXZlciwgd2hhdGV2ZXIgaXQgaXMsIGFjdHVhbGx5IGF0dGVtcHQgYW55ICpoYXJkd2FyZSogYWNjZXNzIGR1cmluZyBpdHMgcHJvYmUgc2VxdWVuY2U/IElmIGl0IGRvZXMsIHRoZW4gdXNpbmcgYSBkdW1teSBJMkMgZGV2aWNlLCBob3dldmVyIGNvbnZlbmllbnQsIHdpbGwgbGlrZWx5IGZhaWwuIEl0J3MgYSBrZXkgcG9pbnQgdGhhdCBJIGNhbid0IG92ZXJsb29rLiBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGB6bDMwNzN4X3Byb2JlYCAob3IgYSBmdW5jdGlvbiB3aXRoIGEgc2ltaWxhciBuYW1lIGlmIHRoYXQncyBub3QgZXhhY3RseSBpdCkgZG9lcywgYW5kIHdoYXQgcmVnaXN0ZXJzIGl0IGlzIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGR1cmluZyBpbml0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjkxMCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxODo1OS43MjIxMjAwNTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDc0Mjg4MzUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfcHJvYmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjAxLjIyOTU1NTc0NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzIyMzAxNTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIGxhaWQgb3V0OlxuXG4qKkNoZWNraW5nIHRoZSBJMkMgRHJpdmVyIGZvciB0aGUgWkwzMDczeCoqXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBJMkMgZHJpdmVyIGltcGxlbWVudGF0aW9uIGZvciB0aGUgWkwzMDczeC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJMkMgY29tbXVuaWNhdGlvbiBpcyBoYW5kbGVkIGJlY2F1c2UsIGluIG15IGV4cGVyaWVuY2UsIHRoYXQncyBvZnRlbiBhIGtleSBhcmVhIGZvciBkZWJ1Z2dpbmcgYW5kIG9wdGltaXphdGlvbi4gVGhlIHNwZWNpZmljIGZpbGUgSSdtIHRhcmdldGluZyBpcyBgZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmNgLiBUaGlzIHRlbGxzIG1lIGltbWVkaWF0ZWx5IHdoZXJlIHRvIGxvb2sgd2l0aGluIHRoZSBjb2RlIGJhc2UuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlIFpMMzA3M3ggb3ZlciB0aGUgSTJDIGJ1cywgcG90ZW50aWFsbHkgaW5jbHVkaW5nIHRoaW5ncyBsaWtlIGFkZHJlc3MgZGVmaW5pdGlvbnMsIHJlZ2lzdGVyIG1hcHMsIGFuZCBlcnJvciBoYW5kbGluZyBmb3IgSTJDIHRyYW5zYWN0aW9ucy4gVGhpcyBmaWxlIGlzIG15IHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIEkyQyBjb21tdW5pY2F0aW9uIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjY3LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6MDQuOTUxODU5NDQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Rldl9wcmludGsuaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4gICA1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9pMmMuaFxcdTAwM2VcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcImNvcmUuaFxcXCJcXG4gIDEwOlxcdFxcbiAgMTE6XFx0c3RhdGljIGludCB6bDMwNzN4X2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KVxcbiAgMTI6XFx0e1xcbiAgMTM6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmNsaWVudC1cXHUwMDNlZGV2O1xcbiAgMTQ6XFx0XFx0c3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldjtcXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0emxkZXYgPSB6bDMwNzN4X2Rldm1fYWxsb2MoZGV2KTtcXG4gIDE3OlxcdFxcdGlmIChJU19FUlIoemxkZXYpKVxcbiAgMTg6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoemxkZXYpO1xcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHR6bGRldi1cXHUwMDNlcmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LCBcXHUwMDI2emwzMDczeF9yZWdtYXBfY29uZmlnKTtcXG4gIDIxOlxcdFxcdGlmIChJU19FUlIoemxkZXYtXFx1MDAzZXJlZ21hcCkpXFxuICAyMjpcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoemxkZXYtXFx1MDAzZXJlZ21hcCksXFxuICAyMzpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSByZWdtYXBcXFxcblxcXCIpO1xcbiAgMjQ6XFx0XFxuICAyNTpcXHRcXHRyZXR1cm4gemwzMDczeF9kZXZfcHJvYmUoemxkZXYpO1xcbiAgMjY6XFx0fVxcbiAgMjc6XFx0XFxuICAyODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgemwzMDczeF9pMmNfaWRbXSA9IHtcXG4gIDI5OlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczMVxcXCIgfSxcXG4gIDMwOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczMlxcXCIgfSxcXG4gIDMxOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczM1xcXCIgfSxcXG4gIDMyOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczNFxcXCIgfSxcXG4gIDMzOlxcdFxcdHsgLm5hbWUgPSBcXFwiemwzMDczNVxcXCIgfSxcXG4gIDM0OlxcdFxcdHsgLyogc2VudGluZWwgKi8gfVxcbiAgMzU6XFx0fTtcXG4gIDM2OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB6bDMwNzN4X2kyY19pZCk7XFxuICAzNzpcXHRcXG4gIDM4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHpsMzA3M3hfaTJjX29mX21hdGNoW10gPSB7XFxuICAzOTpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1pY3JvY2hpcCx6bDMwNzMxXFxcIiB9LFxcbiAgNDA6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtaWNyb2NoaXAsemwzMDczMlxcXCIgfSxcXG4gIDQxOlxcdFxcdHsgLmNvbXBhdGlibGUgPSBcXFwibWljcm9jaGlwLHpsMzA3MzNcXFwiIH0sXFxuICA0MjpcXHRcXHR7IC5jb21wYXRpYmxlID0gXFxcIm1pY3JvY2hpcCx6bDMwNzM0XFxcIiB9LFxcbiAgNDM6XFx0XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtaWNyb2NoaXAsemwzMDczNVxcXCIgfSxcXG4gIDQ0OlxcdFxcdHsgLyogc2VudGluZWwgKi8gfVxcbiAgNDU6XFx0fTtcXG4gIDQ2OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHpsMzA3M3hfaTJjX29mX21hdGNoKTtcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0c3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHpsMzA3M3hfaTJjX2RyaXZlciA9IHtcXG4gIDQ5OlxcdFxcdC5kcml2ZXIgPSB7XFxuICA1MDpcXHRcXHRcXHQubmFtZSA9IFxcXCJ6bDMwNzN4LWkyY1xcXCIsXFxuICA1MTpcXHRcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSB6bDMwNzN4X2kyY19vZl9tYXRjaCxcXG4gIDUyOlxcdFxcdH0sXFxuICA1MzpcXHRcXHQucHJvYmUgPSB6bDMwNzN4X2kyY19wcm9iZSxcXG4gIDU0OlxcdFxcdC5pZF90YWJsZSA9IHpsMzA3M3hfaTJjX2lkLFxcbiAgNTU6XFx0fTtcXG4gIDU2OlxcdG1vZHVsZV9pMmNfZHJpdmVyKHpsMzA3M3hfaTJjX2RyaXZlcik7XFxuICA1NzpcXHRcXG4gIDU4OlxcdE1PRFVMRV9BVVRIT1IoXFxcIkl2YW4gVmVjZXJhIFxcdTAwM2NpdmVjZXJhQHJlZGhhdC5jb21cXHUwMDNlXFxcIik7XFxuICA1OTpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1pY3JvY2hpcCBaTDMwNzN4IEkyQyBkcml2ZXJcXFwiKTtcXG4gIDYwOlxcdE1PRFVMRV9JTVBPUlRfTlMoXFxcIlpMMzA3M1hcXFwiKTtcXG4gIDYxOlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6MDQuOTUxOTM5MDEzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NTEzNTUzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgUHJvYmUgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGB6bDMwNzN4X2Rldl9wcm9iZWAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIGluaXRpYWwgZGV2aWNlIGRldGVjdGlvbiBhbmQgc2V0dXAuIFdlIGFsbCBrbm93IGhvdyBjcml0aWNhbCB0aGlzIGZ1bmN0aW9uIGlzOyBpdCdzIHRoZSBnYXRla2VlcGVyLCB0aGUgZmlyc3QgbGluZSBvZiBkZWZlbnNlIGFnYWluc3QgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gbmlnaHRtYXJlcy4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiBpbiB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmcsIHRoZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGVycm9yIGhhbmRsaW5nLiBJcyBpdCBmb2xsb3dpbmcgYmVzdCBwcmFjdGljZXMgZm9yIGRyaXZlciBkZXZlbG9wbWVudCwgb3IgYXJlIHdlIGdvaW5nIHRvIGJlIGNoYXNpbmcgZG93biBvYnNjdXJlIGhhcmR3YXJlIHF1aXJrcyBsYXRlcj8gSSB3YW50IHRvIHNlZSBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBJMkMgb3IgU1BJIGludGVyZmFjZSAob3Igd2hhdGV2ZXIgaXQncyB1c2luZyksIGlmIGl0J3MgY29ycmVjdGx5IGhhbmRsaW5nIHRoZSBpbnRlcnJ1cHQgc2V0dXAsIGFuZCBtb3N0IGltcG9ydGFudGx5LCBpZiBpdCBpcyBkb2luZyBhbGwgb2YgdGhpcyBzYWZlbHkuIEFueSBvYnZpb3VzIGNvbmN1cnJlbmN5IGlzc3Vlcz8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gcmVzb3VyY2UgYWNjZXNzPyBHb3R0YSBiZSB0aG9yb3VnaC4gVGhpcyBwcm9iZSBmdW5jdGlvbiBkZXRlcm1pbmVzIHRoZSByZWxpYWJpbGl0eSBvZiB0aGUgZW50aXJlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NzksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjExLjYwMzI5NjY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ4MTk3OTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfZGV2X3Byb2JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05MjY9emwzMDczeF9kZXZtX2RwbGxfaW5pdChzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk3My0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTc0OiAqIHpsMzA3M3hfZGV2X3Byb2JlIC0gaW5pdGlhbGl6ZSB6bDMwNzN4IGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05NzUtICogQHpsZGV2OiBwb2ludGVyIHRvIHpsMzA3M3ggZGV2aWNlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTgwLSAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5ODE6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk4Mi17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTA1My19XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjEwNTQ6RVhQT1JUX1NZTUJPTF9OU19HUEwoemwzMDczeF9kZXZfcHJvYmUsIFxcXCJaTDMwNzNYXFxcIik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwNTUtXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg9OTY9c3RydWN0IHpsMzA3M3hfZGV2ICp6bDMwNzN4X2Rldm1fYWxsb2Moc3RydWN0IGRldmljZSAqZGV2KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmg6OTc6aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaC05OC1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jPTExPXN0YXRpYyBpbnQgemwzMDczeF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jLTI0LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2kyYy5jOjI1OlxcdHJldHVybiB6bDMwNzN4X2Rldl9wcm9iZSh6bGRldik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvaTJjLmMtMjYtfVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM9MTE9c3RhdGljIGludCB6bDMwNzN4X3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmMtMjQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3BpLmM6MjU6XFx0cmV0dXJuIHpsMzA3M3hfZGV2X3Byb2JlKHpsZGV2KTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zcGkuYy0yNi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjEzLjE1MTUwMDE3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzQyMTY5OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYHpsMzA3M3hfZGV2X3Byb2JlYCwgYXMgSSB1bmRlcnN0YW5kIGl0OlxuXG4qKkFuYWx5emluZyB0aGUgYHpsMzA3M3hfZGV2X3Byb2JlYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIHNvIHRoZSBmaXJzdCB0aGluZyBJIHNlZSBpcyB3ZSdyZSBsb29raW5nIGF0IGB6bDMwNzN4X2Rldl9wcm9iZWAuIFRoYXQgbWVhbnMgd2UncmUgaW4gdGhlIHJlYWxtIG9mIGRldmljZSBwcm9iaW5nLCBhbmQgaXQncyBzcGVjaWZpY2FsbHkgZm9yIGEgYHpsMzA3M3hgIGRldmljZSwgd2hpY2ggSSdtIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgZ2VuZXJhbCBhcmNoaXRlY3R1cmUgb2YuIEknbSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIGF0dGVtcHRzIHRvIGlkZW50aWZ5LCBpbml0aWFsaXplLCBhbmQgcmVnaXN0ZXIgYSBuZXcgYHpsMzA3M3hgIGRldmljZSB0aGF0J3MgYmVlbiBwbHVnZ2VkIGluIG9yIGlzIG90aGVyd2lzZSBiZWNvbWluZyBhdmFpbGFibGUuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKlJlc291cmNlIGFsbG9jYXRpb24qKjogSG93IGFyZSB0aGV5IGdldHRpbmcgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMsIGxpa2UgbWVtb3J5IHJlZ2lvbnMsIElSUXMsIEkyQyBvciBTUEkgYnVzZXMsIGV0Yy4/IEkgd2FudCB0byBzZWUgaWYgdGhleSBhcmUgdXNpbmcgYW55IHBsYXRmb3JtLXNwZWNpZmljIG1lY2hhbmlzbXMgb3IgaWYgdGhlcmUncyBhIG1vcmUgZ2VuZXJpYyBhcHByb2FjaC4gQW55IHVudXN1YWwgYXBwcm9hY2hlcyBoZXJlIHdvdWxkIGJlIGludGVyZXN0aW5nLlxuKiAgICoqRGV2aWNlIGlkZW50aWZpY2F0aW9uKio6IEhvdyBpcyB0aGUgZHJpdmVyIHZlcmlmeWluZyB0aGUgZGV2aWNlIGlzICphY3R1YWxseSogYSBgemwzMDczeGA/IEFyZSB0aGV5IGNoZWNraW5nIGEgZGV2aWNlIElEIHJlZ2lzdGVyPyBWZW5kb3Itc3BlY2lmaWMgbWFnaWM/IEknbSBrZWVuIHRvIHNlZSB0aGUgYXBwcm9hY2ggYW5kIGFueSBwb3RlbnRpYWwgZm9yIHJvYnVzdG5lc3MgaXNzdWVzLlxuKiAgICoqSW5pdGlhbGl6YXRpb24gc2VxdWVuY2UqKjogV2hhdCBzdGVwcyBhcmUgdGFrZW4gdG8gZ2V0IHRoZSBkZXZpY2UgcmVhZHkgZm9yIHVzZT8gVGhpcyBjb3VsZCBpbmNsdWRlIHBvd2VyLXVwIHNlcXVlbmNlcywgcmVnaXN0ZXIgd3JpdGVzLCBjbG9jayBjb25maWd1cmF0aW9uLCBhbmQgcG9zc2libHkgZmlybXdhcmUgbG9hZGluZy4gSSdsbCBiZSBsb29raW5nIGF0IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zLCBwYXlpbmcgYXR0ZW50aW9uIHRvIGFueSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCB0aW1pbmcgY29uc3RyYWludHMuXG4qICAgKipEcml2ZXIgcmVnaXN0cmF0aW9uKio6IE9uY2UgdGhlIGRldmljZSBpcyByZWFkeSwgSSdsbCBiZSB3YXRjaGluZyB0byBzZWUgaG93IHRoZSBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIHRoZSBrZXJuZWwuIElzIGl0IHVzaW5nIHRoZSBzdGFuZGFyZCBkZXZpY2UgZHJpdmVyIG1vZGVsPyBBcmUgdGhlcmUgYW55IGN1c3RvbSBjYWxsYmFja3Mgb3Igc3RydWN0dXJlcz8gQW55IGN1c3RvbSBkYXRhIHN0cnVjdHVyZXMgb3IgaW50ZXJhY3Rpb25zIHdpbGwgYmUgb2YgaW50ZXJlc3QuXG4qICAgKipFcnJvciBoYW5kbGluZyoqOiBXaGVyZSBhcmUgdGhlIGVycm9yIGNoZWNrcz8gV2hhdCBoYXBwZW5zIGlmIGFueSBvZiB0aGUgY3JpdGljYWwgc3RlcHMgZmFpbD8gSSB3YW50IHRvIGFzc2VzcyB0aGUgcm9idXN0bmVzcyBvZiB0aGUgcHJvYmUgZnVuY3Rpb24gYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgd2Vha25lc3Nlcy4gSSdtIGV4cGVjdGluZyB0aG9yb3VnaCBlcnJvciBoYW5kbGluZywgZXNwZWNpYWxseSB3aGVuIGludGVyYWN0aW5nIHdpdGggaGFyZHdhcmUuXG4qICAgKipDb25jdXJyZW5jeSoqOiBJJ2xsIGFsc28gZ2xhbmNlIHRvIHNlZSBpZiBhbnl0aGluZyBoZXJlIGlzIHN1c2NlcHRpYmxlIHRvIGNvbmN1cnJlbmN5IGlzc3VlcyBhcyBJIGtub3cgaGFyZHdhcmUgcHJvYmluZyBjYW4gb2Z0ZW4gaGF2ZSBzaGFyZWQgcmVzb3VyY2VzLlxuXG5Fc3NlbnRpYWxseSwgSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEgZ2F0ZXdheS4gSXQgc2hvdWxkIGJlIG1ha2luZyBzdXJlIHRoYXQgdGhlIGRldmljZSBpcyBhY3R1YWxseSB0aGUgZGV2aWNlIHdlJ3JlIGV4cGVjdGluZywgYW5kIHRoZW4gZ2V0dGluZyBpdCByZWFkeSB0byBiZSB1c2VkIGJ5IHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBob3cgdGhleSd2ZSBkb25lIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTU3OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjE5Ljg5MzY3MjYzOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk3NCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5NzQ6XFx0ICogemwzMDczeF9kZXZfcHJvYmUgLSBpbml0aWFsaXplIHpsMzA3M3ggZGV2aWNlXFxuIDk3NTpcXHQgKiBAemxkZXY6IHBvaW50ZXIgdG8gemwzMDczeCBkZXZpY2VcXG4gOTc2OlxcdCAqXFxuIDk3NzpcXHQgKiBDb21tb24gaW5pdGlhbGl6YXRpb24gb2YgemwzMDczeCBkZXZpY2Ugc3RydWN0dXJlLlxcbiA5Nzg6XFx0ICpcXG4gOTc5OlxcdCAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgXFx1MDAzYzAgb24gZXJyb3JcXG4gOTgwOlxcdCAqL1xcbiA5ODE6XFx0aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuIDk4MjpcXHR7XFxuIDk4MzpcXHRcXHR1MTYgaWQsIHJldmlzaW9uLCBmd192ZXI7XFxuIDk4NDpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4gOTg1OlxcdFxcdHUzMiBjZmdfdmVyO1xcbiA5ODY6XFx0XFx0aW50IHJjO1xcbiA5ODc6XFx0XFxuIDk4ODpcXHRcXHQvKiBSZWFkIGNoaXAgSUQgKi9cXG4gOTg5OlxcdFxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcXHUwMDI2aWQpO1xcbiA5OTA6XFx0XFx0aWYgKHJjKVxcbiA5OTE6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbiA5OTI6XFx0XFxuIDk5MzpcXHRcXHQvKiBEZXRlY3QgY2hpcCB2YXJpYW50ICovXFxuIDk5NDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKTsgaSsrKSB7XFxuIDk5NTpcXHRcXHRcXHRpZiAoemwzMDczeF9jaGlwX2lkc1tpXS5pZCA9PSBpZClcXG4gOTk2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA5OTc6XFx0XFx0fVxcbiA5OTg6XFx0XFxuIDk5OTpcXHRcXHRpZiAoaSA9PSBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpKVxcbjEwMDA6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgLUVOT0RFVixcXG4xMDAxOlxcdFxcdFxcdFxcdFxcdCAgICAgXFxcIlVua25vd24gY2hpcCBJRDogMHglMDR4XFxcXG5cXFwiLCBpZCk7XFxuMTAwMjpcXHRcXG4xMDAzOlxcdFxcdHpsZGV2LVxcdTAwM2VpbmZvID0gXFx1MDAyNnpsMzA3M3hfY2hpcF9pZHNbaV07XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdC8qIFJlYWQgcmV2aXNpb24sIGZpcm13YXJlIHZlcnNpb24gYW5kIGN1c3RvbSBjb25maWcgdmVyc2lvbiAqL1xcbjEwMDY6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFxcdTAwMjZyZXZpc2lvbik7XFxuMTAwNzpcXHRcXHRpZiAocmMpXFxuMTAwODpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuMTAwOTpcXHRcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19GV19WRVIsIFxcdTAwMjZmd192ZXIpO1xcbjEwMTA6XFx0XFx0aWYgKHJjKVxcbjEwMTE6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjEwMTI6XFx0XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTMyKHpsZGV2LCBaTF9SRUdfQ1VTVE9NX0NPTkZJR19WRVIsIFxcdTAwMjZjZmdfdmVyKTtcXG4xMDEzOlxcdFxcdGlmIChyYylcXG4xMDE0OlxcdFxcdFxcdHJldHVybiByYztcXG4xMDE1OlxcdFxcbjEwMTY6XFx0XFx0ZGV2X2RiZyh6bGRldi1cXHUwMDNlZGV2LCBcXFwiQ2hpcElEKCVYKSwgQ2hpcFJldiglWCksIEZ3VmVyKCV1KVxcXFxuXFxcIiwgaWQsXFxuMTAxNzpcXHRcXHRcXHRyZXZpc2lvbiwgZndfdmVyKTtcXG4xMDE4OlxcdFxcdGRldl9kYmcoemxkZXYtXFx1MDAzZWRldiwgXFxcIkN1c3RvbSBjb25maWcgdmVyc2lvbjogJWx1LiVsdS4lbHUuJWx1XFxcXG5cXFwiLFxcbjEwMTk6XFx0XFx0XFx0RklFTERfR0VUKEdFTk1BU0soMzEsIDI0KSwgY2ZnX3ZlciksXFxuMTAyMDpcXHRcXHRcXHRGSUVMRF9HRVQoR0VOTUFTSygyMywgMTYpLCBjZmdfdmVyKSxcXG4xMDIxOlxcdFxcdFxcdEZJRUxEX0dFVChHRU5NQVNLKDE1LCA4KSwgY2ZnX3ZlciksXFxuMTAyMjpcXHRcXHRcXHRGSUVMRF9HRVQoR0VOTUFTSyg3LCAwKSwgY2ZnX3ZlcikpO1xcbjEwMjM6XFx0XFxuMTAyNDpcXHRcXHQvKiBHZW5lcmF0ZSByYW5kb20gY2xvY2sgSUQgYXMgdGhlIGRldmljZSBoYXMgbm90IHN1Y2ggcHJvcGVydHkgdGhhdFxcbjEwMjU6XFx0XFx0ICogY291bGQgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiBBIHVzZXIgY2FuIGxhdGVyIGNoYW5nZSB0aGlzIHZhbHVlXFxuMTAyNjpcXHRcXHQgKiB1c2luZyBkZXZsaW5rLlxcbjEwMjc6XFx0XFx0ICovXFxuMTAyODpcXHRcXHR6bGRldi1cXHUwMDNlY2xvY2tfaWQgPSBnZXRfcmFuZG9tX3U2NCgpO1xcbjEwMjk6XFx0XFxuMTAzMDpcXHRcXHQvKiBEZWZhdWx0IHBoYXNlIG9mZnNldCBhdmVyYWdpbmcgZmFjdG9yICovXFxuMTAzMTpcXHRcXHR6bGRldi1cXHUwMDNlcGhhc2VfYXZnX2ZhY3RvciA9IDI7XFxuMTAzMjpcXHRcXG4xMDMzOlxcdFxcdC8qIEluaXRpYWxpemUgbXV0ZXggZm9yIG9wZXJhdGlvbnMgd2hlcmUgbXVsdGlwbGUgcmVhZHMsIHdyaXRlc1xcbjEwMzQ6XFx0XFx0ICogYW5kL29yIHBvbGxzIGFyZSByZXF1aXJlZCB0byBiZSBkb25lIGF0b21pY2FsbHkuXFxuMTAzNTpcXHRcXHQgKi9cXG4xMDM2OlxcdFxcdHJjID0gZGV2bV9tdXRleF9pbml0KHpsZGV2LVxcdTAwM2VkZXYsIFxcdTAwMjZ6bGRldi1cXHUwMDNlbXVsdGlvcF9sb2NrKTtcXG4xMDM3OlxcdFxcdGlmIChyYylcXG4xMDM4OlxcdFxcdFxcdHJldHVybiBkZXZfZXJyX3Byb2JlKHpsZGV2LVxcdTAwM2VkZXYsIHJjLFxcbjEwMzk6XFx0XFx0XFx0XFx0XFx0ICAgICBcXFwiRmFpbGVkIHRvIGluaXRpYWxpemUgbXV0ZXhcXFxcblxcXCIpO1xcbjEwNDA6XFx0XFxuMTA0MTpcXHRcXHQvKiBSZWdpc3RlciBEUExMIGNoYW5uZWxzICovXFxuMTA0MjpcXHRcXHRyYyA9IHpsMzA3M3hfZGV2bV9kcGxsX2luaXQoemxkZXYpO1xcbjEwNDM6XFx0XFx0aWYgKHJjKVxcbjEwNDQ6XFx0XFx0XFx0cmV0dXJuIHJjO1xcbjEwNDU6XFx0XFxuMTA0NjpcXHRcXHQvKiBSZWdpc3RlciB0aGUgZGV2bGluayBpbnN0YW5jZSBhbmQgcGFyYW1ldGVycyAqL1xcbjEwNDc6XFx0XFx0cmMgPSB6bDMwNzN4X2RldmxpbmtfcmVnaXN0ZXIoemxkZXYpO1xcbjEwNDg6XFx0XFx0aWYgKHJjKVxcbjEwNDk6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoemxkZXYtXFx1MDAzZWRldiwgcmMsXFxuMTA1MDpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGV2bGluayBpbnN0YW5jZVxcXFxuXFxcIik7XFxuMTA1MTpcXHRcXG4xMDUyOlxcdFxcdHJldHVybiAwO1xcbjEwNTM6XFx0fVxcbjEwNTQ6XFx0RVhQT1JUX1NZTUJPTF9OU19HUEwoemwzMDczeF9kZXZfcHJvYmUsIFxcXCJaTDMwNzNYXFxcIik7XFxuMTA1NTpcXHRcXG4xMDU2OlxcdE1PRFVMRV9BVVRIT1IoXFxcIkl2YW4gVmVjZXJhIFxcdTAwM2NpdmVjZXJhQHJlZGhhdC5jb21cXHUwMDNlXFxcIik7XFxuMTA1NzpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1pY3JvY2hpcCBaTDMwNzN4IGNvcmUgZHJpdmVyXFxcIik7XFxuMTA1ODpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjE5Ljg5Mzc4ODIxOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Mjk4MDAxMjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgSTJDIERldmljZSBQcm9iaW5nIGFuZCBNb2NraW5nIFBvc3NpYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHByb2JlIGZ1bmN0aW9uLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0IHJlYWRzIGEgY2hpcCBJRCBmcm9tIHRoZSBJMkMgZGV2aWNlLiBJZiBpdCBnZXRzIGEgdmFsaWQgSUQsIGl0IG1vdmVzIG9uOyBvdGhlcndpc2UsIGl0IGVycm9ycyBvdXQuIFRoZSBjcnVjaWFsIHRoaW5nIGlzIHRoYXQgdGhpcyBlYXJseSByZWFkIGlzIGdvaW5nIHRvIGJlIGEgaGFyZCByZXF1aXJlbWVudCBmb3IgdGhlIGRyaXZlciB0byBldmVuICpzdGFydCouXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHRoaXMgYmUgbW9ja2VkIHdpdGhpbiBRRU1VPyBBbG1vc3QgY2VydGFpbmx5IG5vdCwgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWFsaXplZCBRRU1VIGRldmljZSBtb2RlbCBmb3IgdGhlIHpsMzA3M3gsIHdoaWNoIGlzIGhpZ2hseSB1bmxpa2VseS4gVGhhdCdzIGEgbmljaGUgcGFydC4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gdGhpbmsgbW9yZSBjcmVhdGl2ZWx5LlxuXG5UaGVuIG15IGJyYWluIGRhcnRzIHRvIHN5emthbGxlciBhbmQgaXRzIGNhcGFiaWxpdGllcyBmb3IgbW9ja2luZy4gQ2FuIEkgdXNlIHNvbWV0aGluZyBsaWtlIGBpMmMtc3R1YmAgb3IgYGkyYy1kdW1teWA/IE5vLCBgaTJjLXN0dWJgIGhhcyBsaW1pdGF0aW9uczsgaXQgc2VlbXMgdG8gZWl0aGVyIG9ubHkgc3VwcG9ydCBhIGhhbmRmdWwgb2Ygc3BlY2lmaWMgY2hpcHMgb3IgcmVsaWVzIG9uIHN5c2ZzLWJhc2VkIHJlZ2lzdGVyIGludGVyYWN0aW9uLiBBbmQgdGhlIHpsMzA3M3ggaXMgZGVmaW5pdGVseSAqbm90KiBwcmUtcHJvZ3JhbW1lZCBpbnRvIGBpMmMtc3R1YmAncyBrbm93biBsaXN0LiBVbmxlc3Mgc3l6a2FsbGVyIGhhcyBzb21lIHNwZWNpYWwgc2F1Y2UgZm9yIGluamVjdGluZyBJMkMgcmVzcG9uc2VzLCB3aGljaCBpc24ndCBzdGFuZGFyZCwgdGhpcyBpcyBnb2luZyB0byBiZSBhIGRlYWQgZW5kIGZvciBhIHNpbXBsZSBtb2NrLlxuXG5Ob3cgSSdtIHRyeWluZyB0byByZWNhbGwgdGhlIHBhdHRlcm5zLiBXaXRoIFVTQiBkZXZpY2VzLCB3aWZpLCBhbmQgbmV0d29yayBpbnRlcmZhY2VzLCB0aGVyZSBhcmUgXCJzaW1cIiBkZXZpY2VzIGluIHN5emthbGxlci4gRG9lcyB0aGUgSTJDIGVjb3N5c3RlbSBoYXZlIGEgY291bnRlcnBhcnQ/IFByb2JhYmx5IG5vdC4gVGhlIHByb2JsZW0gd2l0aCBJMkMgaXMgaXQgaXMgc28gdGllZCB0byBzcGVjaWZpYyBoYXJkd2FyZS4gSSdtIGFsbW9zdCBjZXJ0YWluIGBpMmMtc3R1YmAgaXMganVzdCBhIGJhc2ljIFNNQnVzIHN0dWIsIG5vdCBhIGdlbmVyYWwtcHVycG9zZSBtb2NraW5nIHRvb2wuXG5cbk15IHRob3VnaHRzIGFyZSBub3cgdHVybmluZyB0b3dhcmRzIHVucmVsYXRlZCBwaWVjZXMgb2YgdGhlIHB1enpsZSAtIHRob3NlIGNoYW5nZXMgaW4gYGRwbGxfbmV0bGluay5jYC4gSSBoYXZlIHRvIHN0ZXAgYmFjayBhbmQgcmVtZW1iZXIgd2hhdCB0aGVzZSBmaWxlcyBhcmUgYWJvdXQuIFRoZXNlIGNoYW5nZXMgcmVsYXRlIHRvIHRoZSBjb3JlIERQTEwgc3Vic3lzdGVtLCB3aGljaCBjb3VsZCBiZSB1c2VmdWwgdG8gbXkgcHJvamVjdCEgVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIEkgY2FuIHJlYWNoIHRoZSBEUExMIHN1YnN5c3RlbSB3aXRob3V0IGFueSBwaHlzaWNhbCBkZXZpY2UuIEl0IG1heSBiZSBwb3NzaWJsZSBpZiBvdGhlciBkcml2ZXJzIHJlZ2lzdGVyIERQTEwgZGV2aWNlcy4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLiBJIG5lZWQgdG8gY2hlY2sgaWYgYW55IG90aGVyIGRyaXZlcnMgd2lsbCByZWdpc3RlciBhIERQTEwgZGV2aWNlIGluIHRoZSBhYnNlbmNlIG9mIHRoZSB6bDMwNzN4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY1MiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjI5LjE5MTc5MTI5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2OTI1NjY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX2RldmljZV9yZWdpc3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q9NTY4PURldmljZSBzaG91bGQgaW1wbGVtZW50IHNldCBvZiBvcGVyYXRpb25zIGFuZCByZWdpc3RlciBkZXZpY2UgdmlhXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0OjU2OTpkcGxsX2RldmljZV9yZWdpc3RlcigpIGF0IHdoaWNoIHBvaW50IGl0IGJlY29tZXMgYXZhaWxhYmxlIHRvIHRoZVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC01NzAtdXNlcnMuIE11bHRpcGxlIGRyaXZlciBpbnN0YW5jZXMgY2FuIG9idGFpbiByZWZlcmVuY2UgdG8gaXQgd2l0aFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTYzND1UaGUgcmVnaXN0cmF0aW9uIHBhcnQgaXMgdGhlbiBsb29rcyBsaWtlIHRoaXMgcGFydDpcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC02NDUtXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0OjY0NjogICAgICAgIGVyciA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKGJwLVxcdTAwM2VkcGxsLCBEUExMX1RZUEVfUFBTLCBcXHUwMDI2ZHBsbF9vcHMsIGJwKTtcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3QtNjQ3LSAgICAgICAgaWYgKGVycilcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz00NDg9ZHBsbF9kZXZpY2VfcmVnaXN0cmF0aW9uX2ZpbmQoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ2MC0vKipcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDYxOiAqIGRwbGxfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgdGhlIGRwbGwgZGV2aWNlIGluIHRoZSBzdWJzeXN0ZW1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDYyLSAqIEBkcGxsOiBwb2ludGVyIHRvIGEgZHBsbFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3My0gKi9cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NDc0OmludCBkcGxsX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGVudW0gZHBsbF90eXBlIHR5cGUsXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTQ3NS1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzLCB2b2lkICpwcml2KVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUxNy19XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjUxODpFWFBPUlRfU1lNQk9MX0dQTChkcGxsX2RldmljZV9yZWdpc3Rlcik7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTUxOS1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xOTMwPXpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTgwLS8qKlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxOTgxOiAqIHpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIgLSByZWdpc3RlciBEUExMIGRldmljZVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTgyLSAqIEB6bGRwbGw6IHBvaW50ZXIgdG8gemwzMDczeF9kcGxsIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE5ODg9c3RhdGljIGludFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxOTg5OnpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTkwLXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDA3LVxcdHpsZHBsbC1cXHUwMDNldHlwZSA9IHpsMzA3M3hfcHJvcF9kcGxsX3R5cGVfZ2V0KHpsZGV2LCB6bGRwbGwtXFx1MDAzZWlkKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MjAwODpcXHRyYyA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKHpsZHBsbC1cXHUwMDNlZHBsbF9kZXYsIHpsZHBsbC1cXHUwMDNldHlwZSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMjAwOS1cXHRcXHRcXHRcXHQgIFxcdTAwMjZ6bGRwbGwtXFx1MDAzZW9wcywgemxkcGxsKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDIyLSAqIFVucmVnaXN0ZXJzIGdpdmVuIERQTEwgZGV2aWNlIGZyb20gRFBMTCBzdWItc3lzdGVtIHByZXZpb3VzbHkgcmVnaXN0ZXJlZFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyMDIzOiAqIGJ5IEB6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyLlxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDI0LSAqL1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTI0NDg9emwzMDczeF9kcGxsX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDUxLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyNDUyOlxcdHJjID0gemwzMDczeF9kcGxsX2RldmljZV9yZWdpc3Rlcih6bGRwbGwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yNDUzLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQxOTQ9aWNlX2RwbGxfaW5pdF9kcGxsKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGwgKmQsIGJvb2wgY2d1LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIxNS1cXHRcXHRcXHRpY2VfZHBsbF91cGRhdGVfc3RhdGUocGYsIGQsIHRydWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyMTY6XFx0XFx0cmV0ID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoZC1cXHUwMDNlZHBsbCwgdHlwZSwgb3BzLCBkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjE3LVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmM9NDIwPXN0YXRpYyBpbnQgbWx4NV9kcGxsX3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYy00NTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYzo0NTI6XFx0ZXJyID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIobWRwbGwtXFx1MDAzZWRwbGwsIERQTExfVFlQRV9FRUMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYy00NTMtXFx0XFx0XFx0XFx0ICAgXFx1MDAyNm1seDVfZHBsbF9kZXZpY2Vfb3BzLCBtZHBsbCk7XFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NTA1OT1wdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTEyNC1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM6NTEyNTpcXHRlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihicC1cXHUwMDNlZHBsbCwgRFBMTF9UWVBFX1BQUywgXFx1MDAyNmRwbGxfb3BzLCBicCk7XFxuZHJpdmVycy9wdHAvcHRwX29jcC5jLTUxMjYtXFx0aWYgKGVycilcXG4tLVxcbmluY2x1ZGUvbGludXgvZHBsbC5oPTI4MD12b2lkIGRwbGxfZGV2aWNlX3B1dChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGRwbGxfdHJhY2tlciAqdHJhY2tlcik7XFxuaW5jbHVkZS9saW51eC9kcGxsLmgtMjgxLVxcbmluY2x1ZGUvbGludXgvZHBsbC5oOjI4MjppbnQgZHBsbF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCBlbnVtIGRwbGxfdHlwZSB0eXBlLFxcbmluY2x1ZGUvbGludXgvZHBsbC5oLTI4My1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlX29wcyAqb3BzLCB2b2lkICpwcml2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6MzAuNzYxMDU2NzQyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTE4NzE1NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRGV2aWNlIERyaXZlciBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYXZhaWxhYmxlIGRyaXZlcnMgYW5kIGl0IHNlZW1zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHByZXR0eSBzcGVjaWZpYyBoYXJkd2FyZSBzZXQuIFRoZSBsaXN0IG9ubHkgaW5jbHVkZXMgYHpsMzA3M3hgLCBgaWNlYCwgYG1seDVgLCBhbmQgYHB0cF9vY3BgLiBSaWdodCwgc28gYGljZWAgaXMgSW50ZWwncyBFODAwIHNlcmllcyBQQ0llIE5JQywgYG1seDVgIGlzIGEgTWVsbGFub3ggQ29ubmVjdFgtNSsgUENJZSBOSUMsIGFuZCBgcHRwX29jcGAgaXMgdGhlIE9wZW4gQ29tcHV0ZSBQcm9qZWN0IFRpbWUgQ2FyZCwgYWxzbyBQQ0llLiBUaGVuIHRoZXJlJ3MgYHpsMzA3M3hgLCB3aGljaCBpcyB0aGF0IE1pY3Jvc2VtaSBaTDMwNzN4IEkyQy9TUEkgRFBMTC5cblxuVGhlIGltcG9ydGFudCB0aGluZyB0byBub3RlIGhlcmUgaXMgdGhhdCBub25lIG9mIHRoZXNlIGFyZSBzb2Z0d2FyZSBlbXVsYXRlZCBkcml2ZXJzLiBUaGV5IGFyZSBhbGwgaW50ZXJhY3RpbmcgZGlyZWN0bHkgd2l0aCBoYXJkd2FyZS5cblxuTXkgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBzeXN0ZW0gaXMgc2V0IHVwIGNvcnJlY3RseSBmb3IgdGhlIERQTEwuIFRoZSBxdWVzdGlvbiBpcywgY2FuIHdlIGFjdHVhbGx5IHJlYWNoIHRoZSBgZHBsbF9waW5fZnJlcV9zZXRgIGZ1bmN0aW9uIHdpdGhvdXQgYSBjb3JyZWN0bHkgcmVnaXN0ZXJlZCBEUExMIGRldmljZT8gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHBvaW50IG9mIGZhaWx1cmUuIEkgc2hvdWxkIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZHBsbF9uZXRsaW5rLmNgIHRvIHNlZSBob3cgdGhlIERQTEwgZGV2aWNlIGlzIGNoZWNrZWQgYW5kIHJlZ2lzdGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTgwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjM2LjE3MjkzMTg3NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MzA4MDk5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX3Bpbl9mcmVxX3NldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTA3Nz1zdGF0aWMgaW50XFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjEwNzg6ZHBsbF9waW5fZnJlcV9zZXQoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBubGF0dHIgKmEsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTEwNzktXFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MTUzMD1kcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHIoc3RydWN0IGRwbGxfcGluICpwaW4sIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTUzOC1cXHRcXHRjYXNlIERQTExfQV9QSU5fRlJFUVVFTkNZOlxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYzoxNTM5OlxcdFxcdFxcdHJldCA9IGRwbGxfcGluX2ZyZXFfc2V0KHBpbiwgYSwgaW5mby1cXHUwMDNlZXh0YWNrKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmMtMTU0MC1cXHRcXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MTMzPXN0YXRpYyBib29sIGljZV9kcGxsX2lzX3Jlc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0xNDItLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MTQzOiAqIGljZV9kcGxsX3Bpbl9mcmVxX3NldCAtIHNldCBwaW4ncyBmcmVxdWVuY3lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0xNDQtICogQHBmOiBwcml2YXRlIGJvYXJkIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MTU3PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzoxNTg6aWNlX2RwbGxfcGluX2ZyZXFfc2V0KHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMTU5LVxcdFxcdCAgICAgIGVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGluX3R5cGUsIGNvbnN0IHUzMiBmcmVxLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MjEwPWljZV9kcGxsX2ZyZXF1ZW5jeV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjI0LVxcdG11dGV4X2xvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzoyMjU6XFx0cmV0ID0gaWNlX2RwbGxfcGluX2ZyZXFfc2V0KHBmLCBwLCBwaW5fdHlwZSwgZnJlcXVlbmN5LCBleHRhY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTIyNi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6MzcuNzY2MDE3MTEzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NDMwNjU2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGNvZGUgc25pcHBldCwgZGVsaXZlcmVkIGFzIGlmIGl0J3MgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEZWNvZGluZyB0aGUgRFBMTCBQaW4gU2V0IExvZ2ljKipcblxuUmlnaHQsIHNvIEknbSBzZWVpbmcgdGhhdCBgZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyYCBmdW5jdGlvbi4gSSByZWNvZ25pemUgdGhhdCBvbmUuIEl0J3MgY2xlYXJseSBiZWluZyBjYWxsZWQgZnJvbSBgZHBsbF9ubF9waW5fc2V0X2RvaXRgLiBCYXNlZCBvbiB0aGUgbmFtaW5nLCBpdCdzIHByZXR0eSBvYnZpb3VzIHRoYXQgdGhpcyByZWxhdGVzIHRvIHNldHRpbmcgc29tZXRoaW5nIHVwIHdpdGggRFBMTCBwaW5zIHRocm91Z2ggYSBOZXRsaW5rIGludGVyZmFjZS4gYF9mcm9tX25sYXR0cmAgaGludHMgYXQgdGFraW5nIGluZm9ybWF0aW9uIHBhc3NlZCB2aWEgYSBOZXRsaW5rIGF0dHJpYnV0ZSBhbmQgZG9pbmcgc29tZXRoaW5nIHdpdGggaXQuIEknbSBndWVzc2luZyB0aGlzIGBkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHJgIGZ1bmN0aW9uIGlzIHRoZSBjb3JlIGxvZ2ljIHRoYXQgcGFyc2VzIHRob3NlIE5ldGxpbmsgYXR0cmlidXRlcyBhbmQgZmlndXJlcyBvdXQgKndoYXQqIHBpbiBzZXR0aW5ncyBhcmUgYmVpbmcgcmVxdWVzdGVkLiBBbmQgdGhlbiwgSSdtIHdhZ2VyaW5nLCBpdCBhcHBsaWVzIHRob3NlIHNldHRpbmdzIHRvIHRoZSBEUExMLiBUaGUgb3RoZXIgZnVuY3Rpb24sIGBkcGxsX25sX3Bpbl9zZXRfZG9pdGAsIGlzIGxpa2VseSB0aGUgTmV0bGluayBoYW5kbGVyIGZ1bmN0aW9uIGl0c2VsZi4gSXQgcmVjZWl2ZXMgdGhlIE5ldGxpbmsgbWVzc2FnZSwgY2FsbHMgdGhlIGF0dHJpYnV0ZS1wYXJzaW5nIGZ1bmN0aW9uIHRvIGRvIHRoZSByZWFsIHdvcmsgYW5kLCBsaWtlbHksIGhhbmRsZXMgYW55IGVycm9ycyBvciBvdGhlciBzZXR1cCByZXF1aXJlZCBmb3IgdGhlIE5ldGxpbmsgY29ubmVjdGlvbi4gT3ZlcmFsbCwgaXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIGZvciByZW1vdGVseSBjb25maWd1cmluZyBEUExMIHBpbiBzZXR0aW5ncy4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYXR0cmlidXRlIHBhcnNpbmcgdG8gc2VlIHRoZSBkYXRhIHN0cnVjdHVyZSBpdCdzIHVzaW5nIGJ1dCB0aGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3NDUsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoxOTo0Mi43MDkwODQ3NTVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTY3MDk1MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBsbF9ubF9waW5fc2V0X2RvaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jPTE3Mzk9aW50IGRwbGxfbmxfcGluX2dldF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE3NzUtXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjE3NzY6aW50IGRwbGxfbmxfcGluX3NldF9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTE3Nzcte1xcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYz05Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzIGRwbGxfbmxfb3BzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTE1Mi1cXHRcXHQucHJlX2RvaXRcXHQ9IGRwbGxfcGluX3ByZV9kb2l0LFxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmM6MTUzOlxcdFxcdC5kb2l0XFx0XFx0PSBkcGxsX25sX3Bpbl9zZXRfZG9pdCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTE1NC1cXHRcXHQucG9zdF9kb2l0XFx0PSBkcGxsX3Bpbl9wb3N0X2RvaXQsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5oPTQyPWludCBkcGxsX25sX3Bpbl9nZXRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuaDo0MzppbnQgZHBsbF9ubF9waW5fc2V0X2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuaC00NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6NDQuMjA1Nzk5NTAyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NTQ5MDY4MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipNeSBEUExMIFByZS1EbyBJdCBQcm9jZXNzKipcblxuQWxyaWdodCwgc28gdGhlIHByaW1hcnkgZnVuY3Rpb24gaGVyZSwgYmFzZWQgb24gdGhhdCBuYW1pbmcgY29udmVudGlvbiwgaXMgdGhlIHByZS1leGVjdXRpb24gb3IgaW5pdGlhbGl6YXRpb24gc3RhZ2Ugb2YgYSBEUExMIChEYXZpc+KAk1B1dG5hbeKAk0xvZ2VtYW5u4oCTTG92ZWxhbmQpIGFsZ29yaXRobSwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYSBcInBpbi5cIiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGBkcGxsX3Bpbl9wcmVfZG9pdGAgaXMgZ3JhYmJpbmcgdGhlIHJlbGV2YW50IFwicGluXCIgZGF0YS4gSSdtIGluZmVycmluZyBpdCdzIHByb2JhYmx5IHRoZSBwaW4gdGhhdCdzIHRoZSBsaXRlcmFsIHBvaW50ZXIgb3IgYml0IG9mIGRhdGEuIFRoaXMgY291bGQgYmUgYSBwb2ludGVyIHRvIGEgZGF0YSBzdHJ1Y3R1cmUsIG9yIHNvbWUgSUQgcmVwcmVzZW50aW5nIGEgbGl0ZXJhbCBvciB2YXJpYWJsZSBiZWluZyBjb25zaWRlcmVkLCBkZXBlbmRpbmcgb24gaG93IHRoZSBzb2x2ZXIncyBhcmNoaXRlY3RlZC4gSSdtIGltbWVkaWF0ZWx5IHRyeWluZyB0byBkaXNjZXJuIGNvbnRleHQg4oCTIHdoYXQga2luZCBvZiBwaW4/IElzIGl0IGEgZGVjaXNpb24gdmFyaWFibGU/IElzIGl0IHJlbGF0ZWQgdG8gY2xhdXNlIHNlbGVjdGlvbiBvciBjb25mbGljdCBhbmFseXNpcyB3aXRoaW4gdGhlIGJyYW5jaGluZyBoZXVyaXN0aWM/IFVuZGVyc3RhbmRpbmcgdGhlIHBpbidzIG5hdHVyZSBpcyBwYXJhbW91bnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcmVwcmVzZW50YXRpb24gdGhlIGNvZGUgaXMgdXNpbmcuIElzIGl0IGp1c3QgYW4gaW50ZWdlciBJRCwgb3IgYSBtb3JlIGNvbXBsZXggb2JqZWN0P1xuXG5cbiIsIklucHV0VG9rZW5zIjoyMjUzNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjQ5Ljg2MDcwODkwMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5NzgwMjMyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX3Bpbl9wcmVfZG9pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmM9MjAyOD1kcGxsX3VubG9ja19kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jLTIwMzMtXFxuZHJpdmVycy9kcGxsL2RwbGxfbmV0bGluay5jOjIwMzQ6aW50IGRwbGxfcGluX3ByZV9kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbmRyaXZlcnMvZHBsbC9kcGxsX25ldGxpbmsuYy0yMDM1LVxcdFxcdCAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jPTkyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHBsbF9ubF9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTM1LVxcdFxcdC5jbWRcXHRcXHQ9IERQTExfQ01EX1BJTl9HRVQsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYzoxMzY6XFx0XFx0LnByZV9kb2l0XFx0PSBkcGxsX3Bpbl9wcmVfZG9pdCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTEzNy1cXHRcXHQuZG9pdFxcdFxcdD0gZHBsbF9ubF9waW5fZ2V0X2RvaXQsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jLTE1MS1cXHRcXHQuY21kXFx0XFx0PSBEUExMX0NNRF9QSU5fU0VULFxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmM6MTUyOlxcdFxcdC5wcmVfZG9pdFxcdD0gZHBsbF9waW5fcHJlX2RvaXQsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYy0xNTMtXFx0XFx0LmRvaXRcXHRcXHQ9IGRwbGxfbmxfcGluX3NldF9kb2l0LFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuaD0yMj1pbnQgZHBsbF9wcmVfZG9pdChjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgKm9wcywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5oLTIzLVxcdFxcdCAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuaDoyNDppbnQgZHBsbF9waW5fcHJlX2RvaXQoY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsIHN0cnVjdCBza19idWZmICpza2IsXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuaC0yNS1cXHRcXHQgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6NTEuNDU4NTE3OTU3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzk4NTc2OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIGBkcGxsX3Bpbl9wcmVfZG9pdGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgd2l0aCBhIGRlZXAgZGl2ZSBpbnRvIGBkcGxsX3Bpbl9wcmVfZG9pdGAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBEUExMIGltcGxlbWVudGF0aW9uLCBlc3BlY2lhbGx5IGhvdyBpdCBoYW5kbGVzIHBpbm5pbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IG1lbnRhbGx5IHRyYWNlIHRoZSBkYXRhIGZsb3cuIFdoYXQgYXJlIHRoZSBpbnB1dHMsIHdoYXQgb3BlcmF0aW9ucyBhcmUgcGVyZm9ybWVkLCBhbmQgd2hhdCBhcmUgdGhlIG91dHB1dHM/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIHRoZSBjb25zdHJhaW50IGRhdGFiYXNlLCBzcGVjaWZpY2FsbHkgaG93IHBpbm5pbmcgYWZmZWN0cyB2YXJpYWJsZSBhc3NpZ25tZW50cyBhbmQgcHJvcGFnYXRpb24uIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBpcyByZWxhdGVkIHRvIGVhcmx5IGNvbmZsaWN0IGRldGVjdGlvbiBvciBpZiBpdCdzIG1vcmUgYWJvdXQgc3RyYXRlZ2ljIHZhcmlhYmxlIHNlbGVjdGlvbi4gVGhlIGRldGFpbHMgbWF0dGVyOyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaWYgdGhpcyBpcyBhIGNyaXRpY2FsIHNlY3Rpb24gZm9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBVbHRpbWF0ZWx5LCBJJ20gYWltaW5nIGZvciBhIGhvbGlzdGljIGNvbXByZWhlbnNpb24gb2YgYGRwbGxfcGluX3ByZV9kb2l0YCdzIGZ1bmN0aW9uIGFuZCBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBEUExMIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzg3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6NTUuODM4Mzc4MDI3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAzNCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAzNDpcXHRpbnQgZHBsbF9waW5fcHJlX2RvaXQoY29uc3Qgc3RydWN0IGdlbmxfc3BsaXRfb3BzICpvcHMsIHN0cnVjdCBza19idWZmICpza2IsXFxuMjAzNTpcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbjIwMzY6XFx0e1xcbjIwMzc6XFx0XFx0aW50IHJldDtcXG4yMDM4OlxcdFxcbjIwMzk6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG4yMDQwOlxcdFxcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIERQTExfQV9QSU5fSUQpKSB7XFxuMjA0MTpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjIwNDI6XFx0XFx0XFx0Z290byB1bmxvY2tfZGV2O1xcbjIwNDM6XFx0XFx0fVxcbjIwNDQ6XFx0XFx0aW5mby1cXHUwMDNldXNlcl9wdHJbMF0gPSB4YV9sb2FkKFxcdTAwMjZkcGxsX3Bpbl94YSxcXG4yMDQ1OlxcdFxcdFxcdFxcdFxcdCAgICBubGFfZ2V0X3UzMihpbmZvLVxcdTAwM2VhdHRyc1tEUExMX0FfUElOX0lEXSkpO1xcbjIwNDY6XFx0XFx0aWYgKCFpbmZvLVxcdTAwM2V1c2VyX3B0clswXSB8fFxcbjIwNDc6XFx0XFx0ICAgICFkcGxsX3Bpbl9hdmFpbGFibGUoaW5mby1cXHUwMDNldXNlcl9wdHJbMF0pKSB7XFxuMjA0ODpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhpbmZvLVxcdTAwM2VleHRhY2ssIFxcXCJwaW4gbm90IGZvdW5kXFxcIik7XFxuMjA0OTpcXHRcXHRcXHRyZXQgPSAtRU5PREVWO1xcbjIwNTA6XFx0XFx0XFx0Z290byB1bmxvY2tfZGV2O1xcbjIwNTE6XFx0XFx0fVxcbjIwNTI6XFx0XFxuMjA1MzpcXHRcXHRyZXR1cm4gMDtcXG4yMDU0OlxcdFxcbjIwNTU6XFx0dW5sb2NrX2RldjpcXG4yMDU2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG4yMDU3OlxcdFxcdHJldHVybiByZXQ7XFxuMjA1ODpcXHR9XFxuMjA1OTpcXHRcXG4yMDYwOlxcdHZvaWQgZHBsbF9waW5fcG9zdF9kb2l0KGNvbnN0IHN0cnVjdCBnZW5sX3NwbGl0X29wcyAqb3BzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbjIwNjE6XFx0XFx0XFx0XFx0c3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4yMDYyOlxcdHtcXG4yMDYzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZHBsbF9sb2NrKTtcXG4yMDY0OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MTk6NTUuODM4NTE5NTU3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODExNjE2MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipVbmRlcnN0YW5kaW5nIHRoZSBEUExMIFBpbiBBY3F1aXNpdGlvbiBQcm9jZXNzKipcblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaG93IGEgRFBMTCBwaW4gaXMgYmVpbmcgaGFuZGxlZC4gSSBzZWUgdGhhdCB0aGUgY29kZSBpcyByZWZlcmVuY2luZyBgZHBsbF9waW5feGFgLCB3aGljaCBpbXBsaWVzIHNvbWUgc29ydCBvZiBzdG9yYWdlIG9yIHRyYWNraW5nIG1lY2hhbmlzbSBmb3IgdGhlc2UgcGlucy4gTXkgZmlyc3QgcXVlc3Rpb24gaXMsIFwiSG93IGFyZSB0aGVzZSBwaW5zIGV2ZW4gKmdldHRpbmcqIGludG8gYGRwbGxfcGluX3hhYD9cIiBUaGF0J3MgdGhlIGNydXggb2YgdW5kZXJzdGFuZGluZyB0aGUgcGluIG1hbmFnZW1lbnQuXG5cbk15IHN1c3BpY2lvbiBpcyB0aGF0IHRoZXJlJ3MgYW4gYWxsb2NhdGlvbiBwcm9jZXNzIGhhcHBlbmluZy4gQW5kIHN1cmUgZW5vdWdoLCBgZHBsbF9waW5fYWxsb2NgIGlzIHJlZmVyZW5jZWQuIE5vdywgdGhlIGNvbnRleHQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBkcml2ZXJzIGFyZSB0aGUgb25lcyBpbnRlcmFjdGluZyB3aXRoIHRoaXMgYWxsb2NhdGlvbiBmdW5jdGlvbi4gU28sIEkgbmVlZCB0byBsb29rIGludG8gaG93IHRoZXNlIGRyaXZlcnMsIGFyZSBpbnRlcmFjdGluZyB3aXRoIGBkcGxsX3Bpbl9hbGxvY2AuIFRoaXMgaXMgdGhlIGNvcmUgdG8gdW5kZXJzdGFuZGluZyBob3cgYW5kIHdoZW4gYSBwaW4gaXMgYnJvdWdodCBpbiwgYW5kIHVsdGltYXRlbHksIHRoZSBhbGxvY2F0aW9uIGFuZCB1c2FnZSBtb2RlbC4gTm93LCBJIG5lZWQgdG8gZ2V0IGludG8gdGhlICp3aHkqIG9mIHRoaXMgd2hvbGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNzQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjE5OjU5LjUxOTY4MzkwOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwODcxNDA2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX3Bpbl9hbGxvY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM9NjM2PXN0YXRpYyBzdHJ1Y3QgZHBsbF9waW4gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo2Mzc6ZHBsbF9waW5fYWxsb2ModTY0IGNsb2NrX2lkLCB1MzIgcGluX2lkeCwgc3RydWN0IG1vZHVsZSAqbW9kdWxlLFxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy02MzgtXFx0ICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpwcm9wKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTc0OD1kcGxsX3Bpbl9nZXQodTY0IGNsb2NrX2lkLCB1MzIgcGluX2lkeCwgc3RydWN0IG1vZHVsZSAqbW9kdWxlLFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc2NC1cXHRpZiAoIXJldCkge1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo3NjU6XFx0XFx0cmV0ID0gZHBsbF9waW5fYWxsb2MoY2xvY2tfaWQsIHBpbl9pZHgsIG1vZHVsZSwgcHJvcCk7XFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jLTc2Ni1cXHRcXHRpZiAoIUlTX0VSUihyZXQpKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE2MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZV9vcHMgemwzMDczeF9kcGxsX2RldmljZV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTYyNC0vKipcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTYyNTogKiB6bDMwNzN4X2RwbGxfcGluX2FsbG9jIC0gYWxsb2NhdGUgRFBMTCBwaW5cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTYyNi0gKiBAemxkcGxsOiBwb2ludGVyIHRvIHpsMzA3M3hfZHBsbFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE2MzU9c3RhdGljIHN0cnVjdCB6bDMwNzN4X2RwbGxfcGluICpcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTYzNjp6bDMwNzN4X2RwbGxfcGluX2FsbG9jKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbCwgZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xNjM3LVxcdFxcdCAgICAgICB1OCBpZClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xNjU1LSAqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE2NTY6ICogRGVhbGxvY2F0ZXMgRFBMTCBwaW4gcHJldmlvdXNseSBhbGxvY2F0ZWQgYnkgQHpsMzA3M3hfZHBsbF9waW5fYWxsb2MuXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE2NTctICovXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTg2Nz16bDMwNzN4X2RwbGxfbmNvX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTg4OC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTg4OTpcXHRwaW4gPSB6bDMwNzN4X2RwbGxfcGluX2FsbG9jKHpsZHBsbCwgRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVULFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xODkwLVxcdFxcdFxcdFxcdCAgICAgWkwzMDczWF9OQ09fUElOX0lEKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xOTMwPXpsMzA3M3hfZHBsbF9waW5zX3JlZ2lzdGVyKHN0cnVjdCB6bDMwNzN4X2RwbGwgKnpsZHBsbClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xOTUxLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxOTUyOlxcdFxcdHBpbiA9IHpsMzA3M3hfZHBsbF9waW5fYWxsb2MoemxkcGxsLCBkaXIsIGlkKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTk1My1cXHRcXHRpZiAoSVNfRVJSKHBpbikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjA6MDEuMDI4NDA1MzU0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODEzMDM4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQ6XG5cbioqRGVidWdnaW5nIFBpbiBBbGxvY2F0aW9uIGluIHRoZSBEUExMIFN5c3RlbSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UncmUgbG9va2luZyBhdCBgZHBsbF9waW5fZ2V0YC4gU28sIGl0J3MgcHJldHR5IGNsZWFyIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yICphbGxvY2F0aW5nKiBhIHBpbiB3aXRoaW4gdGhlIERQTEwgKERpZ2l0YWwgUGhhc2UtTG9ja2VkIExvb3ApIHN5c3RlbS4gTm8gc3VycHJpc2VzIHRoZXJlLiBCdXQgdGhlIHJlYWwgcXVlc3Rpb24sIHRoZSBvbmUgdGhhdCdzIGltbWVkaWF0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lLCBpczogKipXaG8gaXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uPyoqIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgcGF0aCB0byBgZHBsbF9waW5fZ2V0YCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIGdyYXNwaW5nIHRoZSBicm9hZGVyIHBpY3R1cmUgYW5kIHBvdGVudGlhbGx5IHBpbnBvaW50aW5nIGFueSBpc3N1ZXMuIElzIGl0IHRoZSBkcml2ZXIgaXRzZWxmIGluaXRpYXRpbmcgdGhlIGFsbG9jYXRpb24gb24gc3RhcnR1cD8gSXMgaXQgdHJpZ2dlcmVkIGJ5IGEgdXNlci1zcGFjZSByZXF1ZXN0IHRocm91Z2ggc29tZSBpb2N0bD8gSXMgaXQgcGFydCBvZiBhIHJlc291cmNlIG1hbmFnZW1lbnQgZnJhbWV3b3JrPyBLbm93aW5nIHRoZSBjYWxsZXIgZ2l2ZXMgbWUgdGhlIGNvbnRleHQsIHRoZSBpbnRlbnQuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGRwbGxfcGluX2dldGAgYW5kIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBhbGxvY2F0aW9uIHJlcXVlc3QgaXMgb3JpZ2luYXRpbmcuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBwcm9ibGVtIGlzLCBiZWNhdXNlIGFsbG9jYXRpbmcgdGhlIHBpbiBpdHNlbGYgaXMgdHJpdmlhbCBhbmQgSSB3b3VsZCBub3QgYmUgY29uY2VybmVkIGlmIHRoYXQgd2FzIHRoZSBvbmx5IGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ5MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIwOjA1LjAwOTcxMTI4NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5Nzk5NzEzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcGxsX3Bpbl9nZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTU3Mj1vcHMgYW5kIHByaXYuXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTU3My1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NTc0OlRoZSBwaW5zIGFyZSBhbGxvY2F0ZWQgc2VwYXJhdGVseSB3aXRoIGRwbGxfcGluX2dldCgpLCBpdCB3b3Jrc1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC01NzUtc2ltaWxhcmx5IHRvIGRwbGxfZGV2aWNlX2dldCgpLiBGdW5jdGlvbiBmaXJzdCBjcmVhdGVzIG9iamVjdCBhbmQgdGhlblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0PTYzND1UaGUgcmVnaXN0cmF0aW9uIHBhcnQgaXMgdGhlbiBsb29rcyBsaWtlIHRoaXMgcGFydDpcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC02NTAtICAgICAgICBmb3IgKGkgPSAwOyBpIFxcdTAwM2MgT0NQX1NNQV9OVU07IGkrKykge1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdDo2NTE6ICAgICAgICAgICAgICAgIGJwLVxcdTAwM2VzbWFbaV0uZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xraWQsIGksIFRISVNfTU9EVUxFLCBcXHUwMDI2YnAtXFx1MDAzZXNtYVtpXS5kcGxsX3Byb3ApO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC02NTItICAgICAgICAgICAgICAgIGlmIChJU19FUlIoYnAtXFx1MDAzZXNtYVtpXS5kcGxsX3BpbikpIHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYz03Mjk9RVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9kcGxsX25vdGlmaWVyKTtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy03MzEtLyoqXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jOjczMjogKiBkcGxsX3Bpbl9nZXQgLSBmaW5kIGV4aXN0aW5nIG9yIGNyZWF0ZSBuZXcgZHBsbCBwaW5cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzMzLSAqIEBjbG9ja19pZDogY2xvY2tfaWQgb2YgY3JlYXRvclxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTc0Nz1zdHJ1Y3QgZHBsbF9waW4gKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo3NDg6ZHBsbF9waW5fZ2V0KHU2NCBjbG9ja19pZCwgdTMyIHBpbl9pZHgsIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzQ5LVxcdCAgICAgY29uc3Qgc3RydWN0IGRwbGxfcGluX3Byb3BlcnRpZXMgKnByb3AsIGRwbGxfdHJhY2tlciAqdHJhY2tlcilcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy03NzItfVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo3NzM6RVhQT1JUX1NZTUJPTF9HUEwoZHBsbF9waW5fZ2V0KTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNzc0LVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYz01OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHBsbF9waW5faWRfZ2V0X25sX3BvbGljeVtEUExMX0FfUElOX1RZUEUgKyAxXSA9IHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtNjctLyogRFBMTF9DTURfUElOX0dFVCAtIGRvICovXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYzo2ODpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZHBsbF9waW5fZ2V0X2RvX25sX3BvbGljeVtEUExMX0FfUElOX0lEICsgMV0gPSB7XFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYy02OS1cXHRbRFBMTF9BX1BJTl9JRF0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSxcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtNzItLyogRFBMTF9DTURfUElOX0dFVCAtIGR1bXAgKi9cXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jOjczOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkcGxsX3Bpbl9nZXRfZHVtcF9ubF9wb2xpY3lbRFBMTF9BX1BJTl9JRCArIDFdID0ge1xcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtNzQtXFx0W0RQTExfQV9QSU5fSURdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jPTkyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgZHBsbF9ubF9vcHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTM4LVxcdFxcdC5wb3N0X2RvaXRcXHQ9IGRwbGxfcGluX3Bvc3RfZG9pdCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jOjEzOTpcXHRcXHQucG9saWN5XFx0XFx0PSBkcGxsX3Bpbl9nZXRfZG9fbmxfcG9saWN5LFxcbmRyaXZlcnMvZHBsbC9kcGxsX25sLmMtMTQwLVxcdFxcdC5tYXhhdHRyXFx0PSBEUExMX0FfUElOX0lELFxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYy0xNDUtXFx0XFx0LmR1bXBpdFxcdFxcdD0gZHBsbF9ubF9waW5fZ2V0X2R1bXBpdCxcXG5kcml2ZXJzL2RwbGwvZHBsbF9ubC5jOjE0NjpcXHRcXHQucG9saWN5XFx0XFx0PSBkcGxsX3Bpbl9nZXRfZHVtcF9ubF9wb2xpY3ksXFxuZHJpdmVycy9kcGxsL2RwbGxfbmwuYy0xNDctXFx0XFx0Lm1heGF0dHJcXHQ9IERQTExfQV9QSU5fSUQsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTE5PXN0YXRpYyBzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEyMDp6bDMwNzN4X2RwbGxfcGluX2dldF9ieV9yZWYoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsLCB1OCByZWZfaWQpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEyMS17XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTE2MT16bDMwNzN4X2RwbGxfbmNvX3Bpbl9zdGF0ZV9vbl9kcGxsX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKmRwbGxfcGluLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTExOTItXFx0XFx0XFx0cmVmID0gemwzMDczeF9jaGFuX3JlZl9nZXQoXFx1MDAyNmNoYW4pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxMTkzOlxcdFxcdFxcdHJlZl9waW4gPSB6bDMwNzN4X2RwbGxfcGluX2dldF9ieV9yZWYoemxkcGxsLCByZWYpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xMTk0LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYz0xNDIxPXpsMzA3M3hfZHBsbF9tb2RlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIHZvaWQgKmRwbGxfcHJpdixcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xNDYyLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoxNDYzOlxcdFxcdFxcdHBpbiA9IHpsMzA3M3hfZHBsbF9waW5fZ2V0X2J5X3JlZih6bGRwbGwsIHJlZik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE0NjQtXFx0XFx0XFx0aWYgKHBpbikge1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE2NzY9emwzMDczeF9kcGxsX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsX3BpbiAqcGluLCB1MzIgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTcwOS1cXHQvKiBDcmVhdGUgb3IgZ2V0IGV4aXN0aW5nIERQTEwgcGluICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE3MTA6XFx0cGluLVxcdTAwM2VkcGxsX3BpbiA9IGRwbGxfcGluX2dldCh6bGRwbGwtXFx1MDAzZWRldi1cXHUwMDNlY2xvY2tfaWQsIGluZGV4LCBUSElTX01PRFVMRSxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTcxMS1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZwcm9wcy1cXHUwMDNlZHBsbF9wcm9wcywgXFx1MDAyNnBpbi1cXHUwMDNldHJhY2tlcik7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTg2Nz16bDMwNzN4X2RwbGxfbmNvX3Bpbl9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTg5My1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM6MTg5NDpcXHRwaW4tXFx1MDAzZWRwbGxfcGluID0gZHBsbF9waW5fZ2V0KHpsZHBsbC1cXHUwMDNlZGV2LVxcdTAwM2VjbG9ja19pZCwgWkwzMDczWF9OQ09fUElOX0lELFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0xODk1LVxcdFxcdFxcdFxcdCAgICAgVEhJU19NT0RVTEUsIFxcdTAwMjZ6bDMwNzN4X2RwbGxfbmNvX3Bpbl9wcm9wcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTI0NzM9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjI0NzQ6aWNlX2RwbGxfcGluX2dldF9wYXJlbnRfbnVtKHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNDc1LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBhcmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTI0ODY9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjI0ODc6aWNlX2RwbGxfcGluX2dldF9wYXJlbnRfaWR4KHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNDg4LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBhcmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNDg5LXtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzoyNDkwOlxcdGludCBudW0gPSBpY2VfZHBsbF9waW5fZ2V0X3BhcmVudF9udW0ocGluLCBwYXJlbnQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTI0OTEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz0yNTEyPWljZV9kcGxsX3JjbGtfc3RhdGVfb25fcGluX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNTMwLVxcdG11dGV4X2xvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzoyNTMxOlxcdGh3X2lkeCA9IGljZV9kcGxsX3Bpbl9nZXRfcGFyZW50X2lkeChwLCBwYXJlbnRfcGluKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNTMyLVxcdGlmIChod19pZHggXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjU0Mi1cXHRcXHRcXHRcXHQgICBwLVxcdTAwM2VpZHgsIHN0YXRlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjI1NDM6XFx0XFx0XFx0XFx0ICAgaWNlX2RwbGxfcGluX2dldF9wYXJlbnRfbnVtKHAsIHBhcmVudF9waW4pKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNTQ0LVxcdFxcdGdvdG8gdW5sb2NrO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMjU1Ny1cXHRcXHRcXHRcXHQgICBzdGF0ZSwgcC1cXHUwMDNlaWR4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjI1NTg6XFx0XFx0XFx0XFx0ICAgaWNlX2RwbGxfcGluX2dldF9wYXJlbnRfbnVtKHAsIHBhcmVudF9waW4pKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0yNTU5LXVubG9jazpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTI1ODI9aWNlX2RwbGxfcmNsa19zdGF0ZV9vbl9waW5fZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTI1OTYtXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLmxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjI1OTc6XFx0aHdfaWR4ID0gaWNlX2RwbGxfcGluX2dldF9wYXJlbnRfaWR4KHAsIHBhcmVudF9waW4pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTI1OTgtXFx0aWYgKGh3X2lkeCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz0zMzA0PWljZV9kcGxsX2dldF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW5zLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzMxMy1cXHRcXHRcXHRwaW5faW5kZXggKz0gaTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzozMzE0OlxcdFxcdHBpbnNbaV0ucGluID0gZHBsbF9waW5fZ2V0KGNsb2NrX2lkLCBwaW5faW5kZXgsIFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTMzMTUtXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNnBpbnNbaV0ucHJvcCwgXFx1MDAyNnBpbnNbaV0udHJhY2tlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jPTQyMD1zdGF0aWMgaW50IG1seDVfZHBsbF9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYWRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kcGxsLmMtNDU3LVxcdC8qIE11bHRpcGxlIG1kZXYgaW5zdGFuY2VzIG1pZ2h0IHNoYXJlIG9uZSBEUExMIHBpbi4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jOjQ1ODpcXHRtZHBsbC1cXHUwMDNlZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xvY2tfaWQsIG1seDVfZ2V0X2Rldl9pbmRleChtZGV2KSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jLTQ1OS1cXHRcXHRcXHRcXHQgICAgICAgVEhJU19NT0RVTEUsIFxcdTAwMjZtbHg1X2RwbGxfcGluX3Byb3BlcnRpZXMsXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmM9NTA1OT1wdHBfb2NwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTEyOS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgT0NQX1NNQV9OVU07IGkrKykge1xcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1MTMwOlxcdFxcdGJwLVxcdTAwM2VzbWFbaV0uZHBsbF9waW4gPSBkcGxsX3Bpbl9nZXQoY2xraWQsIGksIFRISVNfTU9EVUxFLFxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTMxLVxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZicC1cXHUwMDNlc21hW2ldLmRwbGxfcHJvcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZHBsbC5oPTI5MD1zdHJ1Y3QgZHBsbF9waW4gKlxcbmluY2x1ZGUvbGludXgvZHBsbC5oOjI5MTpkcGxsX3Bpbl9nZXQodTY0IGNsb2NrX2lkLCB1MzIgZGV2X2RyaXZlcl9pZCwgc3RydWN0IG1vZHVsZSAqbW9kdWxlLFxcbmluY2x1ZGUvbGludXgvZHBsbC5oLTI5Mi1cXHQgICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9wcm9wZXJ0aWVzICpwcm9wLCBkcGxsX3RyYWNrZXIgKnRyYWNrZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMDowNi41MDc3MTQ3MjFaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIyMDAzNjkyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEUExMIFBpbiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gYGRwbGxfcGluX2dldGAgaXMgdGhlIGtleS4gSXQncyBjYWxsZWQgYnkgdGhlIGB6bDMwNzN4YCwgYGljZWAsIGBtbHg1YCwgYW5kIGBwdHBfb2NwYCBkcml2ZXJzLiAgSWYgbm9uZSBvZiB0aGVzZSBhcmUgbG9hZGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHRoZW4gdGhlcmUgYXJlIG5vIERQTEwgcGlucyByZWdpc3RlcmVkLCB3aGljaCBsZWFkcyB0byBgZHBsbF9waW5fcHJlX2RvaXRgIGZhaWxpbmcgd2l0aCBgLUVOT0RFVmAgYmVjYXVzZSBgeGFfbG9hZGAgcmV0dXJucyBOVUxMLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5Ob3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBwb3BzIHVwOiBjYW4gSSBjcmVhdGUgYSBEUExMIHBpbiBmcm9tIHVzZXJzcGFjZSBzb21laG93PyBObywgdGhhdCdzIGJsb2NrZWQuIGBkcGxsX3Bpbl9hbGxvY2AgaXMgb25seSBldmVyIHRyaWdnZXJlZCB0aHJvdWdoIGBkcGxsX3Bpbl9nZXRgLCBhbmQgdGhhdCBvbmx5IGhhcHBlbnMgd2l0aGluIHRob3NlIGRyaXZlcnMuIFRoYXQgYXZlbnVlIGlzIGNsb3NlZC5cblxuQWxyaWdodCwgd2hhdCBhYm91dCBsb2FkaW5nIGB6bDMwNzN4YCBpbiBRRU1VPyBJdCdzIGFuIEkyQy9TUEkgZHJpdmVyLCB3aGljaCBvcGVucyBwb3NzaWJpbGl0aWVzLiBJZiBJIHVzZSBgaTJjLXN0dWJgIG9yIGBpMmMtZHVtbXlgLCBjb3VsZCBJIGluc3RhbnRpYXRlIGB6bDMwNzN4YD8gWWVzISBJIGNhbiB3cml0ZSB0byBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAgd2l0aCBgemwzMDczMSAweDIwYC4gVGhlIEkyQyBjb3JlIHdpbGwgdGhlbiBjcmVhdGUgYW4gSTJDIGNsaWVudCBhbmQgY2FsbCBgemwzMDczeF9pMmNfcHJvYmVgLiBUaGF0LCBpbiB0dXJuLCBzaG91bGQgY2FsbCBgemwzMDczeF9kZXZfcHJvYmVgLlxuXG5MZXQncyBzZWU6IGB6bDMwNzN4X2Rldl9wcm9iZWAgd2lsbCBhdHRlbXB0IHRvIHJlYWQgYSBjaGlwIElEOiBgcmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFx1MDAyNmlkKTtgLiAgYHpsMzA3M3hfcmVhZF91MTZgIHBlcmZvcm1zIGFuIEkyQyByZWFkLlxuXG5Pa2F5LCBub3cgaXQgY2xpY2tzLiBJZiBJIHVzZSBgaTJjLXN0dWJgLCBpdCAqY2FuKiBzaW11bGF0ZSBJMkMgcmVhZHMuIEhvd2V2ZXIsIGl0IGxvb2tzIGxpa2UgaXQncyBkZXNpZ25lZCB0byBzaW11bGF0ZSBzcGVjaWZpYyBjaGlwcyBvciBhY3QgYXMgYSBtZW1vcnkgYXJyYXkuIFdhaXQhICBJdCBhY3RzIGFzIGEgbWVtb3J5IGFycmF5ISAgVGhpcyBpcyBwZXJmZWN0ISBJIGNhbiB3cml0ZSB2YWx1ZXMgdG8gaXRzIFwicmVnaXN0ZXJzXCIgdmlhIHN5c2ZzIG9yIEkyQyB3cml0ZXMgKmJlZm9yZSogcHJvYmluZyB0aGUgZHJpdmVyLiBCcmlsbGlhbnQhXG5cbkhtbSwgYSBxdWljayBjaGVja+KApiBpcyBpdCAxNi1iaXQgcmVnaXN0ZXJzPyBXYWl0Li4uYHpsMzA3M3hgIHVzZXMgMzItYml0IHJlZ2lzdGVycz8gTGV0J3MgY2hlY2sgYHpsMzA3M3hfcmVhZF91MTZgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ0NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMDoxNS43Mjc3NTM1MjVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzE1ODkxNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiemwzMDczeF9yZWFkX3UxNlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM9MTc5PWludCB6bDMwNzN4X3dyaXRlX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU4IHZhbClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xODQtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjE4NTogKiB6bDMwNzN4X3JlYWRfdTE2IC0gcmVhZCB2YWx1ZSBmcm9tIDE2Yml0IHJlZ2lzdGVyXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTE4Ni0gKiBAemxkZXY6IHpsMzA3M3ggZGV2aWNlIHBvaW50ZXJcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy0xOTMtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjE5NDppbnQgemwzMDczeF9yZWFkX3UxNihzdHJ1Y3QgemwzMDczeF9kZXYgKnpsZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1MTYgKnZhbClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTk1LXtcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05ODE9aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTg4LVxcdC8qIFJlYWQgY2hpcCBJRCAqL1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5ODk6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFxcdTAwMjZpZCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTk5MC1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwNS1cXHQvKiBSZWFkIHJldmlzaW9uLCBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBjdXN0b20gY29uZmlnIHZlcnNpb24gKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6MTAwNjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRVZJU0lPTiwgXFx1MDAyNnJldmlzaW9uKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwNy1cXHRpZiAocmMpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDgtXFx0XFx0cmV0dXJuIHJjO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoxMDA5OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0ZXX1ZFUiwgXFx1MDAyNmZ3X3Zlcik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMTAtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5oPTEzOT1pbnQgemwzMDczeF9yZWFkX3U4KHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHVuc2lnbmVkIGludCByZWcsIHU4ICp2YWwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaDoxNDA6aW50IHpsMzA3M3hfcmVhZF91MTYoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTE2ICp2YWwpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuaC0xNDEtaW50IHpsMzA3M3hfcmVhZF91MzIoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdW5zaWduZWQgaW50IHJlZywgdTMyICp2YWwpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jPTI1PXpsMzA3M3hfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGV2bGluaywgc3RydWN0IGRldmxpbmtfaW5mb19yZXEgKnJlcSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy0zMy1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM6MzQ6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfSUQsIFxcdTAwMjZpZCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jLTM1LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy00NC1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM6NDU6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVWSVNJT04sIFxcdTAwMjZyZXZpc2lvbik7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jLTQ2LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy01NS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmM6NTY6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfRldfVkVSLCBcXHUwMDI2ZndfdmVyKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtNTctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTEyNTU9emwzMDczeF9kcGxsX3RlbXBfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgdm9pZCAqZHBsbF9wcml2LFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTEyNjQtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjEyNjU6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfRElFX1RFTVBfU1RBVFVTLCBcXHUwMDI2dmFsKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmMtMTI2Ni1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYz03OT1pbnQgemwzMDczeF9yZWZfc3RhdGVfZmV0Y2goc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldiwgdTggaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMTUtXFx0LyogUmVhZCBmcmVxdWVuY3kgcmVsYXRlZCByZWdpc3RlcnMgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYzoxMTY6XFx0cmMgPSB6bDMwNzN4X3JlYWRfdTE2KHpsZGV2LCBaTF9SRUdfUkVGX0ZSRVFfQkFTRSwgXFx1MDAyNnJlZi1cXHUwMDNlZnJlcV9iYXNlKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMTctXFx0aWYgKHJjKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTExOC1cXHRcXHRyZXR1cm4gcmM7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmM6MTE5OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFRl9GUkVRX01VTFQsIFxcdTAwMjZyZWYtXFx1MDAzZWZyZXFfbXVsdCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmMtMTIwLVxcdGlmIChyYylcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMjEtXFx0XFx0cmV0dXJuIHJjO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jOjEyMjpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19SRUZfUkFUSU9fTSwgXFx1MDAyNnJlZi1cXHUwMDNlZnJlcV9yYXRpb19tKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWYuYy0xMjMtXFx0aWYgKHJjKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTEyNC1cXHRcXHRyZXR1cm4gcmM7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVmLmM6MTI1OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1JFRl9SQVRJT19OLCBcXHUwMDI2cmVmLVxcdTAwM2VmcmVxX3JhdGlvX24pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZi5jLTEyNi1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jPTIzPWludCB6bDMwNzN4X3N5bnRoX3N0YXRlX2ZldGNoKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYsIHU4IGluZGV4KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYy00NS1cXHQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jOjQ2OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1NZTlRIX0ZSRVFfQkFTRSwgXFx1MDAyNnN5bnRoLVxcdTAwM2VmcmVxX2Jhc2UpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNDctXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYy01My1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jOjU0OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1NZTlRIX0ZSRVFfTSwgXFx1MDAyNnN5bnRoLVxcdTAwM2VmcmVxX20pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNTUtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvc3ludGguYy01Ny1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9zeW50aC5jOjU4OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX1NZTlRIX0ZSRVFfTiwgXFx1MDAyNnN5bnRoLVxcdTAwM2VmcmVxX24pO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3N5bnRoLmMtNTktXFx0aWYgKHJjKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMDoxNy4yNTkzNDkyNDdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExMzIwMjk0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRlY29kaW5nIHRoZSBgemwzMDczeF9yZWFkX3UxNmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB6bDMwNzN4X3JlYWRfdTE2YCBmdW5jdGlvbi4gSXQgYXBwZWFycyB0byBiZSByZWFkaW5nIGEgMTYtYml0IHZhbHVlIGZyb20gdGhlIGB6bGRldi1cdTAwM2VyZWdtYXBgLiBSaWdodCwgdGhlIGByZWdtYXBgIGlzIHRoZSBrZXkgYWJzdHJhY3Rpb24gaGVyZSwgbGlrZWx5IHByb3ZpZGluZyBhIGxheWVyIG9mIGluZGlyZWN0aW9uIGZvciByZWdpc3RlciBhY2Nlc3MsIHByb2JhYmx5IHZpYSBJMkMsIFNQSSBvciB3aGF0ZXZlci4gSWYgd2UncmUgd29ya2luZyB3aXRoIGEgZHVtbXkgSTJDIGRldmljZSwgdGhlIGByZWdtYXBgIHdpbGwsIGFzIGV4cGVjdGVkLCBqdXN0IHJldHVybiBhIHplcm8gb3Igd2hhdGV2ZXIgZGF0YSB3ZSBwcmV2aW91c2x5IHdyb3RlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBpbnRlcnByZXRpbmcgcmVhZCBvcGVyYXRpb25zLiBBaCwgYnV0IHdhaXQgYSBzZWNvbmQsIEkgcmVjYWxsIHRoYXQgYHpsMzA3M3hfY2hpcF9pZHNgIGlzIGhvdyB3ZSBpZGVudGlmeSB0aGUgY2hpcHMgd2UgZXhwZWN0IHRvIGVuY291bnRlci4gVGhlIGRldmljZSBpZGVudGlmaWNhdGlvbiBpcyBkb25lIHdpdGggc3BlY2lmaWMgSURzLiBSaWdodC4gVGhhdCBjbGFyaWZpZXMgdGhlIG5leHQgc3RlcHMgaW4gZGVidWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyODY4LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjA6MjEuMzcyNTU1OTA1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE2NzUyNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpsMzA3M3hfY2hpcF9pZHNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTI1LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzoyNjpzdGF0aWMgY29uc3Qgc3RydWN0IHpsMzA3M3hfY2hpcF9pbmZvIHpsMzA3M3hfY2hpcF9pZHNbXSA9IHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMjctXFx0WkxfQ0hJUF9JTkZPKDB4MEUzMCwgMiwgWkwzMDczWF9GTEFHX1JFRl9QSEFTRV9DT01QXzMyKSxcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYz05ODE9aW50IHpsMzA3M3hfZGV2X3Byb2JlKHN0cnVjdCB6bDMwNzN4X2RldiAqemxkZXYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTkzLVxcdC8qIERldGVjdCBjaGlwIHZhcmlhbnQgKi9cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTk0OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHpsMzA3M3hfY2hpcF9pZHMpOyBpKyspIHtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmM6OTk1OlxcdFxcdGlmICh6bDMwNzN4X2NoaXBfaWRzW2ldLmlkID09IGlkKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05OTYtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTk4LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYzo5OTk6XFx0aWYgKGkgPT0gQVJSQVlfU0laRSh6bDMwNzN4X2NoaXBfaWRzKSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwMC1cXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZSh6bGRldi1cXHUwMDNlZGV2LCAtRU5PREVWLFxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jLTEwMDItXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjEwMDM6XFx0emxkZXYtXFx1MDAzZWluZm8gPSBcXHUwMDI2emwzMDczeF9jaGlwX2lkc1tpXTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtMTAwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjA6MjIuODg5MzEzMjc5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NjkxOTI1OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBQcm9iZSBGYWlsdXJlcyBpbiBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBkZXZpY2UgSURzLCBsaWtlIGAweDBFMzBgLCBhbmQgdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBzaW11bGF0ZSB0aGVzZSBkZXZpY2VzIHdpdGhpbiBTeXprYWxsZXIuIElmIEkgdXNlIGBpMmMtc3R1YmAsIEkgY2FuIGxvYWQgaXQgd2l0aCBzb21ldGhpbmcgbGlrZSBgbW9kcHJvYmUgaTJjLXN0dWIgY2hpcF9hZGRyPTB4MjBgLiBUaGVuLCBJJ2Qgd3JpdGUgdGhlIGFwcHJvcHJpYXRlIGRhdGEgdG8gdGhlIHJlZ2lzdGVycy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlZ2lzdGVyIG9mZnNldHMgdGhvdWdoLCBsaWtlIHdyaXRpbmcgYDB4MzBgIHRvIGBaTF9SRUdfSURgIGFuZCBgMHgwRWAgdG8gYFpMX1JFR19JRCsxYC4gVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoYXQgYGkyYy1zdHViYCBkb2VzIFNNQnVzIGJ5dGUvd29yZCBkYXRhLCBzbyBJIG5lZWQgdG8gY2hlY2sgaG93IGByZWdtYXBgIGludGVyYWN0cy4gSXQgc2VlbXMgbGlrZSBgcmVnbWFwYCBkb2VzIFNNQnVzIG9yIHJhdyBJMkMgdHJhbnNmZXJzIG92ZXIgSTJDLlxuXG5UaGUgcHJvYmxlbSBpcywgU3l6a2FsbGVyIGRvZXNuJ3QgaGFuZGxlIHRoaXMga2luZCBvZiBzZXR1cDsgaXQganVzdCBibGFzdHMgb3V0IHJhbmRvbSBzeXNjYWxscy4gSXQgY2FuJ3QgY29uZmlndXJlIGBpMmMtc3R1YmAgdG8gcHJldGVuZCBpdCdzIGEgc3BlY2lmaWMgY2hpcCB3aXRoIGEgcGFydGljdWxhciBJRC4gU28sIGluIHRoZSBjYXNlIG9mIGB6bDMwNzN4YCwgaXQncyBqdXN0IG5ldmVyIGdvaW5nIHRvIHByb2JlIHN1Y2Nlc3NmdWxseSBpbiBhIFN5emthbGxlciBlbnZpcm9ubWVudC5cblxuTGV0J3MgdGhpbmsgYWJvdXQgYWx0ZXJuYXRpdmVzLiBgaWNlYCBpcyBvdXQ7IGl0J3MgYSBQQ0kgZHJpdmVyIGZvciBJbnRlbCBFODAwLCBhbmQgU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBnb29kIFFFTVUgZW11bGF0aW9uIGZvciB0aGF0IGhhcmR3YXJlLiBTYW1lIHdpdGggYG1seDVgIChNZWxsYW5veCBDb25uZWN0WC01KSBhbmQgYHB0cF9vY3BgIChPcGVuIENvbXB1dGUgUHJvamVjdCBUaW1lIENhcmQpLiBObyBRRU1VIGVtdWxhdGlvbiBmb3IgYW55IG9mIHRob3NlIGluIFN5emthbGxlciBlaXRoZXIuXG5cbldhaXQgYSBtaW51dGUsIG1heWJlIHRoZXJlJ3MgYSBEUExMIChEaWdpdGFsIFBoYXNlLUxvY2tlZCBMb29wKSBpbiBgbmV0ZGV2c2ltYD8gTGV0IG1lIGNoZWNrIHRvIHNlZSBpZiB0aGF0J3MgYSBwb3NzaWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM3MTcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjA6MzAuMzU4NTA4MTMyWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE0MDY1NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRwbGxfZGV2aWNlX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdD01Njg9RGV2aWNlIHNob3VsZCBpbXBsZW1lbnQgc2V0IG9mIG9wZXJhdGlvbnMgYW5kIHJlZ2lzdGVyIGRldmljZSB2aWFcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NTY5OmRwbGxfZGV2aWNlX3JlZ2lzdGVyKCkgYXQgd2hpY2ggcG9pbnQgaXQgYmVjb21lcyBhdmFpbGFibGUgdG8gdGhlXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTU3MC11c2Vycy4gTXVsdGlwbGUgZHJpdmVyIGluc3RhbmNlcyBjYW4gb2J0YWluIHJlZmVyZW5jZSB0byBpdCB3aXRoXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q9NjM0PVRoZSByZWdpc3RyYXRpb24gcGFydCBpcyB0aGVuIGxvb2tzIGxpa2UgdGhpcyBwYXJ0Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2RwbGwucnN0LTY0NS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHBsbC5yc3Q6NjQ2OiAgICAgICAgZXJyID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoYnAtXFx1MDAzZWRwbGwsIERQTExfVFlQRV9QUFMsIFxcdTAwMjZkcGxsX29wcywgYnApO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcGxsLnJzdC02NDctICAgICAgICBpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9kcGxsL2RwbGxfY29yZS5jPTQ0OD1kcGxsX2RldmljZV9yZWdpc3RyYXRpb25fZmluZChzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDYwLS8qKlxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NjE6ICogZHBsbF9kZXZpY2VfcmVnaXN0ZXIgLSByZWdpc3RlciB0aGUgZHBsbCBkZXZpY2UgaW4gdGhlIHN1YnN5c3RlbVxcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYy00NjItICogQGRwbGw6IHBvaW50ZXIgdG8gYSBkcGxsXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDczLSAqL1xcbmRyaXZlcnMvZHBsbC9kcGxsX2NvcmUuYzo0NzQ6aW50IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZW51bSBkcGxsX3R5cGUgdHlwZSxcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNDc1LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHMsIHZvaWQgKnByaXYpXFxuLS1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTE3LX1cXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmM6NTE4OkVYUE9SVF9TWU1CT0xfR1BMKGRwbGxfZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL2RwbGwvZHBsbF9jb3JlLmMtNTE5LVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jPTE5MzA9emwzMDczeF9kcGxsX3BpbnNfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE5ODAtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE5ODE6ICogemwzMDczeF9kcGxsX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVyIERQTEwgZGV2aWNlXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE5ODItICogQHpsZHBsbDogcG9pbnRlciB0byB6bDMwNzN4X2RwbGwgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MTk4OD1zdGF0aWMgaW50XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjE5ODk6emwzMDczeF9kcGxsX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgemwzMDczeF9kcGxsICp6bGRwbGwpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTE5OTAte1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMDctXFx0emxkcGxsLVxcdTAwM2V0eXBlID0gemwzMDczeF9wcm9wX2RwbGxfdHlwZV9nZXQoemxkZXYsIHpsZHBsbC1cXHUwMDNlaWQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYzoyMDA4OlxcdHJjID0gZHBsbF9kZXZpY2VfcmVnaXN0ZXIoemxkcGxsLVxcdTAwM2VkcGxsX2RldiwgemxkcGxsLVxcdTAwM2V0eXBlLFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RwbGwuYy0yMDA5LVxcdFxcdFxcdFxcdCAgXFx1MDAyNnpsZHBsbC1cXHUwMDNlb3BzLCB6bGRwbGwpO1xcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMjItICogVW5yZWdpc3RlcnMgZ2l2ZW4gRFBMTCBkZXZpY2UgZnJvbSBEUExMIHN1Yi1zeXN0ZW0gcHJldmlvdXNseSByZWdpc3RlcmVkXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjIwMjM6ICogYnkgQHpsMzA3M3hfZHBsbF9kZXZpY2VfcmVnaXN0ZXIuXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTIwMjQtICovXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kcGxsLmM9MjQ0OD16bDMwNzN4X2RwbGxfcmVnaXN0ZXIoc3RydWN0IHpsMzA3M3hfZHBsbCAqemxkcGxsKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0NTEtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jOjI0NTI6XFx0cmMgPSB6bDMwNzN4X2RwbGxfZGV2aWNlX3JlZ2lzdGVyKHpsZHBsbCk7XFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZHBsbC5jLTI0NTMtXFx0aWYgKHJjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9NDE5ND1pY2VfZHBsbF9pbml0X2RwbGwoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbCAqZCwgYm9vbCBjZ3UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjE1LVxcdFxcdFxcdGljZV9kcGxsX3VwZGF0ZV9zdGF0ZShwZiwgZCwgdHJ1ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDIxNjpcXHRcXHRyZXQgPSBkcGxsX2RldmljZV9yZWdpc3RlcihkLVxcdTAwM2VkcGxsLCB0eXBlLCBvcHMsIGQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMTctXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RwbGwuYz00MjA9c3RhdGljIGludCBtbHg1X2RwbGxfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmFkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jLTQ1MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jOjQ1MjpcXHRlcnIgPSBkcGxsX2RldmljZV9yZWdpc3RlcihtZHBsbC1cXHUwMDNlZHBsbCwgRFBMTF9UWVBFX0VFQyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZHBsbC5jLTQ1My1cXHRcXHRcXHRcXHQgICBcXHUwMDI2bWx4NV9kcGxsX2RldmljZV9vcHMsIG1kcGxsKTtcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYz01MDU5PXB0cF9vY3BfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYy01MTI0LVxcbmRyaXZlcnMvcHRwL3B0cF9vY3AuYzo1MTI1OlxcdGVyciA9IGRwbGxfZGV2aWNlX3JlZ2lzdGVyKGJwLVxcdTAwM2VkcGxsLCBEUExMX1RZUEVfUFBTLCBcXHUwMDI2ZHBsbF9vcHMsIGJwKTtcXG5kcml2ZXJzL3B0cC9wdHBfb2NwLmMtNTEyNi1cXHRpZiAoZXJyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9kcGxsLmg9MjgwPXZvaWQgZHBsbF9kZXZpY2VfcHV0KHN0cnVjdCBkcGxsX2RldmljZSAqZHBsbCwgZHBsbF90cmFja2VyICp0cmFja2VyKTtcXG5pbmNsdWRlL2xpbnV4L2RwbGwuaC0yODEtXFxuaW5jbHVkZS9saW51eC9kcGxsLmg6MjgyOmludCBkcGxsX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsIGVudW0gZHBsbF90eXBlIHR5cGUsXFxuaW5jbHVkZS9saW51eC9kcGxsLmgtMjgzLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzICpvcHMsIHZvaWQgKnByaXYpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMDozMS45NzI1ODIxNjZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTE1NDU5NTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEUExMIERldmljZSBSZWdpc3RyYXRpb24gaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBEUExMIGRldmljZXMgYXJlIGhhbmRsZWQsIGFuZCBpdCBzZWVtcyBsaWtlIGBuZXRkZXZzaW1gIGlzbid0IHJlZ2lzdGVyaW5nIGFueS4gVGhpcyBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nIOKAkyBEUExMIGRldmljZXMgYXJlICpvbmx5KiByZWdpc3RlcmVkIGJ5IHRoZSBoYXJkd2FyZSBkcml2ZXJzIGZvciBwaHlzaWNhbCBkZXZpY2VzLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgY2FuIHdlICpwb3NzaWJseSogaGl0IGBkcGxsX3Bpbl9mcmVxX3NldGAgd2l0aG91dCBoYXZpbmcgYW55IGFjdHVhbCBEUExMIGRldmljZXMgcHJlc2VudD8gTm8sIHRoYXQncyBub3QgcG9zc2libGUuIGBkcGxsX3Bpbl9mcmVxX3NldGAgaXMgY2FsbGVkIGJ5IGBkcGxsX3Bpbl9zZXRfZnJvbV9ubGF0dHJgLCBhbmQgdGhhdCBjb21lcyBmcm9tIGBkcGxsX25sX3Bpbl9zZXRfZG9pdGAuIEJ1dCBgZHBsbF9ubF9waW5fc2V0X2RvaXRgIHJlbGllcyBvbiBgZHBsbF9waW5fcHJlX2RvaXRgIGZpbmRpbmcgYSBwaW4gaW4gYGRwbGxfcGluX3hhYC5cblxuQW5kIGhvdyBkb2VzIGEgcGluIGV2ZW4gKmdldCogaW50byBgZHBsbF9waW5feGFgPyBJdCdzIGFsbCBtYW5hZ2VkIGJ5IGBkcGxsX3Bpbl9hbGxvY2AsIHdoaWNoIGlzICpvbmx5KiBjYWxsZWQgYnkgYGRwbGxfcGluX2dldGAuIENyaXRpY2FsbHksIGBkcGxsX3Bpbl9nZXRgIGlzIGl0c2VsZiBvbmx5IGNhbGxlZCBieSB0aGUgYWZvcmVtZW50aW9uZWQgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycy5cblxuU28sIGluIGEgdmlydHVhbGl6ZWQgc2V0dXAgbGlrZSBRRU1VIG9yIEdDRSwgd2l0aG91dCB0aG9zZSBzcGVjaWZpYyBQQ0llIG9yIEkyQyBkZXZpY2VzLCB0aGVyZSdzIG5vIHBhdGggdG8gcmVnaXN0ZXJpbmcgRFBMTCBwaW5zLiBUaGlzIG1lYW5zIGBkcGxsX3Bpbl9wcmVfZG9pdGAgd2lsbCAqYWx3YXlzKiBmYWlsIHdpdGggYW4gYC1FTk9ERVZgIGVycm9yLiBUaGVyZWZvcmUsIGBkcGxsX3Bpbl9mcmVxX3NldGAgd2lsbCBuZXZlciBiZSByZWFjaGVkIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudC5cblxuTm93LCBhIGJpdCBvZiBhIHRhbmdlbnQuIFdoYXQgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGB6bDMwNzN4YCB3b3JraW5nIHdpdGggYGkyYy1zdHViYD8gSXQncyB3b3J0aCBjb25zaWRlcmluZy4gTGV0J3Mgc2VlIGlmIGB6bDMwNzN4X3JlYWRfdTE2YCB3aWxsIHN1Y2NlZWQgd2l0aCBgaTJjLXN0dWJgLlxuXG5JZiBJIGxvYWQgYGkyYy1zdHViYCB3aXRoIHRoZSBgY2hpcF9hZGRyPTB4MjBgIHBhcmFtZXRlciwgaXQgY3JlYXRlcyBhbiBJMkMgZGV2aWNlIGF0IGFkZHJlc3MgMHgyMC4gVGhlbiBJJ2Qgd3JpdGUgXCJ6bDMwNzMxIDB4MjBcIiB0byBgL3N5cy9idXMvaTJjL2RldmljZXMvaTJjLTAvbmV3X2RldmljZWAuIFRoaXMgc2hvdWxkIG1ha2UgdGhlIEkyQyBjb3JlIGJpbmQgdGhlIGB6bDMwNzN4YCBkcml2ZXIgdG8gdGhlIG5ldyBkZXZpY2UuIFNvIHRoYXQgbWVhbnMgYHpsMzA3M3hfaTJjX3Byb2JlYCBpcyBjYWxsZWQuIEl0IGNhbGxzIGB6bDMwNzN4X2Rldl9wcm9iZWAsIHdoaWNoIGF0dGVtcHRzIHRvIHJlYWQgYFpMX1JFR19JRGAuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQgdGhhdCByZWdpc3RlciBpcy4uLiBMZXQgbWUgZ28gY2hlY2sgYFpMX1JFR19JRGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzMyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIwOjQxLjEyNzE4MDM3N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyODQzNTIzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJaTF9SRUdfSURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jPTk4MT1pbnQgemwzMDczeF9kZXZfcHJvYmUoc3RydWN0IHpsMzA3M3hfZGV2ICp6bGRldilcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2NvcmUuYy05ODgtXFx0LyogUmVhZCBjaGlwIElEICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvY29yZS5jOjk4OTpcXHRyYyA9IHpsMzA3M3hfcmVhZF91MTYoemxkZXYsIFpMX1JFR19JRCwgXFx1MDAyNmlkKTtcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9jb3JlLmMtOTkwLVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYz0yNT16bDMwNzN4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9kZXZsaW5rLmMtMzMtXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvZGV2bGluay5jOjM0OlxcdHJjID0gemwzMDczeF9yZWFkX3UxNih6bGRldiwgWkxfUkVHX0lELCBcXHUwMDI2aWQpO1xcbmRyaXZlcnMvZHBsbC96bDMwNzN4L2RldmxpbmsuYy0zNS1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtNTAtLyoqXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjUxOiAqIFpMX1JFR19JRFggLSBkZWZpbmUgaW5kZXhlZCByZWdpc3RlclxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC01Mi0gKiBAX2lkeDogaW5kZXggb2YgcmVnaXN0ZXIgdG8gYWNjZXNzXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtNjAtICovXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjYxOiNkZWZpbmUgWkxfUkVHX0lEWChfaWR4LCBfcGFnZSwgX29mZnNldCwgX3NpemUsIF9pdGVtcywgX3N0cmlkZSlcXHRcXFxcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTYyLVxcdChGSUVMRF9QUkVQKFpMX1JFR19PRkZTRVRfTUFTSyxcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtNzctI2RlZmluZSBaTF9SRUcoX3BhZ2UsIF9vZmZzZXQsIF9zaXplKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6Nzg6XFx0WkxfUkVHX0lEWCgwLCBfcGFnZSwgX29mZnNldCwgX3NpemUsIDEsIDApXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTc5LVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTg2LVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDo4NzojZGVmaW5lIFpMX1JFR19JRFxcdFxcdFxcdFxcdFpMX1JFRygwLCAweDAxLCAyKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC04OC0jZGVmaW5lIFpMX1JFR19SRVZJU0lPTlxcdFxcdFxcdFxcdFpMX1JFRygwLCAweDAzLCAyKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTEwMS0jZGVmaW5lIFpMX1JFR19SRUZfTU9OX1NUQVRVUyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MTAyOlxcdFpMX1JFR19JRFgoX2lkeCwgMiwgMHgwMiwgMSwgWkwzMDczWF9OVU1fUkVGUywgMSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTAzLSNkZWZpbmUgWkxfUkVGX01PTl9TVEFUVVNfT0tcXHRcXHRcXHQwXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTEyLSNkZWZpbmUgWkxfUkVHX0RQTExfTU9OX1NUQVRVUyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MTEzOlxcdFpMX1JFR19JRFgoX2lkeCwgMiwgMHgxMCwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDEpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTExNC0jZGVmaW5lIFpMX0RQTExfTU9OX1NUQVRVU19TVEFURVxcdFxcdEdFTk1BU0soMSwgMClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xMjAtI2RlZmluZSBaTF9SRUdfRFBMTF9SRUZTRUxfU1RBVFVTKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxMjE6XFx0WkxfUkVHX0lEWChfaWR4LCAyLCAweDMwLCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTIyLSNkZWZpbmUgWkxfRFBMTF9SRUZTRUxfU1RBVFVTX1JFRlNFTFxcdFxcdEdFTk1BU0soMywgMClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xMjYtI2RlZmluZSBaTF9SRUdfUkVGX0ZSRVEoX2lkeClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjEyNzpcXHRaTF9SRUdfSURYKF9pZHgsIDIsIDB4NDQsIDQsIFpMMzA3M1hfTlVNX1JFRlMsIDQpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTEyOC1cXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xNTItI2RlZmluZSBaTF9SRUdfUkVGX1BIQVNFKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxNTM6XFx0WkxfUkVHX0lEWChfaWR4LCA0LCAweDIwLCA2LCBaTDMwNzNYX05VTV9SRUZTLCA2KVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xNTQtXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTU5LSNkZWZpbmUgWkxfUkVHX0RQTExfTU9ERV9SRUZTRUwoX2lkeClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oOjE2MDpcXHRaTF9SRUdfSURYKF9pZHgsIDUsIDB4MDQsIDEsIFpMMzA3M1hfTUFYX0NIQU5ORUxTLCA0KVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xNjEtI2RlZmluZSBaTF9EUExMX01PREVfUkVGU0VMX01PREVcXHRcXHRHRU5NQVNLKDIsIDApXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTY5LSNkZWZpbmUgWkxfUkVHX0RQTExfQ1RSTChfaWR4KVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MTcwOlxcdFpMX1JFR19JRFgoX2lkeCwgNSwgMHgwNSwgMSwgWkwzMDczWF9NQVhfQ0hBTk5FTFMsIDQpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTE3MS0jZGVmaW5lIFpMX0RQTExfQ1RSTF9USUVfQ0xFQVJcXHRcXHRcXHRCSVQoMClcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0xNzUtI2RlZmluZSBaTF9SRUdfRFBMTF9ERl9SRUFEKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxNzY6XFx0WkxfUkVHX0lEWChfaWR4LCA1LCAweDI4LCAxLCBaTDMwNzNYX01BWF9DSEFOTkVMUywgMSlcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTc3LSNkZWZpbmUgWkxfRFBMTF9ERl9SRUFEX1NFTVxcdFxcdFxcdEJJVCg0KVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTE5MS0jZGVmaW5lIFpMX1JFR19EUExMX1BIQVNFX0VSUl9EQVRBKF9pZHgpXFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoxOTI6XFx0WkxfUkVHX0lEWChfaWR4LCA1LCAweDU1LCA2LCBaTDMwNzNYX01BWF9DSEFOTkVMUywgNilcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMTkzLVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTE5OC0jZGVmaW5lIFpMX1JFR19EUExMX0RGX09GRlNFVF8wMyhfaWR4KVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MTk5OlxcdFpMX1JFR19JRFgoX2lkeCwgNiwgMHgwMCwgNiwgNCwgMHgyMClcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMjAwLSNkZWZpbmUgWkxfUkVHX0RQTExfREZfT0ZGU0VUXzRcXHRcXHRaTF9SRUcoNywgMHgwMCwgNilcXG4tLVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0yMDktI2RlZmluZSBaTF9SRUdfU1lOVEhfQ1RSTChfaWR4KVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmg6MjEwOlxcdFpMX1JFR19JRFgoX2lkeCwgOSwgMHgwMCwgMSwgWkwzMDczWF9OVU1fU1lOVEhTLCAxKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0yMTEtI2RlZmluZSBaTF9TWU5USF9DVFJMX0VOXFx0XFx0XFx0QklUKDApXFxuLS1cXG5kcml2ZXJzL2RwbGwvemwzMDczeC9yZWdzLmgtMjE5LSNkZWZpbmUgWkxfUkVHX09VVFBVVF9DVFJMKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoyMjA6XFx0WkxfUkVHX0lEWChfaWR4LCA5LCAweDI4LCAxLCBaTDMwNzNYX05VTV9PVVRTLCAxKVxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaC0yMjEtI2RlZmluZSBaTF9PVVRQVVRfQ1RSTF9FTlxcdFxcdFxcdEJJVCgwKVxcbi0tXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTI2Ni0jZGVmaW5lIFpMX1JFR19EUExMX1JFRl9QUklPKF9pZHgpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvZHBsbC96bDMwNzN4L3JlZ3MuaDoyNjc6XFx0WkxfUkVHX0lEWChfaWR4LCAxMiwgMHg1MiwgMSwgWkwzMDczWF9OVU1fUkVGUyAvIDIsIDEpXFxuZHJpdmVycy9kcGxsL3psMzA3M3gvcmVncy5oLTI2OC0jZGVmaW5lIFpMX0RQTExfUkVGX1BSSU9fUkVGX1BcXHRcXHRcXHRHRU5NQVNLKDMsIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjIwOjQyLjc1NTYxOTY5OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODI2NjYyMTkxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIFBhdGhzIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBaTF9SRUdfSURgIG1hcHMgdG8gYSBzcGVjaWZpYyByZWdpc3RlciB3aXRoaW4gdGhlIGB6bDMwNzN4YCBkcml2ZXIsIHdoaWNoIHVzZXMgYHJlZ21hcGAgd2l0aCBhIGN1c3RvbSBjb25maWd1cmF0aW9uLiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCB0aGVuIEkgcmVhbGl6ZTogYHpsMzA3M3hgIGlzIGFuIEkyQyBkZXZpY2UuIENhbiBJIGV2ZW4gKm1vY2sqIGl0IGluIHN5emthbGxlcj9cblxuUmlnaHQsIHN5emthbGxlciBkb2Vzbid0IGhhdmUgc3BlY2lmaWMgc3VwcG9ydCBmb3IgYHpsMzA3M3hgLiBJdCBkb2Vzbid0IGtub3cgdGhlIHJpZ2h0IGNoaXAgSUQgdG8gcG9wdWxhdGUgdGhlIGBpMmMtc3R1YmAsIHNvIHRoZSBkcml2ZXIgd29uJ3QgcHJvYmUgc3VjY2Vzc2Z1bGx5LiAgTm8gcHJvYmUsIG5vIHJlZ2lzdGVyZWQgRFBMTCBwaW5zLiAgV2l0aG91dCB0aG9zZSBwaW5zLCB0aGUgY3J1Y2lhbCBgZHBsbF9waW5fcHJlX2RvaXRgIGZhaWxzIHdpdGggYC1FTk9ERVZgLiBUaGlzIG1lYW5zIGFsbCB0aGUgbmV0bGluayBjaGFuZ2VzIGluIGBkcGxsX25ldGxpbmsuY2Ag4oCTIGBkcGxsX3Bpbl9mcmVxX3NldGAsIGBkcGxsX3Bpbl9lc3luY19zZXRgLCBhbmQgc28gb24g4oCTIGFyZSBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIG15IHZpcnR1YWwgZW52aXJvbm1lbnQuXG5cbkkgYXNrIG15c2VsZiwgaXMgdGhlcmUgKmFueSogb3RoZXIgd2F5IHRvIHJlZ2lzdGVyIGEgRFBMTCBwaW4/IEkgY2hlY2sgdGhlIGV4aXN0aW5nIGRyaXZlcnMgdXNpbmcgYGRwbGxfZGV2aWNlX3JlZ2lzdGVyYC4gYGljZWAsIGBtbHg1YCwgYHB0cF9vY3BgLCBhbmQgYHpsMzA3M3hgIGFyZSB0aGUgb25seSBvbmVzLiBCdXQgdGhleSdyZSBhbGwgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycy4gIE5vbmUgY2FuIGJlIHJlYWxpc3RpY2FsbHkgZW11bGF0ZWQgYnkgc3RhbmRhcmQgUUVNVSBvciBzeXprYWxsZXIsIHJpZ2h0PyAgVGhlIE9DUCBUaW1lIENhcmQ/IE5vLiBNZWxsYW5veCBDb25uZWN0WC01PyBOb3BlLiBJbnRlbCBFODAwPyBObyBjaGFuY2UuICBUaGVyZWZvcmUsIEknbSBzdHVjazogdGhlcmUncyBubyB3YXkgdG8gcmVnaXN0ZXIgYSBEUExMIGRldmljZSBvciBwaW4gaW4gYSBzeXprYWxsZXIgY29udGV4dC4gIFRoZXJlZm9yZSwgdGhlIG5ldGxpbmsgY29kZSBtb2RpZmllZCBieSB0aGUgcGF0Y2ggaXMgdW5yZWFjaGFibGUgaW4gc3l6a2FsbGVyLlxuXG5MZXQgbWUgdGhpbmsuIElzIHRoZXJlIGFueSBzb2Z0d2FyZSBEUExMIGRyaXZlcj8gSSBzZWFyY2ggdGhlIGNvZGUgYW5kIGZpbmQgbm90aGluZywganVzdCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVycy4gSXMgYW55IG90aGVyIGRyaXZlciB0aGF0IHVzZXMgYGRwbGxfcGluX2dldGA/IEFnYWluLCBqdXN0IHRoZSBwaHlzaWNhbCBvbmVzLiBTbywgaXQncyBwcmV0dHkgY2xlYXI6IG5vIG90aGVyIGRyaXZlcnMgcmVnaXN0ZXIgRFBMTCBwaW5zLlxuXG5Db3VsZCB0aG9zZSBmdW5jdGlvbnMgYmUgY2FsbGVkIGZyb20gc29tZXdoZXJlIGVsc2U/IE5vLCBgZHBsbF9waW5fZnJlcV9zZXRgIGlzIHN0YXRpYyBhbmQgb25seSBjYWxsZWQgdGhyb3VnaCBgZHBsbF9waW5fc2V0X2Zyb21fbmxhdHRyYCwgYW5kIHRoYXQgcm91dGUgcmVxdWlyZXMgYSB2YWxpZCBwaW4gZnJvbSBgZHBsbF9waW5fcHJlX2RvaXRgIHdoaWNoIHdlIGVzdGFibGlzaGVkIGNhbiBub3Qgb2NjdXIuXG5cbldoYXQgYWJvdXQgdGhlIGNoYW5nZXMgKndpdGhpbiogdGhlIGB6bDMwNzN4YCBkcml2ZXIgaXRzZWxmPyBBaCwgaXQncyBtb2RpZnlpbmcgYSBjYWxsYmFjaywgYHpsMzA3M3hfZHBsbF9pbnB1dF9waW5fcmVmX3N5bmNfc2V0YC4gQmVjYXVzZSBgemwzMDczeGAgd29uJ3QgcHJvYmUgaW4gc3l6a2FsbGVyLCB0aGlzIGNvZGUgaXMgYWxzbyB1bmFjY2Vzc2libGUuXG5cbk9rYXksIGxldCBtZSByZXZpZXcgdGhlIGluc3RydWN0aW9ucy4gVGhleSBhcmUgZXhwbGljaXQuICBUaGUgcGF0Y2ggaW5jbHVkZXMgb25seSBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSB3aGVuIG9ubHkgc29mdHdhcmUgZW11bGF0aW9uIG9mIGhhcmR3YXJlIGlzIHVzZWQuIFRoZSBEUExMIHN1YnN5c3RlbSwgd2hpbGUgY29yZSwgcmVxdWlyZXMgYSByZWdpc3RlcmVkIERQTEwgZGV2aWNlIGFuZCBwaW4uICBUaGVyZSBhcmUgbm8gc29mdHdhcmUtZW11bGF0ZWQgRFBMTCBkcml2ZXJzLCBhbmQgdGhlIGV4aXN0aW5nIG9uZXMgYXJlIGZvciBwaHlzaWNhbCBoYXJkd2FyZS4gIE5vIHdheSB0byByZWFjaCB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZSBpbiBzeXprYWxsZXIuXG5cbkknbSBzdGFydGluZyB0byB3b25kZXIsIGlzIHRoZXJlIGFueSBwb3NzaWJpbGl0eSBvZiBsb2FkaW5nIGEgZHVtbXkgRFBMTCBkcml2ZXI/IE5vLCB0aGVyZSBpc24ndCBvbmUgaW4gdGhlIGtlcm5lbCB0cmVlLiBJIGNvbmZpcm0uIE15IGFuYWx5c2lzIGlzIHNvbGlkLiBUaGlzIHBhdGNoJ3MgY2hhbmdlcyBhcmUgdW5yZWFjaGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTY2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMTowMS4wMjIyNDM4OTNaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTIwLCJFcnJvciI6IllvdSBhcmUgcmVwZWF0aW5nIHRoZSBzYW1lIHRvb2wgY2FsbCB3aXRoIHRoZSBleGFjdCBzYW1lIGFyZ3VtZW50cy5cbllvdSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCBvZiB0aGlzIGV4YWN0IHRvb2wgY2FsbCBpbiB5b3VyIGNvbnZlcnNhdGlvbiBoaXN0b3J5LlxuRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsXG50cnkgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCB0b29sLCBvciBwcm9jZWVkIHRvIHRoZSBuZXh0IHN0ZXAuIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHBsbF9kZXZpY2VfcmVnaXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXFxuWW91IGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0IG9mIHRoaXMgZXhhY3QgdG9vbCBjYWxsIGluIHlvdXIgY29udmVyc2F0aW9uIGhpc3RvcnkuXFxuRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsXFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLlwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMTowMS4wMjIyODEwMzNaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQyOTU4NTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEUExMIFBhdGNoJ3MgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBhbHJlYWR5IGRvbmUgbXkgaG9tZXdvcmsgYW5kIHNlYXJjaGVkIGZvciBgZHBsbF9kZXZpY2VfcmVnaXN0ZXJgLiBUaGUgcmVzdWx0cyBhcmUgbGltaXRlZCB0byB0aG9zZSBmb3VyIGRyaXZlcnM6IGBpY2VgLCBgbWx4NWAsIGBwdHBfb2NwYCwgYW5kIGB6bDMwNzN4YC4gVGhhdCdzIGl0LiBObyBzaWduIG9mIGEgZHVtbXkgb3IgdmlydHVhbCBEUExMIGRyaXZlciBhbnl3aGVyZSBpbiB0aGUga2VybmVsLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoYXQgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UgaXMgZWZmZWN0aXZlbHkgdW5yZWFjaGFibGUgaW4gdHlwaWNhbCBmdXp6aW5nIHNldHVwcy5cblxuVGhlIHBhdGNoIGl0c2VsZiB0YXJnZXRzIGBkcGxsX25ldGxpbmsuY2AsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgbmV0bGluayBjb21tYW5kcyByZWxhdGVkIHRvIERQTEwgcGluIHByb3BlcnRpZXMuIEZyZXF1ZW5jeSwgZXN5bmMsIHJlZl9zeW5jLCBwaGFzZSBhZGp1c3RtZW50cyDigJMgYWxsIG9mIGl0IGhpbmdlcyBvbiBoYXZpbmcgYSByZWdpc3RlcmVkIERQTEwgcGluIHRvIHdvcmsgd2l0aC4gQW5kIHRob3NlIHBpbnM/IFRoZXkncmUgZXhjbHVzaXZlbHkgcmVnaXN0ZXJlZCBieSAqcGh5c2ljYWwqIGhhcmR3YXJlIGRyaXZlcnMsIGFzIEkgb2JzZXJ2ZWQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgZGV2aWNlcyBoZXJlLCBhbmQgbm9uZSBvZiB0aGVtIGFyZSBzb21ldGhpbmcgeW91J2QgZmluZCBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGVudmlyb25tZW50LiBUaGlzIGlzIGJlY2F1c2UgdGhleSBhcmUgcmVhbCBoYXJkd2FyZSBkZXZpY2VzIGxpa2UgdGhlIEludGVsIEU4MDAsIE1lbGxhbm94IENvbm5lY3RYLTUsIHRoZSBPQ1AgVGltZSBDYXJkLCBvciB0aGUgTWljcm9zZW1pIFpMMzA3M3guXG5cblNpbmNlIHRoZXJlJ3Mgbm8gc29mdHdhcmUtYmFzZWQgRFBMTCBkcml2ZXIgZm9yIHVzIHRvIHVzZSwgdGhlIG1vZGlmaWVkIGNvZGUgaW4gYGRwbGxfbmV0bGluay5jYCBhbmQgZXZlbiB0aGUgY2hhbmdlcyB3aXRoaW4gdGhlIGB6bDMwNzN4YCBkcml2ZXIgYmVjb21lIGlycmVsZXZhbnQgZm9yIG91ciB0ZXN0aW5nLiBUaGUgbmV0bGluayBpbnRlcmZhY2UgaXMgYSBkZWFkIGVuZC4gVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciB0aGlzIHBhdGNoLiBUaGVyZSdzIG5vIGVmZmVjdGl2ZSB3YXkgdG8gcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGUgaW4gbXkgdmlydHVhbCBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg5MywiT3V0cHV0VG9rZW5zIjoyMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6MjE6MDkuNDUxODY4ODI4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgRFBMTCBzdWJzeXN0ZW0gKGRwbGxfbmV0bGluay5jKSBhbmQgdGhlIE1pY3Jvc2VtaSBaTDMwNzN4IERQTEwgZHJpdmVyICh6bDMwNzN4L2RwbGwuYykuIFRoZSBtb2RpZmllZCBjb2RlIGluIGRwbGxfbmV0bGluay5jIGhhbmRsZXMgbmV0bGluayBjb21tYW5kcyBmb3Igc2V0dGluZyBEUExMIHBpbiBwcm9wZXJ0aWVzLiBIb3dldmVyLCB0aGVzZSBuZXRsaW5rIGNvbW1hbmRzIHJlcXVpcmUgYSByZWdpc3RlcmVkIERQTEwgcGluIHRvIG9wZXJhdGUgb24uIERQTEwgcGlucyBhcmUgb25seSByZWdpc3RlcmVkIGJ5IHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlcnMgKEludGVsIEU4MDAgJ2ljZScsIE1lbGxhbm94IENvbm5lY3RYLTUgJ21seDUnLCBPQ1AgVGltZSBDYXJkICdwdHBfb2NwJywgYW5kIE1pY3Jvc2VtaSAnemwzMDczeCcpLiBOb25lIG9mIHRoZXNlIGhhcmR3YXJlIGRldmljZXMgYXJlIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgYW5kIHRoZXJlIGlzIG5vIHNvZnR3YXJlLWVtdWxhdGVkIGR1bW15IERQTEwgZHJpdmVyIGF2YWlsYWJsZSBpbiB0aGUga2VybmVsLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGFuZCB0aGUgemwzMDczeCBkcml2ZXIgY29kZSBhcmUgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIERQTEwgc3Vic3lzdGVtIChkcGxsX25ldGxpbmsuYykgYW5kIHRoZSBNaWNyb3NlbWkgWkwzMDczeCBEUExMIGRyaXZlciAoemwzMDczeC9kcGxsLmMpLiBUaGUgbW9kaWZpZWQgY29kZSBpbiBkcGxsX25ldGxpbmsuYyBoYW5kbGVzIG5ldGxpbmsgY29tbWFuZHMgZm9yIHNldHRpbmcgRFBMTCBwaW4gcHJvcGVydGllcy4gSG93ZXZlciwgdGhlc2UgbmV0bGluayBjb21tYW5kcyByZXF1aXJlIGEgcmVnaXN0ZXJlZCBEUExMIHBpbiB0byBvcGVyYXRlIG9uLiBEUExMIHBpbnMgYXJlIG9ubHkgcmVnaXN0ZXJlZCBieSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXJzIChJbnRlbCBFODAwICdpY2UnLCBNZWxsYW5veCBDb25uZWN0WC01ICdtbHg1JywgT0NQIFRpbWUgQ2FyZCAncHRwX29jcCcsIGFuZCBNaWNyb3NlbWkgJ3psMzA3M3gnKS4gTm9uZSBvZiB0aGVzZSBoYXJkd2FyZSBkZXZpY2VzIGFyZSBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMsIGFuZCB0aGVyZSBpcyBubyBzb2Z0d2FyZS1lbXVsYXRlZCBkdW1teSBEUExMIGRyaXZlciBhdmFpbGFibGUgaW4gdGhlIGtlcm5lbC4gQ29uc2VxdWVudGx5LCB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZSBhbmQgdGhlIHpsMzA3M3ggZHJpdmVyIGNvZGUgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjoyMTowOS40NTE4OTM2NDhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow6bznv[1] Phase: Running StartedAt: 2026-08-07 12:21:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6bznv[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-07 12:21:23 +0000 UTC FinishedAt: 2026-08-07 12:21:29 +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,}