Name: series-workflow9tb6q Phase: Failed StartedAt: 2026-07-03 09:24:53 +0000 UTC FinishedAt: 2026-07-03 10:04:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9tb6q[0] Phase: Succeeded StartedAt: 2026-07-03 09:24:53 +0000 UTC FinishedAt: 2026-07-03 10:03:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9tb6q[0].run-triage Phase: Succeeded StartedAt: 2026-07-03 09:24:53 +0000 UTC FinishedAt: 2026-07-03 10:03:31 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBGcmVlc2NhbGUgRk1hbiAoRnJhbWUgTWFuYWdlcikgZHJpdmVyLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzICgmIzM5O2ZzbCxmbWFuJiMzOTsgYW5kICYjMzk7ZnNsLGZtYW4tbXVyYW0mIzM5OykgdG8gcHJvYmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIGFyZSBub3QgcHJlc2VudCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUmIzM5O3MgJiMzOTt2aXJ0JiMzOTsgbWFjaGluZSB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDljNDM2MGYxM2U3YjBmZDAwOGM0ODcxOWQ5M2JiODU0NDZkMmUzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMgMTA6MDA6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXG5pbmRleCAyOTliYWIwNDMxNzViMy4uNzUyYzBkZjBlMTdjNTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xuQEAgLTI2OTUsNyAmIzQzOzI2OTUsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFx0dm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7XG4gXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbiBcdHUzMiB2YWwsIHJhbmdlWzJdO1xuLVx0aW50IGVyciwgaXJxO1xuJiM0MztcdGludCBlcnI7XG4gXHRzdHJ1Y3QgY2xrICpjbGs7XG4gXHR1MzIgY2xrX3JhdGU7XG4gXG5AQCAtMjcxNyw3ICYjNDM7MjcxNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRlcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKG9mX2RldiwgMCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4tXHRpcnEgPSBlcnI7XG4mIzQzO1x0Zm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlycSA9IGVycjtcbiBcbiBcdC8qIEdldCB0aGUgRk0gZXJyb3IgaW50ZXJydXB0ICovXG4gXHRlcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKG9mX2RldiwgMSk7XG5AQCAtMjc3MywyNSAmIzQzOzI3NzMsNiBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFxuIFx0b2Zfbm9kZV9wdXQobXVyYW1fbm9kZSk7XG4gXG4tXHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIGlycSwgZm1hbl9pcnEsIElSUUZfU0hBUkVELFxuLVx0XHRcdCAgICAgICBcJiMzNDtmbWFuXCYjMzQ7LCBmbWFuKTtcbi1cdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0ZGV2X2VycihcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBcJiMzNDslczogaXJxICVkIGFsbG9jYXRpb24gZmFpbGVkIChlcnJvciA9ICVkKVxcblwmIzM0Oyxcbi1cdFx0XHRfX2Z1bmNfXywgaXJxLCBlcnIpO1xuLVx0XHRnb3RvIGZtYW5fZnJlZTtcbi1cdH1cbi1cbi1cdGlmIChmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7XG4tXHRcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsXG4tXHRcdFx0XHQgICAgICAgZm1hbl9lcnJfaXJxLCBJUlFGX1NIQVJFRCxcbi1cdFx0XHRcdCAgICAgICBcJiMzNDtmbWFuLWVyclwmIzM0OywgZm1hbik7XG4tXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxuXCYjMzQ7LFxuLVx0XHRcdFx0X19mdW5jX18sIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxLCBlcnIpO1xuLVx0XHRcdGdvdG8gZm1hbl9mcmVlO1xuLVx0XHR9XG4tXHR9XG4tXG4gXHRiYXNlX2FkZHIgPSBkZXZtX3BsYXRmb3JtX2dldF9hbmRfaW9yZW1hcF9yZXNvdXJjZShvZl9kZXYsIDAsIFx1MDAyNnJlcyk7XG4gXHRpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihiYXNlX2FkZHIpO1xuQEAgLTI4MjUsNiAmIzQzOzI4MDYsMjQgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbiBcdHJldHVybiBFUlJfUFRSKGVycik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBmbWFuX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBmbWFuICpmbWFuLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0Ym9vbCBpcnFfcmVnaXN0ZXJlZClcbiYjNDM7e1xuJiM0MztcdC8qIEZyZWUgSVJRcyBmaXJzdCB3aGlsZSBmbWFuIGlzIHN0aWxsIHZhbGlkICovXG4mIzQzO1x0aWYgKGlycV9yZWdpc3RlcmVkKSB7XG4mIzQzO1x0XHRpZiAoZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEgIT0gMClcbiYjNDM7XHRcdFx0ZGV2bV9mcmVlX2lycShkZXYsIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxLCBmbWFuKTtcbiYjNDM7XHRcdGRldm1fZnJlZV9pcnEoZGV2LCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuaXJxLCBmbWFuKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtmcmVlKGZtYW4tXHUwMDNla2V5Z2VuKTtcbiYjNDM7XHRmcmVlX2luaXRfcmVzb3VyY2VzKGZtYW4pO1xuJiM0MztcdGtmcmVlKGZtYW4tXHUwMDNlY2ZnKTtcbiYjNDM7XHRmbWFuX211cmFtX2ZpbmlzaChmbWFuLVx1MDAzZW11cmFtKTtcbiYjNDM7XHRrZnJlZShmbWFuLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRrZnJlZShmbWFuKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGZtYW5fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIHtcbiBcdHN0cnVjdCBmbWFuICpmbWFuO1xuQEAgLTI4NDAsMTIgJiM0MzsyODM5LDQyIEBAIHN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRlcnIgPSBmbWFuX2NvbmZpZyhmbWFuKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihkZXYsIFwmIzM0OyVzOiBGTWFuIGNvbmZpZyBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRcdC8qIGZtYW5fY29uZmlnKCkgZnJlZXMgZm1hbiBpbnRlcm5hbGx5IG9uIGFsbCBlcnJvciBwYXRocyAqL1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGlmIChmbWFuX2luaXQoZm1hbikgIT0gMCkge1xuIFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7JXM6IEZNYW4gaW5pdCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycl9ub19pcnE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSZWdpc3RlciBJUlEgaGFuZGxlcnMgb25seSBhZnRlciBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS5cbiYjNDM7XHQgKiBUaGlzIHByZXZlbnRzIHR3byBpc3N1ZXM6XG4mIzQzO1x0ICogMSkgUHJlLWluaXQgTlVMTCBkZXJlZmVyZW5jZTogaXNfaW5pdF9kb25lKE5VTEwpIHJldHVybnMgdHJ1ZSxcbiYjNDM7XHQgKiAgICBzbyBhIHNoYXJlZC1JUlEgc3B1cmlvdXMgZmlyaW5nIGJlZm9yZSBmcG1fcmVncyBpcyBzZXQgd291bGRcbiYjNDM7XHQgKiAgICBkZXJlZmVyZW5jZSBOVUxMLlxuJiM0MztcdCAqIDIpIFVzZS1hZnRlci1mcmVlIG9uIHByb2JlIGZhaWx1cmU6IGZtYW4gd2FzIGt6YWxsb2MmIzM5O2QgKG5vdCBkZXZtKSxcbiYjNDM7XHQgKiAgICBzbyBvbiBlcnJvciBwYXRocyBrZnJlZShmbWFuKSByYW4gYmVmb3JlIGRldm1fZnJlZV9pcnEsIGxlYXZpbmdcbiYjNDM7XHQgKiAgICBhIHdpbmRvdyB3aGVyZSB0aGUgaGFuZGxlciBjb3VsZCBmaXJlIHdpdGggYSBmcmVlZCBkZXZfaWQuXG4mIzQzO1x0ICogQnkgcmVnaXN0ZXJpbmcgaGVyZSwgYm90aCBwcm9ibGVtcyBhcmUgZWxpbWluYXRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlycSwgZm1hbl9pcnEsXG4mIzQzO1x0XHRcdCAgICAgICBJUlFGX1NIQVJFRCwgXCYjMzQ7Zm1hblwmIzM0OywgZm1hbik7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0OyVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRfX2Z1bmNfXywgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlycSwgZXJyKTtcbiYjNDM7XHRcdGdvdG8gZXJyX25vX2lycTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7XG4mIzQzO1x0XHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGZtYW5fZXJyX2lycSwgSVJRRl9TSEFSRUQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O2ZtYW4tZXJyXCYjMzQ7LCBmbWFuKTtcbiYjNDM7XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0OyVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdF9fZnVuY19fLCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSwgZXJyKTtcbiYjNDM7XHRcdFx0Z290byBlcnJfaXJxO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxID09IDApIHtcbkBAIC0yODczLDYgJiM0MzsyOTAyLDEyIEBAIHN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRkZXZfZGJnKGRldiwgXCYjMzQ7Rk1hbiVkIHByb2JlZFxcblwmIzM0OywgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlkKTtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2lycTpcbiYjNDM7XHRkZXZtX2ZyZWVfaXJxKGRldiwgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlycSwgZm1hbik7XG4mIzQzO2Vycl9ub19pcnE6XG4mIzQzO1x0Zm1hbl9mcmVlX3Jlc291cmNlcyhmbWFuLCBkZXYsIGZhbHNlKTtcbiYjNDM7XHRyZXR1cm4gZXJyID86IC1FSU5WQUw7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZtYW5fbWF0Y2hbXSA9IHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmhcbmluZGV4IDc0ZWI2MmViYTBkN2ZmLi42MzBkNTdjMzE0NGNiZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oXG5AQCAtMjg2LDYgJiM0MzsyODYsNyBAQCBzdHJ1Y3QgZm1hbl9kdHNfcGFyYW1zIHtcbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzOyAgICAgICAgICAgICAgICAgICAvKiBGTWFuIG1lbW9yeSByZXNvdXJjZSAqL1xuIFx0dTggaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZNYW4gSUQgKi9cbiBcbiYjNDM7XHRpbnQgaXJxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRk1hbiBJUlEgKi9cbiBcdGludCBlcnJfaXJxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGTWFuIEVycm9yIElSUSAqL1xuIFxuIFx0dTE2IGNsa19mcmVxOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZNYW4gY2xvY2sgZnJlcSAoSW4gTWh6KSAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uY1xuaW5kZXggNmFjN2MyYjBjYjE5OTEuLjZjMmI0ZjdhMDJiODE3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmNcbkBAIC0xMjksMyAmIzQzOzEyOSwxOCBAQCB2b2lkIGZtYW5fbXVyYW1fZnJlZV9tZW0oc3RydWN0IG11cmFtX2luZm8gKm11cmFtLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbiBcbiBcdGdlbl9wb29sX2ZyZWUobXVyYW0tXHUwMDNlcG9vbCwgYWRkciwgc2l6ZSk7XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGZtYW5fbXVyYW1fZmluaXNoXG4mIzQzOyAqIEBtdXJhbTpcdEZNLU1VUkFNIG1vZHVsZSBwb2ludGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBGcmVlcyBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIE1VUkFNIHBhcnRpdGlvbi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgZm1hbl9tdXJhbV9maW5pc2goc3RydWN0IG11cmFtX2luZm8gKm11cmFtKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFtdXJhbSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpb3VubWFwKG11cmFtLVx1MDAzZXZiYXNlKTtcbiYjNDM7XHRnZW5fcG9vbF9kZXN0cm95KG11cmFtLVx1MDAzZXBvb2wpO1xuJiM0MztcdGtmcmVlKG11cmFtKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uaFxuaW5kZXggMzY0M2FmNjFiYWUyNmMuLmE1Y2I1NDRjMGYwODJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmhcbkBAIC0yMyw0ICYjNDM7MjMsNiBAQCB1bnNpZ25lZCBsb25nIGZtYW5fbXVyYW1fYWxsb2Moc3RydWN0IG11cmFtX2luZm8gKm11cmFtLCBzaXplX3Qgc2l6ZSk7XG4gdm9pZCBmbWFuX211cmFtX2ZyZWVfbWVtKHN0cnVjdCBtdXJhbV9pbmZvICptdXJhbSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4gXHRcdFx0IHNpemVfdCBzaXplKTtcbiBcbiYjNDM7dm9pZCBmbWFuX211cmFtX2ZpbmlzaChzdHJ1Y3QgbXVyYW1faW5mbyAqbXVyYW0pO1xuJiM0MztcbiAjZW5kaWYgLyogX19GTV9NVVJBTV9FWFQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMDowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIEZNYW4gKEZyYW1lIE1hbmFnZXIpIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyAoJiMzOTtmc2wsZm1hbiYjMzk7IGFuZCAmIzM5O2ZzbCxmbWFuLW11cmFtJiMzOTspIHRvIHByb2JlLiBUaGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyBhcmUgbm90IHByZXNlbnQgaW4gZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VJiMzOTtzICYjMzk7dmlydCYjMzk7IG1hY2hpbmUgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDljNDM2MGYxM2U3YjBmZDAwOGM0ODcxOWQ5M2JiODU0NDZkMmUzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMgMTA6MDA6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMKaW5kZXggMjk5YmFiMDQzMTc1YjMuLjc1MmMwZGYwZTE3YzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jCkBAIC0yNjk1LDcgJiM0MzsyNjk1LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikKIAl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAl1MzIgdmFsLCByYW5nZVsyXTsKLQlpbnQgZXJyLCBpcnE7CiYjNDM7CWludCBlcnI7CiAJc3RydWN0IGNsayAqY2xrOwogCXUzMiBjbGtfcmF0ZTsKIApAQCAtMjcxNyw3ICYjNDM7MjcxNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpCiAJZXJyID0gcGxhdGZvcm1fZ2V0X2lycShvZl9kZXYsIDApOwogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIGZtYW5fbm9kZV9wdXQ7Ci0JaXJxID0gZXJyOwomIzQzOwlmbWFuLSZndDtkdHNfcGFyYW1zLmlycSA9IGVycjsKIAogCS8qIEdldCB0aGUgRk0gZXJyb3IgaW50ZXJydXB0ICovCiAJZXJyID0gcGxhdGZvcm1fZ2V0X2lycShvZl9kZXYsIDEpOwpAQCAtMjc3MywyNSAmIzQzOzI3NzMsNiBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KQogCiAJb2Zfbm9kZV9wdXQobXVyYW1fbm9kZSk7CiAKLQllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKCZhbXA7b2ZfZGV2LSZndDtkZXYsIGlycSwgZm1hbl9pcnEsIElSUUZfU0hBUkVELAotCQkJICAgICAgICYjMzQ7Zm1hbiYjMzQ7LCBmbWFuKTsKLQlpZiAoZXJyICZsdDsgMCkgewotCQlkZXZfZXJyKCZhbXA7b2ZfZGV2LSZndDtkZXYsICYjMzQ7JXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcbiYjMzQ7LAotCQkJX19mdW5jX18sIGlycSwgZXJyKTsKLQkJZ290byBmbWFuX2ZyZWU7Ci0JfQotCi0JaWYgKGZtYW4tJmd0O2R0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7Ci0JCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoJmFtcDtvZl9kZXYtJmd0O2RldiwgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5lcnJfaXJxLAotCQkJCSAgICAgICBmbWFuX2Vycl9pcnEsIElSUUZfU0hBUkVELAotCQkJCSAgICAgICAmIzM0O2ZtYW4tZXJyJiMzNDssIGZtYW4pOwotCQlpZiAoZXJyICZsdDsgMCkgewotCQkJZGV2X2VycigmYW1wO29mX2Rldi0mZ3Q7ZGV2LCAmIzM0OyVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXG4mIzM0OywKLQkJCQlfX2Z1bmNfXywgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5lcnJfaXJxLCBlcnIpOwotCQkJZ290byBmbWFuX2ZyZWU7Ci0JCX0KLQl9Ci0KIAliYXNlX2FkZHIgPSBkZXZtX3BsYXRmb3JtX2dldF9hbmRfaW9yZW1hcF9yZXNvdXJjZShvZl9kZXYsIDAsICZhbXA7cmVzKTsKIAlpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHsKIAkJZXJyID0gUFRSX0VSUihiYXNlX2FkZHIpOwpAQCAtMjgyNSw2ICYjNDM7MjgwNiwyNCBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KQogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBmbWFuX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBmbWFuICpmbWFuLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCWJvb2wgaXJxX3JlZ2lzdGVyZWQpCiYjNDM7ewomIzQzOwkvKiBGcmVlIElSUXMgZmlyc3Qgd2hpbGUgZm1hbiBpcyBzdGlsbCB2YWxpZCAqLwomIzQzOwlpZiAoaXJxX3JlZ2lzdGVyZWQpIHsKJiM0MzsJCWlmIChmbWFuLSZndDtkdHNfcGFyYW1zLmVycl9pcnEgIT0gMCkKJiM0MzsJCQlkZXZtX2ZyZWVfaXJxKGRldiwgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5lcnJfaXJxLCBmbWFuKTsKJiM0MzsJCWRldm1fZnJlZV9pcnEoZGV2LCBmbWFuLSZndDtkdHNfcGFyYW1zLmlycSwgZm1hbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2ZyZWUoZm1hbi0mZ3Q7a2V5Z2VuKTsKJiM0MzsJZnJlZV9pbml0X3Jlc291cmNlcyhmbWFuKTsKJiM0MzsJa2ZyZWUoZm1hbi0mZ3Q7Y2ZnKTsKJiM0MzsJZm1hbl9tdXJhbV9maW5pc2goZm1hbi0mZ3Q7bXVyYW0pOwomIzQzOwlrZnJlZShmbWFuLSZndDtzdGF0ZSk7CiYjNDM7CWtmcmVlKGZtYW4pOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpCiB7CiAJc3RydWN0IGZtYW4gKmZtYW47CkBAIC0yODQwLDEyICYjNDM7MjgzOSw0MiBAQCBzdGF0aWMgaW50IGZtYW5fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KQogCWVyciA9IGZtYW5fY29uZmlnKGZtYW4pOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihkZXYsICYjMzQ7JXM6IEZNYW4gY29uZmlnIGZhaWxlZFxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCS8qIGZtYW5fY29uZmlnKCkgZnJlZXMgZm1hbiBpbnRlcm5hbGx5IG9uIGFsbCBlcnJvciBwYXRocyAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoZm1hbl9pbml0KGZtYW4pICE9IDApIHsKIAkJZGV2X2VycihkZXYsICYjMzQ7JXM6IEZNYW4gaW5pdCBmYWlsZWRcbiYjMzQ7LCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOwomIzQzOwkJZ290byBlcnJfbm9faXJxOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFJlZ2lzdGVyIElSUSBoYW5kbGVycyBvbmx5IGFmdGVyIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLgomIzQzOwkgKiBUaGlzIHByZXZlbnRzIHR3byBpc3N1ZXM6CiYjNDM7CSAqIDEpIFByZS1pbml0IE5VTEwgZGVyZWZlcmVuY2U6IGlzX2luaXRfZG9uZShOVUxMKSByZXR1cm5zIHRydWUsCiYjNDM7CSAqICAgIHNvIGEgc2hhcmVkLUlSUSBzcHVyaW91cyBmaXJpbmcgYmVmb3JlIGZwbV9yZWdzIGlzIHNldCB3b3VsZAomIzQzOwkgKiAgICBkZXJlZmVyZW5jZSBOVUxMLgomIzQzOwkgKiAyKSBVc2UtYWZ0ZXItZnJlZSBvbiBwcm9iZSBmYWlsdXJlOiBmbWFuIHdhcyBremFsbG9jJiMzOTtkIChub3QgZGV2bSksCiYjNDM7CSAqICAgIHNvIG9uIGVycm9yIHBhdGhzIGtmcmVlKGZtYW4pIHJhbiBiZWZvcmUgZGV2bV9mcmVlX2lycSwgbGVhdmluZwomIzQzOwkgKiAgICBhIHdpbmRvdyB3aGVyZSB0aGUgaGFuZGxlciBjb3VsZCBmaXJlIHdpdGggYSBmcmVlZCBkZXZfaWQuCiYjNDM7CSAqIEJ5IHJlZ2lzdGVyaW5nIGhlcmUsIGJvdGggcHJvYmxlbXMgYXJlIGVsaW1pbmF0ZWQuCiYjNDM7CSAqLwomIzQzOwllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5pcnEsIGZtYW5faXJxLAomIzQzOwkJCSAgICAgICBJUlFGX1NIQVJFRCwgJiMzNDtmbWFuJiMzNDssIGZtYW4pOwomIzQzOwlpZiAoZXJyICZsdDsgMCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7JXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcbiYjMzQ7LAomIzQzOwkJCV9fZnVuY19fLCBmbWFuLSZndDtkdHNfcGFyYW1zLmlycSwgZXJyKTsKJiM0MzsJCWdvdG8gZXJyX25vX2lycTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5lcnJfaXJxICE9IDApIHsKJiM0MzsJCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBmbWFuLSZndDtkdHNfcGFyYW1zLmVycl9pcnEsCiYjNDM7CQkJCSAgICAgICBmbWFuX2Vycl9pcnEsIElSUUZfU0hBUkVELAomIzQzOwkJCQkgICAgICAgJiMzNDtmbWFuLWVyciYjMzQ7LCBmbWFuKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKSB7CiYjNDM7CQkJZGV2X2VycihkZXYsICYjMzQ7JXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcbiYjMzQ7LAomIzQzOwkJCQlfX2Z1bmNfXywgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5lcnJfaXJxLCBlcnIpOwomIzQzOwkJCWdvdG8gZXJyX2lycTsKJiM0MzsJCX0KIAl9CiAKIAlpZiAoZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5lcnJfaXJxID09IDApIHsKQEAgLTI4NzMsNiAmIzQzOzI5MDIsMTIgQEAgc3RhdGljIGludCBmbWFuX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikKIAlkZXZfZGJnKGRldiwgJiMzNDtGTWFuJWQgcHJvYmVkXG4mIzM0OywgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5pZCk7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfaXJxOgomIzQzOwlkZXZtX2ZyZWVfaXJxKGRldiwgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5pcnEsIGZtYW4pOwomIzQzO2Vycl9ub19pcnE6CiYjNDM7CWZtYW5fZnJlZV9yZXNvdXJjZXMoZm1hbiwgZGV2LCBmYWxzZSk7CiYjNDM7CXJldHVybiBlcnIgPzogLUVJTlZBTDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZm1hbl9tYXRjaFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oCmluZGV4IDc0ZWI2MmViYTBkN2ZmLi42MzBkNTdjMzE0NGNiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uaApAQCAtMjg2LDYgJiM0MzsyODYsNyBAQCBzdHJ1Y3QgZm1hbl9kdHNfcGFyYW1zIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsgICAgICAgICAgICAgICAgICAgLyogRk1hbiBtZW1vcnkgcmVzb3VyY2UgKi8KIAl1OCBpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRk1hbiBJRCAqLwogCiYjNDM7CWludCBpcnE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGTWFuIElSUSAqLwogCWludCBlcnJfaXJxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGTWFuIEVycm9yIElSUSAqLwogCiAJdTE2IGNsa19mcmVxOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZNYW4gY2xvY2sgZnJlcSAoSW4gTWh6KSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5jCmluZGV4IDZhYzdjMmIwY2IxOTkxLi42YzJiNGY3YTAyYjgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uYwpAQCAtMTI5LDMgJiM0MzsxMjksMTggQEAgdm9pZCBmbWFuX211cmFtX2ZyZWVfbWVtKHN0cnVjdCBtdXJhbV9pbmZvICptdXJhbSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCiAKIAlnZW5fcG9vbF9mcmVlKG11cmFtLSZndDtwb29sLCBhZGRyLCBzaXplKTsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBmbWFuX211cmFtX2ZpbmlzaAomIzQzOyAqIEBtdXJhbToJRk0tTVVSQU0gbW9kdWxlIHBvaW50ZXIuCiYjNDM7ICoKJiM0MzsgKiBGcmVlcyBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIE1VUkFNIHBhcnRpdGlvbi4KJiM0MzsgKi8KJiM0Mzt2b2lkIGZtYW5fbXVyYW1fZmluaXNoKHN0cnVjdCBtdXJhbV9pbmZvICptdXJhbSkKJiM0Mzt7CiYjNDM7CWlmICghbXVyYW0pCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlvdW5tYXAobXVyYW0tJmd0O3ZiYXNlKTsKJiM0MzsJZ2VuX3Bvb2xfZGVzdHJveShtdXJhbS0mZ3Q7cG9vbCk7CiYjNDM7CWtmcmVlKG11cmFtKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmgKaW5kZXggMzY0M2FmNjFiYWUyNmMuLmE1Y2I1NDRjMGYwODJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5oCkBAIC0yMyw0ICYjNDM7MjMsNiBAQCB1bnNpZ25lZCBsb25nIGZtYW5fbXVyYW1fYWxsb2Moc3RydWN0IG11cmFtX2luZm8gKm11cmFtLCBzaXplX3Qgc2l6ZSk7CiB2b2lkIGZtYW5fbXVyYW1fZnJlZV9tZW0oc3RydWN0IG11cmFtX2luZm8gKm11cmFtLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKIAkJCSBzaXplX3Qgc2l6ZSk7CiAKJiM0Mzt2b2lkIGZtYW5fbXVyYW1fZmluaXNoKHN0cnVjdCBtdXJhbV9pbmZvICptdXJhbSk7CiYjNDM7CiAjZW5kaWYgLyogX19GTV9NVVJBTV9FWFQgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGTWFuIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgYGZtYW4uY2AgYW5kIGBmbWFuX211cmFtLmNgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYW4gaXNzdWUgd2l0aCBJUlEgcmVnaXN0cmF0aW9uIGluIHRoZSBGcmVlc2NhbGUgRk1hbiBkcml2ZXIuIFRoZSBtYWluIHRocnVzdCBpcyBtb3ZpbmcgdGhlIElSUSByZWdpc3RyYXRpb24gdG8gdGhlIGVuZCBvZiBgZm1hbl9wcm9iZWAgdG8gcHJldmVudCBhIHBvdGVudGlhbCBOVUxMIGRlcmVmZXJlbmNlIGFuZCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyBpZiB0aGUgcHJvYmUgZmFpbHMgZWFybHkuIFRoYXQmIzM5O3MgYSBnb29kIHByYWN0aWNlLCBnZW5lcmFsbHkuIFRoZSBhZGRpdGlvbiBvZiBgZm1hbl9mcmVlX3Jlc291cmNlc2AgYW5kIGBmbWFuX211cmFtX2ZpbmlzaGAgZm9yIHByb3BlciBjbGVhbnVwIG9uIHByb2JlIGZhaWx1cmUgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvby4gTm8gc3VycHJpc2VzIHRoZXJlOyBwcm9wZXIgcmVzb3VyY2UgbWFuYWdlbWVudCBpcyBjcml0aWNhbC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiwgdGhvdWdoLCBpcyBob3cgKnJlbGV2YW50KiBpcyB0aGlzIGZpeCBpbiBjb250ZW1wb3JhcnkgZW52aXJvbm1lbnRzPyBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIEZyZWVzY2FsZSBGTWFuIOKAkyB0aGF0JiMzOTtzIHRoZSBGcmFtZSBNYW5hZ2VyLiBJdCYjMzk7cyB1c3VhbGx5IHRpZWQgdG8gc3BlY2lmaWMgRnJlZXNjYWxlIFFvcklRIFNvQ3MsIGFuZCB0aG9zZSBhcmUgdXN1YWxseSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucy4gU28sIGNhbiB0aGlzIGJlIGV2ZW4gKmV4ZXJjaXNlZCogd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVT8gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgUUVNVSBoZXJlLiBDYW4gUUVNVSBlbXVsYXRlIHRoZSBGcmVlc2NhbGUgRk1hbj8gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGhhcmR3YXJlIGNvbXBvbmVudCwgbXkgaW5zdGluY3QgaXMgJiMzNDtubyYjMzQ7LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhlIHBvdGVudGlhbCBmb3IgdGhpcyBjb2RlIHBhdGggdG8gZXZlbiB0cmlnZ2VyIG5lZWRzIHRvIGJlIHZlcmlmaWVkLiBMZXQgbWUgY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoaXMgZHJpdmVyLiBJJiMzOTtsbCBzZWUgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgdGhhdCBhcmUgaGVscGZ1bCBpbiBRRU1VLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGU0xfRk1BTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzoyOmNvbmZpZyBGU0xfRk1BTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Rk1hbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQqKgoKUmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtLCBhIHByb2Nlc3MsIGEgcHJvYmxlbSDigJMgd2hhdGV2ZXIgJiMzNDtpdCYjMzQ7IGlzIOKAkyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzIGlzIHBhcmFtb3VudC4gV2hhdCBhcmUgdGhlIGtleSB2YXJpYWJsZXM/IFRoZSBjb3JlIGlucHV0cz8gVGhlIHVuZGVybHlpbmcgYXNzdW1wdGlvbnM/IFBpbnBvaW50aW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyB0aGUgZXNzZW50aWFsIGZpcnN0IHN0ZXAgdG8gYW55IGVmZmVjdGl2ZSBhbmFseXNpcy4gV2hlcmUgZG8gd2UgYmVnaW4gdG8gdW5yYXZlbCBjb21wbGV4aXR5PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc9Mj1jb25maWcgRlNMX0ZNQU5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0ZNYW4gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBGU0xfU09DIHx8IEFSQ0hfTEFZRVJTQ0FQRSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctNS1cdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc9MTQ9Y29uZmlnIERQQUFfRVJSQVRVTV9BMDUwMzg1XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTE1LVx0Ym9vbFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzoxNjpcdGRlcGVuZHMgb24gQVJNNjQgXHUwMDI2XHUwMDI2IEZTTF9EUEFBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTE3LVx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGZtYW5fcHJvYmUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZm1hbl9wcm9iZWAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIG5vdGljaW5nIGlzIHRoYXQgaXRzIGFjdGl2YXRpb24gZGVwZW5kcyBvbiBzcGVjaWZpYyBjb25kaXRpb25zOiBgRlNMX1NPQyB8fCBBUkNIX0xBWUVSU0NBUEUgfHwgQ09NUElMRV9URVNUYC4gIFRoaXMgaXMgYSBwbGF0Zm9ybSBkZXZpY2UsIG1lYW5pbmcgaXQmIzM5O3MgZ29pbmcgdG8gbmVlZCBhIGRldmljZSB0cmVlIG5vZGUgdG8gYWN0dWFsbHkgcHJvYmUuIFRoZSBiaWcgcXVlc3Rpb24gaW4gbXkgbWluZCBpcyBob3cgd2UgY2FuIGVuc3VyZSB0aGF0IG5vZGUgZXhpc3RzLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgb3IgZnV6emluZyBlbnZpcm9ubWVudC4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlIGluamVjdCBhIGRldmljZSB0cmVlIG5vZGUgZm9yIHRoaXMgdGhpbmc/IFN5emthbGxlciBjYW4gZG8gdGhpcyBpbiBzb21lIHNpdHVhdGlvbnMgdXNpbmcgYHN5el9kZXZfcGxhdGZvcm1gIG9yIHNpbWlsYXIgcHNldWRvLXN5c2NhbGxzIGlmIHRoZXkmIzM5O3JlIHN1cHBvcnRlZCwgb3IgYnkgbW9kaWZ5aW5nIHRoZSBkZXZpY2UgdHJlZSBkaXJlY3RseS4gQnV0IHdhaXQgYSBtaW51dGUsIHN5emthbGxlciBpc24mIzM5O3QgZ2VuZXJhbGx5IGRlc2lnbmVkIHRvIGluamVjdCBhcmJpdHJhcnkgRFQgbm9kZXMgd2l0aG91dCBzb21lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3IgdHJpY2tzIGxpa2UgYG9mX292ZXJsYXlgLiBBbHNvLCBldmVuIHdpdGggYHN5el9kZXZfcGxhdGZvcm1gLCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIGl0IHdvbiYjMzk7dCB3b3JrIGZvciBhbGwgZHJpdmVycyBiZWNhdXNlIG9mIHJlc291cmNlIGRlcGVuZGVuY2llcywgbGlrZSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucywgSVJRcywgb3IgY2xvY2tzIHRoYXQgdGhlIGRyaXZlciByZXF1aXJlcy4gSXQgbG9va3MgbGlrZSBzeXprYWxsZXIgaGFzIHNvbWUgc3VwcG9ydCBmb3IgaW5qZWN0aW5nIHBsYXRmb3JtIGRldmljZXMsIGJ1dCBpdCYjMzk7cyBsaW1pdGVkIGluIHNjb3BlLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgaXMgYSB3YXkgdG8gdXNlIHN5emthbGxlciB0byByZWFjaCBgZm1hbl9wcm9iZWAgaW4gdGhpcyBjYXNlLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyIHByb2JlIGZ1bmN0aW9uLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGZtYW5fbWF0Y2hgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZtYW5fbWF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jPTI4Mjc9c3RhdGljIGludCBmbWFuX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2Rldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjkxMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYzoyOTEzOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZtYW5fbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTE0LVx0e1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI5MTk6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZm1hbl9tYXRjaCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjkyMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yOTIxPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZtYW5fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTIzLVx0XHQubmFtZSA9IFwmIzM0O2ZzbC1mbWFuXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI5MjQ6XHRcdC5vZl9tYXRjaF90YWJsZSA9IGZtYW5fbWF0Y2gsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjkyNS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMwOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBDb250ZW50cyBvZiBgZm1hbl9tYXRjaGAqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgYGZtYW5fbWF0Y2hgIGFjdHVhbGx5ICppcyouIElzIGl0IGEgdmFyaWFibGUsIGEgZnVuY3Rpb24sIGEgZGF0YSBzdHJ1Y3R1cmU/IEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIGtleS4gS25vd2luZyBpdHMgdHlwZSB3aWxsIGluc3RhbnRseSBwcm92aWRlIGEgbG90IG9mIHZhbHVhYmxlIGNvbnRleHQuIEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMsIGxpa2UgKndoYXQgZGF0YSBkb2VzIGl0IGNvbnRhaW4/KiwgKmhvdyBpcyB0aGF0IGRhdGEgc3RydWN0dXJlZD8qIGFuZCB1bHRpbWF0ZWx5LCAqaG93IGRvZXMgdGhpcyBhbGwgcmVsYXRlIHRvIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHN5c3RlbS90YXNrIGF0IGhhbmQ/KiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBpbnNpZGUgYW5kIHRoZW4gSSBjYW4gYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgY29tcG9uZW50IGZ1bmN0aW9ucyBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aGluIHRoZSB3aWRlciBzeXN0ZW0uIEkga25vdyB0aGF0IHVuZGVyc3RhbmRpbmcgYGZtYW5fbWF0Y2hgIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gZGVjaXBoZXJpbmcgdGhpcyB3aG9sZSB0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnNsLWZtYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jPTI5MjE9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZm1hbl9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjkyMi1cdC5kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6MjkyMzpcdFx0Lm5hbWUgPSBcJiMzNDtmc2wtZm1hblwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTI0LVx0XHQub2ZfbWF0Y2hfdGFibGUgPSBmbWFuX21hdGNoLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzI0CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgRm9jdXMqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyB0byBwcm9jZXNzIHRoZSB0ZXh0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgcmVhZCBgZm1hbl9tYXRjaGAuJiMzNDsgSSYjMzk7bSBub3QgZ29pbmcgdG8gc3BlbmQgdGltZSB3b25kZXJpbmcgKndoYXQqIGBmbWFuX21hdGNoYCBpcyDigJMgSSBjYW4gZXh0cmFwb2xhdGUgZnJvbSB0aGUgY29udGV4dCB0aGF0IGl0IHdpbGwgYmUgYSB1c2VmdWwgaW5wdXQgZm9yIHRoaXMgZXZhbHVhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGFuZGxlIG9uIGl0cyBzdHJ1Y3R1cmUgYW5kIGNvbnRlbnQuIFRoaXMgbGlrZWx5IGludm9sdmVzIHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGtleSBlbGVtZW50cyB0byBmb3JtIGFuIGluZm9ybWVkIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyOTEwOlx0XHRyZXR1cm4gZXJyID86IC1FSU5WQUw7XG4yOTExOlx0fVxuMjkxMjpcdFxuMjkxMzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZtYW5fbWF0Y2hbXSA9IHtcbjI5MTQ6XHRcdHtcbjI5MTU6XHRcdFx0LmNvbXBhdGlibGUgPSBcJiMzNDtmc2wsZm1hblwmIzM0O30sXG4yOTE2Olx0XHR7fVxuMjkxNzpcdH07XG4yOTE4Olx0XG4yOTE5Olx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZm1hbl9tYXRjaCk7XG4yOTIwOlx0XG4yOTIxOlx0c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZm1hbl9kcml2ZXIgPSB7XG4yOTIyOlx0XHQuZHJpdmVyID0ge1xuMjkyMzpcdFx0XHQubmFtZSA9IFwmIzM0O2ZzbC1mbWFuXCYjMzQ7LFxuMjkyNDpcdFx0XHQub2ZfbWF0Y2hfdGFibGUgPSBmbWFuX21hdGNoLFxuMjkyNTpcdFx0fSxcbjI5MjY6XHRcdC5wcm9iZSA9IGZtYW5fcHJvYmUsXG4yOTI3Olx0fTtcbjI5Mjg6XHRcbjI5Mjk6XHRzdGF0aWMgaW50IF9faW5pdCBmbWFuX2xvYWQodm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE2OQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyAmIzM0O2ZzbCxmbWFuJiMzNDsgQ29kZSoqCgpPa2F5LCBzbyBJIHNlZSBhIG1hdGNoOiAmIzM0O2ZzbCxmbWFuLiYjMzQ7IE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHRoaXMgY29kZSBiZSByZWFjaGVkLCBhbmQgbWVhbmluZ2Z1bGx5IGZ1enplZCwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gUGxhdGZvcm0gZHJpdmVycywgZXNwZWNpYWxseSBvbmVzIHRoYXQgdG91Y2ggc3BlY2lmaWMgaGFyZHdhcmUgcmVzb3VyY2VzLCBsaWtlIG1lbW9yeS1tYXBwZWQgSS9PIG9yIHBhcnRpY3VsYXIgY2xvY2tzLCBhcmUgdHlwaWNhbGx5IGEgcGFpbiB0byBmdXp6IHdpdGhvdXQgZWl0aGVyIGFuIGV4dHJlbWVseSBzcGVjaWFsaXplZCBlbXVsYXRvciBvciBzb21lIHRyaWNrZXJ5IGluIFN5emthbGxlciB0byBpbmplY3QgdGhvc2UgZGVwZW5kZW5jaWVzLgoKQnV0IHdhaXQsIFN5emthbGxlciAqZG9lcyogaGF2ZSBgc3l6X2Rldl9wbGF0Zm9ybWAsIHJpZ2h0PyBUaGF0IGNvdWxkIGJlIGEgd2F5IHRvIGNyZWF0ZSB0aGUgcGxhdGZvcm0gZGV2aWNlcyB3ZSBuZWVkLiBMZXQgbWUgc2VlLi4uIHRoZSBgZm1hbl9wcm9iZWAgZnVuY3Rpb24gY2FsbHMgYHJlYWRfZHRzX25vZGVgLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJdCBjYWxscyBgZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2VgLCBgcGxhdGZvcm1fZ2V0X2lycWAgYSBjb3VwbGUgb2YgdGltZXMsIGFuZCBgb2ZfY2xrX2dldGAuIEFuZCBjcnVjaWFsbHksIGl0IHVzZXMgYG9mX3BhcnNlX3BoYW5kbGVgOgoKYGBgYwptdXJhbV9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShvZl9kZXYtJmd0O2Rldi5vZl9ub2RlLCAmIzM0O2ZzbCxmbWFuLW11cmFtJiMzNDssIDApOwpgYGAKCkFoLCByaWdodC4gSWYgYG11cmFtX25vZGVgIGlzbiYjMzk7dCBmb3VuZCwgaXQgcmV0dXJucyBhbiBlcnJvci4gVGhhdCBtZWFucyBgb2ZfcGFyc2VfcGhhbmRsZWAgaXMgbG9va2luZyBmb3IgYSBkZXZpY2UgdHJlZSBub2RlIHdpdGggYSB2ZXJ5IHNwZWNpZmljIHByb3BlcnR5LCAmIzM0O2ZzbCxmbWFuLW11cmFtLiYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYHJlYWRfZHRzX25vZGVgIGZ1bmN0aW9uIG1vcmUgY29tcGxldGVseS4gVGhpcyBpcyBrZXkuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzYwOlx0XHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXM6IGNvdWxkIG5vdCBmaW5kIE1VUkFNIG5vZGVcXG5cJiMzNDssXG4yNzYxOlx0XHRcdFx0X19mdW5jX18pO1xuMjc2MjpcdFx0XHRnb3RvIGZtYW5fZnJlZTtcbjI3NjM6XHRcdH1cbjI3NjQ6XHRcbjI3NjU6XHRcdGVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobXVyYW1fbm9kZSwgMCxcbjI3NjY6XHRcdFx0XHRcdCAgICAgXHUwMDI2Zm1hbi1cdTAwM2VkdHNfcGFyYW1zLm11cmFtX3Jlcyk7XG4yNzY3Olx0XHRpZiAoZXJyKSB7XG4yNzY4Olx0XHRcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xuMjc2OTpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKCkgPSAlZFxcblwmIzM0OyxcbjI3NzA6XHRcdFx0XHRfX2Z1bmNfXywgZXJyKTtcbjI3NzE6XHRcdFx0Z290byBmbWFuX2ZyZWU7XG4yNzcyOlx0XHR9XG4yNzczOlx0XG4yNzc0Olx0XHRvZl9ub2RlX3B1dChtdXJhbV9ub2RlKTtcbjI3NzU6XHRcbjI3NzY6XHRcdGJhc2VfYWRkciA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKG9mX2RldiwgMCwgXHUwMDI2cmVzKTtcbjI3Nzc6XHRcdGlmIChJU19FUlIoYmFzZV9hZGRyKSkge1xuMjc3ODpcdFx0XHRlcnIgPSBQVFJfRVJSKGJhc2VfYWRkcik7XG4yNzc5Olx0XHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXM6IGRldm1faW9yZW1hcCgpIGZhaWxlZFxcblwmIzM0OywgX19mdW5jX18pO1xuMjc4MDpcdFx0XHRnb3RvIGZtYW5fZnJlZTtcbjI3ODE6XHRcdH1cbjI3ODI6XHRcbjI3ODM6XHRcdGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5iYXNlX2FkZHIgPSBiYXNlX2FkZHI7XG4yNzg0Olx0XHRmbWFuLVx1MDAzZWR0c19wYXJhbXMucmVzID0gcmVzO1xuMjc4NTpcdFxuMjc4NjpcdFx0Zm1hbi1cdTAwM2VkZXYgPSBcdTAwMjZvZl9kZXYtXHUwMDNlZGV2O1xuMjc4NzpcdFxuMjc4ODpcdFx0ZXJyID0gb2ZfcGxhdGZvcm1fcG9wdWxhdGUoZm1fbm9kZSwgTlVMTCwgTlVMTCwgXHUwMDI2b2ZfZGV2LVx1MDAzZWRldik7XG4yNzg5Olx0XHRpZiAoZXJyKSB7XG4yNzkwOlx0XHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXM6IG9mX3BsYXRmb3JtX3BvcHVsYXRlKCkgZmFpbGVkXFxuXCYjMzQ7LFxuMjc5MTpcdFx0XHRcdF9fZnVuY19fKTtcbjI3OTI6XHRcdFx0Z290byBmbWFuX2ZyZWU7XG4yNzkzOlx0XHR9XG4yNzk0Olx0XG4yNzk1Olx0I2lmZGVmIENPTkZJR19EUEFBX0VSUkFUVU1fQTA1MDM4NVxuMjc5NjpcdFx0Zm1hbl9oYXNfZXJyX2EwNTAzODUgPVxuMjc5NzpcdFx0XHRvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZm1fbm9kZSwgXCYjMzQ7ZnNsLGVycmF0dW0tYTA1MDM4NVwmIzM0Oyk7XG4yNzk4Olx0I2VuZGlmXG4yNzk5Olx0XG4yODAwOlx0XHRyZXR1cm4gZm1hbjtcbjI4MDE6XHRcbjI4MDI6XHRmbWFuX25vZGVfcHV0OlxuMjgwMzpcdFx0b2Zfbm9kZV9wdXQoZm1fbm9kZSk7XG4yODA0Olx0Zm1hbl9mcmVlOlxuMjgwNTpcdFx0a2ZyZWUoZm1hbik7XG4yODA2Olx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMjgwNzpcdH1cbjI4MDg6XHRcbjI4MDk6XHRzdGF0aWMgdm9pZCBmbWFuX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBmbWFuICpmbWFuLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTYKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBmc2wsZm1hbi1tdXJhbSBSZXF1aXJlbWVudCBhbmQgU3l6a2FsbGVyJiMzOTtzIENhcGFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCBpdCBuZWVkcyB0aGUgYGZzbCxmbWFuLW11cmFtYCBwaGFuZGxlIGluIHRoZSBkZXZpY2UgdHJlZS4gVGhhdCYjMzk7cyB0aGUga2V5IHJlcXVpcmVtZW50IGhlcmUuIE15IGZpcnN0IHRob3VnaHQgaXMsIGNhbiBTeXprYWxsZXIgaGFuZGxlIHRoaXM/IFJpZ2h0IG5vdywgaXQgZG9lc24mIzM5O3Qgc2VlbSBsaWtlIGl0IGNhbiBkaXJlY3RseSBpbmplY3QgYXJiaXRyYXJ5IGRldmljZSB0cmVlIHByb3BlcnRpZXMsIGVzcGVjaWFsbHkgc29tZXRoaW5nIGFzIHNwZWNpZmljIGFzIGBmc2wsZm1hbi1tdXJhbWAuIFRoaXMgaXMgYSBodXJkbGUuCgpBIHF1aWNrIHBhdXNlIGZvciByZWZsZWN0aW9uOiBhbSBJIGV2ZW4gKmFibGUqIHRvIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGggd2l0aCBTeXprYWxsZXIsIGdpdmVuIHRoaXMgY29uc3RyYWludD8gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIuIElzIHRoZXJlIGFueSBleGlzdGluZyBtZWNoYW5pc20gdGhhdCBJIGNhbiBsZXZlcmFnZSB0byBjYWxsIGBmbWFuX3Byb2JlYD8gVGhpcyBpcyBjcml0aWNhbC4KCkFscmlnaHQsIGlmIFN5emthbGxlciBvZmZlcnMgYHN5el9kZXZfcGxhdGZvcm1gLCBJIGNvdWxkIHBvdGVudGlhbGx5IGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZS4gQnV0IHRoYXQgYnkgaXRzZWxmIGlzbiYjMzk7dCBlbm91Z2g7IHRoZSBjcnVjaWFsIGBvZl9ub2RlYCBwcm9wZXJ0eSB3b24mIzM5O3QgYmUgY29ycmVjdGx5IHBvcHVsYXRlZCwgcGFydGljdWxhcmx5IHdpdGggdGhvc2UgcmVxdWlyZWQgYGZzbCxmbWFuLW11cmFtYCBwcm9wZXJ0aWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcHJvcGVydHkgaXMgcG9wdWxhdGVkLCB0aGlzIGlzIGEgbm9uLXN0YXJ0ZXIgb3RoZXJ3aXNlLgoKU28sIEkgbmVlZCB0byBjaGVjayB0byBkZXRlcm1pbmUgaWYgYG9mX3BhcnNlX3BoYW5kbGVgIGlzIGNhbGxlZCBzb21ld2hlcmUgYWxvbmcgdGhlIHdheS4gVW5kZXJzdGFuZGluZyBob3cgcGhhbmRsZXMgYXJlIHBhcnNlZCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmQgaG93IEkgY291bGQgcG90ZW50aWFsbHkgdXNlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc0MDpcdFx0XHRcdF9fZnVuY19fLCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuaWQpO1xuMjc0MTpcdFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4yNzQyOlx0XHR9XG4yNzQzOlx0XHQvKiBSb3VuZGluZyB0byBNSHogKi9cbjI3NDQ6XHRcdGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5jbGtfZnJlcSA9IERJVl9ST1VORF9VUChjbGtfcmF0ZSwgMTAwMDAwMCk7XG4yNzQ1Olx0XG4yNzQ2Olx0XHRlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShmbV9ub2RlLCBcJiMzNDtmc2wscW1hbi1jaGFubmVsLXJhbmdlXCYjMzQ7LFxuMjc0NzpcdFx0XHRcdFx0XHQgXHUwMDI2cmFuZ2VbMF0sIDIpO1xuMjc0ODpcdFx0aWYgKGVycikge1xuMjc0OTpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBmYWlsZWQgdG8gcmVhZCBmc2wscW1hbi1jaGFubmVsLXJhbmdlIGZvciAlcE9GXFxuXCYjMzQ7LFxuMjc1MDpcdFx0XHRcdF9fZnVuY19fLCBmbV9ub2RlKTtcbjI3NTE6XHRcdFx0Z290byBmbWFuX25vZGVfcHV0O1xuMjc1MjpcdFx0fVxuMjc1MzpcdFx0Zm1hbi1cdTAwM2VkdHNfcGFyYW1zLnFtYW5fY2hhbm5lbF9iYXNlID0gcmFuZ2VbMF07XG4yNzU0Olx0XHRmbWFuLVx1MDAzZWR0c19wYXJhbXMubnVtX29mX3FtYW5fY2hhbm5lbHMgPSByYW5nZVsxXTtcbjI3NTU6XHRcbjI3NTY6XHRcdC8qIEdldCB0aGUgTVVSQU0gYmFzZSBhZGRyZXNzIGFuZCBzaXplICovXG4yNzU3Olx0XHRtdXJhbV9ub2RlID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKGZtX25vZGUsIGZtYW5fbXVyYW1fbWF0Y2gpO1xuMjc1ODpcdFx0aWYgKCFtdXJhbV9ub2RlKSB7XG4yNzU5Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NDQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgTm9kZSBNYXRjaGluZyBGdW5jdGlvbioqCgpSaWdodCwgc28gaXQmIzM5O3MgY2FsbGluZyBgb2ZfZmluZF9tYXRjaGluZ19ub2RlKGZtX25vZGUsIGZtYW5fbXVyYW1fbWF0Y2gpYC4gSW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZSBmdW5jdGlvbiBjYWxsLCBzbyBJIGtub3cgd2UmIzM5O3JlIGxvb2tpbmcgZm9yIGEgbWF0Y2hpbmcgbm9kZSwgbGlrZWx5IHdpdGhpbiBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGJhc2VkIG9uIHRoZSAmIzM0O29mJiMzNDsgcHJlZml4LiBCdXQgdGhlIGtleSBoZXJlIGlzIHRoYXQgc2Vjb25kIGFyZ3VtZW50OiBgZm1hbl9tdXJhbV9tYXRjaGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgZm1hbl9tdXJhbV9tYXRjaGAgYWN0dWFsbHkgKmlzKi4gSXMgaXQgYSBzZWFyY2ggY3JpdGVyaWEgb2JqZWN0PyBBIHNwZWNpZmljIGtleT8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gVGhpcyBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvciBjb21wbGV0ZWx5IGhpbmdlcyBvbiBob3cgdGhhdCBzZWNvbmQgYXJndW1lbnQgaXMgY29uc3RydWN0ZWQgYW5kIHdoYXQgaXQgcmVwcmVzZW50cy4gSSBuZWVkIHRvIHRyYWNlIGl0IGJhY2sgYW5kIGZpZ3VyZSBvdXQgaXRzIHR5cGUsIHN0cnVjdHVyZSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgaXTigJlzIGludGVuZGVkIHRvIG1hdGNoIHdpdGhpbiBgZm1fbm9kZWAuIFRpbWUgdG8gZ28gc3BlbHVua2luZy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbWFuX211cmFtX21hdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yNjA2PXN0YXRpYyBpcnFyZXR1cm5fdCBmbWFuX2lycShpbnQgaXJxLCB2b2lkICpoYW5kbGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI2ODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6MjY4NDpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmbWFuX211cmFtX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjY4NS1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjY4OC19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI2ODk6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZm1hbl9tdXJhbV9tYXRjaCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjY5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yNjkxPXN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI3NTYtXHQvKiBHZXQgdGhlIE1VUkFNIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI3NTc6XHRtdXJhbV9ub2RlID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKGZtX25vZGUsIGZtYW5fbXVyYW1fbWF0Y2gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI3NTgtXHRpZiAoIW11cmFtX25vZGUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNDUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERldmljZSBUcmVlIE5vZGUgTWF0Y2hpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGV2aWNlIHRyZWUuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gaG93IGl0IGlkZW50aWZpZXMgYSBtYXRjaGluZyBub2RlLiBJIHNlZSB0aGF0IGl0JiMzOTtzIHJlbHlpbmcgb24gYSBzZWFyY2ggd2l0aGluIHRoZSB0cmVlLiBOb3csIHNvbWV0aGluZyBpbW1lZGlhdGVseSBqdW1wcyBvdXQ6IGlmIFN5emthbGxlciB1c2VzIGBzeXpfZGV2X3BsYXRmb3JtYCB0byBjcmVhdGUgYSBwbGF0Zm9ybSBkZXZpY2UsIHRoZW4gdGhhdCBkZXZpY2UgKndvbiYjMzk7dCogaGF2ZSBhbiBgb2Zfbm9kZWAgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBzeXpfZGV2X3BsYXRmb3JtYCBpcyBhYm91dCBhIHNpbXBsaWZpZWQgc2V0dXAuIFRodXMsIGBvZl9kZXYtJmd0O2Rldi5vZl9ub2RlYCB3aWxsIGluZXZpdGFibHkgYmUgYE5VTExgLgoKQWhhLCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgc2VlIGEgbGluZTogYGZtX25vZGUgPSBvZl9kZXYtJmd0O2Rldi5vZl9ub2RlO2AuIEJ1dCBpZiB0aGF0IGBvZl9ub2RlYCBpcyBpbmRlZWQgTlVMTCwgYXMgSSYjMzk7dmUgYWxyZWFkeSByZWFzb25lZCwgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgb2ZfcHJvcGVydHlfcmVhZF91MzJgIGlzIGdvaW5nIHRvIGZhaWwuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSB3YWl0aW5nIHRvIGhhcHBlbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaXMgaW4gdGhpcyBudWxsIGNhc2UuIEFyZSB3ZSBleHBlY3RpbmcgaXQ/IElzIGl0IGFuIGVycm9yPyBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgYSBidWcgbHVya3MuIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBhbmQgc2VlIGlmIHRoaXMgaXMgaGFuZGxlZCBjb3JyZWN0bHkgb3IgaWYgdGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2OTA6XHRcbjI2OTE6XHRzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuMjY5MjpcdHtcbjI2OTM6XHRcdHN0cnVjdCBmbWFuICpmbWFuO1xuMjY5NDpcdFx0c3RydWN0IGRldmljZV9ub2RlICpmbV9ub2RlLCAqbXVyYW1fbm9kZTtcbjI2OTU6XHRcdHZvaWQgX19pb21lbSAqYmFzZV9hZGRyO1xuMjY5NjpcdFx0c3RydWN0IHJlc291cmNlICpyZXM7XG4yNjk3Olx0XHR1MzIgdmFsLCByYW5nZVsyXTtcbjI2OTg6XHRcdGludCBlcnI7XG4yNjk5Olx0XHRzdHJ1Y3QgY2xrICpjbGs7XG4yNzAwOlx0XHR1MzIgY2xrX3JhdGU7XG4yNzAxOlx0XG4yNzAyOlx0XHRmbWFuID0ga3phbGxvY19vYmooKmZtYW4pO1xuMjcwMzpcdFx0aWYgKCFmbWFuKVxuMjcwNDpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjI3MDU6XHRcbjI3MDY6XHRcdGZtX25vZGUgPSBvZl9ub2RlX2dldChvZl9kZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuMjcwNzpcdFxuMjcwODpcdFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZm1fbm9kZSwgXCYjMzQ7Y2VsbC1pbmRleFwmIzM0OywgXHUwMDI2dmFsKTtcbjI3MDk6XHRcdGlmIChlcnIpIHtcbjI3MTA6XHRcdFx0ZGV2X2VycihcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBcJiMzNDslczogZmFpbGVkIHRvIHJlYWQgY2VsbC1pbmRleCBmb3IgJXBPRlxcblwmIzM0OyxcbjI3MTE6XHRcdFx0XHRfX2Z1bmNfXywgZm1fbm9kZSk7XG4yNzEyOlx0XHRcdGdvdG8gZm1hbl9ub2RlX3B1dDtcbjI3MTM6XHRcdH1cbjI3MTQ6XHRcdGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5pZCA9ICh1OCl2YWw7XG4yNzE1Olx0XG4yNzE2Olx0XHQvKiBHZXQgdGhlIEZNIGludGVycnVwdCAqL1xuMjcxNzpcdFx0ZXJyID0gcGxhdGZvcm1fZ2V0X2lycShvZl9kZXYsIDApO1xuMjcxODpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI3MTk6XHRcdFx0Z290byBmbWFuX25vZGVfcHV0O1xuMjcyMDpcdFx0Zm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlycSA9IGVycjtcbjI3MjE6XHRcbjI3MjI6XHRcdC8qIEdldCB0aGUgRk0gZXJyb3IgaW50ZXJydXB0ICovXG4yNzIzOlx0XHRlcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKG9mX2RldiwgMSk7XG4yNzI0Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMjcyNTpcdFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4yNzI2Olx0XHRmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSA9IGVycjtcbjI3Mjc6XHRcbjI3Mjg6XHRcdGNsayA9IG9mX2Nsa19nZXQoZm1fbm9kZSwgMCk7XG4yNzI5Olx0XHRpZiAoSVNfRVJSKGNsaykpIHtcbjI3MzA6XHRcdFx0ZXJyID0gUFRSX0VSUihjbGspO1xuMjczMTpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IEZNJWQgY2xvY2sgc3RydWN0dXJlXFxuXCYjMzQ7LFxuMjczMjpcdFx0XHRcdF9fZnVuY19fLCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuaWQpO1xuMjczMzpcdFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4yNzM0Olx0XHR9XG4yNzM1Olx0XG4yNzM2Olx0XHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspO1xuMjczNzpcdFx0aWYgKCFjbGtfcmF0ZSkge1xuMjczODpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMjczOTpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIEZNJWQgY2xvY2sgcmF0ZVxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0OTEKCQkJCQkJCW91dHB1dDogMTE4CgkJCQkJCQl0aG91Z2h0czogNDAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQXBwbGljYWJpbGl0eSBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIElmIGBmbV9ub2RlYCBpcyBudWxsLCBgb2ZfcHJvcGVydHlfcmVhZF91MzJgIGltbWVkaWF0ZWx5IHJldHVybnMgYC1FSU5WQUxgLiBDb25zZXF1ZW50bHksIGByZWFkX2R0c19ub2RlYCB3aWxsIGZhaWwsIGFuZCB0aGlzIGRyaXZlciwgdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlciwgd29uJiMzOTt0IHByb2JlIHdpdGhvdXQgYSB2YWxpZCBkZXZpY2UgdHJlZSBub2RlLiBHaXZlbiB0aGF0IHRoaXMgaXMgYSBGcmVlc2NhbGUgZHJpdmVyLCBpdCYjMzk7cyB2aXJ0dWFsbHkgaW1wb3NzaWJsZSB0byBmaW5kIGl0IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgdW5sZXNzIHdlIGFyZSBzcGVjaWZpY2FsbHkgZW11bGF0aW5nIGEgRnJlZXNjYWxlIFN5c3RlbSBvbiBDaGlwIChTb0MpLCBsaWtlIGEgUW9ySVEuCgpOb3csIHN5emthbGxlciwgd2hpY2ggaXMgY3J1Y2lhbCBmb3Igb3VyIGZ1enppbmcgZWZmb3J0cywgZG9lc24mIzM5O3QgZW11bGF0ZSBGcmVlc2NhbGUgU29Dcy4gSXQgdHlwaWNhbGx5IHJ1bnMgb24gZ2VuZXJpYyBhcmNoaXRlY3R1cmVzIGxpa2UgeDg2XzY0IGFuZCBhcm02NC4gQnV0IHdhaXQsIGl0IGRvZXMgc3VwcG9ydCBhcm02NC4gQ291bGQgaXQgcnVuIG9uIGEgRnJlZXNjYWxlIFNvQyBlbXVsYXRvcj8gUUVNVSBkb2VzIGhhdmUgKnNvbWUqIHN1cHBvcnQgZm9yIEZyZWVzY2FsZSBib2FyZHMsIGxpa2UgYG1wYzg1NDRkc2AsIGBlNTAwYCwgZXRjLiBCdXQgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgdXNlIHRoZXNlIGJvYXJkIGVtdWxhdGlvbnM/IFVzdWFsbHksIHN5emthbGxlciBvcHRzIGZvciBgdmlydGAgbWFjaGluZXMgZm9yIGFybTY0IGFuZCBgcGNgIG9yIGBxMzVgIGZvciB4ODZfNjQsIHdoaWNoIGlzIGhvdyB3ZSBjb25maWd1cmVkIGl0LiBUaGUgYHZpcnRgIG1hY2hpbmUgaXMgdW5saWtlbHkgdG8gaGF2ZSBhIEZyZWVzY2FsZSBGTWFuLgoKVGhlcmVmb3JlLCB1bmRlciBzdGFuZGFyZCBzeXprYWxsZXIgY29uZmlndXJhdGlvbnMsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBpc24mIzM5O3QgYW5vdGhlciBlbnRyeSBwb2ludCB0byBgZm1hbl9wcm9iZWAgdGhhdCBJJiMzOTttIG1pc3NpbmcuIE5vcGUsIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBkZXBlbmRlbnQgb24gYSBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlLiBUaGVyZWZvcmUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIG5lZWRzIHRvIGJlIGBmYWxzZWAgaGVyZSwgYXMgdGhlIHByb2JhYmlsaXR5IG9mIHJlYWNoaW5nIHRoaXMgY29kZSBwYXRoIGlzIGVmZmVjdGl2ZWx5IHplcm8uCgpMZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIHBhdGNoIGFnYWluIHRvIGVuc3VyZSB0aGF0IEkgZGlkbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4gT2theSwgdGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmbWFuX3Byb2JlYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gSVJRIHJlZ2lzdHJhdGlvbiBiZWZvcmUgaW5pdGlhbGl6YXRpb24sIHBvdGVudGlhbGx5IGNhdXNpbmcgYSBOVUxMIGRlcmVmZXJlbmNlIG9yIHVzZS1hZnRlci1mcmVlLiBUaGUgYnVnIGlzIHZhbGlkIGFuZCBpbXBvcnRhbnQsIGJ1dCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZHJpdmVyIGluYWNjZXNzaWJsZSBpbiBvdXIgZnV6emluZyBlbnZpcm9ubWVudC4gVGh1cywgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZzogZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBGcmVlc2NhbGUgRk1hbiAoRnJhbWUgTWFuYWdlcikgZHJpdmVyLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzICgmIzM5O2ZzbCxmbWFuJiMzOTsgYW5kICYjMzk7ZnNsLGZtYW4tbXVyYW0mIzM5OykgdG8gcHJvYmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIGFyZSBub3QgcHJlc2VudCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUmIzM5O3MgJiMzOTt2aXJ0JiMzOTsgbWFjaGluZSB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIEZNYW4gKEZyYW1lIE1hbmFnZXIpIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyAoJiMzOTtmc2wsZm1hbiYjMzk7IGFuZCAmIzM5O2ZzbCxmbWFuLW11cmFtJiMzOTspIHRvIHByb2JlLiBUaGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyBhcmUgbm90IHByZXNlbnQgaW4gZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VJiMzOTtzICYjMzk7dmlydCYjMzk7IG1hY2hpbmUgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAwOjMzLjg3MzY3MTM5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjI0NjE0OTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEZyZWVzY2FsZSBGTWFuIChGcmFtZSBNYW5hZ2VyKSBkcml2ZXIsIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgKCdmc2wsZm1hbicgYW5kICdmc2wsZm1hbi1tdXJhbScpIHRvIHByb2JlLiBUaGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyBhcmUgbm90IHByZXNlbnQgaW4gZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VJ3MgJ3ZpcnQnIG1hY2hpbmUgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDA6MzMuODczNjc3ODY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQ1Nzk5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0OWM0MzYwZjEzZTdiMGZkMDA4YzQ4NzE5ZDkzYmI4NTQ0NmQyZTNlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMgMTA6MDA6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXFxuaW5kZXggMjk5YmFiMDQzMTc1YjMuLjc1MmMwZGYwZTE3YzU5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xcbkBAIC0yNjk1LDcgKzI2OTUsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbiBcXHR2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjtcXG4gXFx0c3RydWN0IHJlc291cmNlICpyZXM7XFxuIFxcdHUzMiB2YWwsIHJhbmdlWzJdO1xcbi1cXHRpbnQgZXJyLCBpcnE7XFxuK1xcdGludCBlcnI7XFxuIFxcdHN0cnVjdCBjbGsgKmNsaztcXG4gXFx0dTMyIGNsa19yYXRlO1xcbiBcXG5AQCAtMjcxNyw3ICsyNzE3LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcXG4gXFx0ZXJyID0gcGxhdGZvcm1fZ2V0X2lycShvZl9kZXYsIDApO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBmbWFuX25vZGVfcHV0O1xcbi1cXHRpcnEgPSBlcnI7XFxuK1xcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuaXJxID0gZXJyO1xcbiBcXG4gXFx0LyogR2V0IHRoZSBGTSBlcnJvciBpbnRlcnJ1cHQgKi9cXG4gXFx0ZXJyID0gcGxhdGZvcm1fZ2V0X2lycShvZl9kZXYsIDEpO1xcbkBAIC0yNzczLDI1ICsyNzczLDYgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcXG4gXFxuIFxcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xcbiBcXG4tXFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIGlycSwgZm1hbl9pcnEsIElSUUZfU0hBUkVELFxcbi1cXHRcXHRcXHQgICAgICAgXFxcImZtYW5cXFwiLCBmbWFuKTtcXG4tXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4tXFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogaXJxICVkIGFsbG9jYXRpb24gZmFpbGVkIChlcnJvciA9ICVkKVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0X19mdW5jX18sIGlycSwgZXJyKTtcXG4tXFx0XFx0Z290byBmbWFuX2ZyZWU7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEgIT0gMCkge1xcbi1cXHRcXHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgZm1hbl9lcnJfaXJxLCBJUlFGX1NIQVJFRCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJmbWFuLWVyclxcXCIsIGZtYW4pO1xcbi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRfX2Z1bmNfXywgZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxLCBlcnIpO1xcbi1cXHRcXHRcXHRnb3RvIGZtYW5fZnJlZTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbiBcXHRiYXNlX2FkZHIgPSBkZXZtX3BsYXRmb3JtX2dldF9hbmRfaW9yZW1hcF9yZXNvdXJjZShvZl9kZXYsIDAsIFxcdTAwMjZyZXMpO1xcbiBcXHRpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihiYXNlX2FkZHIpO1xcbkBAIC0yODI1LDYgKzI4MDYsMjQgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcXG4gXFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZm1hbl9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgZm1hbiAqZm1hbiwgc3RydWN0IGRldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRib29sIGlycV9yZWdpc3RlcmVkKVxcbit7XFxuK1xcdC8qIEZyZWUgSVJRcyBmaXJzdCB3aGlsZSBmbWFuIGlzIHN0aWxsIHZhbGlkICovXFxuK1xcdGlmIChpcnFfcmVnaXN0ZXJlZCkge1xcbitcXHRcXHRpZiAoZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxICE9IDApXFxuK1xcdFxcdFxcdGRldm1fZnJlZV9pcnEoZGV2LCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsIGZtYW4pO1xcbitcXHRcXHRkZXZtX2ZyZWVfaXJxKGRldiwgZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5pcnEsIGZtYW4pO1xcbitcXHR9XFxuK1xcbitcXHRrZnJlZShmbWFuLVxcdTAwM2VrZXlnZW4pO1xcbitcXHRmcmVlX2luaXRfcmVzb3VyY2VzKGZtYW4pO1xcbitcXHRrZnJlZShmbWFuLVxcdTAwM2VjZmcpO1xcbitcXHRmbWFuX211cmFtX2ZpbmlzaChmbWFuLVxcdTAwM2VtdXJhbSk7XFxuK1xcdGtmcmVlKGZtYW4tXFx1MDAzZXN0YXRlKTtcXG4rXFx0a2ZyZWUoZm1hbik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXFxuIHtcXG4gXFx0c3RydWN0IGZtYW4gKmZtYW47XFxuQEAgLTI4NDAsMTIgKzI4MzksNDIgQEAgc3RhdGljIGludCBmbWFuX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcXG4gXFx0ZXJyID0gZm1hbl9jb25maWcoZm1hbik7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2VycihkZXYsIFxcXCIlczogRk1hbiBjb25maWcgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdC8qIGZtYW5fY29uZmlnKCkgZnJlZXMgZm1hbiBpbnRlcm5hbGx5IG9uIGFsbCBlcnJvciBwYXRocyAqL1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZtYW5faW5pdChmbWFuKSAhPSAwKSB7XFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiJXM6IEZNYW4gaW5pdCBmYWlsZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gZXJyX25vX2lycTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUmVnaXN0ZXIgSVJRIGhhbmRsZXJzIG9ubHkgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUuXFxuK1xcdCAqIFRoaXMgcHJldmVudHMgdHdvIGlzc3VlczpcXG4rXFx0ICogMSkgUHJlLWluaXQgTlVMTCBkZXJlZmVyZW5jZTogaXNfaW5pdF9kb25lKE5VTEwpIHJldHVybnMgdHJ1ZSxcXG4rXFx0ICogICAgc28gYSBzaGFyZWQtSVJRIHNwdXJpb3VzIGZpcmluZyBiZWZvcmUgZnBtX3JlZ3MgaXMgc2V0IHdvdWxkXFxuK1xcdCAqICAgIGRlcmVmZXJlbmNlIE5VTEwuXFxuK1xcdCAqIDIpIFVzZS1hZnRlci1mcmVlIG9uIHByb2JlIGZhaWx1cmU6IGZtYW4gd2FzIGt6YWxsb2MnZCAobm90IGRldm0pLFxcbitcXHQgKiAgICBzbyBvbiBlcnJvciBwYXRocyBrZnJlZShmbWFuKSByYW4gYmVmb3JlIGRldm1fZnJlZV9pcnEsIGxlYXZpbmdcXG4rXFx0ICogICAgYSB3aW5kb3cgd2hlcmUgdGhlIGhhbmRsZXIgY291bGQgZmlyZSB3aXRoIGEgZnJlZWQgZGV2X2lkLlxcbitcXHQgKiBCeSByZWdpc3RlcmluZyBoZXJlLCBib3RoIHByb2JsZW1zIGFyZSBlbGltaW5hdGVkLlxcbitcXHQgKi9cXG4rXFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuaXJxLCBmbWFuX2lycSxcXG4rXFx0XFx0XFx0ICAgICAgIElSUUZfU0hBUkVELCBcXFwiZm1hblxcXCIsIGZtYW4pO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIiVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRfX2Z1bmNfXywgZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5pcnEsIGVycik7XFxuK1xcdFxcdGdvdG8gZXJyX25vX2lycTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7XFxuK1xcdFxcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBmbWFuX2Vycl9pcnEsIElSUUZfU0hBUkVELFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcImZtYW4tZXJyXFxcIiwgZm1hbik7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiJXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdF9fZnVuY19fLCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsIGVycik7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX2lycTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxID09IDApIHtcXG5AQCAtMjg3Myw2ICsyOTAyLDEyIEBAIHN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXFxuIFxcdGRldl9kYmcoZGV2LCBcXFwiRk1hbiVkIHByb2JlZFxcXFxuXFxcIiwgZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5pZCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9pcnE6XFxuK1xcdGRldm1fZnJlZV9pcnEoZGV2LCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmlycSwgZm1hbik7XFxuK2Vycl9ub19pcnE6XFxuK1xcdGZtYW5fZnJlZV9yZXNvdXJjZXMoZm1hbiwgZGV2LCBmYWxzZSk7XFxuK1xcdHJldHVybiBlcnIgPzogLUVJTlZBTDtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZm1hbl9tYXRjaFtdID0ge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmhcXG5pbmRleCA3NGViNjJlYmEwZDdmZi4uNjMwZDU3YzMxNDRjYmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oXFxuQEAgLTI4Niw2ICsyODYsNyBAQCBzdHJ1Y3QgZm1hbl9kdHNfcGFyYW1zIHtcXG4gXFx0c3RydWN0IHJlc291cmNlICpyZXM7ICAgICAgICAgICAgICAgICAgIC8qIEZNYW4gbWVtb3J5IHJlc291cmNlICovXFxuIFxcdHU4IGlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGTWFuIElEICovXFxuIFxcbitcXHRpbnQgaXJxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRk1hbiBJUlEgKi9cXG4gXFx0aW50IGVycl9pcnE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZNYW4gRXJyb3IgSVJRICovXFxuIFxcbiBcXHR1MTYgY2xrX2ZyZXE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRk1hbiBjbG9jayBmcmVxIChJbiBNaHopICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uY1xcbmluZGV4IDZhYzdjMmIwY2IxOTkxLi42YzJiNGY3YTAyYjgxNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmNcXG5AQCAtMTI5LDMgKzEyOSwxOCBAQCB2b2lkIGZtYW5fbXVyYW1fZnJlZV9tZW0oc3RydWN0IG11cmFtX2luZm8gKm11cmFtLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcXG4gXFxuIFxcdGdlbl9wb29sX2ZyZWUobXVyYW0tXFx1MDAzZXBvb2wsIGFkZHIsIHNpemUpO1xcbiB9XFxuK1xcbisvKipcXG4rICogZm1hbl9tdXJhbV9maW5pc2hcXG4rICogQG11cmFtOlxcdEZNLU1VUkFNIG1vZHVsZSBwb2ludGVyLlxcbisgKlxcbisgKiBGcmVlcyBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIE1VUkFNIHBhcnRpdGlvbi5cXG4rICovXFxuK3ZvaWQgZm1hbl9tdXJhbV9maW5pc2goc3RydWN0IG11cmFtX2luZm8gKm11cmFtKVxcbit7XFxuK1xcdGlmICghbXVyYW0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aW91bm1hcChtdXJhbS1cXHUwMDNldmJhc2UpO1xcbitcXHRnZW5fcG9vbF9kZXN0cm95KG11cmFtLVxcdTAwM2Vwb29sKTtcXG4rXFx0a2ZyZWUobXVyYW0pO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uaFxcbmluZGV4IDM2NDNhZjYxYmFlMjZjLi5hNWNiNTQ0YzBmMDgyYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmhcXG5AQCAtMjMsNCArMjMsNiBAQCB1bnNpZ25lZCBsb25nIGZtYW5fbXVyYW1fYWxsb2Moc3RydWN0IG11cmFtX2luZm8gKm11cmFtLCBzaXplX3Qgc2l6ZSk7XFxuIHZvaWQgZm1hbl9tdXJhbV9mcmVlX21lbShzdHJ1Y3QgbXVyYW1faW5mbyAqbXVyYW0sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbiBcXHRcXHRcXHQgc2l6ZV90IHNpemUpO1xcbiBcXG4rdm9pZCBmbWFuX211cmFtX2ZpbmlzaChzdHJ1Y3QgbXVyYW1faW5mbyAqbXVyYW0pO1xcbitcXG4gI2VuZGlmIC8qIF9fRk1fTVVSQU1fRVhUICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAwOjM0LjM4OTI5MjA3NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY1NzMwNTIwMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIEZNYW4gKEZyYW1lIE1hbmFnZXIpIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyAoJ2ZzbCxmbWFuJyBhbmQgJ2ZzbCxmbWFuLW11cmFtJykgdG8gcHJvYmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIGFyZSBub3QgcHJlc2VudCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUncyAndmlydCcgbWFjaGluZSB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ5YzQzNjBmMTNlN2IwZmQwMDhjNDg3MTlkOTNiYjg1NDQ2ZDJlM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDEwOjAwOjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXG5pbmRleCAyOTliYWIwNDMxNzViMy4uNzUyYzBkZjBlMTdjNTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xuQEAgLTI2OTUsNyArMjY5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHR2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjtcbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuIFx0dTMyIHZhbCwgcmFuZ2VbMl07XG4tXHRpbnQgZXJyLCBpcnE7XG4rXHRpbnQgZXJyO1xuIFx0c3RydWN0IGNsayAqY2xrO1xuIFx0dTMyIGNsa19yYXRlO1xuIFxuQEAgLTI3MTcsNyArMjcxNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRlcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKG9mX2RldiwgMCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4tXHRpcnEgPSBlcnI7XG4rXHRmbWFuLVx1MDAzZWR0c19wYXJhbXMuaXJxID0gZXJyO1xuIFxuIFx0LyogR2V0IHRoZSBGTSBlcnJvciBpbnRlcnJ1cHQgKi9cbiBcdGVyciA9IHBsYXRmb3JtX2dldF9pcnEob2ZfZGV2LCAxKTtcbkBAIC0yNzczLDI1ICsyNzczLDYgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbiBcbiBcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xuIFxuLVx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBpcnEsIGZtYW5faXJxLCBJUlFGX1NIQVJFRCxcbi1cdFx0XHQgICAgICAgXCJmbWFuXCIsIGZtYW4pO1xuLVx0aWYgKGVyciBcdTAwM2MgMCkge1xuLVx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwiJXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcXG5cIixcbi1cdFx0XHRfX2Z1bmNfXywgaXJxLCBlcnIpO1xuLVx0XHRnb3RvIGZtYW5fZnJlZTtcbi1cdH1cbi1cbi1cdGlmIChmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7XG4tXHRcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsXG4tXHRcdFx0XHQgICAgICAgZm1hbl9lcnJfaXJxLCBJUlFGX1NIQVJFRCxcbi1cdFx0XHRcdCAgICAgICBcImZtYW4tZXJyXCIsIGZtYW4pO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tXHRcdFx0ZGV2X2VycihcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBcIiVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxuXCIsXG4tXHRcdFx0XHRfX2Z1bmNfXywgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsIGVycik7XG4tXHRcdFx0Z290byBmbWFuX2ZyZWU7XG4tXHRcdH1cbi1cdH1cbi1cbiBcdGJhc2VfYWRkciA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKG9mX2RldiwgMCwgXHUwMDI2cmVzKTtcbiBcdGlmIChJU19FUlIoYmFzZV9hZGRyKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGJhc2VfYWRkcik7XG5AQCAtMjgyNSw2ICsyODA2LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBmbWFuX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBmbWFuICpmbWFuLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRib29sIGlycV9yZWdpc3RlcmVkKVxuK3tcbitcdC8qIEZyZWUgSVJRcyBmaXJzdCB3aGlsZSBmbWFuIGlzIHN0aWxsIHZhbGlkICovXG4rXHRpZiAoaXJxX3JlZ2lzdGVyZWQpIHtcbitcdFx0aWYgKGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxICE9IDApXG4rXHRcdFx0ZGV2bV9mcmVlX2lycShkZXYsIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxLCBmbWFuKTtcbitcdFx0ZGV2bV9mcmVlX2lycShkZXYsIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5pcnEsIGZtYW4pO1xuK1x0fVxuK1xuK1x0a2ZyZWUoZm1hbi1cdTAwM2VrZXlnZW4pO1xuK1x0ZnJlZV9pbml0X3Jlc291cmNlcyhmbWFuKTtcbitcdGtmcmVlKGZtYW4tXHUwMDNlY2ZnKTtcbitcdGZtYW5fbXVyYW1fZmluaXNoKGZtYW4tXHUwMDNlbXVyYW0pO1xuK1x0a2ZyZWUoZm1hbi1cdTAwM2VzdGF0ZSk7XG4rXHRrZnJlZShmbWFuKTtcbit9XG4rXG4gc3RhdGljIGludCBmbWFuX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbiB7XG4gXHRzdHJ1Y3QgZm1hbiAqZm1hbjtcbkBAIC0yODQwLDEyICsyODM5LDQyIEBAIHN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRlcnIgPSBmbWFuX2NvbmZpZyhmbWFuKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihkZXYsIFwiJXM6IEZNYW4gY29uZmlnIGZhaWxlZFxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdC8qIGZtYW5fY29uZmlnKCkgZnJlZXMgZm1hbiBpbnRlcm5hbGx5IG9uIGFsbCBlcnJvciBwYXRocyAqL1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGlmIChmbWFuX2luaXQoZm1hbikgIT0gMCkge1xuIFx0XHRkZXZfZXJyKGRldiwgXCIlczogRk1hbiBpbml0IGZhaWxlZFxcblwiLCBfX2Z1bmNfXyk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9ub19pcnE7XG4rXHR9XG4rXG4rXHQvKiBSZWdpc3RlciBJUlEgaGFuZGxlcnMgb25seSBhZnRlciBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS5cbitcdCAqIFRoaXMgcHJldmVudHMgdHdvIGlzc3VlczpcbitcdCAqIDEpIFByZS1pbml0IE5VTEwgZGVyZWZlcmVuY2U6IGlzX2luaXRfZG9uZShOVUxMKSByZXR1cm5zIHRydWUsXG4rXHQgKiAgICBzbyBhIHNoYXJlZC1JUlEgc3B1cmlvdXMgZmlyaW5nIGJlZm9yZSBmcG1fcmVncyBpcyBzZXQgd291bGRcbitcdCAqICAgIGRlcmVmZXJlbmNlIE5VTEwuXG4rXHQgKiAyKSBVc2UtYWZ0ZXItZnJlZSBvbiBwcm9iZSBmYWlsdXJlOiBmbWFuIHdhcyBremFsbG9jJ2QgKG5vdCBkZXZtKSxcbitcdCAqICAgIHNvIG9uIGVycm9yIHBhdGhzIGtmcmVlKGZtYW4pIHJhbiBiZWZvcmUgZGV2bV9mcmVlX2lycSwgbGVhdmluZ1xuK1x0ICogICAgYSB3aW5kb3cgd2hlcmUgdGhlIGhhbmRsZXIgY291bGQgZmlyZSB3aXRoIGEgZnJlZWQgZGV2X2lkLlxuK1x0ICogQnkgcmVnaXN0ZXJpbmcgaGVyZSwgYm90aCBwcm9ibGVtcyBhcmUgZWxpbWluYXRlZC5cbitcdCAqL1xuK1x0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5pcnEsIGZtYW5faXJxLFxuK1x0XHRcdCAgICAgICBJUlFGX1NIQVJFRCwgXCJmbWFuXCIsIGZtYW4pO1xuK1x0aWYgKGVyciBcdTAwM2MgMCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCIlczogaXJxICVkIGFsbG9jYXRpb24gZmFpbGVkIChlcnJvciA9ICVkKVxcblwiLFxuK1x0XHRcdF9fZnVuY19fLCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuaXJxLCBlcnIpO1xuK1x0XHRnb3RvIGVycl9ub19pcnE7XG4rXHR9XG4rXG4rXHRpZiAoZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEgIT0gMCkge1xuK1x0XHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsXG4rXHRcdFx0XHQgICAgICAgZm1hbl9lcnJfaXJxLCBJUlFGX1NIQVJFRCxcbitcdFx0XHRcdCAgICAgICBcImZtYW4tZXJyXCIsIGZtYW4pO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4rXHRcdFx0ZGV2X2VycihkZXYsIFwiJXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcXG5cIixcbitcdFx0XHRcdF9fZnVuY19fLCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSwgZXJyKTtcbitcdFx0XHRnb3RvIGVycl9pcnE7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSA9PSAwKSB7XG5AQCAtMjg3Myw2ICsyOTAyLDEyIEBAIHN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRkZXZfZGJnKGRldiwgXCJGTWFuJWQgcHJvYmVkXFxuXCIsIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5pZCk7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitlcnJfaXJxOlxuK1x0ZGV2bV9mcmVlX2lycShkZXYsIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5pcnEsIGZtYW4pO1xuK2Vycl9ub19pcnE6XG4rXHRmbWFuX2ZyZWVfcmVzb3VyY2VzKGZtYW4sIGRldiwgZmFsc2UpO1xuK1x0cmV0dXJuIGVyciA/OiAtRUlOVkFMO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmbWFuX21hdGNoW10gPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oXG5pbmRleCA3NGViNjJlYmEwZDdmZi4uNjMwZDU3YzMxNDRjYmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uaFxuQEAgLTI4Niw2ICsyODYsNyBAQCBzdHJ1Y3QgZm1hbl9kdHNfcGFyYW1zIHtcbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzOyAgICAgICAgICAgICAgICAgICAvKiBGTWFuIG1lbW9yeSByZXNvdXJjZSAqL1xuIFx0dTggaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZNYW4gSUQgKi9cbiBcbitcdGludCBpcnE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGTWFuIElSUSAqL1xuIFx0aW50IGVycl9pcnE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZNYW4gRXJyb3IgSVJRICovXG4gXG4gXHR1MTYgY2xrX2ZyZXE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRk1hbiBjbG9jayBmcmVxIChJbiBNaHopICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5jXG5pbmRleCA2YWM3YzJiMGNiMTk5MS4uNmMyYjRmN2EwMmI4MTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uY1xuQEAgLTEyOSwzICsxMjksMTggQEAgdm9pZCBmbWFuX211cmFtX2ZyZWVfbWVtKHN0cnVjdCBtdXJhbV9pbmZvICptdXJhbSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4gXG4gXHRnZW5fcG9vbF9mcmVlKG11cmFtLVx1MDAzZXBvb2wsIGFkZHIsIHNpemUpO1xuIH1cbitcbisvKipcbisgKiBmbWFuX211cmFtX2ZpbmlzaFxuKyAqIEBtdXJhbTpcdEZNLU1VUkFNIG1vZHVsZSBwb2ludGVyLlxuKyAqXG4rICogRnJlZXMgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBNVVJBTSBwYXJ0aXRpb24uXG4rICovXG4rdm9pZCBmbWFuX211cmFtX2ZpbmlzaChzdHJ1Y3QgbXVyYW1faW5mbyAqbXVyYW0pXG4re1xuK1x0aWYgKCFtdXJhbSlcbitcdFx0cmV0dXJuO1xuK1x0aW91bm1hcChtdXJhbS1cdTAwM2V2YmFzZSk7XG4rXHRnZW5fcG9vbF9kZXN0cm95KG11cmFtLVx1MDAzZXBvb2wpO1xuK1x0a2ZyZWUobXVyYW0pO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmhcbmluZGV4IDM2NDNhZjYxYmFlMjZjLi5hNWNiNTQ0YzBmMDgyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5oXG5AQCAtMjMsNCArMjMsNiBAQCB1bnNpZ25lZCBsb25nIGZtYW5fbXVyYW1fYWxsb2Moc3RydWN0IG11cmFtX2luZm8gKm11cmFtLCBzaXplX3Qgc2l6ZSk7XG4gdm9pZCBmbWFuX211cmFtX2ZyZWVfbWVtKHN0cnVjdCBtdXJhbV9pbmZvICptdXJhbSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4gXHRcdFx0IHNpemVfdCBzaXplKTtcbiBcbit2b2lkIGZtYW5fbXVyYW1fZmluaXNoKHN0cnVjdCBtdXJhbV9pbmZvICptdXJhbSk7XG4rXG4gI2VuZGlmIC8qIF9fRk1fTVVSQU1fRVhUICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMDowMDozNC4zODkyOTQyMTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjA2NjI5MDcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGTWFuIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYGZtYW4uY2AgYW5kIGBmbWFuX211cmFtLmNgLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBhbiBpc3N1ZSB3aXRoIElSUSByZWdpc3RyYXRpb24gaW4gdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlci4gVGhlIG1haW4gdGhydXN0IGlzIG1vdmluZyB0aGUgSVJRIHJlZ2lzdHJhdGlvbiB0byB0aGUgZW5kIG9mIGBmbWFuX3Byb2JlYCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2UgYW5kIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIGlmIHRoZSBwcm9iZSBmYWlscyBlYXJseS4gVGhhdCdzIGEgZ29vZCBwcmFjdGljZSwgZ2VuZXJhbGx5LiBUaGUgYWRkaXRpb24gb2YgYGZtYW5fZnJlZV9yZXNvdXJjZXNgIGFuZCBgZm1hbl9tdXJhbV9maW5pc2hgIGZvciBwcm9wZXIgY2xlYW51cCBvbiBwcm9iZSBmYWlsdXJlIGlzIHRoZSByaWdodCBhcHByb2FjaCB0b28uIE5vIHN1cnByaXNlcyB0aGVyZTsgcHJvcGVyIHJlc291cmNlIG1hbmFnZW1lbnQgaXMgY3JpdGljYWwuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiwgdGhvdWdoLCBpcyBob3cgKnJlbGV2YW50KiBpcyB0aGlzIGZpeCBpbiBjb250ZW1wb3JhcnkgZW52aXJvbm1lbnRzPyBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIEZyZWVzY2FsZSBGTWFuIOKAkyB0aGF0J3MgdGhlIEZyYW1lIE1hbmFnZXIuIEl0J3MgdXN1YWxseSB0aWVkIHRvIHNwZWNpZmljIEZyZWVzY2FsZSBRb3JJUSBTb0NzLCBhbmQgdGhvc2UgYXJlIHVzdWFsbHkgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbnMuIFNvLCBjYW4gdGhpcyBiZSBldmVuICpleGVyY2lzZWQqIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVU/IEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgUUVNVSBoZXJlLiBDYW4gUUVNVSBlbXVsYXRlIHRoZSBGcmVlc2NhbGUgRk1hbj8gR2l2ZW4gdGhhdCBpdCdzIGEgaGFyZHdhcmUgY29tcG9uZW50LCBteSBpbnN0aW5jdCBpcyBcIm5vXCIsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaGUgcG90ZW50aWFsIGZvciB0aGlzIGNvZGUgcGF0aCB0byBldmVuIHRyaWdnZXIgbmVlZHMgdG8gYmUgdmVyaWZpZWQuIExldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgdGhpcyBkcml2ZXIuIEknbGwgc2VlIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBpZiB0aGVyZSBhcmUgYW55IHRoYXQgYXJlIGhlbHBmdWwgaW4gUUVNVS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAwOjQ2LjQ1NTU4NzY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MTEzOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGU0xfRk1BTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnOjI6Y29uZmlnIEZTTF9GTUFOXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGTWFuIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAwOjQ2LjU0MjcwNzg0N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NDAzODc0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuUmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGlkZW50aWZ5IHRoZSBkZXBlbmRlbmNpZXMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSwgYSBwcm9jZXNzLCBhIHByb2JsZW0g4oCTIHdoYXRldmVyIFwiaXRcIiBpcyDigJMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGZvdW5kYXRpb25hbCBlbGVtZW50cyBpcyBwYXJhbW91bnQuIFdoYXQgYXJlIHRoZSBrZXkgdmFyaWFibGVzPyBUaGUgY29yZSBpbnB1dHM/IFRoZSB1bmRlcmx5aW5nIGFzc3VtcHRpb25zPyBQaW5wb2ludGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgdGhlIGVzc2VudGlhbCBmaXJzdCBzdGVwIHRvIGFueSBlZmZlY3RpdmUgYW5hbHlzaXMuIFdoZXJlIGRvIHdlIGJlZ2luIHRvIHVucmF2ZWwgY29tcGxleGl0eT9cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDA6NDkuMTgzMTAyMjE0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjY4NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnPTI9Y29uZmlnIEZTTF9GTUFOXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGTWFuIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gRlNMX1NPQyB8fCBBUkNIX0xBWUVSU0NBUEUgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy01LVxcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZz0xND1jb25maWcgRFBBQV9FUlJBVFVNX0EwNTAzODVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTE1LVxcdGJvb2xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnOjE2OlxcdGRlcGVuZHMgb24gQVJNNjQgXFx1MDAyNlxcdTAwMjYgRlNMX0RQQUFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTE3LVxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMDowMDo0OS4yNTc3NzcxNTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTYxNTg1ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZm1hbl9wcm9iZSBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZm1hbl9wcm9iZWAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJJ20gbm90aWNpbmcgaXMgdGhhdCBpdHMgYWN0aXZhdGlvbiBkZXBlbmRzIG9uIHNwZWNpZmljIGNvbmRpdGlvbnM6IGBGU0xfU09DIHx8IEFSQ0hfTEFZRVJTQ0FQRSB8fCBDT01QSUxFX1RFU1RgLiAgVGhpcyBpcyBhIHBsYXRmb3JtIGRldmljZSwgbWVhbmluZyBpdCdzIGdvaW5nIHRvIG5lZWQgYSBkZXZpY2UgdHJlZSBub2RlIHRvIGFjdHVhbGx5IHByb2JlLiBUaGUgYmlnIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMgaG93IHdlIGNhbiBlbnN1cmUgdGhhdCBub2RlIGV4aXN0cywgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIG9yIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlIGluamVjdCBhIGRldmljZSB0cmVlIG5vZGUgZm9yIHRoaXMgdGhpbmc/IFN5emthbGxlciBjYW4gZG8gdGhpcyBpbiBzb21lIHNpdHVhdGlvbnMgdXNpbmcgYHN5el9kZXZfcGxhdGZvcm1gIG9yIHNpbWlsYXIgcHNldWRvLXN5c2NhbGxzIGlmIHRoZXkncmUgc3VwcG9ydGVkLCBvciBieSBtb2RpZnlpbmcgdGhlIGRldmljZSB0cmVlIGRpcmVjdGx5LiBCdXQgd2FpdCBhIG1pbnV0ZSwgc3l6a2FsbGVyIGlzbid0IGdlbmVyYWxseSBkZXNpZ25lZCB0byBpbmplY3QgYXJiaXRyYXJ5IERUIG5vZGVzIHdpdGhvdXQgc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9yIHRyaWNrcyBsaWtlIGBvZl9vdmVybGF5YC4gQWxzbywgZXZlbiB3aXRoIGBzeXpfZGV2X3BsYXRmb3JtYCwgdGhlcmUncyBhIGdvb2QgY2hhbmNlIGl0IHdvbid0IHdvcmsgZm9yIGFsbCBkcml2ZXJzIGJlY2F1c2Ugb2YgcmVzb3VyY2UgZGVwZW5kZW5jaWVzLCBsaWtlIHNwZWNpZmljIG1lbW9yeSByZWdpb25zLCBJUlFzLCBvciBjbG9ja3MgdGhhdCB0aGUgZHJpdmVyIHJlcXVpcmVzLiBJdCBsb29rcyBsaWtlIHN5emthbGxlciBoYXMgc29tZSBzdXBwb3J0IGZvciBpbmplY3RpbmcgcGxhdGZvcm0gZGV2aWNlcywgYnV0IGl0J3MgbGltaXRlZCBpbiBzY29wZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgaXMgYSB3YXkgdG8gdXNlIHN5emthbGxlciB0byByZWFjaCBgZm1hbl9wcm9iZWAgaW4gdGhpcyBjYXNlLiBHaXZlbiB0aGF0IGl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIgcHJvYmUgZnVuY3Rpb24sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgZm1hbl9tYXRjaGAgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNDAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDA6NTYuODE5MzY1MzA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MzM3MDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbWFuX21hdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM9MjgyNz1zdGF0aWMgaW50IGZtYW5fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI5MTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI5MTM6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZm1hbl9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTE0LVxcdHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYzoyOTE5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZtYW5fbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yOTIxPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZtYW5fZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI5MjMtXFx0XFx0Lm5hbWUgPSBcXFwiZnNsLWZtYW5cXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYzoyOTI0OlxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGZtYW5fbWF0Y2gsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI5MjUtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDA6NTcuMTYyNzQ0MTMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkwMTI1NjIwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIENvbnRlbnRzIG9mIGBmbWFuX21hdGNoYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gaGVyZS4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBnZXQgYSBoYW5kbGUgb24gd2hhdCBgZm1hbl9tYXRjaGAgYWN0dWFsbHkgKmlzKi4gSXMgaXQgYSB2YXJpYWJsZSwgYSBmdW5jdGlvbiwgYSBkYXRhIHN0cnVjdHVyZT8gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBrZXkuIEtub3dpbmcgaXRzIHR5cGUgd2lsbCBpbnN0YW50bHkgcHJvdmlkZSBhIGxvdCBvZiB2YWx1YWJsZSBjb250ZXh0LiBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMsIGxpa2UgKndoYXQgZGF0YSBkb2VzIGl0IGNvbnRhaW4/KiwgKmhvdyBpcyB0aGF0IGRhdGEgc3RydWN0dXJlZD8qIGFuZCB1bHRpbWF0ZWx5LCAqaG93IGRvZXMgdGhpcyBhbGwgcmVsYXRlIHRvIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHN5c3RlbS90YXNrIGF0IGhhbmQ/KiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIGluc2lkZSBhbmQgdGhlbiBJIGNhbiBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBjb21wb25lbnQgZnVuY3Rpb25zIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbS4gSSBrbm93IHRoYXQgdW5kZXJzdGFuZGluZyBgZm1hbl9tYXRjaGAgaXMgZ29pbmcgdG8gYmUgY2VudHJhbCB0byBkZWNpcGhlcmluZyB0aGlzIHdob2xlIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzA5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDE6MTYuMTc1MzA5NzgxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI0NDUzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnNsLWZtYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yOTIxPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZtYW5fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTIyLVxcdC5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI5MjM6XFx0XFx0Lm5hbWUgPSBcXFwiZnNsLWZtYW5cXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTI0LVxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGZtYW5fbWF0Y2gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAxOjE2LjMxNzc2MzM5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODA3Mzg4NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgRm9jdXMqKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHRvIHByb2Nlc3MgdGhlIHRleHQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIHJlYWQgYGZtYW5fbWF0Y2hgLlwiIEknbSBub3QgZ29pbmcgdG8gc3BlbmQgdGltZSB3b25kZXJpbmcgKndoYXQqIGBmbWFuX21hdGNoYCBpcyDigJMgSSBjYW4gZXh0cmFwb2xhdGUgZnJvbSB0aGUgY29udGV4dCB0aGF0IGl0IHdpbGwgYmUgYSB1c2VmdWwgaW5wdXQgZm9yIHRoaXMgZXZhbHVhdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gaXRzIHN0cnVjdHVyZSBhbmQgY29udGVudC4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgcXVpY2tseSBzY2FubmluZyB0aGUga2V5IGVsZW1lbnRzIHRvIGZvcm0gYW4gaW5mb3JtZWQgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcyNCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAxOjI1LjEyNTE1NDMxNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTYxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5MTA6XFx0XFx0cmV0dXJuIGVyciA/OiAtRUlOVkFMO1xcbjI5MTE6XFx0fVxcbjI5MTI6XFx0XFxuMjkxMzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmbWFuX21hdGNoW10gPSB7XFxuMjkxNDpcXHRcXHR7XFxuMjkxNTpcXHRcXHRcXHQuY29tcGF0aWJsZSA9IFxcXCJmc2wsZm1hblxcXCJ9LFxcbjI5MTY6XFx0XFx0e31cXG4yOTE3OlxcdH07XFxuMjkxODpcXHRcXG4yOTE5OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZtYW5fbWF0Y2gpO1xcbjI5MjA6XFx0XFxuMjkyMTpcXHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmbWFuX2RyaXZlciA9IHtcXG4yOTIyOlxcdFxcdC5kcml2ZXIgPSB7XFxuMjkyMzpcXHRcXHRcXHQubmFtZSA9IFxcXCJmc2wtZm1hblxcXCIsXFxuMjkyNDpcXHRcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBmbWFuX21hdGNoLFxcbjI5MjU6XFx0XFx0fSxcXG4yOTI2OlxcdFxcdC5wcm9iZSA9IGZtYW5fcHJvYmUsXFxuMjkyNzpcXHR9O1xcbjI5Mjg6XFx0XFxuMjkyOTpcXHRzdGF0aWMgaW50IF9faW5pdCBmbWFuX2xvYWQodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDE6MjUuMTI1MzUyODY1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTExOTEwMjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nIFwiZnNsLGZtYW5cIiBDb2RlKipcblxuT2theSwgc28gSSBzZWUgYSBtYXRjaDogXCJmc2wsZm1hbi5cIiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiB0aGlzIGNvZGUgYmUgcmVhY2hlZCwgYW5kIG1lYW5pbmdmdWxseSBmdXp6ZWQsIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFBsYXRmb3JtIGRyaXZlcnMsIGVzcGVjaWFsbHkgb25lcyB0aGF0IHRvdWNoIHNwZWNpZmljIGhhcmR3YXJlIHJlc291cmNlcywgbGlrZSBtZW1vcnktbWFwcGVkIEkvTyBvciBwYXJ0aWN1bGFyIGNsb2NrcywgYXJlIHR5cGljYWxseSBhIHBhaW4gdG8gZnV6eiB3aXRob3V0IGVpdGhlciBhbiBleHRyZW1lbHkgc3BlY2lhbGl6ZWQgZW11bGF0b3Igb3Igc29tZSB0cmlja2VyeSBpbiBTeXprYWxsZXIgdG8gaW5qZWN0IHRob3NlIGRlcGVuZGVuY2llcy5cblxuQnV0IHdhaXQsIFN5emthbGxlciAqZG9lcyogaGF2ZSBgc3l6X2Rldl9wbGF0Zm9ybWAsIHJpZ2h0PyBUaGF0IGNvdWxkIGJlIGEgd2F5IHRvIGNyZWF0ZSB0aGUgcGxhdGZvcm0gZGV2aWNlcyB3ZSBuZWVkLiBMZXQgbWUgc2VlLi4uIHRoZSBgZm1hbl9wcm9iZWAgZnVuY3Rpb24gY2FsbHMgYHJlYWRfZHRzX25vZGVgLCBhbmQgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEl0IGNhbGxzIGBkZXZtX3BsYXRmb3JtX2dldF9hbmRfaW9yZW1hcF9yZXNvdXJjZWAsIGBwbGF0Zm9ybV9nZXRfaXJxYCBhIGNvdXBsZSBvZiB0aW1lcywgYW5kIGBvZl9jbGtfZ2V0YC4gQW5kIGNydWNpYWxseSwgaXQgdXNlcyBgb2ZfcGFyc2VfcGhhbmRsZWA6XG5cbmBgYGNcbm11cmFtX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG9mX2Rldi1cdTAwM2VkZXYub2Zfbm9kZSwgXCJmc2wsZm1hbi1tdXJhbVwiLCAwKTtcbmBgYFxuXG5BaCwgcmlnaHQuIElmIGBtdXJhbV9ub2RlYCBpc24ndCBmb3VuZCwgaXQgcmV0dXJucyBhbiBlcnJvci4gVGhhdCBtZWFucyBgb2ZfcGFyc2VfcGhhbmRsZWAgaXMgbG9va2luZyBmb3IgYSBkZXZpY2UgdHJlZSBub2RlIHdpdGggYSB2ZXJ5IHNwZWNpZmljIHByb3BlcnR5LCBcImZzbCxmbWFuLW11cmFtLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYHJlYWRfZHRzX25vZGVgIGZ1bmN0aW9uIG1vcmUgY29tcGxldGVseS4gVGhpcyBpcyBrZXkuIExldCdzIHNlZSBob3cgdGhhdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE2OSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAyOjE2LjYzNzI2NDg2N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3NjA6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogY291bGQgbm90IGZpbmQgTVVSQU0gbm9kZVxcXFxuXFxcIixcXG4yNzYxOlxcdFxcdFxcdFxcdF9fZnVuY19fKTtcXG4yNzYyOlxcdFxcdFxcdGdvdG8gZm1hbl9mcmVlO1xcbjI3NjM6XFx0XFx0fVxcbjI3NjQ6XFx0XFxuMjc2NTpcXHRcXHRlcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG11cmFtX25vZGUsIDAsXFxuMjc2NjpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLm11cmFtX3Jlcyk7XFxuMjc2NzpcXHRcXHRpZiAoZXJyKSB7XFxuMjc2ODpcXHRcXHRcXHRvZl9ub2RlX3B1dChtdXJhbV9ub2RlKTtcXG4yNzY5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoKSA9ICVkXFxcXG5cXFwiLFxcbjI3NzA6XFx0XFx0XFx0XFx0X19mdW5jX18sIGVycik7XFxuMjc3MTpcXHRcXHRcXHRnb3RvIGZtYW5fZnJlZTtcXG4yNzcyOlxcdFxcdH1cXG4yNzczOlxcdFxcbjI3NzQ6XFx0XFx0b2Zfbm9kZV9wdXQobXVyYW1fbm9kZSk7XFxuMjc3NTpcXHRcXG4yNzc2OlxcdFxcdGJhc2VfYWRkciA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKG9mX2RldiwgMCwgXFx1MDAyNnJlcyk7XFxuMjc3NzpcXHRcXHRpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHtcXG4yNzc4OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIoYmFzZV9hZGRyKTtcXG4yNzc5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IGRldm1faW9yZW1hcCgpIGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbjI3ODA6XFx0XFx0XFx0Z290byBmbWFuX2ZyZWU7XFxuMjc4MTpcXHRcXHR9XFxuMjc4MjpcXHRcXG4yNzgzOlxcdFxcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuYmFzZV9hZGRyID0gYmFzZV9hZGRyO1xcbjI3ODQ6XFx0XFx0Zm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5yZXMgPSByZXM7XFxuMjc4NTpcXHRcXG4yNzg2OlxcdFxcdGZtYW4tXFx1MDAzZWRldiA9IFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldjtcXG4yNzg3OlxcdFxcbjI3ODg6XFx0XFx0ZXJyID0gb2ZfcGxhdGZvcm1fcG9wdWxhdGUoZm1fbm9kZSwgTlVMTCwgTlVMTCwgXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2KTtcXG4yNzg5OlxcdFxcdGlmIChlcnIpIHtcXG4yNzkwOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IG9mX3BsYXRmb3JtX3BvcHVsYXRlKCkgZmFpbGVkXFxcXG5cXFwiLFxcbjI3OTE6XFx0XFx0XFx0XFx0X19mdW5jX18pO1xcbjI3OTI6XFx0XFx0XFx0Z290byBmbWFuX2ZyZWU7XFxuMjc5MzpcXHRcXHR9XFxuMjc5NDpcXHRcXG4yNzk1OlxcdCNpZmRlZiBDT05GSUdfRFBBQV9FUlJBVFVNX0EwNTAzODVcXG4yNzk2OlxcdFxcdGZtYW5faGFzX2Vycl9hMDUwMzg1ID1cXG4yNzk3OlxcdFxcdFxcdG9mX3Byb3BlcnR5X3JlYWRfYm9vbChmbV9ub2RlLCBcXFwiZnNsLGVycmF0dW0tYTA1MDM4NVxcXCIpO1xcbjI3OTg6XFx0I2VuZGlmXFxuMjc5OTpcXHRcXG4yODAwOlxcdFxcdHJldHVybiBmbWFuO1xcbjI4MDE6XFx0XFxuMjgwMjpcXHRmbWFuX25vZGVfcHV0OlxcbjI4MDM6XFx0XFx0b2Zfbm9kZV9wdXQoZm1fbm9kZSk7XFxuMjgwNDpcXHRmbWFuX2ZyZWU6XFxuMjgwNTpcXHRcXHRrZnJlZShmbWFuKTtcXG4yODA2OlxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuMjgwNzpcXHR9XFxuMjgwODpcXHRcXG4yODA5OlxcdHN0YXRpYyB2b2lkIGZtYW5fZnJlZV9yZXNvdXJjZXMoc3RydWN0IGZtYW4gKmZtYW4sIHN0cnVjdCBkZXZpY2UgKmRldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDI6MTYuNjM3NDIzNjA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjY0MDM1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBmc2wsZm1hbi1tdXJhbSBSZXF1aXJlbWVudCBhbmQgU3l6a2FsbGVyJ3MgQ2FwYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQncyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGl0IG5lZWRzIHRoZSBgZnNsLGZtYW4tbXVyYW1gIHBoYW5kbGUgaW4gdGhlIGRldmljZSB0cmVlLiBUaGF0J3MgdGhlIGtleSByZXF1aXJlbWVudCBoZXJlLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCBjYW4gU3l6a2FsbGVyIGhhbmRsZSB0aGlzPyBSaWdodCBub3csIGl0IGRvZXNuJ3Qgc2VlbSBsaWtlIGl0IGNhbiBkaXJlY3RseSBpbmplY3QgYXJiaXRyYXJ5IGRldmljZSB0cmVlIHByb3BlcnRpZXMsIGVzcGVjaWFsbHkgc29tZXRoaW5nIGFzIHNwZWNpZmljIGFzIGBmc2wsZm1hbi1tdXJhbWAuIFRoaXMgaXMgYSBodXJkbGUuXG5cbkEgcXVpY2sgcGF1c2UgZm9yIHJlZmxlY3Rpb246IGFtIEkgZXZlbiAqYWJsZSogdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCB3aXRoIFN5emthbGxlciwgZ2l2ZW4gdGhpcyBjb25zdHJhaW50PyBUaGF0J3MgYSBmdW5kYW1lbnRhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyLiBJcyB0aGVyZSBhbnkgZXhpc3RpbmcgbWVjaGFuaXNtIHRoYXQgSSBjYW4gbGV2ZXJhZ2UgdG8gY2FsbCBgZm1hbl9wcm9iZWA/IFRoaXMgaXMgY3JpdGljYWwuXG5cbkFscmlnaHQsIGlmIFN5emthbGxlciBvZmZlcnMgYHN5el9kZXZfcGxhdGZvcm1gLCBJIGNvdWxkIHBvdGVudGlhbGx5IGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZS4gQnV0IHRoYXQgYnkgaXRzZWxmIGlzbid0IGVub3VnaDsgdGhlIGNydWNpYWwgYG9mX25vZGVgIHByb3BlcnR5IHdvbid0IGJlIGNvcnJlY3RseSBwb3B1bGF0ZWQsIHBhcnRpY3VsYXJseSB3aXRoIHRob3NlIHJlcXVpcmVkIGBmc2wsZm1hbi1tdXJhbWAgcHJvcGVydGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHByb3BlcnR5IGlzIHBvcHVsYXRlZCwgdGhpcyBpcyBhIG5vbi1zdGFydGVyIG90aGVyd2lzZS5cblxuU28sIEkgbmVlZCB0byBjaGVjayB0byBkZXRlcm1pbmUgaWYgYG9mX3BhcnNlX3BoYW5kbGVgIGlzIGNhbGxlZCBzb21ld2hlcmUgYWxvbmcgdGhlIHdheS4gVW5kZXJzdGFuZGluZyBob3cgcGhhbmRsZXMgYXJlIHBhcnNlZCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmQgaG93IEkgY291bGQgcG90ZW50aWFsbHkgdXNlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjU2LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDI6MjEuMTYzODMwNjE3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc0MDpcXHRcXHRcXHRcXHRfX2Z1bmNfXywgZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5pZCk7XFxuMjc0MTpcXHRcXHRcXHRnb3RvIGZtYW5fbm9kZV9wdXQ7XFxuMjc0MjpcXHRcXHR9XFxuMjc0MzpcXHRcXHQvKiBSb3VuZGluZyB0byBNSHogKi9cXG4yNzQ0OlxcdFxcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuY2xrX2ZyZXEgPSBESVZfUk9VTkRfVVAoY2xrX3JhdGUsIDEwMDAwMDApO1xcbjI3NDU6XFx0XFxuMjc0NjpcXHRcXHRlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShmbV9ub2RlLCBcXFwiZnNsLHFtYW4tY2hhbm5lbC1yYW5nZVxcXCIsXFxuMjc0NzpcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJhbmdlWzBdLCAyKTtcXG4yNzQ4OlxcdFxcdGlmIChlcnIpIHtcXG4yNzQ5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IGZhaWxlZCB0byByZWFkIGZzbCxxbWFuLWNoYW5uZWwtcmFuZ2UgZm9yICVwT0ZcXFxcblxcXCIsXFxuMjc1MDpcXHRcXHRcXHRcXHRfX2Z1bmNfXywgZm1fbm9kZSk7XFxuMjc1MTpcXHRcXHRcXHRnb3RvIGZtYW5fbm9kZV9wdXQ7XFxuMjc1MjpcXHRcXHR9XFxuMjc1MzpcXHRcXHRmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLnFtYW5fY2hhbm5lbF9iYXNlID0gcmFuZ2VbMF07XFxuMjc1NDpcXHRcXHRmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLm51bV9vZl9xbWFuX2NoYW5uZWxzID0gcmFuZ2VbMV07XFxuMjc1NTpcXHRcXG4yNzU2OlxcdFxcdC8qIEdldCB0aGUgTVVSQU0gYmFzZSBhZGRyZXNzIGFuZCBzaXplICovXFxuMjc1NzpcXHRcXHRtdXJhbV9ub2RlID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKGZtX25vZGUsIGZtYW5fbXVyYW1fbWF0Y2gpO1xcbjI3NTg6XFx0XFx0aWYgKCFtdXJhbV9ub2RlKSB7XFxuMjc1OTpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMDowMjoyMS4xNjQwNzM1ODdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwMTMwNTA5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIE5vZGUgTWF0Y2hpbmcgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gaXQncyBjYWxsaW5nIGBvZl9maW5kX21hdGNoaW5nX25vZGUoZm1fbm9kZSwgZm1hbl9tdXJhbV9tYXRjaClgLiBJbnRlcmVzdGluZy4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhlIGZ1bmN0aW9uIGNhbGwsIHNvIEkga25vdyB3ZSdyZSBsb29raW5nIGZvciBhIG1hdGNoaW5nIG5vZGUsIGxpa2VseSB3aXRoaW4gYSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBiYXNlZCBvbiB0aGUgXCJvZlwiIHByZWZpeC4gQnV0IHRoZSBrZXkgaGVyZSBpcyB0aGF0IHNlY29uZCBhcmd1bWVudDogYGZtYW5fbXVyYW1fbWF0Y2hgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGZtYW5fbXVyYW1fbWF0Y2hgIGFjdHVhbGx5ICppcyouIElzIGl0IGEgc2VhcmNoIGNyaXRlcmlhIG9iamVjdD8gQSBzcGVjaWZpYyBrZXk/IFdoYXQncyB0aGUgY29udGV4dD8gVGhpcyBmdW5jdGlvbidzIGJlaGF2aW9yIGNvbXBsZXRlbHkgaGluZ2VzIG9uIGhvdyB0aGF0IHNlY29uZCBhcmd1bWVudCBpcyBjb25zdHJ1Y3RlZCBhbmQgd2hhdCBpdCByZXByZXNlbnRzLiBJIG5lZWQgdG8gdHJhY2UgaXQgYmFjayBhbmQgZmlndXJlIG91dCBpdHMgdHlwZSwgc3RydWN0dXJlLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgd2hhdCBpdOKAmXMgaW50ZW5kZWQgdG8gbWF0Y2ggd2l0aGluIGBmbV9ub2RlYC4gVGltZSB0byBnbyBzcGVsdW5raW5nLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NDQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAzOjA2LjE3NzEyNzY1N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MTM4ODUwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbWFuX211cmFtX21hdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM9MjYwNj1zdGF0aWMgaXJxcmV0dXJuX3QgZm1hbl9pcnEoaW50IGlycSwgdm9pZCAqaGFuZGxlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI2ODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI2ODQ6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZm1hbl9tdXJhbV9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yNjg1LVxcdHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yNjg4LX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI2ODk6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZm1hbl9tdXJhbV9tYXRjaCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI2OTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jPTI2OTE9c3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yNzU2LVxcdC8qIEdldCB0aGUgTVVSQU0gYmFzZSBhZGRyZXNzIGFuZCBzaXplICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI3NTc6XFx0bXVyYW1fbm9kZSA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShmbV9ub2RlLCBmbWFuX211cmFtX21hdGNoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjc1OC1cXHRpZiAoIW11cmFtX25vZGUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDM6MDcuNTQ4NTIxODg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjYxODkwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERldmljZSBUcmVlIE5vZGUgTWF0Y2hpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGV2aWNlIHRyZWUuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gaG93IGl0IGlkZW50aWZpZXMgYSBtYXRjaGluZyBub2RlLiBJIHNlZSB0aGF0IGl0J3MgcmVseWluZyBvbiBhIHNlYXJjaCB3aXRoaW4gdGhlIHRyZWUuIE5vdywgc29tZXRoaW5nIGltbWVkaWF0ZWx5IGp1bXBzIG91dDogaWYgU3l6a2FsbGVyIHVzZXMgYHN5el9kZXZfcGxhdGZvcm1gIHRvIGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSwgdGhlbiB0aGF0IGRldmljZSAqd29uJ3QqIGhhdmUgYW4gYG9mX25vZGVgIGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgc3l6X2Rldl9wbGF0Zm9ybWAgaXMgYWJvdXQgYSBzaW1wbGlmaWVkIHNldHVwLiBUaHVzLCBgb2ZfZGV2LVx1MDAzZWRldi5vZl9ub2RlYCB3aWxsIGluZXZpdGFibHkgYmUgYE5VTExgLlxuXG5BaGEsIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSBhIGxpbmU6IGBmbV9ub2RlID0gb2ZfZGV2LVx1MDAzZWRldi5vZl9ub2RlO2AuIEJ1dCBpZiB0aGF0IGBvZl9ub2RlYCBpcyBpbmRlZWQgTlVMTCwgYXMgSSd2ZSBhbHJlYWR5IHJlYXNvbmVkLCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMmAgaXMgZ29pbmcgdG8gZmFpbC4gVGhhdCdzIGEgY2xhc3NpYyBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2FpdGluZyB0byBoYXBwZW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIGludGVuZGVkIGJlaGF2aW9yIGlzIGluIHRoaXMgbnVsbCBjYXNlLiBBcmUgd2UgZXhwZWN0aW5nIGl0PyBJcyBpdCBhbiBlcnJvcj8gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHByb2JhYmx5IHdoZXJlIGEgYnVnIGx1cmtzLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYW5kIHNlZSBpZiB0aGlzIGlzIGhhbmRsZWQgY29ycmVjdGx5IG9yIGlmIHRoZXJlJ3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNDUsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDM6MTIuMTE0NzEzODk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY5MDpcXHRcXG4yNjkxOlxcdHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXFxuMjY5MjpcXHR7XFxuMjY5MzpcXHRcXHRzdHJ1Y3QgZm1hbiAqZm1hbjtcXG4yNjk0OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqZm1fbm9kZSwgKm11cmFtX25vZGU7XFxuMjY5NTpcXHRcXHR2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjtcXG4yNjk2OlxcdFxcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xcbjI2OTc6XFx0XFx0dTMyIHZhbCwgcmFuZ2VbMl07XFxuMjY5ODpcXHRcXHRpbnQgZXJyO1xcbjI2OTk6XFx0XFx0c3RydWN0IGNsayAqY2xrO1xcbjI3MDA6XFx0XFx0dTMyIGNsa19yYXRlO1xcbjI3MDE6XFx0XFxuMjcwMjpcXHRcXHRmbWFuID0ga3phbGxvY19vYmooKmZtYW4pO1xcbjI3MDM6XFx0XFx0aWYgKCFmbWFuKVxcbjI3MDQ6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMjcwNTpcXHRcXG4yNzA2OlxcdFxcdGZtX25vZGUgPSBvZl9ub2RlX2dldChvZl9kZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG4yNzA3OlxcdFxcbjI3MDg6XFx0XFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZm1fbm9kZSwgXFxcImNlbGwtaW5kZXhcXFwiLCBcXHUwMDI2dmFsKTtcXG4yNzA5OlxcdFxcdGlmIChlcnIpIHtcXG4yNzEwOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IGZhaWxlZCB0byByZWFkIGNlbGwtaW5kZXggZm9yICVwT0ZcXFxcblxcXCIsXFxuMjcxMTpcXHRcXHRcXHRcXHRfX2Z1bmNfXywgZm1fbm9kZSk7XFxuMjcxMjpcXHRcXHRcXHRnb3RvIGZtYW5fbm9kZV9wdXQ7XFxuMjcxMzpcXHRcXHR9XFxuMjcxNDpcXHRcXHRmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmlkID0gKHU4KXZhbDtcXG4yNzE1OlxcdFxcbjI3MTY6XFx0XFx0LyogR2V0IHRoZSBGTSBpbnRlcnJ1cHQgKi9cXG4yNzE3OlxcdFxcdGVyciA9IHBsYXRmb3JtX2dldF9pcnEob2ZfZGV2LCAwKTtcXG4yNzE4OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI3MTk6XFx0XFx0XFx0Z290byBmbWFuX25vZGVfcHV0O1xcbjI3MjA6XFx0XFx0Zm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5pcnEgPSBlcnI7XFxuMjcyMTpcXHRcXG4yNzIyOlxcdFxcdC8qIEdldCB0aGUgRk0gZXJyb3IgaW50ZXJydXB0ICovXFxuMjcyMzpcXHRcXHRlcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKG9mX2RldiwgMSk7XFxuMjcyNDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4yNzI1OlxcdFxcdFxcdGdvdG8gZm1hbl9ub2RlX3B1dDtcXG4yNzI2OlxcdFxcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSA9IGVycjtcXG4yNzI3OlxcdFxcbjI3Mjg6XFx0XFx0Y2xrID0gb2ZfY2xrX2dldChmbV9ub2RlLCAwKTtcXG4yNzI5OlxcdFxcdGlmIChJU19FUlIoY2xrKSkge1xcbjI3MzA6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihjbGspO1xcbjI3MzE6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogRmFpbGVkIHRvIGdldCBGTSVkIGNsb2NrIHN0cnVjdHVyZVxcXFxuXFxcIixcXG4yNzMyOlxcdFxcdFxcdFxcdF9fZnVuY19fLCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmlkKTtcXG4yNzMzOlxcdFxcdFxcdGdvdG8gZm1hbl9ub2RlX3B1dDtcXG4yNzM0OlxcdFxcdH1cXG4yNzM1OlxcdFxcbjI3MzY6XFx0XFx0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcXG4yNzM3OlxcdFxcdGlmICghY2xrX3JhdGUpIHtcXG4yNzM4OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMjczOTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIEZNJWQgY2xvY2sgcmF0ZVxcXFxuXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDM6MTIuMTE0OTM0ODM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMDQ4MzE1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBcHBsaWNhYmlsaXR5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIElmIGBmbV9ub2RlYCBpcyBudWxsLCBgb2ZfcHJvcGVydHlfcmVhZF91MzJgIGltbWVkaWF0ZWx5IHJldHVybnMgYC1FSU5WQUxgLiBDb25zZXF1ZW50bHksIGByZWFkX2R0c19ub2RlYCB3aWxsIGZhaWwsIGFuZCB0aGlzIGRyaXZlciwgdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlciwgd29uJ3QgcHJvYmUgd2l0aG91dCBhIHZhbGlkIGRldmljZSB0cmVlIG5vZGUuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIEZyZWVzY2FsZSBkcml2ZXIsIGl0J3MgdmlydHVhbGx5IGltcG9zc2libGUgdG8gZmluZCBpdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHVubGVzcyB3ZSBhcmUgc3BlY2lmaWNhbGx5IGVtdWxhdGluZyBhIEZyZWVzY2FsZSBTeXN0ZW0gb24gQ2hpcCAoU29DKSwgbGlrZSBhIFFvcklRLlxuXG5Ob3csIHN5emthbGxlciwgd2hpY2ggaXMgY3J1Y2lhbCBmb3Igb3VyIGZ1enppbmcgZWZmb3J0cywgZG9lc24ndCBlbXVsYXRlIEZyZWVzY2FsZSBTb0NzLiBJdCB0eXBpY2FsbHkgcnVucyBvbiBnZW5lcmljIGFyY2hpdGVjdHVyZXMgbGlrZSB4ODZfNjQgYW5kIGFybTY0LiBCdXQgd2FpdCwgaXQgZG9lcyBzdXBwb3J0IGFybTY0LiBDb3VsZCBpdCBydW4gb24gYSBGcmVlc2NhbGUgU29DIGVtdWxhdG9yPyBRRU1VIGRvZXMgaGF2ZSAqc29tZSogc3VwcG9ydCBmb3IgRnJlZXNjYWxlIGJvYXJkcywgbGlrZSBgbXBjODU0NGRzYCwgYGU1MDBgLCBldGMuIEJ1dCBkb2VzIHN5emthbGxlciBhY3R1YWxseSB1c2UgdGhlc2UgYm9hcmQgZW11bGF0aW9ucz8gVXN1YWxseSwgc3l6a2FsbGVyIG9wdHMgZm9yIGB2aXJ0YCBtYWNoaW5lcyBmb3IgYXJtNjQgYW5kIGBwY2Agb3IgYHEzNWAgZm9yIHg4Nl82NCwgd2hpY2ggaXMgaG93IHdlIGNvbmZpZ3VyZWQgaXQuIFRoZSBgdmlydGAgbWFjaGluZSBpcyB1bmxpa2VseSB0byBoYXZlIGEgRnJlZXNjYWxlIEZNYW4uXG5cblRoZXJlZm9yZSwgdW5kZXIgc3RhbmRhcmQgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb25zLCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgaXNuJ3QgYW5vdGhlciBlbnRyeSBwb2ludCB0byBgZm1hbl9wcm9iZWAgdGhhdCBJJ20gbWlzc2luZy4gTm9wZSwgaXQncyBhIHBsYXRmb3JtIGRyaXZlciwgZGVwZW5kZW50IG9uIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZS4gVGhlcmVmb3JlLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBuZWVkcyB0byBiZSBgZmFsc2VgIGhlcmUsIGFzIHRoZSBwcm9iYWJpbGl0eSBvZiByZWFjaGluZyB0aGlzIGNvZGUgcGF0aCBpcyBlZmZlY3RpdmVseSB6ZXJvLlxuXG5MZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIHBhdGNoIGFnYWluIHRvIGVuc3VyZSB0aGF0IEkgZGlkbid0IG1pc3Mgc29tZXRoaW5nLiBPa2F5LCB0aGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZtYW5fcHJvYmVgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBJUlEgcmVnaXN0cmF0aW9uIGJlZm9yZSBpbml0aWFsaXphdGlvbiwgcG90ZW50aWFsbHkgY2F1c2luZyBhIE5VTEwgZGVyZWZlcmVuY2Ugb3IgdXNlLWFmdGVyLWZyZWUuIFRoZSBidWcgaXMgdmFsaWQgYW5kIGltcG9ydGFudCwgYnV0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGRyaXZlciBpbmFjY2Vzc2libGUgaW4gb3VyIGZ1enppbmcgZW52aXJvbm1lbnQuIFRodXMsIEknbSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZzogZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ5MSwiT3V0cHV0VG9rZW5zIjoxMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMDowMzoyMC4xMTk3NzExNDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIEZNYW4gKEZyYW1lIE1hbmFnZXIpIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyAoJ2ZzbCxmbWFuJyBhbmQgJ2ZzbCxmbWFuLW11cmFtJykgdG8gcHJvYmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIGFyZSBub3QgcHJlc2VudCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUncyAndmlydCcgbWFjaGluZSB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIEZNYW4gKEZyYW1lIE1hbmFnZXIpIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyAoJ2ZzbCxmbWFuJyBhbmQgJ2ZzbCxmbWFuLW11cmFtJykgdG8gcHJvYmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIGFyZSBub3QgcHJlc2VudCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUncyAndmlydCcgbWFjaGluZSB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9tb6q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-03 09:24:53 +0000 UTC FinishedAt: 2026-07-03 10:03:22 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBGcmVlc2NhbGUgRk1hbiAoRnJhbWUgTWFuYWdlcikgZHJpdmVyLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzICgmIzM5O2ZzbCxmbWFuJiMzOTsgYW5kICYjMzk7ZnNsLGZtYW4tbXVyYW0mIzM5OykgdG8gcHJvYmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIGFyZSBub3QgcHJlc2VudCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUmIzM5O3MgJiMzOTt2aXJ0JiMzOTsgbWFjaGluZSB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNDljNDM2MGYxM2U3YjBmZDAwOGM0ODcxOWQ5M2JiODU0NDZkMmUzZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMgMTA6MDA6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXG5pbmRleCAyOTliYWIwNDMxNzViMy4uNzUyYzBkZjBlMTdjNTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xuQEAgLTI2OTUsNyAmIzQzOzI2OTUsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFx0dm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7XG4gXHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbiBcdHUzMiB2YWwsIHJhbmdlWzJdO1xuLVx0aW50IGVyciwgaXJxO1xuJiM0MztcdGludCBlcnI7XG4gXHRzdHJ1Y3QgY2xrICpjbGs7XG4gXHR1MzIgY2xrX3JhdGU7XG4gXG5AQCAtMjcxNyw3ICYjNDM7MjcxNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRlcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKG9mX2RldiwgMCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4tXHRpcnEgPSBlcnI7XG4mIzQzO1x0Zm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlycSA9IGVycjtcbiBcbiBcdC8qIEdldCB0aGUgRk0gZXJyb3IgaW50ZXJydXB0ICovXG4gXHRlcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKG9mX2RldiwgMSk7XG5AQCAtMjc3MywyNSAmIzQzOzI3NzMsNiBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIFxuIFx0b2Zfbm9kZV9wdXQobXVyYW1fbm9kZSk7XG4gXG4tXHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIGlycSwgZm1hbl9pcnEsIElSUUZfU0hBUkVELFxuLVx0XHRcdCAgICAgICBcJiMzNDtmbWFuXCYjMzQ7LCBmbWFuKTtcbi1cdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0ZGV2X2VycihcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBcJiMzNDslczogaXJxICVkIGFsbG9jYXRpb24gZmFpbGVkIChlcnJvciA9ICVkKVxcblwmIzM0Oyxcbi1cdFx0XHRfX2Z1bmNfXywgaXJxLCBlcnIpO1xuLVx0XHRnb3RvIGZtYW5fZnJlZTtcbi1cdH1cbi1cbi1cdGlmIChmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7XG4tXHRcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsXG4tXHRcdFx0XHQgICAgICAgZm1hbl9lcnJfaXJxLCBJUlFGX1NIQVJFRCxcbi1cdFx0XHRcdCAgICAgICBcJiMzNDtmbWFuLWVyclwmIzM0OywgZm1hbik7XG4tXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxuXCYjMzQ7LFxuLVx0XHRcdFx0X19mdW5jX18sIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxLCBlcnIpO1xuLVx0XHRcdGdvdG8gZm1hbl9mcmVlO1xuLVx0XHR9XG4tXHR9XG4tXG4gXHRiYXNlX2FkZHIgPSBkZXZtX3BsYXRmb3JtX2dldF9hbmRfaW9yZW1hcF9yZXNvdXJjZShvZl9kZXYsIDAsIFx1MDAyNnJlcyk7XG4gXHRpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihiYXNlX2FkZHIpO1xuQEAgLTI4MjUsNiAmIzQzOzI4MDYsMjQgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbiBcdHJldHVybiBFUlJfUFRSKGVycik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBmbWFuX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBmbWFuICpmbWFuLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0Ym9vbCBpcnFfcmVnaXN0ZXJlZClcbiYjNDM7e1xuJiM0MztcdC8qIEZyZWUgSVJRcyBmaXJzdCB3aGlsZSBmbWFuIGlzIHN0aWxsIHZhbGlkICovXG4mIzQzO1x0aWYgKGlycV9yZWdpc3RlcmVkKSB7XG4mIzQzO1x0XHRpZiAoZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEgIT0gMClcbiYjNDM7XHRcdFx0ZGV2bV9mcmVlX2lycShkZXYsIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxLCBmbWFuKTtcbiYjNDM7XHRcdGRldm1fZnJlZV9pcnEoZGV2LCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuaXJxLCBmbWFuKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGtmcmVlKGZtYW4tXHUwMDNla2V5Z2VuKTtcbiYjNDM7XHRmcmVlX2luaXRfcmVzb3VyY2VzKGZtYW4pO1xuJiM0MztcdGtmcmVlKGZtYW4tXHUwMDNlY2ZnKTtcbiYjNDM7XHRmbWFuX211cmFtX2ZpbmlzaChmbWFuLVx1MDAzZW11cmFtKTtcbiYjNDM7XHRrZnJlZShmbWFuLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRrZnJlZShmbWFuKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGZtYW5fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuIHtcbiBcdHN0cnVjdCBmbWFuICpmbWFuO1xuQEAgLTI4NDAsMTIgJiM0MzsyODM5LDQyIEBAIHN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRlcnIgPSBmbWFuX2NvbmZpZyhmbWFuKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihkZXYsIFwmIzM0OyVzOiBGTWFuIGNvbmZpZyBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRcdC8qIGZtYW5fY29uZmlnKCkgZnJlZXMgZm1hbiBpbnRlcm5hbGx5IG9uIGFsbCBlcnJvciBwYXRocyAqL1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGlmIChmbWFuX2luaXQoZm1hbikgIT0gMCkge1xuIFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7JXM6IEZNYW4gaW5pdCBmYWlsZWRcXG5cJiMzNDssIF9fZnVuY19fKTtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIGVycl9ub19pcnE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSZWdpc3RlciBJUlEgaGFuZGxlcnMgb25seSBhZnRlciBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS5cbiYjNDM7XHQgKiBUaGlzIHByZXZlbnRzIHR3byBpc3N1ZXM6XG4mIzQzO1x0ICogMSkgUHJlLWluaXQgTlVMTCBkZXJlZmVyZW5jZTogaXNfaW5pdF9kb25lKE5VTEwpIHJldHVybnMgdHJ1ZSxcbiYjNDM7XHQgKiAgICBzbyBhIHNoYXJlZC1JUlEgc3B1cmlvdXMgZmlyaW5nIGJlZm9yZSBmcG1fcmVncyBpcyBzZXQgd291bGRcbiYjNDM7XHQgKiAgICBkZXJlZmVyZW5jZSBOVUxMLlxuJiM0MztcdCAqIDIpIFVzZS1hZnRlci1mcmVlIG9uIHByb2JlIGZhaWx1cmU6IGZtYW4gd2FzIGt6YWxsb2MmIzM5O2QgKG5vdCBkZXZtKSxcbiYjNDM7XHQgKiAgICBzbyBvbiBlcnJvciBwYXRocyBrZnJlZShmbWFuKSByYW4gYmVmb3JlIGRldm1fZnJlZV9pcnEsIGxlYXZpbmdcbiYjNDM7XHQgKiAgICBhIHdpbmRvdyB3aGVyZSB0aGUgaGFuZGxlciBjb3VsZCBmaXJlIHdpdGggYSBmcmVlZCBkZXZfaWQuXG4mIzQzO1x0ICogQnkgcmVnaXN0ZXJpbmcgaGVyZSwgYm90aCBwcm9ibGVtcyBhcmUgZWxpbWluYXRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlycSwgZm1hbl9pcnEsXG4mIzQzO1x0XHRcdCAgICAgICBJUlFGX1NIQVJFRCwgXCYjMzQ7Zm1hblwmIzM0OywgZm1hbik7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0OyVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRfX2Z1bmNfXywgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlycSwgZXJyKTtcbiYjNDM7XHRcdGdvdG8gZXJyX25vX2lycTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7XG4mIzQzO1x0XHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGZtYW5fZXJyX2lycSwgSVJRRl9TSEFSRUQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIFwmIzM0O2ZtYW4tZXJyXCYjMzQ7LCBmbWFuKTtcbiYjNDM7XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0OyVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdF9fZnVuY19fLCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSwgZXJyKTtcbiYjNDM7XHRcdFx0Z290byBlcnJfaXJxO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0aWYgKGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxID09IDApIHtcbkBAIC0yODczLDYgJiM0MzsyOTAyLDEyIEBAIHN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRkZXZfZGJnKGRldiwgXCYjMzQ7Rk1hbiVkIHByb2JlZFxcblwmIzM0OywgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlkKTtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2lycTpcbiYjNDM7XHRkZXZtX2ZyZWVfaXJxKGRldiwgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlycSwgZm1hbik7XG4mIzQzO2Vycl9ub19pcnE6XG4mIzQzO1x0Zm1hbl9mcmVlX3Jlc291cmNlcyhmbWFuLCBkZXYsIGZhbHNlKTtcbiYjNDM7XHRyZXR1cm4gZXJyID86IC1FSU5WQUw7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZtYW5fbWF0Y2hbXSA9IHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmhcbmluZGV4IDc0ZWI2MmViYTBkN2ZmLi42MzBkNTdjMzE0NGNiZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oXG5AQCAtMjg2LDYgJiM0MzsyODYsNyBAQCBzdHJ1Y3QgZm1hbl9kdHNfcGFyYW1zIHtcbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzOyAgICAgICAgICAgICAgICAgICAvKiBGTWFuIG1lbW9yeSByZXNvdXJjZSAqL1xuIFx0dTggaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZNYW4gSUQgKi9cbiBcbiYjNDM7XHRpbnQgaXJxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRk1hbiBJUlEgKi9cbiBcdGludCBlcnJfaXJxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGTWFuIEVycm9yIElSUSAqL1xuIFxuIFx0dTE2IGNsa19mcmVxOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZNYW4gY2xvY2sgZnJlcSAoSW4gTWh6KSAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uY1xuaW5kZXggNmFjN2MyYjBjYjE5OTEuLjZjMmI0ZjdhMDJiODE3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmNcbkBAIC0xMjksMyAmIzQzOzEyOSwxOCBAQCB2b2lkIGZtYW5fbXVyYW1fZnJlZV9tZW0oc3RydWN0IG11cmFtX2luZm8gKm11cmFtLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbiBcbiBcdGdlbl9wb29sX2ZyZWUobXVyYW0tXHUwMDNlcG9vbCwgYWRkciwgc2l6ZSk7XG4gfVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGZtYW5fbXVyYW1fZmluaXNoXG4mIzQzOyAqIEBtdXJhbTpcdEZNLU1VUkFNIG1vZHVsZSBwb2ludGVyLlxuJiM0MzsgKlxuJiM0MzsgKiBGcmVlcyBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIE1VUkFNIHBhcnRpdGlvbi5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgZm1hbl9tdXJhbV9maW5pc2goc3RydWN0IG11cmFtX2luZm8gKm11cmFtKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFtdXJhbSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpb3VubWFwKG11cmFtLVx1MDAzZXZiYXNlKTtcbiYjNDM7XHRnZW5fcG9vbF9kZXN0cm95KG11cmFtLVx1MDAzZXBvb2wpO1xuJiM0MztcdGtmcmVlKG11cmFtKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uaFxuaW5kZXggMzY0M2FmNjFiYWUyNmMuLmE1Y2I1NDRjMGYwODJjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmhcbkBAIC0yMyw0ICYjNDM7MjMsNiBAQCB1bnNpZ25lZCBsb25nIGZtYW5fbXVyYW1fYWxsb2Moc3RydWN0IG11cmFtX2luZm8gKm11cmFtLCBzaXplX3Qgc2l6ZSk7XG4gdm9pZCBmbWFuX211cmFtX2ZyZWVfbWVtKHN0cnVjdCBtdXJhbV9pbmZvICptdXJhbSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4gXHRcdFx0IHNpemVfdCBzaXplKTtcbiBcbiYjNDM7dm9pZCBmbWFuX211cmFtX2ZpbmlzaChzdHJ1Y3QgbXVyYW1faW5mbyAqbXVyYW0pO1xuJiM0MztcbiAjZW5kaWYgLyogX19GTV9NVVJBTV9FWFQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMDowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIEZNYW4gKEZyYW1lIE1hbmFnZXIpIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyAoJiMzOTtmc2wsZm1hbiYjMzk7IGFuZCAmIzM5O2ZzbCxmbWFuLW11cmFtJiMzOTspIHRvIHByb2JlLiBUaGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyBhcmUgbm90IHByZXNlbnQgaW4gZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VJiMzOTtzICYjMzk7dmlydCYjMzk7IG1hY2hpbmUgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDljNDM2MGYxM2U3YjBmZDAwOGM0ODcxOWQ5M2JiODU0NDZkMmUzZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDMgMTA6MDA6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMKaW5kZXggMjk5YmFiMDQzMTc1YjMuLjc1MmMwZGYwZTE3YzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jCkBAIC0yNjk1LDcgJiM0MzsyNjk1LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikKIAl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAl1MzIgdmFsLCByYW5nZVsyXTsKLQlpbnQgZXJyLCBpcnE7CiYjNDM7CWludCBlcnI7CiAJc3RydWN0IGNsayAqY2xrOwogCXUzMiBjbGtfcmF0ZTsKIApAQCAtMjcxNyw3ICYjNDM7MjcxNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpCiAJZXJyID0gcGxhdGZvcm1fZ2V0X2lycShvZl9kZXYsIDApOwogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIGZtYW5fbm9kZV9wdXQ7Ci0JaXJxID0gZXJyOwomIzQzOwlmbWFuLSZndDtkdHNfcGFyYW1zLmlycSA9IGVycjsKIAogCS8qIEdldCB0aGUgRk0gZXJyb3IgaW50ZXJydXB0ICovCiAJZXJyID0gcGxhdGZvcm1fZ2V0X2lycShvZl9kZXYsIDEpOwpAQCAtMjc3MywyNSAmIzQzOzI3NzMsNiBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KQogCiAJb2Zfbm9kZV9wdXQobXVyYW1fbm9kZSk7CiAKLQllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKCZhbXA7b2ZfZGV2LSZndDtkZXYsIGlycSwgZm1hbl9pcnEsIElSUUZfU0hBUkVELAotCQkJICAgICAgICYjMzQ7Zm1hbiYjMzQ7LCBmbWFuKTsKLQlpZiAoZXJyICZsdDsgMCkgewotCQlkZXZfZXJyKCZhbXA7b2ZfZGV2LSZndDtkZXYsICYjMzQ7JXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcbiYjMzQ7LAotCQkJX19mdW5jX18sIGlycSwgZXJyKTsKLQkJZ290byBmbWFuX2ZyZWU7Ci0JfQotCi0JaWYgKGZtYW4tJmd0O2R0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7Ci0JCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoJmFtcDtvZl9kZXYtJmd0O2RldiwgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5lcnJfaXJxLAotCQkJCSAgICAgICBmbWFuX2Vycl9pcnEsIElSUUZfU0hBUkVELAotCQkJCSAgICAgICAmIzM0O2ZtYW4tZXJyJiMzNDssIGZtYW4pOwotCQlpZiAoZXJyICZsdDsgMCkgewotCQkJZGV2X2VycigmYW1wO29mX2Rldi0mZ3Q7ZGV2LCAmIzM0OyVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXG4mIzM0OywKLQkJCQlfX2Z1bmNfXywgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5lcnJfaXJxLCBlcnIpOwotCQkJZ290byBmbWFuX2ZyZWU7Ci0JCX0KLQl9Ci0KIAliYXNlX2FkZHIgPSBkZXZtX3BsYXRmb3JtX2dldF9hbmRfaW9yZW1hcF9yZXNvdXJjZShvZl9kZXYsIDAsICZhbXA7cmVzKTsKIAlpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHsKIAkJZXJyID0gUFRSX0VSUihiYXNlX2FkZHIpOwpAQCAtMjgyNSw2ICYjNDM7MjgwNiwyNCBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KQogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBmbWFuX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBmbWFuICpmbWFuLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCWJvb2wgaXJxX3JlZ2lzdGVyZWQpCiYjNDM7ewomIzQzOwkvKiBGcmVlIElSUXMgZmlyc3Qgd2hpbGUgZm1hbiBpcyBzdGlsbCB2YWxpZCAqLwomIzQzOwlpZiAoaXJxX3JlZ2lzdGVyZWQpIHsKJiM0MzsJCWlmIChmbWFuLSZndDtkdHNfcGFyYW1zLmVycl9pcnEgIT0gMCkKJiM0MzsJCQlkZXZtX2ZyZWVfaXJxKGRldiwgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5lcnJfaXJxLCBmbWFuKTsKJiM0MzsJCWRldm1fZnJlZV9pcnEoZGV2LCBmbWFuLSZndDtkdHNfcGFyYW1zLmlycSwgZm1hbik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2ZyZWUoZm1hbi0mZ3Q7a2V5Z2VuKTsKJiM0MzsJZnJlZV9pbml0X3Jlc291cmNlcyhmbWFuKTsKJiM0MzsJa2ZyZWUoZm1hbi0mZ3Q7Y2ZnKTsKJiM0MzsJZm1hbl9tdXJhbV9maW5pc2goZm1hbi0mZ3Q7bXVyYW0pOwomIzQzOwlrZnJlZShmbWFuLSZndDtzdGF0ZSk7CiYjNDM7CWtmcmVlKGZtYW4pOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpCiB7CiAJc3RydWN0IGZtYW4gKmZtYW47CkBAIC0yODQwLDEyICYjNDM7MjgzOSw0MiBAQCBzdGF0aWMgaW50IGZtYW5fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KQogCWVyciA9IGZtYW5fY29uZmlnKGZtYW4pOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihkZXYsICYjMzQ7JXM6IEZNYW4gY29uZmlnIGZhaWxlZFxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJCS8qIGZtYW5fY29uZmlnKCkgZnJlZXMgZm1hbiBpbnRlcm5hbGx5IG9uIGFsbCBlcnJvciBwYXRocyAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoZm1hbl9pbml0KGZtYW4pICE9IDApIHsKIAkJZGV2X2VycihkZXYsICYjMzQ7JXM6IEZNYW4gaW5pdCBmYWlsZWRcbiYjMzQ7LCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOwomIzQzOwkJZ290byBlcnJfbm9faXJxOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFJlZ2lzdGVyIElSUSBoYW5kbGVycyBvbmx5IGFmdGVyIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLgomIzQzOwkgKiBUaGlzIHByZXZlbnRzIHR3byBpc3N1ZXM6CiYjNDM7CSAqIDEpIFByZS1pbml0IE5VTEwgZGVyZWZlcmVuY2U6IGlzX2luaXRfZG9uZShOVUxMKSByZXR1cm5zIHRydWUsCiYjNDM7CSAqICAgIHNvIGEgc2hhcmVkLUlSUSBzcHVyaW91cyBmaXJpbmcgYmVmb3JlIGZwbV9yZWdzIGlzIHNldCB3b3VsZAomIzQzOwkgKiAgICBkZXJlZmVyZW5jZSBOVUxMLgomIzQzOwkgKiAyKSBVc2UtYWZ0ZXItZnJlZSBvbiBwcm9iZSBmYWlsdXJlOiBmbWFuIHdhcyBremFsbG9jJiMzOTtkIChub3QgZGV2bSksCiYjNDM7CSAqICAgIHNvIG9uIGVycm9yIHBhdGhzIGtmcmVlKGZtYW4pIHJhbiBiZWZvcmUgZGV2bV9mcmVlX2lycSwgbGVhdmluZwomIzQzOwkgKiAgICBhIHdpbmRvdyB3aGVyZSB0aGUgaGFuZGxlciBjb3VsZCBmaXJlIHdpdGggYSBmcmVlZCBkZXZfaWQuCiYjNDM7CSAqIEJ5IHJlZ2lzdGVyaW5nIGhlcmUsIGJvdGggcHJvYmxlbXMgYXJlIGVsaW1pbmF0ZWQuCiYjNDM7CSAqLwomIzQzOwllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5pcnEsIGZtYW5faXJxLAomIzQzOwkJCSAgICAgICBJUlFGX1NIQVJFRCwgJiMzNDtmbWFuJiMzNDssIGZtYW4pOwomIzQzOwlpZiAoZXJyICZsdDsgMCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7JXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcbiYjMzQ7LAomIzQzOwkJCV9fZnVuY19fLCBmbWFuLSZndDtkdHNfcGFyYW1zLmlycSwgZXJyKTsKJiM0MzsJCWdvdG8gZXJyX25vX2lycTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5lcnJfaXJxICE9IDApIHsKJiM0MzsJCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBmbWFuLSZndDtkdHNfcGFyYW1zLmVycl9pcnEsCiYjNDM7CQkJCSAgICAgICBmbWFuX2Vycl9pcnEsIElSUUZfU0hBUkVELAomIzQzOwkJCQkgICAgICAgJiMzNDtmbWFuLWVyciYjMzQ7LCBmbWFuKTsKJiM0MzsJCWlmIChlcnIgJmx0OyAwKSB7CiYjNDM7CQkJZGV2X2VycihkZXYsICYjMzQ7JXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcbiYjMzQ7LAomIzQzOwkJCQlfX2Z1bmNfXywgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5lcnJfaXJxLCBlcnIpOwomIzQzOwkJCWdvdG8gZXJyX2lycTsKJiM0MzsJCX0KIAl9CiAKIAlpZiAoZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5lcnJfaXJxID09IDApIHsKQEAgLTI4NzMsNiAmIzQzOzI5MDIsMTIgQEAgc3RhdGljIGludCBmbWFuX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldikKIAlkZXZfZGJnKGRldiwgJiMzNDtGTWFuJWQgcHJvYmVkXG4mIzM0OywgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5pZCk7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfaXJxOgomIzQzOwlkZXZtX2ZyZWVfaXJxKGRldiwgZm1hbi0mZ3Q7ZHRzX3BhcmFtcy5pcnEsIGZtYW4pOwomIzQzO2Vycl9ub19pcnE6CiYjNDM7CWZtYW5fZnJlZV9yZXNvdXJjZXMoZm1hbiwgZGV2LCBmYWxzZSk7CiYjNDM7CXJldHVybiBlcnIgPzogLUVJTlZBTDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZm1hbl9tYXRjaFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oCmluZGV4IDc0ZWI2MmViYTBkN2ZmLi42MzBkNTdjMzE0NGNiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uaApAQCAtMjg2LDYgJiM0MzsyODYsNyBAQCBzdHJ1Y3QgZm1hbl9kdHNfcGFyYW1zIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsgICAgICAgICAgICAgICAgICAgLyogRk1hbiBtZW1vcnkgcmVzb3VyY2UgKi8KIAl1OCBpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRk1hbiBJRCAqLwogCiYjNDM7CWludCBpcnE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGTWFuIElSUSAqLwogCWludCBlcnJfaXJxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGTWFuIEVycm9yIElSUSAqLwogCiAJdTE2IGNsa19mcmVxOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZNYW4gY2xvY2sgZnJlcSAoSW4gTWh6KSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5jCmluZGV4IDZhYzdjMmIwY2IxOTkxLi42YzJiNGY3YTAyYjgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uYwpAQCAtMTI5LDMgJiM0MzsxMjksMTggQEAgdm9pZCBmbWFuX211cmFtX2ZyZWVfbWVtKHN0cnVjdCBtdXJhbV9pbmZvICptdXJhbSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCiAKIAlnZW5fcG9vbF9mcmVlKG11cmFtLSZndDtwb29sLCBhZGRyLCBzaXplKTsKIH0KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBmbWFuX211cmFtX2ZpbmlzaAomIzQzOyAqIEBtdXJhbToJRk0tTVVSQU0gbW9kdWxlIHBvaW50ZXIuCiYjNDM7ICoKJiM0MzsgKiBGcmVlcyBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIE1VUkFNIHBhcnRpdGlvbi4KJiM0MzsgKi8KJiM0Mzt2b2lkIGZtYW5fbXVyYW1fZmluaXNoKHN0cnVjdCBtdXJhbV9pbmZvICptdXJhbSkKJiM0Mzt7CiYjNDM7CWlmICghbXVyYW0pCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlvdW5tYXAobXVyYW0tJmd0O3ZiYXNlKTsKJiM0MzsJZ2VuX3Bvb2xfZGVzdHJveShtdXJhbS0mZ3Q7cG9vbCk7CiYjNDM7CWtmcmVlKG11cmFtKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmgKaW5kZXggMzY0M2FmNjFiYWUyNmMuLmE1Y2I1NDRjMGYwODJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5oCkBAIC0yMyw0ICYjNDM7MjMsNiBAQCB1bnNpZ25lZCBsb25nIGZtYW5fbXVyYW1fYWxsb2Moc3RydWN0IG11cmFtX2luZm8gKm11cmFtLCBzaXplX3Qgc2l6ZSk7CiB2b2lkIGZtYW5fbXVyYW1fZnJlZV9tZW0oc3RydWN0IG11cmFtX2luZm8gKm11cmFtLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKIAkJCSBzaXplX3Qgc2l6ZSk7CiAKJiM0Mzt2b2lkIGZtYW5fbXVyYW1fZmluaXNoKHN0cnVjdCBtdXJhbV9pbmZvICptdXJhbSk7CiYjNDM7CiAjZW5kaWYgLyogX19GTV9NVVJBTV9FWFQgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBGTWFuIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgYGZtYW4uY2AgYW5kIGBmbWFuX211cmFtLmNgLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZHJlc3NpbmcgYW4gaXNzdWUgd2l0aCBJUlEgcmVnaXN0cmF0aW9uIGluIHRoZSBGcmVlc2NhbGUgRk1hbiBkcml2ZXIuIFRoZSBtYWluIHRocnVzdCBpcyBtb3ZpbmcgdGhlIElSUSByZWdpc3RyYXRpb24gdG8gdGhlIGVuZCBvZiBgZm1hbl9wcm9iZWAgdG8gcHJldmVudCBhIHBvdGVudGlhbCBOVUxMIGRlcmVmZXJlbmNlIGFuZCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbyBpZiB0aGUgcHJvYmUgZmFpbHMgZWFybHkuIFRoYXQmIzM5O3MgYSBnb29kIHByYWN0aWNlLCBnZW5lcmFsbHkuIFRoZSBhZGRpdGlvbiBvZiBgZm1hbl9mcmVlX3Jlc291cmNlc2AgYW5kIGBmbWFuX211cmFtX2ZpbmlzaGAgZm9yIHByb3BlciBjbGVhbnVwIG9uIHByb2JlIGZhaWx1cmUgaXMgdGhlIHJpZ2h0IGFwcHJvYWNoIHRvby4gTm8gc3VycHJpc2VzIHRoZXJlOyBwcm9wZXIgcmVzb3VyY2UgbWFuYWdlbWVudCBpcyBjcml0aWNhbC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiwgdGhvdWdoLCBpcyBob3cgKnJlbGV2YW50KiBpcyB0aGlzIGZpeCBpbiBjb250ZW1wb3JhcnkgZW52aXJvbm1lbnRzPyBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIEZyZWVzY2FsZSBGTWFuIOKAkyB0aGF0JiMzOTtzIHRoZSBGcmFtZSBNYW5hZ2VyLiBJdCYjMzk7cyB1c3VhbGx5IHRpZWQgdG8gc3BlY2lmaWMgRnJlZXNjYWxlIFFvcklRIFNvQ3MsIGFuZCB0aG9zZSBhcmUgdXN1YWxseSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucy4gU28sIGNhbiB0aGlzIGJlIGV2ZW4gKmV4ZXJjaXNlZCogd2l0aGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVT8gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgUUVNVSBoZXJlLiBDYW4gUUVNVSBlbXVsYXRlIHRoZSBGcmVlc2NhbGUgRk1hbj8gR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGhhcmR3YXJlIGNvbXBvbmVudCwgbXkgaW5zdGluY3QgaXMgJiMzNDtubyYjMzQ7LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gVGhlIHBvdGVudGlhbCBmb3IgdGhpcyBjb2RlIHBhdGggdG8gZXZlbiB0cmlnZ2VyIG5lZWRzIHRvIGJlIHZlcmlmaWVkLiBMZXQgbWUgY2hlY2sgdGhlIEtjb25maWcgZm9yIHRoaXMgZHJpdmVyLiBJJiMzOTtsbCBzZWUgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgYW5kIGlmIHRoZXJlIGFyZSBhbnkgdGhhdCBhcmUgaGVscGZ1bCBpbiBRRU1VLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGU0xfRk1BTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzoyOmNvbmZpZyBGU0xfRk1BTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Rk1hbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkzNgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQqKgoKUmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBpZGVudGlmeSB0aGUgZGVwZW5kZW5jaWVzLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtLCBhIHByb2Nlc3MsIGEgcHJvYmxlbSDigJMgd2hhdGV2ZXIgJiMzNDtpdCYjMzQ7IGlzIOKAkyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnRzIGlzIHBhcmFtb3VudC4gV2hhdCBhcmUgdGhlIGtleSB2YXJpYWJsZXM/IFRoZSBjb3JlIGlucHV0cz8gVGhlIHVuZGVybHlpbmcgYXNzdW1wdGlvbnM/IFBpbnBvaW50aW5nIHRoZXNlIGRlcGVuZGVuY2llcyBpcyB0aGUgZXNzZW50aWFsIGZpcnN0IHN0ZXAgdG8gYW55IGVmZmVjdGl2ZSBhbmFseXNpcy4gV2hlcmUgZG8gd2UgYmVnaW4gdG8gdW5yYXZlbCBjb21wbGV4aXR5PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc9Mj1jb25maWcgRlNMX0ZNQU5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0ZNYW4gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBGU0xfU09DIHx8IEFSQ0hfTEFZRVJTQ0FQRSB8fCBDT01QSUxFX1RFU1RcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctNS1cdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWc9MTQ9Y29uZmlnIERQQUFfRVJSQVRVTV9BMDUwMzg1XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTE1LVx0Ym9vbFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzoxNjpcdGRlcGVuZHMgb24gQVJNNjQgXHUwMDI2XHUwMDI2IEZTTF9EUEFBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTE3LVx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGZtYW5fcHJvYmUgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZm1hbl9wcm9iZWAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJJiMzOTttIG5vdGljaW5nIGlzIHRoYXQgaXRzIGFjdGl2YXRpb24gZGVwZW5kcyBvbiBzcGVjaWZpYyBjb25kaXRpb25zOiBgRlNMX1NPQyB8fCBBUkNIX0xBWUVSU0NBUEUgfHwgQ09NUElMRV9URVNUYC4gIFRoaXMgaXMgYSBwbGF0Zm9ybSBkZXZpY2UsIG1lYW5pbmcgaXQmIzM5O3MgZ29pbmcgdG8gbmVlZCBhIGRldmljZSB0cmVlIG5vZGUgdG8gYWN0dWFsbHkgcHJvYmUuIFRoZSBiaWcgcXVlc3Rpb24gaW4gbXkgbWluZCBpcyBob3cgd2UgY2FuIGVuc3VyZSB0aGF0IG5vZGUgZXhpc3RzLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbGl6ZWQgb3IgZnV6emluZyBlbnZpcm9ubWVudC4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlIGluamVjdCBhIGRldmljZSB0cmVlIG5vZGUgZm9yIHRoaXMgdGhpbmc/IFN5emthbGxlciBjYW4gZG8gdGhpcyBpbiBzb21lIHNpdHVhdGlvbnMgdXNpbmcgYHN5el9kZXZfcGxhdGZvcm1gIG9yIHNpbWlsYXIgcHNldWRvLXN5c2NhbGxzIGlmIHRoZXkmIzM5O3JlIHN1cHBvcnRlZCwgb3IgYnkgbW9kaWZ5aW5nIHRoZSBkZXZpY2UgdHJlZSBkaXJlY3RseS4gQnV0IHdhaXQgYSBtaW51dGUsIHN5emthbGxlciBpc24mIzM5O3QgZ2VuZXJhbGx5IGRlc2lnbmVkIHRvIGluamVjdCBhcmJpdHJhcnkgRFQgbm9kZXMgd2l0aG91dCBzb21lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3IgdHJpY2tzIGxpa2UgYG9mX292ZXJsYXlgLiBBbHNvLCBldmVuIHdpdGggYHN5el9kZXZfcGxhdGZvcm1gLCB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIGl0IHdvbiYjMzk7dCB3b3JrIGZvciBhbGwgZHJpdmVycyBiZWNhdXNlIG9mIHJlc291cmNlIGRlcGVuZGVuY2llcywgbGlrZSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9ucywgSVJRcywgb3IgY2xvY2tzIHRoYXQgdGhlIGRyaXZlciByZXF1aXJlcy4gSXQgbG9va3MgbGlrZSBzeXprYWxsZXIgaGFzIHNvbWUgc3VwcG9ydCBmb3IgaW5qZWN0aW5nIHBsYXRmb3JtIGRldmljZXMsIGJ1dCBpdCYjMzk7cyBsaW1pdGVkIGluIHNjb3BlLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgaXMgYSB3YXkgdG8gdXNlIHN5emthbGxlciB0byByZWFjaCBgZm1hbl9wcm9iZWAgaW4gdGhpcyBjYXNlLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyIHByb2JlIGZ1bmN0aW9uLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGZtYW5fbWF0Y2hgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZtYW5fbWF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jPTI4Mjc9c3RhdGljIGludCBmbWFuX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2Rldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjkxMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYzoyOTEzOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZtYW5fbWF0Y2hbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTE0LVx0e1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI5MTk6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZm1hbl9tYXRjaCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjkyMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yOTIxPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZtYW5fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTIzLVx0XHQubmFtZSA9IFwmIzM0O2ZzbC1mbWFuXCYjMzQ7LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI5MjQ6XHRcdC5vZl9tYXRjaF90YWJsZSA9IGZtYW5fbWF0Y2gsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjkyNS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMwOQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBDb250ZW50cyBvZiBgZm1hbl9tYXRjaGAqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZS4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgYGZtYW5fbWF0Y2hgIGFjdHVhbGx5ICppcyouIElzIGl0IGEgdmFyaWFibGUsIGEgZnVuY3Rpb24sIGEgZGF0YSBzdHJ1Y3R1cmU/IEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIGtleS4gS25vd2luZyBpdHMgdHlwZSB3aWxsIGluc3RhbnRseSBwcm92aWRlIGEgbG90IG9mIHZhbHVhYmxlIGNvbnRleHQuIEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMsIGxpa2UgKndoYXQgZGF0YSBkb2VzIGl0IGNvbnRhaW4/KiwgKmhvdyBpcyB0aGF0IGRhdGEgc3RydWN0dXJlZD8qIGFuZCB1bHRpbWF0ZWx5LCAqaG93IGRvZXMgdGhpcyBhbGwgcmVsYXRlIHRvIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHN5c3RlbS90YXNrIGF0IGhhbmQ/KiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBpbnNpZGUgYW5kIHRoZW4gSSBjYW4gYnVpbGQgYSBtZW50YWwgbW9kZWwgb2YgaG93IHRoaXMgY29tcG9uZW50IGZ1bmN0aW9ucyBhbmQgaG93IGl0IGludGVncmF0ZXMgd2l0aGluIHRoZSB3aWRlciBzeXN0ZW0uIEkga25vdyB0aGF0IHVuZGVyc3RhbmRpbmcgYGZtYW5fbWF0Y2hgIGlzIGdvaW5nIHRvIGJlIGNlbnRyYWwgdG8gZGVjaXBoZXJpbmcgdGhpcyB3aG9sZSB0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZnNsLWZtYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jPTI5MjE9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZm1hbl9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjkyMi1cdC5kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6MjkyMzpcdFx0Lm5hbWUgPSBcJiMzNDtmc2wtZm1hblwmIzM0OyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTI0LVx0XHQub2ZfbWF0Y2hfdGFibGUgPSBmbWFuX21hdGNoLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzI0CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgRm9jdXMqKgoKQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyB0byBwcm9jZXNzIHRoZSB0ZXh0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgcmVhZCBgZm1hbl9tYXRjaGAuJiMzNDsgSSYjMzk7bSBub3QgZ29pbmcgdG8gc3BlbmQgdGltZSB3b25kZXJpbmcgKndoYXQqIGBmbWFuX21hdGNoYCBpcyDigJMgSSBjYW4gZXh0cmFwb2xhdGUgZnJvbSB0aGUgY29udGV4dCB0aGF0IGl0IHdpbGwgYmUgYSB1c2VmdWwgaW5wdXQgZm9yIHRoaXMgZXZhbHVhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGFuZGxlIG9uIGl0cyBzdHJ1Y3R1cmUgYW5kIGNvbnRlbnQuIFRoaXMgbGlrZWx5IGludm9sdmVzIHF1aWNrbHkgc2Nhbm5pbmcgdGhlIGtleSBlbGVtZW50cyB0byBmb3JtIGFuIGluZm9ybWVkIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyOTEwOlx0XHRyZXR1cm4gZXJyID86IC1FSU5WQUw7XG4yOTExOlx0fVxuMjkxMjpcdFxuMjkxMzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZtYW5fbWF0Y2hbXSA9IHtcbjI5MTQ6XHRcdHtcbjI5MTU6XHRcdFx0LmNvbXBhdGlibGUgPSBcJiMzNDtmc2wsZm1hblwmIzM0O30sXG4yOTE2Olx0XHR7fVxuMjkxNzpcdH07XG4yOTE4Olx0XG4yOTE5Olx0TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZm1hbl9tYXRjaCk7XG4yOTIwOlx0XG4yOTIxOlx0c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZm1hbl9kcml2ZXIgPSB7XG4yOTIyOlx0XHQuZHJpdmVyID0ge1xuMjkyMzpcdFx0XHQubmFtZSA9IFwmIzM0O2ZzbC1mbWFuXCYjMzQ7LFxuMjkyNDpcdFx0XHQub2ZfbWF0Y2hfdGFibGUgPSBmbWFuX21hdGNoLFxuMjkyNTpcdFx0fSxcbjI5MjY6XHRcdC5wcm9iZSA9IGZtYW5fcHJvYmUsXG4yOTI3Olx0fTtcbjI5Mjg6XHRcbjI5Mjk6XHRzdGF0aWMgaW50IF9faW5pdCBmbWFuX2xvYWQodm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE2OQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZyAmIzM0O2ZzbCxmbWFuJiMzNDsgQ29kZSoqCgpPa2F5LCBzbyBJIHNlZSBhIG1hdGNoOiAmIzM0O2ZzbCxmbWFuLiYjMzQ7IE15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHRoaXMgY29kZSBiZSByZWFjaGVkLCBhbmQgbWVhbmluZ2Z1bGx5IGZ1enplZCwgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gUGxhdGZvcm0gZHJpdmVycywgZXNwZWNpYWxseSBvbmVzIHRoYXQgdG91Y2ggc3BlY2lmaWMgaGFyZHdhcmUgcmVzb3VyY2VzLCBsaWtlIG1lbW9yeS1tYXBwZWQgSS9PIG9yIHBhcnRpY3VsYXIgY2xvY2tzLCBhcmUgdHlwaWNhbGx5IGEgcGFpbiB0byBmdXp6IHdpdGhvdXQgZWl0aGVyIGFuIGV4dHJlbWVseSBzcGVjaWFsaXplZCBlbXVsYXRvciBvciBzb21lIHRyaWNrZXJ5IGluIFN5emthbGxlciB0byBpbmplY3QgdGhvc2UgZGVwZW5kZW5jaWVzLgoKQnV0IHdhaXQsIFN5emthbGxlciAqZG9lcyogaGF2ZSBgc3l6X2Rldl9wbGF0Zm9ybWAsIHJpZ2h0PyBUaGF0IGNvdWxkIGJlIGEgd2F5IHRvIGNyZWF0ZSB0aGUgcGxhdGZvcm0gZGV2aWNlcyB3ZSBuZWVkLiBMZXQgbWUgc2VlLi4uIHRoZSBgZm1hbl9wcm9iZWAgZnVuY3Rpb24gY2FsbHMgYHJlYWRfZHRzX25vZGVgLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJdCBjYWxscyBgZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3VyY2VgLCBgcGxhdGZvcm1fZ2V0X2lycWAgYSBjb3VwbGUgb2YgdGltZXMsIGFuZCBgb2ZfY2xrX2dldGAuIEFuZCBjcnVjaWFsbHksIGl0IHVzZXMgYG9mX3BhcnNlX3BoYW5kbGVgOgoKYGBgYwptdXJhbV9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShvZl9kZXYtJmd0O2Rldi5vZl9ub2RlLCAmIzM0O2ZzbCxmbWFuLW11cmFtJiMzNDssIDApOwpgYGAKCkFoLCByaWdodC4gSWYgYG11cmFtX25vZGVgIGlzbiYjMzk7dCBmb3VuZCwgaXQgcmV0dXJucyBhbiBlcnJvci4gVGhhdCBtZWFucyBgb2ZfcGFyc2VfcGhhbmRsZWAgaXMgbG9va2luZyBmb3IgYSBkZXZpY2UgdHJlZSBub2RlIHdpdGggYSB2ZXJ5IHNwZWNpZmljIHByb3BlcnR5LCAmIzM0O2ZzbCxmbWFuLW11cmFtLiYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYHJlYWRfZHRzX25vZGVgIGZ1bmN0aW9uIG1vcmUgY29tcGxldGVseS4gVGhpcyBpcyBrZXkuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzYwOlx0XHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXM6IGNvdWxkIG5vdCBmaW5kIE1VUkFNIG5vZGVcXG5cJiMzNDssXG4yNzYxOlx0XHRcdFx0X19mdW5jX18pO1xuMjc2MjpcdFx0XHRnb3RvIGZtYW5fZnJlZTtcbjI3NjM6XHRcdH1cbjI3NjQ6XHRcbjI3NjU6XHRcdGVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobXVyYW1fbm9kZSwgMCxcbjI3NjY6XHRcdFx0XHRcdCAgICAgXHUwMDI2Zm1hbi1cdTAwM2VkdHNfcGFyYW1zLm11cmFtX3Jlcyk7XG4yNzY3Olx0XHRpZiAoZXJyKSB7XG4yNzY4Olx0XHRcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xuMjc2OTpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKCkgPSAlZFxcblwmIzM0OyxcbjI3NzA6XHRcdFx0XHRfX2Z1bmNfXywgZXJyKTtcbjI3NzE6XHRcdFx0Z290byBmbWFuX2ZyZWU7XG4yNzcyOlx0XHR9XG4yNzczOlx0XG4yNzc0Olx0XHRvZl9ub2RlX3B1dChtdXJhbV9ub2RlKTtcbjI3NzU6XHRcbjI3NzY6XHRcdGJhc2VfYWRkciA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKG9mX2RldiwgMCwgXHUwMDI2cmVzKTtcbjI3Nzc6XHRcdGlmIChJU19FUlIoYmFzZV9hZGRyKSkge1xuMjc3ODpcdFx0XHRlcnIgPSBQVFJfRVJSKGJhc2VfYWRkcik7XG4yNzc5Olx0XHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXM6IGRldm1faW9yZW1hcCgpIGZhaWxlZFxcblwmIzM0OywgX19mdW5jX18pO1xuMjc4MDpcdFx0XHRnb3RvIGZtYW5fZnJlZTtcbjI3ODE6XHRcdH1cbjI3ODI6XHRcbjI3ODM6XHRcdGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5iYXNlX2FkZHIgPSBiYXNlX2FkZHI7XG4yNzg0Olx0XHRmbWFuLVx1MDAzZWR0c19wYXJhbXMucmVzID0gcmVzO1xuMjc4NTpcdFxuMjc4NjpcdFx0Zm1hbi1cdTAwM2VkZXYgPSBcdTAwMjZvZl9kZXYtXHUwMDNlZGV2O1xuMjc4NzpcdFxuMjc4ODpcdFx0ZXJyID0gb2ZfcGxhdGZvcm1fcG9wdWxhdGUoZm1fbm9kZSwgTlVMTCwgTlVMTCwgXHUwMDI2b2ZfZGV2LVx1MDAzZWRldik7XG4yNzg5Olx0XHRpZiAoZXJyKSB7XG4yNzkwOlx0XHRcdGRldl9lcnIoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXM6IG9mX3BsYXRmb3JtX3BvcHVsYXRlKCkgZmFpbGVkXFxuXCYjMzQ7LFxuMjc5MTpcdFx0XHRcdF9fZnVuY19fKTtcbjI3OTI6XHRcdFx0Z290byBmbWFuX2ZyZWU7XG4yNzkzOlx0XHR9XG4yNzk0Olx0XG4yNzk1Olx0I2lmZGVmIENPTkZJR19EUEFBX0VSUkFUVU1fQTA1MDM4NVxuMjc5NjpcdFx0Zm1hbl9oYXNfZXJyX2EwNTAzODUgPVxuMjc5NzpcdFx0XHRvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZm1fbm9kZSwgXCYjMzQ7ZnNsLGVycmF0dW0tYTA1MDM4NVwmIzM0Oyk7XG4yNzk4Olx0I2VuZGlmXG4yNzk5Olx0XG4yODAwOlx0XHRyZXR1cm4gZm1hbjtcbjI4MDE6XHRcbjI4MDI6XHRmbWFuX25vZGVfcHV0OlxuMjgwMzpcdFx0b2Zfbm9kZV9wdXQoZm1fbm9kZSk7XG4yODA0Olx0Zm1hbl9mcmVlOlxuMjgwNTpcdFx0a2ZyZWUoZm1hbik7XG4yODA2Olx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMjgwNzpcdH1cbjI4MDg6XHRcbjI4MDk6XHRzdGF0aWMgdm9pZCBmbWFuX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBmbWFuICpmbWFuLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NTYKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBmc2wsZm1hbi1tdXJhbSBSZXF1aXJlbWVudCBhbmQgU3l6a2FsbGVyJiMzOTtzIENhcGFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgaW1tZWRpYXRlbHkgYXBwYXJlbnQgdGhhdCBpdCBuZWVkcyB0aGUgYGZzbCxmbWFuLW11cmFtYCBwaGFuZGxlIGluIHRoZSBkZXZpY2UgdHJlZS4gVGhhdCYjMzk7cyB0aGUga2V5IHJlcXVpcmVtZW50IGhlcmUuIE15IGZpcnN0IHRob3VnaHQgaXMsIGNhbiBTeXprYWxsZXIgaGFuZGxlIHRoaXM/IFJpZ2h0IG5vdywgaXQgZG9lc24mIzM5O3Qgc2VlbSBsaWtlIGl0IGNhbiBkaXJlY3RseSBpbmplY3QgYXJiaXRyYXJ5IGRldmljZSB0cmVlIHByb3BlcnRpZXMsIGVzcGVjaWFsbHkgc29tZXRoaW5nIGFzIHNwZWNpZmljIGFzIGBmc2wsZm1hbi1tdXJhbWAuIFRoaXMgaXMgYSBodXJkbGUuCgpBIHF1aWNrIHBhdXNlIGZvciByZWZsZWN0aW9uOiBhbSBJIGV2ZW4gKmFibGUqIHRvIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGggd2l0aCBTeXprYWxsZXIsIGdpdmVuIHRoaXMgY29uc3RyYWludD8gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uIEkgbmVlZCB0byBhbnN3ZXIuIElzIHRoZXJlIGFueSBleGlzdGluZyBtZWNoYW5pc20gdGhhdCBJIGNhbiBsZXZlcmFnZSB0byBjYWxsIGBmbWFuX3Byb2JlYD8gVGhpcyBpcyBjcml0aWNhbC4KCkFscmlnaHQsIGlmIFN5emthbGxlciBvZmZlcnMgYHN5el9kZXZfcGxhdGZvcm1gLCBJIGNvdWxkIHBvdGVudGlhbGx5IGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZS4gQnV0IHRoYXQgYnkgaXRzZWxmIGlzbiYjMzk7dCBlbm91Z2g7IHRoZSBjcnVjaWFsIGBvZl9ub2RlYCBwcm9wZXJ0eSB3b24mIzM5O3QgYmUgY29ycmVjdGx5IHBvcHVsYXRlZCwgcGFydGljdWxhcmx5IHdpdGggdGhvc2UgcmVxdWlyZWQgYGZzbCxmbWFuLW11cmFtYCBwcm9wZXJ0aWVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcHJvcGVydHkgaXMgcG9wdWxhdGVkLCB0aGlzIGlzIGEgbm9uLXN0YXJ0ZXIgb3RoZXJ3aXNlLgoKU28sIEkgbmVlZCB0byBjaGVjayB0byBkZXRlcm1pbmUgaWYgYG9mX3BhcnNlX3BoYW5kbGVgIGlzIGNhbGxlZCBzb21ld2hlcmUgYWxvbmcgdGhlIHdheS4gVW5kZXJzdGFuZGluZyBob3cgcGhhbmRsZXMgYXJlIHBhcnNlZCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmQgaG93IEkgY291bGQgcG90ZW50aWFsbHkgdXNlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjc0MDpcdFx0XHRcdF9fZnVuY19fLCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuaWQpO1xuMjc0MTpcdFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4yNzQyOlx0XHR9XG4yNzQzOlx0XHQvKiBSb3VuZGluZyB0byBNSHogKi9cbjI3NDQ6XHRcdGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5jbGtfZnJlcSA9IERJVl9ST1VORF9VUChjbGtfcmF0ZSwgMTAwMDAwMCk7XG4yNzQ1Olx0XG4yNzQ2Olx0XHRlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShmbV9ub2RlLCBcJiMzNDtmc2wscW1hbi1jaGFubmVsLXJhbmdlXCYjMzQ7LFxuMjc0NzpcdFx0XHRcdFx0XHQgXHUwMDI2cmFuZ2VbMF0sIDIpO1xuMjc0ODpcdFx0aWYgKGVycikge1xuMjc0OTpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBmYWlsZWQgdG8gcmVhZCBmc2wscW1hbi1jaGFubmVsLXJhbmdlIGZvciAlcE9GXFxuXCYjMzQ7LFxuMjc1MDpcdFx0XHRcdF9fZnVuY19fLCBmbV9ub2RlKTtcbjI3NTE6XHRcdFx0Z290byBmbWFuX25vZGVfcHV0O1xuMjc1MjpcdFx0fVxuMjc1MzpcdFx0Zm1hbi1cdTAwM2VkdHNfcGFyYW1zLnFtYW5fY2hhbm5lbF9iYXNlID0gcmFuZ2VbMF07XG4yNzU0Olx0XHRmbWFuLVx1MDAzZWR0c19wYXJhbXMubnVtX29mX3FtYW5fY2hhbm5lbHMgPSByYW5nZVsxXTtcbjI3NTU6XHRcbjI3NTY6XHRcdC8qIEdldCB0aGUgTVVSQU0gYmFzZSBhZGRyZXNzIGFuZCBzaXplICovXG4yNzU3Olx0XHRtdXJhbV9ub2RlID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKGZtX25vZGUsIGZtYW5fbXVyYW1fbWF0Y2gpO1xuMjc1ODpcdFx0aWYgKCFtdXJhbV9ub2RlKSB7XG4yNzU5Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1NDQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgTm9kZSBNYXRjaGluZyBGdW5jdGlvbioqCgpSaWdodCwgc28gaXQmIzM5O3MgY2FsbGluZyBgb2ZfZmluZF9tYXRjaGluZ19ub2RlKGZtX25vZGUsIGZtYW5fbXVyYW1fbWF0Y2gpYC4gSW50ZXJlc3RpbmcuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoZSBmdW5jdGlvbiBjYWxsLCBzbyBJIGtub3cgd2UmIzM5O3JlIGxvb2tpbmcgZm9yIGEgbWF0Y2hpbmcgbm9kZSwgbGlrZWx5IHdpdGhpbiBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlIGJhc2VkIG9uIHRoZSAmIzM0O29mJiMzNDsgcHJlZml4LiBCdXQgdGhlIGtleSBoZXJlIGlzIHRoYXQgc2Vjb25kIGFyZ3VtZW50OiBgZm1hbl9tdXJhbV9tYXRjaGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgZm1hbl9tdXJhbV9tYXRjaGAgYWN0dWFsbHkgKmlzKi4gSXMgaXQgYSBzZWFyY2ggY3JpdGVyaWEgb2JqZWN0PyBBIHNwZWNpZmljIGtleT8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gVGhpcyBmdW5jdGlvbiYjMzk7cyBiZWhhdmlvciBjb21wbGV0ZWx5IGhpbmdlcyBvbiBob3cgdGhhdCBzZWNvbmQgYXJndW1lbnQgaXMgY29uc3RydWN0ZWQgYW5kIHdoYXQgaXQgcmVwcmVzZW50cy4gSSBuZWVkIHRvIHRyYWNlIGl0IGJhY2sgYW5kIGZpZ3VyZSBvdXQgaXRzIHR5cGUsIHN0cnVjdHVyZSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIHdoYXQgaXTigJlzIGludGVuZGVkIHRvIG1hdGNoIHdpdGhpbiBgZm1fbm9kZWAuIFRpbWUgdG8gZ28gc3BlbHVua2luZy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbWFuX211cmFtX21hdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yNjA2PXN0YXRpYyBpcnFyZXR1cm5fdCBmbWFuX2lycShpbnQgaXJxLCB2b2lkICpoYW5kbGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI2ODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM6MjY4NDpzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmbWFuX211cmFtX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjY4NS1cdHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjY4OC19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI2ODk6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZm1hbl9tdXJhbV9tYXRjaCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjY5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yNjkxPXN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI3NTYtXHQvKiBHZXQgdGhlIE1VUkFNIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI3NTc6XHRtdXJhbV9ub2RlID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKGZtX25vZGUsIGZtYW5fbXVyYW1fbWF0Y2gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI3NTgtXHRpZiAoIW11cmFtX25vZGUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNDUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERldmljZSBUcmVlIE5vZGUgTWF0Y2hpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGV2aWNlIHRyZWUuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gaG93IGl0IGlkZW50aWZpZXMgYSBtYXRjaGluZyBub2RlLiBJIHNlZSB0aGF0IGl0JiMzOTtzIHJlbHlpbmcgb24gYSBzZWFyY2ggd2l0aGluIHRoZSB0cmVlLiBOb3csIHNvbWV0aGluZyBpbW1lZGlhdGVseSBqdW1wcyBvdXQ6IGlmIFN5emthbGxlciB1c2VzIGBzeXpfZGV2X3BsYXRmb3JtYCB0byBjcmVhdGUgYSBwbGF0Zm9ybSBkZXZpY2UsIHRoZW4gdGhhdCBkZXZpY2UgKndvbiYjMzk7dCogaGF2ZSBhbiBgb2Zfbm9kZWAgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGBzeXpfZGV2X3BsYXRmb3JtYCBpcyBhYm91dCBhIHNpbXBsaWZpZWQgc2V0dXAuIFRodXMsIGBvZl9kZXYtJmd0O2Rldi5vZl9ub2RlYCB3aWxsIGluZXZpdGFibHkgYmUgYE5VTExgLgoKQWhhLCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIEkgc2VlIGEgbGluZTogYGZtX25vZGUgPSBvZl9kZXYtJmd0O2Rldi5vZl9ub2RlO2AuIEJ1dCBpZiB0aGF0IGBvZl9ub2RlYCBpcyBpbmRlZWQgTlVMTCwgYXMgSSYjMzk7dmUgYWxyZWFkeSByZWFzb25lZCwgdGhlIHN1YnNlcXVlbnQgY2FsbCB0byBgb2ZfcHJvcGVydHlfcmVhZF91MzJgIGlzIGdvaW5nIHRvIGZhaWwuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSB3YWl0aW5nIHRvIGhhcHBlbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgaW50ZW5kZWQgYmVoYXZpb3IgaXMgaW4gdGhpcyBudWxsIGNhc2UuIEFyZSB3ZSBleHBlY3RpbmcgaXQ/IElzIGl0IGFuIGVycm9yPyBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgcHJvYmFibHkgd2hlcmUgYSBidWcgbHVya3MuIFRpbWUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBhbmQgc2VlIGlmIHRoaXMgaXMgaGFuZGxlZCBjb3JyZWN0bHkgb3IgaWYgdGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI2OTA6XHRcbjI2OTE6XHRzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxuMjY5MjpcdHtcbjI2OTM6XHRcdHN0cnVjdCBmbWFuICpmbWFuO1xuMjY5NDpcdFx0c3RydWN0IGRldmljZV9ub2RlICpmbV9ub2RlLCAqbXVyYW1fbm9kZTtcbjI2OTU6XHRcdHZvaWQgX19pb21lbSAqYmFzZV9hZGRyO1xuMjY5NjpcdFx0c3RydWN0IHJlc291cmNlICpyZXM7XG4yNjk3Olx0XHR1MzIgdmFsLCByYW5nZVsyXTtcbjI2OTg6XHRcdGludCBlcnI7XG4yNjk5Olx0XHRzdHJ1Y3QgY2xrICpjbGs7XG4yNzAwOlx0XHR1MzIgY2xrX3JhdGU7XG4yNzAxOlx0XG4yNzAyOlx0XHRmbWFuID0ga3phbGxvY19vYmooKmZtYW4pO1xuMjcwMzpcdFx0aWYgKCFmbWFuKVxuMjcwNDpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjI3MDU6XHRcbjI3MDY6XHRcdGZtX25vZGUgPSBvZl9ub2RlX2dldChvZl9kZXYtXHUwMDNlZGV2Lm9mX25vZGUpO1xuMjcwNzpcdFxuMjcwODpcdFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZm1fbm9kZSwgXCYjMzQ7Y2VsbC1pbmRleFwmIzM0OywgXHUwMDI2dmFsKTtcbjI3MDk6XHRcdGlmIChlcnIpIHtcbjI3MTA6XHRcdFx0ZGV2X2VycihcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBcJiMzNDslczogZmFpbGVkIHRvIHJlYWQgY2VsbC1pbmRleCBmb3IgJXBPRlxcblwmIzM0OyxcbjI3MTE6XHRcdFx0XHRfX2Z1bmNfXywgZm1fbm9kZSk7XG4yNzEyOlx0XHRcdGdvdG8gZm1hbl9ub2RlX3B1dDtcbjI3MTM6XHRcdH1cbjI3MTQ6XHRcdGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5pZCA9ICh1OCl2YWw7XG4yNzE1Olx0XG4yNzE2Olx0XHQvKiBHZXQgdGhlIEZNIGludGVycnVwdCAqL1xuMjcxNzpcdFx0ZXJyID0gcGxhdGZvcm1fZ2V0X2lycShvZl9kZXYsIDApO1xuMjcxODpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI3MTk6XHRcdFx0Z290byBmbWFuX25vZGVfcHV0O1xuMjcyMDpcdFx0Zm1hbi1cdTAwM2VkdHNfcGFyYW1zLmlycSA9IGVycjtcbjI3MjE6XHRcbjI3MjI6XHRcdC8qIEdldCB0aGUgRk0gZXJyb3IgaW50ZXJydXB0ICovXG4yNzIzOlx0XHRlcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKG9mX2RldiwgMSk7XG4yNzI0Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMjcyNTpcdFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4yNzI2Olx0XHRmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSA9IGVycjtcbjI3Mjc6XHRcbjI3Mjg6XHRcdGNsayA9IG9mX2Nsa19nZXQoZm1fbm9kZSwgMCk7XG4yNzI5Olx0XHRpZiAoSVNfRVJSKGNsaykpIHtcbjI3MzA6XHRcdFx0ZXJyID0gUFRSX0VSUihjbGspO1xuMjczMTpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZ2V0IEZNJWQgY2xvY2sgc3RydWN0dXJlXFxuXCYjMzQ7LFxuMjczMjpcdFx0XHRcdF9fZnVuY19fLCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuaWQpO1xuMjczMzpcdFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4yNzM0Olx0XHR9XG4yNzM1Olx0XG4yNzM2Olx0XHRjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGspO1xuMjczNzpcdFx0aWYgKCFjbGtfcmF0ZSkge1xuMjczODpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuMjczOTpcdFx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIEZNJWQgY2xvY2sgcmF0ZVxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0OTEKCQkJCQkJCW91dHB1dDogMTE4CgkJCQkJCQl0aG91Z2h0czogNDAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQXBwbGljYWJpbGl0eSBBc3Nlc3NtZW50KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIElmIGBmbV9ub2RlYCBpcyBudWxsLCBgb2ZfcHJvcGVydHlfcmVhZF91MzJgIGltbWVkaWF0ZWx5IHJldHVybnMgYC1FSU5WQUxgLiBDb25zZXF1ZW50bHksIGByZWFkX2R0c19ub2RlYCB3aWxsIGZhaWwsIGFuZCB0aGlzIGRyaXZlciwgdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlciwgd29uJiMzOTt0IHByb2JlIHdpdGhvdXQgYSB2YWxpZCBkZXZpY2UgdHJlZSBub2RlLiBHaXZlbiB0aGF0IHRoaXMgaXMgYSBGcmVlc2NhbGUgZHJpdmVyLCBpdCYjMzk7cyB2aXJ0dWFsbHkgaW1wb3NzaWJsZSB0byBmaW5kIGl0IHByZXNlbnQgaW4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUgdW5sZXNzIHdlIGFyZSBzcGVjaWZpY2FsbHkgZW11bGF0aW5nIGEgRnJlZXNjYWxlIFN5c3RlbSBvbiBDaGlwIChTb0MpLCBsaWtlIGEgUW9ySVEuCgpOb3csIHN5emthbGxlciwgd2hpY2ggaXMgY3J1Y2lhbCBmb3Igb3VyIGZ1enppbmcgZWZmb3J0cywgZG9lc24mIzM5O3QgZW11bGF0ZSBGcmVlc2NhbGUgU29Dcy4gSXQgdHlwaWNhbGx5IHJ1bnMgb24gZ2VuZXJpYyBhcmNoaXRlY3R1cmVzIGxpa2UgeDg2XzY0IGFuZCBhcm02NC4gQnV0IHdhaXQsIGl0IGRvZXMgc3VwcG9ydCBhcm02NC4gQ291bGQgaXQgcnVuIG9uIGEgRnJlZXNjYWxlIFNvQyBlbXVsYXRvcj8gUUVNVSBkb2VzIGhhdmUgKnNvbWUqIHN1cHBvcnQgZm9yIEZyZWVzY2FsZSBib2FyZHMsIGxpa2UgYG1wYzg1NDRkc2AsIGBlNTAwYCwgZXRjLiBCdXQgZG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgdXNlIHRoZXNlIGJvYXJkIGVtdWxhdGlvbnM/IFVzdWFsbHksIHN5emthbGxlciBvcHRzIGZvciBgdmlydGAgbWFjaGluZXMgZm9yIGFybTY0IGFuZCBgcGNgIG9yIGBxMzVgIGZvciB4ODZfNjQsIHdoaWNoIGlzIGhvdyB3ZSBjb25maWd1cmVkIGl0LiBUaGUgYHZpcnRgIG1hY2hpbmUgaXMgdW5saWtlbHkgdG8gaGF2ZSBhIEZyZWVzY2FsZSBGTWFuLgoKVGhlcmVmb3JlLCB1bmRlciBzdGFuZGFyZCBzeXprYWxsZXIgY29uZmlndXJhdGlvbnMsIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCB0aGVyZSBpc24mIzM5O3QgYW5vdGhlciBlbnRyeSBwb2ludCB0byBgZm1hbl9wcm9iZWAgdGhhdCBJJiMzOTttIG1pc3NpbmcuIE5vcGUsIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyLCBkZXBlbmRlbnQgb24gYSBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlLiBUaGVyZWZvcmUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIG5lZWRzIHRvIGJlIGBmYWxzZWAgaGVyZSwgYXMgdGhlIHByb2JhYmlsaXR5IG9mIHJlYWNoaW5nIHRoaXMgY29kZSBwYXRoIGlzIGVmZmVjdGl2ZWx5IHplcm8uCgpMZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIHBhdGNoIGFnYWluIHRvIGVuc3VyZSB0aGF0IEkgZGlkbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4gT2theSwgdGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmbWFuX3Byb2JlYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gSVJRIHJlZ2lzdHJhdGlvbiBiZWZvcmUgaW5pdGlhbGl6YXRpb24sIHBvdGVudGlhbGx5IGNhdXNpbmcgYSBOVUxMIGRlcmVmZXJlbmNlIG9yIHVzZS1hZnRlci1mcmVlLiBUaGUgYnVnIGlzIHZhbGlkIGFuZCBpbXBvcnRhbnQsIGJ1dCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZHJpdmVyIGluYWNjZXNzaWJsZSBpbiBvdXIgZnV6emluZyBlbnZpcm9ubWVudC4gVGh1cywgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZzogZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBGcmVlc2NhbGUgRk1hbiAoRnJhbWUgTWFuYWdlcikgZHJpdmVyLCB3aGljaCBpcyBhIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzICgmIzM5O2ZzbCxmbWFuJiMzOTsgYW5kICYjMzk7ZnNsLGZtYW4tbXVyYW0mIzM5OykgdG8gcHJvYmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIGFyZSBub3QgcHJlc2VudCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUmIzM5O3MgJiMzOTt2aXJ0JiMzOTsgbWFjaGluZSB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIEZNYW4gKEZyYW1lIE1hbmFnZXIpIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyAoJiMzOTtmc2wsZm1hbiYjMzk7IGFuZCAmIzM5O2ZzbCxmbWFuLW11cmFtJiMzOTspIHRvIHByb2JlLiBUaGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyBhcmUgbm90IHByZXNlbnQgaW4gZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VJiMzOTtzICYjMzk7dmlydCYjMzk7IG1hY2hpbmUgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAwOjMzLjg3MzY3MTM5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjI0NjE0OTg2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEZyZWVzY2FsZSBGTWFuIChGcmFtZSBNYW5hZ2VyKSBkcml2ZXIsIHdoaWNoIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgKCdmc2wsZm1hbicgYW5kICdmc2wsZm1hbi1tdXJhbScpIHRvIHByb2JlLiBUaGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyBhcmUgbm90IHByZXNlbnQgaW4gZ2VuZXJpYyB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VJ3MgJ3ZpcnQnIG1hY2hpbmUgdXNlZCBieSBzeXprYWxsZXIuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDA6MzMuODczNjc3ODY0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQ1Nzk5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0OWM0MzYwZjEzZTdiMGZkMDA4YzQ4NzE5ZDkzYmI4NTQ0NmQyZTNlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMgMTA6MDA6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXFxuaW5kZXggMjk5YmFiMDQzMTc1YjMuLjc1MmMwZGYwZTE3YzU5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xcbkBAIC0yNjk1LDcgKzI2OTUsNyBAQCBzdGF0aWMgc3RydWN0IGZtYW4gKnJlYWRfZHRzX25vZGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbiBcXHR2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjtcXG4gXFx0c3RydWN0IHJlc291cmNlICpyZXM7XFxuIFxcdHUzMiB2YWwsIHJhbmdlWzJdO1xcbi1cXHRpbnQgZXJyLCBpcnE7XFxuK1xcdGludCBlcnI7XFxuIFxcdHN0cnVjdCBjbGsgKmNsaztcXG4gXFx0dTMyIGNsa19yYXRlO1xcbiBcXG5AQCAtMjcxNyw3ICsyNzE3LDcgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcXG4gXFx0ZXJyID0gcGxhdGZvcm1fZ2V0X2lycShvZl9kZXYsIDApO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBmbWFuX25vZGVfcHV0O1xcbi1cXHRpcnEgPSBlcnI7XFxuK1xcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuaXJxID0gZXJyO1xcbiBcXG4gXFx0LyogR2V0IHRoZSBGTSBlcnJvciBpbnRlcnJ1cHQgKi9cXG4gXFx0ZXJyID0gcGxhdGZvcm1fZ2V0X2lycShvZl9kZXYsIDEpO1xcbkBAIC0yNzczLDI1ICsyNzczLDYgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcXG4gXFxuIFxcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xcbiBcXG4tXFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIGlycSwgZm1hbl9pcnEsIElSUUZfU0hBUkVELFxcbi1cXHRcXHRcXHQgICAgICAgXFxcImZtYW5cXFwiLCBmbWFuKTtcXG4tXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4tXFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogaXJxICVkIGFsbG9jYXRpb24gZmFpbGVkIChlcnJvciA9ICVkKVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0X19mdW5jX18sIGlycSwgZXJyKTtcXG4tXFx0XFx0Z290byBmbWFuX2ZyZWU7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEgIT0gMCkge1xcbi1cXHRcXHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgZm1hbl9lcnJfaXJxLCBJUlFGX1NIQVJFRCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFxcXCJmbWFuLWVyclxcXCIsIGZtYW4pO1xcbi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRfX2Z1bmNfXywgZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxLCBlcnIpO1xcbi1cXHRcXHRcXHRnb3RvIGZtYW5fZnJlZTtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbiBcXHRiYXNlX2FkZHIgPSBkZXZtX3BsYXRmb3JtX2dldF9hbmRfaW9yZW1hcF9yZXNvdXJjZShvZl9kZXYsIDAsIFxcdTAwMjZyZXMpO1xcbiBcXHRpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihiYXNlX2FkZHIpO1xcbkBAIC0yODI1LDYgKzI4MDYsMjQgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcXG4gXFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZm1hbl9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgZm1hbiAqZm1hbiwgc3RydWN0IGRldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRib29sIGlycV9yZWdpc3RlcmVkKVxcbit7XFxuK1xcdC8qIEZyZWUgSVJRcyBmaXJzdCB3aGlsZSBmbWFuIGlzIHN0aWxsIHZhbGlkICovXFxuK1xcdGlmIChpcnFfcmVnaXN0ZXJlZCkge1xcbitcXHRcXHRpZiAoZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxICE9IDApXFxuK1xcdFxcdFxcdGRldm1fZnJlZV9pcnEoZGV2LCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsIGZtYW4pO1xcbitcXHRcXHRkZXZtX2ZyZWVfaXJxKGRldiwgZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5pcnEsIGZtYW4pO1xcbitcXHR9XFxuK1xcbitcXHRrZnJlZShmbWFuLVxcdTAwM2VrZXlnZW4pO1xcbitcXHRmcmVlX2luaXRfcmVzb3VyY2VzKGZtYW4pO1xcbitcXHRrZnJlZShmbWFuLVxcdTAwM2VjZmcpO1xcbitcXHRmbWFuX211cmFtX2ZpbmlzaChmbWFuLVxcdTAwM2VtdXJhbSk7XFxuK1xcdGtmcmVlKGZtYW4tXFx1MDAzZXN0YXRlKTtcXG4rXFx0a2ZyZWUoZm1hbik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXFxuIHtcXG4gXFx0c3RydWN0IGZtYW4gKmZtYW47XFxuQEAgLTI4NDAsMTIgKzI4MzksNDIgQEAgc3RhdGljIGludCBmbWFuX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcXG4gXFx0ZXJyID0gZm1hbl9jb25maWcoZm1hbik7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2VycihkZXYsIFxcXCIlczogRk1hbiBjb25maWcgZmFpbGVkXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuK1xcdFxcdC8qIGZtYW5fY29uZmlnKCkgZnJlZXMgZm1hbiBpbnRlcm5hbGx5IG9uIGFsbCBlcnJvciBwYXRocyAqL1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGZtYW5faW5pdChmbWFuKSAhPSAwKSB7XFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiJXM6IEZNYW4gaW5pdCBmYWlsZWRcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGdvdG8gZXJyX25vX2lycTtcXG4rXFx0fVxcbitcXG4rXFx0LyogUmVnaXN0ZXIgSVJRIGhhbmRsZXJzIG9ubHkgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUuXFxuK1xcdCAqIFRoaXMgcHJldmVudHMgdHdvIGlzc3VlczpcXG4rXFx0ICogMSkgUHJlLWluaXQgTlVMTCBkZXJlZmVyZW5jZTogaXNfaW5pdF9kb25lKE5VTEwpIHJldHVybnMgdHJ1ZSxcXG4rXFx0ICogICAgc28gYSBzaGFyZWQtSVJRIHNwdXJpb3VzIGZpcmluZyBiZWZvcmUgZnBtX3JlZ3MgaXMgc2V0IHdvdWxkXFxuK1xcdCAqICAgIGRlcmVmZXJlbmNlIE5VTEwuXFxuK1xcdCAqIDIpIFVzZS1hZnRlci1mcmVlIG9uIHByb2JlIGZhaWx1cmU6IGZtYW4gd2FzIGt6YWxsb2MnZCAobm90IGRldm0pLFxcbitcXHQgKiAgICBzbyBvbiBlcnJvciBwYXRocyBrZnJlZShmbWFuKSByYW4gYmVmb3JlIGRldm1fZnJlZV9pcnEsIGxlYXZpbmdcXG4rXFx0ICogICAgYSB3aW5kb3cgd2hlcmUgdGhlIGhhbmRsZXIgY291bGQgZmlyZSB3aXRoIGEgZnJlZWQgZGV2X2lkLlxcbitcXHQgKiBCeSByZWdpc3RlcmluZyBoZXJlLCBib3RoIHByb2JsZW1zIGFyZSBlbGltaW5hdGVkLlxcbitcXHQgKi9cXG4rXFx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuaXJxLCBmbWFuX2lycSxcXG4rXFx0XFx0XFx0ICAgICAgIElSUUZfU0hBUkVELCBcXFwiZm1hblxcXCIsIGZtYW4pO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIiVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRfX2Z1bmNfXywgZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5pcnEsIGVycik7XFxuK1xcdFxcdGdvdG8gZXJyX25vX2lycTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7XFxuK1xcdFxcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBmbWFuX2Vycl9pcnEsIElSUUZfU0hBUkVELFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcImZtYW4tZXJyXFxcIiwgZm1hbik7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiJXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdF9fZnVuY19fLCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsIGVycik7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX2lycTtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxID09IDApIHtcXG5AQCAtMjg3Myw2ICsyOTAyLDEyIEBAIHN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXFxuIFxcdGRldl9kYmcoZGV2LCBcXFwiRk1hbiVkIHByb2JlZFxcXFxuXFxcIiwgZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5pZCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9pcnE6XFxuK1xcdGRldm1fZnJlZV9pcnEoZGV2LCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmlycSwgZm1hbik7XFxuK2Vycl9ub19pcnE6XFxuK1xcdGZtYW5fZnJlZV9yZXNvdXJjZXMoZm1hbiwgZGV2LCBmYWxzZSk7XFxuK1xcdHJldHVybiBlcnIgPzogLUVJTlZBTDtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZm1hbl9tYXRjaFtdID0ge1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmhcXG5pbmRleCA3NGViNjJlYmEwZDdmZi4uNjMwZDU3YzMxNDRjYmYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oXFxuQEAgLTI4Niw2ICsyODYsNyBAQCBzdHJ1Y3QgZm1hbl9kdHNfcGFyYW1zIHtcXG4gXFx0c3RydWN0IHJlc291cmNlICpyZXM7ICAgICAgICAgICAgICAgICAgIC8qIEZNYW4gbWVtb3J5IHJlc291cmNlICovXFxuIFxcdHU4IGlkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGTWFuIElEICovXFxuIFxcbitcXHRpbnQgaXJxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRk1hbiBJUlEgKi9cXG4gXFx0aW50IGVycl9pcnE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZNYW4gRXJyb3IgSVJRICovXFxuIFxcbiBcXHR1MTYgY2xrX2ZyZXE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRk1hbiBjbG9jayBmcmVxIChJbiBNaHopICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uY1xcbmluZGV4IDZhYzdjMmIwY2IxOTkxLi42YzJiNGY3YTAyYjgxNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmNcXG5AQCAtMTI5LDMgKzEyOSwxOCBAQCB2b2lkIGZtYW5fbXVyYW1fZnJlZV9tZW0oc3RydWN0IG11cmFtX2luZm8gKm11cmFtLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcXG4gXFxuIFxcdGdlbl9wb29sX2ZyZWUobXVyYW0tXFx1MDAzZXBvb2wsIGFkZHIsIHNpemUpO1xcbiB9XFxuK1xcbisvKipcXG4rICogZm1hbl9tdXJhbV9maW5pc2hcXG4rICogQG11cmFtOlxcdEZNLU1VUkFNIG1vZHVsZSBwb2ludGVyLlxcbisgKlxcbisgKiBGcmVlcyBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIE1VUkFNIHBhcnRpdGlvbi5cXG4rICovXFxuK3ZvaWQgZm1hbl9tdXJhbV9maW5pc2goc3RydWN0IG11cmFtX2luZm8gKm11cmFtKVxcbit7XFxuK1xcdGlmICghbXVyYW0pXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aW91bm1hcChtdXJhbS1cXHUwMDNldmJhc2UpO1xcbitcXHRnZW5fcG9vbF9kZXN0cm95KG11cmFtLVxcdTAwM2Vwb29sKTtcXG4rXFx0a2ZyZWUobXVyYW0pO1xcbit9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uaFxcbmluZGV4IDM2NDNhZjYxYmFlMjZjLi5hNWNiNTQ0YzBmMDgyYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmhcXG5AQCAtMjMsNCArMjMsNiBAQCB1bnNpZ25lZCBsb25nIGZtYW5fbXVyYW1fYWxsb2Moc3RydWN0IG11cmFtX2luZm8gKm11cmFtLCBzaXplX3Qgc2l6ZSk7XFxuIHZvaWQgZm1hbl9tdXJhbV9mcmVlX21lbShzdHJ1Y3QgbXVyYW1faW5mbyAqbXVyYW0sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbiBcXHRcXHRcXHQgc2l6ZV90IHNpemUpO1xcbiBcXG4rdm9pZCBmbWFuX211cmFtX2ZpbmlzaChzdHJ1Y3QgbXVyYW1faW5mbyAqbXVyYW0pO1xcbitcXG4gI2VuZGlmIC8qIF9fRk1fTVVSQU1fRVhUICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAwOjM0LjM4OTI5MjA3NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY1NzMwNTIwMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIEZNYW4gKEZyYW1lIE1hbmFnZXIpIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyAoJ2ZzbCxmbWFuJyBhbmQgJ2ZzbCxmbWFuLW11cmFtJykgdG8gcHJvYmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIGFyZSBub3QgcHJlc2VudCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUncyAndmlydCcgbWFjaGluZSB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ5YzQzNjBmMTNlN2IwZmQwMDhjNDg3MTlkOTNiYjg1NDQ2ZDJlM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDEwOjAwOjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXG5pbmRleCAyOTliYWIwNDMxNzViMy4uNzUyYzBkZjBlMTdjNTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1xuQEAgLTI2OTUsNyArMjY5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHR2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjtcbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xuIFx0dTMyIHZhbCwgcmFuZ2VbMl07XG4tXHRpbnQgZXJyLCBpcnE7XG4rXHRpbnQgZXJyO1xuIFx0c3RydWN0IGNsayAqY2xrO1xuIFx0dTMyIGNsa19yYXRlO1xuIFxuQEAgLTI3MTcsNyArMjcxNyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRlcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKG9mX2RldiwgMCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGZtYW5fbm9kZV9wdXQ7XG4tXHRpcnEgPSBlcnI7XG4rXHRmbWFuLVx1MDAzZWR0c19wYXJhbXMuaXJxID0gZXJyO1xuIFxuIFx0LyogR2V0IHRoZSBGTSBlcnJvciBpbnRlcnJ1cHQgKi9cbiBcdGVyciA9IHBsYXRmb3JtX2dldF9pcnEob2ZfZGV2LCAxKTtcbkBAIC0yNzczLDI1ICsyNzczLDYgQEAgc3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbiBcbiBcdG9mX25vZGVfcHV0KG11cmFtX25vZGUpO1xuIFxuLVx0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBpcnEsIGZtYW5faXJxLCBJUlFGX1NIQVJFRCxcbi1cdFx0XHQgICAgICAgXCJmbWFuXCIsIGZtYW4pO1xuLVx0aWYgKGVyciBcdTAwM2MgMCkge1xuLVx0XHRkZXZfZXJyKFx1MDAyNm9mX2Rldi1cdTAwM2VkZXYsIFwiJXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcXG5cIixcbi1cdFx0XHRfX2Z1bmNfXywgaXJxLCBlcnIpO1xuLVx0XHRnb3RvIGZtYW5fZnJlZTtcbi1cdH1cbi1cbi1cdGlmIChmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSAhPSAwKSB7XG4tXHRcdGVyciA9IGRldm1fcmVxdWVzdF9pcnEoXHUwMDI2b2ZfZGV2LVx1MDAzZWRldiwgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsXG4tXHRcdFx0XHQgICAgICAgZm1hbl9lcnJfaXJxLCBJUlFGX1NIQVJFRCxcbi1cdFx0XHRcdCAgICAgICBcImZtYW4tZXJyXCIsIGZtYW4pO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tXHRcdFx0ZGV2X2VycihcdTAwMjZvZl9kZXYtXHUwMDNlZGV2LCBcIiVzOiBpcnEgJWQgYWxsb2NhdGlvbiBmYWlsZWQgKGVycm9yID0gJWQpXFxuXCIsXG4tXHRcdFx0XHRfX2Z1bmNfXywgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsIGVycik7XG4tXHRcdFx0Z290byBmbWFuX2ZyZWU7XG4tXHRcdH1cbi1cdH1cbi1cbiBcdGJhc2VfYWRkciA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKG9mX2RldiwgMCwgXHUwMDI2cmVzKTtcbiBcdGlmIChJU19FUlIoYmFzZV9hZGRyKSkge1xuIFx0XHRlcnIgPSBQVFJfRVJSKGJhc2VfYWRkcik7XG5AQCAtMjgyNSw2ICsyODA2LDI0IEBAIHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBmbWFuX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBmbWFuICpmbWFuLCBzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRib29sIGlycV9yZWdpc3RlcmVkKVxuK3tcbitcdC8qIEZyZWUgSVJRcyBmaXJzdCB3aGlsZSBmbWFuIGlzIHN0aWxsIHZhbGlkICovXG4rXHRpZiAoaXJxX3JlZ2lzdGVyZWQpIHtcbitcdFx0aWYgKGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxICE9IDApXG4rXHRcdFx0ZGV2bV9mcmVlX2lycShkZXYsIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5lcnJfaXJxLCBmbWFuKTtcbitcdFx0ZGV2bV9mcmVlX2lycShkZXYsIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5pcnEsIGZtYW4pO1xuK1x0fVxuK1xuK1x0a2ZyZWUoZm1hbi1cdTAwM2VrZXlnZW4pO1xuK1x0ZnJlZV9pbml0X3Jlc291cmNlcyhmbWFuKTtcbitcdGtmcmVlKGZtYW4tXHUwMDNlY2ZnKTtcbitcdGZtYW5fbXVyYW1fZmluaXNoKGZtYW4tXHUwMDNlbXVyYW0pO1xuK1x0a2ZyZWUoZm1hbi1cdTAwM2VzdGF0ZSk7XG4rXHRrZnJlZShmbWFuKTtcbit9XG4rXG4gc3RhdGljIGludCBmbWFuX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcbiB7XG4gXHRzdHJ1Y3QgZm1hbiAqZm1hbjtcbkBAIC0yODQwLDEyICsyODM5LDQyIEBAIHN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRlcnIgPSBmbWFuX2NvbmZpZyhmbWFuKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2VycihkZXYsIFwiJXM6IEZNYW4gY29uZmlnIGZhaWxlZFxcblwiLCBfX2Z1bmNfXyk7XG4rXHRcdC8qIGZtYW5fY29uZmlnKCkgZnJlZXMgZm1hbiBpbnRlcm5hbGx5IG9uIGFsbCBlcnJvciBwYXRocyAqL1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGlmIChmbWFuX2luaXQoZm1hbikgIT0gMCkge1xuIFx0XHRkZXZfZXJyKGRldiwgXCIlczogRk1hbiBpbml0IGZhaWxlZFxcblwiLCBfX2Z1bmNfXyk7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9ub19pcnE7XG4rXHR9XG4rXG4rXHQvKiBSZWdpc3RlciBJUlEgaGFuZGxlcnMgb25seSBhZnRlciBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS5cbitcdCAqIFRoaXMgcHJldmVudHMgdHdvIGlzc3VlczpcbitcdCAqIDEpIFByZS1pbml0IE5VTEwgZGVyZWZlcmVuY2U6IGlzX2luaXRfZG9uZShOVUxMKSByZXR1cm5zIHRydWUsXG4rXHQgKiAgICBzbyBhIHNoYXJlZC1JUlEgc3B1cmlvdXMgZmlyaW5nIGJlZm9yZSBmcG1fcmVncyBpcyBzZXQgd291bGRcbitcdCAqICAgIGRlcmVmZXJlbmNlIE5VTEwuXG4rXHQgKiAyKSBVc2UtYWZ0ZXItZnJlZSBvbiBwcm9iZSBmYWlsdXJlOiBmbWFuIHdhcyBremFsbG9jJ2QgKG5vdCBkZXZtKSxcbitcdCAqICAgIHNvIG9uIGVycm9yIHBhdGhzIGtmcmVlKGZtYW4pIHJhbiBiZWZvcmUgZGV2bV9mcmVlX2lycSwgbGVhdmluZ1xuK1x0ICogICAgYSB3aW5kb3cgd2hlcmUgdGhlIGhhbmRsZXIgY291bGQgZmlyZSB3aXRoIGEgZnJlZWQgZGV2X2lkLlxuK1x0ICogQnkgcmVnaXN0ZXJpbmcgaGVyZSwgYm90aCBwcm9ibGVtcyBhcmUgZWxpbWluYXRlZC5cbitcdCAqL1xuK1x0ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5pcnEsIGZtYW5faXJxLFxuK1x0XHRcdCAgICAgICBJUlFGX1NIQVJFRCwgXCJmbWFuXCIsIGZtYW4pO1xuK1x0aWYgKGVyciBcdTAwM2MgMCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCIlczogaXJxICVkIGFsbG9jYXRpb24gZmFpbGVkIChlcnJvciA9ICVkKVxcblwiLFxuK1x0XHRcdF9fZnVuY19fLCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuaXJxLCBlcnIpO1xuK1x0XHRnb3RvIGVycl9ub19pcnE7XG4rXHR9XG4rXG4rXHRpZiAoZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEgIT0gMCkge1xuK1x0XHRlcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgZm1hbi1cdTAwM2VkdHNfcGFyYW1zLmVycl9pcnEsXG4rXHRcdFx0XHQgICAgICAgZm1hbl9lcnJfaXJxLCBJUlFGX1NIQVJFRCxcbitcdFx0XHRcdCAgICAgICBcImZtYW4tZXJyXCIsIGZtYW4pO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4rXHRcdFx0ZGV2X2VycihkZXYsIFwiJXM6IGlycSAlZCBhbGxvY2F0aW9uIGZhaWxlZCAoZXJyb3IgPSAlZClcXG5cIixcbitcdFx0XHRcdF9fZnVuY19fLCBmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSwgZXJyKTtcbitcdFx0XHRnb3RvIGVycl9pcnE7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdGlmIChmbWFuLVx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSA9PSAwKSB7XG5AQCAtMjg3Myw2ICsyOTAyLDEyIEBAIHN0YXRpYyBpbnQgZm1hbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXG4gXHRkZXZfZGJnKGRldiwgXCJGTWFuJWQgcHJvYmVkXFxuXCIsIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5pZCk7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitlcnJfaXJxOlxuK1x0ZGV2bV9mcmVlX2lycShkZXYsIGZtYW4tXHUwMDNlZHRzX3BhcmFtcy5pcnEsIGZtYW4pO1xuK2Vycl9ub19pcnE6XG4rXHRmbWFuX2ZyZWVfcmVzb3VyY2VzKGZtYW4sIGRldiwgZmFsc2UpO1xuK1x0cmV0dXJuIGVyciA/OiAtRUlOVkFMO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmbWFuX21hdGNoW10gPSB7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5oXG5pbmRleCA3NGViNjJlYmEwZDdmZi4uNjMwZDU3YzMxNDRjYmYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uaFxuQEAgLTI4Niw2ICsyODYsNyBAQCBzdHJ1Y3QgZm1hbl9kdHNfcGFyYW1zIHtcbiBcdHN0cnVjdCByZXNvdXJjZSAqcmVzOyAgICAgICAgICAgICAgICAgICAvKiBGTWFuIG1lbW9yeSByZXNvdXJjZSAqL1xuIFx0dTggaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZNYW4gSUQgKi9cbiBcbitcdGludCBpcnE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGTWFuIElSUSAqL1xuIFx0aW50IGVycl9pcnE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZNYW4gRXJyb3IgSVJRICovXG4gXG4gXHR1MTYgY2xrX2ZyZXE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRk1hbiBjbG9jayBmcmVxIChJbiBNaHopICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5jXG5pbmRleCA2YWM3YzJiMGNiMTk5MS4uNmMyYjRmN2EwMmI4MTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uY1xuQEAgLTEyOSwzICsxMjksMTggQEAgdm9pZCBmbWFuX211cmFtX2ZyZWVfbWVtKHN0cnVjdCBtdXJhbV9pbmZvICptdXJhbSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4gXG4gXHRnZW5fcG9vbF9mcmVlKG11cmFtLVx1MDAzZXBvb2wsIGFkZHIsIHNpemUpO1xuIH1cbitcbisvKipcbisgKiBmbWFuX211cmFtX2ZpbmlzaFxuKyAqIEBtdXJhbTpcdEZNLU1VUkFNIG1vZHVsZSBwb2ludGVyLlxuKyAqXG4rICogRnJlZXMgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBNVVJBTSBwYXJ0aXRpb24uXG4rICovXG4rdm9pZCBmbWFuX211cmFtX2ZpbmlzaChzdHJ1Y3QgbXVyYW1faW5mbyAqbXVyYW0pXG4re1xuK1x0aWYgKCFtdXJhbSlcbitcdFx0cmV0dXJuO1xuK1x0aW91bm1hcChtdXJhbS1cdTAwM2V2YmFzZSk7XG4rXHRnZW5fcG9vbF9kZXN0cm95KG11cmFtLVx1MDAzZXBvb2wpO1xuK1x0a2ZyZWUobXVyYW0pO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuX211cmFtLmhcbmluZGV4IDM2NDNhZjYxYmFlMjZjLi5hNWNiNTQ0YzBmMDgyYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW5fbXVyYW0uaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbl9tdXJhbS5oXG5AQCAtMjMsNCArMjMsNiBAQCB1bnNpZ25lZCBsb25nIGZtYW5fbXVyYW1fYWxsb2Moc3RydWN0IG11cmFtX2luZm8gKm11cmFtLCBzaXplX3Qgc2l6ZSk7XG4gdm9pZCBmbWFuX211cmFtX2ZyZWVfbWVtKHN0cnVjdCBtdXJhbV9pbmZvICptdXJhbSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsXG4gXHRcdFx0IHNpemVfdCBzaXplKTtcbiBcbit2b2lkIGZtYW5fbXVyYW1fZmluaXNoKHN0cnVjdCBtdXJhbV9pbmZvICptdXJhbSk7XG4rXG4gI2VuZGlmIC8qIF9fRk1fTVVSQU1fRVhUICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMDowMDozNC4zODkyOTQyMTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjA2NjI5MDcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBGTWFuIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgdG91Y2hpbmcgYGZtYW4uY2AgYW5kIGBmbWFuX211cmFtLmNgLiBJdCBsb29rcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBhbiBpc3N1ZSB3aXRoIElSUSByZWdpc3RyYXRpb24gaW4gdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlci4gVGhlIG1haW4gdGhydXN0IGlzIG1vdmluZyB0aGUgSVJRIHJlZ2lzdHJhdGlvbiB0byB0aGUgZW5kIG9mIGBmbWFuX3Byb2JlYCB0byBwcmV2ZW50IGEgcG90ZW50aWFsIE5VTEwgZGVyZWZlcmVuY2UgYW5kIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvIGlmIHRoZSBwcm9iZSBmYWlscyBlYXJseS4gVGhhdCdzIGEgZ29vZCBwcmFjdGljZSwgZ2VuZXJhbGx5LiBUaGUgYWRkaXRpb24gb2YgYGZtYW5fZnJlZV9yZXNvdXJjZXNgIGFuZCBgZm1hbl9tdXJhbV9maW5pc2hgIGZvciBwcm9wZXIgY2xlYW51cCBvbiBwcm9iZSBmYWlsdXJlIGlzIHRoZSByaWdodCBhcHByb2FjaCB0b28uIE5vIHN1cnByaXNlcyB0aGVyZTsgcHJvcGVyIHJlc291cmNlIG1hbmFnZW1lbnQgaXMgY3JpdGljYWwuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiwgdGhvdWdoLCBpcyBob3cgKnJlbGV2YW50KiBpcyB0aGlzIGZpeCBpbiBjb250ZW1wb3JhcnkgZW52aXJvbm1lbnRzPyBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIEZyZWVzY2FsZSBGTWFuIOKAkyB0aGF0J3MgdGhlIEZyYW1lIE1hbmFnZXIuIEl0J3MgdXN1YWxseSB0aWVkIHRvIHNwZWNpZmljIEZyZWVzY2FsZSBRb3JJUSBTb0NzLCBhbmQgdGhvc2UgYXJlIHVzdWFsbHkgdmVyeSBzcGVjaWZpYyBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbnMuIFNvLCBjYW4gdGhpcyBiZSBldmVuICpleGVyY2lzZWQqIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgR0NFIG9yIFFFTVU/IEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgUUVNVSBoZXJlLiBDYW4gUUVNVSBlbXVsYXRlIHRoZSBGcmVlc2NhbGUgRk1hbj8gR2l2ZW4gdGhhdCBpdCdzIGEgaGFyZHdhcmUgY29tcG9uZW50LCBteSBpbnN0aW5jdCBpcyBcIm5vXCIsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBUaGUgcG90ZW50aWFsIGZvciB0aGlzIGNvZGUgcGF0aCB0byBldmVuIHRyaWdnZXIgbmVlZHMgdG8gYmUgdmVyaWZpZWQuIExldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBmb3IgdGhpcyBkcml2ZXIuIEknbGwgc2VlIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFuZCBpZiB0aGVyZSBhcmUgYW55IHRoYXQgYXJlIGhlbHBmdWwgaW4gUUVNVS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI2NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAwOjQ2LjQ1NTU4NzY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MTEzOTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGU0xfRk1BTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnOjI6Y29uZmlnIEZTTF9GTUFOXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGTWFuIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAwOjQ2LjU0MjcwNzg0N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2NDAzODc0MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuUmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGlkZW50aWZ5IHRoZSBkZXBlbmRlbmNpZXMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSwgYSBwcm9jZXNzLCBhIHByb2JsZW0g4oCTIHdoYXRldmVyIFwiaXRcIiBpcyDigJMgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGZvdW5kYXRpb25hbCBlbGVtZW50cyBpcyBwYXJhbW91bnQuIFdoYXQgYXJlIHRoZSBrZXkgdmFyaWFibGVzPyBUaGUgY29yZSBpbnB1dHM/IFRoZSB1bmRlcmx5aW5nIGFzc3VtcHRpb25zPyBQaW5wb2ludGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgdGhlIGVzc2VudGlhbCBmaXJzdCBzdGVwIHRvIGFueSBlZmZlY3RpdmUgYW5hbHlzaXMuIFdoZXJlIGRvIHdlIGJlZ2luIHRvIHVucmF2ZWwgY29tcGxleGl0eT9cblxuXG4iLCJJbnB1dFRva2VucyI6NDkzNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDA6NDkuMTgzMTAyMjE0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjY4NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnPTI9Y29uZmlnIEZTTF9GTUFOXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGTWFuIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gRlNMX1NPQyB8fCBBUkNIX0xBWUVSU0NBUEUgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZy01LVxcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZz0xND1jb25maWcgRFBBQV9FUlJBVFVNX0EwNTAzODVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTE1LVxcdGJvb2xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnOjE2OlxcdGRlcGVuZHMgb24gQVJNNjQgXFx1MDAyNlxcdTAwMjYgRlNMX0RQQUFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9LY29uZmlnLTE3LVxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMDowMDo0OS4yNTc3NzcxNTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTYxNTg1ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgZm1hbl9wcm9iZSBQYXRoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZm1hbl9wcm9iZWAgZnVuY3Rpb24uIFRoZSBmaXJzdCB0aGluZyBJJ20gbm90aWNpbmcgaXMgdGhhdCBpdHMgYWN0aXZhdGlvbiBkZXBlbmRzIG9uIHNwZWNpZmljIGNvbmRpdGlvbnM6IGBGU0xfU09DIHx8IEFSQ0hfTEFZRVJTQ0FQRSB8fCBDT01QSUxFX1RFU1RgLiAgVGhpcyBpcyBhIHBsYXRmb3JtIGRldmljZSwgbWVhbmluZyBpdCdzIGdvaW5nIHRvIG5lZWQgYSBkZXZpY2UgdHJlZSBub2RlIHRvIGFjdHVhbGx5IHByb2JlLiBUaGUgYmlnIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMgaG93IHdlIGNhbiBlbnN1cmUgdGhhdCBub2RlIGV4aXN0cywgZXNwZWNpYWxseSBpbiBhIHZpcnR1YWxpemVkIG9yIGZ1enppbmcgZW52aXJvbm1lbnQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgY2FuIHdlIGluamVjdCBhIGRldmljZSB0cmVlIG5vZGUgZm9yIHRoaXMgdGhpbmc/IFN5emthbGxlciBjYW4gZG8gdGhpcyBpbiBzb21lIHNpdHVhdGlvbnMgdXNpbmcgYHN5el9kZXZfcGxhdGZvcm1gIG9yIHNpbWlsYXIgcHNldWRvLXN5c2NhbGxzIGlmIHRoZXkncmUgc3VwcG9ydGVkLCBvciBieSBtb2RpZnlpbmcgdGhlIGRldmljZSB0cmVlIGRpcmVjdGx5LiBCdXQgd2FpdCBhIG1pbnV0ZSwgc3l6a2FsbGVyIGlzbid0IGdlbmVyYWxseSBkZXNpZ25lZCB0byBpbmplY3QgYXJiaXRyYXJ5IERUIG5vZGVzIHdpdGhvdXQgc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9yIHRyaWNrcyBsaWtlIGBvZl9vdmVybGF5YC4gQWxzbywgZXZlbiB3aXRoIGBzeXpfZGV2X3BsYXRmb3JtYCwgdGhlcmUncyBhIGdvb2QgY2hhbmNlIGl0IHdvbid0IHdvcmsgZm9yIGFsbCBkcml2ZXJzIGJlY2F1c2Ugb2YgcmVzb3VyY2UgZGVwZW5kZW5jaWVzLCBsaWtlIHNwZWNpZmljIG1lbW9yeSByZWdpb25zLCBJUlFzLCBvciBjbG9ja3MgdGhhdCB0aGUgZHJpdmVyIHJlcXVpcmVzLiBJdCBsb29rcyBsaWtlIHN5emthbGxlciBoYXMgc29tZSBzdXBwb3J0IGZvciBpbmplY3RpbmcgcGxhdGZvcm0gZGV2aWNlcywgYnV0IGl0J3MgbGltaXRlZCBpbiBzY29wZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgaXMgYSB3YXkgdG8gdXNlIHN5emthbGxlciB0byByZWFjaCBgZm1hbl9wcm9iZWAgaW4gdGhpcyBjYXNlLiBHaXZlbiB0aGF0IGl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIgcHJvYmUgZnVuY3Rpb24sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgZm1hbl9tYXRjaGAgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNDAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDA6NTYuODE5MzY1MzA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MzM3MDA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbWFuX21hdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM9MjgyNz1zdGF0aWMgaW50IGZtYW5fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI5MTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI5MTM6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZm1hbl9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTE0LVxcdHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYzoyOTE5Ok1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZtYW5fbWF0Y2gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yOTIxPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZtYW5fZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI5MjMtXFx0XFx0Lm5hbWUgPSBcXFwiZnNsLWZtYW5cXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYzoyOTI0OlxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGZtYW5fbWF0Y2gsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI5MjUtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDA6NTcuMTYyNzQ0MTMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkwMTI1NjIwMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIENvbnRlbnRzIG9mIGBmbWFuX21hdGNoYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gaGVyZS4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBnZXQgYSBoYW5kbGUgb24gd2hhdCBgZm1hbl9tYXRjaGAgYWN0dWFsbHkgKmlzKi4gSXMgaXQgYSB2YXJpYWJsZSwgYSBmdW5jdGlvbiwgYSBkYXRhIHN0cnVjdHVyZT8gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBrZXkuIEtub3dpbmcgaXRzIHR5cGUgd2lsbCBpbnN0YW50bHkgcHJvdmlkZSBhIGxvdCBvZiB2YWx1YWJsZSBjb250ZXh0LiBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnMsIGxpa2UgKndoYXQgZGF0YSBkb2VzIGl0IGNvbnRhaW4/KiwgKmhvdyBpcyB0aGF0IGRhdGEgc3RydWN0dXJlZD8qIGFuZCB1bHRpbWF0ZWx5LCAqaG93IGRvZXMgdGhpcyBhbGwgcmVsYXRlIHRvIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHN5c3RlbS90YXNrIGF0IGhhbmQ/KiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIGluc2lkZSBhbmQgdGhlbiBJIGNhbiBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBjb21wb25lbnQgZnVuY3Rpb25zIGFuZCBob3cgaXQgaW50ZWdyYXRlcyB3aXRoaW4gdGhlIHdpZGVyIHN5c3RlbS4gSSBrbm93IHRoYXQgdW5kZXJzdGFuZGluZyBgZm1hbl9tYXRjaGAgaXMgZ29pbmcgdG8gYmUgY2VudHJhbCB0byBkZWNpcGhlcmluZyB0aGlzIHdob2xlIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzA5LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDE6MTYuMTc1MzA5NzgxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI0NDUzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnNsLWZtYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYz0yOTIxPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZtYW5fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTIyLVxcdC5kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI5MjM6XFx0XFx0Lm5hbWUgPSBcXFwiZnNsLWZtYW5cXFwiLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yOTI0LVxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IGZtYW5fbWF0Y2gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAxOjE2LjMxNzc2MzM5NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODA3Mzg4NzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgRm9jdXMqKlxuXG5BbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHRvIHByb2Nlc3MgdGhlIHRleHQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIkxldCdzIHJlYWQgYGZtYW5fbWF0Y2hgLlwiIEknbSBub3QgZ29pbmcgdG8gc3BlbmQgdGltZSB3b25kZXJpbmcgKndoYXQqIGBmbWFuX21hdGNoYCBpcyDigJMgSSBjYW4gZXh0cmFwb2xhdGUgZnJvbSB0aGUgY29udGV4dCB0aGF0IGl0IHdpbGwgYmUgYSB1c2VmdWwgaW5wdXQgZm9yIHRoaXMgZXZhbHVhdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gaXRzIHN0cnVjdHVyZSBhbmQgY29udGVudC4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgcXVpY2tseSBzY2FubmluZyB0aGUga2V5IGVsZW1lbnRzIHRvIGZvcm0gYW4gaW5mb3JtZWQgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcyNCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAxOjI1LjEyNTE1NDMxNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTYxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5MTA6XFx0XFx0cmV0dXJuIGVyciA/OiAtRUlOVkFMO1xcbjI5MTE6XFx0fVxcbjI5MTI6XFx0XFxuMjkxMzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmbWFuX21hdGNoW10gPSB7XFxuMjkxNDpcXHRcXHR7XFxuMjkxNTpcXHRcXHRcXHQuY29tcGF0aWJsZSA9IFxcXCJmc2wsZm1hblxcXCJ9LFxcbjI5MTY6XFx0XFx0e31cXG4yOTE3OlxcdH07XFxuMjkxODpcXHRcXG4yOTE5OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZtYW5fbWF0Y2gpO1xcbjI5MjA6XFx0XFxuMjkyMTpcXHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmbWFuX2RyaXZlciA9IHtcXG4yOTIyOlxcdFxcdC5kcml2ZXIgPSB7XFxuMjkyMzpcXHRcXHRcXHQubmFtZSA9IFxcXCJmc2wtZm1hblxcXCIsXFxuMjkyNDpcXHRcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBmbWFuX21hdGNoLFxcbjI5MjU6XFx0XFx0fSxcXG4yOTI2OlxcdFxcdC5wcm9iZSA9IGZtYW5fcHJvYmUsXFxuMjkyNzpcXHR9O1xcbjI5Mjg6XFx0XFxuMjkyOTpcXHRzdGF0aWMgaW50IF9faW5pdCBmbWFuX2xvYWQodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDE6MjUuMTI1MzUyODY1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTExOTEwMjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIGZvciBGdXp6aW5nIFwiZnNsLGZtYW5cIiBDb2RlKipcblxuT2theSwgc28gSSBzZWUgYSBtYXRjaDogXCJmc2wsZm1hbi5cIiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiB0aGlzIGNvZGUgYmUgcmVhY2hlZCwgYW5kIG1lYW5pbmdmdWxseSBmdXp6ZWQsIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFBsYXRmb3JtIGRyaXZlcnMsIGVzcGVjaWFsbHkgb25lcyB0aGF0IHRvdWNoIHNwZWNpZmljIGhhcmR3YXJlIHJlc291cmNlcywgbGlrZSBtZW1vcnktbWFwcGVkIEkvTyBvciBwYXJ0aWN1bGFyIGNsb2NrcywgYXJlIHR5cGljYWxseSBhIHBhaW4gdG8gZnV6eiB3aXRob3V0IGVpdGhlciBhbiBleHRyZW1lbHkgc3BlY2lhbGl6ZWQgZW11bGF0b3Igb3Igc29tZSB0cmlja2VyeSBpbiBTeXprYWxsZXIgdG8gaW5qZWN0IHRob3NlIGRlcGVuZGVuY2llcy5cblxuQnV0IHdhaXQsIFN5emthbGxlciAqZG9lcyogaGF2ZSBgc3l6X2Rldl9wbGF0Zm9ybWAsIHJpZ2h0PyBUaGF0IGNvdWxkIGJlIGEgd2F5IHRvIGNyZWF0ZSB0aGUgcGxhdGZvcm0gZGV2aWNlcyB3ZSBuZWVkLiBMZXQgbWUgc2VlLi4uIHRoZSBgZm1hbl9wcm9iZWAgZnVuY3Rpb24gY2FsbHMgYHJlYWRfZHRzX25vZGVgLCBhbmQgdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEl0IGNhbGxzIGBkZXZtX3BsYXRmb3JtX2dldF9hbmRfaW9yZW1hcF9yZXNvdXJjZWAsIGBwbGF0Zm9ybV9nZXRfaXJxYCBhIGNvdXBsZSBvZiB0aW1lcywgYW5kIGBvZl9jbGtfZ2V0YC4gQW5kIGNydWNpYWxseSwgaXQgdXNlcyBgb2ZfcGFyc2VfcGhhbmRsZWA6XG5cbmBgYGNcbm11cmFtX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG9mX2Rldi1cdTAwM2VkZXYub2Zfbm9kZSwgXCJmc2wsZm1hbi1tdXJhbVwiLCAwKTtcbmBgYFxuXG5BaCwgcmlnaHQuIElmIGBtdXJhbV9ub2RlYCBpc24ndCBmb3VuZCwgaXQgcmV0dXJucyBhbiBlcnJvci4gVGhhdCBtZWFucyBgb2ZfcGFyc2VfcGhhbmRsZWAgaXMgbG9va2luZyBmb3IgYSBkZXZpY2UgdHJlZSBub2RlIHdpdGggYSB2ZXJ5IHNwZWNpZmljIHByb3BlcnR5LCBcImZzbCxmbWFuLW11cmFtLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYHJlYWRfZHRzX25vZGVgIGZ1bmN0aW9uIG1vcmUgY29tcGxldGVseS4gVGhpcyBpcyBrZXkuIExldCdzIHNlZSBob3cgdGhhdCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE2OSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAyOjE2LjYzNzI2NDg2N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3NjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3NjA6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogY291bGQgbm90IGZpbmQgTVVSQU0gbm9kZVxcXFxuXFxcIixcXG4yNzYxOlxcdFxcdFxcdFxcdF9fZnVuY19fKTtcXG4yNzYyOlxcdFxcdFxcdGdvdG8gZm1hbl9mcmVlO1xcbjI3NjM6XFx0XFx0fVxcbjI3NjQ6XFx0XFxuMjc2NTpcXHRcXHRlcnIgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG11cmFtX25vZGUsIDAsXFxuMjc2NjpcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLm11cmFtX3Jlcyk7XFxuMjc2NzpcXHRcXHRpZiAoZXJyKSB7XFxuMjc2ODpcXHRcXHRcXHRvZl9ub2RlX3B1dChtdXJhbV9ub2RlKTtcXG4yNzY5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoKSA9ICVkXFxcXG5cXFwiLFxcbjI3NzA6XFx0XFx0XFx0XFx0X19mdW5jX18sIGVycik7XFxuMjc3MTpcXHRcXHRcXHRnb3RvIGZtYW5fZnJlZTtcXG4yNzcyOlxcdFxcdH1cXG4yNzczOlxcdFxcbjI3NzQ6XFx0XFx0b2Zfbm9kZV9wdXQobXVyYW1fbm9kZSk7XFxuMjc3NTpcXHRcXG4yNzc2OlxcdFxcdGJhc2VfYWRkciA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKG9mX2RldiwgMCwgXFx1MDAyNnJlcyk7XFxuMjc3NzpcXHRcXHRpZiAoSVNfRVJSKGJhc2VfYWRkcikpIHtcXG4yNzc4OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIoYmFzZV9hZGRyKTtcXG4yNzc5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IGRldm1faW9yZW1hcCgpIGZhaWxlZFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbjI3ODA6XFx0XFx0XFx0Z290byBmbWFuX2ZyZWU7XFxuMjc4MTpcXHRcXHR9XFxuMjc4MjpcXHRcXG4yNzgzOlxcdFxcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuYmFzZV9hZGRyID0gYmFzZV9hZGRyO1xcbjI3ODQ6XFx0XFx0Zm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5yZXMgPSByZXM7XFxuMjc4NTpcXHRcXG4yNzg2OlxcdFxcdGZtYW4tXFx1MDAzZWRldiA9IFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldjtcXG4yNzg3OlxcdFxcbjI3ODg6XFx0XFx0ZXJyID0gb2ZfcGxhdGZvcm1fcG9wdWxhdGUoZm1fbm9kZSwgTlVMTCwgTlVMTCwgXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2KTtcXG4yNzg5OlxcdFxcdGlmIChlcnIpIHtcXG4yNzkwOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IG9mX3BsYXRmb3JtX3BvcHVsYXRlKCkgZmFpbGVkXFxcXG5cXFwiLFxcbjI3OTE6XFx0XFx0XFx0XFx0X19mdW5jX18pO1xcbjI3OTI6XFx0XFx0XFx0Z290byBmbWFuX2ZyZWU7XFxuMjc5MzpcXHRcXHR9XFxuMjc5NDpcXHRcXG4yNzk1OlxcdCNpZmRlZiBDT05GSUdfRFBBQV9FUlJBVFVNX0EwNTAzODVcXG4yNzk2OlxcdFxcdGZtYW5faGFzX2Vycl9hMDUwMzg1ID1cXG4yNzk3OlxcdFxcdFxcdG9mX3Byb3BlcnR5X3JlYWRfYm9vbChmbV9ub2RlLCBcXFwiZnNsLGVycmF0dW0tYTA1MDM4NVxcXCIpO1xcbjI3OTg6XFx0I2VuZGlmXFxuMjc5OTpcXHRcXG4yODAwOlxcdFxcdHJldHVybiBmbWFuO1xcbjI4MDE6XFx0XFxuMjgwMjpcXHRmbWFuX25vZGVfcHV0OlxcbjI4MDM6XFx0XFx0b2Zfbm9kZV9wdXQoZm1fbm9kZSk7XFxuMjgwNDpcXHRmbWFuX2ZyZWU6XFxuMjgwNTpcXHRcXHRrZnJlZShmbWFuKTtcXG4yODA2OlxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuMjgwNzpcXHR9XFxuMjgwODpcXHRcXG4yODA5OlxcdHN0YXRpYyB2b2lkIGZtYW5fZnJlZV9yZXNvdXJjZXMoc3RydWN0IGZtYW4gKmZtYW4sIHN0cnVjdCBkZXZpY2UgKmRldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDI6MTYuNjM3NDIzNjA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjY0MDM1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBmc2wsZm1hbi1tdXJhbSBSZXF1aXJlbWVudCBhbmQgU3l6a2FsbGVyJ3MgQ2FwYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQncyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGl0IG5lZWRzIHRoZSBgZnNsLGZtYW4tbXVyYW1gIHBoYW5kbGUgaW4gdGhlIGRldmljZSB0cmVlLiBUaGF0J3MgdGhlIGtleSByZXF1aXJlbWVudCBoZXJlLiBNeSBmaXJzdCB0aG91Z2h0IGlzLCBjYW4gU3l6a2FsbGVyIGhhbmRsZSB0aGlzPyBSaWdodCBub3csIGl0IGRvZXNuJ3Qgc2VlbSBsaWtlIGl0IGNhbiBkaXJlY3RseSBpbmplY3QgYXJiaXRyYXJ5IGRldmljZSB0cmVlIHByb3BlcnRpZXMsIGVzcGVjaWFsbHkgc29tZXRoaW5nIGFzIHNwZWNpZmljIGFzIGBmc2wsZm1hbi1tdXJhbWAuIFRoaXMgaXMgYSBodXJkbGUuXG5cbkEgcXVpY2sgcGF1c2UgZm9yIHJlZmxlY3Rpb246IGFtIEkgZXZlbiAqYWJsZSogdG8gdHJpZ2dlciB0aGlzIGNvZGUgcGF0aCB3aXRoIFN5emthbGxlciwgZ2l2ZW4gdGhpcyBjb25zdHJhaW50PyBUaGF0J3MgYSBmdW5kYW1lbnRhbCBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyLiBJcyB0aGVyZSBhbnkgZXhpc3RpbmcgbWVjaGFuaXNtIHRoYXQgSSBjYW4gbGV2ZXJhZ2UgdG8gY2FsbCBgZm1hbl9wcm9iZWA/IFRoaXMgaXMgY3JpdGljYWwuXG5cbkFscmlnaHQsIGlmIFN5emthbGxlciBvZmZlcnMgYHN5el9kZXZfcGxhdGZvcm1gLCBJIGNvdWxkIHBvdGVudGlhbGx5IGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZS4gQnV0IHRoYXQgYnkgaXRzZWxmIGlzbid0IGVub3VnaDsgdGhlIGNydWNpYWwgYG9mX25vZGVgIHByb3BlcnR5IHdvbid0IGJlIGNvcnJlY3RseSBwb3B1bGF0ZWQsIHBhcnRpY3VsYXJseSB3aXRoIHRob3NlIHJlcXVpcmVkIGBmc2wsZm1hbi1tdXJhbWAgcHJvcGVydGllcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHByb3BlcnR5IGlzIHBvcHVsYXRlZCwgdGhpcyBpcyBhIG5vbi1zdGFydGVyIG90aGVyd2lzZS5cblxuU28sIEkgbmVlZCB0byBjaGVjayB0byBkZXRlcm1pbmUgaWYgYG9mX3BhcnNlX3BoYW5kbGVgIGlzIGNhbGxlZCBzb21ld2hlcmUgYWxvbmcgdGhlIHdheS4gVW5kZXJzdGFuZGluZyBob3cgcGhhbmRsZXMgYXJlIHBhcnNlZCBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmQgaG93IEkgY291bGQgcG90ZW50aWFsbHkgdXNlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NjU2LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDI6MjEuMTYzODMwNjE3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc0MDpcXHRcXHRcXHRcXHRfX2Z1bmNfXywgZm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5pZCk7XFxuMjc0MTpcXHRcXHRcXHRnb3RvIGZtYW5fbm9kZV9wdXQ7XFxuMjc0MjpcXHRcXHR9XFxuMjc0MzpcXHRcXHQvKiBSb3VuZGluZyB0byBNSHogKi9cXG4yNzQ0OlxcdFxcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuY2xrX2ZyZXEgPSBESVZfUk9VTkRfVVAoY2xrX3JhdGUsIDEwMDAwMDApO1xcbjI3NDU6XFx0XFxuMjc0NjpcXHRcXHRlcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShmbV9ub2RlLCBcXFwiZnNsLHFtYW4tY2hhbm5lbC1yYW5nZVxcXCIsXFxuMjc0NzpcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnJhbmdlWzBdLCAyKTtcXG4yNzQ4OlxcdFxcdGlmIChlcnIpIHtcXG4yNzQ5OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IGZhaWxlZCB0byByZWFkIGZzbCxxbWFuLWNoYW5uZWwtcmFuZ2UgZm9yICVwT0ZcXFxcblxcXCIsXFxuMjc1MDpcXHRcXHRcXHRcXHRfX2Z1bmNfXywgZm1fbm9kZSk7XFxuMjc1MTpcXHRcXHRcXHRnb3RvIGZtYW5fbm9kZV9wdXQ7XFxuMjc1MjpcXHRcXHR9XFxuMjc1MzpcXHRcXHRmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLnFtYW5fY2hhbm5lbF9iYXNlID0gcmFuZ2VbMF07XFxuMjc1NDpcXHRcXHRmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLm51bV9vZl9xbWFuX2NoYW5uZWxzID0gcmFuZ2VbMV07XFxuMjc1NTpcXHRcXG4yNzU2OlxcdFxcdC8qIEdldCB0aGUgTVVSQU0gYmFzZSBhZGRyZXNzIGFuZCBzaXplICovXFxuMjc1NzpcXHRcXHRtdXJhbV9ub2RlID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKGZtX25vZGUsIGZtYW5fbXVyYW1fbWF0Y2gpO1xcbjI3NTg6XFx0XFx0aWYgKCFtdXJhbV9ub2RlKSB7XFxuMjc1OTpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMDowMjoyMS4xNjQwNzM1ODdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUwMTMwNTA5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIE5vZGUgTWF0Y2hpbmcgRnVuY3Rpb24qKlxuXG5SaWdodCwgc28gaXQncyBjYWxsaW5nIGBvZl9maW5kX21hdGNoaW5nX25vZGUoZm1fbm9kZSwgZm1hbl9tdXJhbV9tYXRjaClgLiBJbnRlcmVzdGluZy4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhlIGZ1bmN0aW9uIGNhbGwsIHNvIEkga25vdyB3ZSdyZSBsb29raW5nIGZvciBhIG1hdGNoaW5nIG5vZGUsIGxpa2VseSB3aXRoaW4gYSBzcGVjaWZpYyBkYXRhIHN0cnVjdHVyZSBiYXNlZCBvbiB0aGUgXCJvZlwiIHByZWZpeC4gQnV0IHRoZSBrZXkgaGVyZSBpcyB0aGF0IHNlY29uZCBhcmd1bWVudDogYGZtYW5fbXVyYW1fbWF0Y2hgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYGZtYW5fbXVyYW1fbWF0Y2hgIGFjdHVhbGx5ICppcyouIElzIGl0IGEgc2VhcmNoIGNyaXRlcmlhIG9iamVjdD8gQSBzcGVjaWZpYyBrZXk/IFdoYXQncyB0aGUgY29udGV4dD8gVGhpcyBmdW5jdGlvbidzIGJlaGF2aW9yIGNvbXBsZXRlbHkgaGluZ2VzIG9uIGhvdyB0aGF0IHNlY29uZCBhcmd1bWVudCBpcyBjb25zdHJ1Y3RlZCBhbmQgd2hhdCBpdCByZXByZXNlbnRzLiBJIG5lZWQgdG8gdHJhY2UgaXQgYmFjayBhbmQgZmlndXJlIG91dCBpdHMgdHlwZSwgc3RydWN0dXJlLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgd2hhdCBpdOKAmXMgaW50ZW5kZWQgdG8gbWF0Y2ggd2l0aGluIGBmbV9ub2RlYC4gVGltZSB0byBnbyBzcGVsdW5raW5nLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NDQsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEwOjAzOjA2LjE3NzEyNzY1N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MTM4ODUwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmbWFuX211cmFtX21hdGNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmM9MjYwNj1zdGF0aWMgaXJxcmV0dXJuX3QgZm1hbl9pcnEoaW50IGlycSwgdm9pZCAqaGFuZGxlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI2ODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI2ODQ6c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZm1hbl9tdXJhbV9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yNjg1LVxcdHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yNjg4LX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI2ODk6TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZm1hbl9tdXJhbV9tYXRjaCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jLTI2OTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jPTI2OTE9c3RhdGljIHN0cnVjdCBmbWFuICpyZWFkX2R0c19ub2RlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL2ZtYW4uYy0yNzU2LVxcdC8qIEdldCB0aGUgTVVSQU0gYmFzZSBhZGRyZXNzIGFuZCBzaXplICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jOjI3NTc6XFx0bXVyYW1fbm9kZSA9IG9mX2ZpbmRfbWF0Y2hpbmdfbm9kZShmbV9ub2RlLCBmbWFuX211cmFtX21hdGNoKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMtMjc1OC1cXHRpZiAoIW11cmFtX25vZGUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDM6MDcuNTQ4NTIxODg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjYxODkwMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERldmljZSBUcmVlIE5vZGUgTWF0Y2hpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGV2aWNlIHRyZWUuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gaG93IGl0IGlkZW50aWZpZXMgYSBtYXRjaGluZyBub2RlLiBJIHNlZSB0aGF0IGl0J3MgcmVseWluZyBvbiBhIHNlYXJjaCB3aXRoaW4gdGhlIHRyZWUuIE5vdywgc29tZXRoaW5nIGltbWVkaWF0ZWx5IGp1bXBzIG91dDogaWYgU3l6a2FsbGVyIHVzZXMgYHN5el9kZXZfcGxhdGZvcm1gIHRvIGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSwgdGhlbiB0aGF0IGRldmljZSAqd29uJ3QqIGhhdmUgYW4gYG9mX25vZGVgIGFzc29jaWF0ZWQgd2l0aCBpdC4gVGhpcyBtYWtlcyBwZXJmZWN0IHNlbnNlOyBgc3l6X2Rldl9wbGF0Zm9ybWAgaXMgYWJvdXQgYSBzaW1wbGlmaWVkIHNldHVwLiBUaHVzLCBgb2ZfZGV2LVx1MDAzZWRldi5vZl9ub2RlYCB3aWxsIGluZXZpdGFibHkgYmUgYE5VTExgLlxuXG5BaGEsIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIHNlZSBhIGxpbmU6IGBmbV9ub2RlID0gb2ZfZGV2LVx1MDAzZWRldi5vZl9ub2RlO2AuIEJ1dCBpZiB0aGF0IGBvZl9ub2RlYCBpcyBpbmRlZWQgTlVMTCwgYXMgSSd2ZSBhbHJlYWR5IHJlYXNvbmVkLCB0aGUgc3Vic2VxdWVudCBjYWxsIHRvIGBvZl9wcm9wZXJ0eV9yZWFkX3UzMmAgaXMgZ29pbmcgdG8gZmFpbC4gVGhhdCdzIGEgY2xhc3NpYyBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2FpdGluZyB0byBoYXBwZW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIGludGVuZGVkIGJlaGF2aW9yIGlzIGluIHRoaXMgbnVsbCBjYXNlLiBBcmUgd2UgZXhwZWN0aW5nIGl0PyBJcyBpdCBhbiBlcnJvcj8gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHByb2JhYmx5IHdoZXJlIGEgYnVnIGx1cmtzLiBUaW1lIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gYW5kIHNlZSBpZiB0aGlzIGlzIGhhbmRsZWQgY29ycmVjdGx5IG9yIGlmIHRoZXJlJ3MgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNDUsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDM6MTIuMTE0NzEzODk1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY5MDpcXHRcXG4yNjkxOlxcdHN0YXRpYyBzdHJ1Y3QgZm1hbiAqcmVhZF9kdHNfbm9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZl9kZXYpXFxuMjY5MjpcXHR7XFxuMjY5MzpcXHRcXHRzdHJ1Y3QgZm1hbiAqZm1hbjtcXG4yNjk0OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqZm1fbm9kZSwgKm11cmFtX25vZGU7XFxuMjY5NTpcXHRcXHR2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjtcXG4yNjk2OlxcdFxcdHN0cnVjdCByZXNvdXJjZSAqcmVzO1xcbjI2OTc6XFx0XFx0dTMyIHZhbCwgcmFuZ2VbMl07XFxuMjY5ODpcXHRcXHRpbnQgZXJyO1xcbjI2OTk6XFx0XFx0c3RydWN0IGNsayAqY2xrO1xcbjI3MDA6XFx0XFx0dTMyIGNsa19yYXRlO1xcbjI3MDE6XFx0XFxuMjcwMjpcXHRcXHRmbWFuID0ga3phbGxvY19vYmooKmZtYW4pO1xcbjI3MDM6XFx0XFx0aWYgKCFmbWFuKVxcbjI3MDQ6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuMjcwNTpcXHRcXG4yNzA2OlxcdFxcdGZtX25vZGUgPSBvZl9ub2RlX2dldChvZl9kZXYtXFx1MDAzZWRldi5vZl9ub2RlKTtcXG4yNzA3OlxcdFxcbjI3MDg6XFx0XFx0ZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZm1fbm9kZSwgXFxcImNlbGwtaW5kZXhcXFwiLCBcXHUwMDI2dmFsKTtcXG4yNzA5OlxcdFxcdGlmIChlcnIpIHtcXG4yNzEwOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNm9mX2Rldi1cXHUwMDNlZGV2LCBcXFwiJXM6IGZhaWxlZCB0byByZWFkIGNlbGwtaW5kZXggZm9yICVwT0ZcXFxcblxcXCIsXFxuMjcxMTpcXHRcXHRcXHRcXHRfX2Z1bmNfXywgZm1fbm9kZSk7XFxuMjcxMjpcXHRcXHRcXHRnb3RvIGZtYW5fbm9kZV9wdXQ7XFxuMjcxMzpcXHRcXHR9XFxuMjcxNDpcXHRcXHRmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmlkID0gKHU4KXZhbDtcXG4yNzE1OlxcdFxcbjI3MTY6XFx0XFx0LyogR2V0IHRoZSBGTSBpbnRlcnJ1cHQgKi9cXG4yNzE3OlxcdFxcdGVyciA9IHBsYXRmb3JtX2dldF9pcnEob2ZfZGV2LCAwKTtcXG4yNzE4OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI3MTk6XFx0XFx0XFx0Z290byBmbWFuX25vZGVfcHV0O1xcbjI3MjA6XFx0XFx0Zm1hbi1cXHUwMDNlZHRzX3BhcmFtcy5pcnEgPSBlcnI7XFxuMjcyMTpcXHRcXG4yNzIyOlxcdFxcdC8qIEdldCB0aGUgRk0gZXJyb3IgaW50ZXJydXB0ICovXFxuMjcyMzpcXHRcXHRlcnIgPSBwbGF0Zm9ybV9nZXRfaXJxKG9mX2RldiwgMSk7XFxuMjcyNDpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4yNzI1OlxcdFxcdFxcdGdvdG8gZm1hbl9ub2RlX3B1dDtcXG4yNzI2OlxcdFxcdGZtYW4tXFx1MDAzZWR0c19wYXJhbXMuZXJyX2lycSA9IGVycjtcXG4yNzI3OlxcdFxcbjI3Mjg6XFx0XFx0Y2xrID0gb2ZfY2xrX2dldChmbV9ub2RlLCAwKTtcXG4yNzI5OlxcdFxcdGlmIChJU19FUlIoY2xrKSkge1xcbjI3MzA6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihjbGspO1xcbjI3MzE6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2ZfZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogRmFpbGVkIHRvIGdldCBGTSVkIGNsb2NrIHN0cnVjdHVyZVxcXFxuXFxcIixcXG4yNzMyOlxcdFxcdFxcdFxcdF9fZnVuY19fLCBmbWFuLVxcdTAwM2VkdHNfcGFyYW1zLmlkKTtcXG4yNzMzOlxcdFxcdFxcdGdvdG8gZm1hbl9ub2RlX3B1dDtcXG4yNzM0OlxcdFxcdH1cXG4yNzM1OlxcdFxcbjI3MzY6XFx0XFx0Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTtcXG4yNzM3OlxcdFxcdGlmICghY2xrX3JhdGUpIHtcXG4yNzM4OlxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuMjczOTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZvZl9kZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBGYWlsZWQgdG8gZGV0ZXJtaW5lIEZNJWQgY2xvY2sgcmF0ZVxcXFxuXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTA6MDM6MTIuMTE0OTM0ODM1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMDQ4MzE1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBBcHBsaWNhYmlsaXR5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIElmIGBmbV9ub2RlYCBpcyBudWxsLCBgb2ZfcHJvcGVydHlfcmVhZF91MzJgIGltbWVkaWF0ZWx5IHJldHVybnMgYC1FSU5WQUxgLiBDb25zZXF1ZW50bHksIGByZWFkX2R0c19ub2RlYCB3aWxsIGZhaWwsIGFuZCB0aGlzIGRyaXZlciwgdGhlIEZyZWVzY2FsZSBGTWFuIGRyaXZlciwgd29uJ3QgcHJvYmUgd2l0aG91dCBhIHZhbGlkIGRldmljZSB0cmVlIG5vZGUuIEdpdmVuIHRoYXQgdGhpcyBpcyBhIEZyZWVzY2FsZSBkcml2ZXIsIGl0J3MgdmlydHVhbGx5IGltcG9zc2libGUgdG8gZmluZCBpdCBwcmVzZW50IGluIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VIHVubGVzcyB3ZSBhcmUgc3BlY2lmaWNhbGx5IGVtdWxhdGluZyBhIEZyZWVzY2FsZSBTeXN0ZW0gb24gQ2hpcCAoU29DKSwgbGlrZSBhIFFvcklRLlxuXG5Ob3csIHN5emthbGxlciwgd2hpY2ggaXMgY3J1Y2lhbCBmb3Igb3VyIGZ1enppbmcgZWZmb3J0cywgZG9lc24ndCBlbXVsYXRlIEZyZWVzY2FsZSBTb0NzLiBJdCB0eXBpY2FsbHkgcnVucyBvbiBnZW5lcmljIGFyY2hpdGVjdHVyZXMgbGlrZSB4ODZfNjQgYW5kIGFybTY0LiBCdXQgd2FpdCwgaXQgZG9lcyBzdXBwb3J0IGFybTY0LiBDb3VsZCBpdCBydW4gb24gYSBGcmVlc2NhbGUgU29DIGVtdWxhdG9yPyBRRU1VIGRvZXMgaGF2ZSAqc29tZSogc3VwcG9ydCBmb3IgRnJlZXNjYWxlIGJvYXJkcywgbGlrZSBgbXBjODU0NGRzYCwgYGU1MDBgLCBldGMuIEJ1dCBkb2VzIHN5emthbGxlciBhY3R1YWxseSB1c2UgdGhlc2UgYm9hcmQgZW11bGF0aW9ucz8gVXN1YWxseSwgc3l6a2FsbGVyIG9wdHMgZm9yIGB2aXJ0YCBtYWNoaW5lcyBmb3IgYXJtNjQgYW5kIGBwY2Agb3IgYHEzNWAgZm9yIHg4Nl82NCwgd2hpY2ggaXMgaG93IHdlIGNvbmZpZ3VyZWQgaXQuIFRoZSBgdmlydGAgbWFjaGluZSBpcyB1bmxpa2VseSB0byBoYXZlIGEgRnJlZXNjYWxlIEZNYW4uXG5cblRoZXJlZm9yZSwgdW5kZXIgc3RhbmRhcmQgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb25zLCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgaXNuJ3QgYW5vdGhlciBlbnRyeSBwb2ludCB0byBgZm1hbl9wcm9iZWAgdGhhdCBJJ20gbWlzc2luZy4gTm9wZSwgaXQncyBhIHBsYXRmb3JtIGRyaXZlciwgZGVwZW5kZW50IG9uIGEgc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZS4gVGhlcmVmb3JlLCB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyBuZWVkcyB0byBiZSBgZmFsc2VgIGhlcmUsIGFzIHRoZSBwcm9iYWJpbGl0eSBvZiByZWFjaGluZyB0aGlzIGNvZGUgcGF0aCBpcyBlZmZlY3RpdmVseSB6ZXJvLlxuXG5MZXQgbWUgcXVpY2tseSByZXZpZXcgdGhlIHBhdGNoIGFnYWluIHRvIGVuc3VyZSB0aGF0IEkgZGlkbid0IG1pc3Mgc29tZXRoaW5nLiBPa2F5LCB0aGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZtYW5fcHJvYmVgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBJUlEgcmVnaXN0cmF0aW9uIGJlZm9yZSBpbml0aWFsaXphdGlvbiwgcG90ZW50aWFsbHkgY2F1c2luZyBhIE5VTEwgZGVyZWZlcmVuY2Ugb3IgdXNlLWFmdGVyLWZyZWUuIFRoZSBidWcgaXMgdmFsaWQgYW5kIGltcG9ydGFudCwgYnV0IHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGRyaXZlciBpbmFjY2Vzc2libGUgaW4gb3VyIGZ1enppbmcgZW52aXJvbm1lbnQuIFRodXMsIEknbSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZzogZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ5MSwiT3V0cHV0VG9rZW5zIjoxMTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMDowMzoyMC4xMTk3NzExNDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIEZNYW4gKEZyYW1lIE1hbmFnZXIpIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyAoJ2ZzbCxmbWFuJyBhbmQgJ2ZzbCxmbWFuLW11cmFtJykgdG8gcHJvYmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIGFyZSBub3QgcHJlc2VudCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUncyAndmlydCcgbWFjaGluZSB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgRnJlZXNjYWxlIEZNYW4gKEZyYW1lIE1hbmFnZXIpIGRyaXZlciwgd2hpY2ggaXMgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyAoJ2ZzbCxmbWFuJyBhbmQgJ2ZzbCxmbWFuLW11cmFtJykgdG8gcHJvYmUuIFRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIGFyZSBub3QgcHJlc2VudCBpbiBnZW5lcmljIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUncyAndmlydCcgbWFjaGluZSB1c2VkIGJ5IHN5emthbGxlci4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9tb6q[1] Phase: Running StartedAt: 2026-07-03 10:03:31 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9tb6q[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-03 10:03:31 +0000 UTC FinishedAt: 2026-07-03 10:04:44 +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,}