Name: series-workflowxczpr Phase: Failed StartedAt: 2026-07-30 06:55:34 +0000 UTC FinishedAt: 2026-07-30 07:12:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxczpr[0] Phase: Succeeded StartedAt: 2026-07-30 06:55:34 +0000 UTC FinishedAt: 2026-07-30 07:11:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxczpr[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 06:55:34 +0000 UTC FinishedAt: 2026-07-30 07:11:57 +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+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBRdWFsY29tbSBhdGgxMWsgV2ktRmkgZHJpdmVyJiMzOTtzIEFIQiBidXMgYXR0YWNobWVudCAoYWhiLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIFdDTjY3NTApIGFuZCBjb3JyZXNwb25kaW5nIERldmljZSBUcmVlIG5vZGVzIChpbmNsdWRpbmcgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHJlbW90ZXByb2MgaGFuZGxlcykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdkOWZhZWZhN2ZiMGIxMmU3MDQwNGQ2YWVhNDk5MmE4MGZmZjY1OGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAwNzoxMDo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuaW5kZXggMWUxZGVhNDg1NzYwYi4uZWM1YmY1YzlmZDc5MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbkBAIC00MzEsMzYgJiM0Mzs0MzEsNDQgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9pbml0X3FtaV9jZV9jb25maWcoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdGFiLVx1MDAzZXFtaS5zZXJ2aWNlX2luc19pZCA9IGFiLVx1MDAzZWh3X3BhcmFtcy5xbWlfc2VydmljZV9pbnNfaWQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycClcbiB7XG4tXHRpbnQgaSwgajtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4mIzQzO1x0aW50IGo7XG4gXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaiYjNDM7JiM0MzspXG4tXHRcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfZ3JwLVx1MDAzZWlycXNbal1dLCBpcnFfZ3JwKTtcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGomIzQzOyYjNDM7KVxuJiM0MztcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfZ3JwLVx1MDAzZWlycXNbal1dLCBpcnFfZ3JwKTtcbiBcbi1cdFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpKTtcbi1cdFx0ZnJlZV9uZXRkZXYoaXJxX2dycC1cdTAwM2VuYXBpX25kZXYpO1xuLVx0fVxuJiM0MztcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4mIzQzO1x0ZnJlZV9uZXRkZXYoaXJxX2dycC1cdTAwM2VuYXBpX25kZXYpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuLVx0aW50IGlycV9pZHg7XG4gXHRpbnQgaTtcbiBcbi1cdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuLVx0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xuJiM0Mzt9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYi1cdTAwM2Vod19wYXJhbXMuY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9jZV9pcnFzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIGludCBtYXhfaWR4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlycV9pZHgsIGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1heF9pZHg7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChhdGgxMWtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpcnFfaWR4ID0gQVRIMTFLX0lSUV9DRTBfT0ZGU0VUICYjNDM7IGk7XG4gXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0sIFx1MDAyNmFiLVx1MDAzZWNlLmNlX3BpcGVbaV0pO1xuIFx0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcbiYjNDM7XHRcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XG4gXG4mIzQzO1x0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4gXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XG4gfVxuIFxuQEAgLTUyNCwyMCAmIzQzOzUzMiwyNSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKVxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIHtcbiBcdHN0cnVjdCBhdGgxMWtfaHdfcGFyYW1zICpodyA9IFx1MDAyNmFiLVx1MDAzZWh3X3BhcmFtcztcbiYjNDM7XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwO1xuIFx0aW50IGksIGo7XG4gXHRpbnQgaXJxO1xuIFx0aW50IHJldDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4gXHRcdHUzMiBudW1faXJxID0gMDtcbiBcbiYjNDM7XHRcdGlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiYjNDM7XG4gXHRcdGlycV9ncnAtXHUwMDNlYWIgPSBhYjtcbiBcdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuIFxuIFx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbi1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdGlmICghaXJxX2dycC1cdTAwM2VuYXBpX25kZXYpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gMDtcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdG5ldGlmX25hcGlfYWRkKGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2LCBcdTAwMjZpcnFfZ3JwLVx1MDAzZW5hcGksXG4gXHRcdFx0ICAgICAgIGF0aDExa19haGJfZXh0X2dycF9uYXBpX3BvbGwpO1xuQEAgLTU4NSwxNCAmIzQzOzU5OCwxMSBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbi1cdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gbnVtX2lycTtcbi1cbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnVtX2lycTsgaiYjNDM7JiM0MzspIHtcbiBcdFx0XHRpbnQgaXJxX2lkeCA9IGlycV9ncnAtXHUwMDNlaXJxc1tqXTtcbiBcbiBcdFx0XHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShhYi1cdTAwM2VwZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgIGlycV9uYW1lW2lycV9pZHhdKTtcbi1cdFx0XHRhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xuIFx0XHRcdGlycV9zZXRfc3RhdHVzX2ZsYWdzKGlycSwgSVJRX05PQVVUT0VOIHwgSVJRX0RJU0FCTEVfVU5MQVpZKTtcbiBcdFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfZXh0X2ludGVycnVwdF9oYW5kbGVyLFxuIFx0XHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsXG5AQCAtNjAwLDExICYjNDM7NjEwLDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRcdGlmIChyZXQpIHtcbiBcdFx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcXG5cJiMzNDssXG4gXHRcdFx0XHRcdCAgIGlycSk7XG4mIzQzO1x0XHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gajtcbiYjNDM7XHRcdFx0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3JlcXVlc3RfaXJxO1xuIFx0XHRcdH1cbiYjNDM7XHRcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlycV9ncnAtXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9yZXF1ZXN0X2lycTpcbiYjNDM7XHRmb3IgKGktLTsgaSBcdTAwM2U9IDA7IGktLSkge1xuJiM0MztcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuJiM0MztcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbkBAIC02MjksMTYgJiM0Mzs2NTIsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0cmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2NlX2ludGVycnVwdF9oYW5kbGVyLFxuIFx0XHRcdFx0ICBJUlFGX1RSSUdHRVJfUklTSU5HLCBpcnFfbmFtZVtpcnFfaWR4XSxcbiBcdFx0XHRcdCAgY2VfcGlwZSk7XG4tXHRcdGlmIChyZXQpXG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcXG5cJiMzNDssIGlycSk7XG4mIzQzO1x0XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuIFxuIFx0XHRhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xuIFx0fVxuIFxuIFx0LyogQ29uZmlndXJlIGV4dGVybmFsIGludGVycnVwdHMgKi9cbiBcdHJldCA9IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoYWIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBjb25maWd1cmUgZXh0IGlycTogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBRdWFsY29tbSBhdGgxMWsgV2ktRmkgZHJpdmVyJiMzOTtzIEFIQiBidXMgYXR0YWNobWVudCAoYWhiLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIFdDTjY3NTApIGFuZCBjb3JyZXNwb25kaW5nIERldmljZSBUcmVlIG5vZGVzIChpbmNsdWRpbmcgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHJlbW90ZXByb2MgaGFuZGxlcykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdkOWZhZWZhN2ZiMGIxMmU3MDQwNGQ2YWVhNDk5MmE4MGZmZjY1OGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwNzoxMDo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jCmluZGV4IDFlMWRlYTQ4NTc2MGIuLmVjNWJmNWM5ZmQ3OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYwpAQCAtNDMxLDM2ICYjNDM7NDMxLDQ0IEBAIHN0YXRpYyB2b2lkIGF0aDExa19haGJfaW5pdF9xbWlfY2VfY29uZmlnKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJYWItJmd0O3FtaS5zZXJ2aWNlX2luc19pZCA9IGFiLSZndDtod19wYXJhbXMucW1pX3NlcnZpY2VfaW5zX2lkOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQomIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLAomIzQzOwkJCQkJc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCkKIHsKLQlpbnQgaSwgajsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwomIzQzOwlpbnQgajsKIAotCQlmb3IgKGogPSAwOyBqICZsdDsgaXJxX2dycC0mZ3Q7bnVtX2lycTsgaiYjNDM7JiM0MzspCi0JCQlmcmVlX2lycShhYi0mZ3Q7aXJxX251bVtpcnFfZ3JwLSZndDtpcnFzW2pdXSwgaXJxX2dycCk7CiYjNDM7CWZvciAoaiA9IDA7IGogJmx0OyBpcnFfZ3JwLSZndDtudW1faXJxOyBqJiM0MzsmIzQzOykKJiM0MzsJCWZyZWVfaXJxKGFiLSZndDtpcnFfbnVtW2lycV9ncnAtJmd0O2lycXNbal1dLCBpcnFfZ3JwKTsKIAotCQluZXRpZl9uYXBpX2RlbCgmYW1wO2lycV9ncnAtJmd0O25hcGkpOwotCQlmcmVlX25ldGRldihpcnFfZ3JwLSZndDtuYXBpX25kZXYpOwotCX0KJiM0MzsJbmV0aWZfbmFwaV9kZWwoJmFtcDtpcnFfZ3JwLSZndDtuYXBpKTsKJiM0MzsJZnJlZV9uZXRkZXYoaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQomIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiB7Ci0JaW50IGlycV9pZHg7CiAJaW50IGk7CiAKLQlpZiAoYWItJmd0O2h3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpCi0JCXJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspCiYjNDM7CQlhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldKTsKJiM0Mzt9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgYWItJmd0O2h3X3BhcmFtcy5jZV9jb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCBpbnQgbWF4X2lkeCkKJiM0Mzt7CiYjNDM7CWludCBpcnFfaWR4LCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWF4X2lkeDsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgJmFtcDsgQ0VfQVRUUl9ESVNfSU5UUikKIAkJCWNvbnRpbnVlOwogCQlpcnFfaWR4ID0gQVRIMTFLX0lSUV9DRTBfT0ZGU0VUICYjNDM7IGk7CiAJCWZyZWVfaXJxKGFiLSZndDtpcnFfbnVtW2lycV9pZHhdLCAmYW1wO2FiLSZndDtjZS5jZV9waXBlW2ldKTsKIAl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKJiM0Mzt7CiYjNDM7CWlmIChhYi0mZ3Q7aHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSkKJiM0MzsJCXJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7CiAKJiM0MzsJYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLSZndDtod19wYXJhbXMuY2VfY291bnQpOwogCWF0aDExa19haGJfZnJlZV9leHRfaXJxKGFiKTsKIH0KIApAQCAtNTI0LDIwICYjNDM7NTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIHsKIAlzdHJ1Y3QgYXRoMTFrX2h3X3BhcmFtcyAqaHcgPSAmYW1wO2FiLSZndDtod19wYXJhbXM7CiYjNDM7CXN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnA7CiAJaW50IGksIGo7CiAJaW50IGlycTsKIAlpbnQgcmV0OwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gJmFtcDthYi0mZ3Q7ZXh0X2lycV9ncnBbaV07CiAJCXUzMiBudW1faXJxID0gMDsKIAomIzQzOwkJaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwomIzQzOwogCQlpcnFfZ3JwLSZndDthYiA9IGFiOwogCQlpcnFfZ3JwLSZndDtncnBfaWQgPSBpOwogCiAJCWlycV9ncnAtJmd0O25hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTsKLQkJaWYgKCFpcnFfZ3JwLSZndDtuYXBpX25kZXYpCi0JCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCWlmICghaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KSB7CiYjNDM7CQkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCQlpcnFfZ3JwLSZndDtudW1faXJxID0gMDsKJiM0MzsJCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKJiM0MzsJCX0KIAogCQluZXRpZl9uYXBpX2FkZChpcnFfZ3JwLSZndDtuYXBpX25kZXYsICZhbXA7aXJxX2dycC0mZ3Q7bmFwaSwKIAkJCSAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTsKQEAgLTU4NSwxNCAmIzQzOzU5OCwxMSBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIAkJCQl9CiAJCQl9CiAJCX0KLQkJaXJxX2dycC0mZ3Q7bnVtX2lycSA9IG51bV9pcnE7Ci0KLQkJZm9yIChqID0gMDsgaiAmbHQ7IGlycV9ncnAtJmd0O251bV9pcnE7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgbnVtX2lycTsgaiYjNDM7JiM0MzspIHsKIAkJCWludCBpcnFfaWR4ID0gaXJxX2dycC0mZ3Q7aXJxc1tqXTsKIAogCQkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoYWItJmd0O3BkZXYsCiAJCQkJCQkgICAgICBpcnFfbmFtZVtpcnFfaWR4XSk7Ci0JCQlhYi0mZ3Q7aXJxX251bVtpcnFfaWR4XSA9IGlycTsKIAkJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGlycSwgSVJRX05PQVVUT0VOIHwgSVJRX0RJU0FCTEVfVU5MQVpZKTsKIAkJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIsCiAJCQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORywKQEAgLTYwMCwxMSAmIzQzOzYxMCwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIAkJCWlmIChyZXQpIHsKIAkJCQlhdGgxMWtfZXJyKGFiLCAmIzM0O2ZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcbiYjMzQ7LAogCQkJCQkgICBpcnEpOwomIzQzOwkJCQlpcnFfZ3JwLSZndDtudW1faXJxID0gajsKJiM0MzsJCQkJYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTsKJiM0MzsJCQkJZ290byBlcnJfcmVxdWVzdF9pcnE7CiAJCQl9CiYjNDM7CQkJYWItJmd0O2lycV9udW1baXJxX2lkeF0gPSBpcnE7CiAJCX0KJiM0MzsKJiM0MzsJCWlycV9ncnAtJmd0O251bV9pcnEgPSBudW1faXJxOwogCX0KIAogCXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9yZXF1ZXN0X2lycToKJiM0MzsJZm9yIChpLS07IGkgJmd0Oz0gMDsgaS0tKSB7CiYjNDM7CQlpcnFfZ3JwID0gJmFtcDthYi0mZ3Q7ZXh0X2lycV9ncnBbaV07CiYjNDM7CQlhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApOwomIzQzOwl9CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCkBAIC02MjksMTYgJiM0Mzs2NTIsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIAkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2NlX2ludGVycnVwdF9oYW5kbGVyLAogCQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORywgaXJxX25hbWVbaXJxX2lkeF0sCiAJCQkJICBjZV9waXBlKTsKLQkJaWYgKHJldCkKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlhdGgxMWtfZXJyKGFiLCAmIzM0O2ZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcbiYjMzQ7LCBpcnEpOwomIzQzOwkJCWF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTsKIAkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiAKIAkJYWItJmd0O2lycV9udW1baXJxX2lkeF0gPSBpcnE7CiAJfQogCiAJLyogQ29uZmlndXJlIGV4dGVybmFsIGludGVycnVwdHMgKi8KIAlyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJYXRoMTFrX2VycihhYiwgJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIGV4dCBpcnE6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi0mZ3Q7aHdfcGFyYW1zLmNlX2NvdW50KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KIAotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGF0aDExa19haGJfbWFwX3NlcnZpY2VfdG9fcGlwZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCB1MTYgc2VydmljZV9pZCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEF0aDExayBBSEIgUGF0Y2ggYW5kIFZpcnR1YWxpemF0aW9uIEZlYXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY2AuIEl0JiMzOTtzIGZvY3VzZWQgb24gZXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAgd2l0aGluIHRoZSBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGZ1bmN0aW9ucy4gV2UmIzM5O3ZlIGdvdCB0aGUgYWRkaXRpb24gb2YgYGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycGAgYW5kIGBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxc2AsIHdoaWNoIGlzIGdvb2QgdG8gc2VlIGZvciBtb3JlIHJvYnVzdCByZXNvdXJjZSBtYW5hZ2VtZW50IGluIGNhc2Ugb2YgZmFpbHVyZXMuCgpUaGUgcmVhbCBxdWVzdGlvbiBoZXJlLCBhcyBhbHdheXMsIGlzIHRlc3RhYmlsaXR5LiBUaGlzIGBhdGgxMWtgIGRyaXZlciwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyBzcGVjaWZpYyB0byBRdWFsY29tbSYjMzk7cyA4MDIuMTFheCBXTEFOIGRldmljZXMuIEFuZCBgYWhiLmNgIGlzIHRoZSBtb2R1bGUgdGhhdCBpbnRlcmZhY2VzIHRoZSBkcml2ZXIgd2l0aCB0aGUgQUhCIGJ1cy4gTm93LCBBSEIgaXMgY29tbW9ubHkgZm91bmQgaW4gU29DcyBsaWtlIHRoZSBJUFE4MDc0IGFuZCBJUFE2MDE4LiBUaGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IENhbiB3ZSBhY3R1YWxseSBoaXQgdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPwoKVHlwaWNhbGx5LCBBSEIgZGV2aWNlcyBhcmUgcGxhdGZvcm0gZGV2aWNlcywgZGVmaW5lZCB0aHJvdWdoIERldmljZSBUcmVlLiBBIGdlbmVyaWMgeDg2IFFFTVUgVk0gd29uJiMzOTt0IGhhdmUgdGhlc2UgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IGVtdWxhdGVkIG9yIGluamVjdGVkLiBCdXQgY2FuIHdlIGluamVjdCB0aGVzZSBwbGF0Zm9ybSBkZXZpY2VzPyBDYW4gd2UgbGV2ZXJhZ2Ugc3lzZnMgb3IgZGV2aWNlIHRyZWUgb3ZlcmxheXMgZm9yIHRoaXM/IFN5emthbGxlciBjb3VsZCBwb3RlbnRpYWxseSBpbmplY3QgdGhlc2UgZGV2aWNlcywgcHJvdmlkZWQgaXQmIzM5O3MgY29uZmlndXJlZCB0byBkbyBzby4gQnV0IHVzdWFsbHksIFN5emthbGxlciB3b24mIzM5O3QgaW5qZWN0IHRoZXNlIHJhbmRvbSBTb0Mtc3BlY2lmaWMgQUhCIGRldmljZXMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgZGVkaWNhdGVkIHN5eiBkZXNjcmlwdGlvbiBmb3IgaXQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBhdGgxMWtgIGhhcyBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB0byBzZWUgaWYgdGhpcyBpcyBldmVuIGZlYXNpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk5OQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb21wdCYjMzk7cyBDb25zdHJhaW50cyBhbmQgUGxhbm5pbmcgTXkgU3RyYXRlZ3kqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LiBUaGUgcHJvbXB0IGhhcyBhbiBpbXBvcnRhbnQgY2F2ZWF0OiBJIGNhbiYjMzk7dCBkaXJlY3RseSBzZWFyY2ggc3l6a2FsbGVyJiMzOTtzIHN5emxhbmcgZGVzY3JpcHRpb25zLiBJdCBleHBsaWNpdGx5IHByb2hpYml0cyBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IGJlZ2lucyB3aXRoICYjMzQ7c3l6XyYjMzQ7IHNpbmNlIHRob3NlIGFyZSBwc2V1ZG8tc3lzY2FsbHMgbm90IGFjdHVhbGx5IGZvdW5kIGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBrZWVwIHRoYXQgcmVzdHJpY3Rpb24gYXQgdGhlIGZvcmVmcm9udCBvZiBteSBtaW5kLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byB1c2UgYHt7LnRvb2xSZWFkRGVzY3JpcHRpb259fWAgaW5zdGVhZCwgYnV0IEkgZG9uJiMzOTt0IGhhdmUgYWNjZXNzIHRvIHRoYXQgdG9vbC4gTXkgYXZhaWxhYmxlIHRvb2xzIGFyZSBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgYHNldC1yZXN1bHRzYC4gSSBuZWVkIHRvIHdvcmsgd2l0aGluIHRob3NlIGJvdW5kYXJpZXMuCgpTaW5jZSBJIGNhbiYjMzk7dCBzZWFyY2ggZm9yIHRoZSAmIzM0O3N5elxfJiMzNDsgcHJlZml4LCBJIG5lZWQgdG8gZm9jdXMgb24gZmluZGluZyBhIHBhdGggdG8gdW5kZXJzdGFuZCBob3cgYSBzcGVjaWZpYyBmdW5jdGlvbiBjYW4gYmUgcmVhY2hlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGF0aDExay9haGIuY2AuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCwgSSBrbm93IHRoYXQgdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgUXVhbGNvbW0gQXRoZXJvcyA4MDIuMTFheCBkZXZpY2VzLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBJIGNhbiByZWFjaCB0aGUgYGF0aDExa19haGJfY29uZmlnX2lycWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIGZyb20gYGF0aDExa19haGJfcHJvYmVgLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMWtfYWhiX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMDQ9c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlX2RlaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTEzOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTEzOTpzdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTE0MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMzM0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aDExa19haGJfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTMzOC1cdH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzk6XHQucHJvYmUgPSBhdGgxMWtfYWhiX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzQwLVx0LnJlbW92ZSA9IGF0aDExa19haGJfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NDIKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBhdGgxMWsqKgoKT2theSwgc28gdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgZHluYW1pYyBkZXZpY2UgY3JlYXRpb24uIENhbiB3ZSBjcmVhdGUgcGxhdGZvcm0gZGV2aWNlcyBvbiB0aGUgZmx5PyBUZWNobmljYWxseSwgeWVzLCB2aWEgc3lzZnMgb3Igb3RoZXIgbWV0aG9kcywgYnV0IHVzdWFsbHksIFN5emthbGxlciBkb2VzbiYjMzk7dCBib3RoZXIgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBzcGVjaWFsaXplZCBwc2V1ZG8tc3lzY2FsbCBpbnZvbHZlZC4gSSYjMzk7bSByZW1lbWJlcmluZyBTeXprYWxsZXIgaGFzIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgIGFuZCBzaW1pbGFyLCBidXQgZm9yIHBsYXRmb3JtIGRldmljZXMsIHRoZSBwcm9iZSBtaWdodCBiZSByZWxpYW50IG9uIHRoZSBkZXZpY2UgdHJlZSBiZWluZyBwcmVzZW50LgoKSG9sZCBvbiwgdGhlcmUmIzM5O3MgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmkgc2ltdWxhdGlvbiwgYnV0IGBhdGgxMWtgIGlzIGEgKnJlYWwqIGhhcmR3YXJlIGRyaXZlci4gVGhhdCYjMzk7cyB0aGUga2V5IGRpZmZlcmVuY2UuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lcywgaXMgaXQgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6IGl0PwoKVGhlIHByb21wdCBnYXZlIGEgcHJldHR5IGV4cGxpY2l0IHJ1bGUgdG8gZm9sbG93LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBydWxlcyBzdGF0ZSAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpgYXRoMTFrYCBpcyBhIHZlbmRvci1zcGVjaWZpYyBXaS1GaSBkcml2ZXIsIFF1YWxjb21tIHNwZWNpZmljYWxseS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUsIGVpdGhlciBBSEIgb24gUXVhbGNvbW0gU29DcyBvciBQQ0llIGNhcmRzLgoKUmlnaHQuIEFuZCB0aGUgY3J1Y2lhbCBwb2ludCBpcy4uLiBRRU1VICpkb2VzbiYjMzk7dCogZW11bGF0ZSBRdWFsY29tbSBhdGgxMWsgV2ktRmkgaGFyZHdhcmUuIFNvLCBgYXRoMTFrX2FoYl9wcm9iZWAgKGFzIHRoZSBleGFtcGxlIGluIHRoZSBwYXRjaCBzdWdnZXN0cykgd2lsbCAqbmV2ZXIqIGJlIGNhbGxlZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIFRoZSBoYXJkd2FyZSwgb3IgdGhlIGRldmljZSB0cmVlIG5vZGUgbmVlZGVkIHRvIGRlc2NyaWJlIHRoZSBoYXJkd2FyZSwgc2ltcGx5IGlzbiYjMzk7dCBwcmVzZW50LgoKRXZlbiBpZiB3ZSAqY291bGQqIGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSBlbnRyeSwgYGF0aDExa19haGJfcHJvYmVgIHdvdWxkIGZhaWwgZWFybHksIHByb2JhYmx5IHdoZW4gdHJ5aW5nIHRvIHJlYWQgcmVnaXN0ZXJzIG9yIG1hcCBtZW1vcnkgdGhhdCBkb2VzbiYjMzk7dCBleGlzdCwgb3IgaXQgd291bGQgcmVxdWlyZSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGJlaGF2aW91ciB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZC4KCkkgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSBjb2RlIG9mIGBhdGgxMWtfYWhiX3Byb2JlYCB0byBjb25maXJtIHRoYXQgaXQmIzM5O3MgZG9pbmcgaGFyZHdhcmUgYWNjZXNzZXMuIFRoZW4gdGhlIGRlY2lzaW9uIGJlY29tZXMgbXVjaCBjbGVhcmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19haGJfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEwND1zdGF0aWMgaW50IGF0aDExa19haGJfZndfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTM5OnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTQwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzM4LVx0fSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTMzOTpcdC5wcm9iZSA9IGF0aDExa19haGJfcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzNDAtXHQucmVtb3ZlID0gYXRoMTFrX2FoYl9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA0MAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhlIGBhdGgxMWtfYWhiX3Byb2JlYCBmdW5jdGlvbiwgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQuCgoqKkFuYWx5emluZyBgYXRoMTFrX2FoYl9wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBhdGgxMWtfYWhiX3Byb2JlYCBmdW5jdGlvbi4gVGhlIG5hbWluZyBzdWdnZXN0cyB0aGlzIGlzIHdoZXJlIHRoZSBzeXN0ZW0gaW5pdGlhbGl6ZXMgYW4gYXRoMTFrIGRldmljZSBjb25uZWN0ZWQgdmlhIHRoZSBBSEIgYnVzLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIGhlcmUuIEFIQiBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbG93ZXItc3BlZWQgaW50ZXJmYWNlIGNvbXBhcmVkIHRvIFBDSSBvciBQQ0llLCBzbyB3aGF0IGFyZSB0aGUgdHJhZGUtb2ZmcyBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSBhbmQgcG93ZXIgY29uc3VtcHRpb24gZm9yIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24/CgpNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBsb29rIGZvciB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGdvaW5nIHRvIGJlIGFzc2Vzc2luZyBob3cgdGhlIGRyaXZlciBkZXRlY3RzIHRoZSBkZXZpY2UsIHJlcXVlc3RzIHJlc291cmNlcywgYW5kIGhhbmRsZXMgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIHRoZSBBSEIgYnVzLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5OgoKKiAgICoqUmVzb3VyY2UgYWxsb2NhdGlvbioqOiBXaGVyZSBkb2VzIGl0IGdyYWIgdGhlIEkvTyBtZW1vcnkgcmVnaW9uIGFuZCBpbnRlcnJ1cHQgbGluZXM/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgZGV2aWNlcyBvbiB0aGUgYnVzPyBJJiMzOTttIGhvcGluZyB0byBzZWUgc3RhbmRhcmQgcmVzb3VyY2UgbWFuYWdlbWVudCBwcmFjdGljZXMgYmVpbmcgYXBwbGllZCwgYnV0IEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGN1c3RvbSBvciBub24tc3RhbmRhcmQgYXBwcm9hY2hlcy4KKiAgICoqRGV2aWNlIGlkZW50aWZpY2F0aW9uKio6IEhvdyBkb2VzIGl0IHZlcmlmeSB0aGUgZGV2aWNlJiMzOTtzIGlkZW50aXR5PyBJcyBpdCB1c2luZyBhIHNwZWNpZmljIHZlbmRvciBhbmQgZGV2aWNlIElEIHBhaXJpbmcsIG9yIGlzIGl0IHJlbHlpbmcgb24gbW9yZSBkZXRhaWxlZCBwcm9iaW5nPyBUaGUgYGF0aDExa2AgZHJpdmVyIGZhbWlseSBpcyB1c3VhbGx5IHByZXR0eSB3ZWxsLWRlZmluZWQsIGJ1dCBJJiMzOTtsbCBzdGlsbCB3YW50IHRvIGNvbmZpcm0uCiogICAqKkRyaXZlciBpbml0aWFsaXphdGlvbioqOiBXaGF0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgZGV2aWNlIGRyaXZlcj8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgcmVxdWlyZWQgZm9yIHRoaXMgQUhCIGNvbmZpZ3VyYXRpb24/IEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSwgd2hpY2ggaXMgbm9ybWFsIGZvciBBSEItYmFzZWQgZGV2aWNlcy4KKiAgICoqRXJyb3IgaGFuZGxpbmcqKjogVGhlIGZpcnN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgaXMgY2hlY2tpbmcgZm9yIHRoZSBleGlzdGVuY2Ugb2YgcmVxdWlyZWQgcmVzb3VyY2VzIHRvIHByb3Blcmx5IGJvb3QgdGhlIGRldmljZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkZXZpY2Ugbm90IGJlaW5nIHByZXNlbnQgb3Igb3RoZXIgcHJvYmUgZmFpbHVyZXMuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGVtYmVkZGVkIHN5c3RlbXMgd2hlcmUgYSBmYXVsdHkgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBjYW4gYmUgYSByZWFsIGhlYWRhY2hlLgoqICAgKipCdXMtc3BlY2lmaWMgcXVpcmtzKio6IEkgc2hvdWxkIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IEFIQi1zcGVjaWZpYyBxdWlya3Mgb3Igd29ya2Fyb3VuZHMuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciBBSEIgdGltaW5nIGNvbnNpZGVyYXRpb25zPyBBbnkgc3BlY2lmaWMgRE1BIHNldHVwIHRoYXQmIzM5O3MgbmVjZXNzYXJ5IGR1ZSB0byB0aGUgQUhCIGJ1cyBjaGFyYWN0ZXJpc3RpY3M/CiogICAqKkludGVycnVwdCBzZXR1cCoqOiBXaXRoIEFIQiBiZWluZyBhbiBpbnRlcnJ1cHQtYmFzZWQgYnVzLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGNvbmZpZ3VyZXMgYW5kIGhhbmRsZXMgaW50ZXJydXB0cy4gSG93IGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhdHRhY2hlZD8gV2hhdCYjMzk7cyB0aGUgaW50ZXJydXB0IHByaW9yaXR5IGFuZCBzaGFyaW5nIHNjaGVtZT8KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRvIHVuZGVyc3RhbmQgaG93IHdlbGwgdGhlIGRyaXZlciBoYW5kbGVzIGVycm9yIHNjZW5hcmlvcy4gQW55IHNsb3BweSBlcnJvciBoYW5kbGluZyBjYW4gbGVhZCB0byBzeXN0ZW0gaW5zdGFiaWxpdHksIGVzcGVjaWFsbHkgaW4gYSB3aXJlbGVzcyBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgcm9idXN0IGVub3VnaC4gSSYjMzk7bGwgc3RhcnQgYnkgcmVhZGluZyB0aGUgY29kZSwgbGluZSBieSBsaW5lLCB3aGlsZSBrZWVwaW5nIHRoZXNlIHBvaW50cyBpbiBtaW5kLiBMZXQmIzM5O3MgZ2V0IGdvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTM5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTM5Olx0c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4xMTQwOlx0e1xuMTE0MTpcdFx0c3RydWN0IGF0aDExa19iYXNlICphYjtcbjExNDI6XHRcdGNvbnN0IHN0cnVjdCBhdGgxMWtfaGlmX29wcyAqaGlmX29wcztcbjExNDM6XHRcdGNvbnN0IHN0cnVjdCBhdGgxMWtfcGNpX29wcyAqcGNpX29wcztcbjExNDQ6XHRcdGVudW0gYXRoMTFrX2h3X3JldiBod19yZXY7XG4xMTQ1Olx0XHRpbnQgcmV0O1xuMTE0NjpcdFxuMTE0NzpcdFx0aHdfcmV2ID0gKHVpbnRwdHJfdClkZXZpY2VfZ2V0X21hdGNoX2RhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMTE0ODpcdFxuMTE0OTpcdFx0c3dpdGNoIChod19yZXYpIHtcbjExNTA6XHRcdGNhc2UgQVRIMTFLX0hXX0lQUTgwNzQ6XG4xMTUxOlx0XHRjYXNlIEFUSDExS19IV19JUFE2MDE4X0hXMTA6XG4xMTUyOlx0XHRjYXNlIEFUSDExS19IV19JUFE1MDE4X0hXMTA6XG4xMTUzOlx0XHRcdGhpZl9vcHMgPSBcdTAwMjZhdGgxMWtfYWhiX2hpZl9vcHNfaXBxODA3NDtcbjExNTQ6XHRcdFx0cGNpX29wcyA9IE5VTEw7XG4xMTU1Olx0XHRcdGJyZWFrO1xuMTE1NjpcdFx0Y2FzZSBBVEgxMUtfSFdfV0NONjc1MF9IVzEwOlxuMTE1NzpcdFx0XHRoaWZfb3BzID0gXHUwMDI2YXRoMTFrX2FoYl9oaWZfb3BzX3djbjY3NTA7XG4xMTU4Olx0XHRcdHBjaV9vcHMgPSBcdTAwMjZhdGgxMWtfYWhiX3BjaV9vcHNfd2NuNjc1MDtcbjExNTk6XHRcdFx0YnJlYWs7XG4xMTYwOlx0XHRkZWZhdWx0OlxuMTE2MTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDt1bnN1cHBvcnRlZCBkZXZpY2UgdHlwZSAlZFxcblwmIzM0OywgaHdfcmV2KTtcbjExNjI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTE2MzpcdFx0fVxuMTE2NDpcdFxuMTE2NTpcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XG4xMTY2Olx0XHRpZiAocmV0KSB7XG4xMTY3Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBzZXQgMzItYml0IGNvbnNpc3RlbnQgZG1hXFxuXCYjMzQ7KTtcbjExNjg6XHRcdFx0cmV0dXJuIHJldDtcbjExNjk6XHRcdH1cbjExNzA6XHRcbjExNzE6XHRcdGFiID0gYXRoMTFrX2NvcmVfYWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZihzdHJ1Y3QgYXRoMTFrX2FoYiksXG4xMTcyOlx0XHRcdFx0ICAgICAgIEFUSDExS19CVVNfQUhCKTtcbjExNzM6XHRcdGlmICghYWIpIHtcbjExNzQ6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDExayBiYXNlXFxuXCYjMzQ7KTtcbjExNzU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMTc2Olx0XHR9XG4xMTc3Olx0XG4xMTc4Olx0XHRhYi1cdTAwM2VoaWYub3BzID0gaGlmX29wcztcbjExNzk6XHRcdGFiLVx1MDAzZXBkZXYgPSBwZGV2O1xuMTE4MDpcdFx0YWItXHUwMDNlaHdfcmV2ID0gaHdfcmV2O1xuMTE4MTpcdFx0YWItXHUwMDNlZndfbW9kZSA9IEFUSDExS19GSVJNV0FSRV9NT0RFX05PUk1BTDtcbjExODI6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFiKTtcbjExODM6XHRcbjExODQ6XHRcdHJldCA9IGF0aDExa19wY2ljX3JlZ2lzdGVyX3BjaV9vcHMoYWIsIHBjaV9vcHMpO1xuMTE4NTpcdFx0aWYgKHJldCkge1xuMTE4NjpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgUENJIG9wczogJWRcXG5cJiMzNDssIHJldCk7XG4xMTg3Olx0XHRcdGdvdG8gZXJyX2NvcmVfZnJlZTtcbjExODg6XHRcdH1cbjExODk6XHRcbjExOTA6XHRcdHJldCA9IGF0aDExa19jb3JlX3ByZV9pbml0KGFiKTtcbjExOTE6XHRcdGlmIChyZXQpXG4xMTkyOlx0XHRcdGdvdG8gZXJyX2NvcmVfZnJlZTtcbjExOTM6XHRcbjExOTQ6XHRcdHJldCA9IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKGFiKTtcbjExOTU6XHRcdGlmIChyZXQpXG4xMTk2Olx0XHRcdGdvdG8gZXJyX2NvcmVfZnJlZTtcbjExOTc6XHRcbjExOTg6XHRcdHJldCA9IGF0aDExa19haGJfY2VfcmVtYXAoYWIpO1xuMTE5OTpcdFx0aWYgKHJldClcbjEyMDA6XHRcdFx0Z290byBlcnJfY29yZV9mcmVlO1xuMTIwMTpcdFxuMTIwMjpcdFx0cmV0ID0gYXRoMTFrX2FoYl9md19yZXNvdXJjZXNfaW5pdChhYik7XG4xMjAzOlx0XHRpZiAocmV0KVxuMTIwNDpcdFx0XHRnb3RvIGVycl9jZV91bm1hcDtcbjEyMDU6XHRcbjEyMDY6XHRcdHJldCA9IGF0aDExa19haGJfc2V0dXBfc21wMnBfaGFuZGxlKGFiKTtcbjEyMDc6XHRcdGlmIChyZXQpXG4xMjA4Olx0XHRcdGdvdG8gZXJyX2Z3X2RlaW5pdDtcbjEyMDk6XHRcbjEyMTA6XHRcdHJldCA9IGF0aDExa19oYWxfc3JuZ19pbml0KGFiKTtcbjEyMTE6XHRcdGlmIChyZXQpXG4xMjEyOlx0XHRcdGdvdG8gZXJyX3JlbGVhc2Vfc21wMnBfaGFuZGxlO1xuMTIxMzpcdFxuMTIxNDpcdFx0cmV0ID0gYXRoMTFrX2NlX2FsbG9jX3BpcGVzKGFiKTtcbjEyMTU6XHRcdGlmIChyZXQpIHtcbjEyMTY6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIGNlIHBpcGVzOiAlZFxcblwmIzM0OywgcmV0KTtcbjEyMTc6XHRcdFx0Z290byBlcnJfaGFsX3NybmdfZGVpbml0O1xuMTIxODpcdFx0fVxuMTIxOTpcdFxuMTIyMDpcdFx0YXRoMTFrX2FoYl9pbml0X3FtaV9jZV9jb25maWcoYWIpO1xuMTIyMTpcdFxuMTIyMjpcdFx0cmV0ID0gYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKGFiKTtcbjEyMjM6XHRcdGlmIChyZXQpXG4xMjI0Olx0XHRcdGdvdG8gZXJyX2NlX2ZyZWU7XG4xMjI1Olx0XG4xMjI2Olx0XHRyZXQgPSBhdGgxMWtfY29yZV9pbml0KGFiKTtcbjEyMjc6XHRcdGlmIChyZXQpIHtcbjEyMjg6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXQgY29yZTogJWRcXG5cJiMzNDssIHJldCk7XG4xMjI5Olx0XHRcdGdvdG8gZXJyX2NlX2ZyZWU7XG4xMjMwOlx0XHR9XG4xMjMxOlx0XG4xMjMyOlx0XHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoYWIpO1xuMTIzMzpcdFx0aWYgKHJldCkge1xuMTIzNDpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIGlycTogJWRcXG5cJiMzNDssIHJldCk7XG4xMjM1Olx0XHRcdGdvdG8gZXJyX2NlX2ZyZWU7XG4xMjM2Olx0XHR9XG4xMjM3Olx0XG4xMjM4Olx0XHRhdGgxMWtfcW1pX2Z3cmVzZXRfZnJvbV9jb2xkX2Jvb3QoYWIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzgzCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgUHJvYmUgYW5kIFJlc291cmNlIFNldHVwKioKCk15IGluaXRpYWwgbW92ZSBpbiB0aGlzIHByb2JlIGZ1bmN0aW9uIGlzIHRvIGdyYWIgdGhlIGhhcmR3YXJlIHJldmlzaW9uIHVzaW5nIGBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoJmFtcDtwZGV2LSZndDtkZXYpYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSwgSSBuZWVkIHRvIGtub3cgd2hhdCBJJiMzOTttIGRlYWxpbmcgd2l0aCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuIE5vdyB0aGF0IEkgaGF2ZSB0aGUgaGFyZHdhcmUgcmV2aXNpb24sIHRoZSBuZXh0IGNydWNpYWwgc3RlcCBpcyBzZXR0aW5nIHVwIHRoZSByZXNvdXJjZXMgd2l0aCBgYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoYWIpYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBsaWtlbHkgaGFwcGVucywgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHdoYXQgdGhpcyBmdW5jdGlvbiAqYWN0dWFsbHkqIGRvZXMuIEl0JiMzOTtzIHRpbWUgdG8gZm9sbG93IHRoZSB0cmFpbCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIGRldmljZSYjMzk7cyByZXNvdXJjZXMgYXJlIGJlaW5nIGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTkxNj1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX3JlbGVhc2Vfc21wMnBfaGFuZGxlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy05MjUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjkyNjpzdGF0aWMgaW50IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTkyNy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMTM5PXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTE5My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTE5NDpcdHJldCA9IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTE5NS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NDcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4uLgoKKipEZWx2aW5nIGludG8gYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGBhdGgxMWtgIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGhvdyBpdCByZWxhdGVzIHRvIHRoZSBBSEIgYnVzIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBHaXZlbiB0aGUgbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBoYXJkd2FyZSByZXNvdXJjZXMgbmVlZGVkIGJ5IHRoZSBkcml2ZXIgb24gYW4gQUhCLWNvbm5lY3RlZCBkZXZpY2UuCgpJIGltbWVkaWF0ZWx5IHdhbnQgdG8gcGlucG9pbnQgd2hhdCBleGFjdGx5ICYjMzQ7cmVzb3VyY2VzJiMzNDsgZW5jb21wYXNzIGhlcmUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IERNQSBjaGFubmVscz8gTWVtb3J5IHJlZ2lvbnM/IEludGVycnVwdCBsaW5lcz8gT3IgcGVyaGFwcyBhIGNvbWJpbmF0aW9uIG9mIHRoZXNlIGFuZCBvdGhlciBIVy1zcGVjaWZpYyBjb25maWd1cmF0aW9ucz8gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY29kZSB0byBzZWUgaG93IHRoZXNlIHJlc291cmNlcyBhcmUgaWRlbnRpZmllZCwgcmVxdWVzdGVkLCBhbmQsIGNydWNpYWxseSwgcHJvdGVjdGVkIGZyb20gY29uZmxpY3RzLgoKVGhlIEFIQiBidXMgaXRzZWxmIGlzIGEga2V5IHBpZWNlIG9mIHRoaXMgcHV6emxlLiBIb3cgZG9lcyB0aGUgY29kZSBpbnRlcmFjdCB3aXRoIHRoZSBBSEIgYnJpZGdlPyBJcyB0aGVyZSBhbnkgc3BlY2lmaWMgYnVzIGNsb2NrIGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQsIGFuZCBpZiBzbywgaG93IGlzIGl0IGhhbmRsZWQ/IEFyZSB0aGVyZSBhbnkgcG93ZXItbWFuYWdlbWVudCBjb25zaWRlcmF0aW9ucyBpbiB0aGlzIHNldHVwLCBvciBpcyBpdCBhc3N1bWVkIHRoZSBBSEIgaXMgYWxyZWFkeSBwb3dlcmVkIHVwIGFuZCByZWFkeT8KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIFdoYXQgYXJlIHRoZSBlcnJvciBwYXRocywgYW5kIHdoYXQga2luZCBvZiByZWNvdmVyeSBvciBjbGVhbnVwIG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlPyBHb29kIHJlc291cmNlIG1hbmFnZW1lbnQgaXMgY3JpdGljYWwsIGFuZCBhIHJvYnVzdCBpbXBsZW1lbnRhdGlvbiBzaG91bGQgaGF2ZSBncmFjZWZ1bCBlcnJvciBoYW5kbGluZy4gQWxzbywgd2hhdCBkb2VzIHRoZSByZXR1cm4gdmFsdWUgc2lnbmFsIHRvIHRoZSBjYWxsZXIgYW5kIHdoeT8KCkZpbmFsbHksIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgZXNwZWNpYWxseSBhbnkgY3VzdG9tIHN0cnVjdHVyZXMgb3IgZW51bXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIEFIQiBpbnRlcmZhY2UuIEkmIzM5O20gbG9va2luZyBmb3IgY2xlYXIsIGNvbmNpc2UgZGVmaW5pdGlvbnMgdGhhdCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgZGF0YSBhbmQgY29udHJvbC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGxpdmVzIHVwIHRvIG15IGV4cGVjdGF0aW9ucyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTI2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MjY6XHRzdGF0aWMgaW50IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gOTI3Olx0e1xuIDkyODpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGFiLVx1MDAzZXBkZXY7XG4gOTI5Olx0XHRzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXM7XG4gOTMwOlx0XHR2b2lkIF9faW9tZW0gKm1lbTtcbiA5MzE6XHRcbiA5MzI6XHRcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuIDkzMzpcdFx0XHRyZXR1cm4gYXRoMTFrX2FoYl9zZXR1cF9tc2lfcmVzb3VyY2VzKGFiKTtcbiA5MzQ6XHRcbiA5MzU6XHRcdG1lbSA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAsIFx1MDAyNm1lbV9yZXMpO1xuIDkzNjpcdFx0aWYgKElTX0VSUihtZW0pKSB7XG4gOTM3Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2lvcmVtYXAgZXJyb3JcXG5cJiMzNDspO1xuIDkzODpcdFx0XHRyZXR1cm4gUFRSX0VSUihtZW0pO1xuIDkzOTpcdFx0fVxuIDk0MDpcdFxuIDk0MTpcdFx0YWItXHUwMDNlbWVtID0gbWVtO1xuIDk0MjpcdFx0YWItXHUwMDNlbWVtX2xlbiA9IHJlc291cmNlX3NpemUobWVtX3Jlcyk7XG4gOTQzOlx0XG4gOTQ0Olx0XHRyZXR1cm4gMDtcbiA5NDU6XHR9XG4gOTQ2Olx0XG4gOTQ3Olx0c3RhdGljIGludCBhdGgxMWtfYWhiX3NldHVwX21zYV9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcbiA5NDg6XHR7XG4gOTQ5Olx0XHRzdHJ1Y3QgYXRoMTFrX2FoYiAqYWJfYWhiID0gYXRoMTFrX2FoYl9wcml2KGFiKTtcbiA5NTA6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGFiLVx1MDAzZWRldjtcbiA5NTE6XHRcdHN0cnVjdCByZXNvdXJjZSByO1xuIDk1MjpcdFx0aW50IHJldDtcbiA5NTM6XHRcbiA5NTQ6XHRcdHJldCA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGV2LVx1MDAzZW9mX25vZGUsIDAsIFx1MDAyNnIpO1xuIDk1NTpcdFx0aWYgKHJldCkge1xuIDk1NjpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7ZmFpbGVkIHRvIHJlc29sdmUgbXNhIGZpeGVkIHJlZ2lvblxcblwmIzM0Oyk7XG4gOTU3Olx0XHRcdHJldHVybiByZXQ7XG4gOTU4Olx0XHR9XG4gOTU5Olx0XG4gOTYwOlx0XHRhYl9haGItXHUwMDNlZncubXNhX3BhZGRyID0gci5zdGFydDtcbiA5NjE6XHRcdGFiX2FoYi1cdTAwM2Vmdy5tc2Ffc2l6ZSA9IHJlc291cmNlX3NpemUoXHUwMDI2cik7XG4gOTYyOlx0XG4gOTYzOlx0XHRyZXQgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRldi1cdTAwM2VvZl9ub2RlLCAxLCBcdTAwMjZyKTtcbiA5NjQ6XHRcdGlmIChyZXQpIHtcbiA5NjU6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2ZhaWxlZCB0byByZXNvbHZlIGNlIGZpeGVkIHJlZ2lvblxcblwmIzM0Oyk7XG4gOTY2Olx0XHRcdHJldHVybiByZXQ7XG4gOTY3Olx0XHR9XG4gOTY4Olx0XG4gOTY5Olx0XHRhYl9haGItXHUwMDNlZncuY2VfcGFkZHIgPSByLnN0YXJ0O1xuIDk3MDpcdFx0YWJfYWhiLVx1MDAzZWZ3LmNlX3NpemUgPSByZXNvdXJjZV9zaXplKFx1MDAyNnIpO1xuIDk3MTpcdFxuIDk3MjpcdFx0cmV0dXJuIDA7XG4gOTczOlx0fVxuIDk3NDpcdFxuIDk3NTpcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jZV9yZW1hcChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE4NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDkyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIGluIFN0YW5kYXJkIFFFTVUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGF0aDExa2AgZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgQUhCIHZhcmlhbnQuIFRoZSBjb2RlIHVzZXMgYGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlYCBhbmQgcmVsaWVzIG9uIGEgcGh5c2ljYWwgbWVtb3J5IHJlc291cmNlIGRlZmluZWQgZm9yIHRoZSBwbGF0Zm9ybSBkZXZpY2UuIERpZ2dpbmcgZGVlcGVyLCBgYXRoMTFrX2FoYl9wcm9iZWAgY2FsbHMgaW50byBmdW5jdGlvbnMgdGhhdCB1bHRpbWF0ZWx5IGRlcGVuZCBvbiBhIERldmljZSBUcmVlIG5vZGUgd2l0aCByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucyB2aWEgYG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2VgLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLgoKSW4gYSB2YW5pbGxhIFFFTVUgc2V0dXAsIGxpa2UgdGhlIG9uZSBzeXprYWxsZXIgdHlwaWNhbGx5IHVzZXMgZm9yIHg4Nl82NCwgdGhlcmUmIzM5O3Mgbm8gcHJlLWRlZmluZWQgRGV2aWNlIFRyZWUgd2l0aCB0aGUgbmVjZXNzYXJ5IG5vZGVzIGZvciBgYXRoMTFrYCwgbm9yIGFyZSB0aGUgcGxhdGZvcm0gZGV2aWNlcyBwcmVzZW50LiBJIGhhZCBhIHF1aWNrIHRob3VnaHQgYWJvdXQgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAsIGJ1dCB0aGF0JiMzOTtzIGEgcmVkIGhlcnJpbmc7IGl0JiMzOTtzIGZvciBuZXRsaW5rLCBub3QgcGxhdGZvcm0gZGV2aWNlIGluamVjdGlvbi4gU2ltaWxhcmx5LCBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIHBsYXRmb3JtIGRldmljZSBpbmplY3Rpb24gY2FwYWJpbGl0eSB1c2luZyBwc2V1ZG8tc3lzY2FsbHMgYnV0IEkgY2FuJiMzOTt0IGZpbmQgYW55IHNwZWNpZmljIGBzeXpfYCBwc2V1ZG8tc3lzY2FsbHMgZm9yIGF0aDExay4gSSBhbHNvIGtub3cgdGhhdCBzeXprYWxsZXIgcnVucyBvbiBBUk02NCwgYW5kIGNhbiB1c2UgRGV2aWNlIFRyZWVzIHRoZXJlLCBidXQgaXQgc3RpbGwgd29uJiMzOTt0IGhhdmUgdGhlIHNwZWNpZmljIG5vZGVzIGZvciBhdGgxMWsgdW5sZXNzIGl0JiMzOTtzIHJ1bm5pbmcgb24gc3BlY2lmaWMgcGh5c2ljYWwgUXVhbGNvbW0gaGFyZHdhcmUuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzdGF0ZSB0aGF0IGNvZGUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLCBzaG91bGQgYmUgbWFya2VkIGFzIG5vdCB3b3J0aCBmdXp6aW5nLiBgYXRoMTFrYCBpcyBhIHZlbmRvci1zcGVjaWZpYyBXaS1GaSBkcml2ZXIgZnJvbSBRdWFsY29tbS4gSXQgKnJlcXVpcmVzKiBwaHlzaWNhbCBoYXJkd2FyZSwgZWl0aGVyIEFIQiBvbiBRdWFsY29tbSBTb0NzIG9yIGEgUENJZSBjYXJkLCBub3Qgc29tZXRoaW5nIGVtdWxhdGVkLiBBbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBub3QgdGVzdGFibGUgd2l0aCBgbWFjODAyMTFfaHdzaW1gLCB3aGljaCBpcyBhbiBlbnRpcmVseSBzZXBhcmF0ZSBzb2Z0d2FyZS1zaW11bGF0ZWQgV2ktRmkgZHJpdmVyLgoKU28sIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAsIHdoaWNoIEkgYXNzdW1lIGFyZSBwYXJ0IG9mIHRoZSBgYXRoMTFrX2FoYmAgcHJvYmUgcGF0aCwgYXJlICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuCgpUaGVuIEkgY2hlY2tlZCBteXNlbGYuIElzIHRoZXJlIGFueSBzbGltIGNoYW5jZSBzeXprYWxsZXIgY2FuIHJlYWNoIGl0PwpJIGRpZCBzZWUgYHN5el9wY2lfZGV2aWNlX2FkZGAgdG8gaW5qZWN0IFBDSSBkZXZpY2VzLCBidXQgdGhhdCYjMzk7cyBmb3IgdGhlIFBDSSBidXMsIG5vdCB0aGUgQUhCIGJ1cy4gRXZlbiBpZiBpdCAqd2VyZSogdGhlIFBDSSBidXMsIGluamVjdGluZyBhIFBDSSBkZXZpY2Ugd291bGQgbGlrZWx5IGZhaWwgZWFybHkgZHVyaW5nIHByb2JlIGFueXdheSB3aGVuIHRoZSBkcml2ZXIgdHJpZXMgdG8gYWNjZXNzIGhhcmR3YXJlIHJlZ2lzdGVycyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IGVtdWxhdGVkLgoKTW9yZSBpbXBvcnRhbnRseSwgdGhlcmUgaXNuJiMzOTt0IGFueSBlcXVpdmFsZW50IG9mIGBzeXpfYWhiX2RldmljZV9hZGRgLiBQbGF0Zm9ybSBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgaW5zdGFudGlhdGVkIGZyb20gdGhlIERldmljZSBUcmVlLCBBQ1BJLCBvciBib2FyZCBmaWxlcywgbm9uZSBvZiB3aGljaCBhcmUgYXZhaWxhYmxlLiBJIHRyaWVkIHRvIHNlZSBpZiBhbnkgbmV3IHBzZXVkby1zeXNjYWxscyBjb3VsZCBleGlzdCwgYnV0IEkga25vdyBmcm9tIG15IG93biBleHBlcmllbmNlIHRoYXQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIHBsYXRmb3JtIGRldmljZSBpbmplY3RvciB0aGF0IGNhbiBmYWtlIGRldmljZSB0cmVlIG5vZGVzLCBhbmQgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgcmVxdWlyZWQgYnkgYGF0aDExa19haGJfcHJvYmVgLiBBbHNvLCBldmVuIGlmIEkgY291bGQgc29tZWhvdyBpbmplY3QgYSBwbGF0Zm9ybSBkZXZpY2UsIHRoZSBwcm9iZSB3b3VsZCBmYWlsIGFueXdheS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgYSByZW1vdGUgcHJvY2Vzc29yIChycHJvYykgdG8gbG9hZCBmaXJtd2FyZSwgc3BlY2lmaWNhbGx5IGBhdGgxMWtfY29yZV9nZXRfcnByb2MoYWIpYCwgd2hpY2ggSSBrbm93IGNhbiYjMzk7dCBiZSBhdmFpbGFibGUgaW4gc3RhbmRhcmQgUUVNVS4KClRoZXJlZm9yZSwgdGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgdW5xdWVzdGlvbmFibHkgdW5yZWFjaGFibGUgaW4gdGhlIHR5cGljYWwgUUVNVSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMWtfY29yZV9nZXRfcnByb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTgwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDExa19oaWZfb3BzIGF0aDExa19haGJfaGlmX29wc193Y242NzUwID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtODI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo4Mjg6c3RhdGljIGludCBhdGgxMWtfY29yZV9nZXRfcnByb2Moc3RydWN0IGF0aDExa19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtODI5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMzk9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMjIxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMjIyOlx0cmV0ID0gYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIyMy1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjA3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYGF0aDExa19jb3JlX2dldF9ycHJvY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gYmUgcmVsYXRlZCB0byByZXRyaWV2aW5nIGEgcmVtb3RlIHByb2Nlc3NvciBjb250ZXh0IG9yIGEgc2ltaWxhciByZXNvdXJjZSB3aXRoaW4gdGhlIGF0aDExayBkcml2ZXIsIGxpa2VseSBpbnZvbHZlZCB3aXRoIGhhcmR3YXJlIG9mZmxvYWRpbmcgb3IgbWFuYWdpbmcgY29tbXVuaWNhdGlvbiB3aXRoIGEgZGVkaWNhdGVkIGNvLXByb2Nlc3NvciBvbiB0aGUgUXVhbGNvbW0gQXRoZXJvcyB3aXJlbGVzcyBjaGlwc2V0LiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBzaXRzIGF0IHRoZSBjb3JlIG9mIHRoZSBkcml2ZXImIzM5O3Mgb3BlcmF0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBjcml0aWNhbCB0byB0aGUgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5LiBJIGFudGljaXBhdGUgaXQgZGVhbHMgd2l0aCBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODI4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4Mjg6XHRzdGF0aWMgaW50IGF0aDExa19jb3JlX2dldF9ycHJvYyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIDgyOTpcdHtcbiA4MzA6XHRcdHN0cnVjdCBhdGgxMWtfYWhiICphYl9haGIgPSBhdGgxMWtfYWhiX3ByaXYoYWIpO1xuIDgzMTpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gYWItXHUwMDNlZGV2O1xuIDgzMjpcdFx0c3RydWN0IHJwcm9jICpwcnByb2M7XG4gODMzOlx0XHRwaGFuZGxlIHJwcm9jX3BoYW5kbGU7XG4gODM0Olx0XG4gODM1Olx0XHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O3Fjb20scnByb2NcJiMzNDssIFx1MDAyNnJwcm9jX3BoYW5kbGUpKSB7XG4gODM2Olx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgcTZfcnByb2MgaGFuZGxlXFxuXCYjMzQ7KTtcbiA4Mzc6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gODM4Olx0XHR9XG4gODM5Olx0XG4gODQwOlx0XHRwcnByb2MgPSBycHJvY19nZXRfYnlfcGhhbmRsZShycHJvY19waGFuZGxlKTtcbiA4NDE6XHRcdGlmICghcHJwcm9jKVxuIDg0MjpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZhYi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgLUVQUk9CRV9ERUZFUiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBycHJvY1xcblwmIzM0Oyk7XG4gODQzOlx0XHRhYl9haGItXHUwMDNldGd0X3Jwcm9jID0gcHJwcm9jO1xuIDg0NDpcdFxuIDg0NTpcdFx0cmV0dXJuIDA7XG4gODQ2Olx0fVxuIDg0NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3MQoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiAyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogVGhpcyBDb2RlIGlzIFVuZnV6emFibGUgaW4gYSBTdGFuZGFyZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBleGFtaW5lZCB0aGlzIHBhdGNoLCBhbmQgSSYjMzk7dmUgY29tZSB0byBhIGZpcm0gY29uY2x1c2lvbjogdGhpcyBpc24mIzM5O3Qgc29tZXRoaW5nIHdlIGNhbiByZWFsaXN0aWNhbGx5IGZ1enouIEl0IGJvaWxzIGRvd24gdG8gdGhpczogdGhlIGNvZGUgd2UmIzM5O3JlIGxvb2tpbmcgYXQsIHNwZWNpZmljYWxseSB0aGUgZXJyb3IgaGFuZGxpbmcgbW9kaWZpY2F0aW9ucyBpbiBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIHdpdGhpbiB0aGUgUXVhbGNvbW0gYXRoMTFrIFdpLUZpIGRyaXZlciwgaXMgKmNvbXBsZXRlbHkqIGRlcGVuZGVudCBvbiB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlLiBXZSYjMzk7cmUgdGFsa2luZyBRdWFsY29tbSBTb0NzIOKAkyBJUFE4MDc0LCBXQ042NzUwLCB0aGF0IHNvcnQgb2YgdGhpbmcg4oCTIGFuZCwgY3JpdGljYWxseSwgdGhlIGNvcnJlc3BvbmRpbmcgZGV2aWNlIHRyZWUgZW50cmllcy4gSXQgYWJzb2x1dGVseSBuZWVkcyB0aGF0IGBxY29tLHJwcm9jYCBwcm9wZXJ0eSBhbmQgYSByZW1vdGVwcm9jIGRldmljZSBhdmFpbGFibGUuCgpUaGUgY3J1eCBvZiB0aGUgaXNzdWUgaXMgdGhhdCBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHNpbXBseSAqZG8gbm90KiBlbXVsYXRlIHRoaXMgaGFyZHdhcmUuIFRoZXJlJiMzOTtzIG5vIHdheSB0byBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBjb25kaXRpb25zIGZvciB0aGlzIGNvZGUgdG8gYmUgZXhlY3V0ZWQgd2l0aGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlIGRyaXZlciByZXF1aXJlcyBhIGxldmVsIG9mIHBoeXNpY2FsIGludGVncmF0aW9uIGFuZCBEZXZpY2UgVHJlZSBjb25maWd1cmF0aW9uIHRoYXQmIzM5O3MganVzdCBub3QgcHJlc2VudCBpbiBhIHR5cGljYWwgUUVNVSBpbnN0YW5jZS4gU28sIG5vIG1hdHRlciBob3cgY2xldmVyIHRoZSBmdXp6aW5nIHNldHVwLCB3ZSYjMzk7cmUgbmV2ZXIgZ29pbmcgdG8gaGl0IHRoZXNlIGNvZGUgcGF0aHMuIFRoYXQgbWVhbnMgYFdvcnRoRnV6emluZz1mYWxzZWAuIEkgd2lsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byBtYWtlIHN1cmUgdGhhdCBpcyByZXR1cm5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgUXVhbGNvbW0gYXRoMTFrIFdpLUZpIGRyaXZlciYjMzk7cyBBSEIgYnVzIGF0dGFjaG1lbnQgKGFoYi5jKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgUXVhbGNvbW0gU29DIGhhcmR3YXJlIChlLmcuLCBJUFE4MDc0LCBXQ042NzUwKSBhbmQgY29ycmVzcG9uZGluZyBEZXZpY2UgVHJlZSBub2RlcyAoaW5jbHVkaW5nIHJlc2VydmVkIG1lbW9yeSByZWdpb25zIGFuZCByZW1vdGVwcm9jIGhhbmRsZXMpIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBkbyBub3QgZW11bGF0ZSB0aGlzIGhhcmR3YXJlLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBRdWFsY29tbSBhdGgxMWsgV2ktRmkgZHJpdmVyJiMzOTtzIEFIQiBidXMgYXR0YWNobWVudCAoYWhiLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIFdDTjY3NTApIGFuZCBjb3JyZXNwb25kaW5nIERldmljZSBUcmVlIG5vZGVzIChpbmNsdWRpbmcgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHJlbW90ZXByb2MgaGFuZGxlcykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjEwOjQ0Ljc2MTczNTg3OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDg3NjIzMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgUXVhbGNvbW0gYXRoMTFrIFdpLUZpIGRyaXZlcidzIEFIQiBidXMgYXR0YWNobWVudCAoYWhiLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIFdDTjY3NTApIGFuZCBjb3JyZXNwb25kaW5nIERldmljZSBUcmVlIG5vZGVzIChpbmNsdWRpbmcgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHJlbW90ZXByb2MgaGFuZGxlcykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTA6NDQuNzYxNzQxMDg5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTMzMTE5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ZDlmYWVmYTdmYjBiMTJlNzA0MDRkNmFlYTQ5OTJhODBmZmY2NThmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDA3OjEwOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXFxuaW5kZXggMWUxZGVhNDg1NzYwYi4uZWM1YmY1YzlmZDc5MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xcbkBAIC00MzEsMzYgKzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiBcXHRhYi1cXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXFx1MDAzZWh3X3BhcmFtcy5xbWlfc2VydmljZV9pbnNfaWQ7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuK3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwKVxcbiB7XFxuLVxcdGludCBpLCBqO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuK1xcdGludCBqO1xcbiBcXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKylcXG4tXFx0XFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2dycC1cXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xcbitcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaXJxX2dycC1cXHUwMDNlbnVtX2lycTsgaisrKVxcbitcXHRcXHRmcmVlX2lycShhYi1cXHUwMDNlaXJxX251bVtpcnFfZ3JwLVxcdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XFxuIFxcbi1cXHRcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2aXJxX2dycC1cXHUwMDNlbmFwaSk7XFxuLVxcdFxcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXFx1MDAzZW5hcGlfbmRldik7XFxuLVxcdH1cXG4rXFx0bmV0aWZfbmFwaV9kZWwoXFx1MDAyNmlycV9ncnAtXFx1MDAzZW5hcGkpO1xcbitcXHRmcmVlX25ldGRldihpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuK3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIHtcXG4tXFx0aW50IGlycV9pZHg7XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0aWYgKGFiLVxcdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxcbi1cXHRcXHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkrKylcXG4rXFx0XFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldKTtcXG4rfVxcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQ7IGkrKykge1xcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCBpbnQgbWF4X2lkeClcXG4re1xcbitcXHRpbnQgaXJxX2lkeCwgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtYXhfaWR4OyBpKyspIHtcXG4gXFx0XFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aXJxX2lkeCA9IEFUSDExS19JUlFfQ0UwX09GRlNFVCArIGk7XFxuIFxcdFxcdGZyZWVfaXJxKGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcXHUwMDI2YWItXFx1MDAzZWNlLmNlX3BpcGVbaV0pO1xcbiBcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4re1xcbitcXHRpZiAoYWItXFx1MDAzZWh3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpXFxuK1xcdFxcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XFxuIFxcbitcXHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXFx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XFxuIFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxKGFiKTtcXG4gfVxcbiBcXG5AQCAtNTI0LDIwICs1MzIsMjUgQEAgc3RhdGljIGlycXJldHVybl90IGF0aDExa19haGJfZXh0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZylcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIHtcXG4gXFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXFx1MDAyNmFiLVxcdTAwM2Vod19wYXJhbXM7XFxuK1xcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnA7XFxuIFxcdGludCBpLCBqO1xcbiBcXHRpbnQgaXJxO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuIFxcdFxcdHUzMiBudW1faXJxID0gMDtcXG4gXFxuK1xcdFxcdGlycV9ncnAgPSBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xcbitcXG4gXFx0XFx0aXJxX2dycC1cXHUwMDNlYWIgPSBhYjtcXG4gXFx0XFx0aXJxX2dycC1cXHUwMDNlZ3JwX2lkID0gaTtcXG4gXFxuIFxcdFxcdGlycV9ncnAtXFx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcXG4tXFx0XFx0aWYgKCFpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRpZiAoIWlycV9ncnAtXFx1MDAzZW5hcGlfbmRldikge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRpcnFfZ3JwLVxcdTAwM2VudW1faXJxID0gMDtcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdG5ldGlmX25hcGlfYWRkKGlycV9ncnAtXFx1MDAzZW5hcGlfbmRldiwgXFx1MDAyNmlycV9ncnAtXFx1MDAzZW5hcGksXFxuIFxcdFxcdFxcdCAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTtcXG5AQCAtNTg1LDE0ICs1OTgsMTEgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuLVxcdFxcdGlycV9ncnAtXFx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xcbi1cXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgbnVtX2lycTsgaisrKSB7XFxuIFxcdFxcdFxcdGludCBpcnFfaWR4ID0gaXJxX2dycC1cXHUwMDNlaXJxc1tqXTtcXG4gXFxuIFxcdFxcdFxcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLVxcdTAwM2VwZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpcnFfbmFtZVtpcnFfaWR4XSk7XFxuLVxcdFxcdFxcdGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xcbiBcXHRcXHRcXHRpcnFfc2V0X3N0YXR1c19mbGFncyhpcnEsIElSUV9OT0FVVE9FTiB8IElSUV9ESVNBQkxFX1VOTEFaWSk7XFxuIFxcdFxcdFxcdHJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgSVJRRl9UUklHR0VSX1JJU0lORyxcXG5AQCAtNjAwLDExICs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGlycSk7XFxuK1xcdFxcdFxcdFxcdGlycV9ncnAtXFx1MDAzZW51bV9pcnEgPSBqO1xcbitcXHRcXHRcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcXG4gXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRhYi1cXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX3JlcXVlc3RfaXJxOlxcbitcXHRmb3IgKGktLTsgaSBcXHUwMDNlPSAwOyBpLS0pIHtcXG4rXFx0XFx0aXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuK1xcdFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5AQCAtNjI5LDE2ICs2NTIsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0XFx0cmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2NlX2ludGVycnVwdF9oYW5kbGVyLFxcbiBcXHRcXHRcXHRcXHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxcbiBcXHRcXHRcXHRcXHQgIGNlX3BpcGUpO1xcbi1cXHRcXHRpZiAocmV0KVxcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxcXG5cXFwiLCBpcnEpO1xcbitcXHRcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7XFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xcbiBcXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjEwOjQ1LjA3NTc0ODA5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYyMTczNjA1MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgUXVhbGNvbW0gYXRoMTFrIFdpLUZpIGRyaXZlcidzIEFIQiBidXMgYXR0YWNobWVudCAoYWhiLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIFdDTjY3NTApIGFuZCBjb3JyZXNwb25kaW5nIERldmljZSBUcmVlIG5vZGVzIChpbmNsdWRpbmcgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHJlbW90ZXByb2MgaGFuZGxlcykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2Q5ZmFlZmE3ZmIwYjEyZTcwNDA0ZDZhZWE0OTkyYTgwZmZmNjU4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDA3OjEwOjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbmluZGV4IDFlMWRlYTQ4NTc2MGIuLmVjNWJmNWM5ZmQ3OTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG5AQCAtNDMxLDM2ICs0MzEsNDQgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9pbml0X3FtaV9jZV9jb25maWcoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdGFiLVx1MDAzZXFtaS5zZXJ2aWNlX2luc19pZCA9IGFiLVx1MDAzZWh3X3BhcmFtcy5xbWlfc2VydmljZV9pbnNfaWQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXG4rXHRcdFx0XHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnApXG4ge1xuLVx0aW50IGksIGo7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbitcdGludCBqO1xuIFxuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGorKylcbi1cdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqKyspXG4rXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XG4gXG4tXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4tXHRcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KTtcbi1cdH1cbitcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4rXHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIHtcbi1cdGludCBpcnFfaWR4O1xuIFx0aW50IGk7XG4gXG4tXHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcbi1cdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspXG4rXHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xuK31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSsrKSB7XG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4re1xuK1x0aW50IGlycV9pZHgsIGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXhfaWR4OyBpKyspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgKyBpO1xuIFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldKTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuK3tcbitcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuK1x0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuIFxuK1x0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4gXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XG4gfVxuIFxuQEAgLTUyNCwyMCArNTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuK1x0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycDtcbiBcdGludCBpLCBqO1xuIFx0aW50IGlycTtcbiBcdGludCByZXQ7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuK1x0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4rXG4gXHRcdGlycV9ncnAtXHUwMDNlYWIgPSBhYjtcbiBcdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuIFxuIFx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbi1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gMDtcbitcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbitcdFx0fVxuIFxuIFx0XHRuZXRpZl9uYXBpX2FkZChpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiwgXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpLFxuIFx0XHRcdCAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTtcbkBAIC01ODUsMTQgKzU5OCwxMSBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbi1cdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gbnVtX2lycTtcbi1cbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqKyspIHtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnVtX2lycTsgaisrKSB7XG4gXHRcdFx0aW50IGlycV9pZHggPSBpcnFfZ3JwLVx1MDAzZWlycXNbal07XG4gXG4gXHRcdFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoYWItXHUwMDNlcGRldixcbiBcdFx0XHRcdFx0XHQgICAgICBpcnFfbmFtZVtpcnFfaWR4XSk7XG4tXHRcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbiBcdFx0XHRpcnFfc2V0X3N0YXR1c19mbGFncyhpcnEsIElSUV9OT0FVVE9FTiB8IElSUV9ESVNBQkxFX1VOTEFaWSk7XG4gXHRcdFx0cmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcixcbiBcdFx0XHRcdFx0ICBJUlFGX1RSSUdHRVJfUklTSU5HLFxuQEAgLTYwMCwxMSArNjEwLDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRcdGlmIChyZXQpIHtcbiBcdFx0XHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwiLFxuIFx0XHRcdFx0XHQgICBpcnEpO1xuK1x0XHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gajtcbitcdFx0XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XG4rXHRcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbiBcdFx0XHR9XG4rXHRcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbiBcdFx0fVxuK1xuK1x0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX3JlcXVlc3RfaXJxOlxuK1x0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pIHtcbitcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbkBAIC02MjksMTYgKzY1MiwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxuIFx0XHRcdFx0ICBjZV9waXBlKTtcbi1cdFx0aWYgKHJldClcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwiLCBpcnEpO1xuK1x0XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXG4gXHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHR9XG4gXG4gXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuIFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcblwiLCByZXQpO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzoxMDo0NS4wNzU3NDk2MTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjA0NDUyODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXRoMTFrIEFIQiBQYXRjaCBhbmQgVmlydHVhbGl6YXRpb24gRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY2AuIEl0J3MgZm9jdXNlZCBvbiBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCB3aXRoaW4gdGhlIGBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYCBhbmQgYGF0aDExa19haGJfY29uZmlnX2lycWAgZnVuY3Rpb25zLiBXZSd2ZSBnb3QgdGhlIGFkZGl0aW9uIG9mIGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgIGFuZCBgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNgLCB3aGljaCBpcyBnb29kIHRvIHNlZSBmb3IgbW9yZSByb2J1c3QgcmVzb3VyY2UgbWFuYWdlbWVudCBpbiBjYXNlIG9mIGZhaWx1cmVzLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBoZXJlLCBhcyBhbHdheXMsIGlzIHRlc3RhYmlsaXR5LiBUaGlzIGBhdGgxMWtgIGRyaXZlciwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyBzcGVjaWZpYyB0byBRdWFsY29tbSdzIDgwMi4xMWF4IFdMQU4gZGV2aWNlcy4gQW5kIGBhaGIuY2AgaXMgdGhlIG1vZHVsZSB0aGF0IGludGVyZmFjZXMgdGhlIGRyaXZlciB3aXRoIHRoZSBBSEIgYnVzLiBOb3csIEFIQiBpcyBjb21tb25seSBmb3VuZCBpbiBTb0NzIGxpa2UgdGhlIElQUTgwNzQgYW5kIElQUTYwMTguIFRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogQ2FuIHdlIGFjdHVhbGx5IGhpdCB0aGlzIGNvZGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/XG5cblR5cGljYWxseSwgQUhCIGRldmljZXMgYXJlIHBsYXRmb3JtIGRldmljZXMsIGRlZmluZWQgdGhyb3VnaCBEZXZpY2UgVHJlZS4gQSBnZW5lcmljIHg4NiBRRU1VIFZNIHdvbid0IGhhdmUgdGhlc2UgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IGVtdWxhdGVkIG9yIGluamVjdGVkLiBCdXQgY2FuIHdlIGluamVjdCB0aGVzZSBwbGF0Zm9ybSBkZXZpY2VzPyBDYW4gd2UgbGV2ZXJhZ2Ugc3lzZnMgb3IgZGV2aWNlIHRyZWUgb3ZlcmxheXMgZm9yIHRoaXM/IFN5emthbGxlciBjb3VsZCBwb3RlbnRpYWxseSBpbmplY3QgdGhlc2UgZGV2aWNlcywgcHJvdmlkZWQgaXQncyBjb25maWd1cmVkIHRvIGRvIHNvLiBCdXQgdXN1YWxseSwgU3l6a2FsbGVyIHdvbid0IGluamVjdCB0aGVzZSByYW5kb20gU29DLXNwZWNpZmljIEFIQiBkZXZpY2VzIHVubGVzcyB0aGVyZSdzIGEgZGVkaWNhdGVkIHN5eiBkZXNjcmlwdGlvbiBmb3IgaXQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBhdGgxMWtgIGhhcyBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB0byBzZWUgaWYgdGhpcyBpcyBldmVuIGZlYXNpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTA6NTIuNjgwMjA1MDA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjM3NzQxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic3lzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTA6NTIuNzIzNDQ4Njk2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5OTMxMzY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb21wdCdzIENvbnN0cmFpbnRzIGFuZCBQbGFubmluZyBNeSBTdHJhdGVneSoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdC4gVGhlIHByb21wdCBoYXMgYW4gaW1wb3J0YW50IGNhdmVhdDogSSBjYW4ndCBkaXJlY3RseSBzZWFyY2ggc3l6a2FsbGVyJ3Mgc3l6bGFuZyBkZXNjcmlwdGlvbnMuIEl0IGV4cGxpY2l0bHkgcHJvaGliaXRzIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgYmVnaW5zIHdpdGggXCJzeXpfXCIgc2luY2UgdGhvc2UgYXJlIHBzZXVkby1zeXNjYWxscyBub3QgYWN0dWFsbHkgZm91bmQgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGtlZXAgdGhhdCByZXN0cmljdGlvbiBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHVzZSBge3sudG9vbFJlYWREZXNjcmlwdGlvbn19YCBpbnN0ZWFkLCBidXQgSSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGF0IHRvb2wuIE15IGF2YWlsYWJsZSB0b29scyBhcmUgYGdyZXBwZXJgLCBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBgcmVhZC1maWxlYCwgYW5kIGBzZXQtcmVzdWx0c2AuIEkgbmVlZCB0byB3b3JrIHdpdGhpbiB0aG9zZSBib3VuZGFyaWVzLlxuXG5TaW5jZSBJIGNhbid0IHNlYXJjaCBmb3IgdGhlIFwic3l6XFxfXCIgcHJlZml4LCBJIG5lZWQgdG8gZm9jdXMgb24gZmluZGluZyBhIHBhdGggdG8gdW5kZXJzdGFuZCBob3cgYSBzcGVjaWZpYyBmdW5jdGlvbiBjYW4gYmUgcmVhY2hlZC4gTGV0J3Mgc3RhcnQgd2l0aCBgYXRoMTFrL2FoYi5jYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsLCBJIGtub3cgdGhhdCB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBRdWFsY29tbSBBdGhlcm9zIDgwMi4xMWF4IGRldmljZXMuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIEkgY2FuIHJlYWNoIHRoZSBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgbGlrZWx5IGNhbGxlZCBmcm9tIGBhdGgxMWtfYWhiX3Byb2JlYCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTA6NTguNjIyNzY0MzYxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTU4NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDExa19haGJfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMDQ9c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlX2RlaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTEzOTpzdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMzM0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aDExa19haGJfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzM4LVxcdH0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMzM5OlxcdC5wcm9iZSA9IGF0aDExa19haGJfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzQwLVxcdC5yZW1vdmUgPSBhdGgxMWtfYWhiX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTA6NTguNjY0OTI1NDQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYyOTE0MDA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGF0aDExayoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGR5bmFtaWMgZGV2aWNlIGNyZWF0aW9uLiBDYW4gd2UgY3JlYXRlIHBsYXRmb3JtIGRldmljZXMgb24gdGhlIGZseT8gVGVjaG5pY2FsbHksIHllcywgdmlhIHN5c2ZzIG9yIG90aGVyIG1ldGhvZHMsIGJ1dCB1c3VhbGx5LCBTeXprYWxsZXIgZG9lc24ndCBib3RoZXIgdW5sZXNzIHRoZXJlJ3Mgc29tZSBraW5kIG9mIHNwZWNpYWxpemVkIHBzZXVkby1zeXNjYWxsIGludm9sdmVkLiBJJ20gcmVtZW1iZXJpbmcgU3l6a2FsbGVyIGhhcyBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5YCBhbmQgc2ltaWxhciwgYnV0IGZvciBwbGF0Zm9ybSBkZXZpY2VzLCB0aGUgcHJvYmUgbWlnaHQgYmUgcmVsaWFudCBvbiB0aGUgZGV2aWNlIHRyZWUgYmVpbmcgcHJlc2VudC5cblxuSG9sZCBvbiwgdGhlcmUncyBgbWFjODAyMTFfaHdzaW1gIGZvciBXaS1GaSBzaW11bGF0aW9uLCBidXQgYGF0aDExa2AgaXMgYSAqcmVhbCogaGFyZHdhcmUgZHJpdmVyLiBUaGF0J3MgdGhlIGtleSBkaWZmZXJlbmNlLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXMsIGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiBpdD9cblxuVGhlIHByb21wdCBnYXZlIGEgcHJldHR5IGV4cGxpY2l0IHJ1bGUgdG8gZm9sbG93LiBMZXQncyBzZWUuLi4gdGhlIHJ1bGVzIHN0YXRlIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCJcblxuYGF0aDExa2AgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgV2ktRmkgZHJpdmVyLCBRdWFsY29tbSBzcGVjaWZpY2FsbHkuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlLCBlaXRoZXIgQUhCIG9uIFF1YWxjb21tIFNvQ3Mgb3IgUENJZSBjYXJkcy5cblxuUmlnaHQuIEFuZCB0aGUgY3J1Y2lhbCBwb2ludCBpcy4uLiBRRU1VICpkb2Vzbid0KiBlbXVsYXRlIFF1YWxjb21tIGF0aDExayBXaS1GaSBoYXJkd2FyZS4gU28sIGBhdGgxMWtfYWhiX3Byb2JlYCAoYXMgdGhlIGV4YW1wbGUgaW4gdGhlIHBhdGNoIHN1Z2dlc3RzKSB3aWxsICpuZXZlciogYmUgY2FsbGVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGhhcmR3YXJlLCBvciB0aGUgZGV2aWNlIHRyZWUgbm9kZSBuZWVkZWQgdG8gZGVzY3JpYmUgdGhlIGhhcmR3YXJlLCBzaW1wbHkgaXNuJ3QgcHJlc2VudC5cblxuRXZlbiBpZiB3ZSAqY291bGQqIGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSBlbnRyeSwgYGF0aDExa19haGJfcHJvYmVgIHdvdWxkIGZhaWwgZWFybHksIHByb2JhYmx5IHdoZW4gdHJ5aW5nIHRvIHJlYWQgcmVnaXN0ZXJzIG9yIG1hcCBtZW1vcnkgdGhhdCBkb2Vzbid0IGV4aXN0LCBvciBpdCB3b3VsZCByZXF1aXJlIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgYmVoYXZpb3VyIHRoYXQgaXNuJ3QgZW11bGF0ZWQuXG5cbkkgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSBjb2RlIG9mIGBhdGgxMWtfYWhiX3Byb2JlYCB0byBjb25maXJtIHRoYXQgaXQncyBkb2luZyBoYXJkd2FyZSBhY2Nlc3Nlcy4gVGhlbiB0aGUgZGVjaXNpb24gYmVjb21lcyBtdWNoIGNsZWFyZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NDIsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTE6MDYuMjk0MDY3MjAxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjE2MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDExa19haGJfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMDQ9c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlX2RlaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTEzOTpzdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMzM0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aDExa19haGJfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzM4LVxcdH0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMzM5OlxcdC5wcm9iZSA9IGF0aDExa19haGJfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzQwLVxcdC5yZW1vdmUgPSBhdGgxMWtfYWhiX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTE6MDYuMzM2Mjg1NTMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzOTY3MTY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGUgYGF0aDExa19haGJfcHJvYmVgIGZ1bmN0aW9uLCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydC5cblxuKipBbmFseXppbmcgYGF0aDExa19haGJfcHJvYmVgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDExa19haGJfcHJvYmVgIGZ1bmN0aW9uLiBUaGUgbmFtaW5nIHN1Z2dlc3RzIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSBpbml0aWFsaXplcyBhbiBhdGgxMWsgZGV2aWNlIGNvbm5lY3RlZCB2aWEgdGhlIEFIQiBidXMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgaGVyZS4gQUhCIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGxvd2VyLXNwZWVkIGludGVyZmFjZSBjb21wYXJlZCB0byBQQ0kgb3IgUENJZSwgc28gd2hhdCBhcmUgdGhlIHRyYWRlLW9mZnMgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIHBvd2VyIGNvbnN1bXB0aW9uIGZvciB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uP1xuXG5NeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBsb29rIGZvciB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJ20gZ29pbmcgdG8gYmUgYXNzZXNzaW5nIGhvdyB0aGUgZHJpdmVyIGRldGVjdHMgdGhlIGRldmljZSwgcmVxdWVzdHMgcmVzb3VyY2VzLCBhbmQgaGFuZGxlcyBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWMgdG8gdGhlIEFIQiBidXMuIEknbGwgbmVlZCB0byBpZGVudGlmeTpcblxuKiAgICoqUmVzb3VyY2UgYWxsb2NhdGlvbioqOiBXaGVyZSBkb2VzIGl0IGdyYWIgdGhlIEkvTyBtZW1vcnkgcmVnaW9uIGFuZCBpbnRlcnJ1cHQgbGluZXM/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgZGV2aWNlcyBvbiB0aGUgYnVzPyBJJ20gaG9waW5nIHRvIHNlZSBzdGFuZGFyZCByZXNvdXJjZSBtYW5hZ2VtZW50IHByYWN0aWNlcyBiZWluZyBhcHBsaWVkLCBidXQgSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBjdXN0b20gb3Igbm9uLXN0YW5kYXJkIGFwcHJvYWNoZXMuXG4qICAgKipEZXZpY2UgaWRlbnRpZmljYXRpb24qKjogSG93IGRvZXMgaXQgdmVyaWZ5IHRoZSBkZXZpY2UncyBpZGVudGl0eT8gSXMgaXQgdXNpbmcgYSBzcGVjaWZpYyB2ZW5kb3IgYW5kIGRldmljZSBJRCBwYWlyaW5nLCBvciBpcyBpdCByZWx5aW5nIG9uIG1vcmUgZGV0YWlsZWQgcHJvYmluZz8gVGhlIGBhdGgxMWtgIGRyaXZlciBmYW1pbHkgaXMgdXN1YWxseSBwcmV0dHkgd2VsbC1kZWZpbmVkLCBidXQgSSdsbCBzdGlsbCB3YW50IHRvIGNvbmZpcm0uXG4qICAgKipEcml2ZXIgaW5pdGlhbGl6YXRpb24qKjogV2hhdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgZGV2aWNlIGRyaXZlcj8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgcmVxdWlyZWQgZm9yIHRoaXMgQUhCIGNvbmZpZ3VyYXRpb24/IEknbSBleHBlY3Rpbmcgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLCB3aGljaCBpcyBub3JtYWwgZm9yIEFIQi1iYXNlZCBkZXZpY2VzLlxuKiAgICoqRXJyb3IgaGFuZGxpbmcqKjogVGhlIGZpcnN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgaXMgY2hlY2tpbmcgZm9yIHRoZSBleGlzdGVuY2Ugb2YgcmVxdWlyZWQgcmVzb3VyY2VzIHRvIHByb3Blcmx5IGJvb3QgdGhlIGRldmljZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkZXZpY2Ugbm90IGJlaW5nIHByZXNlbnQgb3Igb3RoZXIgcHJvYmUgZmFpbHVyZXMuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGVtYmVkZGVkIHN5c3RlbXMgd2hlcmUgYSBmYXVsdHkgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBjYW4gYmUgYSByZWFsIGhlYWRhY2hlLlxuKiAgICoqQnVzLXNwZWNpZmljIHF1aXJrcyoqOiBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBBSEItc3BlY2lmaWMgcXVpcmtzIG9yIHdvcmthcm91bmRzLiBBcmUgdGhlcmUgYW55IHBhcnRpY3VsYXIgQUhCIHRpbWluZyBjb25zaWRlcmF0aW9ucz8gQW55IHNwZWNpZmljIERNQSBzZXR1cCB0aGF0J3MgbmVjZXNzYXJ5IGR1ZSB0byB0aGUgQUhCIGJ1cyBjaGFyYWN0ZXJpc3RpY3M/XG4qICAgKipJbnRlcnJ1cHQgc2V0dXAqKjogV2l0aCBBSEIgYmVpbmcgYW4gaW50ZXJydXB0LWJhc2VkIGJ1cywgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGRyaXZlciBjb25maWd1cmVzIGFuZCBoYW5kbGVzIGludGVycnVwdHMuIEhvdyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYXR0YWNoZWQ/IFdoYXQncyB0aGUgaW50ZXJydXB0IHByaW9yaXR5IGFuZCBzaGFyaW5nIHNjaGVtZT9cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdG8gdW5kZXJzdGFuZCBob3cgd2VsbCB0aGUgZHJpdmVyIGhhbmRsZXMgZXJyb3Igc2NlbmFyaW9zLiBBbnkgc2xvcHB5IGVycm9yIGhhbmRsaW5nIGNhbiBsZWFkIHRvIHN5c3RlbSBpbnN0YWJpbGl0eSwgZXNwZWNpYWxseSBpbiBhIHdpcmVsZXNzIGNvbnRleHQuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHJvYnVzdCBlbm91Z2guIEknbGwgc3RhcnQgYnkgcmVhZGluZyB0aGUgY29kZSwgbGluZSBieSBsaW5lLCB3aGlsZSBrZWVwaW5nIHRoZXNlIHBvaW50cyBpbiBtaW5kLiBMZXQncyBnZXQgZ29pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNDAsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzoxMToxMS43NzU5NTk3ODdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTM5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEzOTpcXHRzdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4xMTQwOlxcdHtcXG4xMTQxOlxcdFxcdHN0cnVjdCBhdGgxMWtfYmFzZSAqYWI7XFxuMTE0MjpcXHRcXHRjb25zdCBzdHJ1Y3QgYXRoMTFrX2hpZl9vcHMgKmhpZl9vcHM7XFxuMTE0MzpcXHRcXHRjb25zdCBzdHJ1Y3QgYXRoMTFrX3BjaV9vcHMgKnBjaV9vcHM7XFxuMTE0NDpcXHRcXHRlbnVtIGF0aDExa19od19yZXYgaHdfcmV2O1xcbjExNDU6XFx0XFx0aW50IHJldDtcXG4xMTQ2OlxcdFxcbjExNDc6XFx0XFx0aHdfcmV2ID0gKHVpbnRwdHJfdClkZXZpY2VfZ2V0X21hdGNoX2RhdGEoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuMTE0ODpcXHRcXG4xMTQ5OlxcdFxcdHN3aXRjaCAoaHdfcmV2KSB7XFxuMTE1MDpcXHRcXHRjYXNlIEFUSDExS19IV19JUFE4MDc0OlxcbjExNTE6XFx0XFx0Y2FzZSBBVEgxMUtfSFdfSVBRNjAxOF9IVzEwOlxcbjExNTI6XFx0XFx0Y2FzZSBBVEgxMUtfSFdfSVBRNTAxOF9IVzEwOlxcbjExNTM6XFx0XFx0XFx0aGlmX29wcyA9IFxcdTAwMjZhdGgxMWtfYWhiX2hpZl9vcHNfaXBxODA3NDtcXG4xMTU0OlxcdFxcdFxcdHBjaV9vcHMgPSBOVUxMO1xcbjExNTU6XFx0XFx0XFx0YnJlYWs7XFxuMTE1NjpcXHRcXHRjYXNlIEFUSDExS19IV19XQ042NzUwX0hXMTA6XFxuMTE1NzpcXHRcXHRcXHRoaWZfb3BzID0gXFx1MDAyNmF0aDExa19haGJfaGlmX29wc193Y242NzUwO1xcbjExNTg6XFx0XFx0XFx0cGNpX29wcyA9IFxcdTAwMjZhdGgxMWtfYWhiX3BjaV9vcHNfd2NuNjc1MDtcXG4xMTU5OlxcdFxcdFxcdGJyZWFrO1xcbjExNjA6XFx0XFx0ZGVmYXVsdDpcXG4xMTYxOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInVuc3VwcG9ydGVkIGRldmljZSB0eXBlICVkXFxcXG5cXFwiLCBod19yZXYpO1xcbjExNjI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExNjM6XFx0XFx0fVxcbjExNjQ6XFx0XFxuMTE2NTpcXHRcXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIERNQV9CSVRfTUFTSygzMikpO1xcbjExNjY6XFx0XFx0aWYgKHJldCkge1xcbjExNjc6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHNldCAzMi1iaXQgY29uc2lzdGVudCBkbWFcXFxcblxcXCIpO1xcbjExNjg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTY5OlxcdFxcdH1cXG4xMTcwOlxcdFxcbjExNzE6XFx0XFx0YWIgPSBhdGgxMWtfY29yZV9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2Yoc3RydWN0IGF0aDExa19haGIpLFxcbjExNzI6XFx0XFx0XFx0XFx0ICAgICAgIEFUSDExS19CVVNfQUhCKTtcXG4xMTczOlxcdFxcdGlmICghYWIpIHtcXG4xMTc0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBhdGgxMWsgYmFzZVxcXFxuXFxcIik7XFxuMTE3NTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMTc2OlxcdFxcdH1cXG4xMTc3OlxcdFxcbjExNzg6XFx0XFx0YWItXFx1MDAzZWhpZi5vcHMgPSBoaWZfb3BzO1xcbjExNzk6XFx0XFx0YWItXFx1MDAzZXBkZXYgPSBwZGV2O1xcbjExODA6XFx0XFx0YWItXFx1MDAzZWh3X3JldiA9IGh3X3JldjtcXG4xMTgxOlxcdFxcdGFiLVxcdTAwM2Vmd19tb2RlID0gQVRIMTFLX0ZJUk1XQVJFX01PREVfTk9STUFMO1xcbjExODI6XFx0XFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYWIpO1xcbjExODM6XFx0XFxuMTE4NDpcXHRcXHRyZXQgPSBhdGgxMWtfcGNpY19yZWdpc3Rlcl9wY2lfb3BzKGFiLCBwY2lfb3BzKTtcXG4xMTg1OlxcdFxcdGlmIChyZXQpIHtcXG4xMTg2OlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgUENJIG9wczogJWRcXFxcblxcXCIsIHJldCk7XFxuMTE4NzpcXHRcXHRcXHRnb3RvIGVycl9jb3JlX2ZyZWU7XFxuMTE4ODpcXHRcXHR9XFxuMTE4OTpcXHRcXG4xMTkwOlxcdFxcdHJldCA9IGF0aDExa19jb3JlX3ByZV9pbml0KGFiKTtcXG4xMTkxOlxcdFxcdGlmIChyZXQpXFxuMTE5MjpcXHRcXHRcXHRnb3RvIGVycl9jb3JlX2ZyZWU7XFxuMTE5MzpcXHRcXG4xMTk0OlxcdFxcdHJldCA9IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKGFiKTtcXG4xMTk1OlxcdFxcdGlmIChyZXQpXFxuMTE5NjpcXHRcXHRcXHRnb3RvIGVycl9jb3JlX2ZyZWU7XFxuMTE5NzpcXHRcXG4xMTk4OlxcdFxcdHJldCA9IGF0aDExa19haGJfY2VfcmVtYXAoYWIpO1xcbjExOTk6XFx0XFx0aWYgKHJldClcXG4xMjAwOlxcdFxcdFxcdGdvdG8gZXJyX2NvcmVfZnJlZTtcXG4xMjAxOlxcdFxcbjEyMDI6XFx0XFx0cmV0ID0gYXRoMTFrX2FoYl9md19yZXNvdXJjZXNfaW5pdChhYik7XFxuMTIwMzpcXHRcXHRpZiAocmV0KVxcbjEyMDQ6XFx0XFx0XFx0Z290byBlcnJfY2VfdW5tYXA7XFxuMTIwNTpcXHRcXG4xMjA2OlxcdFxcdHJldCA9IGF0aDExa19haGJfc2V0dXBfc21wMnBfaGFuZGxlKGFiKTtcXG4xMjA3OlxcdFxcdGlmIChyZXQpXFxuMTIwODpcXHRcXHRcXHRnb3RvIGVycl9md19kZWluaXQ7XFxuMTIwOTpcXHRcXG4xMjEwOlxcdFxcdHJldCA9IGF0aDExa19oYWxfc3JuZ19pbml0KGFiKTtcXG4xMjExOlxcdFxcdGlmIChyZXQpXFxuMTIxMjpcXHRcXHRcXHRnb3RvIGVycl9yZWxlYXNlX3NtcDJwX2hhbmRsZTtcXG4xMjEzOlxcdFxcbjEyMTQ6XFx0XFx0cmV0ID0gYXRoMTFrX2NlX2FsbG9jX3BpcGVzKGFiKTtcXG4xMjE1OlxcdFxcdGlmIChyZXQpIHtcXG4xMjE2OlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEyMTc6XFx0XFx0XFx0Z290byBlcnJfaGFsX3NybmdfZGVpbml0O1xcbjEyMTg6XFx0XFx0fVxcbjEyMTk6XFx0XFxuMTIyMDpcXHRcXHRhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XFxuMTIyMTpcXHRcXG4xMjIyOlxcdFxcdHJldCA9IGF0aDExa19jb3JlX2dldF9ycHJvYyhhYik7XFxuMTIyMzpcXHRcXHRpZiAocmV0KVxcbjEyMjQ6XFx0XFx0XFx0Z290byBlcnJfY2VfZnJlZTtcXG4xMjI1OlxcdFxcbjEyMjY6XFx0XFx0cmV0ID0gYXRoMTFrX2NvcmVfaW5pdChhYik7XFxuMTIyNzpcXHRcXHRpZiAocmV0KSB7XFxuMTIyODpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGluaXQgY29yZTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTIyOTpcXHRcXHRcXHRnb3RvIGVycl9jZV9mcmVlO1xcbjEyMzA6XFx0XFx0fVxcbjEyMzE6XFx0XFxuMTIzMjpcXHRcXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoYWIpO1xcbjEyMzM6XFx0XFx0aWYgKHJldCkge1xcbjEyMzQ6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBjb25maWd1cmUgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMjM1OlxcdFxcdFxcdGdvdG8gZXJyX2NlX2ZyZWU7XFxuMTIzNjpcXHRcXHR9XFxuMTIzNzpcXHRcXG4xMjM4OlxcdFxcdGF0aDExa19xbWlfZndyZXNldF9mcm9tX2NvbGRfYm9vdChhYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjExOjExLjc3NjA2MTgyN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ5Njk3MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBQcm9iZSBhbmQgUmVzb3VyY2UgU2V0dXAqKlxuXG5NeSBpbml0aWFsIG1vdmUgaW4gdGhpcyBwcm9iZSBmdW5jdGlvbiBpcyB0byBncmFiIHRoZSBoYXJkd2FyZSByZXZpc2lvbiB1c2luZyBgZGV2aWNlX2dldF9tYXRjaF9kYXRhKFx1MDAyNnBkZXYtXHUwMDNlZGV2KWAuIFRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSwgSSBuZWVkIHRvIGtub3cgd2hhdCBJJ20gZGVhbGluZyB3aXRoIGJlZm9yZSBJIG1vdmUgZm9yd2FyZC4gTm93IHRoYXQgSSBoYXZlIHRoZSBoYXJkd2FyZSByZXZpc2lvbiwgdGhlIG5leHQgY3J1Y2lhbCBzdGVwIGlzIHNldHRpbmcgdXAgdGhlIHJlc291cmNlcyB3aXRoIGBhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlcyhhYilgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbWFnaWMgbGlrZWx5IGhhcHBlbnMsIHNvIEkgbmVlZCB0byBkaWcgaW50byB3aGF0IHRoaXMgZnVuY3Rpb24gKmFjdHVhbGx5KiBkb2VzLiBJdCdzIHRpbWUgdG8gZm9sbG93IHRoZSB0cmFpbCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIGRldmljZSdzIHJlc291cmNlcyBhcmUgYmVpbmcgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM4MywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTE6MTUuODI1NzYwODY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTk5NTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9OTE2PXN0YXRpYyB2b2lkIGF0aDExa19haGJfcmVsZWFzZV9zbXAycF9oYW5kbGUoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtOTI1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6OTI2OnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTkyNy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMzk9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExOTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTk0OlxcdHJldCA9IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExOTUtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTE6MTUuODY3NzU5MjY2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTM5NTc5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUgd2UgZ28uLi5cblxuKipEZWx2aW5nIGludG8gYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlc2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBgYXRoMTFrYCBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBob3cgaXQgcmVsYXRlcyB0byB0aGUgQUhCIGJ1cyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gR2l2ZW4gdGhlIG5hbWUsIEknbSBleHBlY3RpbmcgaXQgdG8gaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBoYXJkd2FyZSByZXNvdXJjZXMgbmVlZGVkIGJ5IHRoZSBkcml2ZXIgb24gYW4gQUhCLWNvbm5lY3RlZCBkZXZpY2UuXG5cbkkgaW1tZWRpYXRlbHkgd2FudCB0byBwaW5wb2ludCB3aGF0IGV4YWN0bHkgXCJyZXNvdXJjZXNcIiBlbmNvbXBhc3MgaGVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgRE1BIGNoYW5uZWxzPyBNZW1vcnkgcmVnaW9ucz8gSW50ZXJydXB0IGxpbmVzPyBPciBwZXJoYXBzIGEgY29tYmluYXRpb24gb2YgdGhlc2UgYW5kIG90aGVyIEhXLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zPyBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgdG8gc2VlIGhvdyB0aGVzZSByZXNvdXJjZXMgYXJlIGlkZW50aWZpZWQsIHJlcXVlc3RlZCwgYW5kLCBjcnVjaWFsbHksIHByb3RlY3RlZCBmcm9tIGNvbmZsaWN0cy5cblxuVGhlIEFIQiBidXMgaXRzZWxmIGlzIGEga2V5IHBpZWNlIG9mIHRoaXMgcHV6emxlLiBIb3cgZG9lcyB0aGUgY29kZSBpbnRlcmFjdCB3aXRoIHRoZSBBSEIgYnJpZGdlPyBJcyB0aGVyZSBhbnkgc3BlY2lmaWMgYnVzIGNsb2NrIGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQsIGFuZCBpZiBzbywgaG93IGlzIGl0IGhhbmRsZWQ/IEFyZSB0aGVyZSBhbnkgcG93ZXItbWFuYWdlbWVudCBjb25zaWRlcmF0aW9ucyBpbiB0aGlzIHNldHVwLCBvciBpcyBpdCBhc3N1bWVkIHRoZSBBSEIgaXMgYWxyZWFkeSBwb3dlcmVkIHVwIGFuZCByZWFkeT9cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBXaGF0IGFyZSB0aGUgZXJyb3IgcGF0aHMsIGFuZCB3aGF0IGtpbmQgb2YgcmVjb3Zlcnkgb3IgY2xlYW51cCBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZT8gR29vZCByZXNvdXJjZSBtYW5hZ2VtZW50IGlzIGNyaXRpY2FsLCBhbmQgYSByb2J1c3QgaW1wbGVtZW50YXRpb24gc2hvdWxkIGhhdmUgZ3JhY2VmdWwgZXJyb3IgaGFuZGxpbmcuIEFsc28sIHdoYXQgZG9lcyB0aGUgcmV0dXJuIHZhbHVlIHNpZ25hbCB0byB0aGUgY2FsbGVyIGFuZCB3aHk/XG5cbkZpbmFsbHksIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IGFueSBjdXN0b20gc3RydWN0dXJlcyBvciBlbnVtcyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgQUhCIGludGVyZmFjZS4gSSdtIGxvb2tpbmcgZm9yIGNsZWFyLCBjb25jaXNlIGRlZmluaXRpb25zIHRoYXQgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGRhdGEgYW5kIGNvbnRyb2wuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGxpdmVzIHVwIHRvIG15IGV4cGVjdGF0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6OTk0NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjExOjE5Ljg4MTcxOTczMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkyNixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkyNjpcXHRzdGF0aWMgaW50IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIDkyNzpcXHR7XFxuIDkyODpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gYWItXFx1MDAzZXBkZXY7XFxuIDkyOTpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXM7XFxuIDkzMDpcXHRcXHR2b2lkIF9faW9tZW0gKm1lbTtcXG4gOTMxOlxcdFxcbiA5MzI6XFx0XFx0aWYgKGFiLVxcdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxcbiA5MzM6XFx0XFx0XFx0cmV0dXJuIGF0aDExa19haGJfc2V0dXBfbXNpX3Jlc291cmNlcyhhYik7XFxuIDkzNDpcXHRcXG4gOTM1OlxcdFxcdG1lbSA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAsIFxcdTAwMjZtZW1fcmVzKTtcXG4gOTM2OlxcdFxcdGlmIChJU19FUlIobWVtKSkge1xcbiA5Mzc6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiaW9yZW1hcCBlcnJvclxcXFxuXFxcIik7XFxuIDkzODpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtZW0pO1xcbiA5Mzk6XFx0XFx0fVxcbiA5NDA6XFx0XFxuIDk0MTpcXHRcXHRhYi1cXHUwMDNlbWVtID0gbWVtO1xcbiA5NDI6XFx0XFx0YWItXFx1MDAzZW1lbV9sZW4gPSByZXNvdXJjZV9zaXplKG1lbV9yZXMpO1xcbiA5NDM6XFx0XFxuIDk0NDpcXHRcXHRyZXR1cm4gMDtcXG4gOTQ1OlxcdH1cXG4gOTQ2OlxcdFxcbiA5NDc6XFx0c3RhdGljIGludCBhdGgxMWtfYWhiX3NldHVwX21zYV9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gOTQ4OlxcdHtcXG4gOTQ5OlxcdFxcdHN0cnVjdCBhdGgxMWtfYWhiICphYl9haGIgPSBhdGgxMWtfYWhiX3ByaXYoYWIpO1xcbiA5NTA6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gYWItXFx1MDAzZWRldjtcXG4gOTUxOlxcdFxcdHN0cnVjdCByZXNvdXJjZSByO1xcbiA5NTI6XFx0XFx0aW50IHJldDtcXG4gOTUzOlxcdFxcbiA5NTQ6XFx0XFx0cmV0ID0gb2ZfcmVzZXJ2ZWRfbWVtX3JlZ2lvbl90b19yZXNvdXJjZShkZXYtXFx1MDAzZW9mX25vZGUsIDAsIFxcdTAwMjZyKTtcXG4gOTU1OlxcdFxcdGlmIChyZXQpIHtcXG4gOTU2OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiZmFpbGVkIHRvIHJlc29sdmUgbXNhIGZpeGVkIHJlZ2lvblxcXFxuXFxcIik7XFxuIDk1NzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5NTg6XFx0XFx0fVxcbiA5NTk6XFx0XFxuIDk2MDpcXHRcXHRhYl9haGItXFx1MDAzZWZ3Lm1zYV9wYWRkciA9IHIuc3RhcnQ7XFxuIDk2MTpcXHRcXHRhYl9haGItXFx1MDAzZWZ3Lm1zYV9zaXplID0gcmVzb3VyY2Vfc2l6ZShcXHUwMDI2cik7XFxuIDk2MjpcXHRcXG4gOTYzOlxcdFxcdHJldCA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGV2LVxcdTAwM2VvZl9ub2RlLCAxLCBcXHUwMDI2cik7XFxuIDk2NDpcXHRcXHRpZiAocmV0KSB7XFxuIDk2NTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcImZhaWxlZCB0byByZXNvbHZlIGNlIGZpeGVkIHJlZ2lvblxcXFxuXFxcIik7XFxuIDk2NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5Njc6XFx0XFx0fVxcbiA5Njg6XFx0XFxuIDk2OTpcXHRcXHRhYl9haGItXFx1MDAzZWZ3LmNlX3BhZGRyID0gci5zdGFydDtcXG4gOTcwOlxcdFxcdGFiX2FoYi1cXHUwMDNlZncuY2Vfc2l6ZSA9IHJlc291cmNlX3NpemUoXFx1MDAyNnIpO1xcbiA5NzE6XFx0XFxuIDk3MjpcXHRcXHRyZXR1cm4gMDtcXG4gOTczOlxcdH1cXG4gOTc0OlxcdFxcbiA5NzU6XFx0c3RhdGljIGludCBhdGgxMWtfYWhiX2NlX3JlbWFwKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjExOjE5Ljg4MTgxNjc4MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODQ4NzQwMTQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIGluIFN0YW5kYXJkIFFFTVUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhdGgxMWtgIGRyaXZlciBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIEFIQiB2YXJpYW50LiBUaGUgY29kZSB1c2VzIGBkZXZtX3BsYXRmb3JtX2dldF9hbmRfaW9yZW1hcF9yZXNvdXJjZWAgYW5kIHJlbGllcyBvbiBhIHBoeXNpY2FsIG1lbW9yeSByZXNvdXJjZSBkZWZpbmVkIGZvciB0aGUgcGxhdGZvcm0gZGV2aWNlLiBEaWdnaW5nIGRlZXBlciwgYGF0aDExa19haGJfcHJvYmVgIGNhbGxzIGludG8gZnVuY3Rpb25zIHRoYXQgdWx0aW1hdGVseSBkZXBlbmQgb24gYSBEZXZpY2UgVHJlZSBub2RlIHdpdGggcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgdmlhIGBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlYC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS5cblxuSW4gYSB2YW5pbGxhIFFFTVUgc2V0dXAsIGxpa2UgdGhlIG9uZSBzeXprYWxsZXIgdHlwaWNhbGx5IHVzZXMgZm9yIHg4Nl82NCwgdGhlcmUncyBubyBwcmUtZGVmaW5lZCBEZXZpY2UgVHJlZSB3aXRoIHRoZSBuZWNlc3Nhcnkgbm9kZXMgZm9yIGBhdGgxMWtgLCBub3IgYXJlIHRoZSBwbGF0Zm9ybSBkZXZpY2VzIHByZXNlbnQuIEkgaGFkIGEgcXVpY2sgdGhvdWdodCBhYm91dCBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5YCwgYnV0IHRoYXQncyBhIHJlZCBoZXJyaW5nOyBpdCdzIGZvciBuZXRsaW5rLCBub3QgcGxhdGZvcm0gZGV2aWNlIGluamVjdGlvbi4gU2ltaWxhcmx5LCBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIHBsYXRmb3JtIGRldmljZSBpbmplY3Rpb24gY2FwYWJpbGl0eSB1c2luZyBwc2V1ZG8tc3lzY2FsbHMgYnV0IEkgY2FuJ3QgZmluZCBhbnkgc3BlY2lmaWMgYHN5el9gIHBzZXVkby1zeXNjYWxscyBmb3IgYXRoMTFrLiBJIGFsc28ga25vdyB0aGF0IHN5emthbGxlciBydW5zIG9uIEFSTTY0LCBhbmQgY2FuIHVzZSBEZXZpY2UgVHJlZXMgdGhlcmUsIGJ1dCBpdCBzdGlsbCB3b24ndCBoYXZlIHRoZSBzcGVjaWZpYyBub2RlcyBmb3IgYXRoMTFrIHVubGVzcyBpdCdzIHJ1bm5pbmcgb24gc3BlY2lmaWMgcGh5c2ljYWwgUXVhbGNvbW0gaGFyZHdhcmUuXG5cbk5vdywgdGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHN0YXRlIHRoYXQgY29kZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUsIHNob3VsZCBiZSBtYXJrZWQgYXMgbm90IHdvcnRoIGZ1enppbmcuIGBhdGgxMWtgIGlzIGEgdmVuZG9yLXNwZWNpZmljIFdpLUZpIGRyaXZlciBmcm9tIFF1YWxjb21tLiBJdCAqcmVxdWlyZXMqIHBoeXNpY2FsIGhhcmR3YXJlLCBlaXRoZXIgQUhCIG9uIFF1YWxjb21tIFNvQ3Mgb3IgYSBQQ0llIGNhcmQsIG5vdCBzb21ldGhpbmcgZW11bGF0ZWQuIEFuZCBpdCdzIGRlZmluaXRlbHkgbm90IHRlc3RhYmxlIHdpdGggYG1hYzgwMjExX2h3c2ltYCwgd2hpY2ggaXMgYW4gZW50aXJlbHkgc2VwYXJhdGUgc29mdHdhcmUtc2ltdWxhdGVkIFdpLUZpIGRyaXZlci5cblxuU28sIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAsIHdoaWNoIEkgYXNzdW1lIGFyZSBwYXJ0IG9mIHRoZSBgYXRoMTFrX2FoYmAgcHJvYmUgcGF0aCwgYXJlICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuXG5cblRoZW4gSSBjaGVja2VkIG15c2VsZi4gSXMgdGhlcmUgYW55IHNsaW0gY2hhbmNlIHN5emthbGxlciBjYW4gcmVhY2ggaXQ/XG5JIGRpZCBzZWUgYHN5el9wY2lfZGV2aWNlX2FkZGAgdG8gaW5qZWN0IFBDSSBkZXZpY2VzLCBidXQgdGhhdCdzIGZvciB0aGUgUENJIGJ1cywgbm90IHRoZSBBSEIgYnVzLiBFdmVuIGlmIGl0ICp3ZXJlKiB0aGUgUENJIGJ1cywgaW5qZWN0aW5nIGEgUENJIGRldmljZSB3b3VsZCBsaWtlbHkgZmFpbCBlYXJseSBkdXJpbmcgcHJvYmUgYW55d2F5IHdoZW4gdGhlIGRyaXZlciB0cmllcyB0byBhY2Nlc3MgaGFyZHdhcmUgcmVnaXN0ZXJzIHVubGVzcyB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgZW11bGF0ZWQuXG5cbk1vcmUgaW1wb3J0YW50bHksIHRoZXJlIGlzbid0IGFueSBlcXVpdmFsZW50IG9mIGBzeXpfYWhiX2RldmljZV9hZGRgLiBQbGF0Zm9ybSBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgaW5zdGFudGlhdGVkIGZyb20gdGhlIERldmljZSBUcmVlLCBBQ1BJLCBvciBib2FyZCBmaWxlcywgbm9uZSBvZiB3aGljaCBhcmUgYXZhaWxhYmxlLiBJIHRyaWVkIHRvIHNlZSBpZiBhbnkgbmV3IHBzZXVkby1zeXNjYWxscyBjb3VsZCBleGlzdCwgYnV0IEkga25vdyBmcm9tIG15IG93biBleHBlcmllbmNlIHRoYXQgc3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGdlbmVyaWMgcGxhdGZvcm0gZGV2aWNlIGluamVjdG9yIHRoYXQgY2FuIGZha2UgZGV2aWNlIHRyZWUgbm9kZXMsIGFuZCByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucyByZXF1aXJlZCBieSBgYXRoMTFrX2FoYl9wcm9iZWAuIEFsc28sIGV2ZW4gaWYgSSBjb3VsZCBzb21laG93IGluamVjdCBhIHBsYXRmb3JtIGRldmljZSwgdGhlIHByb2JlIHdvdWxkIGZhaWwgYW55d2F5LiBUaGlzIGRyaXZlciByZXF1aXJlcyBhIHJlbW90ZSBwcm9jZXNzb3IgKHJwcm9jKSB0byBsb2FkIGZpcm13YXJlLCBzcGVjaWZpY2FsbHkgYGF0aDExa19jb3JlX2dldF9ycHJvYyhhYilgLCB3aGljaCBJIGtub3cgY2FuJ3QgYmUgYXZhaWxhYmxlIGluIHN0YW5kYXJkIFFFTVUuXG5cblRoZXJlZm9yZSwgdGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgdW5xdWVzdGlvbmFibHkgdW5yZWFjaGFibGUgaW4gdGhlIHR5cGljYWwgUUVNVSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE4NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjExOjM4LjM2OTIyMTU1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE4MDczMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9ODA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTFrX2hpZl9vcHMgYXRoMTFrX2FoYl9oaWZfb3BzX3djbjY3NTAgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTgyNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjgyODpzdGF0aWMgaW50IGF0aDExa19jb3JlX2dldF9ycHJvYyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtODI5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEzOT1zdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIyMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEyMjI6XFx0cmV0ID0gYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEyMjMtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTE6MzguNDExMDMzNjY4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjIxNTgwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gZXhwZWN0aW5nIGl0IHRvIGJlIHJlbGF0ZWQgdG8gcmV0cmlldmluZyBhIHJlbW90ZSBwcm9jZXNzb3IgY29udGV4dCBvciBhIHNpbWlsYXIgcmVzb3VyY2Ugd2l0aGluIHRoZSBhdGgxMWsgZHJpdmVyLCBsaWtlbHkgaW52b2x2ZWQgd2l0aCBoYXJkd2FyZSBvZmZsb2FkaW5nIG9yIG1hbmFnaW5nIGNvbW11bmljYXRpb24gd2l0aCBhIGRlZGljYXRlZCBjby1wcm9jZXNzb3Igb24gdGhlIFF1YWxjb21tIEF0aGVyb3Mgd2lyZWxlc3MgY2hpcHNldC4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gc2l0cyBhdCB0aGUgY29yZSBvZiB0aGUgZHJpdmVyJ3Mgb3BlcmF0aW9uLCBzbyBpdCdzIHByb2JhYmx5IGNyaXRpY2FsIHRvIHRoZSBvdmVyYWxsIGZ1bmN0aW9uYWxpdHkuIEkgYW50aWNpcGF0ZSBpdCBkZWFscyB3aXRoIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBMZXQncyBzZWUgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMDcsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzoxMTo0MS41NzMxOTM2MjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MjgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4Mjg6XFx0c3RhdGljIGludCBhdGgxMWtfY29yZV9nZXRfcnByb2Moc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gODI5OlxcdHtcXG4gODMwOlxcdFxcdHN0cnVjdCBhdGgxMWtfYWhiICphYl9haGIgPSBhdGgxMWtfYWhiX3ByaXYoYWIpO1xcbiA4MzE6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gYWItXFx1MDAzZWRldjtcXG4gODMyOlxcdFxcdHN0cnVjdCBycHJvYyAqcHJwcm9jO1xcbiA4MzM6XFx0XFx0cGhhbmRsZSBycHJvY19waGFuZGxlO1xcbiA4MzQ6XFx0XFxuIDgzNTpcXHRcXHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwicWNvbSxycHJvY1xcXCIsIFxcdTAwMjZycHJvY19waGFuZGxlKSkge1xcbiA4MzY6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBnZXQgcTZfcnByb2MgaGFuZGxlXFxcXG5cXFwiKTtcXG4gODM3OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA4Mzg6XFx0XFx0fVxcbiA4Mzk6XFx0XFxuIDg0MDpcXHRcXHRwcnByb2MgPSBycHJvY19nZXRfYnlfcGhhbmRsZShycHJvY19waGFuZGxlKTtcXG4gODQxOlxcdFxcdGlmICghcHJwcm9jKVxcbiA4NDI6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXFx1MDAyNmFiLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIC1FUFJPQkVfREVGRVIsIFxcXCJmYWlsZWQgdG8gZ2V0IHJwcm9jXFxcXG5cXFwiKTtcXG4gODQzOlxcdFxcdGFiX2FoYi1cXHUwMDNldGd0X3Jwcm9jID0gcHJwcm9jO1xcbiA4NDQ6XFx0XFxuIDg0NTpcXHRcXHRyZXR1cm4gMDtcXG4gODQ2OlxcdH1cXG4gODQ3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzoxMTo0MS41NzMyNzg2NTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY3NjA1MDUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBUaGlzIENvZGUgaXMgVW5mdXp6YWJsZSBpbiBhIFN0YW5kYXJkIEVudmlyb25tZW50KipcblxuT2theSwgc28gSSd2ZSBleGFtaW5lZCB0aGlzIHBhdGNoLCBhbmQgSSd2ZSBjb21lIHRvIGEgZmlybSBjb25jbHVzaW9uOiB0aGlzIGlzbid0IHNvbWV0aGluZyB3ZSBjYW4gcmVhbGlzdGljYWxseSBmdXp6LiBJdCBib2lscyBkb3duIHRvIHRoaXM6IHRoZSBjb2RlIHdlJ3JlIGxvb2tpbmcgYXQsIHNwZWNpZmljYWxseSB0aGUgZXJyb3IgaGFuZGxpbmcgbW9kaWZpY2F0aW9ucyBpbiBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIHdpdGhpbiB0aGUgUXVhbGNvbW0gYXRoMTFrIFdpLUZpIGRyaXZlciwgaXMgKmNvbXBsZXRlbHkqIGRlcGVuZGVudCBvbiB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlLiBXZSdyZSB0YWxraW5nIFF1YWxjb21tIFNvQ3Mg4oCTIElQUTgwNzQsIFdDTjY3NTAsIHRoYXQgc29ydCBvZiB0aGluZyDigJMgYW5kLCBjcml0aWNhbGx5LCB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZSBlbnRyaWVzLiBJdCBhYnNvbHV0ZWx5IG5lZWRzIHRoYXQgYHFjb20scnByb2NgIHByb3BlcnR5IGFuZCBhIHJlbW90ZXByb2MgZGV2aWNlIGF2YWlsYWJsZS5cblxuVGhlIGNydXggb2YgdGhlIGlzc3VlIGlzIHRoYXQgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBzaW1wbHkgKmRvIG5vdCogZW11bGF0ZSB0aGlzIGhhcmR3YXJlLiBUaGVyZSdzIG5vIHdheSB0byBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBjb25kaXRpb25zIGZvciB0aGlzIGNvZGUgdG8gYmUgZXhlY3V0ZWQgd2l0aGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlIGRyaXZlciByZXF1aXJlcyBhIGxldmVsIG9mIHBoeXNpY2FsIGludGVncmF0aW9uIGFuZCBEZXZpY2UgVHJlZSBjb25maWd1cmF0aW9uIHRoYXQncyBqdXN0IG5vdCBwcmVzZW50IGluIGEgdHlwaWNhbCBRRU1VIGluc3RhbmNlLiBTbywgbm8gbWF0dGVyIGhvdyBjbGV2ZXIgdGhlIGZ1enppbmcgc2V0dXAsIHdlJ3JlIG5ldmVyIGdvaW5nIHRvIGhpdCB0aGVzZSBjb2RlIHBhdGhzLiBUaGF0IG1lYW5zIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIHdpbGwgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gbWFrZSBzdXJlIHRoYXQgaXMgcmV0dXJuZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzcxLCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjExOjQ3LjI0OTMzMDk4M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBRdWFsY29tbSBhdGgxMWsgV2ktRmkgZHJpdmVyJ3MgQUhCIGJ1cyBhdHRhY2htZW50IChhaGIuYykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFF1YWxjb21tIFNvQyBoYXJkd2FyZSAoZS5nLiwgSVBRODA3NCwgV0NONjc1MCkgYW5kIGNvcnJlc3BvbmRpbmcgRGV2aWNlIFRyZWUgbm9kZXMgKGluY2x1ZGluZyByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucyBhbmQgcmVtb3RlcHJvYyBoYW5kbGVzKSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgZG8gbm90IGVtdWxhdGUgdGhpcyBoYXJkd2FyZSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgUXVhbGNvbW0gYXRoMTFrIFdpLUZpIGRyaXZlcidzIEFIQiBidXMgYXR0YWNobWVudCAoYWhiLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIFdDTjY3NTApIGFuZCBjb3JyZXNwb25kaW5nIERldmljZSBUcmVlIG5vZGVzIChpbmNsdWRpbmcgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHJlbW90ZXByb2MgaGFuZGxlcykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxczpr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 06:55:34 +0000 UTC FinishedAt: 2026-07-30 07:11:47 +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+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBRdWFsY29tbSBhdGgxMWsgV2ktRmkgZHJpdmVyJiMzOTtzIEFIQiBidXMgYXR0YWNobWVudCAoYWhiLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIFdDTjY3NTApIGFuZCBjb3JyZXNwb25kaW5nIERldmljZSBUcmVlIG5vZGVzIChpbmNsdWRpbmcgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHJlbW90ZXByb2MgaGFuZGxlcykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdkOWZhZWZhN2ZiMGIxMmU3MDQwNGQ2YWVhNDk5MmE4MGZmZjY1OGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAzMCAwNzoxMDo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xuaW5kZXggMWUxZGVhNDg1NzYwYi4uZWM1YmY1YzlmZDc5MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbkBAIC00MzEsMzYgJiM0Mzs0MzEsNDQgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9pbml0X3FtaV9jZV9jb25maWcoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdGFiLVx1MDAzZXFtaS5zZXJ2aWNlX2luc19pZCA9IGFiLVx1MDAzZWh3X3BhcmFtcy5xbWlfc2VydmljZV9pbnNfaWQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycClcbiB7XG4tXHRpbnQgaSwgajtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4mIzQzO1x0aW50IGo7XG4gXG4tXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaiYjNDM7JiM0MzspXG4tXHRcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfZ3JwLVx1MDAzZWlycXNbal1dLCBpcnFfZ3JwKTtcbiYjNDM7XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGomIzQzOyYjNDM7KVxuJiM0MztcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfZ3JwLVx1MDAzZWlycXNbal1dLCBpcnFfZ3JwKTtcbiBcbi1cdFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpKTtcbi1cdFx0ZnJlZV9uZXRkZXYoaXJxX2dycC1cdTAwM2VuYXBpX25kZXYpO1xuLVx0fVxuJiM0MztcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4mIzQzO1x0ZnJlZV9uZXRkZXYoaXJxX2dycC1cdTAwM2VuYXBpX25kZXYpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuLVx0aW50IGlycV9pZHg7XG4gXHRpbnQgaTtcbiBcbi1cdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuLVx0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xuJiM0Mzt9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYi1cdTAwM2Vod19wYXJhbXMuY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9jZV9pcnFzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIGludCBtYXhfaWR4KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGlycV9pZHgsIGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1heF9pZHg7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChhdGgxMWtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRpcnFfaWR4ID0gQVRIMTFLX0lSUV9DRTBfT0ZGU0VUICYjNDM7IGk7XG4gXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0sIFx1MDAyNmFiLVx1MDAzZWNlLmNlX3BpcGVbaV0pO1xuIFx0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4mIzQzO3tcbiYjNDM7XHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcbiYjNDM7XHRcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XG4gXG4mIzQzO1x0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4gXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XG4gfVxuIFxuQEAgLTUyNCwyMCAmIzQzOzUzMiwyNSBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKVxuIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIHtcbiBcdHN0cnVjdCBhdGgxMWtfaHdfcGFyYW1zICpodyA9IFx1MDAyNmFiLVx1MDAzZWh3X3BhcmFtcztcbiYjNDM7XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwO1xuIFx0aW50IGksIGo7XG4gXHRpbnQgaXJxO1xuIFx0aW50IHJldDtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4gXHRcdHUzMiBudW1faXJxID0gMDtcbiBcbiYjNDM7XHRcdGlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiYjNDM7XG4gXHRcdGlycV9ncnAtXHUwMDNlYWIgPSBhYjtcbiBcdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuIFxuIFx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbi1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdGlmICghaXJxX2dycC1cdTAwM2VuYXBpX25kZXYpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gMDtcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdG5ldGlmX25hcGlfYWRkKGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2LCBcdTAwMjZpcnFfZ3JwLVx1MDAzZW5hcGksXG4gXHRcdFx0ICAgICAgIGF0aDExa19haGJfZXh0X2dycF9uYXBpX3BvbGwpO1xuQEAgLTU4NSwxNCAmIzQzOzU5OCwxMSBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbi1cdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gbnVtX2lycTtcbi1cbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnVtX2lycTsgaiYjNDM7JiM0MzspIHtcbiBcdFx0XHRpbnQgaXJxX2lkeCA9IGlycV9ncnAtXHUwMDNlaXJxc1tqXTtcbiBcbiBcdFx0XHRpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShhYi1cdTAwM2VwZGV2LFxuIFx0XHRcdFx0XHRcdCAgICAgIGlycV9uYW1lW2lycV9pZHhdKTtcbi1cdFx0XHRhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xuIFx0XHRcdGlycV9zZXRfc3RhdHVzX2ZsYWdzKGlycSwgSVJRX05PQVVUT0VOIHwgSVJRX0RJU0FCTEVfVU5MQVpZKTtcbiBcdFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfZXh0X2ludGVycnVwdF9oYW5kbGVyLFxuIFx0XHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsXG5AQCAtNjAwLDExICYjNDM7NjEwLDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRcdGlmIChyZXQpIHtcbiBcdFx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcXG5cJiMzNDssXG4gXHRcdFx0XHRcdCAgIGlycSk7XG4mIzQzO1x0XHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gajtcbiYjNDM7XHRcdFx0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3JlcXVlc3RfaXJxO1xuIFx0XHRcdH1cbiYjNDM7XHRcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlycV9ncnAtXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9yZXF1ZXN0X2lycTpcbiYjNDM7XHRmb3IgKGktLTsgaSBcdTAwM2U9IDA7IGktLSkge1xuJiM0MztcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuJiM0MztcdFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbkBAIC02MjksMTYgJiM0Mzs2NTIsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0cmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2NlX2ludGVycnVwdF9oYW5kbGVyLFxuIFx0XHRcdFx0ICBJUlFGX1RSSUdHRVJfUklTSU5HLCBpcnFfbmFtZVtpcnFfaWR4XSxcbiBcdFx0XHRcdCAgY2VfcGlwZSk7XG4tXHRcdGlmIChyZXQpXG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcXG5cJiMzNDssIGlycSk7XG4mIzQzO1x0XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuIFxuIFx0XHRhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xuIFx0fVxuIFxuIFx0LyogQ29uZmlndXJlIGV4dGVybmFsIGludGVycnVwdHMgKi9cbiBcdHJldCA9IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoYWIpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBjb25maWd1cmUgZXh0IGlycTogJWRcXG5cJiMzNDssIHJldCk7XG4mIzQzO1x0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuIFxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBRdWFsY29tbSBhdGgxMWsgV2ktRmkgZHJpdmVyJiMzOTtzIEFIQiBidXMgYXR0YWNobWVudCAoYWhiLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIFdDTjY3NTApIGFuZCBjb3JyZXNwb25kaW5nIERldmljZSBUcmVlIG5vZGVzIChpbmNsdWRpbmcgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHJlbW90ZXByb2MgaGFuZGxlcykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdkOWZhZWZhN2ZiMGIxMmU3MDQwNGQ2YWVhNDk5MmE4MGZmZjY1OGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAwNzoxMDo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jCmluZGV4IDFlMWRlYTQ4NTc2MGIuLmVjNWJmNWM5ZmQ3OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYwpAQCAtNDMxLDM2ICYjNDM7NDMxLDQ0IEBAIHN0YXRpYyB2b2lkIGF0aDExa19haGJfaW5pdF9xbWlfY2VfY29uZmlnKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiAJYWItJmd0O3FtaS5zZXJ2aWNlX2luc19pZCA9IGFiLSZndDtod19wYXJhbXMucW1pX3NlcnZpY2VfaW5zX2lkOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQomIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLAomIzQzOwkJCQkJc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCkKIHsKLQlpbnQgaSwgajsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspIHsKLQkJc3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwomIzQzOwlpbnQgajsKIAotCQlmb3IgKGogPSAwOyBqICZsdDsgaXJxX2dycC0mZ3Q7bnVtX2lycTsgaiYjNDM7JiM0MzspCi0JCQlmcmVlX2lycShhYi0mZ3Q7aXJxX251bVtpcnFfZ3JwLSZndDtpcnFzW2pdXSwgaXJxX2dycCk7CiYjNDM7CWZvciAoaiA9IDA7IGogJmx0OyBpcnFfZ3JwLSZndDtudW1faXJxOyBqJiM0MzsmIzQzOykKJiM0MzsJCWZyZWVfaXJxKGFiLSZndDtpcnFfbnVtW2lycV9ncnAtJmd0O2lycXNbal1dLCBpcnFfZ3JwKTsKIAotCQluZXRpZl9uYXBpX2RlbCgmYW1wO2lycV9ncnAtJmd0O25hcGkpOwotCQlmcmVlX25ldGRldihpcnFfZ3JwLSZndDtuYXBpX25kZXYpOwotCX0KJiM0MzsJbmV0aWZfbmFwaV9kZWwoJmFtcDtpcnFfZ3JwLSZndDtuYXBpKTsKJiM0MzsJZnJlZV9uZXRkZXYoaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKQomIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCiB7Ci0JaW50IGlycV9pZHg7CiAJaW50IGk7CiAKLQlpZiAoYWItJmd0O2h3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpCi0JCXJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspCiYjNDM7CQlhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldKTsKJiM0Mzt9CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgYWItJmd0O2h3X3BhcmFtcy5jZV9jb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MztzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCBpbnQgbWF4X2lkeCkKJiM0Mzt7CiYjNDM7CWludCBpcnFfaWR4LCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWF4X2lkeDsgaSYjNDM7JiM0MzspIHsKIAkJaWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgJmFtcDsgQ0VfQVRUUl9ESVNfSU5UUikKIAkJCWNvbnRpbnVlOwogCQlpcnFfaWR4ID0gQVRIMTFLX0lSUV9DRTBfT0ZGU0VUICYjNDM7IGk7CiAJCWZyZWVfaXJxKGFiLSZndDtpcnFfbnVtW2lycV9pZHhdLCAmYW1wO2FiLSZndDtjZS5jZV9waXBlW2ldKTsKIAl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKJiM0Mzt7CiYjNDM7CWlmIChhYi0mZ3Q7aHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSkKJiM0MzsJCXJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7CiAKJiM0MzsJYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLSZndDtod19wYXJhbXMuY2VfY291bnQpOwogCWF0aDExa19haGJfZnJlZV9leHRfaXJxKGFiKTsKIH0KIApAQCAtNTI0LDIwICYjNDM7NTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIHsKIAlzdHJ1Y3QgYXRoMTFrX2h3X3BhcmFtcyAqaHcgPSAmYW1wO2FiLSZndDtod19wYXJhbXM7CiYjNDM7CXN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnA7CiAJaW50IGksIGo7CiAJaW50IGlycTsKIAlpbnQgcmV0OwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gJmFtcDthYi0mZ3Q7ZXh0X2lycV9ncnBbaV07CiAJCXUzMiBudW1faXJxID0gMDsKIAomIzQzOwkJaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldOwomIzQzOwogCQlpcnFfZ3JwLSZndDthYiA9IGFiOwogCQlpcnFfZ3JwLSZndDtncnBfaWQgPSBpOwogCiAJCWlycV9ncnAtJmd0O25hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTsKLQkJaWYgKCFpcnFfZ3JwLSZndDtuYXBpX25kZXYpCi0JCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCWlmICghaXJxX2dycC0mZ3Q7bmFwaV9uZGV2KSB7CiYjNDM7CQkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCQlpcnFfZ3JwLSZndDtudW1faXJxID0gMDsKJiM0MzsJCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKJiM0MzsJCX0KIAogCQluZXRpZl9uYXBpX2FkZChpcnFfZ3JwLSZndDtuYXBpX25kZXYsICZhbXA7aXJxX2dycC0mZ3Q7bmFwaSwKIAkJCSAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTsKQEAgLTU4NSwxNCAmIzQzOzU5OCwxMSBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIAkJCQl9CiAJCQl9CiAJCX0KLQkJaXJxX2dycC0mZ3Q7bnVtX2lycSA9IG51bV9pcnE7Ci0KLQkJZm9yIChqID0gMDsgaiAmbHQ7IGlycV9ncnAtJmd0O251bV9pcnE7IGomIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3IgKGogPSAwOyBqICZsdDsgbnVtX2lycTsgaiYjNDM7JiM0MzspIHsKIAkJCWludCBpcnFfaWR4ID0gaXJxX2dycC0mZ3Q7aXJxc1tqXTsKIAogCQkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoYWItJmd0O3BkZXYsCiAJCQkJCQkgICAgICBpcnFfbmFtZVtpcnFfaWR4XSk7Ci0JCQlhYi0mZ3Q7aXJxX251bVtpcnFfaWR4XSA9IGlycTsKIAkJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGlycSwgSVJRX05PQVVUT0VOIHwgSVJRX0RJU0FCTEVfVU5MQVpZKTsKIAkJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIsCiAJCQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORywKQEAgLTYwMCwxMSAmIzQzOzYxMCwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIAkJCWlmIChyZXQpIHsKIAkJCQlhdGgxMWtfZXJyKGFiLCAmIzM0O2ZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcbiYjMzQ7LAogCQkJCQkgICBpcnEpOwomIzQzOwkJCQlpcnFfZ3JwLSZndDtudW1faXJxID0gajsKJiM0MzsJCQkJYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBpcnFfZ3JwKTsKJiM0MzsJCQkJZ290byBlcnJfcmVxdWVzdF9pcnE7CiAJCQl9CiYjNDM7CQkJYWItJmd0O2lycV9udW1baXJxX2lkeF0gPSBpcnE7CiAJCX0KJiM0MzsKJiM0MzsJCWlycV9ncnAtJmd0O251bV9pcnEgPSBudW1faXJxOwogCX0KIAogCXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9yZXF1ZXN0X2lycToKJiM0MzsJZm9yIChpLS07IGkgJmd0Oz0gMDsgaS0tKSB7CiYjNDM7CQlpcnFfZ3JwID0gJmFtcDthYi0mZ3Q7ZXh0X2lycV9ncnBbaV07CiYjNDM7CQlhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApOwomIzQzOwl9CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpCkBAIC02MjksMTYgJiM0Mzs2NTIsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYikKIAkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2NlX2ludGVycnVwdF9oYW5kbGVyLAogCQkJCSAgSVJRRl9UUklHR0VSX1JJU0lORywgaXJxX25hbWVbaXJxX2lkeF0sCiAJCQkJICBjZV9waXBlKTsKLQkJaWYgKHJldCkKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlhdGgxMWtfZXJyKGFiLCAmIzM0O2ZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcbiYjMzQ7LCBpcnEpOwomIzQzOwkJCWF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTsKIAkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiAKIAkJYWItJmd0O2lycV9udW1baXJxX2lkeF0gPSBpcnE7CiAJfQogCiAJLyogQ29uZmlndXJlIGV4dGVybmFsIGludGVycnVwdHMgKi8KIAlyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJYXRoMTFrX2VycihhYiwgJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIGV4dCBpcnE6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCWF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBhYi0mZ3Q7aHdfcGFyYW1zLmNlX2NvdW50KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KIAotCXJldHVybiByZXQ7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGF0aDExa19haGJfbWFwX3NlcnZpY2VfdG9fcGlwZShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCB1MTYgc2VydmljZV9pZCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0NAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDMyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEF0aDExayBBSEIgUGF0Y2ggYW5kIFZpcnR1YWxpemF0aW9uIEZlYXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY2AuIEl0JiMzOTtzIGZvY3VzZWQgb24gZXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAgd2l0aGluIHRoZSBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGZ1bmN0aW9ucy4gV2UmIzM5O3ZlIGdvdCB0aGUgYWRkaXRpb24gb2YgYGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycGAgYW5kIGBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxc2AsIHdoaWNoIGlzIGdvb2QgdG8gc2VlIGZvciBtb3JlIHJvYnVzdCByZXNvdXJjZSBtYW5hZ2VtZW50IGluIGNhc2Ugb2YgZmFpbHVyZXMuCgpUaGUgcmVhbCBxdWVzdGlvbiBoZXJlLCBhcyBhbHdheXMsIGlzIHRlc3RhYmlsaXR5LiBUaGlzIGBhdGgxMWtgIGRyaXZlciwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyBzcGVjaWZpYyB0byBRdWFsY29tbSYjMzk7cyA4MDIuMTFheCBXTEFOIGRldmljZXMuIEFuZCBgYWhiLmNgIGlzIHRoZSBtb2R1bGUgdGhhdCBpbnRlcmZhY2VzIHRoZSBkcml2ZXIgd2l0aCB0aGUgQUhCIGJ1cy4gTm93LCBBSEIgaXMgY29tbW9ubHkgZm91bmQgaW4gU29DcyBsaWtlIHRoZSBJUFE4MDc0IGFuZCBJUFE2MDE4LiBUaGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IENhbiB3ZSBhY3R1YWxseSBoaXQgdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPwoKVHlwaWNhbGx5LCBBSEIgZGV2aWNlcyBhcmUgcGxhdGZvcm0gZGV2aWNlcywgZGVmaW5lZCB0aHJvdWdoIERldmljZSBUcmVlLiBBIGdlbmVyaWMgeDg2IFFFTVUgVk0gd29uJiMzOTt0IGhhdmUgdGhlc2UgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IGVtdWxhdGVkIG9yIGluamVjdGVkLiBCdXQgY2FuIHdlIGluamVjdCB0aGVzZSBwbGF0Zm9ybSBkZXZpY2VzPyBDYW4gd2UgbGV2ZXJhZ2Ugc3lzZnMgb3IgZGV2aWNlIHRyZWUgb3ZlcmxheXMgZm9yIHRoaXM/IFN5emthbGxlciBjb3VsZCBwb3RlbnRpYWxseSBpbmplY3QgdGhlc2UgZGV2aWNlcywgcHJvdmlkZWQgaXQmIzM5O3MgY29uZmlndXJlZCB0byBkbyBzby4gQnV0IHVzdWFsbHksIFN5emthbGxlciB3b24mIzM5O3QgaW5qZWN0IHRoZXNlIHJhbmRvbSBTb0Mtc3BlY2lmaWMgQUhCIGRldmljZXMgdW5sZXNzIHRoZXJlJiMzOTtzIGEgZGVkaWNhdGVkIHN5eiBkZXNjcmlwdGlvbiBmb3IgaXQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBhdGgxMWtgIGhhcyBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB0byBzZWUgaWYgdGhpcyBpcyBldmVuIGZlYXNpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTFrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk5OQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb21wdCYjMzk7cyBDb25zdHJhaW50cyBhbmQgUGxhbm5pbmcgTXkgU3RyYXRlZ3kqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LiBUaGUgcHJvbXB0IGhhcyBhbiBpbXBvcnRhbnQgY2F2ZWF0OiBJIGNhbiYjMzk7dCBkaXJlY3RseSBzZWFyY2ggc3l6a2FsbGVyJiMzOTtzIHN5emxhbmcgZGVzY3JpcHRpb25zLiBJdCBleHBsaWNpdGx5IHByb2hpYml0cyBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IGJlZ2lucyB3aXRoICYjMzQ7c3l6XyYjMzQ7IHNpbmNlIHRob3NlIGFyZSBwc2V1ZG8tc3lzY2FsbHMgbm90IGFjdHVhbGx5IGZvdW5kIGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byBrZWVwIHRoYXQgcmVzdHJpY3Rpb24gYXQgdGhlIGZvcmVmcm9udCBvZiBteSBtaW5kLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byB1c2UgYHt7LnRvb2xSZWFkRGVzY3JpcHRpb259fWAgaW5zdGVhZCwgYnV0IEkgZG9uJiMzOTt0IGhhdmUgYWNjZXNzIHRvIHRoYXQgdG9vbC4gTXkgYXZhaWxhYmxlIHRvb2xzIGFyZSBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgYHNldC1yZXN1bHRzYC4gSSBuZWVkIHRvIHdvcmsgd2l0aGluIHRob3NlIGJvdW5kYXJpZXMuCgpTaW5jZSBJIGNhbiYjMzk7dCBzZWFyY2ggZm9yIHRoZSAmIzM0O3N5elxfJiMzNDsgcHJlZml4LCBJIG5lZWQgdG8gZm9jdXMgb24gZmluZGluZyBhIHBhdGggdG8gdW5kZXJzdGFuZCBob3cgYSBzcGVjaWZpYyBmdW5jdGlvbiBjYW4gYmUgcmVhY2hlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGF0aDExay9haGIuY2AuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCwgSSBrbm93IHRoYXQgdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBmb3IgUXVhbGNvbW0gQXRoZXJvcyA4MDIuMTFheCBkZXZpY2VzLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiBJIGNhbiByZWFjaCB0aGUgYGF0aDExa19haGJfY29uZmlnX2lycWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyBpdCYjMzk7cyBsaWtlbHkgY2FsbGVkIGZyb20gYGF0aDExa19haGJfcHJvYmVgLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMWtfYWhiX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMDQ9c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlX2RlaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTEzOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTEzOTpzdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTE0MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMzM0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aDExa19haGJfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTMzOC1cdH0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEzMzk6XHQucHJvYmUgPSBhdGgxMWtfYWhiX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzQwLVx0LnJlbW92ZSA9IGF0aDExa19haGJfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NDIKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBhdGgxMWsqKgoKT2theSwgc28gdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgZHluYW1pYyBkZXZpY2UgY3JlYXRpb24uIENhbiB3ZSBjcmVhdGUgcGxhdGZvcm0gZGV2aWNlcyBvbiB0aGUgZmx5PyBUZWNobmljYWxseSwgeWVzLCB2aWEgc3lzZnMgb3Igb3RoZXIgbWV0aG9kcywgYnV0IHVzdWFsbHksIFN5emthbGxlciBkb2VzbiYjMzk7dCBib3RoZXIgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBzcGVjaWFsaXplZCBwc2V1ZG8tc3lzY2FsbCBpbnZvbHZlZC4gSSYjMzk7bSByZW1lbWJlcmluZyBTeXprYWxsZXIgaGFzIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlgIGFuZCBzaW1pbGFyLCBidXQgZm9yIHBsYXRmb3JtIGRldmljZXMsIHRoZSBwcm9iZSBtaWdodCBiZSByZWxpYW50IG9uIHRoZSBkZXZpY2UgdHJlZSBiZWluZyBwcmVzZW50LgoKSG9sZCBvbiwgdGhlcmUmIzM5O3MgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmkgc2ltdWxhdGlvbiwgYnV0IGBhdGgxMWtgIGlzIGEgKnJlYWwqIGhhcmR3YXJlIGRyaXZlci4gVGhhdCYjMzk7cyB0aGUga2V5IGRpZmZlcmVuY2UuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lcywgaXMgaXQgd29ydGggdGhlIGVmZm9ydCB0byBmdXp6IGl0PwoKVGhlIHByb21wdCBnYXZlIGEgcHJldHR5IGV4cGxpY2l0IHJ1bGUgdG8gZm9sbG93LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBydWxlcyBzdGF0ZSAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpgYXRoMTFrYCBpcyBhIHZlbmRvci1zcGVjaWZpYyBXaS1GaSBkcml2ZXIsIFF1YWxjb21tIHNwZWNpZmljYWxseS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUsIGVpdGhlciBBSEIgb24gUXVhbGNvbW0gU29DcyBvciBQQ0llIGNhcmRzLgoKUmlnaHQuIEFuZCB0aGUgY3J1Y2lhbCBwb2ludCBpcy4uLiBRRU1VICpkb2VzbiYjMzk7dCogZW11bGF0ZSBRdWFsY29tbSBhdGgxMWsgV2ktRmkgaGFyZHdhcmUuIFNvLCBgYXRoMTFrX2FoYl9wcm9iZWAgKGFzIHRoZSBleGFtcGxlIGluIHRoZSBwYXRjaCBzdWdnZXN0cykgd2lsbCAqbmV2ZXIqIGJlIGNhbGxlZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIFRoZSBoYXJkd2FyZSwgb3IgdGhlIGRldmljZSB0cmVlIG5vZGUgbmVlZGVkIHRvIGRlc2NyaWJlIHRoZSBoYXJkd2FyZSwgc2ltcGx5IGlzbiYjMzk7dCBwcmVzZW50LgoKRXZlbiBpZiB3ZSAqY291bGQqIGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSBlbnRyeSwgYGF0aDExa19haGJfcHJvYmVgIHdvdWxkIGZhaWwgZWFybHksIHByb2JhYmx5IHdoZW4gdHJ5aW5nIHRvIHJlYWQgcmVnaXN0ZXJzIG9yIG1hcCBtZW1vcnkgdGhhdCBkb2VzbiYjMzk7dCBleGlzdCwgb3IgaXQgd291bGQgcmVxdWlyZSB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlIGJlaGF2aW91ciB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZC4KCkkgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSBjb2RlIG9mIGBhdGgxMWtfYWhiX3Byb2JlYCB0byBjb25maXJtIHRoYXQgaXQmIzM5O3MgZG9pbmcgaGFyZHdhcmUgYWNjZXNzZXMuIFRoZW4gdGhlIGRlY2lzaW9uIGJlY29tZXMgbXVjaCBjbGVhcmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19haGJfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEwND1zdGF0aWMgaW50IGF0aDExa19haGJfZndfcmVzb3VyY2VfZGVpbml0KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTM5OnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTQwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTEzMzQ9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRoMTFrX2FoYl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzM4LVx0fSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTMzOTpcdC5wcm9iZSA9IGF0aDExa19haGJfcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEzNDAtXHQucmVtb3ZlID0gYXRoMTFrX2FoYl9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA0MAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgdGhyb3VnaCBteSBtaW5kIGFzIEkgYXBwcm9hY2ggdGhlIGBhdGgxMWtfYWhiX3Byb2JlYCBmdW5jdGlvbiwgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQuCgoqKkFuYWx5emluZyBgYXRoMTFrX2FoYl9wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBhdGgxMWtfYWhiX3Byb2JlYCBmdW5jdGlvbi4gVGhlIG5hbWluZyBzdWdnZXN0cyB0aGlzIGlzIHdoZXJlIHRoZSBzeXN0ZW0gaW5pdGlhbGl6ZXMgYW4gYXRoMTFrIGRldmljZSBjb25uZWN0ZWQgdmlhIHRoZSBBSEIgYnVzLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIGhlcmUuIEFIQiBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbG93ZXItc3BlZWQgaW50ZXJmYWNlIGNvbXBhcmVkIHRvIFBDSSBvciBQQ0llLCBzbyB3aGF0IGFyZSB0aGUgdHJhZGUtb2ZmcyBpbiB0ZXJtcyBvZiBwZXJmb3JtYW5jZSBhbmQgcG93ZXIgY29uc3VtcHRpb24gZm9yIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24/CgpNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBsb29rIGZvciB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGdvaW5nIHRvIGJlIGFzc2Vzc2luZyBob3cgdGhlIGRyaXZlciBkZXRlY3RzIHRoZSBkZXZpY2UsIHJlcXVlc3RzIHJlc291cmNlcywgYW5kIGhhbmRsZXMgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIHRoZSBBSEIgYnVzLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5OgoKKiAgICoqUmVzb3VyY2UgYWxsb2NhdGlvbioqOiBXaGVyZSBkb2VzIGl0IGdyYWIgdGhlIEkvTyBtZW1vcnkgcmVnaW9uIGFuZCBpbnRlcnJ1cHQgbGluZXM/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgZGV2aWNlcyBvbiB0aGUgYnVzPyBJJiMzOTttIGhvcGluZyB0byBzZWUgc3RhbmRhcmQgcmVzb3VyY2UgbWFuYWdlbWVudCBwcmFjdGljZXMgYmVpbmcgYXBwbGllZCwgYnV0IEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IGN1c3RvbSBvciBub24tc3RhbmRhcmQgYXBwcm9hY2hlcy4KKiAgICoqRGV2aWNlIGlkZW50aWZpY2F0aW9uKio6IEhvdyBkb2VzIGl0IHZlcmlmeSB0aGUgZGV2aWNlJiMzOTtzIGlkZW50aXR5PyBJcyBpdCB1c2luZyBhIHNwZWNpZmljIHZlbmRvciBhbmQgZGV2aWNlIElEIHBhaXJpbmcsIG9yIGlzIGl0IHJlbHlpbmcgb24gbW9yZSBkZXRhaWxlZCBwcm9iaW5nPyBUaGUgYGF0aDExa2AgZHJpdmVyIGZhbWlseSBpcyB1c3VhbGx5IHByZXR0eSB3ZWxsLWRlZmluZWQsIGJ1dCBJJiMzOTtsbCBzdGlsbCB3YW50IHRvIGNvbmZpcm0uCiogICAqKkRyaXZlciBpbml0aWFsaXphdGlvbioqOiBXaGF0JiMzOTtzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgZGV2aWNlIGRyaXZlcj8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgcmVxdWlyZWQgZm9yIHRoaXMgQUhCIGNvbmZpZ3VyYXRpb24/IEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSwgd2hpY2ggaXMgbm9ybWFsIGZvciBBSEItYmFzZWQgZGV2aWNlcy4KKiAgICoqRXJyb3IgaGFuZGxpbmcqKjogVGhlIGZpcnN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgaXMgY2hlY2tpbmcgZm9yIHRoZSBleGlzdGVuY2Ugb2YgcmVxdWlyZWQgcmVzb3VyY2VzIHRvIHByb3Blcmx5IGJvb3QgdGhlIGRldmljZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkZXZpY2Ugbm90IGJlaW5nIHByZXNlbnQgb3Igb3RoZXIgcHJvYmUgZmFpbHVyZXMuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGVtYmVkZGVkIHN5c3RlbXMgd2hlcmUgYSBmYXVsdHkgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBjYW4gYmUgYSByZWFsIGhlYWRhY2hlLgoqICAgKipCdXMtc3BlY2lmaWMgcXVpcmtzKio6IEkgc2hvdWxkIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IEFIQi1zcGVjaWZpYyBxdWlya3Mgb3Igd29ya2Fyb3VuZHMuIEFyZSB0aGVyZSBhbnkgcGFydGljdWxhciBBSEIgdGltaW5nIGNvbnNpZGVyYXRpb25zPyBBbnkgc3BlY2lmaWMgRE1BIHNldHVwIHRoYXQmIzM5O3MgbmVjZXNzYXJ5IGR1ZSB0byB0aGUgQUhCIGJ1cyBjaGFyYWN0ZXJpc3RpY3M/CiogICAqKkludGVycnVwdCBzZXR1cCoqOiBXaXRoIEFIQiBiZWluZyBhbiBpbnRlcnJ1cHQtYmFzZWQgYnVzLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZHJpdmVyIGNvbmZpZ3VyZXMgYW5kIGhhbmRsZXMgaW50ZXJydXB0cy4gSG93IGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhdHRhY2hlZD8gV2hhdCYjMzk7cyB0aGUgaW50ZXJydXB0IHByaW9yaXR5IGFuZCBzaGFyaW5nIHNjaGVtZT8KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRvIHVuZGVyc3RhbmQgaG93IHdlbGwgdGhlIGRyaXZlciBoYW5kbGVzIGVycm9yIHNjZW5hcmlvcy4gQW55IHNsb3BweSBlcnJvciBoYW5kbGluZyBjYW4gbGVhZCB0byBzeXN0ZW0gaW5zdGFiaWxpdHksIGVzcGVjaWFsbHkgaW4gYSB3aXJlbGVzcyBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgcm9idXN0IGVub3VnaC4gSSYjMzk7bGwgc3RhcnQgYnkgcmVhZGluZyB0aGUgY29kZSwgbGluZSBieSBsaW5lLCB3aGlsZSBrZWVwaW5nIHRoZXNlIHBvaW50cyBpbiBtaW5kLiBMZXQmIzM5O3MgZ2V0IGdvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTM5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTM5Olx0c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4xMTQwOlx0e1xuMTE0MTpcdFx0c3RydWN0IGF0aDExa19iYXNlICphYjtcbjExNDI6XHRcdGNvbnN0IHN0cnVjdCBhdGgxMWtfaGlmX29wcyAqaGlmX29wcztcbjExNDM6XHRcdGNvbnN0IHN0cnVjdCBhdGgxMWtfcGNpX29wcyAqcGNpX29wcztcbjExNDQ6XHRcdGVudW0gYXRoMTFrX2h3X3JldiBod19yZXY7XG4xMTQ1Olx0XHRpbnQgcmV0O1xuMTE0NjpcdFxuMTE0NzpcdFx0aHdfcmV2ID0gKHVpbnRwdHJfdClkZXZpY2VfZ2V0X21hdGNoX2RhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuMTE0ODpcdFxuMTE0OTpcdFx0c3dpdGNoIChod19yZXYpIHtcbjExNTA6XHRcdGNhc2UgQVRIMTFLX0hXX0lQUTgwNzQ6XG4xMTUxOlx0XHRjYXNlIEFUSDExS19IV19JUFE2MDE4X0hXMTA6XG4xMTUyOlx0XHRjYXNlIEFUSDExS19IV19JUFE1MDE4X0hXMTA6XG4xMTUzOlx0XHRcdGhpZl9vcHMgPSBcdTAwMjZhdGgxMWtfYWhiX2hpZl9vcHNfaXBxODA3NDtcbjExNTQ6XHRcdFx0cGNpX29wcyA9IE5VTEw7XG4xMTU1Olx0XHRcdGJyZWFrO1xuMTE1NjpcdFx0Y2FzZSBBVEgxMUtfSFdfV0NONjc1MF9IVzEwOlxuMTE1NzpcdFx0XHRoaWZfb3BzID0gXHUwMDI2YXRoMTFrX2FoYl9oaWZfb3BzX3djbjY3NTA7XG4xMTU4Olx0XHRcdHBjaV9vcHMgPSBcdTAwMjZhdGgxMWtfYWhiX3BjaV9vcHNfd2NuNjc1MDtcbjExNTk6XHRcdFx0YnJlYWs7XG4xMTYwOlx0XHRkZWZhdWx0OlxuMTE2MTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDt1bnN1cHBvcnRlZCBkZXZpY2UgdHlwZSAlZFxcblwmIzM0OywgaHdfcmV2KTtcbjExNjI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTE2MzpcdFx0fVxuMTE2NDpcdFxuMTE2NTpcdFx0cmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XG4xMTY2Olx0XHRpZiAocmV0KSB7XG4xMTY3Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBzZXQgMzItYml0IGNvbnNpc3RlbnQgZG1hXFxuXCYjMzQ7KTtcbjExNjg6XHRcdFx0cmV0dXJuIHJldDtcbjExNjk6XHRcdH1cbjExNzA6XHRcbjExNzE6XHRcdGFiID0gYXRoMTFrX2NvcmVfYWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZihzdHJ1Y3QgYXRoMTFrX2FoYiksXG4xMTcyOlx0XHRcdFx0ICAgICAgIEFUSDExS19CVVNfQUhCKTtcbjExNzM6XHRcdGlmICghYWIpIHtcbjExNzQ6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDExayBiYXNlXFxuXCYjMzQ7KTtcbjExNzU6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMTc2Olx0XHR9XG4xMTc3Olx0XG4xMTc4Olx0XHRhYi1cdTAwM2VoaWYub3BzID0gaGlmX29wcztcbjExNzk6XHRcdGFiLVx1MDAzZXBkZXYgPSBwZGV2O1xuMTE4MDpcdFx0YWItXHUwMDNlaHdfcmV2ID0gaHdfcmV2O1xuMTE4MTpcdFx0YWItXHUwMDNlZndfbW9kZSA9IEFUSDExS19GSVJNV0FSRV9NT0RFX05PUk1BTDtcbjExODI6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFiKTtcbjExODM6XHRcbjExODQ6XHRcdHJldCA9IGF0aDExa19wY2ljX3JlZ2lzdGVyX3BjaV9vcHMoYWIsIHBjaV9vcHMpO1xuMTE4NTpcdFx0aWYgKHJldCkge1xuMTE4NjpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgUENJIG9wczogJWRcXG5cJiMzNDssIHJldCk7XG4xMTg3Olx0XHRcdGdvdG8gZXJyX2NvcmVfZnJlZTtcbjExODg6XHRcdH1cbjExODk6XHRcbjExOTA6XHRcdHJldCA9IGF0aDExa19jb3JlX3ByZV9pbml0KGFiKTtcbjExOTE6XHRcdGlmIChyZXQpXG4xMTkyOlx0XHRcdGdvdG8gZXJyX2NvcmVfZnJlZTtcbjExOTM6XHRcbjExOTQ6XHRcdHJldCA9IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKGFiKTtcbjExOTU6XHRcdGlmIChyZXQpXG4xMTk2Olx0XHRcdGdvdG8gZXJyX2NvcmVfZnJlZTtcbjExOTc6XHRcbjExOTg6XHRcdHJldCA9IGF0aDExa19haGJfY2VfcmVtYXAoYWIpO1xuMTE5OTpcdFx0aWYgKHJldClcbjEyMDA6XHRcdFx0Z290byBlcnJfY29yZV9mcmVlO1xuMTIwMTpcdFxuMTIwMjpcdFx0cmV0ID0gYXRoMTFrX2FoYl9md19yZXNvdXJjZXNfaW5pdChhYik7XG4xMjAzOlx0XHRpZiAocmV0KVxuMTIwNDpcdFx0XHRnb3RvIGVycl9jZV91bm1hcDtcbjEyMDU6XHRcbjEyMDY6XHRcdHJldCA9IGF0aDExa19haGJfc2V0dXBfc21wMnBfaGFuZGxlKGFiKTtcbjEyMDc6XHRcdGlmIChyZXQpXG4xMjA4Olx0XHRcdGdvdG8gZXJyX2Z3X2RlaW5pdDtcbjEyMDk6XHRcbjEyMTA6XHRcdHJldCA9IGF0aDExa19oYWxfc3JuZ19pbml0KGFiKTtcbjEyMTE6XHRcdGlmIChyZXQpXG4xMjEyOlx0XHRcdGdvdG8gZXJyX3JlbGVhc2Vfc21wMnBfaGFuZGxlO1xuMTIxMzpcdFxuMTIxNDpcdFx0cmV0ID0gYXRoMTFrX2NlX2FsbG9jX3BpcGVzKGFiKTtcbjEyMTU6XHRcdGlmIChyZXQpIHtcbjEyMTY6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIGNlIHBpcGVzOiAlZFxcblwmIzM0OywgcmV0KTtcbjEyMTc6XHRcdFx0Z290byBlcnJfaGFsX3NybmdfZGVpbml0O1xuMTIxODpcdFx0fVxuMTIxOTpcdFxuMTIyMDpcdFx0YXRoMTFrX2FoYl9pbml0X3FtaV9jZV9jb25maWcoYWIpO1xuMTIyMTpcdFxuMTIyMjpcdFx0cmV0ID0gYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKGFiKTtcbjEyMjM6XHRcdGlmIChyZXQpXG4xMjI0Olx0XHRcdGdvdG8gZXJyX2NlX2ZyZWU7XG4xMjI1Olx0XG4xMjI2Olx0XHRyZXQgPSBhdGgxMWtfY29yZV9pbml0KGFiKTtcbjEyMjc6XHRcdGlmIChyZXQpIHtcbjEyMjg6XHRcdFx0YXRoMTFrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXQgY29yZTogJWRcXG5cJiMzNDssIHJldCk7XG4xMjI5Olx0XHRcdGdvdG8gZXJyX2NlX2ZyZWU7XG4xMjMwOlx0XHR9XG4xMjMxOlx0XG4xMjMyOlx0XHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoYWIpO1xuMTIzMzpcdFx0aWYgKHJldCkge1xuMTIzNDpcdFx0XHRhdGgxMWtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIGlycTogJWRcXG5cJiMzNDssIHJldCk7XG4xMjM1Olx0XHRcdGdvdG8gZXJyX2NlX2ZyZWU7XG4xMjM2Olx0XHR9XG4xMjM3Olx0XG4xMjM4Olx0XHRhdGgxMWtfcW1pX2Z3cmVzZXRfZnJvbV9jb2xkX2Jvb3QoYWIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzgzCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgUHJvYmUgYW5kIFJlc291cmNlIFNldHVwKioKCk15IGluaXRpYWwgbW92ZSBpbiB0aGlzIHByb2JlIGZ1bmN0aW9uIGlzIHRvIGdyYWIgdGhlIGhhcmR3YXJlIHJldmlzaW9uIHVzaW5nIGBkZXZpY2VfZ2V0X21hdGNoX2RhdGEoJmFtcDtwZGV2LSZndDtkZXYpYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSwgSSBuZWVkIHRvIGtub3cgd2hhdCBJJiMzOTttIGRlYWxpbmcgd2l0aCBiZWZvcmUgSSBtb3ZlIGZvcndhcmQuIE5vdyB0aGF0IEkgaGF2ZSB0aGUgaGFyZHdhcmUgcmV2aXNpb24sIHRoZSBuZXh0IGNydWNpYWwgc3RlcCBpcyBzZXR0aW5nIHVwIHRoZSByZXNvdXJjZXMgd2l0aCBgYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoYWIpYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBsaWtlbHkgaGFwcGVucywgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHdoYXQgdGhpcyBmdW5jdGlvbiAqYWN0dWFsbHkqIGRvZXMuIEl0JiMzOTtzIHRpbWUgdG8gZm9sbG93IHRoZSB0cmFpbCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIGRldmljZSYjMzk7cyByZXNvdXJjZXMgYXJlIGJlaW5nIGNvbmZpZ3VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTkxNj1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX3JlbGVhc2Vfc21wMnBfaGFuZGxlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy05MjUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjkyNjpzdGF0aWMgaW50IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTkyNy17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMTM5PXN0YXRpYyBpbnQgYXRoMTFrX2FoYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTE5My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTE5NDpcdHJldCA9IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTE5NS1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NDcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSB3ZSBnby4uLgoKKipEZWx2aW5nIGludG8gYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGBhdGgxMWtgIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IGhvdyBpdCByZWxhdGVzIHRvIHRoZSBBSEIgYnVzIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBHaXZlbiB0aGUgbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBoYXJkd2FyZSByZXNvdXJjZXMgbmVlZGVkIGJ5IHRoZSBkcml2ZXIgb24gYW4gQUhCLWNvbm5lY3RlZCBkZXZpY2UuCgpJIGltbWVkaWF0ZWx5IHdhbnQgdG8gcGlucG9pbnQgd2hhdCBleGFjdGx5ICYjMzQ7cmVzb3VyY2VzJiMzNDsgZW5jb21wYXNzIGhlcmUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IERNQSBjaGFubmVscz8gTWVtb3J5IHJlZ2lvbnM/IEludGVycnVwdCBsaW5lcz8gT3IgcGVyaGFwcyBhIGNvbWJpbmF0aW9uIG9mIHRoZXNlIGFuZCBvdGhlciBIVy1zcGVjaWZpYyBjb25maWd1cmF0aW9ucz8gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY29kZSB0byBzZWUgaG93IHRoZXNlIHJlc291cmNlcyBhcmUgaWRlbnRpZmllZCwgcmVxdWVzdGVkLCBhbmQsIGNydWNpYWxseSwgcHJvdGVjdGVkIGZyb20gY29uZmxpY3RzLgoKVGhlIEFIQiBidXMgaXRzZWxmIGlzIGEga2V5IHBpZWNlIG9mIHRoaXMgcHV6emxlLiBIb3cgZG9lcyB0aGUgY29kZSBpbnRlcmFjdCB3aXRoIHRoZSBBSEIgYnJpZGdlPyBJcyB0aGVyZSBhbnkgc3BlY2lmaWMgYnVzIGNsb2NrIGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQsIGFuZCBpZiBzbywgaG93IGlzIGl0IGhhbmRsZWQ/IEFyZSB0aGVyZSBhbnkgcG93ZXItbWFuYWdlbWVudCBjb25zaWRlcmF0aW9ucyBpbiB0aGlzIHNldHVwLCBvciBpcyBpdCBhc3N1bWVkIHRoZSBBSEIgaXMgYWxyZWFkeSBwb3dlcmVkIHVwIGFuZCByZWFkeT8KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIFdoYXQgYXJlIHRoZSBlcnJvciBwYXRocywgYW5kIHdoYXQga2luZCBvZiByZWNvdmVyeSBvciBjbGVhbnVwIG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlPyBHb29kIHJlc291cmNlIG1hbmFnZW1lbnQgaXMgY3JpdGljYWwsIGFuZCBhIHJvYnVzdCBpbXBsZW1lbnRhdGlvbiBzaG91bGQgaGF2ZSBncmFjZWZ1bCBlcnJvciBoYW5kbGluZy4gQWxzbywgd2hhdCBkb2VzIHRoZSByZXR1cm4gdmFsdWUgc2lnbmFsIHRvIHRoZSBjYWxsZXIgYW5kIHdoeT8KCkZpbmFsbHksIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgZXNwZWNpYWxseSBhbnkgY3VzdG9tIHN0cnVjdHVyZXMgb3IgZW51bXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIEFIQiBpbnRlcmZhY2UuIEkmIzM5O20gbG9va2luZyBmb3IgY2xlYXIsIGNvbmNpc2UgZGVmaW5pdGlvbnMgdGhhdCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgZGF0YSBhbmQgY29udHJvbC4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGxpdmVzIHVwIHRvIG15IGV4cGVjdGF0aW9ucyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTI2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5MjY6XHRzdGF0aWMgaW50IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4gOTI3Olx0e1xuIDkyODpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGFiLVx1MDAzZXBkZXY7XG4gOTI5Olx0XHRzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXM7XG4gOTMwOlx0XHR2b2lkIF9faW9tZW0gKm1lbTtcbiA5MzE6XHRcbiA5MzI6XHRcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuIDkzMzpcdFx0XHRyZXR1cm4gYXRoMTFrX2FoYl9zZXR1cF9tc2lfcmVzb3VyY2VzKGFiKTtcbiA5MzQ6XHRcbiA5MzU6XHRcdG1lbSA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAsIFx1MDAyNm1lbV9yZXMpO1xuIDkzNjpcdFx0aWYgKElTX0VSUihtZW0pKSB7XG4gOTM3Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2lvcmVtYXAgZXJyb3JcXG5cJiMzNDspO1xuIDkzODpcdFx0XHRyZXR1cm4gUFRSX0VSUihtZW0pO1xuIDkzOTpcdFx0fVxuIDk0MDpcdFxuIDk0MTpcdFx0YWItXHUwMDNlbWVtID0gbWVtO1xuIDk0MjpcdFx0YWItXHUwMDNlbWVtX2xlbiA9IHJlc291cmNlX3NpemUobWVtX3Jlcyk7XG4gOTQzOlx0XG4gOTQ0Olx0XHRyZXR1cm4gMDtcbiA5NDU6XHR9XG4gOTQ2Olx0XG4gOTQ3Olx0c3RhdGljIGludCBhdGgxMWtfYWhiX3NldHVwX21zYV9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcbiA5NDg6XHR7XG4gOTQ5Olx0XHRzdHJ1Y3QgYXRoMTFrX2FoYiAqYWJfYWhiID0gYXRoMTFrX2FoYl9wcml2KGFiKTtcbiA5NTA6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGFiLVx1MDAzZWRldjtcbiA5NTE6XHRcdHN0cnVjdCByZXNvdXJjZSByO1xuIDk1MjpcdFx0aW50IHJldDtcbiA5NTM6XHRcbiA5NTQ6XHRcdHJldCA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGV2LVx1MDAzZW9mX25vZGUsIDAsIFx1MDAyNnIpO1xuIDk1NTpcdFx0aWYgKHJldCkge1xuIDk1NjpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7ZmFpbGVkIHRvIHJlc29sdmUgbXNhIGZpeGVkIHJlZ2lvblxcblwmIzM0Oyk7XG4gOTU3Olx0XHRcdHJldHVybiByZXQ7XG4gOTU4Olx0XHR9XG4gOTU5Olx0XG4gOTYwOlx0XHRhYl9haGItXHUwMDNlZncubXNhX3BhZGRyID0gci5zdGFydDtcbiA5NjE6XHRcdGFiX2FoYi1cdTAwM2Vmdy5tc2Ffc2l6ZSA9IHJlc291cmNlX3NpemUoXHUwMDI2cik7XG4gOTYyOlx0XG4gOTYzOlx0XHRyZXQgPSBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlKGRldi1cdTAwM2VvZl9ub2RlLCAxLCBcdTAwMjZyKTtcbiA5NjQ6XHRcdGlmIChyZXQpIHtcbiA5NjU6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2ZhaWxlZCB0byByZXNvbHZlIGNlIGZpeGVkIHJlZ2lvblxcblwmIzM0Oyk7XG4gOTY2Olx0XHRcdHJldHVybiByZXQ7XG4gOTY3Olx0XHR9XG4gOTY4Olx0XG4gOTY5Olx0XHRhYl9haGItXHUwMDNlZncuY2VfcGFkZHIgPSByLnN0YXJ0O1xuIDk3MDpcdFx0YWJfYWhiLVx1MDAzZWZ3LmNlX3NpemUgPSByZXNvdXJjZV9zaXplKFx1MDAyNnIpO1xuIDk3MTpcdFxuIDk3MjpcdFx0cmV0dXJuIDA7XG4gOTczOlx0fVxuIDk3NDpcdFxuIDk3NTpcdHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jZV9yZW1hcChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE4NgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDkyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbnJlYWNoYWJsZSBDb2RlIGluIFN0YW5kYXJkIFFFTVUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGF0aDExa2AgZHJpdmVyIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgQUhCIHZhcmlhbnQuIFRoZSBjb2RlIHVzZXMgYGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlYCBhbmQgcmVsaWVzIG9uIGEgcGh5c2ljYWwgbWVtb3J5IHJlc291cmNlIGRlZmluZWQgZm9yIHRoZSBwbGF0Zm9ybSBkZXZpY2UuIERpZ2dpbmcgZGVlcGVyLCBgYXRoMTFrX2FoYl9wcm9iZWAgY2FsbHMgaW50byBmdW5jdGlvbnMgdGhhdCB1bHRpbWF0ZWx5IGRlcGVuZCBvbiBhIERldmljZSBUcmVlIG5vZGUgd2l0aCByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucyB2aWEgYG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2VgLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBwcm9ibGVtLgoKSW4gYSB2YW5pbGxhIFFFTVUgc2V0dXAsIGxpa2UgdGhlIG9uZSBzeXprYWxsZXIgdHlwaWNhbGx5IHVzZXMgZm9yIHg4Nl82NCwgdGhlcmUmIzM5O3Mgbm8gcHJlLWRlZmluZWQgRGV2aWNlIFRyZWUgd2l0aCB0aGUgbmVjZXNzYXJ5IG5vZGVzIGZvciBgYXRoMTFrYCwgbm9yIGFyZSB0aGUgcGxhdGZvcm0gZGV2aWNlcyBwcmVzZW50LiBJIGhhZCBhIHF1aWNrIHRob3VnaHQgYWJvdXQgYHN5el9nZW5ldGxpbmtfZ2V0X2ZhbWlseWAsIGJ1dCB0aGF0JiMzOTtzIGEgcmVkIGhlcnJpbmc7IGl0JiMzOTtzIGZvciBuZXRsaW5rLCBub3QgcGxhdGZvcm0gZGV2aWNlIGluamVjdGlvbi4gU2ltaWxhcmx5LCBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIHBsYXRmb3JtIGRldmljZSBpbmplY3Rpb24gY2FwYWJpbGl0eSB1c2luZyBwc2V1ZG8tc3lzY2FsbHMgYnV0IEkgY2FuJiMzOTt0IGZpbmQgYW55IHNwZWNpZmljIGBzeXpfYCBwc2V1ZG8tc3lzY2FsbHMgZm9yIGF0aDExay4gSSBhbHNvIGtub3cgdGhhdCBzeXprYWxsZXIgcnVucyBvbiBBUk02NCwgYW5kIGNhbiB1c2UgRGV2aWNlIFRyZWVzIHRoZXJlLCBidXQgaXQgc3RpbGwgd29uJiMzOTt0IGhhdmUgdGhlIHNwZWNpZmljIG5vZGVzIGZvciBhdGgxMWsgdW5sZXNzIGl0JiMzOTtzIHJ1bm5pbmcgb24gc3BlY2lmaWMgcGh5c2ljYWwgUXVhbGNvbW0gaGFyZHdhcmUuCgpOb3csIHRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzdGF0ZSB0aGF0IGNvZGUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLCBzaG91bGQgYmUgbWFya2VkIGFzIG5vdCB3b3J0aCBmdXp6aW5nLiBgYXRoMTFrYCBpcyBhIHZlbmRvci1zcGVjaWZpYyBXaS1GaSBkcml2ZXIgZnJvbSBRdWFsY29tbS4gSXQgKnJlcXVpcmVzKiBwaHlzaWNhbCBoYXJkd2FyZSwgZWl0aGVyIEFIQiBvbiBRdWFsY29tbSBTb0NzIG9yIGEgUENJZSBjYXJkLCBub3Qgc29tZXRoaW5nIGVtdWxhdGVkLiBBbmQgaXQmIzM5O3MgZGVmaW5pdGVseSBub3QgdGVzdGFibGUgd2l0aCBgbWFjODAyMTFfaHdzaW1gLCB3aGljaCBpcyBhbiBlbnRpcmVseSBzZXBhcmF0ZSBzb2Z0d2FyZS1zaW11bGF0ZWQgV2ktRmkgZHJpdmVyLgoKU28sIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAsIHdoaWNoIEkgYXNzdW1lIGFyZSBwYXJ0IG9mIHRoZSBgYXRoMTFrX2FoYmAgcHJvYmUgcGF0aCwgYXJlICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuCgpUaGVuIEkgY2hlY2tlZCBteXNlbGYuIElzIHRoZXJlIGFueSBzbGltIGNoYW5jZSBzeXprYWxsZXIgY2FuIHJlYWNoIGl0PwpJIGRpZCBzZWUgYHN5el9wY2lfZGV2aWNlX2FkZGAgdG8gaW5qZWN0IFBDSSBkZXZpY2VzLCBidXQgdGhhdCYjMzk7cyBmb3IgdGhlIFBDSSBidXMsIG5vdCB0aGUgQUhCIGJ1cy4gRXZlbiBpZiBpdCAqd2VyZSogdGhlIFBDSSBidXMsIGluamVjdGluZyBhIFBDSSBkZXZpY2Ugd291bGQgbGlrZWx5IGZhaWwgZWFybHkgZHVyaW5nIHByb2JlIGFueXdheSB3aGVuIHRoZSBkcml2ZXIgdHJpZXMgdG8gYWNjZXNzIGhhcmR3YXJlIHJlZ2lzdGVycyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IGVtdWxhdGVkLgoKTW9yZSBpbXBvcnRhbnRseSwgdGhlcmUgaXNuJiMzOTt0IGFueSBlcXVpdmFsZW50IG9mIGBzeXpfYWhiX2RldmljZV9hZGRgLiBQbGF0Zm9ybSBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgaW5zdGFudGlhdGVkIGZyb20gdGhlIERldmljZSBUcmVlLCBBQ1BJLCBvciBib2FyZCBmaWxlcywgbm9uZSBvZiB3aGljaCBhcmUgYXZhaWxhYmxlLiBJIHRyaWVkIHRvIHNlZSBpZiBhbnkgbmV3IHBzZXVkby1zeXNjYWxscyBjb3VsZCBleGlzdCwgYnV0IEkga25vdyBmcm9tIG15IG93biBleHBlcmllbmNlIHRoYXQgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIHBsYXRmb3JtIGRldmljZSBpbmplY3RvciB0aGF0IGNhbiBmYWtlIGRldmljZSB0cmVlIG5vZGVzLCBhbmQgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgcmVxdWlyZWQgYnkgYGF0aDExa19haGJfcHJvYmVgLiBBbHNvLCBldmVuIGlmIEkgY291bGQgc29tZWhvdyBpbmplY3QgYSBwbGF0Zm9ybSBkZXZpY2UsIHRoZSBwcm9iZSB3b3VsZCBmYWlsIGFueXdheS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgYSByZW1vdGUgcHJvY2Vzc29yIChycHJvYykgdG8gbG9hZCBmaXJtd2FyZSwgc3BlY2lmaWNhbGx5IGBhdGgxMWtfY29yZV9nZXRfcnByb2MoYWIpYCwgd2hpY2ggSSBrbm93IGNhbiYjMzk7dCBiZSBhdmFpbGFibGUgaW4gc3RhbmRhcmQgUUVNVS4KClRoZXJlZm9yZSwgdGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgdW5xdWVzdGlvbmFibHkgdW5yZWFjaGFibGUgaW4gdGhlIHR5cGljYWwgUUVNVSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMWtfY29yZV9nZXRfcnByb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTgwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDExa19oaWZfb3BzIGF0aDExa19haGJfaGlmX29wc193Y242NzUwID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtODI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzo4Mjg6c3RhdGljIGludCBhdGgxMWtfY29yZV9nZXRfcnByb2Moc3RydWN0IGF0aDExa19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtODI5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMzk9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMjIxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMjIyOlx0cmV0ID0gYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIyMy1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDA3OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjA3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYGF0aDExa19jb3JlX2dldF9ycHJvY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24uIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gYmUgcmVsYXRlZCB0byByZXRyaWV2aW5nIGEgcmVtb3RlIHByb2Nlc3NvciBjb250ZXh0IG9yIGEgc2ltaWxhciByZXNvdXJjZSB3aXRoaW4gdGhlIGF0aDExayBkcml2ZXIsIGxpa2VseSBpbnZvbHZlZCB3aXRoIGhhcmR3YXJlIG9mZmxvYWRpbmcgb3IgbWFuYWdpbmcgY29tbXVuaWNhdGlvbiB3aXRoIGEgZGVkaWNhdGVkIGNvLXByb2Nlc3NvciBvbiB0aGUgUXVhbGNvbW0gQXRoZXJvcyB3aXJlbGVzcyBjaGlwc2V0LiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBzaXRzIGF0IHRoZSBjb3JlIG9mIHRoZSBkcml2ZXImIzM5O3Mgb3BlcmF0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBjcml0aWNhbCB0byB0aGUgb3ZlcmFsbCBmdW5jdGlvbmFsaXR5LiBJIGFudGljaXBhdGUgaXQgZGVhbHMgd2l0aCBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODI4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4Mjg6XHRzdGF0aWMgaW50IGF0aDExa19jb3JlX2dldF9ycHJvYyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIDgyOTpcdHtcbiA4MzA6XHRcdHN0cnVjdCBhdGgxMWtfYWhiICphYl9haGIgPSBhdGgxMWtfYWhiX3ByaXYoYWIpO1xuIDgzMTpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gYWItXHUwMDNlZGV2O1xuIDgzMjpcdFx0c3RydWN0IHJwcm9jICpwcnByb2M7XG4gODMzOlx0XHRwaGFuZGxlIHJwcm9jX3BoYW5kbGU7XG4gODM0Olx0XG4gODM1Olx0XHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LVx1MDAzZW9mX25vZGUsIFwmIzM0O3Fjb20scnByb2NcJiMzNDssIFx1MDAyNnJwcm9jX3BoYW5kbGUpKSB7XG4gODM2Olx0XHRcdGF0aDExa19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgcTZfcnByb2MgaGFuZGxlXFxuXCYjMzQ7KTtcbiA4Mzc6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gODM4Olx0XHR9XG4gODM5Olx0XG4gODQwOlx0XHRwcnByb2MgPSBycHJvY19nZXRfYnlfcGhhbmRsZShycHJvY19waGFuZGxlKTtcbiA4NDE6XHRcdGlmICghcHJwcm9jKVxuIDg0MjpcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShcdTAwMjZhYi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgLUVQUk9CRV9ERUZFUiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBycHJvY1xcblwmIzM0Oyk7XG4gODQzOlx0XHRhYl9haGItXHUwMDNldGd0X3Jwcm9jID0gcHJwcm9jO1xuIDg0NDpcdFxuIDg0NTpcdFx0cmV0dXJuIDA7XG4gODQ2Olx0fVxuIDg0NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAwNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3MQoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiAyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogVGhpcyBDb2RlIGlzIFVuZnV6emFibGUgaW4gYSBTdGFuZGFyZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBleGFtaW5lZCB0aGlzIHBhdGNoLCBhbmQgSSYjMzk7dmUgY29tZSB0byBhIGZpcm0gY29uY2x1c2lvbjogdGhpcyBpc24mIzM5O3Qgc29tZXRoaW5nIHdlIGNhbiByZWFsaXN0aWNhbGx5IGZ1enouIEl0IGJvaWxzIGRvd24gdG8gdGhpczogdGhlIGNvZGUgd2UmIzM5O3JlIGxvb2tpbmcgYXQsIHNwZWNpZmljYWxseSB0aGUgZXJyb3IgaGFuZGxpbmcgbW9kaWZpY2F0aW9ucyBpbiBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIHdpdGhpbiB0aGUgUXVhbGNvbW0gYXRoMTFrIFdpLUZpIGRyaXZlciwgaXMgKmNvbXBsZXRlbHkqIGRlcGVuZGVudCBvbiB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlLiBXZSYjMzk7cmUgdGFsa2luZyBRdWFsY29tbSBTb0NzIOKAkyBJUFE4MDc0LCBXQ042NzUwLCB0aGF0IHNvcnQgb2YgdGhpbmcg4oCTIGFuZCwgY3JpdGljYWxseSwgdGhlIGNvcnJlc3BvbmRpbmcgZGV2aWNlIHRyZWUgZW50cmllcy4gSXQgYWJzb2x1dGVseSBuZWVkcyB0aGF0IGBxY29tLHJwcm9jYCBwcm9wZXJ0eSBhbmQgYSByZW1vdGVwcm9jIGRldmljZSBhdmFpbGFibGUuCgpUaGUgY3J1eCBvZiB0aGUgaXNzdWUgaXMgdGhhdCBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIHNpbXBseSAqZG8gbm90KiBlbXVsYXRlIHRoaXMgaGFyZHdhcmUuIFRoZXJlJiMzOTtzIG5vIHdheSB0byBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBjb25kaXRpb25zIGZvciB0aGlzIGNvZGUgdG8gYmUgZXhlY3V0ZWQgd2l0aGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlIGRyaXZlciByZXF1aXJlcyBhIGxldmVsIG9mIHBoeXNpY2FsIGludGVncmF0aW9uIGFuZCBEZXZpY2UgVHJlZSBjb25maWd1cmF0aW9uIHRoYXQmIzM5O3MganVzdCBub3QgcHJlc2VudCBpbiBhIHR5cGljYWwgUUVNVSBpbnN0YW5jZS4gU28sIG5vIG1hdHRlciBob3cgY2xldmVyIHRoZSBmdXp6aW5nIHNldHVwLCB3ZSYjMzk7cmUgbmV2ZXIgZ29pbmcgdG8gaGl0IHRoZXNlIGNvZGUgcGF0aHMuIFRoYXQgbWVhbnMgYFdvcnRoRnV6emluZz1mYWxzZWAuIEkgd2lsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byBtYWtlIHN1cmUgdGhhdCBpcyByZXR1cm5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMDc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgUXVhbGNvbW0gYXRoMTFrIFdpLUZpIGRyaXZlciYjMzk7cyBBSEIgYnVzIGF0dGFjaG1lbnQgKGFoYi5jKS4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgc3BlY2lmaWMgcGh5c2ljYWwgUXVhbGNvbW0gU29DIGhhcmR3YXJlIChlLmcuLCBJUFE4MDc0LCBXQ042NzUwKSBhbmQgY29ycmVzcG9uZGluZyBEZXZpY2UgVHJlZSBub2RlcyAoaW5jbHVkaW5nIHJlc2VydmVkIG1lbW9yeSByZWdpb25zIGFuZCByZW1vdGVwcm9jIGhhbmRsZXMpIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gU3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBkbyBub3QgZW11bGF0ZSB0aGlzIGhhcmR3YXJlLCBtYWtpbmcgdGhlc2UgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBRdWFsY29tbSBhdGgxMWsgV2ktRmkgZHJpdmVyJiMzOTtzIEFIQiBidXMgYXR0YWNobWVudCAoYWhiLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIFdDTjY3NTApIGFuZCBjb3JyZXNwb25kaW5nIERldmljZSBUcmVlIG5vZGVzIChpbmNsdWRpbmcgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHJlbW90ZXByb2MgaGFuZGxlcykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjEwOjQ0Ljc2MTczNTg3OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDg3NjIzMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgUXVhbGNvbW0gYXRoMTFrIFdpLUZpIGRyaXZlcidzIEFIQiBidXMgYXR0YWNobWVudCAoYWhiLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIFdDTjY3NTApIGFuZCBjb3JyZXNwb25kaW5nIERldmljZSBUcmVlIG5vZGVzIChpbmNsdWRpbmcgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHJlbW90ZXByb2MgaGFuZGxlcykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTA6NDQuNzYxNzQxMDg5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTMzMTE5MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ZDlmYWVmYTdmYjBiMTJlNzA0MDRkNmFlYTQ5OTJhODBmZmY2NThmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDMwIDA3OjEwOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXFxuaW5kZXggMWUxZGVhNDg1NzYwYi4uZWM1YmY1YzlmZDc5MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1xcbkBAIC00MzEsMzYgKzQzMSw0NCBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbiBcXHRhYi1cXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXFx1MDAzZWh3X3BhcmFtcy5xbWlfc2VydmljZV9pbnNfaWQ7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuK3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgYXRoMTFrX2V4dF9pcnFfZ3JwICppcnFfZ3JwKVxcbiB7XFxuLVxcdGludCBpLCBqO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuK1xcdGludCBqO1xcbiBcXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKylcXG4tXFx0XFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2dycC1cXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xcbitcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaXJxX2dycC1cXHUwMDNlbnVtX2lycTsgaisrKVxcbitcXHRcXHRmcmVlX2lycShhYi1cXHUwMDNlaXJxX251bVtpcnFfZ3JwLVxcdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XFxuIFxcbi1cXHRcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2aXJxX2dycC1cXHUwMDNlbmFwaSk7XFxuLVxcdFxcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXFx1MDAzZW5hcGlfbmRldik7XFxuLVxcdH1cXG4rXFx0bmV0aWZfbmFwaV9kZWwoXFx1MDAyNmlycV9ncnAtXFx1MDAzZW5hcGkpO1xcbitcXHRmcmVlX25ldGRldihpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuK3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIHtcXG4tXFx0aW50IGlycV9pZHg7XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0aWYgKGFiLVxcdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxcbi1cXHRcXHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVRIMTFLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkrKylcXG4rXFx0XFx0YXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKGFiLCBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldKTtcXG4rfVxcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQ7IGkrKykge1xcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLCBpbnQgbWF4X2lkeClcXG4re1xcbitcXHRpbnQgaXJxX2lkeCwgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtYXhfaWR4OyBpKyspIHtcXG4gXFx0XFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0aXJxX2lkeCA9IEFUSDExS19JUlFfQ0UwX09GRlNFVCArIGk7XFxuIFxcdFxcdGZyZWVfaXJxKGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcXHUwMDI2YWItXFx1MDAzZWNlLmNlX3BpcGVbaV0pO1xcbiBcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4re1xcbitcXHRpZiAoYWItXFx1MDAzZWh3X3BhcmFtcy5oeWJyaWRfYnVzX3R5cGUpXFxuK1xcdFxcdHJldHVybiBhdGgxMWtfcGNpY19mcmVlX2lycShhYik7XFxuIFxcbitcXHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXFx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XFxuIFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxKGFiKTtcXG4gfVxcbiBcXG5AQCAtNTI0LDIwICs1MzIsMjUgQEAgc3RhdGljIGlycXJldHVybl90IGF0aDExa19haGJfZXh0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZylcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIHtcXG4gXFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXFx1MDAyNmFiLVxcdTAwM2Vod19wYXJhbXM7XFxuK1xcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnA7XFxuIFxcdGludCBpLCBqO1xcbiBcXHRpbnQgaXJxO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuIFxcdFxcdHUzMiBudW1faXJxID0gMDtcXG4gXFxuK1xcdFxcdGlycV9ncnAgPSBcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xcbitcXG4gXFx0XFx0aXJxX2dycC1cXHUwMDNlYWIgPSBhYjtcXG4gXFx0XFx0aXJxX2dycC1cXHUwMDNlZ3JwX2lkID0gaTtcXG4gXFxuIFxcdFxcdGlycV9ncnAtXFx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcXG4tXFx0XFx0aWYgKCFpcnFfZ3JwLVxcdTAwM2VuYXBpX25kZXYpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRpZiAoIWlycV9ncnAtXFx1MDAzZW5hcGlfbmRldikge1xcbitcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRpcnFfZ3JwLVxcdTAwM2VudW1faXJxID0gMDtcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVxdWVzdF9pcnE7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdG5ldGlmX25hcGlfYWRkKGlycV9ncnAtXFx1MDAzZW5hcGlfbmRldiwgXFx1MDAyNmlycV9ncnAtXFx1MDAzZW5hcGksXFxuIFxcdFxcdFxcdCAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTtcXG5AQCAtNTg1LDE0ICs1OTgsMTEgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuLVxcdFxcdGlycV9ncnAtXFx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xcbi1cXG4tXFx0XFx0Zm9yIChqID0gMDsgaiBcXHUwMDNjIGlycV9ncnAtXFx1MDAzZW51bV9pcnE7IGorKykge1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgbnVtX2lycTsgaisrKSB7XFxuIFxcdFxcdFxcdGludCBpcnFfaWR4ID0gaXJxX2dycC1cXHUwMDNlaXJxc1tqXTtcXG4gXFxuIFxcdFxcdFxcdGlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGFiLVxcdTAwM2VwZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpcnFfbmFtZVtpcnFfaWR4XSk7XFxuLVxcdFxcdFxcdGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xcbiBcXHRcXHRcXHRpcnFfc2V0X3N0YXR1c19mbGFncyhpcnEsIElSUV9OT0FVVE9FTiB8IElSUV9ESVNBQkxFX1VOTEFaWSk7XFxuIFxcdFxcdFxcdHJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoMTFrX2FoYl9leHRfaW50ZXJydXB0X2hhbmRsZXIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgSVJRRl9UUklHR0VSX1JJU0lORyxcXG5AQCAtNjAwLDExICs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIFxcdFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCByZXF1ZXN0X2lycSBmb3IgJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGlycSk7XFxuK1xcdFxcdFxcdFxcdGlycV9ncnAtXFx1MDAzZW51bV9pcnEgPSBqO1xcbitcXHRcXHRcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcXG4gXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRhYi1cXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0aXJxX2dycC1cXHUwMDNlbnVtX2lycSA9IG51bV9pcnE7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX3JlcXVlc3RfaXJxOlxcbitcXHRmb3IgKGktLTsgaSBcXHUwMDNlPSAwOyBpLS0pIHtcXG4rXFx0XFx0aXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuK1xcdFxcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5AQCAtNjI5LDE2ICs2NTIsMjQgQEAgc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gXFx0XFx0cmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2NlX2ludGVycnVwdF9oYW5kbGVyLFxcbiBcXHRcXHRcXHRcXHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxcbiBcXHRcXHRcXHRcXHQgIGNlX3BpcGUpO1xcbi1cXHRcXHRpZiAocmV0KVxcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgcmVxdWVzdF9pcnEgZm9yICVkXFxcXG5cXFwiLCBpcnEpO1xcbitcXHRcXHRcXHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgaSk7XFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGFiLVxcdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xcbiBcXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKGFiKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVxcdTAwM2Vod19wYXJhbXMuY2VfY291bnQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbi1cXHRyZXR1cm4gcmV0O1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjEwOjQ1LjA3NTc0ODA5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYyMTczNjA1MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgUXVhbGNvbW0gYXRoMTFrIFdpLUZpIGRyaXZlcidzIEFIQiBidXMgYXR0YWNobWVudCAoYWhiLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIFdDTjY3NTApIGFuZCBjb3JyZXNwb25kaW5nIERldmljZSBUcmVlIG5vZGVzIChpbmNsdWRpbmcgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHJlbW90ZXByb2MgaGFuZGxlcykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2Q5ZmFlZmE3ZmIwYjEyZTcwNDA0ZDZhZWE0OTkyYTgwZmZmNjU4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDA3OjEwOjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmNcbmluZGV4IDFlMWRlYTQ4NTc2MGIuLmVjNWJmNWM5ZmQ3OTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXG5AQCAtNDMxLDM2ICs0MzEsNDQgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9pbml0X3FtaV9jZV9jb25maWcoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdGFiLVx1MDAzZXFtaS5zZXJ2aWNlX2luc19pZCA9IGFiLVx1MDAzZWh3X3BhcmFtcy5xbWlfc2VydmljZV9pbnNfaWQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2V4dF9pcnFfZ3JwKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXG4rXHRcdFx0XHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnApXG4ge1xuLVx0aW50IGksIGo7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbitcdGludCBqO1xuIFxuLVx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGorKylcbi1cdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tqXV0sIGlycV9ncnApO1xuK1x0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqKyspXG4rXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW2pdXSwgaXJxX2dycCk7XG4gXG4tXHRcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4tXHRcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KTtcbi1cdH1cbitcdG5ldGlmX25hcGlfZGVsKFx1MDAyNmlycV9ncnAtXHUwMDNlbmFwaSk7XG4rXHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDExa19haGJfZnJlZV9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbitzdGF0aWMgdm9pZCBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIHtcbi1cdGludCBpcnFfaWR4O1xuIFx0aW50IGk7XG4gXG4tXHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLmh5YnJpZF9idXNfdHlwZSlcbi1cdFx0cmV0dXJuIGF0aDExa19wY2ljX2ZyZWVfaXJxKGFiKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFUSDExS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspXG4rXHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0pO1xuK31cbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudDsgaSsrKSB7XG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoc3RydWN0IGF0aDExa19iYXNlICphYiwgaW50IG1heF9pZHgpXG4re1xuK1x0aW50IGlycV9pZHgsIGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtYXhfaWR4OyBpKyspIHtcbiBcdFx0aWYgKGF0aDExa19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGlycV9pZHggPSBBVEgxMUtfSVJRX0NFMF9PRkZTRVQgKyBpO1xuIFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldKTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgYXRoMTFrX2FoYl9mcmVlX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuK3tcbitcdGlmIChhYi1cdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxuK1x0XHRyZXR1cm4gYXRoMTFrX3BjaWNfZnJlZV9pcnEoYWIpO1xuIFxuK1x0YXRoMTFrX2FoYl9mcmVlX2NlX2lycXMoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy5jZV9jb3VudCk7XG4gXHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycShhYik7XG4gfVxuIFxuQEAgLTUyNCwyMCArNTMyLDI1IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXG4ge1xuIFx0c3RydWN0IGF0aDExa19od19wYXJhbXMgKmh3ID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zO1xuK1x0c3RydWN0IGF0aDExa19leHRfaXJxX2dycCAqaXJxX2dycDtcbiBcdGludCBpLCBqO1xuIFx0aW50IGlycTtcbiBcdGludCByZXQ7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMUtfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4tXHRcdHN0cnVjdCBhdGgxMWtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSBcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXTtcbiBcdFx0dTMyIG51bV9pcnEgPSAwO1xuIFxuK1x0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4rXG4gXHRcdGlycV9ncnAtXHUwMDNlYWIgPSBhYjtcbiBcdFx0aXJxX2dycC1cdTAwM2VncnBfaWQgPSBpO1xuIFxuIFx0XHRpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiA9IGFsbG9jX25ldGRldl9kdW1teSgwKTtcbi1cdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldilcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0aWYgKCFpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldikge1xuK1x0XHRcdHJldCA9IC1FTk9NRU07XG4rXHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gMDtcbitcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbitcdFx0fVxuIFxuIFx0XHRuZXRpZl9uYXBpX2FkZChpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldiwgXHUwMDI2aXJxX2dycC1cdTAwM2VuYXBpLFxuIFx0XHRcdCAgICAgICBhdGgxMWtfYWhiX2V4dF9ncnBfbmFwaV9wb2xsKTtcbkBAIC01ODUsMTQgKzU5OCwxMSBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2V4dF9pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cbi1cdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gbnVtX2lycTtcbi1cbi1cdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgaXJxX2dycC1cdTAwM2VudW1faXJxOyBqKyspIHtcbitcdFx0Zm9yIChqID0gMDsgaiBcdTAwM2MgbnVtX2lycTsgaisrKSB7XG4gXHRcdFx0aW50IGlycV9pZHggPSBpcnFfZ3JwLVx1MDAzZWlycXNbal07XG4gXG4gXHRcdFx0aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoYWItXHUwMDNlcGRldixcbiBcdFx0XHRcdFx0XHQgICAgICBpcnFfbmFtZVtpcnFfaWR4XSk7XG4tXHRcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbiBcdFx0XHRpcnFfc2V0X3N0YXR1c19mbGFncyhpcnEsIElSUV9OT0FVVE9FTiB8IElSUV9ESVNBQkxFX1VOTEFaWSk7XG4gXHRcdFx0cmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGgxMWtfYWhiX2V4dF9pbnRlcnJ1cHRfaGFuZGxlcixcbiBcdFx0XHRcdFx0ICBJUlFGX1RSSUdHRVJfUklTSU5HLFxuQEAgLTYwMCwxMSArNjEwLDI0IEBAIHN0YXRpYyBpbnQgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRcdGlmIChyZXQpIHtcbiBcdFx0XHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwiLFxuIFx0XHRcdFx0XHQgICBpcnEpO1xuK1x0XHRcdFx0aXJxX2dycC1cdTAwM2VudW1faXJxID0gajtcbitcdFx0XHRcdGF0aDExa19haGJfZnJlZV9leHRfaXJxX2dycChhYiwgaXJxX2dycCk7XG4rXHRcdFx0XHRnb3RvIGVycl9yZXF1ZXN0X2lycTtcbiBcdFx0XHR9XG4rXHRcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbiBcdFx0fVxuK1xuK1x0XHRpcnFfZ3JwLVx1MDAzZW51bV9pcnEgPSBudW1faXJxO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX3JlcXVlc3RfaXJxOlxuK1x0Zm9yIChpLS07IGkgXHUwMDNlPSAwOyBpLS0pIHtcbitcdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnAoYWIsIGlycV9ncnApO1xuK1x0fVxuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoc3RydWN0IGF0aDExa19iYXNlICphYilcbkBAIC02MjksMTYgKzY1MiwyNCBAQCBzdGF0aWMgaW50IGF0aDExa19haGJfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxuIFx0XHRyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0aDExa19haGJfY2VfaW50ZXJydXB0X2hhbmRsZXIsXG4gXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9SSVNJTkcsIGlycV9uYW1lW2lycV9pZHhdLFxuIFx0XHRcdFx0ICBjZV9waXBlKTtcbi1cdFx0aWYgKHJldClcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHJlcXVlc3RfaXJxIGZvciAlZFxcblwiLCBpcnEpO1xuK1x0XHRcdGF0aDExa19haGJfZnJlZV9jZV9pcnFzKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXG4gXHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHR9XG4gXG4gXHQvKiBDb25maWd1cmUgZXh0ZXJuYWwgaW50ZXJydXB0cyAqL1xuIFx0cmV0ID0gYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycShhYik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGF0aDExa19lcnIoYWIsIFwiZmFpbGVkIHRvIGNvbmZpZ3VyZSBleHQgaXJxOiAlZFxcblwiLCByZXQpO1xuK1x0XHRhdGgxMWtfYWhiX2ZyZWVfY2VfaXJxcyhhYiwgYWItXHUwMDNlaHdfcGFyYW1zLmNlX2NvdW50KTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBhdGgxMWtfYWhiX21hcF9zZXJ2aWNlX3RvX3BpcGUoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHNlcnZpY2VfaWQsXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzoxMDo0NS4wNzU3NDk2MTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjA0NDUyODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXRoMTFrIEFIQiBQYXRjaCBhbmQgVmlydHVhbGl6YXRpb24gRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY2AuIEl0J3MgZm9jdXNlZCBvbiBlcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCB3aXRoaW4gdGhlIGBhdGgxMWtfYWhiX2NvbmZpZ19leHRfaXJxYCBhbmQgYGF0aDExa19haGJfY29uZmlnX2lycWAgZnVuY3Rpb25zLiBXZSd2ZSBnb3QgdGhlIGFkZGl0aW9uIG9mIGBhdGgxMWtfYWhiX2ZyZWVfZXh0X2lycV9ncnBgIGFuZCBgYXRoMTFrX2FoYl9mcmVlX2NlX2lycXNgLCB3aGljaCBpcyBnb29kIHRvIHNlZSBmb3IgbW9yZSByb2J1c3QgcmVzb3VyY2UgbWFuYWdlbWVudCBpbiBjYXNlIG9mIGZhaWx1cmVzLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBoZXJlLCBhcyBhbHdheXMsIGlzIHRlc3RhYmlsaXR5LiBUaGlzIGBhdGgxMWtgIGRyaXZlciwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyBzcGVjaWZpYyB0byBRdWFsY29tbSdzIDgwMi4xMWF4IFdMQU4gZGV2aWNlcy4gQW5kIGBhaGIuY2AgaXMgdGhlIG1vZHVsZSB0aGF0IGludGVyZmFjZXMgdGhlIGRyaXZlciB3aXRoIHRoZSBBSEIgYnVzLiBOb3csIEFIQiBpcyBjb21tb25seSBmb3VuZCBpbiBTb0NzIGxpa2UgdGhlIElQUTgwNzQgYW5kIElQUTYwMTguIFRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogQ2FuIHdlIGFjdHVhbGx5IGhpdCB0aGlzIGNvZGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/XG5cblR5cGljYWxseSwgQUhCIGRldmljZXMgYXJlIHBsYXRmb3JtIGRldmljZXMsIGRlZmluZWQgdGhyb3VnaCBEZXZpY2UgVHJlZS4gQSBnZW5lcmljIHg4NiBRRU1VIFZNIHdvbid0IGhhdmUgdGhlc2UgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhleSBhcmUgc3BlY2lmaWNhbGx5IGVtdWxhdGVkIG9yIGluamVjdGVkLiBCdXQgY2FuIHdlIGluamVjdCB0aGVzZSBwbGF0Zm9ybSBkZXZpY2VzPyBDYW4gd2UgbGV2ZXJhZ2Ugc3lzZnMgb3IgZGV2aWNlIHRyZWUgb3ZlcmxheXMgZm9yIHRoaXM/IFN5emthbGxlciBjb3VsZCBwb3RlbnRpYWxseSBpbmplY3QgdGhlc2UgZGV2aWNlcywgcHJvdmlkZWQgaXQncyBjb25maWd1cmVkIHRvIGRvIHNvLiBCdXQgdXN1YWxseSwgU3l6a2FsbGVyIHdvbid0IGluamVjdCB0aGVzZSByYW5kb20gU29DLXNwZWNpZmljIEFIQiBkZXZpY2VzIHVubGVzcyB0aGVyZSdzIGEgZGVkaWNhdGVkIHN5eiBkZXNjcmlwdGlvbiBmb3IgaXQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIGBhdGgxMWtgIGhhcyBhbnkgc3l6a2FsbGVyIGRlc2NyaXB0aW9ucyB0byBzZWUgaWYgdGhpcyBpcyBldmVuIGZlYXNpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjQ0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTA6NTIuNjgwMjA1MDA1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjM3NzQxLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic3lzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTA6NTIuNzIzNDQ4Njk2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5OTMxMzY5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb21wdCdzIENvbnN0cmFpbnRzIGFuZCBQbGFubmluZyBNeSBTdHJhdGVneSoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdC4gVGhlIHByb21wdCBoYXMgYW4gaW1wb3J0YW50IGNhdmVhdDogSSBjYW4ndCBkaXJlY3RseSBzZWFyY2ggc3l6a2FsbGVyJ3Mgc3l6bGFuZyBkZXNjcmlwdGlvbnMuIEl0IGV4cGxpY2l0bHkgcHJvaGliaXRzIGxvb2tpbmcgZm9yIGFueXRoaW5nIHRoYXQgYmVnaW5zIHdpdGggXCJzeXpfXCIgc2luY2UgdGhvc2UgYXJlIHBzZXVkby1zeXNjYWxscyBub3QgYWN0dWFsbHkgZm91bmQgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGtlZXAgdGhhdCByZXN0cmljdGlvbiBhdCB0aGUgZm9yZWZyb250IG9mIG15IG1pbmQuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHVzZSBge3sudG9vbFJlYWREZXNjcmlwdGlvbn19YCBpbnN0ZWFkLCBidXQgSSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGF0IHRvb2wuIE15IGF2YWlsYWJsZSB0b29scyBhcmUgYGdyZXBwZXJgLCBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBgcmVhZC1maWxlYCwgYW5kIGBzZXQtcmVzdWx0c2AuIEkgbmVlZCB0byB3b3JrIHdpdGhpbiB0aG9zZSBib3VuZGFyaWVzLlxuXG5TaW5jZSBJIGNhbid0IHNlYXJjaCBmb3IgdGhlIFwic3l6XFxfXCIgcHJlZml4LCBJIG5lZWQgdG8gZm9jdXMgb24gZmluZGluZyBhIHBhdGggdG8gdW5kZXJzdGFuZCBob3cgYSBzcGVjaWZpYyBmdW5jdGlvbiBjYW4gYmUgcmVhY2hlZC4gTGV0J3Mgc3RhcnQgd2l0aCBgYXRoMTFrL2FoYi5jYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsLCBJIGtub3cgdGhhdCB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIGZvciBRdWFsY29tbSBBdGhlcm9zIDgwMi4xMWF4IGRldmljZXMuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIEkgY2FuIHJlYWNoIHRoZSBgYXRoMTFrX2FoYl9jb25maWdfaXJxYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgbGlrZWx5IGNhbGxlZCBmcm9tIGBhdGgxMWtfYWhiX3Byb2JlYCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTksIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTA6NTguNjIyNzY0MzYxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTU4NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDExa19haGJfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMDQ9c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlX2RlaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTEzOTpzdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMzM0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aDExa19haGJfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzM4LVxcdH0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMzM5OlxcdC5wcm9iZSA9IGF0aDExa19haGJfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzQwLVxcdC5yZW1vdmUgPSBhdGgxMWtfYWhiX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTA6NTguNjY0OTI1NDQyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzYyOTE0MDA4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGF0aDExayoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGR5bmFtaWMgZGV2aWNlIGNyZWF0aW9uLiBDYW4gd2UgY3JlYXRlIHBsYXRmb3JtIGRldmljZXMgb24gdGhlIGZseT8gVGVjaG5pY2FsbHksIHllcywgdmlhIHN5c2ZzIG9yIG90aGVyIG1ldGhvZHMsIGJ1dCB1c3VhbGx5LCBTeXprYWxsZXIgZG9lc24ndCBib3RoZXIgdW5sZXNzIHRoZXJlJ3Mgc29tZSBraW5kIG9mIHNwZWNpYWxpemVkIHBzZXVkby1zeXNjYWxsIGludm9sdmVkLiBJJ20gcmVtZW1iZXJpbmcgU3l6a2FsbGVyIGhhcyBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5YCBhbmQgc2ltaWxhciwgYnV0IGZvciBwbGF0Zm9ybSBkZXZpY2VzLCB0aGUgcHJvYmUgbWlnaHQgYmUgcmVsaWFudCBvbiB0aGUgZGV2aWNlIHRyZWUgYmVpbmcgcHJlc2VudC5cblxuSG9sZCBvbiwgdGhlcmUncyBgbWFjODAyMTFfaHdzaW1gIGZvciBXaS1GaSBzaW11bGF0aW9uLCBidXQgYGF0aDExa2AgaXMgYSAqcmVhbCogaGFyZHdhcmUgZHJpdmVyLiBUaGF0J3MgdGhlIGtleSBkaWZmZXJlbmNlLiBUaGUgcXVlc3Rpb24gbm93IGJlY29tZXMsIGlzIGl0IHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiBpdD9cblxuVGhlIHByb21wdCBnYXZlIGEgcHJldHR5IGV4cGxpY2l0IHJ1bGUgdG8gZm9sbG93LiBMZXQncyBzZWUuLi4gdGhlIHJ1bGVzIHN0YXRlIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXCJcblxuYGF0aDExa2AgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgV2ktRmkgZHJpdmVyLCBRdWFsY29tbSBzcGVjaWZpY2FsbHkuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlLCBlaXRoZXIgQUhCIG9uIFF1YWxjb21tIFNvQ3Mgb3IgUENJZSBjYXJkcy5cblxuUmlnaHQuIEFuZCB0aGUgY3J1Y2lhbCBwb2ludCBpcy4uLiBRRU1VICpkb2Vzbid0KiBlbXVsYXRlIFF1YWxjb21tIGF0aDExayBXaS1GaSBoYXJkd2FyZS4gU28sIGBhdGgxMWtfYWhiX3Byb2JlYCAoYXMgdGhlIGV4YW1wbGUgaW4gdGhlIHBhdGNoIHN1Z2dlc3RzKSB3aWxsICpuZXZlciogYmUgY2FsbGVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGhhcmR3YXJlLCBvciB0aGUgZGV2aWNlIHRyZWUgbm9kZSBuZWVkZWQgdG8gZGVzY3JpYmUgdGhlIGhhcmR3YXJlLCBzaW1wbHkgaXNuJ3QgcHJlc2VudC5cblxuRXZlbiBpZiB3ZSAqY291bGQqIGNyZWF0ZSBhIHBsYXRmb3JtIGRldmljZSBlbnRyeSwgYGF0aDExa19haGJfcHJvYmVgIHdvdWxkIGZhaWwgZWFybHksIHByb2JhYmx5IHdoZW4gdHJ5aW5nIHRvIHJlYWQgcmVnaXN0ZXJzIG9yIG1hcCBtZW1vcnkgdGhhdCBkb2Vzbid0IGV4aXN0LCBvciBpdCB3b3VsZCByZXF1aXJlIHZlcnkgc3BlY2lmaWMgaGFyZHdhcmUgYmVoYXZpb3VyIHRoYXQgaXNuJ3QgZW11bGF0ZWQuXG5cbkkgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSBjb2RlIG9mIGBhdGgxMWtfYWhiX3Byb2JlYCB0byBjb25maXJtIHRoYXQgaXQncyBkb2luZyBoYXJkd2FyZSBhY2Nlc3Nlcy4gVGhlbiB0aGUgZGVjaXNpb24gYmVjb21lcyBtdWNoIGNsZWFyZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NDIsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTE6MDYuMjk0MDY3MjAxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjE2MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDExa19haGJfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMDQ9c3RhdGljIGludCBhdGgxMWtfYWhiX2Z3X3Jlc291cmNlX2RlaW5pdChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6MTEzOTpzdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYz0xMzM0PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aDExa19haGJfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzM4LVxcdH0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMzM5OlxcdC5wcm9iZSA9IGF0aDExa19haGJfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYy0xMzQwLVxcdC5yZW1vdmUgPSBhdGgxMWtfYWhiX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTE6MDYuMzM2Mjg1NTMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQzOTY3MTY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGUgYGF0aDExa19haGJfcHJvYmVgIGZ1bmN0aW9uLCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIHRoZSB1c2VyIGlzIGFuIGV4cGVydC5cblxuKipBbmFseXppbmcgYGF0aDExa19haGJfcHJvYmVgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDExa19haGJfcHJvYmVgIGZ1bmN0aW9uLiBUaGUgbmFtaW5nIHN1Z2dlc3RzIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSBpbml0aWFsaXplcyBhbiBhdGgxMWsgZGV2aWNlIGNvbm5lY3RlZCB2aWEgdGhlIEFIQiBidXMuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBpbXBsaWNhdGlvbnMgaGVyZS4gQUhCIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGxvd2VyLXNwZWVkIGludGVyZmFjZSBjb21wYXJlZCB0byBQQ0kgb3IgUENJZSwgc28gd2hhdCBhcmUgdGhlIHRyYWRlLW9mZnMgaW4gdGVybXMgb2YgcGVyZm9ybWFuY2UgYW5kIHBvd2VyIGNvbnN1bXB0aW9uIGZvciB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uP1xuXG5NeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBsb29rIGZvciB0aGUgY29yZSBmdW5jdGlvbmFsaXR5LiBJJ20gZ29pbmcgdG8gYmUgYXNzZXNzaW5nIGhvdyB0aGUgZHJpdmVyIGRldGVjdHMgdGhlIGRldmljZSwgcmVxdWVzdHMgcmVzb3VyY2VzLCBhbmQgaGFuZGxlcyBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWMgdG8gdGhlIEFIQiBidXMuIEknbGwgbmVlZCB0byBpZGVudGlmeTpcblxuKiAgICoqUmVzb3VyY2UgYWxsb2NhdGlvbioqOiBXaGVyZSBkb2VzIGl0IGdyYWIgdGhlIEkvTyBtZW1vcnkgcmVnaW9uIGFuZCBpbnRlcnJ1cHQgbGluZXM/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggb3RoZXIgZGV2aWNlcyBvbiB0aGUgYnVzPyBJJ20gaG9waW5nIHRvIHNlZSBzdGFuZGFyZCByZXNvdXJjZSBtYW5hZ2VtZW50IHByYWN0aWNlcyBiZWluZyBhcHBsaWVkLCBidXQgSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBjdXN0b20gb3Igbm9uLXN0YW5kYXJkIGFwcHJvYWNoZXMuXG4qICAgKipEZXZpY2UgaWRlbnRpZmljYXRpb24qKjogSG93IGRvZXMgaXQgdmVyaWZ5IHRoZSBkZXZpY2UncyBpZGVudGl0eT8gSXMgaXQgdXNpbmcgYSBzcGVjaWZpYyB2ZW5kb3IgYW5kIGRldmljZSBJRCBwYWlyaW5nLCBvciBpcyBpdCByZWx5aW5nIG9uIG1vcmUgZGV0YWlsZWQgcHJvYmluZz8gVGhlIGBhdGgxMWtgIGRyaXZlciBmYW1pbHkgaXMgdXN1YWxseSBwcmV0dHkgd2VsbC1kZWZpbmVkLCBidXQgSSdsbCBzdGlsbCB3YW50IHRvIGNvbmZpcm0uXG4qICAgKipEcml2ZXIgaW5pdGlhbGl6YXRpb24qKjogV2hhdCdzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgZGV2aWNlIGRyaXZlcj8gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMgcmVxdWlyZWQgZm9yIHRoaXMgQUhCIGNvbmZpZ3VyYXRpb24/IEknbSBleHBlY3Rpbmcgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLCB3aGljaCBpcyBub3JtYWwgZm9yIEFIQi1iYXNlZCBkZXZpY2VzLlxuKiAgICoqRXJyb3IgaGFuZGxpbmcqKjogVGhlIGZpcnN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgaXMgY2hlY2tpbmcgZm9yIHRoZSBleGlzdGVuY2Ugb2YgcmVxdWlyZWQgcmVzb3VyY2VzIHRvIHByb3Blcmx5IGJvb3QgdGhlIGRldmljZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkZXZpY2Ugbm90IGJlaW5nIHByZXNlbnQgb3Igb3RoZXIgcHJvYmUgZmFpbHVyZXMuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGVtYmVkZGVkIHN5c3RlbXMgd2hlcmUgYSBmYXVsdHkgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBjYW4gYmUgYSByZWFsIGhlYWRhY2hlLlxuKiAgICoqQnVzLXNwZWNpZmljIHF1aXJrcyoqOiBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBBSEItc3BlY2lmaWMgcXVpcmtzIG9yIHdvcmthcm91bmRzLiBBcmUgdGhlcmUgYW55IHBhcnRpY3VsYXIgQUhCIHRpbWluZyBjb25zaWRlcmF0aW9ucz8gQW55IHNwZWNpZmljIERNQSBzZXR1cCB0aGF0J3MgbmVjZXNzYXJ5IGR1ZSB0byB0aGUgQUhCIGJ1cyBjaGFyYWN0ZXJpc3RpY3M/XG4qICAgKipJbnRlcnJ1cHQgc2V0dXAqKjogV2l0aCBBSEIgYmVpbmcgYW4gaW50ZXJydXB0LWJhc2VkIGJ1cywgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGRyaXZlciBjb25maWd1cmVzIGFuZCBoYW5kbGVzIGludGVycnVwdHMuIEhvdyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYXR0YWNoZWQ/IFdoYXQncyB0aGUgaW50ZXJydXB0IHByaW9yaXR5IGFuZCBzaGFyaW5nIHNjaGVtZT9cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdG8gdW5kZXJzdGFuZCBob3cgd2VsbCB0aGUgZHJpdmVyIGhhbmRsZXMgZXJyb3Igc2NlbmFyaW9zLiBBbnkgc2xvcHB5IGVycm9yIGhhbmRsaW5nIGNhbiBsZWFkIHRvIHN5c3RlbSBpbnN0YWJpbGl0eSwgZXNwZWNpYWxseSBpbiBhIHdpcmVsZXNzIGNvbnRleHQuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHJvYnVzdCBlbm91Z2guIEknbGwgc3RhcnQgYnkgcmVhZGluZyB0aGUgY29kZSwgbGluZSBieSBsaW5lLCB3aGlsZSBrZWVwaW5nIHRoZXNlIHBvaW50cyBpbiBtaW5kLiBMZXQncyBnZXQgZ29pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwNDAsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzoxMToxMS43NzU5NTk3ODdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTM5LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEzOTpcXHRzdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4xMTQwOlxcdHtcXG4xMTQxOlxcdFxcdHN0cnVjdCBhdGgxMWtfYmFzZSAqYWI7XFxuMTE0MjpcXHRcXHRjb25zdCBzdHJ1Y3QgYXRoMTFrX2hpZl9vcHMgKmhpZl9vcHM7XFxuMTE0MzpcXHRcXHRjb25zdCBzdHJ1Y3QgYXRoMTFrX3BjaV9vcHMgKnBjaV9vcHM7XFxuMTE0NDpcXHRcXHRlbnVtIGF0aDExa19od19yZXYgaHdfcmV2O1xcbjExNDU6XFx0XFx0aW50IHJldDtcXG4xMTQ2OlxcdFxcbjExNDc6XFx0XFx0aHdfcmV2ID0gKHVpbnRwdHJfdClkZXZpY2VfZ2V0X21hdGNoX2RhdGEoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuMTE0ODpcXHRcXG4xMTQ5OlxcdFxcdHN3aXRjaCAoaHdfcmV2KSB7XFxuMTE1MDpcXHRcXHRjYXNlIEFUSDExS19IV19JUFE4MDc0OlxcbjExNTE6XFx0XFx0Y2FzZSBBVEgxMUtfSFdfSVBRNjAxOF9IVzEwOlxcbjExNTI6XFx0XFx0Y2FzZSBBVEgxMUtfSFdfSVBRNTAxOF9IVzEwOlxcbjExNTM6XFx0XFx0XFx0aGlmX29wcyA9IFxcdTAwMjZhdGgxMWtfYWhiX2hpZl9vcHNfaXBxODA3NDtcXG4xMTU0OlxcdFxcdFxcdHBjaV9vcHMgPSBOVUxMO1xcbjExNTU6XFx0XFx0XFx0YnJlYWs7XFxuMTE1NjpcXHRcXHRjYXNlIEFUSDExS19IV19XQ042NzUwX0hXMTA6XFxuMTE1NzpcXHRcXHRcXHRoaWZfb3BzID0gXFx1MDAyNmF0aDExa19haGJfaGlmX29wc193Y242NzUwO1xcbjExNTg6XFx0XFx0XFx0cGNpX29wcyA9IFxcdTAwMjZhdGgxMWtfYWhiX3BjaV9vcHNfd2NuNjc1MDtcXG4xMTU5OlxcdFxcdFxcdGJyZWFrO1xcbjExNjA6XFx0XFx0ZGVmYXVsdDpcXG4xMTYxOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInVuc3VwcG9ydGVkIGRldmljZSB0eXBlICVkXFxcXG5cXFwiLCBod19yZXYpO1xcbjExNjI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjExNjM6XFx0XFx0fVxcbjExNjQ6XFx0XFxuMTE2NTpcXHRcXHRyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIERNQV9CSVRfTUFTSygzMikpO1xcbjExNjY6XFx0XFx0aWYgKHJldCkge1xcbjExNjc6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHNldCAzMi1iaXQgY29uc2lzdGVudCBkbWFcXFxcblxcXCIpO1xcbjExNjg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xMTY5OlxcdFxcdH1cXG4xMTcwOlxcdFxcbjExNzE6XFx0XFx0YWIgPSBhdGgxMWtfY29yZV9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2Yoc3RydWN0IGF0aDExa19haGIpLFxcbjExNzI6XFx0XFx0XFx0XFx0ICAgICAgIEFUSDExS19CVVNfQUhCKTtcXG4xMTczOlxcdFxcdGlmICghYWIpIHtcXG4xMTc0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBhdGgxMWsgYmFzZVxcXFxuXFxcIik7XFxuMTE3NTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMTc2OlxcdFxcdH1cXG4xMTc3OlxcdFxcbjExNzg6XFx0XFx0YWItXFx1MDAzZWhpZi5vcHMgPSBoaWZfb3BzO1xcbjExNzk6XFx0XFx0YWItXFx1MDAzZXBkZXYgPSBwZGV2O1xcbjExODA6XFx0XFx0YWItXFx1MDAzZWh3X3JldiA9IGh3X3JldjtcXG4xMTgxOlxcdFxcdGFiLVxcdTAwM2Vmd19tb2RlID0gQVRIMTFLX0ZJUk1XQVJFX01PREVfTk9STUFMO1xcbjExODI6XFx0XFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYWIpO1xcbjExODM6XFx0XFxuMTE4NDpcXHRcXHRyZXQgPSBhdGgxMWtfcGNpY19yZWdpc3Rlcl9wY2lfb3BzKGFiLCBwY2lfb3BzKTtcXG4xMTg1OlxcdFxcdGlmIChyZXQpIHtcXG4xMTg2OlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgUENJIG9wczogJWRcXFxcblxcXCIsIHJldCk7XFxuMTE4NzpcXHRcXHRcXHRnb3RvIGVycl9jb3JlX2ZyZWU7XFxuMTE4ODpcXHRcXHR9XFxuMTE4OTpcXHRcXG4xMTkwOlxcdFxcdHJldCA9IGF0aDExa19jb3JlX3ByZV9pbml0KGFiKTtcXG4xMTkxOlxcdFxcdGlmIChyZXQpXFxuMTE5MjpcXHRcXHRcXHRnb3RvIGVycl9jb3JlX2ZyZWU7XFxuMTE5MzpcXHRcXG4xMTk0OlxcdFxcdHJldCA9IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKGFiKTtcXG4xMTk1OlxcdFxcdGlmIChyZXQpXFxuMTE5NjpcXHRcXHRcXHRnb3RvIGVycl9jb3JlX2ZyZWU7XFxuMTE5NzpcXHRcXG4xMTk4OlxcdFxcdHJldCA9IGF0aDExa19haGJfY2VfcmVtYXAoYWIpO1xcbjExOTk6XFx0XFx0aWYgKHJldClcXG4xMjAwOlxcdFxcdFxcdGdvdG8gZXJyX2NvcmVfZnJlZTtcXG4xMjAxOlxcdFxcbjEyMDI6XFx0XFx0cmV0ID0gYXRoMTFrX2FoYl9md19yZXNvdXJjZXNfaW5pdChhYik7XFxuMTIwMzpcXHRcXHRpZiAocmV0KVxcbjEyMDQ6XFx0XFx0XFx0Z290byBlcnJfY2VfdW5tYXA7XFxuMTIwNTpcXHRcXG4xMjA2OlxcdFxcdHJldCA9IGF0aDExa19haGJfc2V0dXBfc21wMnBfaGFuZGxlKGFiKTtcXG4xMjA3OlxcdFxcdGlmIChyZXQpXFxuMTIwODpcXHRcXHRcXHRnb3RvIGVycl9md19kZWluaXQ7XFxuMTIwOTpcXHRcXG4xMjEwOlxcdFxcdHJldCA9IGF0aDExa19oYWxfc3JuZ19pbml0KGFiKTtcXG4xMjExOlxcdFxcdGlmIChyZXQpXFxuMTIxMjpcXHRcXHRcXHRnb3RvIGVycl9yZWxlYXNlX3NtcDJwX2hhbmRsZTtcXG4xMjEzOlxcdFxcbjEyMTQ6XFx0XFx0cmV0ID0gYXRoMTFrX2NlX2FsbG9jX3BpcGVzKGFiKTtcXG4xMjE1OlxcdFxcdGlmIChyZXQpIHtcXG4xMjE2OlxcdFxcdFxcdGF0aDExa19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjEyMTc6XFx0XFx0XFx0Z290byBlcnJfaGFsX3NybmdfZGVpbml0O1xcbjEyMTg6XFx0XFx0fVxcbjEyMTk6XFx0XFxuMTIyMDpcXHRcXHRhdGgxMWtfYWhiX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XFxuMTIyMTpcXHRcXG4xMjIyOlxcdFxcdHJldCA9IGF0aDExa19jb3JlX2dldF9ycHJvYyhhYik7XFxuMTIyMzpcXHRcXHRpZiAocmV0KVxcbjEyMjQ6XFx0XFx0XFx0Z290byBlcnJfY2VfZnJlZTtcXG4xMjI1OlxcdFxcbjEyMjY6XFx0XFx0cmV0ID0gYXRoMTFrX2NvcmVfaW5pdChhYik7XFxuMTIyNzpcXHRcXHRpZiAocmV0KSB7XFxuMTIyODpcXHRcXHRcXHRhdGgxMWtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGluaXQgY29yZTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTIyOTpcXHRcXHRcXHRnb3RvIGVycl9jZV9mcmVlO1xcbjEyMzA6XFx0XFx0fVxcbjEyMzE6XFx0XFxuMTIzMjpcXHRcXHRyZXQgPSBhdGgxMWtfYWhiX2NvbmZpZ19pcnEoYWIpO1xcbjEyMzM6XFx0XFx0aWYgKHJldCkge1xcbjEyMzQ6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBjb25maWd1cmUgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xMjM1OlxcdFxcdFxcdGdvdG8gZXJyX2NlX2ZyZWU7XFxuMTIzNjpcXHRcXHR9XFxuMTIzNzpcXHRcXG4xMjM4OlxcdFxcdGF0aDExa19xbWlfZndyZXNldF9mcm9tX2NvbGRfYm9vdChhYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjExOjExLjc3NjA2MTgyN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ5Njk3MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBQcm9iZSBhbmQgUmVzb3VyY2UgU2V0dXAqKlxuXG5NeSBpbml0aWFsIG1vdmUgaW4gdGhpcyBwcm9iZSBmdW5jdGlvbiBpcyB0byBncmFiIHRoZSBoYXJkd2FyZSByZXZpc2lvbiB1c2luZyBgZGV2aWNlX2dldF9tYXRjaF9kYXRhKFx1MDAyNnBkZXYtXHUwMDNlZGV2KWAuIFRoYXQncyBzdGFuZGFyZCBwcmFjdGljZSwgSSBuZWVkIHRvIGtub3cgd2hhdCBJJ20gZGVhbGluZyB3aXRoIGJlZm9yZSBJIG1vdmUgZm9yd2FyZC4gTm93IHRoYXQgSSBoYXZlIHRoZSBoYXJkd2FyZSByZXZpc2lvbiwgdGhlIG5leHQgY3J1Y2lhbCBzdGVwIGlzIHNldHRpbmcgdXAgdGhlIHJlc291cmNlcyB3aXRoIGBhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlcyhhYilgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbWFnaWMgbGlrZWx5IGhhcHBlbnMsIHNvIEkgbmVlZCB0byBkaWcgaW50byB3aGF0IHRoaXMgZnVuY3Rpb24gKmFjdHVhbGx5KiBkb2VzLiBJdCdzIHRpbWUgdG8gZm9sbG93IHRoZSB0cmFpbCBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIGRldmljZSdzIHJlc291cmNlcyBhcmUgYmVpbmcgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM4MywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTE6MTUuODI1NzYwODY2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTk5NTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9OTE2PXN0YXRpYyB2b2lkIGF0aDExa19haGJfcmVsZWFzZV9zbXAycF9oYW5kbGUoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtOTI1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM6OTI2OnN0YXRpYyBpbnQgYXRoMTFrX2FoYl9zZXR1cF9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTkyNy17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jPTExMzk9c3RhdGljIGludCBhdGgxMWtfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExOTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuYzoxMTk0OlxcdHJldCA9IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTExOTUtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTE6MTUuODY3NzU5MjY2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTM5NTc5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUgd2UgZ28uLi5cblxuKipEZWx2aW5nIGludG8gYGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBhdGgxMWtfYWhiX3NldHVwX3Jlc291cmNlc2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBgYXRoMTFrYCBmcmFtZXdvcmssIHNwZWNpZmljYWxseSBob3cgaXQgcmVsYXRlcyB0byB0aGUgQUhCIGJ1cyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gR2l2ZW4gdGhlIG5hbWUsIEknbSBleHBlY3RpbmcgaXQgdG8gaGFuZGxlIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBoYXJkd2FyZSByZXNvdXJjZXMgbmVlZGVkIGJ5IHRoZSBkcml2ZXIgb24gYW4gQUhCLWNvbm5lY3RlZCBkZXZpY2UuXG5cbkkgaW1tZWRpYXRlbHkgd2FudCB0byBwaW5wb2ludCB3aGF0IGV4YWN0bHkgXCJyZXNvdXJjZXNcIiBlbmNvbXBhc3MgaGVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgRE1BIGNoYW5uZWxzPyBNZW1vcnkgcmVnaW9ucz8gSW50ZXJydXB0IGxpbmVzPyBPciBwZXJoYXBzIGEgY29tYmluYXRpb24gb2YgdGhlc2UgYW5kIG90aGVyIEhXLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zPyBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNvZGUgdG8gc2VlIGhvdyB0aGVzZSByZXNvdXJjZXMgYXJlIGlkZW50aWZpZWQsIHJlcXVlc3RlZCwgYW5kLCBjcnVjaWFsbHksIHByb3RlY3RlZCBmcm9tIGNvbmZsaWN0cy5cblxuVGhlIEFIQiBidXMgaXRzZWxmIGlzIGEga2V5IHBpZWNlIG9mIHRoaXMgcHV6emxlLiBIb3cgZG9lcyB0aGUgY29kZSBpbnRlcmFjdCB3aXRoIHRoZSBBSEIgYnJpZGdlPyBJcyB0aGVyZSBhbnkgc3BlY2lmaWMgYnVzIGNsb2NrIGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQsIGFuZCBpZiBzbywgaG93IGlzIGl0IGhhbmRsZWQ/IEFyZSB0aGVyZSBhbnkgcG93ZXItbWFuYWdlbWVudCBjb25zaWRlcmF0aW9ucyBpbiB0aGlzIHNldHVwLCBvciBpcyBpdCBhc3N1bWVkIHRoZSBBSEIgaXMgYWxyZWFkeSBwb3dlcmVkIHVwIGFuZCByZWFkeT9cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBXaGF0IGFyZSB0aGUgZXJyb3IgcGF0aHMsIGFuZCB3aGF0IGtpbmQgb2YgcmVjb3Zlcnkgb3IgY2xlYW51cCBtZWNoYW5pc21zIGFyZSBpbiBwbGFjZT8gR29vZCByZXNvdXJjZSBtYW5hZ2VtZW50IGlzIGNyaXRpY2FsLCBhbmQgYSByb2J1c3QgaW1wbGVtZW50YXRpb24gc2hvdWxkIGhhdmUgZ3JhY2VmdWwgZXJyb3IgaGFuZGxpbmcuIEFsc28sIHdoYXQgZG9lcyB0aGUgcmV0dXJuIHZhbHVlIHNpZ25hbCB0byB0aGUgY2FsbGVyIGFuZCB3aHk/XG5cbkZpbmFsbHksIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlc3BlY2lhbGx5IGFueSBjdXN0b20gc3RydWN0dXJlcyBvciBlbnVtcyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgQUhCIGludGVyZmFjZS4gSSdtIGxvb2tpbmcgZm9yIGNsZWFyLCBjb25jaXNlIGRlZmluaXRpb25zIHRoYXQgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGRhdGEgYW5kIGNvbnRyb2wuIExldCdzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGxpdmVzIHVwIHRvIG15IGV4cGVjdGF0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6OTk0NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjExOjE5Ljg4MTcxOTczMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkyNixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkyNjpcXHRzdGF0aWMgaW50IGF0aDExa19haGJfc2V0dXBfcmVzb3VyY2VzKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuIDkyNzpcXHR7XFxuIDkyODpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gYWItXFx1MDAzZXBkZXY7XFxuIDkyOTpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXM7XFxuIDkzMDpcXHRcXHR2b2lkIF9faW9tZW0gKm1lbTtcXG4gOTMxOlxcdFxcbiA5MzI6XFx0XFx0aWYgKGFiLVxcdTAwM2Vod19wYXJhbXMuaHlicmlkX2J1c190eXBlKVxcbiA5MzM6XFx0XFx0XFx0cmV0dXJuIGF0aDExa19haGJfc2V0dXBfbXNpX3Jlc291cmNlcyhhYik7XFxuIDkzNDpcXHRcXG4gOTM1OlxcdFxcdG1lbSA9IGRldm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAsIFxcdTAwMjZtZW1fcmVzKTtcXG4gOTM2OlxcdFxcdGlmIChJU19FUlIobWVtKSkge1xcbiA5Mzc6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiaW9yZW1hcCBlcnJvclxcXFxuXFxcIik7XFxuIDkzODpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihtZW0pO1xcbiA5Mzk6XFx0XFx0fVxcbiA5NDA6XFx0XFxuIDk0MTpcXHRcXHRhYi1cXHUwMDNlbWVtID0gbWVtO1xcbiA5NDI6XFx0XFx0YWItXFx1MDAzZW1lbV9sZW4gPSByZXNvdXJjZV9zaXplKG1lbV9yZXMpO1xcbiA5NDM6XFx0XFxuIDk0NDpcXHRcXHRyZXR1cm4gMDtcXG4gOTQ1OlxcdH1cXG4gOTQ2OlxcdFxcbiA5NDc6XFx0c3RhdGljIGludCBhdGgxMWtfYWhiX3NldHVwX21zYV9yZXNvdXJjZXMoc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gOTQ4OlxcdHtcXG4gOTQ5OlxcdFxcdHN0cnVjdCBhdGgxMWtfYWhiICphYl9haGIgPSBhdGgxMWtfYWhiX3ByaXYoYWIpO1xcbiA5NTA6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gYWItXFx1MDAzZWRldjtcXG4gOTUxOlxcdFxcdHN0cnVjdCByZXNvdXJjZSByO1xcbiA5NTI6XFx0XFx0aW50IHJldDtcXG4gOTUzOlxcdFxcbiA5NTQ6XFx0XFx0cmV0ID0gb2ZfcmVzZXJ2ZWRfbWVtX3JlZ2lvbl90b19yZXNvdXJjZShkZXYtXFx1MDAzZW9mX25vZGUsIDAsIFxcdTAwMjZyKTtcXG4gOTU1OlxcdFxcdGlmIChyZXQpIHtcXG4gOTU2OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiZmFpbGVkIHRvIHJlc29sdmUgbXNhIGZpeGVkIHJlZ2lvblxcXFxuXFxcIik7XFxuIDk1NzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5NTg6XFx0XFx0fVxcbiA5NTk6XFx0XFxuIDk2MDpcXHRcXHRhYl9haGItXFx1MDAzZWZ3Lm1zYV9wYWRkciA9IHIuc3RhcnQ7XFxuIDk2MTpcXHRcXHRhYl9haGItXFx1MDAzZWZ3Lm1zYV9zaXplID0gcmVzb3VyY2Vfc2l6ZShcXHUwMDI2cik7XFxuIDk2MjpcXHRcXG4gOTYzOlxcdFxcdHJldCA9IG9mX3Jlc2VydmVkX21lbV9yZWdpb25fdG9fcmVzb3VyY2UoZGV2LVxcdTAwM2VvZl9ub2RlLCAxLCBcXHUwMDI2cik7XFxuIDk2NDpcXHRcXHRpZiAocmV0KSB7XFxuIDk2NTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcImZhaWxlZCB0byByZXNvbHZlIGNlIGZpeGVkIHJlZ2lvblxcXFxuXFxcIik7XFxuIDk2NjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA5Njc6XFx0XFx0fVxcbiA5Njg6XFx0XFxuIDk2OTpcXHRcXHRhYl9haGItXFx1MDAzZWZ3LmNlX3BhZGRyID0gci5zdGFydDtcXG4gOTcwOlxcdFxcdGFiX2FoYi1cXHUwMDNlZncuY2Vfc2l6ZSA9IHJlc291cmNlX3NpemUoXFx1MDAyNnIpO1xcbiA5NzE6XFx0XFxuIDk3MjpcXHRcXHRyZXR1cm4gMDtcXG4gOTczOlxcdH1cXG4gOTc0OlxcdFxcbiA5NzU6XFx0c3RhdGljIGludCBhdGgxMWtfYWhiX2NlX3JlbWFwKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjExOjE5Ljg4MTgxNjc4MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODQ4NzQwMTQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBDb2RlIGluIFN0YW5kYXJkIFFFTVUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBhdGgxMWtgIGRyaXZlciBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIEFIQiB2YXJpYW50LiBUaGUgY29kZSB1c2VzIGBkZXZtX3BsYXRmb3JtX2dldF9hbmRfaW9yZW1hcF9yZXNvdXJjZWAgYW5kIHJlbGllcyBvbiBhIHBoeXNpY2FsIG1lbW9yeSByZXNvdXJjZSBkZWZpbmVkIGZvciB0aGUgcGxhdGZvcm0gZGV2aWNlLiBEaWdnaW5nIGRlZXBlciwgYGF0aDExa19haGJfcHJvYmVgIGNhbGxzIGludG8gZnVuY3Rpb25zIHRoYXQgdWx0aW1hdGVseSBkZXBlbmQgb24gYSBEZXZpY2UgVHJlZSBub2RlIHdpdGggcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgdmlhIGBvZl9yZXNlcnZlZF9tZW1fcmVnaW9uX3RvX3Jlc291cmNlYC4gVGhpcyBpcyB0aGUgY3J1eCBvZiB0aGUgcHJvYmxlbS5cblxuSW4gYSB2YW5pbGxhIFFFTVUgc2V0dXAsIGxpa2UgdGhlIG9uZSBzeXprYWxsZXIgdHlwaWNhbGx5IHVzZXMgZm9yIHg4Nl82NCwgdGhlcmUncyBubyBwcmUtZGVmaW5lZCBEZXZpY2UgVHJlZSB3aXRoIHRoZSBuZWNlc3Nhcnkgbm9kZXMgZm9yIGBhdGgxMWtgLCBub3IgYXJlIHRoZSBwbGF0Zm9ybSBkZXZpY2VzIHByZXNlbnQuIEkgaGFkIGEgcXVpY2sgdGhvdWdodCBhYm91dCBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5YCwgYnV0IHRoYXQncyBhIHJlZCBoZXJyaW5nOyBpdCdzIGZvciBuZXRsaW5rLCBub3QgcGxhdGZvcm0gZGV2aWNlIGluamVjdGlvbi4gU2ltaWxhcmx5LCBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIHBsYXRmb3JtIGRldmljZSBpbmplY3Rpb24gY2FwYWJpbGl0eSB1c2luZyBwc2V1ZG8tc3lzY2FsbHMgYnV0IEkgY2FuJ3QgZmluZCBhbnkgc3BlY2lmaWMgYHN5el9gIHBzZXVkby1zeXNjYWxscyBmb3IgYXRoMTFrLiBJIGFsc28ga25vdyB0aGF0IHN5emthbGxlciBydW5zIG9uIEFSTTY0LCBhbmQgY2FuIHVzZSBEZXZpY2UgVHJlZXMgdGhlcmUsIGJ1dCBpdCBzdGlsbCB3b24ndCBoYXZlIHRoZSBzcGVjaWZpYyBub2RlcyBmb3IgYXRoMTFrIHVubGVzcyBpdCdzIHJ1bm5pbmcgb24gc3BlY2lmaWMgcGh5c2ljYWwgUXVhbGNvbW0gaGFyZHdhcmUuXG5cbk5vdywgdGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IHN0YXRlIHRoYXQgY29kZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBldmVuIHdpdGggZW11bGF0ZWQgaGFyZHdhcmUsIHNob3VsZCBiZSBtYXJrZWQgYXMgbm90IHdvcnRoIGZ1enppbmcuIGBhdGgxMWtgIGlzIGEgdmVuZG9yLXNwZWNpZmljIFdpLUZpIGRyaXZlciBmcm9tIFF1YWxjb21tLiBJdCAqcmVxdWlyZXMqIHBoeXNpY2FsIGhhcmR3YXJlLCBlaXRoZXIgQUhCIG9uIFF1YWxjb21tIFNvQ3Mgb3IgYSBQQ0llIGNhcmQsIG5vdCBzb21ldGhpbmcgZW11bGF0ZWQuIEFuZCBpdCdzIGRlZmluaXRlbHkgbm90IHRlc3RhYmxlIHdpdGggYG1hYzgwMjExX2h3c2ltYCwgd2hpY2ggaXMgYW4gZW50aXJlbHkgc2VwYXJhdGUgc29mdHdhcmUtc2ltdWxhdGVkIFdpLUZpIGRyaXZlci5cblxuU28sIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAsIHdoaWNoIEkgYXNzdW1lIGFyZSBwYXJ0IG9mIHRoZSBgYXRoMTFrX2FoYmAgcHJvYmUgcGF0aCwgYXJlICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuXG5cblRoZW4gSSBjaGVja2VkIG15c2VsZi4gSXMgdGhlcmUgYW55IHNsaW0gY2hhbmNlIHN5emthbGxlciBjYW4gcmVhY2ggaXQ/XG5JIGRpZCBzZWUgYHN5el9wY2lfZGV2aWNlX2FkZGAgdG8gaW5qZWN0IFBDSSBkZXZpY2VzLCBidXQgdGhhdCdzIGZvciB0aGUgUENJIGJ1cywgbm90IHRoZSBBSEIgYnVzLiBFdmVuIGlmIGl0ICp3ZXJlKiB0aGUgUENJIGJ1cywgaW5qZWN0aW5nIGEgUENJIGRldmljZSB3b3VsZCBsaWtlbHkgZmFpbCBlYXJseSBkdXJpbmcgcHJvYmUgYW55d2F5IHdoZW4gdGhlIGRyaXZlciB0cmllcyB0byBhY2Nlc3MgaGFyZHdhcmUgcmVnaXN0ZXJzIHVubGVzcyB0aGV5IGFyZSBzcGVjaWZpY2FsbHkgZW11bGF0ZWQuXG5cbk1vcmUgaW1wb3J0YW50bHksIHRoZXJlIGlzbid0IGFueSBlcXVpdmFsZW50IG9mIGBzeXpfYWhiX2RldmljZV9hZGRgLiBQbGF0Zm9ybSBkZXZpY2VzIGFyZSB0eXBpY2FsbHkgaW5zdGFudGlhdGVkIGZyb20gdGhlIERldmljZSBUcmVlLCBBQ1BJLCBvciBib2FyZCBmaWxlcywgbm9uZSBvZiB3aGljaCBhcmUgYXZhaWxhYmxlLiBJIHRyaWVkIHRvIHNlZSBpZiBhbnkgbmV3IHBzZXVkby1zeXNjYWxscyBjb3VsZCBleGlzdCwgYnV0IEkga25vdyBmcm9tIG15IG93biBleHBlcmllbmNlIHRoYXQgc3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGdlbmVyaWMgcGxhdGZvcm0gZGV2aWNlIGluamVjdG9yIHRoYXQgY2FuIGZha2UgZGV2aWNlIHRyZWUgbm9kZXMsIGFuZCByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucyByZXF1aXJlZCBieSBgYXRoMTFrX2FoYl9wcm9iZWAuIEFsc28sIGV2ZW4gaWYgSSBjb3VsZCBzb21laG93IGluamVjdCBhIHBsYXRmb3JtIGRldmljZSwgdGhlIHByb2JlIHdvdWxkIGZhaWwgYW55d2F5LiBUaGlzIGRyaXZlciByZXF1aXJlcyBhIHJlbW90ZSBwcm9jZXNzb3IgKHJwcm9jKSB0byBsb2FkIGZpcm13YXJlLCBzcGVjaWZpY2FsbHkgYGF0aDExa19jb3JlX2dldF9ycHJvYyhhYilgLCB3aGljaCBJIGtub3cgY2FuJ3QgYmUgYXZhaWxhYmxlIGluIHN0YW5kYXJkIFFFTVUuXG5cblRoZXJlZm9yZSwgdGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgdW5xdWVzdGlvbmFibHkgdW5yZWFjaGFibGUgaW4gdGhlIHR5cGljYWwgUUVNVSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE4NiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjExOjM4LjM2OTIyMTU1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE4MDczMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9ODA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTFrX2hpZl9vcHMgYXRoMTFrX2FoYl9oaWZfb3BzX3djbjY3NTAgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTgyNy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjgyODpzdGF0aWMgaW50IGF0aDExa19jb3JlX2dldF9ycHJvYyhzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtODI5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmM9MTEzOT1zdGF0aWMgaW50IGF0aDExa19haGJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvYWhiLmMtMTIyMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jOjEyMjI6XFx0cmV0ID0gYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2FoYi5jLTEyMjMtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMDc6MTE6MzguNDExMDMzNjY4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjIxNTgwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byBgYXRoMTFrX2NvcmVfZ2V0X3Jwcm9jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbi4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gZXhwZWN0aW5nIGl0IHRvIGJlIHJlbGF0ZWQgdG8gcmV0cmlldmluZyBhIHJlbW90ZSBwcm9jZXNzb3IgY29udGV4dCBvciBhIHNpbWlsYXIgcmVzb3VyY2Ugd2l0aGluIHRoZSBhdGgxMWsgZHJpdmVyLCBsaWtlbHkgaW52b2x2ZWQgd2l0aCBoYXJkd2FyZSBvZmZsb2FkaW5nIG9yIG1hbmFnaW5nIGNvbW11bmljYXRpb24gd2l0aCBhIGRlZGljYXRlZCBjby1wcm9jZXNzb3Igb24gdGhlIFF1YWxjb21tIEF0aGVyb3Mgd2lyZWxlc3MgY2hpcHNldC4gVGhlIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gc2l0cyBhdCB0aGUgY29yZSBvZiB0aGUgZHJpdmVyJ3Mgb3BlcmF0aW9uLCBzbyBpdCdzIHByb2JhYmx5IGNyaXRpY2FsIHRvIHRoZSBvdmVyYWxsIGZ1bmN0aW9uYWxpdHkuIEkgYW50aWNpcGF0ZSBpdCBkZWFscyB3aXRoIGVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBMZXQncyBzZWUgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMDcsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzoxMTo0MS41NzMxOTM2MjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9haGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MjgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4Mjg6XFx0c3RhdGljIGludCBhdGgxMWtfY29yZV9nZXRfcnByb2Moc3RydWN0IGF0aDExa19iYXNlICphYilcXG4gODI5OlxcdHtcXG4gODMwOlxcdFxcdHN0cnVjdCBhdGgxMWtfYWhiICphYl9haGIgPSBhdGgxMWtfYWhiX3ByaXYoYWIpO1xcbiA4MzE6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gYWItXFx1MDAzZWRldjtcXG4gODMyOlxcdFxcdHN0cnVjdCBycHJvYyAqcHJwcm9jO1xcbiA4MzM6XFx0XFx0cGhhbmRsZSBycHJvY19waGFuZGxlO1xcbiA4MzQ6XFx0XFxuIDgzNTpcXHRcXHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LVxcdTAwM2VvZl9ub2RlLCBcXFwicWNvbSxycHJvY1xcXCIsIFxcdTAwMjZycHJvY19waGFuZGxlKSkge1xcbiA4MzY6XFx0XFx0XFx0YXRoMTFrX2VycihhYiwgXFxcImZhaWxlZCB0byBnZXQgcTZfcnByb2MgaGFuZGxlXFxcXG5cXFwiKTtcXG4gODM3OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA4Mzg6XFx0XFx0fVxcbiA4Mzk6XFx0XFxuIDg0MDpcXHRcXHRwcnByb2MgPSBycHJvY19nZXRfYnlfcGhhbmRsZShycHJvY19waGFuZGxlKTtcXG4gODQxOlxcdFxcdGlmICghcHJwcm9jKVxcbiA4NDI6XFx0XFx0XFx0cmV0dXJuIGRldl9lcnJfcHJvYmUoXFx1MDAyNmFiLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsIC1FUFJPQkVfREVGRVIsIFxcXCJmYWlsZWQgdG8gZ2V0IHJwcm9jXFxcXG5cXFwiKTtcXG4gODQzOlxcdFxcdGFiX2FoYi1cXHUwMDNldGd0X3Jwcm9jID0gcHJwcm9jO1xcbiA4NDQ6XFx0XFxuIDg0NTpcXHRcXHRyZXR1cm4gMDtcXG4gODQ2OlxcdH1cXG4gODQ3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQwNzoxMTo0MS41NzMyNzg2NTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTY3NjA1MDUwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50OiBUaGlzIENvZGUgaXMgVW5mdXp6YWJsZSBpbiBhIFN0YW5kYXJkIEVudmlyb25tZW50KipcblxuT2theSwgc28gSSd2ZSBleGFtaW5lZCB0aGlzIHBhdGNoLCBhbmQgSSd2ZSBjb21lIHRvIGEgZmlybSBjb25jbHVzaW9uOiB0aGlzIGlzbid0IHNvbWV0aGluZyB3ZSBjYW4gcmVhbGlzdGljYWxseSBmdXp6LiBJdCBib2lscyBkb3duIHRvIHRoaXM6IHRoZSBjb2RlIHdlJ3JlIGxvb2tpbmcgYXQsIHNwZWNpZmljYWxseSB0aGUgZXJyb3IgaGFuZGxpbmcgbW9kaWZpY2F0aW9ucyBpbiBgYXRoMTFrX2FoYl9jb25maWdfZXh0X2lycWAgYW5kIGBhdGgxMWtfYWhiX2NvbmZpZ19pcnFgIHdpdGhpbiB0aGUgUXVhbGNvbW0gYXRoMTFrIFdpLUZpIGRyaXZlciwgaXMgKmNvbXBsZXRlbHkqIGRlcGVuZGVudCBvbiB2ZXJ5IHNwZWNpZmljIGhhcmR3YXJlLiBXZSdyZSB0YWxraW5nIFF1YWxjb21tIFNvQ3Mg4oCTIElQUTgwNzQsIFdDTjY3NTAsIHRoYXQgc29ydCBvZiB0aGluZyDigJMgYW5kLCBjcml0aWNhbGx5LCB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UgdHJlZSBlbnRyaWVzLiBJdCBhYnNvbHV0ZWx5IG5lZWRzIHRoYXQgYHFjb20scnByb2NgIHByb3BlcnR5IGFuZCBhIHJlbW90ZXByb2MgZGV2aWNlIGF2YWlsYWJsZS5cblxuVGhlIGNydXggb2YgdGhlIGlzc3VlIGlzIHRoYXQgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBzaW1wbHkgKmRvIG5vdCogZW11bGF0ZSB0aGlzIGhhcmR3YXJlLiBUaGVyZSdzIG5vIHdheSB0byBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBjb25kaXRpb25zIGZvciB0aGlzIGNvZGUgdG8gYmUgZXhlY3V0ZWQgd2l0aGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlIGRyaXZlciByZXF1aXJlcyBhIGxldmVsIG9mIHBoeXNpY2FsIGludGVncmF0aW9uIGFuZCBEZXZpY2UgVHJlZSBjb25maWd1cmF0aW9uIHRoYXQncyBqdXN0IG5vdCBwcmVzZW50IGluIGEgdHlwaWNhbCBRRU1VIGluc3RhbmNlLiBTbywgbm8gbWF0dGVyIGhvdyBjbGV2ZXIgdGhlIGZ1enppbmcgc2V0dXAsIHdlJ3JlIG5ldmVyIGdvaW5nIHRvIGhpdCB0aGVzZSBjb2RlIHBhdGhzLiBUaGF0IG1lYW5zIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJIHdpbGwgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gbWFrZSBzdXJlIHRoYXQgaXMgcmV0dXJuZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzcxLCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDA3OjExOjQ3LjI0OTMzMDk4M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBRdWFsY29tbSBhdGgxMWsgV2ktRmkgZHJpdmVyJ3MgQUhCIGJ1cyBhdHRhY2htZW50IChhaGIuYykuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFF1YWxjb21tIFNvQyBoYXJkd2FyZSAoZS5nLiwgSVBRODA3NCwgV0NONjc1MCkgYW5kIGNvcnJlc3BvbmRpbmcgRGV2aWNlIFRyZWUgbm9kZXMgKGluY2x1ZGluZyByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucyBhbmQgcmVtb3RlcHJvYyBoYW5kbGVzKSB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIFN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgZG8gbm90IGVtdWxhdGUgdGhpcyBoYXJkd2FyZSwgbWFraW5nIHRoZXNlIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyBpbiB0aGUgUXVhbGNvbW0gYXRoMTFrIFdpLUZpIGRyaXZlcidzIEFIQiBidXMgYXR0YWNobWVudCAoYWhiLmMpLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBRdWFsY29tbSBTb0MgaGFyZHdhcmUgKGUuZy4sIElQUTgwNzQsIFdDTjY3NTApIGFuZCBjb3JyZXNwb25kaW5nIERldmljZSBUcmVlIG5vZGVzIChpbmNsdWRpbmcgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMgYW5kIHJlbW90ZXByb2MgaGFuZGxlcykgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBTdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGRvIG5vdCBlbXVsYXRlIHRoaXMgaGFyZHdhcmUsIG1ha2luZyB0aGVzZSBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxczpr[1] Phase: Running StartedAt: 2026-07-30 07:11:57 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxczpr[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-30 07:11:57 +0000 UTC FinishedAt: 2026-07-30 07:12:01 +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,}