Name: series-workflow24jh6 Phase: Failed StartedAt: 2026-09-15 17:06:54 +0000 UTC FinishedAt: 2026-09-15 17:28:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24jh6[0] Phase: Succeeded StartedAt: 2026-09-15 17:06:54 +0000 UTC FinishedAt: 2026-09-15 17:28:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24jh6[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 17:06:54 +0000 UTC FinishedAt: 2026-09-15 17:28:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE3OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb24gKGlhdmYpIGRyaXZlciAoaWF2Zl9ldGh0b29sLmMsIGlhdmZfbWFpbi5jLCBhbmQgaWF2Zl90eHJ4LmMpLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBJbnRlbCBFdGhlcm5ldCBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMgKGUuZy4sIFhMNzEwLCBYNzEwLCBYNzIyLCBFODEwIHNlcmllcykuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlIG9yIFNSLUlPViBWRiBzdXBwb3J0IGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MjI0MzA0Nzc1M2YzNjg0YzIzZDk2Y2QwYTI5ZmUyNTY2NjBmYjAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTc6Mjc6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmNcbmluZGV4IGU3Y2YxMmVhYTI2ODkuLmM5YzI5ODY2MTdhMTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jXG5AQCAtNDk1LDYgJiM0Mzs0OTUsMTEgQEAgc3RhdGljIGludCBpYXZmX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdGlmICgocmluZy1cdTAwM2VyeF9taW5pX3BlbmRpbmcpIHx8IChyaW5nLVx1MDAzZXJ4X2p1bWJvX3BlbmRpbmcpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRpZiAoYWRhcHRlci1cdTAwM2VzdGF0ZSA9PSBfX0lBVkZfUkVTRVRUSU5HIHx8XG4mIzQzO1x0ICAgIChhZGFwdGVyLVx1MDAzZXN0YXRlID09IF9fSUFWRl9SVU5OSU5HIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgYWRhcHRlci1cdTAwM2VmbGFncyBcdTAwMjYgSUFWRl9GTEFHX1FVRVVFU19ESVNBQkxFRCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XG4gXHRpZiAocmluZy1cdTAwM2V0eF9wZW5kaW5nIFx1MDAzZSBJQVZGX01BWF9UWEQgfHxcbiBcdCAgICByaW5nLVx1MDAzZXR4X3BlbmRpbmcgXHUwMDNjIElBVkZfTUlOX1RYRCB8fFxuIFx0ICAgIHJpbmctXHUwMDNlcnhfcGVuZGluZyBcdTAwM2UgSUFWRl9NQVhfUlhEIHx8XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbmluZGV4IDI5Yjg0MDNhMDY2YmMuLmRlODA5NDdmNTljNjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXG5AQCAtNTg3LDcgJiM0Mzs1ODcsNiBAQCBzdGF0aWMgaW50IGlhdmZfcmVxdWVzdF9taXNjX2lycShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFx0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XCYjMzQ7cmVxdWVzdF9pcnEgZm9yICVzIGZhaWxlZDogJWRcXG5cJiMzNDssXG4gXHRcdFx0YWRhcHRlci1cdTAwM2VtaXNjX3ZlY3Rvcl9uYW1lLCBlcnIpO1xuLVx0XHRmcmVlX2lycShhZGFwdGVyLVx1MDAzZW1zaXhfZW50cmllc1swXS52ZWN0b3IsIG5ldGRldik7XG4gXHR9XG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC00MDQ3LDEyICYjNDM7NDA0NiwxNSBAQCBzdGF0aWMgaW50IGlhdmZfaGFuZGxlX3RjbGFzcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdGMsXG4ge1xuIFx0aWYgKHRjID09IDApXG4gXHRcdHJldHVybiAwO1xuLVx0aWYgKHRjIFx1MDAzYyBhZGFwdGVyLVx1MDAzZW51bV90Yykge1xuLVx0XHRpZiAoIWZpbHRlci1cdTAwM2VmLmRhdGEudGNwX3NwZWMuZHN0X3BvcnQpIHtcbi1cdFx0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4tXHRcdFx0XHRcJiMzNDtTcGVjaWZ5IGRlc3RpbmF0aW9uIHBvcnQgdG8gcmVkaXJlY3QgdG8gdHJhZmZpYyBjbGFzcyBvdGhlciB0aGFuIFRDMFxcblwmIzM0Oyk7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbiYjNDM7XHRpZiAodGMgXHUwMDNlPSBhZGFwdGVyLVx1MDAzZW51bV90Yykge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtVbmFibGUgdG8gYWRkIGZpbHRlciBiZWNhdXNlIG9mIGludmFsaWQgZGVzdGluYXRpb24gdHJhZmZpYyBjbGFzc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFmaWx0ZXItXHUwMDNlZi5kYXRhLnRjcF9zcGVjLmRzdF9wb3J0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O1NwZWNpZnkgZGVzdGluYXRpb24gcG9ydCB0byByZWRpcmVjdCB0byB0cmFmZmljIGNsYXNzIG90aGVyIHRoYW4gVEMwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0LyogcmVkaXJlY3QgdG8gYSB0cmFmZmljIGNsYXNzIG9uIHRoZSBzYW1lIGRldmljZSAqL1xuIFx0ZmlsdGVyLVx1MDAzZWYuYWN0aW9uID0gVklSVENITkxfQUNUSU9OX1RDX1JFRElSRUNUO1xuQEAgLTQxNjAsNyAmIzQzOzQxNjIsOCBAQCBzdGF0aWMgaW50IGlhdmZfZGVsZXRlX2Nsc2Zsb3dlcihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0aWYgKGZpbHRlcikge1xuIFx0XHRmaWx0ZXItXHUwMDNlZGVsID0gdHJ1ZTtcbiBcdFx0YWRhcHRlci1cdTAwM2VhcV9yZXF1aXJlZCB8PSBJQVZGX0ZMQUdfQVFfREVMX0NMT1VEX0ZJTFRFUjtcbi1cdH0gZWxzZSB7XG4mIzQzO1x0fSBlbHNlIGlmIChhZGFwdGVyLVx1MDAzZW51bV9jbG91ZF9maWx0ZXJzKSB7XG4mIzQzO1x0XHQvKiBvdGhlciBmaWx0ZXJzIHN0aWxsIHRyYWNrZWQsIHNvIHRoaXMgb25lIGlzIGEgZ2VudWluZSBtaXNzICovXG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHR9XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZWNsb3VkX2ZpbHRlcl9saXN0X2xvY2spO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdHhyeC5jXG5pbmRleCBjMzBhYmYxN2NmNWQzLi5mMWMyNmE5MDc1Y2YyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguY1xuQEAgLTE3Niw3ICYjNDM7MTc2LDYgQEAgc3RhdGljIHZvaWQgaWF2Zl9mb3JjZV93YihzdHJ1Y3QgaWF2Zl92c2kgKnZzaSwgc3RydWN0IGlhdmZfcV92ZWN0b3IgKnFfdmVjdG9yKVxuICAqKi9cbiB2b2lkIGlhdmZfZGV0ZWN0X3JlY292ZXJfaHVuZyhzdHJ1Y3QgaWF2Zl92c2kgKnZzaSlcbiB7XG4tXHRzdHJ1Y3QgaWF2Zl9yaW5nICp0eF9yaW5nID0gTlVMTDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcdGludCBwYWNrZXRzO1xuQEAgLTE5NCwyOSAmIzQzOzE5MywzOCBAQCB2b2lkIGlhdmZfZGV0ZWN0X3JlY292ZXJfaHVuZyhzdHJ1Y3QgaWF2Zl92c2kgKnZzaSlcbiBcdGlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0LyogdHhfcmluZ3MgY2FuIGJlIGZyZWVkL3JlYWxsb2NhdGVkIGJ5IGEgY29uY3VycmVudCByZXNldCAqL1xuJiM0MztcdGlmICghdnNpLVx1MDAzZWJhY2stXHUwMDNldHhfcmluZ3MpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdnNpLVx1MDAzZWJhY2stXHUwMDNlbnVtX2FjdGl2ZV9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHR4X3JpbmcgPSBcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2V0eF9yaW5nc1tpXTtcbi1cdFx0aWYgKHR4X3JpbmcgXHUwMDI2XHUwMDI2IHR4X3JpbmctXHUwMDNlZGVzYykge1xuLVx0XHRcdC8qIElmIHBhY2tldCBjb3VudGVyIGhhcyBub3QgY2hhbmdlZCB0aGUgcXVldWUgaXNcbi1cdFx0XHQgKiBsaWtlbHkgc3RhbGxlZCwgc28gZm9yY2UgYW4gaW50ZXJydXB0IGZvciB0aGlzXG4tXHRcdFx0ICogcXVldWUuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBwcmV2X3BrdF9jdHIgd291bGQgYmUgbmVnYXRpdmUgaWYgdGhlcmUgd2FzIG5vXG4tXHRcdFx0ICogcGVuZGluZyB3b3JrLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHBhY2tldHMgPSB0eF9yaW5nLVx1MDAzZXN0YXRzLnBhY2tldHMgXHUwMDI2IElOVF9NQVg7XG4tXHRcdFx0aWYgKHR4X3JpbmctXHUwMDNlcHJldl9wa3RfY3RyID09IHBhY2tldHMpIHtcbi1cdFx0XHRcdGlhdmZfZm9yY2Vfd2IodnNpLCB0eF9yaW5nLVx1MDAzZXFfdmVjdG9yKTtcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbiYjNDM7XHRcdHN0cnVjdCBpYXZmX3JpbmcgKnR4X3JpbmcgPSBcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2V0eF9yaW5nc1tpXTtcbiYjNDM7XHRcdHN0cnVjdCBpYXZmX3FfdmVjdG9yICpxX3ZlY3RvcjtcbiBcbi1cdFx0XHQvKiBNZW1vcnkgYmFycmllciBiZXR3ZWVuIHJlYWQgb2YgcGFja2V0IGNvdW50IGFuZCBjYWxsXG4tXHRcdFx0ICogdG8gaWF2Zl9nZXRfdHhfcGVuZGluZygpXG4tXHRcdFx0ICovXG4tXHRcdFx0c21wX3JtYigpO1xuLVx0XHRcdHR4X3JpbmctXHUwMDNlcHJldl9wa3RfY3RyID1cbi1cdFx0XHQgIGlhdmZfZ2V0X3R4X3BlbmRpbmcodHhfcmluZywgdHJ1ZSkgPyBwYWNrZXRzIDogLTE7XG4mIzQzO1x0XHQvKiByZWFkIG9uY2UsIHFfdmVjdG9yIGNhbiBiZSByZWFzc2lnbmVkIGJ5IGEgY29uY3VycmVudCByZXNldCAqL1xuJiM0MztcdFx0cV92ZWN0b3IgPSBSRUFEX09OQ0UodHhfcmluZy1cdTAwM2VxX3ZlY3Rvcik7XG4mIzQzO1x0XHRpZiAoIXFfdmVjdG9yIHx8ICF0eF9yaW5nLVx1MDAzZWRlc2MpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIElmIHBhY2tldCBjb3VudGVyIGhhcyBub3QgY2hhbmdlZCB0aGUgcXVldWUgaXNcbiYjNDM7XHRcdCAqIGxpa2VseSBzdGFsbGVkLCBzbyBmb3JjZSBhbiBpbnRlcnJ1cHQgZm9yIHRoaXNcbiYjNDM7XHRcdCAqIHF1ZXVlLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIHByZXZfcGt0X2N0ciB3b3VsZCBiZSBuZWdhdGl2ZSBpZiB0aGVyZSB3YXMgbm9cbiYjNDM7XHRcdCAqIHBlbmRpbmcgd29yay5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cGFja2V0cyA9IHR4X3JpbmctXHUwMDNlc3RhdHMucGFja2V0cyBcdTAwMjYgSU5UX01BWDtcbiYjNDM7XHRcdGlmICh0eF9yaW5nLVx1MDAzZXByZXZfcGt0X2N0ciA9PSBwYWNrZXRzKSB7XG4mIzQzO1x0XHRcdGlhdmZfZm9yY2Vfd2IodnNpLCBxX3ZlY3Rvcik7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogTWVtb3J5IGJhcnJpZXIgYmV0d2VlbiByZWFkIG9mIHBhY2tldCBjb3VudCBhbmQgY2FsbFxuJiM0MztcdFx0ICogdG8gaWF2Zl9nZXRfdHhfcGVuZGluZygpXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNtcF9ybWIoKTtcbiYjNDM7XHRcdHR4X3JpbmctXHUwMDNlcHJldl9wa3RfY3RyID1cbiYjNDM7XHRcdCAgaWF2Zl9nZXRfdHhfcGVuZGluZyh0eF9yaW5nLCB0cnVlKSA/IHBhY2tldHMgOiAtMTtcbiBcdH1cbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb24gKGlhdmYpIGRyaXZlciAoaWF2Zl9ldGh0b29sLmMsIGlhdmZfbWFpbi5jLCBhbmQgaWF2Zl90eHJ4LmMpLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBJbnRlbCBFdGhlcm5ldCBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMgKGUuZy4sIFhMNzEwLCBYNzEwLCBYNzIyLCBFODEwIHNlcmllcykuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlIG9yIFNSLUlPViBWRiBzdXBwb3J0IGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MjI0MzA0Nzc1M2YzNjg0YzIzZDk2Y2QwYTI5ZmUyNTY2NjBmYjAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMTc6Mjc6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuYwppbmRleCBlN2NmMTJlYWEyNjg5Li5jOWMyOTg2NjE3YTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmMKQEAgLTQ5NSw2ICYjNDM7NDk1LDExIEBAIHN0YXRpYyBpbnQgaWF2Zl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJaWYgKChyaW5nLSZndDtyeF9taW5pX3BlbmRpbmcpIHx8IChyaW5nLSZndDtyeF9qdW1ib19wZW5kaW5nKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKGFkYXB0ZXItJmd0O3N0YXRlID09IF9fSUFWRl9SRVNFVFRJTkcgfHwKJiM0MzsJICAgIChhZGFwdGVyLSZndDtzdGF0ZSA9PSBfX0lBVkZfUlVOTklORyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgYWRhcHRlci0mZ3Q7ZmxhZ3MgJmFtcDsgSUFWRl9GTEFHX1FVRVVFU19ESVNBQkxFRCkpCiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsKIAlpZiAocmluZy0mZ3Q7dHhfcGVuZGluZyAmZ3Q7IElBVkZfTUFYX1RYRCB8fAogCSAgICByaW5nLSZndDt0eF9wZW5kaW5nICZsdDsgSUFWRl9NSU5fVFhEIHx8CiAJICAgIHJpbmctJmd0O3J4X3BlbmRpbmcgJmd0OyBJQVZGX01BWF9SWEQgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jCmluZGV4IDI5Yjg0MDNhMDY2YmMuLmRlODA5NDdmNTljNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYwpAQCAtNTg3LDcgJiM0Mzs1ODcsNiBAQCBzdGF0aWMgaW50IGlhdmZfcmVxdWVzdF9taXNjX2lycShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKQogCQlkZXZfZXJyKCZhbXA7YWRhcHRlci0mZ3Q7cGRldi0mZ3Q7ZGV2LAogCQkJJiMzNDtyZXF1ZXN0X2lycSBmb3IgJXMgZmFpbGVkOiAlZFxuJiMzNDssCiAJCQlhZGFwdGVyLSZndDttaXNjX3ZlY3Rvcl9uYW1lLCBlcnIpOwotCQlmcmVlX2lycShhZGFwdGVyLSZndDttc2l4X2VudHJpZXNbMF0udmVjdG9yLCBuZXRkZXYpOwogCX0KIAlyZXR1cm4gZXJyOwogfQpAQCAtNDA0NywxMiAmIzQzOzQwNDYsMTUgQEAgc3RhdGljIGludCBpYXZmX2hhbmRsZV90Y2xhc3Moc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwgdTMyIHRjLAogewogCWlmICh0YyA9PSAwKQogCQlyZXR1cm4gMDsKLQlpZiAodGMgJmx0OyBhZGFwdGVyLSZndDtudW1fdGMpIHsKLQkJaWYgKCFmaWx0ZXItJmd0O2YuZGF0YS50Y3Bfc3BlYy5kc3RfcG9ydCkgewotCQkJZGV2X2VycigmYW1wO2FkYXB0ZXItJmd0O3BkZXYtJmd0O2RldiwKLQkJCQkmIzM0O1NwZWNpZnkgZGVzdGluYXRpb24gcG9ydCB0byByZWRpcmVjdCB0byB0cmFmZmljIGNsYXNzIG90aGVyIHRoYW4gVEMwXG4mIzM0Oyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQomIzQzOwlpZiAodGMgJmd0Oz0gYWRhcHRlci0mZ3Q7bnVtX3RjKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7YWRhcHRlci0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7VW5hYmxlIHRvIGFkZCBmaWx0ZXIgYmVjYXVzZSBvZiBpbnZhbGlkIGRlc3RpbmF0aW9uIHRyYWZmaWMgY2xhc3NcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CWlmICghZmlsdGVyLSZndDtmLmRhdGEudGNwX3NwZWMuZHN0X3BvcnQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDthZGFwdGVyLSZndDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtTcGVjaWZ5IGRlc3RpbmF0aW9uIHBvcnQgdG8gcmVkaXJlY3QgdG8gdHJhZmZpYyBjbGFzcyBvdGhlciB0aGFuIFRDMFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIHJlZGlyZWN0IHRvIGEgdHJhZmZpYyBjbGFzcyBvbiB0aGUgc2FtZSBkZXZpY2UgKi8KIAlmaWx0ZXItJmd0O2YuYWN0aW9uID0gVklSVENITkxfQUNUSU9OX1RDX1JFRElSRUNUOwpAQCAtNDE2MCw3ICYjNDM7NDE2Miw4IEBAIHN0YXRpYyBpbnQgaWF2Zl9kZWxldGVfY2xzZmxvd2VyKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJaWYgKGZpbHRlcikgewogCQlmaWx0ZXItJmd0O2RlbCA9IHRydWU7CiAJCWFkYXB0ZXItJmd0O2FxX3JlcXVpcmVkIHw9IElBVkZfRkxBR19BUV9ERUxfQ0xPVURfRklMVEVSOwotCX0gZWxzZSB7CiYjNDM7CX0gZWxzZSBpZiAoYWRhcHRlci0mZ3Q7bnVtX2Nsb3VkX2ZpbHRlcnMpIHsKJiM0MzsJCS8qIG90aGVyIGZpbHRlcnMgc3RpbGwgdHJhY2tlZCwgc28gdGhpcyBvbmUgaXMgYSBnZW51aW5lIG1pc3MgKi8KIAkJZXJyID0gLUVJTlZBTDsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDthZGFwdGVyLSZndDtjbG91ZF9maWx0ZXJfbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdHhyeC5jCmluZGV4IGMzMGFiZjE3Y2Y1ZDMuLmYxYzI2YTkwNzVjZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguYwpAQCAtMTc2LDcgJiM0MzsxNzYsNiBAQCBzdGF0aWMgdm9pZCBpYXZmX2ZvcmNlX3diKHN0cnVjdCBpYXZmX3ZzaSAqdnNpLCBzdHJ1Y3QgaWF2Zl9xX3ZlY3RvciAqcV92ZWN0b3IpCiAgKiovCiB2b2lkIGlhdmZfZGV0ZWN0X3JlY292ZXJfaHVuZyhzdHJ1Y3QgaWF2Zl92c2kgKnZzaSkKIHsKLQlzdHJ1Y3QgaWF2Zl9yaW5nICp0eF9yaW5nID0gTlVMTDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXVuc2lnbmVkIGludCBpOwogCWludCBwYWNrZXRzOwpAQCAtMTk0LDI5ICYjNDM7MTkzLDM4IEBAIHZvaWQgaWF2Zl9kZXRlY3RfcmVjb3Zlcl9odW5nKHN0cnVjdCBpYXZmX3ZzaSAqdnNpKQogCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKQogCQlyZXR1cm47CiAKJiM0MzsJLyogdHhfcmluZ3MgY2FuIGJlIGZyZWVkL3JlYWxsb2NhdGVkIGJ5IGEgY29uY3VycmVudCByZXNldCAqLwomIzQzOwlpZiAoIXZzaS0mZ3Q7YmFjay0mZ3Q7dHhfcmluZ3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IHZzaS0mZ3Q7YmFjay0mZ3Q7bnVtX2FjdGl2ZV9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXR4X3JpbmcgPSAmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7dHhfcmluZ3NbaV07Ci0JCWlmICh0eF9yaW5nICZhbXA7JmFtcDsgdHhfcmluZy0mZ3Q7ZGVzYykgewotCQkJLyogSWYgcGFja2V0IGNvdW50ZXIgaGFzIG5vdCBjaGFuZ2VkIHRoZSBxdWV1ZSBpcwotCQkJICogbGlrZWx5IHN0YWxsZWQsIHNvIGZvcmNlIGFuIGludGVycnVwdCBmb3IgdGhpcwotCQkJICogcXVldWUuCi0JCQkgKgotCQkJICogcHJldl9wa3RfY3RyIHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHRoZXJlIHdhcyBubwotCQkJICogcGVuZGluZyB3b3JrLgotCQkJICovCi0JCQlwYWNrZXRzID0gdHhfcmluZy0mZ3Q7c3RhdHMucGFja2V0cyAmYW1wOyBJTlRfTUFYOwotCQkJaWYgKHR4X3JpbmctJmd0O3ByZXZfcGt0X2N0ciA9PSBwYWNrZXRzKSB7Ci0JCQkJaWF2Zl9mb3JjZV93Yih2c2ksIHR4X3JpbmctJmd0O3FfdmVjdG9yKTsKLQkJCQljb250aW51ZTsKLQkJCX0KJiM0MzsJCXN0cnVjdCBpYXZmX3JpbmcgKnR4X3JpbmcgPSAmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7dHhfcmluZ3NbaV07CiYjNDM7CQlzdHJ1Y3QgaWF2Zl9xX3ZlY3RvciAqcV92ZWN0b3I7CiAKLQkJCS8qIE1lbW9yeSBiYXJyaWVyIGJldHdlZW4gcmVhZCBvZiBwYWNrZXQgY291bnQgYW5kIGNhbGwKLQkJCSAqIHRvIGlhdmZfZ2V0X3R4X3BlbmRpbmcoKQotCQkJICovCi0JCQlzbXBfcm1iKCk7Ci0JCQl0eF9yaW5nLSZndDtwcmV2X3BrdF9jdHIgPQotCQkJICBpYXZmX2dldF90eF9wZW5kaW5nKHR4X3JpbmcsIHRydWUpID8gcGFja2V0cyA6IC0xOwomIzQzOwkJLyogcmVhZCBvbmNlLCBxX3ZlY3RvciBjYW4gYmUgcmVhc3NpZ25lZCBieSBhIGNvbmN1cnJlbnQgcmVzZXQgKi8KJiM0MzsJCXFfdmVjdG9yID0gUkVBRF9PTkNFKHR4X3JpbmctJmd0O3FfdmVjdG9yKTsKJiM0MzsJCWlmICghcV92ZWN0b3IgfHwgIXR4X3JpbmctJmd0O2Rlc2MpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBJZiBwYWNrZXQgY291bnRlciBoYXMgbm90IGNoYW5nZWQgdGhlIHF1ZXVlIGlzCiYjNDM7CQkgKiBsaWtlbHkgc3RhbGxlZCwgc28gZm9yY2UgYW4gaW50ZXJydXB0IGZvciB0aGlzCiYjNDM7CQkgKiBxdWV1ZS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBwcmV2X3BrdF9jdHIgd291bGQgYmUgbmVnYXRpdmUgaWYgdGhlcmUgd2FzIG5vCiYjNDM7CQkgKiBwZW5kaW5nIHdvcmsuCiYjNDM7CQkgKi8KJiM0MzsJCXBhY2tldHMgPSB0eF9yaW5nLSZndDtzdGF0cy5wYWNrZXRzICZhbXA7IElOVF9NQVg7CiYjNDM7CQlpZiAodHhfcmluZy0mZ3Q7cHJldl9wa3RfY3RyID09IHBhY2tldHMpIHsKJiM0MzsJCQlpYXZmX2ZvcmNlX3diKHZzaSwgcV92ZWN0b3IpOwomIzQzOwkJCWNvbnRpbnVlOwogCQl9CiYjNDM7CiYjNDM7CQkvKiBNZW1vcnkgYmFycmllciBiZXR3ZWVuIHJlYWQgb2YgcGFja2V0IGNvdW50IGFuZCBjYWxsCiYjNDM7CQkgKiB0byBpYXZmX2dldF90eF9wZW5kaW5nKCkKJiM0MzsJCSAqLwomIzQzOwkJc21wX3JtYigpOwomIzQzOwkJdHhfcmluZy0mZ3Q7cHJldl9wa3RfY3RyID0KJiM0MzsJCSAgaWF2Zl9nZXRfdHhfcGVuZGluZyh0eF9yaW5nLCB0cnVlKSA/IHBhY2tldHMgOiAtMTsKIAl9CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGFuZCBDb250ZXh0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgY2hhbmdpbmcuIFRoZSBmaWxlIG1vZGlmaWNhdGlvbnMgYXJlIGZvY3VzZWQgb24gYGlhdmZgLCBzcGVjaWZpY2FsbHk6IGBpYXZmX2V0aHRvb2wuY2AsIGBpYXZmX21haW4uY2AsIGFuZCBgaWF2Zl90eHJ4LmNgLiBSaWdodCwgc28gdGhpcyBoYXMgdG8gZG8gd2l0aCB0aGUgSW50ZWwgQWRhcHRpdmUgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIuIElBVkYuLi4gdGhhdCYjMzk7cyBmb3IgSW50ZWwgU1ItSU9WIEV0aGVybmV0IFZpcnR1YWwgRnVuY3Rpb25zLCB0eXBpY2FsbHkgZm9yIHRoaW5ncyBsaWtlIHRoZSBJbnRlbCA3MDAvODAwIHNlcmllcyBjb250cm9sbGVycyAoaTQwZSwgaWNlLCB0aGF0IGtpbmQgb2YgdGhpbmcpLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgYGlhdmZgIGEgKnZlbmRvci1zcGVjaWZpYyogcGh5c2ljYWwgZHJpdmVyLCBvciBkb2VzIFFFTVUgZW11bGF0ZSBpdD8gRG9lcyBRRU1VIGV2ZW4gaGF2ZSBhbiBJQVZGIGVtdWxhdGlvbj8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBRRU1VIG5hdGl2ZWx5IHN1cHBvcnRzIG9yIGlmIGl0IHJlbGllcyBvbiB1bmRlcmx5aW5nIGhhcmR3YXJlIHRoYXQmIzM5O3Mgbm90IGF2YWlsYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIExldCYjMzk7cyBzZWUuLi4gU2VjdGlvbiAyIG9mIHRoZSBwcm9tcHQgaGFzIGEgcmVsZXZhbnQgZGlzdGluY3Rpb24uIEl0IGxpc3RzICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBhbmQgU21hcnROSUNzLiBJQVZGIGNvdWxkIGZhbGwgaW50byB0aGF0IGNhdGVnb3J5LiBUaGVuIGl0IGNvbnRyYXN0cyB0aGF0IHdpdGggJiMzNDtSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzJiMzNDsgd2hpY2ggYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB2aXJ0dWFsIGJ1c2VzLgoKU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGV0aGVyIGlhdmYgaXMgcmVhY2hhYmxlLiBJcyBpdCBlbXVsYXRlZCBieSBRRU1VLCBvciBkb2VzIGl0IHV0aWxpemUgc29tZSB2aXJ0dWFsIGJ1cyBpbnRlcmZhY2UsIG9yIHBlcmhhcHMgc29tZSBzb2Z0d2FyZSBlbXVsYXRpb24gbWV0aG9kPyBJIG5lZWQgdG8gY2hlY2sgaG93IGBpYXZmYCBhY3R1YWxseSBiaW5kcyB0byB0aGUgaGFyZHdhcmUuIEEgcXVpY2sgZ3JlcCBmb3IgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIHVzZWZ1bCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE3OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9kZXZpY2VfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jPTI3PXN0YXRpYyBjb25zdCBjaGFyIGlhdmZfY29weXJpZ2h0W10gPVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtMzctICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jOjM4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpYXZmX3BjaV90YmxbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtMzktXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQVZGX0RFVl9JRF9WRikgfSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jPTUxODY9aW50IGlhdmZfcHJvY2Vzc19jb25maWcoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jLTUyOTUtICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYzo1Mjk2OnN0YXRpYyBpbnQgaWF2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTI5Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU4MgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJQVZGIFBDSSBJRHMqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgUENJIElEcyB3aXRoaW4gdGhlIGBpYXZmX3BjaV90YmxgIHN0cnVjdHVyZS4gVGhpcyBsaWtlbHkgY29udGFpbnMgdGhlIG1hcHBpbmcgYmV0d2VlbiBQQ0kgZGV2aWNlIGlkZW50aWZpZXJzIGFuZCB0aGUgSW50ZWwgQWR2YW5jZWQgVmlydHVhbCBGdW5jdGlvbiAoSUFWRikgZHJpdmVyLCBhIGNyaXRpY2FsIHBpZWNlIGZvciBwcm9wZXIgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCBtYW5hZ2VtZW50IGluIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBkZXZpY2VzIHRoaXMgZHJpdmVyIHN1cHBvcnRzIGF0IHRoZSBoYXJkd2FyZSBsZXZlbC4gS25vd2luZyB0aGVzZSBJRHMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgZGV2aWNlIGNvbXBhdGliaWxpdHksIHBvdGVudGlhbCBsaW1pdGF0aW9ucywgYW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgZGlmZmVyZW50IGhhcmR3YXJlIHJldmlzaW9ucy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwIGZvciBkaWFnbm9zaW5nIGRyaXZlci1yZWxhdGVkIGlzc3VlcyBvciB1bmRlcnN0YW5kaW5nIGhhcmR3YXJlIHN1cHBvcnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDM4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlhdmZfcGNpX3RibFtdID0ge1xuICAzOTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUFWRl9ERVZfSURfVkYpIH0sXG4gIDQwOlx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQVZGX0RFVl9JRF9WRl9IVikgfSxcbiAgNDE6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElBVkZfREVWX0lEX1g3MjJfVkYpIH0sXG4gIDQyOlx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQVZGX0RFVl9JRF9BREFQVElWRV9WRikgfSxcbiAgNDM6XHRcdC8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi9cbiAgNDQ6XHRcdHsgfVxuICA0NTpcdH07XG4gIDQ2Olx0XG4gIDQ3Olx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlhdmZfcGNpX3RibCk7XG4gIDQ4Olx0XG4gIDQ5Olx0TU9EVUxFX0FMSUFTKFwmIzM0O2k0MGV2ZlwmIzM0Oyk7XG4gIDUwOlx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb24gTmV0d29yayBEcml2ZXJcJiMzNDspO1xuICA1MTpcdE1PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7TElCRVRIXCYjMzQ7KTtcbiAgNTI6XHRNT0RVTEVfSU1QT1JUX05TKFwmIzM0O0xJQklFXCYjMzQ7KTtcbiAgNTM6XHRNT0RVTEVfSU1QT1JUX05TKFwmIzM0O0xJQklFX0FETUlOUVwmIzM0Oyk7XG4gIDU0Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMIHYyXCYjMzQ7KTtcbiAgNTU6XHRcbiAgNTY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlhdmZfbmV0ZGV2X29wcztcbiAgNTc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTQ2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgSUFWRiBGdXp6aW5nIEZlYXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgZnV6emluZyB0aGUgSUFWRiAoSW50ZWwgNzAwLzgwMCBzZXJpZXMgVmlydHVhbCBGdW5jdGlvbikgZHJpdmVyIGlzIGV2ZW4gZmVhc2libGUgd2l0aGluIG15IGN1cnJlbnQgc2V0dXAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIFFFTVUgZW11bGF0ZXMgdGhlIGhhcmR3YXJlLiBMZXQgbWUgY2hlY2suLi4gbm9wZS4gSXQgZW11bGF0ZXMgZTEwMDAsIGUxMDAwZSwgYW5kIGlnYiwgYnV0IG5vdCBpNDBlIG9yIGlhdmYuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSByb2FkYmxvY2suCgpBbHJpZ2h0LCB3aGF0IGFib3V0IGxldmVyYWdpbmcgc3l6a2FsbGVyPyBEb2VzIGl0IHRhcmdldCBJQVZGPyBBIHF1aWNrIHNlYXJjaCByZXZlYWxzIHRoYXQgc3l6a2FsbGVyIG5lZWRzICphY3R1YWwqIEludGVsIFNSLUlPViBoYXJkd2FyZSAobGlrZSBYTDcxMCwgWDcxMCwgWDcyMiwgRTgxMCwgZXRjLikgb3IgUENJZSBwYXNzdGhyb3VnaCBvZiBhbiBTUi1JT1YgVkYuIFNvLCBhZ2Fpbiwgbm8gZGljZSB3aXRob3V0IGRlZGljYXRlZCBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgZGlyZWN0IHBhc3N0aHJvdWdoIG9mIGEgVkYuCgpXYWl0IGEgc2Vjb25kLCBsZXQgbWUgY2FyZWZ1bGx5IHJlcmVhZCB0aGUgJiMzNDtXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBjcml0ZXJpYS4gT2theSwgdGhlcmUgaXQgaXM6ICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLi4uIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUmIzM0OyBzb3VuZHMgbGlrZSBhIHBlcmZlY3QgZml0LiBBbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSUFWRiBuZWVkcywgcmlnaHQ/IAoKTm93LCB3YWl0Li4uIG1heWJlIEkmIzM5O20gb3Zlcmxvb2tpbmcgc29tZXRoaW5nIG9idmlvdXMuIFdoYXQgYWJvdXQgbG9va2luZyBhdCBhbHRlcm5hdGl2ZXMsIGxpa2UgdmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBvciBzb2NrZXRzPyBObywgSUFWRiBpcyBhIFBDSSBkcml2ZXIuIEkgY2FuIHZlcmlmeSBpdCBieSBjaGVja2luZyB0aGUgYGlhdmZfcHJvYmVgIGZ1bmN0aW9uIGRlZmluaXRpb24sIHdoaWNoIHRha2VzIGEgYHBjaV9kZXZgIHN0cnVjdC4gSSBjYW4gYWxzbyB2ZXJpZnkgdGhhdCBpdCBpcyByZWdpc3RlcmVkIGFzIGEgUENJIGRyaXZlciB2aWEgYG1vZHVsZV9wY2lfZHJpdmVyKGlhdmZfZHJpdmVyKTtgLCBieSBjaGVja2luZyBpbiBgaWF2Zl9tYWluLmNgLgoKTG9va3MgbGlrZSwgZGVzcGl0ZSBteSBiZXN0IGludGVudGlvbnMsIElBVkYgaXMgZ29pbmcgdG8gYmUgYSBoYXJkICYjMzQ7bm8mIzM0OyBmb3IgZnV6emluZyB3aXRoaW4gbXkgY3VycmVudCB2aXJ0dWFsaXplZCBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wY2lfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE3OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biB0aGUgYGlhdmZfZHJpdmVyYCBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGZvciB0aGUgYGlhdmZfZHJpdmVyYC4gVGhpcyB1c3VhbGx5IG1lYW5zIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB3aGVyZSB0aGUgZHJpdmVyIGRlY2xhcmVzIGl0c2VsZiB0byB0aGUgc3lzdGVtLiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIHRoZSB0eXBpY2FsIHBhdHRlcm5zIC0gdGhpbmdzIGxpa2UgYG1vZHVsZV9pbml0YCwgYG1vZHVsZV9leGl0YCwgYHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcmAsIG9yIHBvdGVudGlhbGx5IHNvbWUgb2xkZXIgaW50ZXJmYWNlcyBpZiBpdCYjMzk7cyBhIGxlZ2FjeSBjb21wb25lbnQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGl0IHJlZ2lzdGVycyBhcyBhIHBsYXRmb3JtIGRyaXZlciwgYSBQQ0kgZHJpdmVyLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gSXMgaXQgbGlrZWx5IHRvIGJlIGFuIGFzeW5jIHByb2JlPyBBcmUgdGhlcmUgYW55IGRldmljZSB0cmVlIGJpbmRpbmdzIGludm9sdmVkIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkmIzM5O2xsIGFsc28gd2FudCB0byBjaGVjayBmb3IgYW55IHZlbmRvci1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBvciBjYWxsYmFja3MgdGhhdCBtaWdodCBiZSByZWxldmFudC4gRXNzZW50aWFsbHksIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGVudHJ5IHBvaW50IC0gdGhlIGNyaXRpY2FsIGNvZGUgdGhhdCBtYWtlcyB0aGUgYGlhdmZfZHJpdmVyYCB2aXNpYmxlIHRvIHRoZSBrZXJuZWwmIzM5O3MgZGV2aWNlIG1hbmFnZW1lbnQgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgd2hhdCBpdCYjMzk7cyBleHBlY3RpbmcgaW4gdGVybXMgb2YgaGFyZHdhcmUgcmVzb3VyY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYz01NjcxPXN0YXRpYyBpbnQgX19pbml0IGlhdmZfaW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jLTU2NzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jOjU2Nzc6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZpYXZmX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jLTU2NzgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTE3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGlhdmZfZHJpdmVyJiMzOTtzIFN5emthbGxlciBDb21wYXRpYmlsaXR5KioKCk9rYXksIHNvIHRoZSBgaWF2Zl9kcml2ZXJgIGlzIGEgc3RhbmRhcmQgYHBjaV9kcml2ZXJgLCBub3RoaW5nIHBhcnRpY3VsYXJseSBleG90aWMgdGhlcmUuIEJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIEkgZ2V0IFN5emthbGxlciB0byBpbnN0YW50aWF0ZSBhbmQgdGVzdCBpdCB3aXRob3V0IHJlcXVpcmluZyBhY3R1YWwgcGh5c2ljYWwgaGFyZHdhcmUgb3IgZXZlbiBhIGZ1bGwgUUVNVSBlbXVsYXRpb24gb2YgYW4gSUFWRiBkZXZpY2U/IE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBTeXprYWxsZXIgdXN1YWxseSBydW5zIHdpdGhpbiBmYWlybHkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBlaXRoZXIgR0NFIG9yLCBtb3JlIGNvbW1vbmx5LCBwbGFpbiBRRU1VLCBhbmQgbGV2ZXJhZ2VzIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCBhbmQgdHVuL3RhcC4KClRoZSBjcnVjaWFsIGlzc3VlIGhlcmUgaXMgdGhhdCwgYXMgSSByZWNhbGwsIHN0YW5kYXJkIFFFTVUgaW5zdGFsbGF0aW9ucyBkb24mIzM5O3QgaW5jbHVkZSBlbXVsYXRpb24gZm9yIEludGVsIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgdGhvc2UgaWRlbnRpZmllZCB3aXRoIHRoZSBgSUFWRl9ERVZfSURfVkZgIHNlcmllcy4gVGhpcyBpcyBhIHBvdGVudGlhbCBzaG93LXN0b3BwZXIsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYElBVkZfREVWX0lEX1ZGYCB2YWx1ZSB0byBmdWxseSBjb25maXJtIGlmIGl0IGFsaWducyB3aXRoIG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiBzdXBwb3J0ZWQgUUVNVSBkZXZpY2VzIGFuZCB0aGVpciBsaW1pdGF0aW9ucy4gVGltZSB0byBsb29rIHRoYXQgdXAuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SUFWRl9ERVZfSURfVkYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZGV2aWRzLmgtNy0vKiBEZXZpY2UgSURzIGZvciB0aGUgVkYgZHJpdmVyICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZGV2aWRzLmg6ODojZGVmaW5lIElBVkZfREVWX0lEX1ZGXHRcdFx0MHgxNTRDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZGV2aWRzLmg6OTojZGVmaW5lIElBVkZfREVWX0lEX1ZGX0hWXHRcdDB4MTU3MVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2Rldmlkcy5oLTEwLSNkZWZpbmUgSUFWRl9ERVZfSURfQURBUFRJVkVfVkZcdFx0MHgxODg5XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYz0zOD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWF2Zl9wY2lfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jOjM5Olx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUFWRl9ERVZfSURfVkYpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jOjQwOlx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUFWRl9ERVZfSURfVkZfSFYpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jLTQxLVx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUFWRl9ERVZfSURfWDcyMl9WRikgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI0OAoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiA3OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWZXJkaWN0OiBTdHJ1Y3R1cmFsbHkgVW5yZWFjaGFibGUgSGFyZHdhcmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0b3VjaGluZyB0aGUgYGlhdmZgIGRyaXZlciwgYW5kIHRoYXQmIzM5O3MgYW4gaW1tZWRpYXRlIHJlZCBmbGFnIGluIG15IGV4cGVyaWVuY2UuIFRoZSBkZXZpY2UgSURzIG1lbnRpb25lZCAoMHgxNTRDLCAweDE1NzEsIDB4MzdDRCwgMHgxODg5KSBhcmUgYWxsIGZvciBJbnRlbCBWaXJ0dWFsIEZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBYTDcxMC9YNzEwLCA3MDAgU2VyaWVzLCBYNzIyLCBhbmQgRTgxMCBWRnMuIEkga25vdyB0aGVzZSBkZXZpY2VzOyB0aGV5JiMzOTtyZSBTUi1JT1YgVkZzLiBBbmQsIGFzIEkgc3VzcGVjdGVkLCB0aGUgdGV4dCBjb25maXJtcyB0aGF0ICpub25lKiBvZiB0aGVzZSBhcmUgZW11bGF0ZWQgYnkgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgVk1zLiBObyB2aXJ0dWFsIGJ1c2VzLCBubyBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgYGlhdmZgLiBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIGl0LgoKTGV0IG1lIGp1c3QgcXVpY2tseSByZS1leGFtaW5lIHRoZSBkaWZmIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gT2theSwgd2UmIzM5O3ZlIGdvdDoKCjEuICBgaWF2Zl9ldGh0b29sLmNgOiBgaWF2Zl9zZXRfcmluZ3BhcmFtYCAtIEV0aHRvb2wgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGZvciB0aGUgYGlhdmZgIGRyaXZlci4KMi4gIGBpYXZmX21haW4uY2A6IGBpYXZmX3JlcXVlc3RfbWlzY19pcnFgLCBgaWF2Zl9oYW5kbGVfdGNsYXNzYCwgYGlhdmZfZGVsZXRlX2Nsc2Zsb3dlcmAgLSBJbnRlcnJ1cHQgaGFuZGxpbmcgZHVyaW5nIHByb2JlL3Jlc2V0LCBhbmQgdHJhZmZpYyBjb250cm9sIChUQykgZmxvd2VyIG9mZmxvYWQgaGFuZGxlcnMuCjMuICBgaWF2Zl90eHJ4LmNgOiBgaWF2Zl9kZXRlY3RfcmVjb3Zlcl9odW5nYCAtIEEgd2F0Y2hkb2cvaGFuZyByZWNvdmVyeSBtZWNoYW5pc20gZm9yIGBpYXZmYC4KCkFscmlnaHQsIHRoZXNlIGFyZSBhbGwgZGVlcGx5IGVtYmVkZGVkIHdpdGhpbiB0aGUgYGlhdmZgIGRyaXZlciBpdHNlbGYuIEV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWMgdG8gYW4gaW5zdGFudGlhdGVkIGFuZCBwcm9iZWQgYGlhdmZgIGRldmljZS4gWW91IGNhbiYjMzk7dCBleGVjdXRlIGFueSBvZiB0aGlzIGNvZGUgdW5sZXNzIHlvdSBoYXZlIGEgKnJlYWwqIFNSLUlPViBWRiBmcm9tIEludGVsIGF0dGFjaGVkIHRvIGEgc3lzdGVtLiAgVGhlIGNvZGUgdG91Y2hlcyBTUi1JT1YsIHdoaWNoIHJlcXVpcmVzIGRlZGljYXRlZCBoYXJkd2FyZSwgYW5kIGl0JiMzOTtzIG5vdCBwcmVzZW50IGluIHRoZSBjb21tb24gZW11bGF0aW9uIGVudmlyb25tZW50cy4KClRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugb2YgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsJiMzNDsgYXMgdGhlIGRvY3VtZW50IHNheXMuIEl0JiMzOTtzIGluIHRoZSBzYW1lIGNhdGVnb3J5IGFzIHRob3NlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAgZHJpdmVycywgd2hpY2gsIGFzIGV4cGVydHMsIHdlIGtub3cgcmVxdWlyZSBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgYW5kIGFyZW4mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhhdCYjMzk7cyBhIHBlcmZlY3QgYW5hbG9neS4gYGlhdmZgIGlzIGEgdmVuZG9yLXNwZWNpZmljIE5JQyBkcml2ZXIgdGhhdCBuZWVkcyBwaHlzaWNhbCBoYXJkd2FyZS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhlIHJlc3VsdHMgYXJlIGNsZWFyIGFuZCBjb25jaXNlLiAgU2luY2UgYFdvcnRoRnV6emluZ2AgaXMgYGZhbHNlYCwgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHJlc3VsdHM6CgoqICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWAKKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAKKiAgIGBSZWFzb25pbmdgOiAgJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb24gKGBpYXZmYCkgZHJpdmVyLCBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgbmV0d29yayBkcml2ZXIgZm9yIEludGVsIEV0aGVybmV0IFNSLUlPViBWaXJ0dWFsIEZ1bmN0aW9ucyAoZS5nLiwgWDcxMCwgRTgxMCkuIFRoZXNlIGRldmljZXMgcmVxdWlyZSBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSBvciBTUi1JT1Ygc3VwcG9ydCBhbmQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OwoKT2theSwgSSB0aGluayB3ZSYjMzk7cmUgZ29vZCB0byBnby4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE3OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb24gKGlhdmYpIGRyaXZlciAoaWF2Zl9ldGh0b29sLmMsIGlhdmZfbWFpbi5jLCBhbmQgaWF2Zl90eHJ4LmMpLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBJbnRlbCBFdGhlcm5ldCBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMgKGUuZy4sIFhMNzEwLCBYNzEwLCBYNzIyLCBFODEwIHNlcmllcykuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlIG9yIFNSLUlPViBWRiBzdXBwb3J0IGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIChpYXZmKSBkcml2ZXIgKGlhdmZfZXRodG9vbC5jLCBpYXZmX21haW4uYywgYW5kIGlhdmZfdHhyeC5jKS4gVGhpcyBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIGRyaXZlciBmb3IgSW50ZWwgRXRoZXJuZXQgU1ItSU9WIFZpcnR1YWwgRnVuY3Rpb25zIChlLmcuLCBYTDcxMCwgWDcxMCwgWDcyMiwgRTgxMCBzZXJpZXMpLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSBvciBTUi1JT1YgVkYgc3VwcG9ydCBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNzoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMTc6Mjc6MzYuODU5NTAyMzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjAxMTM1NzU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIChpYXZmKSBkcml2ZXIgKGlhdmZfZXRodG9vbC5jLCBpYXZmX21haW4uYywgYW5kIGlhdmZfdHhyeC5jKS4gVGhpcyBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIGRyaXZlciBmb3IgSW50ZWwgRXRoZXJuZXQgU1ItSU9WIFZpcnR1YWwgRnVuY3Rpb25zIChlLmcuLCBYTDcxMCwgWDcxMCwgWDcyMiwgRTgxMCBzZXJpZXMpLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSBvciBTUi1JT1YgVkYgc3VwcG9ydCBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzoyNzozNi44NTk1MDcyMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzNjMyODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTIyNDMwNDc3NTNmMzY4NGMyM2Q5NmNkMGEyOWZlMjU2NjYwZmIwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAxNzoyNzozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuY1xcbmluZGV4IGU3Y2YxMmVhYTI2ODkuLmM5YzI5ODY2MTdhMTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmNcXG5AQCAtNDk1LDYgKzQ5NSwxMSBAQCBzdGF0aWMgaW50IGlhdmZfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRpZiAoKHJpbmctXFx1MDAzZXJ4X21pbmlfcGVuZGluZykgfHwgKHJpbmctXFx1MDAzZXJ4X2p1bWJvX3BlbmRpbmcpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdGlmIChhZGFwdGVyLVxcdTAwM2VzdGF0ZSA9PSBfX0lBVkZfUkVTRVRUSU5HIHx8XFxuK1xcdCAgICAoYWRhcHRlci1cXHUwMDNlc3RhdGUgPT0gX19JQVZGX1JVTk5JTkcgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICBhZGFwdGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElBVkZfRkxBR19RVUVVRVNfRElTQUJMRUQpKVxcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFxuIFxcdGlmIChyaW5nLVxcdTAwM2V0eF9wZW5kaW5nIFxcdTAwM2UgSUFWRl9NQVhfVFhEIHx8XFxuIFxcdCAgICByaW5nLVxcdTAwM2V0eF9wZW5kaW5nIFxcdTAwM2MgSUFWRl9NSU5fVFhEIHx8XFxuIFxcdCAgICByaW5nLVxcdTAwM2VyeF9wZW5kaW5nIFxcdTAwM2UgSUFWRl9NQVhfUlhEIHx8XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXFxuaW5kZXggMjliODQwM2EwNjZiYy4uZGU4MDk0N2Y1OWM2NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uY1xcbkBAIC01ODcsNyArNTg3LDYgQEAgc3RhdGljIGludCBpYXZmX3JlcXVlc3RfbWlzY19pcnEoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2YWRhcHRlci1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHRcXFwicmVxdWVzdF9pcnEgZm9yICVzIGZhaWxlZDogJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZW1pc2NfdmVjdG9yX25hbWUsIGVycik7XFxuLVxcdFxcdGZyZWVfaXJxKGFkYXB0ZXItXFx1MDAzZW1zaXhfZW50cmllc1swXS52ZWN0b3IsIG5ldGRldik7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbkBAIC00MDQ3LDEyICs0MDQ2LDE1IEBAIHN0YXRpYyBpbnQgaWF2Zl9oYW5kbGVfdGNsYXNzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB0YyxcXG4ge1xcbiBcXHRpZiAodGMgPT0gMClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdGlmICh0YyBcXHUwMDNjIGFkYXB0ZXItXFx1MDAzZW51bV90Yykge1xcbi1cXHRcXHRpZiAoIWZpbHRlci1cXHUwMDNlZi5kYXRhLnRjcF9zcGVjLmRzdF9wb3J0KSB7XFxuLVxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0XFx0XFxcIlNwZWNpZnkgZGVzdGluYXRpb24gcG9ydCB0byByZWRpcmVjdCB0byB0cmFmZmljIGNsYXNzIG90aGVyIHRoYW4gVEMwXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdH1cXG4rXFx0aWYgKHRjIFxcdTAwM2U9IGFkYXB0ZXItXFx1MDAzZW51bV90Yykge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJVbmFibGUgdG8gYWRkIGZpbHRlciBiZWNhdXNlIG9mIGludmFsaWQgZGVzdGluYXRpb24gdHJhZmZpYyBjbGFzc1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdGlmICghZmlsdGVyLVxcdTAwM2VmLmRhdGEudGNwX3NwZWMuZHN0X3BvcnQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2YWRhcHRlci1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiU3BlY2lmeSBkZXN0aW5hdGlvbiBwb3J0IHRvIHJlZGlyZWN0IHRvIHRyYWZmaWMgY2xhc3Mgb3RoZXIgdGhhbiBUQzBcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHQvKiByZWRpcmVjdCB0byBhIHRyYWZmaWMgY2xhc3Mgb24gdGhlIHNhbWUgZGV2aWNlICovXFxuIFxcdGZpbHRlci1cXHUwMDNlZi5hY3Rpb24gPSBWSVJUQ0hOTF9BQ1RJT05fVENfUkVESVJFQ1Q7XFxuQEAgLTQxNjAsNyArNDE2Miw4IEBAIHN0YXRpYyBpbnQgaWF2Zl9kZWxldGVfY2xzZmxvd2VyKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuIFxcdGlmIChmaWx0ZXIpIHtcXG4gXFx0XFx0ZmlsdGVyLVxcdTAwM2VkZWwgPSB0cnVlO1xcbiBcXHRcXHRhZGFwdGVyLVxcdTAwM2VhcV9yZXF1aXJlZCB8PSBJQVZGX0ZMQUdfQVFfREVMX0NMT1VEX0ZJTFRFUjtcXG4tXFx0fSBlbHNlIHtcXG4rXFx0fSBlbHNlIGlmIChhZGFwdGVyLVxcdTAwM2VudW1fY2xvdWRfZmlsdGVycykge1xcbitcXHRcXHQvKiBvdGhlciBmaWx0ZXJzIHN0aWxsIHRyYWNrZWQsIHNvIHRoaXMgb25lIGlzIGEgZ2VudWluZSBtaXNzICovXFxuIFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIFxcdH1cXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWNsb3VkX2ZpbHRlcl9saXN0X2xvY2spO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguY1xcbmluZGV4IGMzMGFiZjE3Y2Y1ZDMuLmYxYzI2YTkwNzVjZjIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmNcXG5AQCAtMTc2LDcgKzE3Niw2IEBAIHN0YXRpYyB2b2lkIGlhdmZfZm9yY2Vfd2Ioc3RydWN0IGlhdmZfdnNpICp2c2ksIHN0cnVjdCBpYXZmX3FfdmVjdG9yICpxX3ZlY3RvcilcXG4gICoqL1xcbiB2b2lkIGlhdmZfZGV0ZWN0X3JlY292ZXJfaHVuZyhzdHJ1Y3QgaWF2Zl92c2kgKnZzaSlcXG4ge1xcbi1cXHRzdHJ1Y3QgaWF2Zl9yaW5nICp0eF9yaW5nID0gTlVMTDtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcdGludCBwYWNrZXRzO1xcbkBAIC0xOTQsMjkgKzE5MywzOCBAQCB2b2lkIGlhdmZfZGV0ZWN0X3JlY292ZXJfaHVuZyhzdHJ1Y3QgaWF2Zl92c2kgKnZzaSlcXG4gXFx0aWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdC8qIHR4X3JpbmdzIGNhbiBiZSBmcmVlZC9yZWFsbG9jYXRlZCBieSBhIGNvbmN1cnJlbnQgcmVzZXQgKi9cXG4rXFx0aWYgKCF2c2ktXFx1MDAzZWJhY2stXFx1MDAzZXR4X3JpbmdzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VudW1fYWN0aXZlX3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdHR4X3JpbmcgPSBcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2V0eF9yaW5nc1tpXTtcXG4tXFx0XFx0aWYgKHR4X3JpbmcgXFx1MDAyNlxcdTAwMjYgdHhfcmluZy1cXHUwMDNlZGVzYykge1xcbi1cXHRcXHRcXHQvKiBJZiBwYWNrZXQgY291bnRlciBoYXMgbm90IGNoYW5nZWQgdGhlIHF1ZXVlIGlzXFxuLVxcdFxcdFxcdCAqIGxpa2VseSBzdGFsbGVkLCBzbyBmb3JjZSBhbiBpbnRlcnJ1cHQgZm9yIHRoaXNcXG4tXFx0XFx0XFx0ICogcXVldWUuXFxuLVxcdFxcdFxcdCAqXFxuLVxcdFxcdFxcdCAqIHByZXZfcGt0X2N0ciB3b3VsZCBiZSBuZWdhdGl2ZSBpZiB0aGVyZSB3YXMgbm9cXG4tXFx0XFx0XFx0ICogcGVuZGluZyB3b3JrLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0cGFja2V0cyA9IHR4X3JpbmctXFx1MDAzZXN0YXRzLnBhY2tldHMgXFx1MDAyNiBJTlRfTUFYO1xcbi1cXHRcXHRcXHRpZiAodHhfcmluZy1cXHUwMDNlcHJldl9wa3RfY3RyID09IHBhY2tldHMpIHtcXG4tXFx0XFx0XFx0XFx0aWF2Zl9mb3JjZV93Yih2c2ksIHR4X3JpbmctXFx1MDAzZXFfdmVjdG9yKTtcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdH1cXG4rXFx0XFx0c3RydWN0IGlhdmZfcmluZyAqdHhfcmluZyA9IFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZXR4X3JpbmdzW2ldO1xcbitcXHRcXHRzdHJ1Y3QgaWF2Zl9xX3ZlY3RvciAqcV92ZWN0b3I7XFxuIFxcbi1cXHRcXHRcXHQvKiBNZW1vcnkgYmFycmllciBiZXR3ZWVuIHJlYWQgb2YgcGFja2V0IGNvdW50IGFuZCBjYWxsXFxuLVxcdFxcdFxcdCAqIHRvIGlhdmZfZ2V0X3R4X3BlbmRpbmcoKVxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0c21wX3JtYigpO1xcbi1cXHRcXHRcXHR0eF9yaW5nLVxcdTAwM2VwcmV2X3BrdF9jdHIgPVxcbi1cXHRcXHRcXHQgIGlhdmZfZ2V0X3R4X3BlbmRpbmcodHhfcmluZywgdHJ1ZSkgPyBwYWNrZXRzIDogLTE7XFxuK1xcdFxcdC8qIHJlYWQgb25jZSwgcV92ZWN0b3IgY2FuIGJlIHJlYXNzaWduZWQgYnkgYSBjb25jdXJyZW50IHJlc2V0ICovXFxuK1xcdFxcdHFfdmVjdG9yID0gUkVBRF9PTkNFKHR4X3JpbmctXFx1MDAzZXFfdmVjdG9yKTtcXG4rXFx0XFx0aWYgKCFxX3ZlY3RvciB8fCAhdHhfcmluZy1cXHUwMDNlZGVzYylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBJZiBwYWNrZXQgY291bnRlciBoYXMgbm90IGNoYW5nZWQgdGhlIHF1ZXVlIGlzXFxuK1xcdFxcdCAqIGxpa2VseSBzdGFsbGVkLCBzbyBmb3JjZSBhbiBpbnRlcnJ1cHQgZm9yIHRoaXNcXG4rXFx0XFx0ICogcXVldWUuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIHByZXZfcGt0X2N0ciB3b3VsZCBiZSBuZWdhdGl2ZSBpZiB0aGVyZSB3YXMgbm9cXG4rXFx0XFx0ICogcGVuZGluZyB3b3JrLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cGFja2V0cyA9IHR4X3JpbmctXFx1MDAzZXN0YXRzLnBhY2tldHMgXFx1MDAyNiBJTlRfTUFYO1xcbitcXHRcXHRpZiAodHhfcmluZy1cXHUwMDNlcHJldl9wa3RfY3RyID09IHBhY2tldHMpIHtcXG4rXFx0XFx0XFx0aWF2Zl9mb3JjZV93Yih2c2ksIHFfdmVjdG9yKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIE1lbW9yeSBiYXJyaWVyIGJldHdlZW4gcmVhZCBvZiBwYWNrZXQgY291bnQgYW5kIGNhbGxcXG4rXFx0XFx0ICogdG8gaWF2Zl9nZXRfdHhfcGVuZGluZygpXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzbXBfcm1iKCk7XFxuK1xcdFxcdHR4X3JpbmctXFx1MDAzZXByZXZfcGt0X2N0ciA9XFxuK1xcdFxcdCAgaWF2Zl9nZXRfdHhfcGVuZGluZyh0eF9yaW5nLCB0cnVlKSA/IHBhY2tldHMgOiAtMTtcXG4gXFx0fVxcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzoyNzozNy4zNjM5NzY1NzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQxNTA2ODY4NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgQWRhcHRpdmUgVmlydHVhbCBGdW5jdGlvbiAoaWF2ZikgZHJpdmVyIChpYXZmX2V0aHRvb2wuYywgaWF2Zl9tYWluLmMsIGFuZCBpYXZmX3R4cnguYykuIFRoaXMgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSSBkcml2ZXIgZm9yIEludGVsIEV0aGVybmV0IFNSLUlPViBWaXJ0dWFsIEZ1bmN0aW9ucyAoZS5nLiwgWEw3MTAsIFg3MTAsIFg3MjIsIEU4MTAgc2VyaWVzKS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgaGFyZHdhcmUgb3IgU1ItSU9WIFZGIHN1cHBvcnQgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MjI0MzA0Nzc1M2YzNjg0YzIzZDk2Y2QwYTI5ZmUyNTY2NjBmYjAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTc6Mjc6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuY1xuaW5kZXggZTdjZjEyZWFhMjY4OS4uYzljMjk4NjYxN2ExOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmNcbkBAIC00OTUsNiArNDk1LDExIEBAIHN0YXRpYyBpbnQgaWF2Zl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRpZiAoKHJpbmctXHUwMDNlcnhfbWluaV9wZW5kaW5nKSB8fCAocmluZy1cdTAwM2VyeF9qdW1ib19wZW5kaW5nKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRpZiAoYWRhcHRlci1cdTAwM2VzdGF0ZSA9PSBfX0lBVkZfUkVTRVRUSU5HIHx8XG4rXHQgICAgKGFkYXB0ZXItXHUwMDNlc3RhdGUgPT0gX19JQVZGX1JVTk5JTkcgXHUwMDI2XHUwMDI2XG4rXHQgICAgIGFkYXB0ZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElBVkZfRkxBR19RVUVVRVNfRElTQUJMRUQpKVxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcbiBcdGlmIChyaW5nLVx1MDAzZXR4X3BlbmRpbmcgXHUwMDNlIElBVkZfTUFYX1RYRCB8fFxuIFx0ICAgIHJpbmctXHUwMDNldHhfcGVuZGluZyBcdTAwM2MgSUFWRl9NSU5fVFhEIHx8XG4gXHQgICAgcmluZy1cdTAwM2VyeF9wZW5kaW5nIFx1MDAzZSBJQVZGX01BWF9SWEQgfHxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uY1xuaW5kZXggMjliODQwM2EwNjZiYy4uZGU4MDk0N2Y1OWM2NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbkBAIC01ODcsNyArNTg3LDYgQEAgc3RhdGljIGludCBpYXZmX3JlcXVlc3RfbWlzY19pcnEoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiBcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFwicmVxdWVzdF9pcnEgZm9yICVzIGZhaWxlZDogJWRcXG5cIixcbiBcdFx0XHRhZGFwdGVyLVx1MDAzZW1pc2NfdmVjdG9yX25hbWUsIGVycik7XG4tXHRcdGZyZWVfaXJxKGFkYXB0ZXItXHUwMDNlbXNpeF9lbnRyaWVzWzBdLnZlY3RvciwgbmV0ZGV2KTtcbiBcdH1cbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTQwNDcsMTIgKzQwNDYsMTUgQEAgc3RhdGljIGludCBpYXZmX2hhbmRsZV90Y2xhc3Moc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwgdTMyIHRjLFxuIHtcbiBcdGlmICh0YyA9PSAwKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGlmICh0YyBcdTAwM2MgYWRhcHRlci1cdTAwM2VudW1fdGMpIHtcbi1cdFx0aWYgKCFmaWx0ZXItXHUwMDNlZi5kYXRhLnRjcF9zcGVjLmRzdF9wb3J0KSB7XG4tXHRcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdFx0XCJTcGVjaWZ5IGRlc3RpbmF0aW9uIHBvcnQgdG8gcmVkaXJlY3QgdG8gdHJhZmZpYyBjbGFzcyBvdGhlciB0aGFuIFRDMFxcblwiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuK1x0aWYgKHRjIFx1MDAzZT0gYWRhcHRlci1cdTAwM2VudW1fdGMpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiVW5hYmxlIHRvIGFkZCBmaWx0ZXIgYmVjYXVzZSBvZiBpbnZhbGlkIGRlc3RpbmF0aW9uIHRyYWZmaWMgY2xhc3NcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0aWYgKCFmaWx0ZXItXHUwMDNlZi5kYXRhLnRjcF9zcGVjLmRzdF9wb3J0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2YWRhcHRlci1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcIlNwZWNpZnkgZGVzdGluYXRpb24gcG9ydCB0byByZWRpcmVjdCB0byB0cmFmZmljIGNsYXNzIG90aGVyIHRoYW4gVEMwXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdC8qIHJlZGlyZWN0IHRvIGEgdHJhZmZpYyBjbGFzcyBvbiB0aGUgc2FtZSBkZXZpY2UgKi9cbiBcdGZpbHRlci1cdTAwM2VmLmFjdGlvbiA9IFZJUlRDSE5MX0FDVElPTl9UQ19SRURJUkVDVDtcbkBAIC00MTYwLDcgKzQxNjIsOCBAQCBzdGF0aWMgaW50IGlhdmZfZGVsZXRlX2Nsc2Zsb3dlcihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0aWYgKGZpbHRlcikge1xuIFx0XHRmaWx0ZXItXHUwMDNlZGVsID0gdHJ1ZTtcbiBcdFx0YWRhcHRlci1cdTAwM2VhcV9yZXF1aXJlZCB8PSBJQVZGX0ZMQUdfQVFfREVMX0NMT1VEX0ZJTFRFUjtcbi1cdH0gZWxzZSB7XG4rXHR9IGVsc2UgaWYgKGFkYXB0ZXItXHUwMDNlbnVtX2Nsb3VkX2ZpbHRlcnMpIHtcbitcdFx0Lyogb3RoZXIgZmlsdGVycyBzdGlsbCB0cmFja2VkLCBzbyB0aGlzIG9uZSBpcyBhIGdlbnVpbmUgbWlzcyAqL1xuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VjbG91ZF9maWx0ZXJfbGlzdF9sb2NrKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguY1xuaW5kZXggYzMwYWJmMTdjZjVkMy4uZjFjMjZhOTA3NWNmMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmNcbkBAIC0xNzYsNyArMTc2LDYgQEAgc3RhdGljIHZvaWQgaWF2Zl9mb3JjZV93YihzdHJ1Y3QgaWF2Zl92c2kgKnZzaSwgc3RydWN0IGlhdmZfcV92ZWN0b3IgKnFfdmVjdG9yKVxuICAqKi9cbiB2b2lkIGlhdmZfZGV0ZWN0X3JlY292ZXJfaHVuZyhzdHJ1Y3QgaWF2Zl92c2kgKnZzaSlcbiB7XG4tXHRzdHJ1Y3QgaWF2Zl9yaW5nICp0eF9yaW5nID0gTlVMTDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcdGludCBwYWNrZXRzO1xuQEAgLTE5NCwyOSArMTkzLDM4IEBAIHZvaWQgaWF2Zl9kZXRlY3RfcmVjb3Zlcl9odW5nKHN0cnVjdCBpYXZmX3ZzaSAqdnNpKVxuIFx0aWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpXG4gXHRcdHJldHVybjtcbiBcbitcdC8qIHR4X3JpbmdzIGNhbiBiZSBmcmVlZC9yZWFsbG9jYXRlZCBieSBhIGNvbmN1cnJlbnQgcmVzZXQgKi9cbitcdGlmICghdnNpLVx1MDAzZWJhY2stXHUwMDNldHhfcmluZ3MpXG4rXHRcdHJldHVybjtcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZzaS1cdTAwM2ViYWNrLVx1MDAzZW51bV9hY3RpdmVfcXVldWVzOyBpKyspIHtcbi1cdFx0dHhfcmluZyA9IFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZXR4X3JpbmdzW2ldO1xuLVx0XHRpZiAodHhfcmluZyBcdTAwMjZcdTAwMjYgdHhfcmluZy1cdTAwM2VkZXNjKSB7XG4tXHRcdFx0LyogSWYgcGFja2V0IGNvdW50ZXIgaGFzIG5vdCBjaGFuZ2VkIHRoZSBxdWV1ZSBpc1xuLVx0XHRcdCAqIGxpa2VseSBzdGFsbGVkLCBzbyBmb3JjZSBhbiBpbnRlcnJ1cHQgZm9yIHRoaXNcbi1cdFx0XHQgKiBxdWV1ZS5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIHByZXZfcGt0X2N0ciB3b3VsZCBiZSBuZWdhdGl2ZSBpZiB0aGVyZSB3YXMgbm9cbi1cdFx0XHQgKiBwZW5kaW5nIHdvcmsuXG4tXHRcdFx0ICovXG4tXHRcdFx0cGFja2V0cyA9IHR4X3JpbmctXHUwMDNlc3RhdHMucGFja2V0cyBcdTAwMjYgSU5UX01BWDtcbi1cdFx0XHRpZiAodHhfcmluZy1cdTAwM2VwcmV2X3BrdF9jdHIgPT0gcGFja2V0cykge1xuLVx0XHRcdFx0aWF2Zl9mb3JjZV93Yih2c2ksIHR4X3JpbmctXHUwMDNlcV92ZWN0b3IpO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuK1x0XHRzdHJ1Y3QgaWF2Zl9yaW5nICp0eF9yaW5nID0gXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNldHhfcmluZ3NbaV07XG4rXHRcdHN0cnVjdCBpYXZmX3FfdmVjdG9yICpxX3ZlY3RvcjtcbiBcbi1cdFx0XHQvKiBNZW1vcnkgYmFycmllciBiZXR3ZWVuIHJlYWQgb2YgcGFja2V0IGNvdW50IGFuZCBjYWxsXG4tXHRcdFx0ICogdG8gaWF2Zl9nZXRfdHhfcGVuZGluZygpXG4tXHRcdFx0ICovXG4tXHRcdFx0c21wX3JtYigpO1xuLVx0XHRcdHR4X3JpbmctXHUwMDNlcHJldl9wa3RfY3RyID1cbi1cdFx0XHQgIGlhdmZfZ2V0X3R4X3BlbmRpbmcodHhfcmluZywgdHJ1ZSkgPyBwYWNrZXRzIDogLTE7XG4rXHRcdC8qIHJlYWQgb25jZSwgcV92ZWN0b3IgY2FuIGJlIHJlYXNzaWduZWQgYnkgYSBjb25jdXJyZW50IHJlc2V0ICovXG4rXHRcdHFfdmVjdG9yID0gUkVBRF9PTkNFKHR4X3JpbmctXHUwMDNlcV92ZWN0b3IpO1xuK1x0XHRpZiAoIXFfdmVjdG9yIHx8ICF0eF9yaW5nLVx1MDAzZWRlc2MpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qIElmIHBhY2tldCBjb3VudGVyIGhhcyBub3QgY2hhbmdlZCB0aGUgcXVldWUgaXNcbitcdFx0ICogbGlrZWx5IHN0YWxsZWQsIHNvIGZvcmNlIGFuIGludGVycnVwdCBmb3IgdGhpc1xuK1x0XHQgKiBxdWV1ZS5cbitcdFx0ICpcbitcdFx0ICogcHJldl9wa3RfY3RyIHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHRoZXJlIHdhcyBub1xuK1x0XHQgKiBwZW5kaW5nIHdvcmsuXG4rXHRcdCAqL1xuK1x0XHRwYWNrZXRzID0gdHhfcmluZy1cdTAwM2VzdGF0cy5wYWNrZXRzIFx1MDAyNiBJTlRfTUFYO1xuK1x0XHRpZiAodHhfcmluZy1cdTAwM2VwcmV2X3BrdF9jdHIgPT0gcGFja2V0cykge1xuK1x0XHRcdGlhdmZfZm9yY2Vfd2IodnNpLCBxX3ZlY3Rvcik7XG4rXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbitcbitcdFx0LyogTWVtb3J5IGJhcnJpZXIgYmV0d2VlbiByZWFkIG9mIHBhY2tldCBjb3VudCBhbmQgY2FsbFxuK1x0XHQgKiB0byBpYXZmX2dldF90eF9wZW5kaW5nKClcbitcdFx0ICovXG4rXHRcdHNtcF9ybWIoKTtcbitcdFx0dHhfcmluZy1cdTAwM2VwcmV2X3BrdF9jdHIgPVxuK1x0XHQgIGlhdmZfZ2V0X3R4X3BlbmRpbmcodHhfcmluZywgdHJ1ZSkgPyBwYWNrZXRzIDogLTE7XG4gXHR9XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTc6Mjc6MzcuMzYzOTc4NTYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ1MDk0MTkzMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBhbmQgQ29udGV4dCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBjaGFuZ2luZy4gVGhlIGZpbGUgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiBgaWF2ZmAsIHNwZWNpZmljYWxseTogYGlhdmZfZXRodG9vbC5jYCwgYGlhdmZfbWFpbi5jYCwgYW5kIGBpYXZmX3R4cnguY2AuIFJpZ2h0LCBzbyB0aGlzIGhhcyB0byBkbyB3aXRoIHRoZSBJbnRlbCBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlci4gSUFWRi4uLiB0aGF0J3MgZm9yIEludGVsIFNSLUlPViBFdGhlcm5ldCBWaXJ0dWFsIEZ1bmN0aW9ucywgdHlwaWNhbGx5IGZvciB0aGluZ3MgbGlrZSB0aGUgSW50ZWwgNzAwLzgwMCBzZXJpZXMgY29udHJvbGxlcnMgKGk0MGUsIGljZSwgdGhhdCBraW5kIG9mIHRoaW5nKS5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgYGlhdmZgIGEgKnZlbmRvci1zcGVjaWZpYyogcGh5c2ljYWwgZHJpdmVyLCBvciBkb2VzIFFFTVUgZW11bGF0ZSBpdD8gRG9lcyBRRU1VIGV2ZW4gaGF2ZSBhbiBJQVZGIGVtdWxhdGlvbj8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBRRU1VIG5hdGl2ZWx5IHN1cHBvcnRzIG9yIGlmIGl0IHJlbGllcyBvbiB1bmRlcmx5aW5nIGhhcmR3YXJlIHRoYXQncyBub3QgYXZhaWxhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cC4gTGV0J3Mgc2VlLi4uIFNlY3Rpb24gMiBvZiB0aGUgcHJvbXB0IGhhcyBhIHJlbGV2YW50IGRpc3RpbmN0aW9uLiBJdCBsaXN0cyBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMgYW5kIFNtYXJ0TklDcy4gSUFWRiBjb3VsZCBmYWxsIGludG8gdGhhdCBjYXRlZ29yeS4gVGhlbiBpdCBjb250cmFzdHMgdGhhdCB3aXRoIFwiUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sc1wiIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdmlydHVhbCBidXNlcy5cblxuU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGV0aGVyIGlhdmYgaXMgcmVhY2hhYmxlLiBJcyBpdCBlbXVsYXRlZCBieSBRRU1VLCBvciBkb2VzIGl0IHV0aWxpemUgc29tZSB2aXJ0dWFsIGJ1cyBpbnRlcmZhY2UsIG9yIHBlcmhhcHMgc29tZSBzb2Z0d2FyZSBlbXVsYXRpb24gbWV0aG9kPyBJIG5lZWQgdG8gY2hlY2sgaG93IGBpYXZmYCBhY3R1YWxseSBiaW5kcyB0byB0aGUgaGFyZHdhcmUuIEEgcXVpY2sgZ3JlcCBmb3IgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIHVzZWZ1bCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTc3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTc6Mjc6NTEuODczNDAwNzEzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzAzNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kZXZpY2VfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYz0yNz1zdGF0aWMgY29uc3QgY2hhciBpYXZmX2NvcHlyaWdodFtdID1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtMzctICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYzozODpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWF2Zl9wY2lfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYy0zOS1cXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQVZGX0RFVl9JRF9WRikgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM9NTE4Nj1pbnQgaWF2Zl9wcm9jZXNzX2NvbmZpZyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYy01Mjk1LSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jOjUyOTY6c3RhdGljIGludCBpYXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTI5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE3OjI3OjUxLjkyMTcwOTk0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3MzcyOTcwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJQVZGIFBDSSBJRHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBQQ0kgSURzIHdpdGhpbiB0aGUgYGlhdmZfcGNpX3RibGAgc3RydWN0dXJlLiBUaGlzIGxpa2VseSBjb250YWlucyB0aGUgbWFwcGluZyBiZXR3ZWVuIFBDSSBkZXZpY2UgaWRlbnRpZmllcnMgYW5kIHRoZSBJbnRlbCBBZHZhbmNlZCBWaXJ0dWFsIEZ1bmN0aW9uIChJQVZGKSBkcml2ZXIsIGEgY3JpdGljYWwgcGllY2UgZm9yIHByb3BlciBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIG1hbmFnZW1lbnQgaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGRldmljZXMgdGhpcyBkcml2ZXIgc3VwcG9ydHMgYXQgdGhlIGhhcmR3YXJlIGxldmVsLiBLbm93aW5nIHRoZXNlIElEcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBkZXZpY2UgY29tcGF0aWJpbGl0eSwgcG90ZW50aWFsIGxpbWl0YXRpb25zLCBhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgaGFyZHdhcmUgcmV2aXNpb25zLiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCBmb3IgZGlhZ25vc2luZyBkcml2ZXItcmVsYXRlZCBpc3N1ZXMgb3IgdW5kZXJzdGFuZGluZyBoYXJkd2FyZSBzdXBwb3J0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTU4MiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE3OjI3OjU0LjY1OTAwOTU2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpYXZmX3BjaV90YmxbXSA9IHtcXG4gIDM5OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElBVkZfREVWX0lEX1ZGKSB9LFxcbiAgNDA6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUFWRl9ERVZfSURfVkZfSFYpIH0sXFxuICA0MTpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQVZGX0RFVl9JRF9YNzIyX1ZGKSB9LFxcbiAgNDI6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUFWRl9ERVZfSURfQURBUFRJVkVfVkYpIH0sXFxuICA0MzpcXHRcXHQvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovXFxuICA0NDpcXHRcXHR7IH1cXG4gIDQ1OlxcdH07XFxuICA0NjpcXHRcXG4gIDQ3OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpYXZmX3BjaV90YmwpO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRNT0RVTEVfQUxJQVMoXFxcImk0MGV2ZlxcXCIpO1xcbiAgNTA6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJJbnRlbChSKSBFdGhlcm5ldCBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIE5ldHdvcmsgRHJpdmVyXFxcIik7XFxuICA1MTpcXHRNT0RVTEVfSU1QT1JUX05TKFxcXCJMSUJFVEhcXFwiKTtcXG4gIDUyOlxcdE1PRFVMRV9JTVBPUlRfTlMoXFxcIkxJQklFXFxcIik7XFxuICA1MzpcXHRNT0RVTEVfSU1QT1JUX05TKFxcXCJMSUJJRV9BRE1JTlFcXFwiKTtcXG4gIDU0OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUEwgdjJcXFwiKTtcXG4gIDU1OlxcdFxcbiAgNTY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpYXZmX25ldGRldl9vcHM7XFxuICA1NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTc6Mjc6NTQuNjU5MzUwMjQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAxNzk1NTE4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBJQVZGIEZ1enppbmcgRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgZnV6emluZyB0aGUgSUFWRiAoSW50ZWwgNzAwLzgwMCBzZXJpZXMgVmlydHVhbCBGdW5jdGlvbikgZHJpdmVyIGlzIGV2ZW4gZmVhc2libGUgd2l0aGluIG15IGN1cnJlbnQgc2V0dXAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIFFFTVUgZW11bGF0ZXMgdGhlIGhhcmR3YXJlLiBMZXQgbWUgY2hlY2suLi4gbm9wZS4gSXQgZW11bGF0ZXMgZTEwMDAsIGUxMDAwZSwgYW5kIGlnYiwgYnV0IG5vdCBpNDBlIG9yIGlhdmYuIFRoYXQncyBhIGRlZmluaXRlIHJvYWRibG9jay5cblxuQWxyaWdodCwgd2hhdCBhYm91dCBsZXZlcmFnaW5nIHN5emthbGxlcj8gRG9lcyBpdCB0YXJnZXQgSUFWRj8gQSBxdWljayBzZWFyY2ggcmV2ZWFscyB0aGF0IHN5emthbGxlciBuZWVkcyAqYWN0dWFsKiBJbnRlbCBTUi1JT1YgaGFyZHdhcmUgKGxpa2UgWEw3MTAsIFg3MTAsIFg3MjIsIEU4MTAsIGV0Yy4pIG9yIFBDSWUgcGFzc3Rocm91Z2ggb2YgYW4gU1ItSU9WIFZGLiBTbywgYWdhaW4sIG5vIGRpY2Ugd2l0aG91dCBkZWRpY2F0ZWQgcGh5c2ljYWwgaGFyZHdhcmUsIG9yIGRpcmVjdCBwYXNzdGhyb3VnaCBvZiBhIFZGLlxuXG5XYWl0IGEgc2Vjb25kLCBsZXQgbWUgY2FyZWZ1bGx5IHJlcmVhZCB0aGUgXCJXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2VcIiBjcml0ZXJpYS4gT2theSwgdGhlcmUgaXQgaXM6IFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLi4uIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIiBzb3VuZHMgbGlrZSBhIHBlcmZlY3QgZml0LiBBbmQgdGhhdCdzIGV4YWN0bHkgd2hhdCBJQVZGIG5lZWRzLCByaWdodD8gXG5cbk5vdywgd2FpdC4uLiBtYXliZSBJJ20gb3Zlcmxvb2tpbmcgc29tZXRoaW5nIG9idmlvdXMuIFdoYXQgYWJvdXQgbG9va2luZyBhdCBhbHRlcm5hdGl2ZXMsIGxpa2UgdmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBvciBzb2NrZXRzPyBObywgSUFWRiBpcyBhIFBDSSBkcml2ZXIuIEkgY2FuIHZlcmlmeSBpdCBieSBjaGVja2luZyB0aGUgYGlhdmZfcHJvYmVgIGZ1bmN0aW9uIGRlZmluaXRpb24sIHdoaWNoIHRha2VzIGEgYHBjaV9kZXZgIHN0cnVjdC4gSSBjYW4gYWxzbyB2ZXJpZnkgdGhhdCBpdCBpcyByZWdpc3RlcmVkIGFzIGEgUENJIGRyaXZlciB2aWEgYG1vZHVsZV9wY2lfZHJpdmVyKGlhdmZfZHJpdmVyKTtgLCBieSBjaGVja2luZyBpbiBgaWF2Zl9tYWluLmNgLlxuXG5Mb29rcyBsaWtlLCBkZXNwaXRlIG15IGJlc3QgaW50ZW50aW9ucywgSUFWRiBpcyBnb2luZyB0byBiZSBhIGhhcmQgXCJub1wiIGZvciBmdXp6aW5nIHdpdGhpbiBteSBjdXJyZW50IHZpcnR1YWxpemVkIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTQ2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTc6Mjg6MDQuODM4OTA0OTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNzQ1NzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzoyODowNC44ODYyODgxNDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzI3OTg1MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biB0aGUgYGlhdmZfZHJpdmVyYCBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgZm9yIHRoZSBgaWF2Zl9kcml2ZXJgLiBUaGlzIHVzdWFsbHkgbWVhbnMgZGl2aW5nIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBkcml2ZXIgZGVjbGFyZXMgaXRzZWxmIHRvIHRoZSBzeXN0ZW0uIEknbGwgYmUgc2VhcmNoaW5nIGZvciB0aGUgdHlwaWNhbCBwYXR0ZXJucyAtIHRoaW5ncyBsaWtlIGBtb2R1bGVfaW5pdGAsIGBtb2R1bGVfZXhpdGAsIGBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXJgLCBvciBwb3RlbnRpYWxseSBzb21lIG9sZGVyIGludGVyZmFjZXMgaWYgaXQncyBhIGxlZ2FjeSBjb21wb25lbnQuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXQgcmVnaXN0ZXJzIGFzIGEgcGxhdGZvcm0gZHJpdmVyLCBhIFBDSSBkcml2ZXIsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LiBJcyBpdCBsaWtlbHkgdG8gYmUgYW4gYXN5bmMgcHJvYmU/IEFyZSB0aGVyZSBhbnkgZGV2aWNlIHRyZWUgYmluZGluZ3MgaW52b2x2ZWQgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSdsbCBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIGFueSB2ZW5kb3Itc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgb3IgY2FsbGJhY2tzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEVzc2VudGlhbGx5LCBJJ20gbG9va2luZyBmb3IgdGhlIGVudHJ5IHBvaW50IC0gdGhlIGNyaXRpY2FsIGNvZGUgdGhhdCBtYWtlcyB0aGUgYGlhdmZfZHJpdmVyYCB2aXNpYmxlIHRvIHRoZSBrZXJuZWwncyBkZXZpY2UgbWFuYWdlbWVudCBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVncmF0ZXMgd2l0aCB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCB3aGF0IGl0J3MgZXhwZWN0aW5nIGluIHRlcm1zIG9mIGhhcmR3YXJlIHJlc291cmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA4NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE3OjI4OjA4LjIxNDI3NTc3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMzU4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3JlZ2lzdGVyX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jPTU2NzE9c3RhdGljIGludCBfX2luaXQgaWF2Zl9pbml0X21vZHVsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYy01Njc2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM6NTY3NzpcXHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2aWF2Zl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTY3OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE3OjI4OjA4LjI2MjUxNjEwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozOTg4MjgxMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGlhdmZfZHJpdmVyJ3MgU3l6a2FsbGVyIENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgYGlhdmZfZHJpdmVyYCBpcyBhIHN0YW5kYXJkIGBwY2lfZHJpdmVyYCwgbm90aGluZyBwYXJ0aWN1bGFybHkgZXhvdGljIHRoZXJlLiBCdXQgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiBJIGdldCBTeXprYWxsZXIgdG8gaW5zdGFudGlhdGUgYW5kIHRlc3QgaXQgd2l0aG91dCByZXF1aXJpbmcgYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGV2ZW4gYSBmdWxsIFFFTVUgZW11bGF0aW9uIG9mIGFuIElBVkYgZGV2aWNlPyBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgU3l6a2FsbGVyIHVzdWFsbHkgcnVucyB3aXRoaW4gZmFpcmx5IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZWl0aGVyIEdDRSBvciwgbW9yZSBjb21tb25seSwgcGxhaW4gUUVNVSwgYW5kIGxldmVyYWdlcyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgYW5kIHR1bi90YXAuXG5cblRoZSBjcnVjaWFsIGlzc3VlIGhlcmUgaXMgdGhhdCwgYXMgSSByZWNhbGwsIHN0YW5kYXJkIFFFTVUgaW5zdGFsbGF0aW9ucyBkb24ndCBpbmNsdWRlIGVtdWxhdGlvbiBmb3IgSW50ZWwgVmlydHVhbCBGdW5jdGlvbiAoVkYpIGRldmljZXMsIHNwZWNpZmljYWxseSB0aG9zZSBpZGVudGlmaWVkIHdpdGggdGhlIGBJQVZGX0RFVl9JRF9WRmAgc2VyaWVzLiBUaGlzIGlzIGEgcG90ZW50aWFsIHNob3ctc3RvcHBlciwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgSUFWRl9ERVZfSURfVkZgIHZhbHVlIHRvIGZ1bGx5IGNvbmZpcm0gaWYgaXQgYWxpZ25zIHdpdGggbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nIG9mIHN1cHBvcnRlZCBRRU1VIGRldmljZXMgYW5kIHRoZWlyIGxpbWl0YXRpb25zLiBUaW1lIHRvIGxvb2sgdGhhdCB1cC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTE3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE3OjI4OjEyLjI1MDgwMTEwOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MTczNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSUFWRl9ERVZfSURfVkZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2Rldmlkcy5oLTctLyogRGV2aWNlIElEcyBmb3IgdGhlIFZGIGRyaXZlciAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9kZXZpZHMuaDo4OiNkZWZpbmUgSUFWRl9ERVZfSURfVkZcXHRcXHRcXHQweDE1NENcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZGV2aWRzLmg6OTojZGVmaW5lIElBVkZfREVWX0lEX1ZGX0hWXFx0XFx0MHgxNTcxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2Rldmlkcy5oLTEwLSNkZWZpbmUgSUFWRl9ERVZfSURfQURBUFRJVkVfVkZcXHRcXHQweDE4ODlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM9Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlhdmZfcGNpX3RibFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM6Mzk6XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUFWRl9ERVZfSURfVkYpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYzo0MDpcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQVZGX0RFVl9JRF9WRl9IVikgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jLTQxLVxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElBVkZfREVWX0lEX1g3MjJfVkYpIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE3OjI4OjEyLjI5NjMyNDY2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NTc0NDkwNzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVmVyZGljdDogU3RydWN0dXJhbGx5IFVucmVhY2hhYmxlIEhhcmR3YXJlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdG91Y2hpbmcgdGhlIGBpYXZmYCBkcml2ZXIsIGFuZCB0aGF0J3MgYW4gaW1tZWRpYXRlIHJlZCBmbGFnIGluIG15IGV4cGVyaWVuY2UuIFRoZSBkZXZpY2UgSURzIG1lbnRpb25lZCAoMHgxNTRDLCAweDE1NzEsIDB4MzdDRCwgMHgxODg5KSBhcmUgYWxsIGZvciBJbnRlbCBWaXJ0dWFsIEZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBYTDcxMC9YNzEwLCA3MDAgU2VyaWVzLCBYNzIyLCBhbmQgRTgxMCBWRnMuIEkga25vdyB0aGVzZSBkZXZpY2VzOyB0aGV5J3JlIFNSLUlPViBWRnMuIEFuZCwgYXMgSSBzdXNwZWN0ZWQsIHRoZSB0ZXh0IGNvbmZpcm1zIHRoYXQgKm5vbmUqIG9mIHRoZXNlIGFyZSBlbXVsYXRlZCBieSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBWTXMuIE5vIHZpcnR1YWwgYnVzZXMsIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBgaWF2ZmAuIFRoYXQncyB0aGUgY3J1eCBvZiBpdC5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSByZS1leGFtaW5lIHRoZSBkaWZmIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gT2theSwgd2UndmUgZ290OlxuXG4xLiAgYGlhdmZfZXRodG9vbC5jYDogYGlhdmZfc2V0X3JpbmdwYXJhbWAgLSBFdGh0b29sIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBpYXZmYCBkcml2ZXIuXG4yLiAgYGlhdmZfbWFpbi5jYDogYGlhdmZfcmVxdWVzdF9taXNjX2lycWAsIGBpYXZmX2hhbmRsZV90Y2xhc3NgLCBgaWF2Zl9kZWxldGVfY2xzZmxvd2VyYCAtIEludGVycnVwdCBoYW5kbGluZyBkdXJpbmcgcHJvYmUvcmVzZXQsIGFuZCB0cmFmZmljIGNvbnRyb2wgKFRDKSBmbG93ZXIgb2ZmbG9hZCBoYW5kbGVycy5cbjMuICBgaWF2Zl90eHJ4LmNgOiBgaWF2Zl9kZXRlY3RfcmVjb3Zlcl9odW5nYCAtIEEgd2F0Y2hkb2cvaGFuZyByZWNvdmVyeSBtZWNoYW5pc20gZm9yIGBpYXZmYC5cblxuQWxyaWdodCwgdGhlc2UgYXJlIGFsbCBkZWVwbHkgZW1iZWRkZWQgd2l0aGluIHRoZSBgaWF2ZmAgZHJpdmVyIGl0c2VsZi4gRXZlcnl0aGluZyBpcyBzcGVjaWZpYyB0byBhbiBpbnN0YW50aWF0ZWQgYW5kIHByb2JlZCBgaWF2ZmAgZGV2aWNlLiBZb3UgY2FuJ3QgZXhlY3V0ZSBhbnkgb2YgdGhpcyBjb2RlIHVubGVzcyB5b3UgaGF2ZSBhICpyZWFsKiBTUi1JT1YgVkYgZnJvbSBJbnRlbCBhdHRhY2hlZCB0byBhIHN5c3RlbS4gIFRoZSBjb2RlIHRvdWNoZXMgU1ItSU9WLCB3aGljaCByZXF1aXJlcyBkZWRpY2F0ZWQgaGFyZHdhcmUsIGFuZCBpdCdzIG5vdCBwcmVzZW50IGluIHRoZSBjb21tb24gZW11bGF0aW9uIGVudmlyb25tZW50cy5cblxuVGhpcyBpcyBhIGNsYXNzaWMgY2FzZSBvZiBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSxcIiBhcyB0aGUgZG9jdW1lbnQgc2F5cy4gSXQncyBpbiB0aGUgc2FtZSBjYXRlZ29yeSBhcyB0aG9zZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYW5kIGBhbWRncHVgIGRyaXZlcnMsIHdoaWNoLCBhcyBleHBlcnRzLCB3ZSBrbm93IHJlcXVpcmUgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIGFuZCBhcmVuJ3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhhdCdzIGEgcGVyZmVjdCBhbmFsb2d5LiBgaWF2ZmAgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgTklDIGRyaXZlciB0aGF0IG5lZWRzIHBoeXNpY2FsIGhhcmR3YXJlLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgY2xlYXI6IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB0aGUgcmVzdWx0cyBhcmUgY2xlYXIgYW5kIGNvbmNpc2UuICBTaW5jZSBgV29ydGhGdXp6aW5nYCBpcyBgZmFsc2VgLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVzdWx0czpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWBcbiogICBgUmVhc29uaW5nYDogIFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIChgaWF2ZmApIGRyaXZlciwgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIG5ldHdvcmsgZHJpdmVyIGZvciBJbnRlbCBFdGhlcm5ldCBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMgKGUuZy4sIFg3MTAsIEU4MTApLiBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgcGh5c2ljYWwgSW50ZWwgaGFyZHdhcmUgb3IgU1ItSU9WIHN1cHBvcnQgYW5kIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCJcblxuT2theSwgSSB0aGluayB3ZSdyZSBnb29kIHRvIGdvLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI0OCwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTc6Mjg6MTguODcwODE3OTk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb24gKGlhdmYpIGRyaXZlciAoaWF2Zl9ldGh0b29sLmMsIGlhdmZfbWFpbi5jLCBhbmQgaWF2Zl90eHJ4LmMpLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBJbnRlbCBFdGhlcm5ldCBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMgKGUuZy4sIFhMNzEwLCBYNzEwLCBYNzIyLCBFODEwIHNlcmllcykuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlIG9yIFNSLUlPViBWRiBzdXBwb3J0IGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIChpYXZmKSBkcml2ZXIgKGlhdmZfZXRodG9vbC5jLCBpYXZmX21haW4uYywgYW5kIGlhdmZfdHhyeC5jKS4gVGhpcyBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIGRyaXZlciBmb3IgSW50ZWwgRXRoZXJuZXQgU1ItSU9WIFZpcnR1YWwgRnVuY3Rpb25zIChlLmcuLCBYTDcxMCwgWDcxMCwgWDcyMiwgRTgxMCBzZXJpZXMpLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSBvciBTUi1JT1YgVkYgc3VwcG9ydCBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzoyODoxOC44NzA4NDgwNzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow24jh6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 17:06:54 +0000 UTC FinishedAt: 2026-09-15 17:28:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE3OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb24gKGlhdmYpIGRyaXZlciAoaWF2Zl9ldGh0b29sLmMsIGlhdmZfbWFpbi5jLCBhbmQgaWF2Zl90eHJ4LmMpLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBJbnRlbCBFdGhlcm5ldCBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMgKGUuZy4sIFhMNzEwLCBYNzEwLCBYNzIyLCBFODEwIHNlcmllcykuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlIG9yIFNSLUlPViBWRiBzdXBwb3J0IGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1MjI0MzA0Nzc1M2YzNjg0YzIzZDk2Y2QwYTI5ZmUyNTY2NjBmYjAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTc6Mjc6MzYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmNcbmluZGV4IGU3Y2YxMmVhYTI2ODkuLmM5YzI5ODY2MTdhMTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jXG5AQCAtNDk1LDYgJiM0Mzs0OTUsMTEgQEAgc3RhdGljIGludCBpYXZmX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdGlmICgocmluZy1cdTAwM2VyeF9taW5pX3BlbmRpbmcpIHx8IChyaW5nLVx1MDAzZXJ4X2p1bWJvX3BlbmRpbmcpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiYjNDM7XHRpZiAoYWRhcHRlci1cdTAwM2VzdGF0ZSA9PSBfX0lBVkZfUkVTRVRUSU5HIHx8XG4mIzQzO1x0ICAgIChhZGFwdGVyLVx1MDAzZXN0YXRlID09IF9fSUFWRl9SVU5OSU5HIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgYWRhcHRlci1cdTAwM2VmbGFncyBcdTAwMjYgSUFWRl9GTEFHX1FVRVVFU19ESVNBQkxFRCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVBR0FJTjtcbiYjNDM7XG4gXHRpZiAocmluZy1cdTAwM2V0eF9wZW5kaW5nIFx1MDAzZSBJQVZGX01BWF9UWEQgfHxcbiBcdCAgICByaW5nLVx1MDAzZXR4X3BlbmRpbmcgXHUwMDNjIElBVkZfTUlOX1RYRCB8fFxuIFx0ICAgIHJpbmctXHUwMDNlcnhfcGVuZGluZyBcdTAwM2UgSUFWRl9NQVhfUlhEIHx8XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbmluZGV4IDI5Yjg0MDNhMDY2YmMuLmRlODA5NDdmNTljNjUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXG5AQCAtNTg3LDcgJiM0Mzs1ODcsNiBAQCBzdGF0aWMgaW50IGlhdmZfcmVxdWVzdF9taXNjX2lycShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxuIFx0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4gXHRcdFx0XCYjMzQ7cmVxdWVzdF9pcnEgZm9yICVzIGZhaWxlZDogJWRcXG5cJiMzNDssXG4gXHRcdFx0YWRhcHRlci1cdTAwM2VtaXNjX3ZlY3Rvcl9uYW1lLCBlcnIpO1xuLVx0XHRmcmVlX2lycShhZGFwdGVyLVx1MDAzZW1zaXhfZW50cmllc1swXS52ZWN0b3IsIG5ldGRldik7XG4gXHR9XG4gXHRyZXR1cm4gZXJyO1xuIH1cbkBAIC00MDQ3LDEyICYjNDM7NDA0NiwxNSBAQCBzdGF0aWMgaW50IGlhdmZfaGFuZGxlX3RjbGFzcyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdGMsXG4ge1xuIFx0aWYgKHRjID09IDApXG4gXHRcdHJldHVybiAwO1xuLVx0aWYgKHRjIFx1MDAzYyBhZGFwdGVyLVx1MDAzZW51bV90Yykge1xuLVx0XHRpZiAoIWZpbHRlci1cdTAwM2VmLmRhdGEudGNwX3NwZWMuZHN0X3BvcnQpIHtcbi1cdFx0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4tXHRcdFx0XHRcJiMzNDtTcGVjaWZ5IGRlc3RpbmF0aW9uIHBvcnQgdG8gcmVkaXJlY3QgdG8gdHJhZmZpYyBjbGFzcyBvdGhlciB0aGFuIFRDMFxcblwmIzM0Oyk7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbiYjNDM7XHRpZiAodGMgXHUwMDNlPSBhZGFwdGVyLVx1MDAzZW51bV90Yykge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtVbmFibGUgdG8gYWRkIGZpbHRlciBiZWNhdXNlIG9mIGludmFsaWQgZGVzdGluYXRpb24gdHJhZmZpYyBjbGFzc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1x0aWYgKCFmaWx0ZXItXHUwMDNlZi5kYXRhLnRjcF9zcGVjLmRzdF9wb3J0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNmFkYXB0ZXItXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O1NwZWNpZnkgZGVzdGluYXRpb24gcG9ydCB0byByZWRpcmVjdCB0byB0cmFmZmljIGNsYXNzIG90aGVyIHRoYW4gVEMwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFx0LyogcmVkaXJlY3QgdG8gYSB0cmFmZmljIGNsYXNzIG9uIHRoZSBzYW1lIGRldmljZSAqL1xuIFx0ZmlsdGVyLVx1MDAzZWYuYWN0aW9uID0gVklSVENITkxfQUNUSU9OX1RDX1JFRElSRUNUO1xuQEAgLTQxNjAsNyAmIzQzOzQxNjIsOCBAQCBzdGF0aWMgaW50IGlhdmZfZGVsZXRlX2Nsc2Zsb3dlcihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0aWYgKGZpbHRlcikge1xuIFx0XHRmaWx0ZXItXHUwMDNlZGVsID0gdHJ1ZTtcbiBcdFx0YWRhcHRlci1cdTAwM2VhcV9yZXF1aXJlZCB8PSBJQVZGX0ZMQUdfQVFfREVMX0NMT1VEX0ZJTFRFUjtcbi1cdH0gZWxzZSB7XG4mIzQzO1x0fSBlbHNlIGlmIChhZGFwdGVyLVx1MDAzZW51bV9jbG91ZF9maWx0ZXJzKSB7XG4mIzQzO1x0XHQvKiBvdGhlciBmaWx0ZXJzIHN0aWxsIHRyYWNrZWQsIHNvIHRoaXMgb25lIGlzIGEgZ2VudWluZSBtaXNzICovXG4gXHRcdGVyciA9IC1FSU5WQUw7XG4gXHR9XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZhZGFwdGVyLVx1MDAzZWNsb3VkX2ZpbHRlcl9saXN0X2xvY2spO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdHhyeC5jXG5pbmRleCBjMzBhYmYxN2NmNWQzLi5mMWMyNmE5MDc1Y2YyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguY1xuQEAgLTE3Niw3ICYjNDM7MTc2LDYgQEAgc3RhdGljIHZvaWQgaWF2Zl9mb3JjZV93YihzdHJ1Y3QgaWF2Zl92c2kgKnZzaSwgc3RydWN0IGlhdmZfcV92ZWN0b3IgKnFfdmVjdG9yKVxuICAqKi9cbiB2b2lkIGlhdmZfZGV0ZWN0X3JlY292ZXJfaHVuZyhzdHJ1Y3QgaWF2Zl92c2kgKnZzaSlcbiB7XG4tXHRzdHJ1Y3QgaWF2Zl9yaW5nICp0eF9yaW5nID0gTlVMTDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcdGludCBwYWNrZXRzO1xuQEAgLTE5NCwyOSAmIzQzOzE5MywzOCBAQCB2b2lkIGlhdmZfZGV0ZWN0X3JlY292ZXJfaHVuZyhzdHJ1Y3QgaWF2Zl92c2kgKnZzaSlcbiBcdGlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0LyogdHhfcmluZ3MgY2FuIGJlIGZyZWVkL3JlYWxsb2NhdGVkIGJ5IGEgY29uY3VycmVudCByZXNldCAqL1xuJiM0MztcdGlmICghdnNpLVx1MDAzZWJhY2stXHUwMDNldHhfcmluZ3MpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdnNpLVx1MDAzZWJhY2stXHUwMDNlbnVtX2FjdGl2ZV9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHR4X3JpbmcgPSBcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2V0eF9yaW5nc1tpXTtcbi1cdFx0aWYgKHR4X3JpbmcgXHUwMDI2XHUwMDI2IHR4X3JpbmctXHUwMDNlZGVzYykge1xuLVx0XHRcdC8qIElmIHBhY2tldCBjb3VudGVyIGhhcyBub3QgY2hhbmdlZCB0aGUgcXVldWUgaXNcbi1cdFx0XHQgKiBsaWtlbHkgc3RhbGxlZCwgc28gZm9yY2UgYW4gaW50ZXJydXB0IGZvciB0aGlzXG4tXHRcdFx0ICogcXVldWUuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBwcmV2X3BrdF9jdHIgd291bGQgYmUgbmVnYXRpdmUgaWYgdGhlcmUgd2FzIG5vXG4tXHRcdFx0ICogcGVuZGluZyB3b3JrLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHBhY2tldHMgPSB0eF9yaW5nLVx1MDAzZXN0YXRzLnBhY2tldHMgXHUwMDI2IElOVF9NQVg7XG4tXHRcdFx0aWYgKHR4X3JpbmctXHUwMDNlcHJldl9wa3RfY3RyID09IHBhY2tldHMpIHtcbi1cdFx0XHRcdGlhdmZfZm9yY2Vfd2IodnNpLCB0eF9yaW5nLVx1MDAzZXFfdmVjdG9yKTtcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbiYjNDM7XHRcdHN0cnVjdCBpYXZmX3JpbmcgKnR4X3JpbmcgPSBcdTAwMjZ2c2ktXHUwMDNlYmFjay1cdTAwM2V0eF9yaW5nc1tpXTtcbiYjNDM7XHRcdHN0cnVjdCBpYXZmX3FfdmVjdG9yICpxX3ZlY3RvcjtcbiBcbi1cdFx0XHQvKiBNZW1vcnkgYmFycmllciBiZXR3ZWVuIHJlYWQgb2YgcGFja2V0IGNvdW50IGFuZCBjYWxsXG4tXHRcdFx0ICogdG8gaWF2Zl9nZXRfdHhfcGVuZGluZygpXG4tXHRcdFx0ICovXG4tXHRcdFx0c21wX3JtYigpO1xuLVx0XHRcdHR4X3JpbmctXHUwMDNlcHJldl9wa3RfY3RyID1cbi1cdFx0XHQgIGlhdmZfZ2V0X3R4X3BlbmRpbmcodHhfcmluZywgdHJ1ZSkgPyBwYWNrZXRzIDogLTE7XG4mIzQzO1x0XHQvKiByZWFkIG9uY2UsIHFfdmVjdG9yIGNhbiBiZSByZWFzc2lnbmVkIGJ5IGEgY29uY3VycmVudCByZXNldCAqL1xuJiM0MztcdFx0cV92ZWN0b3IgPSBSRUFEX09OQ0UodHhfcmluZy1cdTAwM2VxX3ZlY3Rvcik7XG4mIzQzO1x0XHRpZiAoIXFfdmVjdG9yIHx8ICF0eF9yaW5nLVx1MDAzZWRlc2MpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIElmIHBhY2tldCBjb3VudGVyIGhhcyBub3QgY2hhbmdlZCB0aGUgcXVldWUgaXNcbiYjNDM7XHRcdCAqIGxpa2VseSBzdGFsbGVkLCBzbyBmb3JjZSBhbiBpbnRlcnJ1cHQgZm9yIHRoaXNcbiYjNDM7XHRcdCAqIHF1ZXVlLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIHByZXZfcGt0X2N0ciB3b3VsZCBiZSBuZWdhdGl2ZSBpZiB0aGVyZSB3YXMgbm9cbiYjNDM7XHRcdCAqIHBlbmRpbmcgd29yay5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cGFja2V0cyA9IHR4X3JpbmctXHUwMDNlc3RhdHMucGFja2V0cyBcdTAwMjYgSU5UX01BWDtcbiYjNDM7XHRcdGlmICh0eF9yaW5nLVx1MDAzZXByZXZfcGt0X2N0ciA9PSBwYWNrZXRzKSB7XG4mIzQzO1x0XHRcdGlhdmZfZm9yY2Vfd2IodnNpLCBxX3ZlY3Rvcik7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogTWVtb3J5IGJhcnJpZXIgYmV0d2VlbiByZWFkIG9mIHBhY2tldCBjb3VudCBhbmQgY2FsbFxuJiM0MztcdFx0ICogdG8gaWF2Zl9nZXRfdHhfcGVuZGluZygpXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNtcF9ybWIoKTtcbiYjNDM7XHRcdHR4X3JpbmctXHUwMDNlcHJldl9wa3RfY3RyID1cbiYjNDM7XHRcdCAgaWF2Zl9nZXRfdHhfcGVuZGluZyh0eF9yaW5nLCB0cnVlKSA/IHBhY2tldHMgOiAtMTtcbiBcdH1cbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb24gKGlhdmYpIGRyaXZlciAoaWF2Zl9ldGh0b29sLmMsIGlhdmZfbWFpbi5jLCBhbmQgaWF2Zl90eHJ4LmMpLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBJbnRlbCBFdGhlcm5ldCBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMgKGUuZy4sIFhMNzEwLCBYNzEwLCBYNzIyLCBFODEwIHNlcmllcykuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlIG9yIFNSLUlPViBWRiBzdXBwb3J0IGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1MjI0MzA0Nzc1M2YzNjg0YzIzZDk2Y2QwYTI5ZmUyNTY2NjBmYjAwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMTc6Mjc6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuYwppbmRleCBlN2NmMTJlYWEyNjg5Li5jOWMyOTg2NjE3YTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmMKQEAgLTQ5NSw2ICYjNDM7NDk1LDExIEBAIHN0YXRpYyBpbnQgaWF2Zl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJaWYgKChyaW5nLSZndDtyeF9taW5pX3BlbmRpbmcpIHx8IChyaW5nLSZndDtyeF9qdW1ib19wZW5kaW5nKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJaWYgKGFkYXB0ZXItJmd0O3N0YXRlID09IF9fSUFWRl9SRVNFVFRJTkcgfHwKJiM0MzsJICAgIChhZGFwdGVyLSZndDtzdGF0ZSA9PSBfX0lBVkZfUlVOTklORyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgYWRhcHRlci0mZ3Q7ZmxhZ3MgJmFtcDsgSUFWRl9GTEFHX1FVRVVFU19ESVNBQkxFRCkpCiYjNDM7CQlyZXR1cm4gLUVBR0FJTjsKJiM0MzsKIAlpZiAocmluZy0mZ3Q7dHhfcGVuZGluZyAmZ3Q7IElBVkZfTUFYX1RYRCB8fAogCSAgICByaW5nLSZndDt0eF9wZW5kaW5nICZsdDsgSUFWRl9NSU5fVFhEIHx8CiAJICAgIHJpbmctJmd0O3J4X3BlbmRpbmcgJmd0OyBJQVZGX01BWF9SWEQgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jCmluZGV4IDI5Yjg0MDNhMDY2YmMuLmRlODA5NDdmNTljNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYwpAQCAtNTg3LDcgJiM0Mzs1ODcsNiBAQCBzdGF0aWMgaW50IGlhdmZfcmVxdWVzdF9taXNjX2lycShzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKQogCQlkZXZfZXJyKCZhbXA7YWRhcHRlci0mZ3Q7cGRldi0mZ3Q7ZGV2LAogCQkJJiMzNDtyZXF1ZXN0X2lycSBmb3IgJXMgZmFpbGVkOiAlZFxuJiMzNDssCiAJCQlhZGFwdGVyLSZndDttaXNjX3ZlY3Rvcl9uYW1lLCBlcnIpOwotCQlmcmVlX2lycShhZGFwdGVyLSZndDttc2l4X2VudHJpZXNbMF0udmVjdG9yLCBuZXRkZXYpOwogCX0KIAlyZXR1cm4gZXJyOwogfQpAQCAtNDA0NywxMiAmIzQzOzQwNDYsMTUgQEAgc3RhdGljIGludCBpYXZmX2hhbmRsZV90Y2xhc3Moc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwgdTMyIHRjLAogewogCWlmICh0YyA9PSAwKQogCQlyZXR1cm4gMDsKLQlpZiAodGMgJmx0OyBhZGFwdGVyLSZndDtudW1fdGMpIHsKLQkJaWYgKCFmaWx0ZXItJmd0O2YuZGF0YS50Y3Bfc3BlYy5kc3RfcG9ydCkgewotCQkJZGV2X2VycigmYW1wO2FkYXB0ZXItJmd0O3BkZXYtJmd0O2RldiwKLQkJCQkmIzM0O1NwZWNpZnkgZGVzdGluYXRpb24gcG9ydCB0byByZWRpcmVjdCB0byB0cmFmZmljIGNsYXNzIG90aGVyIHRoYW4gVEMwXG4mIzM0Oyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQomIzQzOwlpZiAodGMgJmd0Oz0gYWRhcHRlci0mZ3Q7bnVtX3RjKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7YWRhcHRlci0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7VW5hYmxlIHRvIGFkZCBmaWx0ZXIgYmVjYXVzZSBvZiBpbnZhbGlkIGRlc3RpbmF0aW9uIHRyYWZmaWMgY2xhc3NcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CWlmICghZmlsdGVyLSZndDtmLmRhdGEudGNwX3NwZWMuZHN0X3BvcnQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDthZGFwdGVyLSZndDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtTcGVjaWZ5IGRlc3RpbmF0aW9uIHBvcnQgdG8gcmVkaXJlY3QgdG8gdHJhZmZpYyBjbGFzcyBvdGhlciB0aGFuIFRDMFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCS8qIHJlZGlyZWN0IHRvIGEgdHJhZmZpYyBjbGFzcyBvbiB0aGUgc2FtZSBkZXZpY2UgKi8KIAlmaWx0ZXItJmd0O2YuYWN0aW9uID0gVklSVENITkxfQUNUSU9OX1RDX1JFRElSRUNUOwpAQCAtNDE2MCw3ICYjNDM7NDE2Miw4IEBAIHN0YXRpYyBpbnQgaWF2Zl9kZWxldGVfY2xzZmxvd2VyKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJaWYgKGZpbHRlcikgewogCQlmaWx0ZXItJmd0O2RlbCA9IHRydWU7CiAJCWFkYXB0ZXItJmd0O2FxX3JlcXVpcmVkIHw9IElBVkZfRkxBR19BUV9ERUxfQ0xPVURfRklMVEVSOwotCX0gZWxzZSB7CiYjNDM7CX0gZWxzZSBpZiAoYWRhcHRlci0mZ3Q7bnVtX2Nsb3VkX2ZpbHRlcnMpIHsKJiM0MzsJCS8qIG90aGVyIGZpbHRlcnMgc3RpbGwgdHJhY2tlZCwgc28gdGhpcyBvbmUgaXMgYSBnZW51aW5lIG1pc3MgKi8KIAkJZXJyID0gLUVJTlZBTDsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDthZGFwdGVyLSZndDtjbG91ZF9maWx0ZXJfbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdHhyeC5jCmluZGV4IGMzMGFiZjE3Y2Y1ZDMuLmYxYzI2YTkwNzVjZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguYwpAQCAtMTc2LDcgJiM0MzsxNzYsNiBAQCBzdGF0aWMgdm9pZCBpYXZmX2ZvcmNlX3diKHN0cnVjdCBpYXZmX3ZzaSAqdnNpLCBzdHJ1Y3QgaWF2Zl9xX3ZlY3RvciAqcV92ZWN0b3IpCiAgKiovCiB2b2lkIGlhdmZfZGV0ZWN0X3JlY292ZXJfaHVuZyhzdHJ1Y3QgaWF2Zl92c2kgKnZzaSkKIHsKLQlzdHJ1Y3QgaWF2Zl9yaW5nICp0eF9yaW5nID0gTlVMTDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXVuc2lnbmVkIGludCBpOwogCWludCBwYWNrZXRzOwpAQCAtMTk0LDI5ICYjNDM7MTkzLDM4IEBAIHZvaWQgaWF2Zl9kZXRlY3RfcmVjb3Zlcl9odW5nKHN0cnVjdCBpYXZmX3ZzaSAqdnNpKQogCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKQogCQlyZXR1cm47CiAKJiM0MzsJLyogdHhfcmluZ3MgY2FuIGJlIGZyZWVkL3JlYWxsb2NhdGVkIGJ5IGEgY29uY3VycmVudCByZXNldCAqLwomIzQzOwlpZiAoIXZzaS0mZ3Q7YmFjay0mZ3Q7dHhfcmluZ3MpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IHZzaS0mZ3Q7YmFjay0mZ3Q7bnVtX2FjdGl2ZV9xdWV1ZXM7IGkmIzQzOyYjNDM7KSB7Ci0JCXR4X3JpbmcgPSAmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7dHhfcmluZ3NbaV07Ci0JCWlmICh0eF9yaW5nICZhbXA7JmFtcDsgdHhfcmluZy0mZ3Q7ZGVzYykgewotCQkJLyogSWYgcGFja2V0IGNvdW50ZXIgaGFzIG5vdCBjaGFuZ2VkIHRoZSBxdWV1ZSBpcwotCQkJICogbGlrZWx5IHN0YWxsZWQsIHNvIGZvcmNlIGFuIGludGVycnVwdCBmb3IgdGhpcwotCQkJICogcXVldWUuCi0JCQkgKgotCQkJICogcHJldl9wa3RfY3RyIHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHRoZXJlIHdhcyBubwotCQkJICogcGVuZGluZyB3b3JrLgotCQkJICovCi0JCQlwYWNrZXRzID0gdHhfcmluZy0mZ3Q7c3RhdHMucGFja2V0cyAmYW1wOyBJTlRfTUFYOwotCQkJaWYgKHR4X3JpbmctJmd0O3ByZXZfcGt0X2N0ciA9PSBwYWNrZXRzKSB7Ci0JCQkJaWF2Zl9mb3JjZV93Yih2c2ksIHR4X3JpbmctJmd0O3FfdmVjdG9yKTsKLQkJCQljb250aW51ZTsKLQkJCX0KJiM0MzsJCXN0cnVjdCBpYXZmX3JpbmcgKnR4X3JpbmcgPSAmYW1wO3ZzaS0mZ3Q7YmFjay0mZ3Q7dHhfcmluZ3NbaV07CiYjNDM7CQlzdHJ1Y3QgaWF2Zl9xX3ZlY3RvciAqcV92ZWN0b3I7CiAKLQkJCS8qIE1lbW9yeSBiYXJyaWVyIGJldHdlZW4gcmVhZCBvZiBwYWNrZXQgY291bnQgYW5kIGNhbGwKLQkJCSAqIHRvIGlhdmZfZ2V0X3R4X3BlbmRpbmcoKQotCQkJICovCi0JCQlzbXBfcm1iKCk7Ci0JCQl0eF9yaW5nLSZndDtwcmV2X3BrdF9jdHIgPQotCQkJICBpYXZmX2dldF90eF9wZW5kaW5nKHR4X3JpbmcsIHRydWUpID8gcGFja2V0cyA6IC0xOwomIzQzOwkJLyogcmVhZCBvbmNlLCBxX3ZlY3RvciBjYW4gYmUgcmVhc3NpZ25lZCBieSBhIGNvbmN1cnJlbnQgcmVzZXQgKi8KJiM0MzsJCXFfdmVjdG9yID0gUkVBRF9PTkNFKHR4X3JpbmctJmd0O3FfdmVjdG9yKTsKJiM0MzsJCWlmICghcV92ZWN0b3IgfHwgIXR4X3JpbmctJmd0O2Rlc2MpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiBJZiBwYWNrZXQgY291bnRlciBoYXMgbm90IGNoYW5nZWQgdGhlIHF1ZXVlIGlzCiYjNDM7CQkgKiBsaWtlbHkgc3RhbGxlZCwgc28gZm9yY2UgYW4gaW50ZXJydXB0IGZvciB0aGlzCiYjNDM7CQkgKiBxdWV1ZS4KJiM0MzsJCSAqCiYjNDM7CQkgKiBwcmV2X3BrdF9jdHIgd291bGQgYmUgbmVnYXRpdmUgaWYgdGhlcmUgd2FzIG5vCiYjNDM7CQkgKiBwZW5kaW5nIHdvcmsuCiYjNDM7CQkgKi8KJiM0MzsJCXBhY2tldHMgPSB0eF9yaW5nLSZndDtzdGF0cy5wYWNrZXRzICZhbXA7IElOVF9NQVg7CiYjNDM7CQlpZiAodHhfcmluZy0mZ3Q7cHJldl9wa3RfY3RyID09IHBhY2tldHMpIHsKJiM0MzsJCQlpYXZmX2ZvcmNlX3diKHZzaSwgcV92ZWN0b3IpOwomIzQzOwkJCWNvbnRpbnVlOwogCQl9CiYjNDM7CiYjNDM7CQkvKiBNZW1vcnkgYmFycmllciBiZXR3ZWVuIHJlYWQgb2YgcGFja2V0IGNvdW50IGFuZCBjYWxsCiYjNDM7CQkgKiB0byBpYXZmX2dldF90eF9wZW5kaW5nKCkKJiM0MzsJCSAqLwomIzQzOwkJc21wX3JtYigpOwomIzQzOwkJdHhfcmluZy0mZ3Q7cHJldl9wa3RfY3RyID0KJiM0MzsJCSAgaWF2Zl9nZXRfdHhfcGVuZGluZyh0eF9yaW5nLCB0cnVlKSA/IHBhY2tldHMgOiAtMTsKIAl9CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGFuZCBDb250ZXh0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgY2hhbmdpbmcuIFRoZSBmaWxlIG1vZGlmaWNhdGlvbnMgYXJlIGZvY3VzZWQgb24gYGlhdmZgLCBzcGVjaWZpY2FsbHk6IGBpYXZmX2V0aHRvb2wuY2AsIGBpYXZmX21haW4uY2AsIGFuZCBgaWF2Zl90eHJ4LmNgLiBSaWdodCwgc28gdGhpcyBoYXMgdG8gZG8gd2l0aCB0aGUgSW50ZWwgQWRhcHRpdmUgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIuIElBVkYuLi4gdGhhdCYjMzk7cyBmb3IgSW50ZWwgU1ItSU9WIEV0aGVybmV0IFZpcnR1YWwgRnVuY3Rpb25zLCB0eXBpY2FsbHkgZm9yIHRoaW5ncyBsaWtlIHRoZSBJbnRlbCA3MDAvODAwIHNlcmllcyBjb250cm9sbGVycyAoaTQwZSwgaWNlLCB0aGF0IGtpbmQgb2YgdGhpbmcpLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgYGlhdmZgIGEgKnZlbmRvci1zcGVjaWZpYyogcGh5c2ljYWwgZHJpdmVyLCBvciBkb2VzIFFFTVUgZW11bGF0ZSBpdD8gRG9lcyBRRU1VIGV2ZW4gaGF2ZSBhbiBJQVZGIGVtdWxhdGlvbj8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBRRU1VIG5hdGl2ZWx5IHN1cHBvcnRzIG9yIGlmIGl0IHJlbGllcyBvbiB1bmRlcmx5aW5nIGhhcmR3YXJlIHRoYXQmIzM5O3Mgbm90IGF2YWlsYWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAuIExldCYjMzk7cyBzZWUuLi4gU2VjdGlvbiAyIG9mIHRoZSBwcm9tcHQgaGFzIGEgcmVsZXZhbnQgZGlzdGluY3Rpb24uIEl0IGxpc3RzICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgbGlrZSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcyBhbmQgU21hcnROSUNzLiBJQVZGIGNvdWxkIGZhbGwgaW50byB0aGF0IGNhdGVnb3J5LiBUaGVuIGl0IGNvbnRyYXN0cyB0aGF0IHdpdGggJiMzNDtSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzJiMzNDsgd2hpY2ggYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB2aXJ0dWFsIGJ1c2VzLgoKU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGV0aGVyIGlhdmYgaXMgcmVhY2hhYmxlLiBJcyBpdCBlbXVsYXRlZCBieSBRRU1VLCBvciBkb2VzIGl0IHV0aWxpemUgc29tZSB2aXJ0dWFsIGJ1cyBpbnRlcmZhY2UsIG9yIHBlcmhhcHMgc29tZSBzb2Z0d2FyZSBlbXVsYXRpb24gbWV0aG9kPyBJIG5lZWQgdG8gY2hlY2sgaG93IGBpYXZmYCBhY3R1YWxseSBiaW5kcyB0byB0aGUgaGFyZHdhcmUuIEEgcXVpY2sgZ3JlcCBmb3IgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIHVzZWZ1bCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE3OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9kZXZpY2VfaWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jPTI3PXN0YXRpYyBjb25zdCBjaGFyIGlhdmZfY29weXJpZ2h0W10gPVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtMzctICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jOjM4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpYXZmX3BjaV90YmxbXSA9IHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtMzktXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQVZGX0RFVl9JRF9WRikgfSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jPTUxODY9aW50IGlhdmZfcHJvY2Vzc19jb25maWcoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jLTUyOTUtICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYzo1Mjk2OnN0YXRpYyBpbnQgaWF2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTI5Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU4MgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBJQVZGIFBDSSBJRHMqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgUENJIElEcyB3aXRoaW4gdGhlIGBpYXZmX3BjaV90YmxgIHN0cnVjdHVyZS4gVGhpcyBsaWtlbHkgY29udGFpbnMgdGhlIG1hcHBpbmcgYmV0d2VlbiBQQ0kgZGV2aWNlIGlkZW50aWZpZXJzIGFuZCB0aGUgSW50ZWwgQWR2YW5jZWQgVmlydHVhbCBGdW5jdGlvbiAoSUFWRikgZHJpdmVyLCBhIGNyaXRpY2FsIHBpZWNlIGZvciBwcm9wZXIgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCBtYW5hZ2VtZW50IGluIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBkZXZpY2VzIHRoaXMgZHJpdmVyIHN1cHBvcnRzIGF0IHRoZSBoYXJkd2FyZSBsZXZlbC4gS25vd2luZyB0aGVzZSBJRHMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgZGV2aWNlIGNvbXBhdGliaWxpdHksIHBvdGVudGlhbCBsaW1pdGF0aW9ucywgYW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgZGlmZmVyZW50IGhhcmR3YXJlIHJldmlzaW9ucy4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBzdGVwIGZvciBkaWFnbm9zaW5nIGRyaXZlci1yZWxhdGVkIGlzc3VlcyBvciB1bmRlcnN0YW5kaW5nIGhhcmR3YXJlIHN1cHBvcnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNzoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDM4Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlhdmZfcGNpX3RibFtdID0ge1xuICAzOTpcdFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUFWRl9ERVZfSURfVkYpIH0sXG4gIDQwOlx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQVZGX0RFVl9JRF9WRl9IVikgfSxcbiAgNDE6XHRcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElBVkZfREVWX0lEX1g3MjJfVkYpIH0sXG4gIDQyOlx0XHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQVZGX0RFVl9JRF9BREFQVElWRV9WRikgfSxcbiAgNDM6XHRcdC8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi9cbiAgNDQ6XHRcdHsgfVxuICA0NTpcdH07XG4gIDQ2Olx0XG4gIDQ3Olx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlhdmZfcGNpX3RibCk7XG4gIDQ4Olx0XG4gIDQ5Olx0TU9EVUxFX0FMSUFTKFwmIzM0O2k0MGV2ZlwmIzM0Oyk7XG4gIDUwOlx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0ludGVsKFIpIEV0aGVybmV0IEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb24gTmV0d29yayBEcml2ZXJcJiMzNDspO1xuICA1MTpcdE1PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7TElCRVRIXCYjMzQ7KTtcbiAgNTI6XHRNT0RVTEVfSU1QT1JUX05TKFwmIzM0O0xJQklFXCYjMzQ7KTtcbiAgNTM6XHRNT0RVTEVfSU1QT1JUX05TKFwmIzM0O0xJQklFX0FETUlOUVwmIzM0Oyk7XG4gIDU0Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMIHYyXCYjMzQ7KTtcbiAgNTU6XHRcbiAgNTY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlhdmZfbmV0ZGV2X29wcztcbiAgNTc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNzoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTQ2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgSUFWRiBGdXp6aW5nIEZlYXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgZnV6emluZyB0aGUgSUFWRiAoSW50ZWwgNzAwLzgwMCBzZXJpZXMgVmlydHVhbCBGdW5jdGlvbikgZHJpdmVyIGlzIGV2ZW4gZmVhc2libGUgd2l0aGluIG15IGN1cnJlbnQgc2V0dXAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIFFFTVUgZW11bGF0ZXMgdGhlIGhhcmR3YXJlLiBMZXQgbWUgY2hlY2suLi4gbm9wZS4gSXQgZW11bGF0ZXMgZTEwMDAsIGUxMDAwZSwgYW5kIGlnYiwgYnV0IG5vdCBpNDBlIG9yIGlhdmYuIFRoYXQmIzM5O3MgYSBkZWZpbml0ZSByb2FkYmxvY2suCgpBbHJpZ2h0LCB3aGF0IGFib3V0IGxldmVyYWdpbmcgc3l6a2FsbGVyPyBEb2VzIGl0IHRhcmdldCBJQVZGPyBBIHF1aWNrIHNlYXJjaCByZXZlYWxzIHRoYXQgc3l6a2FsbGVyIG5lZWRzICphY3R1YWwqIEludGVsIFNSLUlPViBoYXJkd2FyZSAobGlrZSBYTDcxMCwgWDcxMCwgWDcyMiwgRTgxMCwgZXRjLikgb3IgUENJZSBwYXNzdGhyb3VnaCBvZiBhbiBTUi1JT1YgVkYuIFNvLCBhZ2Fpbiwgbm8gZGljZSB3aXRob3V0IGRlZGljYXRlZCBwaHlzaWNhbCBoYXJkd2FyZSwgb3IgZGlyZWN0IHBhc3N0aHJvdWdoIG9mIGEgVkYuCgpXYWl0IGEgc2Vjb25kLCBsZXQgbWUgY2FyZWZ1bGx5IHJlcmVhZCB0aGUgJiMzNDtXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBjcml0ZXJpYS4gT2theSwgdGhlcmUgaXQgaXM6ICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLi4uIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUmIzM0OyBzb3VuZHMgbGlrZSBhIHBlcmZlY3QgZml0LiBBbmQgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSUFWRiBuZWVkcywgcmlnaHQ/IAoKTm93LCB3YWl0Li4uIG1heWJlIEkmIzM5O20gb3Zlcmxvb2tpbmcgc29tZXRoaW5nIG9idmlvdXMuIFdoYXQgYWJvdXQgbG9va2luZyBhdCBhbHRlcm5hdGl2ZXMsIGxpa2UgdmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBvciBzb2NrZXRzPyBObywgSUFWRiBpcyBhIFBDSSBkcml2ZXIuIEkgY2FuIHZlcmlmeSBpdCBieSBjaGVja2luZyB0aGUgYGlhdmZfcHJvYmVgIGZ1bmN0aW9uIGRlZmluaXRpb24sIHdoaWNoIHRha2VzIGEgYHBjaV9kZXZgIHN0cnVjdC4gSSBjYW4gYWxzbyB2ZXJpZnkgdGhhdCBpdCBpcyByZWdpc3RlcmVkIGFzIGEgUENJIGRyaXZlciB2aWEgYG1vZHVsZV9wY2lfZHJpdmVyKGlhdmZfZHJpdmVyKTtgLCBieSBjaGVja2luZyBpbiBgaWF2Zl9tYWluLmNgLgoKTG9va3MgbGlrZSwgZGVzcGl0ZSBteSBiZXN0IGludGVudGlvbnMsIElBVkYgaXMgZ29pbmcgdG8gYmUgYSBoYXJkICYjMzQ7bm8mIzM0OyBmb3IgZnV6emluZyB3aXRoaW4gbXkgY3VycmVudCB2aXJ0dWFsaXplZCBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wY2lfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE3OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biB0aGUgYGlhdmZfZHJpdmVyYCBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGZvciB0aGUgYGlhdmZfZHJpdmVyYC4gVGhpcyB1c3VhbGx5IG1lYW5zIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciB3aGVyZSB0aGUgZHJpdmVyIGRlY2xhcmVzIGl0c2VsZiB0byB0aGUgc3lzdGVtLiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIHRoZSB0eXBpY2FsIHBhdHRlcm5zIC0gdGhpbmdzIGxpa2UgYG1vZHVsZV9pbml0YCwgYG1vZHVsZV9leGl0YCwgYHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcmAsIG9yIHBvdGVudGlhbGx5IHNvbWUgb2xkZXIgaW50ZXJmYWNlcyBpZiBpdCYjMzk7cyBhIGxlZ2FjeSBjb21wb25lbnQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGl0IHJlZ2lzdGVycyBhcyBhIHBsYXRmb3JtIGRyaXZlciwgYSBQQ0kgZHJpdmVyLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gSXMgaXQgbGlrZWx5IHRvIGJlIGFuIGFzeW5jIHByb2JlPyBBcmUgdGhlcmUgYW55IGRldmljZSB0cmVlIGJpbmRpbmdzIGludm9sdmVkIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkmIzM5O2xsIGFsc28gd2FudCB0byBjaGVjayBmb3IgYW55IHZlbmRvci1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBvciBjYWxsYmFja3MgdGhhdCBtaWdodCBiZSByZWxldmFudC4gRXNzZW50aWFsbHksIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGVudHJ5IHBvaW50IC0gdGhlIGNyaXRpY2FsIGNvZGUgdGhhdCBtYWtlcyB0aGUgYGlhdmZfZHJpdmVyYCB2aXNpYmxlIHRvIHRoZSBrZXJuZWwmIzM5O3MgZGV2aWNlIG1hbmFnZW1lbnQgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGggdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgd2hhdCBpdCYjMzk7cyBleHBlY3RpbmcgaW4gdGVybXMgb2YgaGFyZHdhcmUgcmVzb3VyY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYz01NjcxPXN0YXRpYyBpbnQgX19pbml0IGlhdmZfaW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jLTU2NzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jOjU2Nzc6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZpYXZmX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jLTU2NzgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTE3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIGlhdmZfZHJpdmVyJiMzOTtzIFN5emthbGxlciBDb21wYXRpYmlsaXR5KioKCk9rYXksIHNvIHRoZSBgaWF2Zl9kcml2ZXJgIGlzIGEgc3RhbmRhcmQgYHBjaV9kcml2ZXJgLCBub3RoaW5nIHBhcnRpY3VsYXJseSBleG90aWMgdGhlcmUuIEJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgY2FuIEkgZ2V0IFN5emthbGxlciB0byBpbnN0YW50aWF0ZSBhbmQgdGVzdCBpdCB3aXRob3V0IHJlcXVpcmluZyBhY3R1YWwgcGh5c2ljYWwgaGFyZHdhcmUgb3IgZXZlbiBhIGZ1bGwgUUVNVSBlbXVsYXRpb24gb2YgYW4gSUFWRiBkZXZpY2U/IE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBTeXprYWxsZXIgdXN1YWxseSBydW5zIHdpdGhpbiBmYWlybHkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBlaXRoZXIgR0NFIG9yLCBtb3JlIGNvbW1vbmx5LCBwbGFpbiBRRU1VLCBhbmQgbGV2ZXJhZ2VzIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCBhbmQgdHVuL3RhcC4KClRoZSBjcnVjaWFsIGlzc3VlIGhlcmUgaXMgdGhhdCwgYXMgSSByZWNhbGwsIHN0YW5kYXJkIFFFTVUgaW5zdGFsbGF0aW9ucyBkb24mIzM5O3QgaW5jbHVkZSBlbXVsYXRpb24gZm9yIEludGVsIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgdGhvc2UgaWRlbnRpZmllZCB3aXRoIHRoZSBgSUFWRl9ERVZfSURfVkZgIHNlcmllcy4gVGhpcyBpcyBhIHBvdGVudGlhbCBzaG93LXN0b3BwZXIsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYElBVkZfREVWX0lEX1ZGYCB2YWx1ZSB0byBmdWxseSBjb25maXJtIGlmIGl0IGFsaWducyB3aXRoIG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiBzdXBwb3J0ZWQgUUVNVSBkZXZpY2VzIGFuZCB0aGVpciBsaW1pdGF0aW9ucy4gVGltZSB0byBsb29rIHRoYXQgdXAuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SUFWRl9ERVZfSURfVkYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZGV2aWRzLmgtNy0vKiBEZXZpY2UgSURzIGZvciB0aGUgVkYgZHJpdmVyICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZGV2aWRzLmg6ODojZGVmaW5lIElBVkZfREVWX0lEX1ZGXHRcdFx0MHgxNTRDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZGV2aWRzLmg6OTojZGVmaW5lIElBVkZfREVWX0lEX1ZGX0hWXHRcdDB4MTU3MVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2Rldmlkcy5oLTEwLSNkZWZpbmUgSUFWRl9ERVZfSURfQURBUFRJVkVfVkZcdFx0MHgxODg5XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYz0zOD1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWF2Zl9wY2lfdGJsW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jOjM5Olx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUFWRl9ERVZfSURfVkYpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jOjQwOlx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUFWRl9ERVZfSURfVkZfSFYpIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jLTQxLVx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUFWRl9ERVZfSURfWDcyMl9WRikgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTc6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI0OAoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiA3OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWZXJkaWN0OiBTdHJ1Y3R1cmFsbHkgVW5yZWFjaGFibGUgSGFyZHdhcmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0b3VjaGluZyB0aGUgYGlhdmZgIGRyaXZlciwgYW5kIHRoYXQmIzM5O3MgYW4gaW1tZWRpYXRlIHJlZCBmbGFnIGluIG15IGV4cGVyaWVuY2UuIFRoZSBkZXZpY2UgSURzIG1lbnRpb25lZCAoMHgxNTRDLCAweDE1NzEsIDB4MzdDRCwgMHgxODg5KSBhcmUgYWxsIGZvciBJbnRlbCBWaXJ0dWFsIEZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBYTDcxMC9YNzEwLCA3MDAgU2VyaWVzLCBYNzIyLCBhbmQgRTgxMCBWRnMuIEkga25vdyB0aGVzZSBkZXZpY2VzOyB0aGV5JiMzOTtyZSBTUi1JT1YgVkZzLiBBbmQsIGFzIEkgc3VzcGVjdGVkLCB0aGUgdGV4dCBjb25maXJtcyB0aGF0ICpub25lKiBvZiB0aGVzZSBhcmUgZW11bGF0ZWQgYnkgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgVk1zLiBObyB2aXJ0dWFsIGJ1c2VzLCBubyBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgYGlhdmZgLiBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIGl0LgoKTGV0IG1lIGp1c3QgcXVpY2tseSByZS1leGFtaW5lIHRoZSBkaWZmIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gT2theSwgd2UmIzM5O3ZlIGdvdDoKCjEuICBgaWF2Zl9ldGh0b29sLmNgOiBgaWF2Zl9zZXRfcmluZ3BhcmFtYCAtIEV0aHRvb2wgb3BlcmF0aW9ucywgc3BlY2lmaWNhbGx5IGZvciB0aGUgYGlhdmZgIGRyaXZlci4KMi4gIGBpYXZmX21haW4uY2A6IGBpYXZmX3JlcXVlc3RfbWlzY19pcnFgLCBgaWF2Zl9oYW5kbGVfdGNsYXNzYCwgYGlhdmZfZGVsZXRlX2Nsc2Zsb3dlcmAgLSBJbnRlcnJ1cHQgaGFuZGxpbmcgZHVyaW5nIHByb2JlL3Jlc2V0LCBhbmQgdHJhZmZpYyBjb250cm9sIChUQykgZmxvd2VyIG9mZmxvYWQgaGFuZGxlcnMuCjMuICBgaWF2Zl90eHJ4LmNgOiBgaWF2Zl9kZXRlY3RfcmVjb3Zlcl9odW5nYCAtIEEgd2F0Y2hkb2cvaGFuZyByZWNvdmVyeSBtZWNoYW5pc20gZm9yIGBpYXZmYC4KCkFscmlnaHQsIHRoZXNlIGFyZSBhbGwgZGVlcGx5IGVtYmVkZGVkIHdpdGhpbiB0aGUgYGlhdmZgIGRyaXZlciBpdHNlbGYuIEV2ZXJ5dGhpbmcgaXMgc3BlY2lmaWMgdG8gYW4gaW5zdGFudGlhdGVkIGFuZCBwcm9iZWQgYGlhdmZgIGRldmljZS4gWW91IGNhbiYjMzk7dCBleGVjdXRlIGFueSBvZiB0aGlzIGNvZGUgdW5sZXNzIHlvdSBoYXZlIGEgKnJlYWwqIFNSLUlPViBWRiBmcm9tIEludGVsIGF0dGFjaGVkIHRvIGEgc3lzdGVtLiAgVGhlIGNvZGUgdG91Y2hlcyBTUi1JT1YsIHdoaWNoIHJlcXVpcmVzIGRlZGljYXRlZCBoYXJkd2FyZSwgYW5kIGl0JiMzOTtzIG5vdCBwcmVzZW50IGluIHRoZSBjb21tb24gZW11bGF0aW9uIGVudmlyb25tZW50cy4KClRoaXMgaXMgYSBjbGFzc2ljIGNhc2Ugb2YgJiMzNDtzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUsJiMzNDsgYXMgdGhlIGRvY3VtZW50IHNheXMuIEl0JiMzOTtzIGluIHRoZSBzYW1lIGNhdGVnb3J5IGFzIHRob3NlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAgZHJpdmVycywgd2hpY2gsIGFzIGV4cGVydHMsIHdlIGtub3cgcmVxdWlyZSBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgYW5kIGFyZW4mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhhdCYjMzk7cyBhIHBlcmZlY3QgYW5hbG9neS4gYGlhdmZgIGlzIGEgdmVuZG9yLXNwZWNpZmljIE5JQyBkcml2ZXIgdGhhdCBuZWVkcyBwaHlzaWNhbCBoYXJkd2FyZS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyBjbGVhcjogYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhlIHJlc3VsdHMgYXJlIGNsZWFyIGFuZCBjb25jaXNlLiAgU2luY2UgYFdvcnRoRnV6emluZ2AgaXMgYGZhbHNlYCwgdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHJlc3VsdHM6CgoqICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWAKKiAgIGBGb2N1c1N5bWJvbHNgOiBgW11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAKKiAgIGBSZWFzb25pbmdgOiAgJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb24gKGBpYXZmYCkgZHJpdmVyLCBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgbmV0d29yayBkcml2ZXIgZm9yIEludGVsIEV0aGVybmV0IFNSLUlPViBWaXJ0dWFsIEZ1bmN0aW9ucyAoZS5nLiwgWDcxMCwgRTgxMCkuIFRoZXNlIGRldmljZXMgcmVxdWlyZSBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSBvciBTUi1JT1Ygc3VwcG9ydCBhbmQgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlci4mIzM0OwoKT2theSwgSSB0aGluayB3ZSYjMzk7cmUgZ29vZCB0byBnby4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDE3OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb24gKGlhdmYpIGRyaXZlciAoaWF2Zl9ldGh0b29sLmMsIGlhdmZfbWFpbi5jLCBhbmQgaWF2Zl90eHJ4LmMpLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBJbnRlbCBFdGhlcm5ldCBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMgKGUuZy4sIFhMNzEwLCBYNzEwLCBYNzIyLCBFODEwIHNlcmllcykuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlIG9yIFNSLUlPViBWRiBzdXBwb3J0IGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIChpYXZmKSBkcml2ZXIgKGlhdmZfZXRodG9vbC5jLCBpYXZmX21haW4uYywgYW5kIGlhdmZfdHhyeC5jKS4gVGhpcyBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIGRyaXZlciBmb3IgSW50ZWwgRXRoZXJuZXQgU1ItSU9WIFZpcnR1YWwgRnVuY3Rpb25zIChlLmcuLCBYTDcxMCwgWDcxMCwgWDcyMiwgRTgxMCBzZXJpZXMpLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSBvciBTUi1JT1YgVkYgc3VwcG9ydCBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxNzoyODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMTc6Mjc6MzYuODU5NTAyMzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjAxMTM1NzU0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIChpYXZmKSBkcml2ZXIgKGlhdmZfZXRodG9vbC5jLCBpYXZmX21haW4uYywgYW5kIGlhdmZfdHhyeC5jKS4gVGhpcyBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIGRyaXZlciBmb3IgSW50ZWwgRXRoZXJuZXQgU1ItSU9WIFZpcnR1YWwgRnVuY3Rpb25zIChlLmcuLCBYTDcxMCwgWDcxMCwgWDcyMiwgRTgxMCBzZXJpZXMpLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSBvciBTUi1JT1YgVkYgc3VwcG9ydCBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzoyNzozNi44NTk1MDcyMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzNjMyODYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNTIyNDMwNDc3NTNmMzY4NGMyM2Q5NmNkMGEyOWZlMjU2NjYwZmIwMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAxNzoyNzozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuY1xcbmluZGV4IGU3Y2YxMmVhYTI2ODkuLmM5YzI5ODY2MTdhMTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmNcXG5AQCAtNDk1LDYgKzQ5NSwxMSBAQCBzdGF0aWMgaW50IGlhdmZfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRpZiAoKHJpbmctXFx1MDAzZXJ4X21pbmlfcGVuZGluZykgfHwgKHJpbmctXFx1MDAzZXJ4X2p1bWJvX3BlbmRpbmcpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdGlmIChhZGFwdGVyLVxcdTAwM2VzdGF0ZSA9PSBfX0lBVkZfUkVTRVRUSU5HIHx8XFxuK1xcdCAgICAoYWRhcHRlci1cXHUwMDNlc3RhdGUgPT0gX19JQVZGX1JVTk5JTkcgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICBhZGFwdGVyLVxcdTAwM2VmbGFncyBcXHUwMDI2IElBVkZfRkxBR19RVUVVRVNfRElTQUJMRUQpKVxcbitcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4rXFxuIFxcdGlmIChyaW5nLVxcdTAwM2V0eF9wZW5kaW5nIFxcdTAwM2UgSUFWRl9NQVhfVFhEIHx8XFxuIFxcdCAgICByaW5nLVxcdTAwM2V0eF9wZW5kaW5nIFxcdTAwM2MgSUFWRl9NSU5fVFhEIHx8XFxuIFxcdCAgICByaW5nLVxcdTAwM2VyeF9wZW5kaW5nIFxcdTAwM2UgSUFWRl9NQVhfUlhEIHx8XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXFxuaW5kZXggMjliODQwM2EwNjZiYy4uZGU4MDk0N2Y1OWM2NSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uY1xcbkBAIC01ODcsNyArNTg3LDYgQEAgc3RhdGljIGludCBpYXZmX3JlcXVlc3RfbWlzY19pcnEoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2YWRhcHRlci1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbiBcXHRcXHRcXHRcXFwicmVxdWVzdF9pcnEgZm9yICVzIGZhaWxlZDogJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGFkYXB0ZXItXFx1MDAzZW1pc2NfdmVjdG9yX25hbWUsIGVycik7XFxuLVxcdFxcdGZyZWVfaXJxKGFkYXB0ZXItXFx1MDAzZW1zaXhfZW50cmllc1swXS52ZWN0b3IsIG5ldGRldik7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbkBAIC00MDQ3LDEyICs0MDQ2LDE1IEBAIHN0YXRpYyBpbnQgaWF2Zl9oYW5kbGVfdGNsYXNzKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB0YyxcXG4ge1xcbiBcXHRpZiAodGMgPT0gMClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuLVxcdGlmICh0YyBcXHUwMDNjIGFkYXB0ZXItXFx1MDAzZW51bV90Yykge1xcbi1cXHRcXHRpZiAoIWZpbHRlci1cXHUwMDNlZi5kYXRhLnRjcF9zcGVjLmRzdF9wb3J0KSB7XFxuLVxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0XFx0XFxcIlNwZWNpZnkgZGVzdGluYXRpb24gcG9ydCB0byByZWRpcmVjdCB0byB0cmFmZmljIGNsYXNzIG90aGVyIHRoYW4gVEMwXFxcXG5cXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdH1cXG4rXFx0aWYgKHRjIFxcdTAwM2U9IGFkYXB0ZXItXFx1MDAzZW51bV90Yykge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZhZGFwdGVyLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJVbmFibGUgdG8gYWRkIGZpbHRlciBiZWNhdXNlIG9mIGludmFsaWQgZGVzdGluYXRpb24gdHJhZmZpYyBjbGFzc1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdGlmICghZmlsdGVyLVxcdTAwM2VmLmRhdGEudGNwX3NwZWMuZHN0X3BvcnQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2YWRhcHRlci1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiU3BlY2lmeSBkZXN0aW5hdGlvbiBwb3J0IHRvIHJlZGlyZWN0IHRvIHRyYWZmaWMgY2xhc3Mgb3RoZXIgdGhhbiBUQzBcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXHQvKiByZWRpcmVjdCB0byBhIHRyYWZmaWMgY2xhc3Mgb24gdGhlIHNhbWUgZGV2aWNlICovXFxuIFxcdGZpbHRlci1cXHUwMDNlZi5hY3Rpb24gPSBWSVJUQ0hOTF9BQ1RJT05fVENfUkVESVJFQ1Q7XFxuQEAgLTQxNjAsNyArNDE2Miw4IEBAIHN0YXRpYyBpbnQgaWF2Zl9kZWxldGVfY2xzZmxvd2VyKHN0cnVjdCBpYXZmX2FkYXB0ZXIgKmFkYXB0ZXIsXFxuIFxcdGlmIChmaWx0ZXIpIHtcXG4gXFx0XFx0ZmlsdGVyLVxcdTAwM2VkZWwgPSB0cnVlO1xcbiBcXHRcXHRhZGFwdGVyLVxcdTAwM2VhcV9yZXF1aXJlZCB8PSBJQVZGX0ZMQUdfQVFfREVMX0NMT1VEX0ZJTFRFUjtcXG4tXFx0fSBlbHNlIHtcXG4rXFx0fSBlbHNlIGlmIChhZGFwdGVyLVxcdTAwM2VudW1fY2xvdWRfZmlsdGVycykge1xcbitcXHRcXHQvKiBvdGhlciBmaWx0ZXJzIHN0aWxsIHRyYWNrZWQsIHNvIHRoaXMgb25lIGlzIGEgZ2VudWluZSBtaXNzICovXFxuIFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIFxcdH1cXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmFkYXB0ZXItXFx1MDAzZWNsb3VkX2ZpbHRlcl9saXN0X2xvY2spO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguY1xcbmluZGV4IGMzMGFiZjE3Y2Y1ZDMuLmYxYzI2YTkwNzVjZjIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmNcXG5AQCAtMTc2LDcgKzE3Niw2IEBAIHN0YXRpYyB2b2lkIGlhdmZfZm9yY2Vfd2Ioc3RydWN0IGlhdmZfdnNpICp2c2ksIHN0cnVjdCBpYXZmX3FfdmVjdG9yICpxX3ZlY3RvcilcXG4gICoqL1xcbiB2b2lkIGlhdmZfZGV0ZWN0X3JlY292ZXJfaHVuZyhzdHJ1Y3QgaWF2Zl92c2kgKnZzaSlcXG4ge1xcbi1cXHRzdHJ1Y3QgaWF2Zl9yaW5nICp0eF9yaW5nID0gTlVMTDtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcdGludCBwYWNrZXRzO1xcbkBAIC0xOTQsMjkgKzE5MywzOCBAQCB2b2lkIGlhdmZfZGV0ZWN0X3JlY292ZXJfaHVuZyhzdHJ1Y3QgaWF2Zl92c2kgKnZzaSlcXG4gXFx0aWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdC8qIHR4X3JpbmdzIGNhbiBiZSBmcmVlZC9yZWFsbG9jYXRlZCBieSBhIGNvbmN1cnJlbnQgcmVzZXQgKi9cXG4rXFx0aWYgKCF2c2ktXFx1MDAzZWJhY2stXFx1MDAzZXR4X3JpbmdzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdnNpLVxcdTAwM2ViYWNrLVxcdTAwM2VudW1fYWN0aXZlX3F1ZXVlczsgaSsrKSB7XFxuLVxcdFxcdHR4X3JpbmcgPSBcXHUwMDI2dnNpLVxcdTAwM2ViYWNrLVxcdTAwM2V0eF9yaW5nc1tpXTtcXG4tXFx0XFx0aWYgKHR4X3JpbmcgXFx1MDAyNlxcdTAwMjYgdHhfcmluZy1cXHUwMDNlZGVzYykge1xcbi1cXHRcXHRcXHQvKiBJZiBwYWNrZXQgY291bnRlciBoYXMgbm90IGNoYW5nZWQgdGhlIHF1ZXVlIGlzXFxuLVxcdFxcdFxcdCAqIGxpa2VseSBzdGFsbGVkLCBzbyBmb3JjZSBhbiBpbnRlcnJ1cHQgZm9yIHRoaXNcXG4tXFx0XFx0XFx0ICogcXVldWUuXFxuLVxcdFxcdFxcdCAqXFxuLVxcdFxcdFxcdCAqIHByZXZfcGt0X2N0ciB3b3VsZCBiZSBuZWdhdGl2ZSBpZiB0aGVyZSB3YXMgbm9cXG4tXFx0XFx0XFx0ICogcGVuZGluZyB3b3JrLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0cGFja2V0cyA9IHR4X3JpbmctXFx1MDAzZXN0YXRzLnBhY2tldHMgXFx1MDAyNiBJTlRfTUFYO1xcbi1cXHRcXHRcXHRpZiAodHhfcmluZy1cXHUwMDNlcHJldl9wa3RfY3RyID09IHBhY2tldHMpIHtcXG4tXFx0XFx0XFx0XFx0aWF2Zl9mb3JjZV93Yih2c2ksIHR4X3JpbmctXFx1MDAzZXFfdmVjdG9yKTtcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdH1cXG4rXFx0XFx0c3RydWN0IGlhdmZfcmluZyAqdHhfcmluZyA9IFxcdTAwMjZ2c2ktXFx1MDAzZWJhY2stXFx1MDAzZXR4X3JpbmdzW2ldO1xcbitcXHRcXHRzdHJ1Y3QgaWF2Zl9xX3ZlY3RvciAqcV92ZWN0b3I7XFxuIFxcbi1cXHRcXHRcXHQvKiBNZW1vcnkgYmFycmllciBiZXR3ZWVuIHJlYWQgb2YgcGFja2V0IGNvdW50IGFuZCBjYWxsXFxuLVxcdFxcdFxcdCAqIHRvIGlhdmZfZ2V0X3R4X3BlbmRpbmcoKVxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0c21wX3JtYigpO1xcbi1cXHRcXHRcXHR0eF9yaW5nLVxcdTAwM2VwcmV2X3BrdF9jdHIgPVxcbi1cXHRcXHRcXHQgIGlhdmZfZ2V0X3R4X3BlbmRpbmcodHhfcmluZywgdHJ1ZSkgPyBwYWNrZXRzIDogLTE7XFxuK1xcdFxcdC8qIHJlYWQgb25jZSwgcV92ZWN0b3IgY2FuIGJlIHJlYXNzaWduZWQgYnkgYSBjb25jdXJyZW50IHJlc2V0ICovXFxuK1xcdFxcdHFfdmVjdG9yID0gUkVBRF9PTkNFKHR4X3JpbmctXFx1MDAzZXFfdmVjdG9yKTtcXG4rXFx0XFx0aWYgKCFxX3ZlY3RvciB8fCAhdHhfcmluZy1cXHUwMDNlZGVzYylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHQvKiBJZiBwYWNrZXQgY291bnRlciBoYXMgbm90IGNoYW5nZWQgdGhlIHF1ZXVlIGlzXFxuK1xcdFxcdCAqIGxpa2VseSBzdGFsbGVkLCBzbyBmb3JjZSBhbiBpbnRlcnJ1cHQgZm9yIHRoaXNcXG4rXFx0XFx0ICogcXVldWUuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIHByZXZfcGt0X2N0ciB3b3VsZCBiZSBuZWdhdGl2ZSBpZiB0aGVyZSB3YXMgbm9cXG4rXFx0XFx0ICogcGVuZGluZyB3b3JrLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cGFja2V0cyA9IHR4X3JpbmctXFx1MDAzZXN0YXRzLnBhY2tldHMgXFx1MDAyNiBJTlRfTUFYO1xcbitcXHRcXHRpZiAodHhfcmluZy1cXHUwMDNlcHJldl9wa3RfY3RyID09IHBhY2tldHMpIHtcXG4rXFx0XFx0XFx0aWF2Zl9mb3JjZV93Yih2c2ksIHFfdmVjdG9yKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIE1lbW9yeSBiYXJyaWVyIGJldHdlZW4gcmVhZCBvZiBwYWNrZXQgY291bnQgYW5kIGNhbGxcXG4rXFx0XFx0ICogdG8gaWF2Zl9nZXRfdHhfcGVuZGluZygpXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzbXBfcm1iKCk7XFxuK1xcdFxcdHR4X3JpbmctXFx1MDAzZXByZXZfcGt0X2N0ciA9XFxuK1xcdFxcdCAgaWF2Zl9nZXRfdHhfcGVuZGluZyh0eF9yaW5nLCB0cnVlKSA/IHBhY2tldHMgOiAtMTtcXG4gXFx0fVxcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzoyNzozNy4zNjM5NzY1NzJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQxNTA2ODY4NDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgQWRhcHRpdmUgVmlydHVhbCBGdW5jdGlvbiAoaWF2ZikgZHJpdmVyIChpYXZmX2V0aHRvb2wuYywgaWF2Zl9tYWluLmMsIGFuZCBpYXZmX3R4cnguYykuIFRoaXMgZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSSBkcml2ZXIgZm9yIEludGVsIEV0aGVybmV0IFNSLUlPViBWaXJ0dWFsIEZ1bmN0aW9ucyAoZS5nLiwgWEw3MTAsIFg3MTAsIFg3MjIsIEU4MTAgc2VyaWVzKS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgSW50ZWwgaGFyZHdhcmUgb3IgU1ItSU9WIFZGIHN1cHBvcnQgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSB2aXJ0dWFsaXplZCB0ZXN0IGVudmlyb25tZW50cy4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgZm9yIHN5emthbGxlciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1MjI0MzA0Nzc1M2YzNjg0YzIzZDk2Y2QwYTI5ZmUyNTY2NjBmYjAwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTc6Mjc6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2V0aHRvb2wuY1xuaW5kZXggZTdjZjEyZWFhMjY4OS4uYzljMjk4NjYxN2ExOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9ldGh0b29sLmNcbkBAIC00OTUsNiArNDk1LDExIEBAIHN0YXRpYyBpbnQgaWF2Zl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRpZiAoKHJpbmctXHUwMDNlcnhfbWluaV9wZW5kaW5nKSB8fCAocmluZy1cdTAwM2VyeF9qdW1ib19wZW5kaW5nKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4rXHRpZiAoYWRhcHRlci1cdTAwM2VzdGF0ZSA9PSBfX0lBVkZfUkVTRVRUSU5HIHx8XG4rXHQgICAgKGFkYXB0ZXItXHUwMDNlc3RhdGUgPT0gX19JQVZGX1JVTk5JTkcgXHUwMDI2XHUwMDI2XG4rXHQgICAgIGFkYXB0ZXItXHUwMDNlZmxhZ3MgXHUwMDI2IElBVkZfRkxBR19RVUVVRVNfRElTQUJMRUQpKVxuK1x0XHRyZXR1cm4gLUVBR0FJTjtcbitcbiBcdGlmIChyaW5nLVx1MDAzZXR4X3BlbmRpbmcgXHUwMDNlIElBVkZfTUFYX1RYRCB8fFxuIFx0ICAgIHJpbmctXHUwMDNldHhfcGVuZGluZyBcdTAwM2MgSUFWRl9NSU5fVFhEIHx8XG4gXHQgICAgcmluZy1cdTAwM2VyeF9wZW5kaW5nIFx1MDAzZSBJQVZGX01BWF9SWEQgfHxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uY1xuaW5kZXggMjliODQwM2EwNjZiYy4uZGU4MDk0N2Y1OWM2NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmNcbkBAIC01ODcsNyArNTg3LDYgQEAgc3RhdGljIGludCBpYXZmX3JlcXVlc3RfbWlzY19pcnEoc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlcilcbiBcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuIFx0XHRcdFwicmVxdWVzdF9pcnEgZm9yICVzIGZhaWxlZDogJWRcXG5cIixcbiBcdFx0XHRhZGFwdGVyLVx1MDAzZW1pc2NfdmVjdG9yX25hbWUsIGVycik7XG4tXHRcdGZyZWVfaXJxKGFkYXB0ZXItXHUwMDNlbXNpeF9lbnRyaWVzWzBdLnZlY3RvciwgbmV0ZGV2KTtcbiBcdH1cbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTQwNDcsMTIgKzQwNDYsMTUgQEAgc3RhdGljIGludCBpYXZmX2hhbmRsZV90Y2xhc3Moc3RydWN0IGlhdmZfYWRhcHRlciAqYWRhcHRlciwgdTMyIHRjLFxuIHtcbiBcdGlmICh0YyA9PSAwKVxuIFx0XHRyZXR1cm4gMDtcbi1cdGlmICh0YyBcdTAwM2MgYWRhcHRlci1cdTAwM2VudW1fdGMpIHtcbi1cdFx0aWYgKCFmaWx0ZXItXHUwMDNlZi5kYXRhLnRjcF9zcGVjLmRzdF9wb3J0KSB7XG4tXHRcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdFx0XCJTcGVjaWZ5IGRlc3RpbmF0aW9uIHBvcnQgdG8gcmVkaXJlY3QgdG8gdHJhZmZpYyBjbGFzcyBvdGhlciB0aGFuIFRDMFxcblwiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuK1x0aWYgKHRjIFx1MDAzZT0gYWRhcHRlci1cdTAwM2VudW1fdGMpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZhZGFwdGVyLVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiVW5hYmxlIHRvIGFkZCBmaWx0ZXIgYmVjYXVzZSBvZiBpbnZhbGlkIGRlc3RpbmF0aW9uIHRyYWZmaWMgY2xhc3NcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0aWYgKCFmaWx0ZXItXHUwMDNlZi5kYXRhLnRjcF9zcGVjLmRzdF9wb3J0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2YWRhcHRlci1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcIlNwZWNpZnkgZGVzdGluYXRpb24gcG9ydCB0byByZWRpcmVjdCB0byB0cmFmZmljIGNsYXNzIG90aGVyIHRoYW4gVEMwXFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcdC8qIHJlZGlyZWN0IHRvIGEgdHJhZmZpYyBjbGFzcyBvbiB0aGUgc2FtZSBkZXZpY2UgKi9cbiBcdGZpbHRlci1cdTAwM2VmLmFjdGlvbiA9IFZJUlRDSE5MX0FDVElPTl9UQ19SRURJUkVDVDtcbkBAIC00MTYwLDcgKzQxNjIsOCBAQCBzdGF0aWMgaW50IGlhdmZfZGVsZXRlX2Nsc2Zsb3dlcihzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyLFxuIFx0aWYgKGZpbHRlcikge1xuIFx0XHRmaWx0ZXItXHUwMDNlZGVsID0gdHJ1ZTtcbiBcdFx0YWRhcHRlci1cdTAwM2VhcV9yZXF1aXJlZCB8PSBJQVZGX0ZMQUdfQVFfREVMX0NMT1VEX0ZJTFRFUjtcbi1cdH0gZWxzZSB7XG4rXHR9IGVsc2UgaWYgKGFkYXB0ZXItXHUwMDNlbnVtX2Nsb3VkX2ZpbHRlcnMpIHtcbitcdFx0Lyogb3RoZXIgZmlsdGVycyBzdGlsbCB0cmFja2VkLCBzbyB0aGlzIG9uZSBpcyBhIGdlbnVpbmUgbWlzcyAqL1xuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0fVxuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2YWRhcHRlci1cdTAwM2VjbG91ZF9maWx0ZXJfbGlzdF9sb2NrKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX3R4cnguY1xuaW5kZXggYzMwYWJmMTdjZjVkMy4uZjFjMjZhOTA3NWNmMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl90eHJ4LmNcbkBAIC0xNzYsNyArMTc2LDYgQEAgc3RhdGljIHZvaWQgaWF2Zl9mb3JjZV93YihzdHJ1Y3QgaWF2Zl92c2kgKnZzaSwgc3RydWN0IGlhdmZfcV92ZWN0b3IgKnFfdmVjdG9yKVxuICAqKi9cbiB2b2lkIGlhdmZfZGV0ZWN0X3JlY292ZXJfaHVuZyhzdHJ1Y3QgaWF2Zl92c2kgKnZzaSlcbiB7XG4tXHRzdHJ1Y3QgaWF2Zl9yaW5nICp0eF9yaW5nID0gTlVMTDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcdGludCBwYWNrZXRzO1xuQEAgLTE5NCwyOSArMTkzLDM4IEBAIHZvaWQgaWF2Zl9kZXRlY3RfcmVjb3Zlcl9odW5nKHN0cnVjdCBpYXZmX3ZzaSAqdnNpKVxuIFx0aWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpXG4gXHRcdHJldHVybjtcbiBcbitcdC8qIHR4X3JpbmdzIGNhbiBiZSBmcmVlZC9yZWFsbG9jYXRlZCBieSBhIGNvbmN1cnJlbnQgcmVzZXQgKi9cbitcdGlmICghdnNpLVx1MDAzZWJhY2stXHUwMDNldHhfcmluZ3MpXG4rXHRcdHJldHVybjtcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZzaS1cdTAwM2ViYWNrLVx1MDAzZW51bV9hY3RpdmVfcXVldWVzOyBpKyspIHtcbi1cdFx0dHhfcmluZyA9IFx1MDAyNnZzaS1cdTAwM2ViYWNrLVx1MDAzZXR4X3JpbmdzW2ldO1xuLVx0XHRpZiAodHhfcmluZyBcdTAwMjZcdTAwMjYgdHhfcmluZy1cdTAwM2VkZXNjKSB7XG4tXHRcdFx0LyogSWYgcGFja2V0IGNvdW50ZXIgaGFzIG5vdCBjaGFuZ2VkIHRoZSBxdWV1ZSBpc1xuLVx0XHRcdCAqIGxpa2VseSBzdGFsbGVkLCBzbyBmb3JjZSBhbiBpbnRlcnJ1cHQgZm9yIHRoaXNcbi1cdFx0XHQgKiBxdWV1ZS5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIHByZXZfcGt0X2N0ciB3b3VsZCBiZSBuZWdhdGl2ZSBpZiB0aGVyZSB3YXMgbm9cbi1cdFx0XHQgKiBwZW5kaW5nIHdvcmsuXG4tXHRcdFx0ICovXG4tXHRcdFx0cGFja2V0cyA9IHR4X3JpbmctXHUwMDNlc3RhdHMucGFja2V0cyBcdTAwMjYgSU5UX01BWDtcbi1cdFx0XHRpZiAodHhfcmluZy1cdTAwM2VwcmV2X3BrdF9jdHIgPT0gcGFja2V0cykge1xuLVx0XHRcdFx0aWF2Zl9mb3JjZV93Yih2c2ksIHR4X3JpbmctXHUwMDNlcV92ZWN0b3IpO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuK1x0XHRzdHJ1Y3QgaWF2Zl9yaW5nICp0eF9yaW5nID0gXHUwMDI2dnNpLVx1MDAzZWJhY2stXHUwMDNldHhfcmluZ3NbaV07XG4rXHRcdHN0cnVjdCBpYXZmX3FfdmVjdG9yICpxX3ZlY3RvcjtcbiBcbi1cdFx0XHQvKiBNZW1vcnkgYmFycmllciBiZXR3ZWVuIHJlYWQgb2YgcGFja2V0IGNvdW50IGFuZCBjYWxsXG4tXHRcdFx0ICogdG8gaWF2Zl9nZXRfdHhfcGVuZGluZygpXG4tXHRcdFx0ICovXG4tXHRcdFx0c21wX3JtYigpO1xuLVx0XHRcdHR4X3JpbmctXHUwMDNlcHJldl9wa3RfY3RyID1cbi1cdFx0XHQgIGlhdmZfZ2V0X3R4X3BlbmRpbmcodHhfcmluZywgdHJ1ZSkgPyBwYWNrZXRzIDogLTE7XG4rXHRcdC8qIHJlYWQgb25jZSwgcV92ZWN0b3IgY2FuIGJlIHJlYXNzaWduZWQgYnkgYSBjb25jdXJyZW50IHJlc2V0ICovXG4rXHRcdHFfdmVjdG9yID0gUkVBRF9PTkNFKHR4X3JpbmctXHUwMDNlcV92ZWN0b3IpO1xuK1x0XHRpZiAoIXFfdmVjdG9yIHx8ICF0eF9yaW5nLVx1MDAzZWRlc2MpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdC8qIElmIHBhY2tldCBjb3VudGVyIGhhcyBub3QgY2hhbmdlZCB0aGUgcXVldWUgaXNcbitcdFx0ICogbGlrZWx5IHN0YWxsZWQsIHNvIGZvcmNlIGFuIGludGVycnVwdCBmb3IgdGhpc1xuK1x0XHQgKiBxdWV1ZS5cbitcdFx0ICpcbitcdFx0ICogcHJldl9wa3RfY3RyIHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHRoZXJlIHdhcyBub1xuK1x0XHQgKiBwZW5kaW5nIHdvcmsuXG4rXHRcdCAqL1xuK1x0XHRwYWNrZXRzID0gdHhfcmluZy1cdTAwM2VzdGF0cy5wYWNrZXRzIFx1MDAyNiBJTlRfTUFYO1xuK1x0XHRpZiAodHhfcmluZy1cdTAwM2VwcmV2X3BrdF9jdHIgPT0gcGFja2V0cykge1xuK1x0XHRcdGlhdmZfZm9yY2Vfd2IodnNpLCBxX3ZlY3Rvcik7XG4rXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbitcbitcdFx0LyogTWVtb3J5IGJhcnJpZXIgYmV0d2VlbiByZWFkIG9mIHBhY2tldCBjb3VudCBhbmQgY2FsbFxuK1x0XHQgKiB0byBpYXZmX2dldF90eF9wZW5kaW5nKClcbitcdFx0ICovXG4rXHRcdHNtcF9ybWIoKTtcbitcdFx0dHhfcmluZy1cdTAwM2VwcmV2X3BrdF9jdHIgPVxuK1x0XHQgIGlhdmZfZ2V0X3R4X3BlbmRpbmcodHhfcmluZywgdHJ1ZSkgPyBwYWNrZXRzIDogLTE7XG4gXHR9XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTc6Mjc6MzcuMzYzOTc4NTYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ1MDk0MTkzMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBhbmQgQ29udGV4dCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSBjaGFuZ2luZy4gVGhlIGZpbGUgbW9kaWZpY2F0aW9ucyBhcmUgZm9jdXNlZCBvbiBgaWF2ZmAsIHNwZWNpZmljYWxseTogYGlhdmZfZXRodG9vbC5jYCwgYGlhdmZfbWFpbi5jYCwgYW5kIGBpYXZmX3R4cnguY2AuIFJpZ2h0LCBzbyB0aGlzIGhhcyB0byBkbyB3aXRoIHRoZSBJbnRlbCBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIGRyaXZlci4gSUFWRi4uLiB0aGF0J3MgZm9yIEludGVsIFNSLUlPViBFdGhlcm5ldCBWaXJ0dWFsIEZ1bmN0aW9ucywgdHlwaWNhbGx5IGZvciB0aGluZ3MgbGlrZSB0aGUgSW50ZWwgNzAwLzgwMCBzZXJpZXMgY29udHJvbGxlcnMgKGk0MGUsIGljZSwgdGhhdCBraW5kIG9mIHRoaW5nKS5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgYGlhdmZgIGEgKnZlbmRvci1zcGVjaWZpYyogcGh5c2ljYWwgZHJpdmVyLCBvciBkb2VzIFFFTVUgZW11bGF0ZSBpdD8gRG9lcyBRRU1VIGV2ZW4gaGF2ZSBhbiBJQVZGIGVtdWxhdGlvbj8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCBRRU1VIG5hdGl2ZWx5IHN1cHBvcnRzIG9yIGlmIGl0IHJlbGllcyBvbiB1bmRlcmx5aW5nIGhhcmR3YXJlIHRoYXQncyBub3QgYXZhaWxhYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cC4gTGV0J3Mgc2VlLi4uIFNlY3Rpb24gMiBvZiB0aGUgcHJvbXB0IGhhcyBhIHJlbGV2YW50IGRpc3RpbmN0aW9uLiBJdCBsaXN0cyBcIlN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZVwiIGxpa2UgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMgYW5kIFNtYXJ0TklDcy4gSUFWRiBjb3VsZCBmYWxsIGludG8gdGhhdCBjYXRlZ29yeS4gVGhlbiBpdCBjb250cmFzdHMgdGhhdCB3aXRoIFwiUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sc1wiIHdoaWNoIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdmlydHVhbCBidXNlcy5cblxuU28sIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZmlndXJlIG91dCB3aGV0aGVyIGlhdmYgaXMgcmVhY2hhYmxlLiBJcyBpdCBlbXVsYXRlZCBieSBRRU1VLCBvciBkb2VzIGl0IHV0aWxpemUgc29tZSB2aXJ0dWFsIGJ1cyBpbnRlcmZhY2UsIG9yIHBlcmhhcHMgc29tZSBzb2Z0d2FyZSBlbXVsYXRpb24gbWV0aG9kPyBJIG5lZWQgdG8gY2hlY2sgaG93IGBpYXZmYCBhY3R1YWxseSBiaW5kcyB0byB0aGUgaGFyZHdhcmUuIEEgcXVpY2sgZ3JlcCBmb3IgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIG1pZ2h0IGJlIHVzZWZ1bCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTc3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTc6Mjc6NTEuODczNDAwNzEzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzAzNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kZXZpY2VfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYz0yNz1zdGF0aWMgY29uc3QgY2hhciBpYXZmX2NvcHlyaWdodFtdID1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtMzctICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYzozODpzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWF2Zl9wY2lfdGJsW10gPSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYy0zOS1cXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQVZGX0RFVl9JRF9WRikgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM9NTE4Nj1pbnQgaWF2Zl9wcm9jZXNzX2NvbmZpZyhzdHJ1Y3QgaWF2Zl9hZGFwdGVyICphZGFwdGVyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYy01Mjk1LSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jOjUyOTY6c3RhdGljIGludCBpYXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTI5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE3OjI3OjUxLjkyMTcwOTk0MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI3MzcyOTcwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJQVZGIFBDSSBJRHMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBQQ0kgSURzIHdpdGhpbiB0aGUgYGlhdmZfcGNpX3RibGAgc3RydWN0dXJlLiBUaGlzIGxpa2VseSBjb250YWlucyB0aGUgbWFwcGluZyBiZXR3ZWVuIFBDSSBkZXZpY2UgaWRlbnRpZmllcnMgYW5kIHRoZSBJbnRlbCBBZHZhbmNlZCBWaXJ0dWFsIEZ1bmN0aW9uIChJQVZGKSBkcml2ZXIsIGEgY3JpdGljYWwgcGllY2UgZm9yIHByb3BlciBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIG1hbmFnZW1lbnQgaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGRldmljZXMgdGhpcyBkcml2ZXIgc3VwcG9ydHMgYXQgdGhlIGhhcmR3YXJlIGxldmVsLiBLbm93aW5nIHRoZXNlIElEcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBkZXZpY2UgY29tcGF0aWJpbGl0eSwgcG90ZW50aWFsIGxpbWl0YXRpb25zLCBhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkaWZmZXJlbnQgaGFyZHdhcmUgcmV2aXNpb25zLiBJdCdzIGEgZnVuZGFtZW50YWwgc3RlcCBmb3IgZGlhZ25vc2luZyBkcml2ZXItcmVsYXRlZCBpc3N1ZXMgb3IgdW5kZXJzdGFuZGluZyBoYXJkd2FyZSBzdXBwb3J0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTU4MiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE3OjI3OjU0LjY1OTAwOTU2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM4OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpYXZmX3BjaV90YmxbXSA9IHtcXG4gIDM5OlxcdFxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElBVkZfREVWX0lEX1ZGKSB9LFxcbiAgNDA6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUFWRl9ERVZfSURfVkZfSFYpIH0sXFxuICA0MTpcXHRcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQVZGX0RFVl9JRF9YNzIyX1ZGKSB9LFxcbiAgNDI6XFx0XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUFWRl9ERVZfSURfQURBUFRJVkVfVkYpIH0sXFxuICA0MzpcXHRcXHQvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovXFxuICA0NDpcXHRcXHR7IH1cXG4gIDQ1OlxcdH07XFxuICA0NjpcXHRcXG4gIDQ3OlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpYXZmX3BjaV90YmwpO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRNT0RVTEVfQUxJQVMoXFxcImk0MGV2ZlxcXCIpO1xcbiAgNTA6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJJbnRlbChSKSBFdGhlcm5ldCBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIE5ldHdvcmsgRHJpdmVyXFxcIik7XFxuICA1MTpcXHRNT0RVTEVfSU1QT1JUX05TKFxcXCJMSUJFVEhcXFwiKTtcXG4gIDUyOlxcdE1PRFVMRV9JTVBPUlRfTlMoXFxcIkxJQklFXFxcIik7XFxuICA1MzpcXHRNT0RVTEVfSU1QT1JUX05TKFxcXCJMSUJJRV9BRE1JTlFcXFwiKTtcXG4gIDU0OlxcdE1PRFVMRV9MSUNFTlNFKFxcXCJHUEwgdjJcXFwiKTtcXG4gIDU1OlxcdFxcbiAgNTY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpYXZmX25ldGRldl9vcHM7XFxuICA1NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTc6Mjc6NTQuNjU5MzUwMjQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAxNzk1NTE4NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBJQVZGIEZ1enppbmcgRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgZnV6emluZyB0aGUgSUFWRiAoSW50ZWwgNzAwLzgwMCBzZXJpZXMgVmlydHVhbCBGdW5jdGlvbikgZHJpdmVyIGlzIGV2ZW4gZmVhc2libGUgd2l0aGluIG15IGN1cnJlbnQgc2V0dXAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIFFFTVUgZW11bGF0ZXMgdGhlIGhhcmR3YXJlLiBMZXQgbWUgY2hlY2suLi4gbm9wZS4gSXQgZW11bGF0ZXMgZTEwMDAsIGUxMDAwZSwgYW5kIGlnYiwgYnV0IG5vdCBpNDBlIG9yIGlhdmYuIFRoYXQncyBhIGRlZmluaXRlIHJvYWRibG9jay5cblxuQWxyaWdodCwgd2hhdCBhYm91dCBsZXZlcmFnaW5nIHN5emthbGxlcj8gRG9lcyBpdCB0YXJnZXQgSUFWRj8gQSBxdWljayBzZWFyY2ggcmV2ZWFscyB0aGF0IHN5emthbGxlciBuZWVkcyAqYWN0dWFsKiBJbnRlbCBTUi1JT1YgaGFyZHdhcmUgKGxpa2UgWEw3MTAsIFg3MTAsIFg3MjIsIEU4MTAsIGV0Yy4pIG9yIFBDSWUgcGFzc3Rocm91Z2ggb2YgYW4gU1ItSU9WIFZGLiBTbywgYWdhaW4sIG5vIGRpY2Ugd2l0aG91dCBkZWRpY2F0ZWQgcGh5c2ljYWwgaGFyZHdhcmUsIG9yIGRpcmVjdCBwYXNzdGhyb3VnaCBvZiBhIFZGLlxuXG5XYWl0IGEgc2Vjb25kLCBsZXQgbWUgY2FyZWZ1bGx5IHJlcmVhZCB0aGUgXCJXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2VcIiBjcml0ZXJpYS4gT2theSwgdGhlcmUgaXQgaXM6IFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLi4uIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIiBzb3VuZHMgbGlrZSBhIHBlcmZlY3QgZml0LiBBbmQgdGhhdCdzIGV4YWN0bHkgd2hhdCBJQVZGIG5lZWRzLCByaWdodD8gXG5cbk5vdywgd2FpdC4uLiBtYXliZSBJJ20gb3Zlcmxvb2tpbmcgc29tZXRoaW5nIG9idmlvdXMuIFdoYXQgYWJvdXQgbG9va2luZyBhdCBhbHRlcm5hdGl2ZXMsIGxpa2UgdmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBvciBzb2NrZXRzPyBObywgSUFWRiBpcyBhIFBDSSBkcml2ZXIuIEkgY2FuIHZlcmlmeSBpdCBieSBjaGVja2luZyB0aGUgYGlhdmZfcHJvYmVgIGZ1bmN0aW9uIGRlZmluaXRpb24sIHdoaWNoIHRha2VzIGEgYHBjaV9kZXZgIHN0cnVjdC4gSSBjYW4gYWxzbyB2ZXJpZnkgdGhhdCBpdCBpcyByZWdpc3RlcmVkIGFzIGEgUENJIGRyaXZlciB2aWEgYG1vZHVsZV9wY2lfZHJpdmVyKGlhdmZfZHJpdmVyKTtgLCBieSBjaGVja2luZyBpbiBgaWF2Zl9tYWluLmNgLlxuXG5Mb29rcyBsaWtlLCBkZXNwaXRlIG15IGJlc3QgaW50ZW50aW9ucywgSUFWRiBpcyBnb2luZyB0byBiZSBhIGhhcmQgXCJub1wiIGZvciBmdXp6aW5nIHdpdGhpbiBteSBjdXJyZW50IHZpcnR1YWxpemVkIGluZnJhc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTQ2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTc6Mjg6MDQuODM4OTA0OTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNzQ1NzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzoyODowNC44ODYyODgxNDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozMzI3OTg1MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biB0aGUgYGlhdmZfZHJpdmVyYCBSZWdpc3RyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgZm9yIHRoZSBgaWF2Zl9kcml2ZXJgLiBUaGlzIHVzdWFsbHkgbWVhbnMgZGl2aW5nIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHdoZXJlIHRoZSBkcml2ZXIgZGVjbGFyZXMgaXRzZWxmIHRvIHRoZSBzeXN0ZW0uIEknbGwgYmUgc2VhcmNoaW5nIGZvciB0aGUgdHlwaWNhbCBwYXR0ZXJucyAtIHRoaW5ncyBsaWtlIGBtb2R1bGVfaW5pdGAsIGBtb2R1bGVfZXhpdGAsIGBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXJgLCBvciBwb3RlbnRpYWxseSBzb21lIG9sZGVyIGludGVyZmFjZXMgaWYgaXQncyBhIGxlZ2FjeSBjb21wb25lbnQuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXQgcmVnaXN0ZXJzIGFzIGEgcGxhdGZvcm0gZHJpdmVyLCBhIFBDSSBkcml2ZXIsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LiBJcyBpdCBsaWtlbHkgdG8gYmUgYW4gYXN5bmMgcHJvYmU/IEFyZSB0aGVyZSBhbnkgZGV2aWNlIHRyZWUgYmluZGluZ3MgaW52b2x2ZWQgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSdsbCBhbHNvIHdhbnQgdG8gY2hlY2sgZm9yIGFueSB2ZW5kb3Itc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgb3IgY2FsbGJhY2tzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEVzc2VudGlhbGx5LCBJJ20gbG9va2luZyBmb3IgdGhlIGVudHJ5IHBvaW50IC0gdGhlIGNyaXRpY2FsIGNvZGUgdGhhdCBtYWtlcyB0aGUgYGlhdmZfZHJpdmVyYCB2aXNpYmxlIHRvIHRoZSBrZXJuZWwncyBkZXZpY2UgbWFuYWdlbWVudCBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGludGVncmF0ZXMgd2l0aCB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCB3aGF0IGl0J3MgZXhwZWN0aW5nIGluIHRlcm1zIG9mIGhhcmR3YXJlIHJlc291cmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA4NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE3OjI4OjA4LjIxNDI3NTc3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMzU4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGNpX3JlZ2lzdGVyX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jPTU2NzE9c3RhdGljIGludCBfX2luaXQgaWF2Zl9pbml0X21vZHVsZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYy01Njc2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM6NTY3NzpcXHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2aWF2Zl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmMtNTY3OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE3OjI4OjA4LjI2MjUxNjEwNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozOTg4MjgxMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGlhdmZfZHJpdmVyJ3MgU3l6a2FsbGVyIENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGUgYGlhdmZfZHJpdmVyYCBpcyBhIHN0YW5kYXJkIGBwY2lfZHJpdmVyYCwgbm90aGluZyBwYXJ0aWN1bGFybHkgZXhvdGljIHRoZXJlLiBCdXQgdGhlIHJlYWwgcXVlc3Rpb24gaXMsIGNhbiBJIGdldCBTeXprYWxsZXIgdG8gaW5zdGFudGlhdGUgYW5kIHRlc3QgaXQgd2l0aG91dCByZXF1aXJpbmcgYWN0dWFsIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGV2ZW4gYSBmdWxsIFFFTVUgZW11bGF0aW9uIG9mIGFuIElBVkYgZGV2aWNlPyBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgU3l6a2FsbGVyIHVzdWFsbHkgcnVucyB3aXRoaW4gZmFpcmx5IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgZWl0aGVyIEdDRSBvciwgbW9yZSBjb21tb25seSwgcGxhaW4gUUVNVSwgYW5kIGxldmVyYWdlcyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgYW5kIHR1bi90YXAuXG5cblRoZSBjcnVjaWFsIGlzc3VlIGhlcmUgaXMgdGhhdCwgYXMgSSByZWNhbGwsIHN0YW5kYXJkIFFFTVUgaW5zdGFsbGF0aW9ucyBkb24ndCBpbmNsdWRlIGVtdWxhdGlvbiBmb3IgSW50ZWwgVmlydHVhbCBGdW5jdGlvbiAoVkYpIGRldmljZXMsIHNwZWNpZmljYWxseSB0aG9zZSBpZGVudGlmaWVkIHdpdGggdGhlIGBJQVZGX0RFVl9JRF9WRmAgc2VyaWVzLiBUaGlzIGlzIGEgcG90ZW50aWFsIHNob3ctc3RvcHBlciwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgSUFWRl9ERVZfSURfVkZgIHZhbHVlIHRvIGZ1bGx5IGNvbmZpcm0gaWYgaXQgYWxpZ25zIHdpdGggbXkgY3VycmVudCB1bmRlcnN0YW5kaW5nIG9mIHN1cHBvcnRlZCBRRU1VIGRldmljZXMgYW5kIHRoZWlyIGxpbWl0YXRpb25zLiBUaW1lIHRvIGxvb2sgdGhhdCB1cC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTE3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE3OjI4OjEyLjI1MDgwMTEwOFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1MTczNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSUFWRl9ERVZfSURfVkZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2Rldmlkcy5oLTctLyogRGV2aWNlIElEcyBmb3IgdGhlIFZGIGRyaXZlciAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9kZXZpZHMuaDo4OiNkZWZpbmUgSUFWRl9ERVZfSURfVkZcXHRcXHRcXHQweDE1NENcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfZGV2aWRzLmg6OTojZGVmaW5lIElBVkZfREVWX0lEX1ZGX0hWXFx0XFx0MHgxNTcxXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX2Rldmlkcy5oLTEwLSNkZWZpbmUgSUFWRl9ERVZfSURfQURBUFRJVkVfVkZcXHRcXHQweDE4ODlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM9Mzg9c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGlhdmZfcGNpX3RibFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lhdmYvaWF2Zl9tYWluLmM6Mzk6XFx0eyBQQ0lfVkRFVklDRShJTlRFTCwgSUFWRl9ERVZfSURfVkYpIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWF2Zi9pYXZmX21haW4uYzo0MDpcXHR7IFBDSV9WREVWSUNFKElOVEVMLCBJQVZGX0RFVl9JRF9WRl9IVikgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pYXZmL2lhdmZfbWFpbi5jLTQxLVxcdHsgUENJX1ZERVZJQ0UoSU5URUwsIElBVkZfREVWX0lEX1g3MjJfVkYpIH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDE3OjI4OjEyLjI5NjMyNDY2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NTc0NDkwNzYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVmVyZGljdDogU3RydWN0dXJhbGx5IFVucmVhY2hhYmxlIEhhcmR3YXJlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggdG91Y2hpbmcgdGhlIGBpYXZmYCBkcml2ZXIsIGFuZCB0aGF0J3MgYW4gaW1tZWRpYXRlIHJlZCBmbGFnIGluIG15IGV4cGVyaWVuY2UuIFRoZSBkZXZpY2UgSURzIG1lbnRpb25lZCAoMHgxNTRDLCAweDE1NzEsIDB4MzdDRCwgMHgxODg5KSBhcmUgYWxsIGZvciBJbnRlbCBWaXJ0dWFsIEZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IHRoZSBYTDcxMC9YNzEwLCA3MDAgU2VyaWVzLCBYNzIyLCBhbmQgRTgxMCBWRnMuIEkga25vdyB0aGVzZSBkZXZpY2VzOyB0aGV5J3JlIFNSLUlPViBWRnMuIEFuZCwgYXMgSSBzdXNwZWN0ZWQsIHRoZSB0ZXh0IGNvbmZpcm1zIHRoYXQgKm5vbmUqIG9mIHRoZXNlIGFyZSBlbXVsYXRlZCBieSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSAoR0NFKSBWTXMuIE5vIHZpcnR1YWwgYnVzZXMsIG5vIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBgaWF2ZmAuIFRoYXQncyB0aGUgY3J1eCBvZiBpdC5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSByZS1leGFtaW5lIHRoZSBkaWZmIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gT2theSwgd2UndmUgZ290OlxuXG4xLiAgYGlhdmZfZXRodG9vbC5jYDogYGlhdmZfc2V0X3JpbmdwYXJhbWAgLSBFdGh0b29sIG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBmb3IgdGhlIGBpYXZmYCBkcml2ZXIuXG4yLiAgYGlhdmZfbWFpbi5jYDogYGlhdmZfcmVxdWVzdF9taXNjX2lycWAsIGBpYXZmX2hhbmRsZV90Y2xhc3NgLCBgaWF2Zl9kZWxldGVfY2xzZmxvd2VyYCAtIEludGVycnVwdCBoYW5kbGluZyBkdXJpbmcgcHJvYmUvcmVzZXQsIGFuZCB0cmFmZmljIGNvbnRyb2wgKFRDKSBmbG93ZXIgb2ZmbG9hZCBoYW5kbGVycy5cbjMuICBgaWF2Zl90eHJ4LmNgOiBgaWF2Zl9kZXRlY3RfcmVjb3Zlcl9odW5nYCAtIEEgd2F0Y2hkb2cvaGFuZyByZWNvdmVyeSBtZWNoYW5pc20gZm9yIGBpYXZmYC5cblxuQWxyaWdodCwgdGhlc2UgYXJlIGFsbCBkZWVwbHkgZW1iZWRkZWQgd2l0aGluIHRoZSBgaWF2ZmAgZHJpdmVyIGl0c2VsZi4gRXZlcnl0aGluZyBpcyBzcGVjaWZpYyB0byBhbiBpbnN0YW50aWF0ZWQgYW5kIHByb2JlZCBgaWF2ZmAgZGV2aWNlLiBZb3UgY2FuJ3QgZXhlY3V0ZSBhbnkgb2YgdGhpcyBjb2RlIHVubGVzcyB5b3UgaGF2ZSBhICpyZWFsKiBTUi1JT1YgVkYgZnJvbSBJbnRlbCBhdHRhY2hlZCB0byBhIHN5c3RlbS4gIFRoZSBjb2RlIHRvdWNoZXMgU1ItSU9WLCB3aGljaCByZXF1aXJlcyBkZWRpY2F0ZWQgaGFyZHdhcmUsIGFuZCBpdCdzIG5vdCBwcmVzZW50IGluIHRoZSBjb21tb24gZW11bGF0aW9uIGVudmlyb25tZW50cy5cblxuVGhpcyBpcyBhIGNsYXNzaWMgY2FzZSBvZiBcInN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSxcIiBhcyB0aGUgZG9jdW1lbnQgc2F5cy4gSXQncyBpbiB0aGUgc2FtZSBjYXRlZ29yeSBhcyB0aG9zZSBgbWx4c3dgLCBgcGRzX2NvcmVgLCBgcWVkYCwgYGlvbmljYCwgYW5kIGBhbWRncHVgIGRyaXZlcnMsIHdoaWNoLCBhcyBleHBlcnRzLCB3ZSBrbm93IHJlcXVpcmUgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIGFuZCBhcmVuJ3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhhdCdzIGEgcGVyZmVjdCBhbmFsb2d5LiBgaWF2ZmAgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgTklDIGRyaXZlciB0aGF0IG5lZWRzIHBoeXNpY2FsIGhhcmR3YXJlLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgY2xlYXI6IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgZmFsc2VgLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB0aGUgcmVzdWx0cyBhcmUgY2xlYXIgYW5kIGNvbmNpc2UuICBTaW5jZSBgV29ydGhGdXp6aW5nYCBpcyBgZmFsc2VgLCB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgcmVzdWx0czpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWBcbiogICBgUmVhc29uaW5nYDogIFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIChgaWF2ZmApIGRyaXZlciwgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIG5ldHdvcmsgZHJpdmVyIGZvciBJbnRlbCBFdGhlcm5ldCBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMgKGUuZy4sIFg3MTAsIEU4MTApLiBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgcGh5c2ljYWwgSW50ZWwgaGFyZHdhcmUgb3IgU1ItSU9WIHN1cHBvcnQgYW5kIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIuXCJcblxuT2theSwgSSB0aGluayB3ZSdyZSBnb29kIHRvIGdvLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI0OCwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTc6Mjg6MTguODcwODE3OTk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIEFkYXB0aXZlIFZpcnR1YWwgRnVuY3Rpb24gKGlhdmYpIGRyaXZlciAoaWF2Zl9ldGh0b29sLmMsIGlhdmZfbWFpbi5jLCBhbmQgaWF2Zl90eHJ4LmMpLiBUaGlzIGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0kgZHJpdmVyIGZvciBJbnRlbCBFdGhlcm5ldCBTUi1JT1YgVmlydHVhbCBGdW5jdGlvbnMgKGUuZy4sIFhMNzEwLCBYNzEwLCBYNzIyLCBFODEwIHNlcmllcykuIEl0IHJlcXVpcmVzIHBoeXNpY2FsIEludGVsIGhhcmR3YXJlIG9yIFNSLUlPViBWRiBzdXBwb3J0IGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciBHQ0UgdmlydHVhbGl6ZWQgdGVzdCBlbnZpcm9ubWVudHMuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGZvciBzeXprYWxsZXIgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBBZGFwdGl2ZSBWaXJ0dWFsIEZ1bmN0aW9uIChpYXZmKSBkcml2ZXIgKGlhdmZfZXRodG9vbC5jLCBpYXZmX21haW4uYywgYW5kIGlhdmZfdHhyeC5jKS4gVGhpcyBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJIGRyaXZlciBmb3IgSW50ZWwgRXRoZXJuZXQgU1ItSU9WIFZpcnR1YWwgRnVuY3Rpb25zIChlLmcuLCBYTDcxMCwgWDcxMCwgWDcyMiwgRTgxMCBzZXJpZXMpLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBJbnRlbCBoYXJkd2FyZSBvciBTUi1JT1YgVkYgc3VwcG9ydCBhbmQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIHZpcnR1YWxpemVkIHRlc3QgZW52aXJvbm1lbnRzLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxNzoyODoxOC44NzA4NDgwNzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow24jh6[1] Phase: Running StartedAt: 2026-09-15 17:28:29 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow24jh6[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-15 17:28:29 +0000 UTC FinishedAt: 2026-09-15 17:28:34 +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,}