Name: series-workflowf55wr Phase: Failed StartedAt: 2026-08-05 06:57:48 +0000 UTC FinishedAt: 2026-08-05 06:59:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf55wr[0] Phase: Succeeded StartedAt: 2026-08-05 06:57:48 +0000 UTC FinishedAt: 2026-08-05 06:59:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf55wr[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 06:57:48 +0000 UTC FinishedAt: 2026-08-05 06:59:33 +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+CgkJCTx0ZD4yMDI2LzA4LzA1IDA2OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBpNDBlIEV0aGVybmV0IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoSW50ZWwgNDAgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2VkIGZvciBmdXp6aW5nLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNjo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVjMTU0MDM4NmQzMmNjZjMxYjI5YmEwM2ZhNTAyMDA4ZGQ0N2Y2ZjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDA2OjU5OjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlLmhcbmluZGV4IDgzZTc4MDkxOWFjOTcuLjE4NDUyZjlhYTc0ZTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlLmhcbkBAIC0xMDEsNyAmIzQzOzEwMSw2IEBAIGVudW0gaTQwZV9zdGF0ZSB7XG4gXHRfX0k0MEVfR0xPQkFMX1JFU0VUX1JFUVVFU1RFRCxcbiBcdF9fSTQwRV9FTVBfUkVTRVRfSU5UUl9SRUNFSVZFRCxcbiBcdF9fSTQwRV9TVVNQRU5ERUQsXG4tXHRfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLFxuIFx0X19JNDBFX0JBRF9FRVBST00sXG4gXHRfX0k0MEVfRE9XTl9SRVFVRVNURUQsXG4gXHRfX0k0MEVfRkRfRkxVU0hfUkVRVUVTVEVELFxuQEAgLTY2OSwxMiAmIzQzOzY2OCwxNiBAQCBzdHJ1Y3QgaTQwZV9wZiB7XG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCBwdHBfcHJldl9od190aW1lO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHB0cF9leHR0czBfd29yaztcbiBcdGt0aW1lX3QgcHRwX3Jlc2V0X3N0YXJ0O1xuJiM0MztcdC8qIFNlcmlhbGl6ZXMgdGltZXN0YW1wIGNvbmZpZ3VyYXRpb24gd2l0aCBQVFAgdGVhcmRvd24uICovXG4mIzQzO1x0c3RydWN0IG11dGV4IHB0cF9jb25maWdfbG9jaztcbiBcdHN0cnVjdCBtdXRleCB0bXJlZ19sb2NrOyAvKiBVc2VkIHRvIHByb3RlY3QgdGhlIFNZU1RJTUUgcmVnaXN0ZXJzLiAqL1xuIFx0dTMyIHB0cF9hZGpfbXVsdDtcbiBcdHUzMiB0eF9od3RzdGFtcF90aW1lb3V0cztcbiBcdHUzMiB0eF9od3RzdGFtcF9za2lwcGVkO1xuIFx0dTMyIHJ4X2h3dHN0YW1wX2NsZWFyZWQ7XG4gXHR1MzIgbGF0Y2hfZXZlbnRfZmxhZ3M7XG4mIzQzO1x0LyogUHJvdGVjdHMgcHRwX3R4X3NrYiwgd2hpY2ggYWxzbyBpbmRpY2F0ZXMgdGhlIHNsb3Qgc3RhdGUuICovXG4mIzQzO1x0c3BpbmxvY2tfdCBwdHBfdHhfbG9jaztcbiBcdHNwaW5sb2NrX3QgcHRwX3J4X2xvY2s7IC8qIFVzZWQgdG8gcHJvdGVjdCBSeCB0aW1lc3RhbXAgcmVnaXN0ZXJzLiAqL1xuIFx0dW5zaWduZWQgbG9uZyBsYXRjaF9ldmVudHNbNF07XG4gXHRib29sIHB0cF90eDtcbkBAIC0xMzE1LDYgJiM0MzsxMzE4LDcgQEAgaW50IGk0MGVfcHRwX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiB2b2lkIGk0MGVfcHRwX3NhdmVfaHdfdGltZShzdHJ1Y3QgaTQwZV9wZiAqcGYpO1xuIHZvaWQgaTQwZV9wdHBfcmVzdG9yZV9od190aW1lKHN0cnVjdCBpNDBlX3BmICpwZik7XG4mIzQzO3ZvaWQgaTQwZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpNDBlX3BmICpwZik7XG4gdm9pZCBpNDBlX3B0cF9pbml0KHN0cnVjdCBpNDBlX3BmICpwZik7XG4gdm9pZCBpNDBlX3B0cF9zdG9wKHN0cnVjdCBpNDBlX3BmICpwZik7XG4gaW50IGk0MGVfcHRwX2FsbG9jX3BpbnMoc3RydWN0IGk0MGVfcGYgKnBmKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuaW5kZXggYTA0NjgzMDA0YTU2Ny4uNDhiYTM4YTQ1MmQwYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbkBAIC03LDYgJiM0Mzs3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX21hY3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hkcF9zb2NrX2Rydi5oXHUwMDNlXG4gXG5AQCAtMTA4MjIsNyAmIzQzOzEwODIzLDggQEAgc3RhdGljIGludCBpNDBlX3Jlc2V0KHN0cnVjdCBpNDBlX3BmICpwZilcbiBcdGlmIChyZXQpIHtcbiBcdFx0ZGV2X2luZm8oXHUwMDI2cGYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwmIzM0O1BGIHJlc2V0IGZhaWxlZCwgJWRcXG5cJiMzNDssIHJldCk7XG4gXHRcdHNldF9iaXQoX19JNDBFX1JFU0VUX0ZBSUxFRCwgcGYtXHUwMDNlc3RhdGUpO1xuLVx0XHRjbGVhcl9iaXQoX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsIHBmLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRcdGNsZWFyX2FuZF93YWtlX3VwX2JpdChfX0k0MEVfUkVTRVRfUkVDT1ZFUllfUEVORElORyxcbiYjNDM7XHRcdFx0XHQgICAgICBwZi1cdTAwM2VzdGF0ZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRwZi1cdTAwM2VwZnJfY291bnQmIzQzOyYjNDM7O1xuIFx0fVxuQEAgLTExMTE1LDcgJiM0MzsxMTExNyw3IEBAIHN0YXRpYyB2b2lkIGk0MGVfcmVidWlsZChzdHJ1Y3QgaTQwZV9wZiAqcGYsIGJvb2wgcmVpbml0LCBib29sIGxvY2tfYWNxdWlyZWQpXG4gZW5kX2NvcmVfcmVzZXQ6XG4gXHRjbGVhcl9iaXQoX19JNDBFX1JFU0VUX0ZBSUxFRCwgcGYtXHUwMDNlc3RhdGUpO1xuIGNsZWFyX3JlY292ZXJ5OlxuLVx0Y2xlYXJfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYW5kX3dha2VfdXBfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSk7XG4gXHRjbGVhcl9iaXQoX19JNDBFX1RJTUVPVVRfUkVDT1ZFUllfUEVORElORywgcGYtXHUwMDNlc3RhdGUpO1xuIH1cbiBcbkBAIC0xMjgxOSw2ICYjNDM7MTI4MjEsOSBAQCBzdGF0aWMgaW50IGk0MGVfc3dfaW5pdChzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4gXHRcdFx0IFwmIzM0O3RvdGFsLXBvcnQtc2h1dGRvd24gd2FzIGVuYWJsZWQsIGxpbmstZG93bi1vbi1jbG9zZSBpcyBmb3JjZWQgb25cXG5cJiMzNDspO1xuIFx0fVxuIFx0bXV0ZXhfaW5pdChcdTAwMjZwZi1cdTAwM2Vzd2l0Y2hfbXV0ZXgpO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cGYtXHUwMDNlcHRwX2NvbmZpZ19sb2NrKTtcbiYjNDM7XHRpNDBlX3B0cF9pbml0X3dvcmsocGYpO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrKTtcbiBcbiBzd19pbml0X2RvbmU6XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE2MTU3LDYgJiM0MzsxNjE2MiwyMCBAQCBzdGF0aWMgdm9pZCBpNDBlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdGk0MGVfZGV2bGlua191bnJlZ2lzdGVyKHBmKTtcbiBcbiYjNDM7XHQvKiBJbnRlcnJ1cHRzIGNhbiBxdWV1ZSB0aGUgc2VydmljZSB0YXNrIHVudGlsIF9fSTQwRV9ET1dOIGlzIHNldC5cbiYjNDM7XHQgKiBEaXNhYmxlIGl0IHNvIG5vIHNlcnZpY2Ugd29yayBjYW4gb3V0bGl2ZSB0aGUgUEYuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2V0X2JpdChfX0k0MEVfU1VTUEVOREVELCBwZi1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0aWYgKHBmLVx1MDAzZXNlcnZpY2VfdGltZXIuZnVuY3Rpb24pXG4mIzQzO1x0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnBmLVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuJiM0MztcdGlmIChwZi1cdTAwM2VzZXJ2aWNlX3Rhc2suZnVuYylcbiYjNDM7XHRcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnBmLVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFueSByZXNldCBvd25lciBiZWZvcmUgdGVhcmluZyBkb3duIGRldmljZSByZXNvdXJjZXMuICovXG4mIzQzO1x0d2FpdF9vbl9iaXRfbG9jayhwZi1cdTAwM2VzdGF0ZSwgX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsXG4mIzQzO1x0XHRcdCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4mIzQzO1x0c2V0X2JpdChfX0k0MEVfSU5fUkVNT1ZFLCBwZi1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuIFx0aTQwZV9kYmdfcGZfZXhpdChwZik7XG4gXG4gXHRpNDBlX3B0cF9zdG9wKHBmKTtcbkBAIC0xNjE2NSwyNiAmIzQzOzE2MTg0LDEyIEBAIHN0YXRpYyB2b2lkIGk0MGVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0aTQwZV93cml0ZV9yeF9jdGwoaHcsIEk0MEVfUEZRRl9IRU5BKDApLCAwKTtcbiBcdGk0MGVfd3JpdGVfcnhfY3RsKGh3LCBJNDBFX1BGUUZfSEVOQSgxKSwgMCk7XG4gXG4tXHQvKiBHcmFiIF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HIGFuZCBzZXQgX19JNDBFX0lOX1JFTU9WRVxuLVx0ICogZmxhZ3MsIG9uY2UgdGhleSBhcmUgc2V0LCBpNDBlX3JlYnVpbGQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgYXNcbi1cdCAqIGk0MGVfcHJlcF9mb3JfcmVzZXQgYWx3YXlzIHJldHVybnMgZWFybHkuXG4tXHQgKi9cbi1cdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSkpXG4tXHRcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcbi1cdHNldF9iaXQoX19JNDBFX0lOX1JFTU9WRSwgcGYtXHUwMDNlc3RhdGUpO1xuLVxuIFx0aWYgKHRlc3RfYml0KEk0MEVfRkxBR19TUklPVl9FTkEsIHBmLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRzZXRfYml0KF9fSTQwRV9WRl9SRVNFVFNfRElTQUJMRUQsIHBmLVx1MDAzZXN0YXRlKTtcbiBcdFx0aTQwZV9mcmVlX3ZmcyhwZik7XG4gXHRcdGNsZWFyX2JpdChJNDBFX0ZMQUdfU1JJT1ZfRU5BLCBwZi1cdTAwM2VmbGFncyk7XG4gXHR9XG4tXHQvKiBubyBtb3JlIHNjaGVkdWxpbmcgb2YgYW55IHRhc2sgKi9cbi1cdHNldF9iaXQoX19JNDBFX1NVU1BFTkRFRCwgcGYtXHUwMDNlc3RhdGUpO1xuIFx0c2V0X2JpdChfX0k0MEVfRE9XTiwgcGYtXHUwMDNlc3RhdGUpO1xuLVx0aWYgKHBmLVx1MDAzZXNlcnZpY2VfdGltZXIuZnVuY3Rpb24pXG4tXHRcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2cGYtXHUwMDNlc2VydmljZV90aW1lcik7XG4tXHRpZiAocGYtXHUwMDNlc2VydmljZV90YXNrLmZ1bmMpXG4tXHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cGYtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbiBcdGlmICh0ZXN0X2JpdChfX0k0MEVfUkVDT1ZFUllfTU9ERSwgcGYtXHUwMDNlc3RhdGUpKSB7XG4gXHRcdHN0cnVjdCBpNDBlX3ZzaSAqdnNpID0gcGYtXHUwMDNldnNpWzBdO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9wdHAuY1xuaW5kZXggZmY2MmI1ZjJjODE1MC4uNWYxNWEzZDRhOTFlZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jXG5AQCAtMTY5LDYgJiM0MzsxNjksMTcgQEAgc3RhdGljIHZvaWQgaTQwZV9wdHBfZXh0dHMwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cHRwX2Nsb2NrX2V2ZW50KHBmLVx1MDAzZXB0cF9jbG9jaywgXHUwMDI2ZXZlbnQpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGk0MGVfcHRwX2luaXRfd29yayAtIEluaXRpYWxpemUgUFRQIHdvcmsgZm9yIGEgUEZcbiYjNDM7ICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBJbml0aWFsaXplIHdvcmsgd2hpY2ggbXVzdCByZW1haW4gdmFsaWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgUEYuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGk0MGVfcHRwX2luaXRfd29yayhzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4mIzQzO3tcbiYjNDM7XHRJTklUX1dPUksoXHUwMDI2cGYtXHUwMDNlcHRwX2V4dHRzMF93b3JrLCBpNDBlX3B0cF9leHR0czBfd29yayk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaTQwZV9pc19wdHBfcGluX2RldiAtIGNoZWNrIGlmIGRldmljZSBzdXBwb3J0cyBQVFAgcGluc1xuICAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtNzI4LDE0ICYjNDM7NzM5LDE3IEBAIHZvaWQgaTQwZV9wdHBfcnhfaGFuZyhzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4gICoqL1xuIHZvaWQgaTQwZV9wdHBfdHhfaGFuZyhzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuIFx0aWYgKCF0ZXN0X2JpdChJNDBFX0ZMQUdfUFRQX0VOQSwgcGYtXHUwMDNlZmxhZ3MpIHx8ICFwZi1cdTAwM2VwdHBfdHgpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiBcdC8qIE5vdGhpbmcgdG8gZG8gaWYgd2UmIzM5O3JlIG5vdCBhbHJlYWR5IHdhaXRpbmcgZm9yIGEgdGltZXN0YW1wICovXG4tXHRpZiAoIXRlc3RfYml0KF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLVx1MDAzZXN0YXRlKSlcbi1cdFx0cmV0dXJuO1xuJiM0MztcdGlmICghcGYtXHUwMDNlcHRwX3R4X3NrYilcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qIFdlIGFscmVhZHkgaGF2ZSBhIGhhbmRsZXIgcm91dGluZSB3aGljaCBpcyBydW4gd2hlbiB3ZSBhcmUgbm90aWZpZWRcbiBcdCAqIG9mIGEgVHggdGltZXN0YW1wIGluIHRoZSBoYXJkd2FyZS4gSWYgd2UgZG9uJiMzOTt0IGdldCBhbiBpbnRlcnJ1cHRcbkBAIC03NDQsMTIgJiM0Mzs3NTgsMTYgQEAgdm9pZCBpNDBlX3B0cF90eF9oYW5nKHN0cnVjdCBpNDBlX3BmICpwZilcbiBcdGlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHBmLVx1MDAzZXB0cF90eF9zdGFydCAmIzQzOyBIWikpIHtcbiBcdFx0c2tiID0gcGYtXHUwMDNlcHRwX3R4X3NrYjtcbiBcdFx0cGYtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4tXHRcdGNsZWFyX2JpdF91bmxvY2soX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgcGYtXHUwMDNlc3RhdGUpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuIFxuLVx0XHQvKiBGcmVlIHRoZSBza2IgYWZ0ZXIgd2UgY2xlYXIgdGhlIGJpdGxvY2sgKi9cbiYjNDM7XHRcdC8qIEZyZWUgdGhlIHNrYiBhZnRlciByZWxlYXNpbmcgdGhlIGxvY2suICovXG4gXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdHBmLVx1MDAzZXR4X2h3dHN0YW1wX3RpbWVvdXRzJiM0MzsmIzQzOztcbiYjNDM7XHRcdHJldHVybjtcbiBcdH1cbiYjNDM7XG4mIzQzO291dF91bmxvY2s6XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbiAvKipcbkBAIC03NjMsMTcgJiM0Mzs3ODEsMjEgQEAgdm9pZCBpNDBlX3B0cF90eF9oYW5nKHN0cnVjdCBpNDBlX3BmICpwZilcbiB2b2lkIGk0MGVfcHRwX3R4X2h3dHN0YW1wKHN0cnVjdCBpNDBlX3BmICpwZilcbiB7XG4gXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHM7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGYtXHUwMDNlcHRwX3R4X3NrYjtcbiBcdHN0cnVjdCBpNDBlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHUzMiBoaSwgbG87XG4gXHR1NjQgbnM7XG4gXG4gXHRpZiAoIXRlc3RfYml0KEk0MEVfRkxBR19QVFBfRU5BLCBwZi1cdTAwM2VmbGFncykgfHwgIXBmLVx1MDAzZXB0cF90eClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogZG9uJiMzOTt0IGF0dGVtcHQgdG8gdGltZXN0YW1wIGlmIHdlIGRvbiYjMzk7dCBoYXZlIGFuIHNrYiAqL1xuLVx0aWYgKCFwZi1cdTAwM2VwdHBfdHhfc2tiKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGYtXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0LyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIHNrYiBiZWZvcmUgYW5vdGhlciBjbGVhbnVwIHBhdGggY2FuIGZyZWUgaXQuICovXG4mIzQzO1x0c2tiID0gcGYtXHUwMDNlcHRwX3R4X3NrYjtcbiYjNDM7XHRpZiAoIXNrYilcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdGxvID0gcmQzMihodywgSTQwRV9QUlRUU1lOX1RYVElNRV9MKTtcbiBcdGhpID0gcmQzMihodywgSTQwRV9QUlRUU1lOX1RYVElNRV9IKTtcbkBAIC03ODEsMTcgJiM0Mzs4MDMsMjEgQEAgdm9pZCBpNDBlX3B0cF90eF9od3RzdGFtcChzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4gXHRucyA9ICgoKHU2NCloaSkgXHUwMDNjXHUwMDNjIDMyKSB8IGxvO1xuIFx0aTQwZV9wdHBfY29udmVydF90b19od3RzdGFtcChcdTAwMjZzaGh3dHN0YW1wcywgbnMpO1xuIFxuLVx0LyogQ2xlYXIgdGhlIGJpdCBsb2NrIGFzIHNvb24gYXMgcG9zc2libGUgYWZ0ZXIgcmVhZGluZyB0aGUgcmVnaXN0ZXIsXG4tXHQgKiBhbmQgcHJpb3IgdG8gbm90aWZ5aW5nIHRoZSBzdGFjayB2aWEgc2tiX3RzdGFtcF90eCgpLiBPdGhlcndpc2Vcbi1cdCAqIGFwcGxpY2F0aW9ucyBtaWdodCB3YWtlIHVwIGFuZCBhdHRlbXB0IHRvIHJlcXVlc3QgYW5vdGhlciB0cmFuc21pdFxuLVx0ICogdGltZXN0YW1wIHByaW9yIHRvIHRoZSBiaXQgbG9jayBiZWluZyBjbGVhcmVkLlxuJiM0MztcdC8qIE1hcmsgdGhlIHNsb3QgYXZhaWxhYmxlIGFzIHNvb24gYXMgcG9zc2libGUgYWZ0ZXIgcmVhZGluZyB0aGVcbiYjNDM7XHQgKiByZWdpc3RlciBhbmQgYmVmb3JlIG5vdGlmeWluZyB0aGUgc3RhY2sgdmlhIHNrYl90c3RhbXBfdHgoKS5cbiYjNDM7XHQgKiBPdGhlcndpc2UsIGFwcGxpY2F0aW9ucyBtaWdodCB3YWtlIHVwIGFuZCByZXF1ZXN0IGFub3RoZXIgdHJhbnNtaXRcbiYjNDM7XHQgKiB0aW1lc3RhbXAgYmVmb3JlIHRoZSBzbG90IGlzIGF2YWlsYWJsZS5cbiBcdCAqL1xuIFx0cGYtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4tXHRjbGVhcl9iaXRfdW5sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4gXG4gXHQvKiBOb3RpZnkgdGhlIHN0YWNrIGFuZCBmcmVlIHRoZSBza2IgYWZ0ZXIgd2UmIzM5O3ZlIHVubG9ja2VkICovXG4gXHRza2JfdHN0YW1wX3R4KHNrYiwgXHUwMDI2c2hod3RzdGFtcHMpO1xuIFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRyZXR1cm47XG4mIzQzO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGYtXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTE4Niw4ICYjNDM7MTIxMiw2IEBAIHN0YXRpYyBpbnQgaTQwZV9wdHBfc2V0X3RpbWVzdGFtcF9tb2RlKHN0cnVjdCBpNDBlX3BmICpwZixcbiBcdHJlZ3ZhbCB8PSAxIFx1MDAzY1x1MDAzYyBJNDBFX1BSVFRTWU5fQ1RMMF9FVkVOVF9JTlRfRU5BX1NISUZUO1xuIFx0d3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7XG4gXG4tXHRJTklUX1dPUksoXHUwMDI2cGYtXHUwMDNlcHRwX2V4dHRzMF93b3JrLCBpNDBlX3B0cF9leHR0czBfd29yayk7XG4tXG4gXHRzd2l0Y2ggKGNvbmZpZy1cdTAwM2V0eF90eXBlKSB7XG4gXHRjYXNlIEhXVFNUQU1QX1RYX09GRjpcbiBcdFx0cGYtXHUwMDNlcHRwX3R4ID0gZmFsc2U7XG5AQCAtMTMxMywxNyAmIzQzOzEzMzcsMjMgQEAgaW50IGk0MGVfcHRwX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0c3RydWN0IGk0MGVfcGYgKnBmID0gbnAtXHUwMDNldnNpLVx1MDAzZWJhY2s7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCF0ZXN0X2JpdChJNDBFX0ZMQUdfUFRQX0VOQSwgcGYtXHUwMDNlZmxhZ3MpKVxuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwZi1cdTAwM2VwdHBfY29uZmlnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYml0KEk0MEVfRkxBR19QVFBfRU5BLCBwZi1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuIFxuIFx0ZXJyID0gaTQwZV9wdHBfc2V0X3RpbWVzdGFtcF9tb2RlKHBmLCBjb25maWcpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFxuIFx0Lyogc2F2ZSB0aGVzZSBzZXR0aW5ncyBmb3IgZnV0dXJlIHJlZmVyZW5jZSAqL1xuIFx0cGYtXHUwMDNldHN0YW1wX2NvbmZpZyA9ICpjb25maWc7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7dW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VwdHBfY29uZmlnX2xvY2spO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKlxuQEAgLTE1MzksMTkgJiM0MzsxNTY5LDMxIEBAIHZvaWQgaTQwZV9wdHBfc3RvcChzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGk0MGVfdnNpICptYWluX3ZzaSA9IGk0MGVfcGZfZ2V0X21haW5fdnNpKHBmKTtcbiBcdHN0cnVjdCBpNDBlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHUzMiByZWd2YWw7XG4gXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwZi1cdTAwM2VwdHBfY29uZmlnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuIFx0Y2xlYXJfYml0KEk0MEVfRkxBR19QVFBfRU5BLCBwZi1cdTAwM2VmbGFncyk7XG4gXHRwZi1cdTAwM2VwdHBfdHggPSBmYWxzZTtcbiYjNDM7XHRza2IgPSBwZi1cdTAwM2VwdHBfdHhfc2tiO1xuJiM0MztcdHBmLVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGYtXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4gXHRwZi1cdTAwM2VwdHBfcnggPSBmYWxzZTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlcHRwX2NvbmZpZ19sb2NrKTtcbiBcbi1cdGlmIChwZi1cdTAwM2VwdHBfdHhfc2tiKSB7XG4tXHRcdHN0cnVjdCBza19idWZmICpza2IgPSBwZi1cdTAwM2VwdHBfdHhfc2tiO1xuJiM0MztcdC8qIFN0b3AgZXh0ZXJuYWwgdGltZXN0YW1wIGV2ZW50cyBiZWZvcmUgdW5yZWdpc3RlcmluZyB0aGUgY2xvY2suICovXG4mIzQzO1x0cmVndmFsID0gcmQzMihodywgSTQwRV9QUlRUU1lOX0NUTDApO1xuJiM0MztcdHJlZ3ZhbCBcdTAwMjY9IH5JNDBFX1BSVFRTWU5fQ1RMMF9FVkVOVF9JTlRfRU5BX01BU0s7XG4mIzQzO1x0d3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7XG4gXG4tXHRcdHBmLVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuLVx0XHRjbGVhcl9iaXRfdW5sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZwZi1cdTAwM2VwdHBfZXh0dHMwX3dvcmspO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tiKVxuIFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuLVx0fVxuIFxuIFx0aWYgKHBmLVx1MDAzZXB0cF9jbG9jaykge1xuIFx0XHRwdHBfY2xvY2tfdW5yZWdpc3RlcihwZi1cdTAwM2VwdHBfY2xvY2spO1xuQEAgLTE1NzAsMTAgJiM0MzsxNjEyLDUgQEAgdm9pZCBpNDBlX3B0cF9zdG9wKHN0cnVjdCBpNDBlX3BmICpwZilcbiBcdHJlZ3ZhbCBcdTAwMjY9IH5JNDBFX1BSVFRTWU5fQVVYXzBfUFRQRkxBR19NQVNLO1xuIFx0d3IzMihodywgSTQwRV9QUlRUU1lOX0FVWF8wKDApLCByZWd2YWwpO1xuIFxuLVx0LyogRGlzYWJsZSBpbnRlcnJ1cHRzICovXG4tXHRyZWd2YWwgPSByZDMyKGh3LCBJNDBFX1BSVFRTWU5fQ1RMMCk7XG4tXHRyZWd2YWwgXHUwMDI2PSB+STQwRV9QUlRUU1lOX0NUTDBfRVZFTlRfSU5UX0VOQV9NQVNLO1xuLVx0d3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7XG4tXG4gXHRpNDBlX3B0cF9mcmVlX3BpbnMocGYpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuaW5kZXggODk0ZjJkMDZkMzlkMC4uZjQzMDU0NmFjZjQyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmNcbkBAIC0zMTk4LDcgJiM0MzszMTk4LDkgQEAgc3RhdGljIGludCBpNDBlX3RzbyhzdHJ1Y3QgaTQwZV90eF9idWZmZXIgKmZpcnN0LCB1OCAqaGRyX2xlbixcbiBzdGF0aWMgaW50IGk0MGVfdHN5bihzdHJ1Y3QgaTQwZV9yaW5nICp0eF9yaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICAgIHUzMiB0eF9mbGFncywgdTY0ICpjZF90eXBlX2NtZF90c29fbXNzKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGk0MGVfcGYgKnBmO1xuJiM0MztcdGludCB0c3luID0gMDtcbiBcbiBcdGlmIChsaWtlbHkoIShza2Jfc2hpbmZvKHNrYiktXHUwMDNldHhfZmxhZ3MgXHUwMDI2IFNLQlRYX0hXX1RTVEFNUCkpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0zMjExLDIzICYjNDM7MzIxMywyOCBAQCBzdGF0aWMgaW50IGk0MGVfdHN5bihzdHJ1Y3QgaTQwZV9yaW5nICp0eF9yaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICogd2UgYXJlIG5vdCBhbHJlYWR5IHRyYW5zbWl0dGluZyBhIHBhY2tldCB0byBiZSB0aW1lc3RhbXBlZFxuIFx0ICovXG4gXHRwZiA9IGk0MGVfbmV0ZGV2X3RvX3BmKHR4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiBcdGlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLVx1MDAzZWZsYWdzKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4tXHRpZiAocGYtXHUwMDNlcHRwX3R4IFx1MDAyNlx1MDAyNlxuLVx0ICAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgcGYtXHUwMDNlc3RhdGUpKSB7XG4mIzQzO1x0aWYgKHBmLVx1MDAzZXB0cF90eCBcdTAwMjZcdTAwMjYgIXBmLVx1MDAzZXB0cF90eF9za2IpIHtcbiBcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZXR4X2ZsYWdzIHw9IFNLQlRYX0lOX1BST0dSRVNTO1xuIFx0XHRwZi1cdTAwM2VwdHBfdHhfc3RhcnQgPSBqaWZmaWVzO1xuIFx0XHRwZi1cdTAwM2VwdHBfdHhfc2tiID0gc2tiX2dldChza2IpO1xuJiM0MztcdFx0dHN5biA9IDE7XG4gXHR9IGVsc2Uge1xuIFx0XHRwZi1cdTAwM2V0eF9od3RzdGFtcF9za2lwcGVkJiM0MzsmIzQzOztcbi1cdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHQqY2RfdHlwZV9jbWRfdHNvX21zcyB8PSAodTY0KUk0MEVfVFhfQ1RYX0RFU0NfVFNZTiBcdTAwM2NcdTAwM2Ncbi1cdFx0XHRcdEk0MEVfVFhEX0NUWF9RVzFfQ01EX1NISUZUO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGYtXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcbiBcbi1cdHJldHVybiAxO1xuJiM0MztcdGlmICh0c3luKVxuJiM0MztcdFx0KmNkX3R5cGVfY21kX3Rzb19tc3MgfD0gKHU2NClJNDBFX1RYX0NUWF9ERVNDX1RTWU4gXHUwMDNjXHUwMDNjXG4mIzQzO1x0XHRcdFx0XHRJNDBFX1RYRF9DVFhfUVcxX0NNRF9TSElGVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRzeW47XG4gfVxuIFxuIC8qKlxuQEAgLTM5NTcsMTAgJiM0MzszOTY0LDIxIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpNDBlX3htaXRfZnJhbWVfcmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIGNsZWFudXBfdHhfdHN0YW1wOlxuIFx0aWYgKHVubGlrZWx5KHR4X2ZsYWdzIFx1MDAyNiBJNDBFX1RYX0ZMQUdTX1RTWU4pKSB7XG4gXHRcdHN0cnVjdCBpNDBlX3BmICpwZiA9IGk0MGVfbmV0ZGV2X3RvX3BmKHR4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRcdHN0cnVjdCBza19idWZmICpwdHBfc2tiID0gTlVMTDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGYtXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdC8qIEFub3RoZXIgY2xlYW51cCBwYXRoIG1heSBoYXZlIGhhbmRlZCB0aGUgc2xvdFxuJiM0MztcdFx0ICogdG8gYSBuZXcgc2tiLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocGYtXHUwMDNlcHRwX3R4X3NrYiA9PSBza2IpIHtcbiYjNDM7XHRcdFx0cHRwX3NrYiA9IHBmLVx1MDAzZXB0cF90eF9za2I7XG4mIzQzO1x0XHRcdHBmLVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuIFxuLVx0XHRkZXZfa2ZyZWVfc2tiX2FueShwZi1cdTAwM2VwdHBfdHhfc2tiKTtcbi1cdFx0cGYtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4tXHRcdGNsZWFyX2JpdF91bmxvY2soX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgcGYtXHUwMDNlc3RhdGUpO1xuJiM0MztcdFx0aWYgKHB0cF9za2IpXG4mIzQzO1x0XHRcdGRldl9rZnJlZV9za2JfYW55KHB0cF9za2IpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIGk0MGUgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChJbnRlbCA0MCBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWMxNTQwMzg2ZDMyY2NmMzFiMjliYTAzZmE1MDIwMDhkZDQ3ZjZmNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMDY6NTk6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZS5oCmluZGV4IDgzZTc4MDkxOWFjOTcuLjE4NDUyZjlhYTc0ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZS5oCkBAIC0xMDEsNyAmIzQzOzEwMSw2IEBAIGVudW0gaTQwZV9zdGF0ZSB7CiAJX19JNDBFX0dMT0JBTF9SRVNFVF9SRVFVRVNURUQsCiAJX19JNDBFX0VNUF9SRVNFVF9JTlRSX1JFQ0VJVkVELAogCV9fSTQwRV9TVVNQRU5ERUQsCi0JX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywKIAlfX0k0MEVfQkFEX0VFUFJPTSwKIAlfX0k0MEVfRE9XTl9SRVFVRVNURUQsCiAJX19JNDBFX0ZEX0ZMVVNIX1JFUVVFU1RFRCwKQEAgLTY2OSwxMiAmIzQzOzY2OCwxNiBAQCBzdHJ1Y3QgaTQwZV9wZiB7CiAJc3RydWN0IHRpbWVzcGVjNjQgcHRwX3ByZXZfaHdfdGltZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHRwX2V4dHRzMF93b3JrOwogCWt0aW1lX3QgcHRwX3Jlc2V0X3N0YXJ0OwomIzQzOwkvKiBTZXJpYWxpemVzIHRpbWVzdGFtcCBjb25maWd1cmF0aW9uIHdpdGggUFRQIHRlYXJkb3duLiAqLwomIzQzOwlzdHJ1Y3QgbXV0ZXggcHRwX2NvbmZpZ19sb2NrOwogCXN0cnVjdCBtdXRleCB0bXJlZ19sb2NrOyAvKiBVc2VkIHRvIHByb3RlY3QgdGhlIFNZU1RJTUUgcmVnaXN0ZXJzLiAqLwogCXUzMiBwdHBfYWRqX211bHQ7CiAJdTMyIHR4X2h3dHN0YW1wX3RpbWVvdXRzOwogCXUzMiB0eF9od3RzdGFtcF9za2lwcGVkOwogCXUzMiByeF9od3RzdGFtcF9jbGVhcmVkOwogCXUzMiBsYXRjaF9ldmVudF9mbGFnczsKJiM0MzsJLyogUHJvdGVjdHMgcHRwX3R4X3NrYiwgd2hpY2ggYWxzbyBpbmRpY2F0ZXMgdGhlIHNsb3Qgc3RhdGUuICovCiYjNDM7CXNwaW5sb2NrX3QgcHRwX3R4X2xvY2s7CiAJc3BpbmxvY2tfdCBwdHBfcnhfbG9jazsgLyogVXNlZCB0byBwcm90ZWN0IFJ4IHRpbWVzdGFtcCByZWdpc3RlcnMuICovCiAJdW5zaWduZWQgbG9uZyBsYXRjaF9ldmVudHNbNF07CiAJYm9vbCBwdHBfdHg7CkBAIC0xMzE1LDYgJiM0MzsxMzE4LDcgQEAgaW50IGk0MGVfcHRwX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwogdm9pZCBpNDBlX3B0cF9zYXZlX2h3X3RpbWUoc3RydWN0IGk0MGVfcGYgKnBmKTsKIHZvaWQgaTQwZV9wdHBfcmVzdG9yZV9od190aW1lKHN0cnVjdCBpNDBlX3BmICpwZik7CiYjNDM7dm9pZCBpNDBlX3B0cF9pbml0X3dvcmsoc3RydWN0IGk0MGVfcGYgKnBmKTsKIHZvaWQgaTQwZV9wdHBfaW5pdChzdHJ1Y3QgaTQwZV9wZiAqcGYpOwogdm9pZCBpNDBlX3B0cF9zdG9wKHN0cnVjdCBpNDBlX3BmICpwZik7CiBpbnQgaTQwZV9wdHBfYWxsb2NfcGlucyhzdHJ1Y3QgaTQwZV9wZiAqcGYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMKaW5kZXggYTA0NjgzMDA0YTU2Ny4uNDhiYTM4YTQ1MmQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jCkBAIC03LDYgJiM0Mzs3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pZl9icmlkZ2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl9tYWN2bGFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dhaXRfYml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQveGRwX3NvY2tfZHJ2LmgmZ3Q7CiAKQEAgLTEwODIyLDcgJiM0MzsxMDgyMyw4IEBAIHN0YXRpYyBpbnQgaTQwZV9yZXNldChzdHJ1Y3QgaTQwZV9wZiAqcGYpCiAJaWYgKHJldCkgewogCQlkZXZfaW5mbygmYW1wO3BmLSZndDtwZGV2LSZndDtkZXYsICYjMzQ7UEYgcmVzZXQgZmFpbGVkLCAlZFxuJiMzNDssIHJldCk7CiAJCXNldF9iaXQoX19JNDBFX1JFU0VUX0ZBSUxFRCwgcGYtJmd0O3N0YXRlKTsKLQkJY2xlYXJfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi0mZ3Q7c3RhdGUpOwomIzQzOwkJY2xlYXJfYW5kX3dha2VfdXBfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLAomIzQzOwkJCQkgICAgICBwZi0mZ3Q7c3RhdGUpOwogCX0gZWxzZSB7CiAJCXBmLSZndDtwZnJfY291bnQmIzQzOyYjNDM7OwogCX0KQEAgLTExMTE1LDcgJiM0MzsxMTExNyw3IEBAIHN0YXRpYyB2b2lkIGk0MGVfcmVidWlsZChzdHJ1Y3QgaTQwZV9wZiAqcGYsIGJvb2wgcmVpbml0LCBib29sIGxvY2tfYWNxdWlyZWQpCiBlbmRfY29yZV9yZXNldDoKIAljbGVhcl9iaXQoX19JNDBFX1JFU0VUX0ZBSUxFRCwgcGYtJmd0O3N0YXRlKTsKIGNsZWFyX3JlY292ZXJ5OgotCWNsZWFyX2JpdChfX0k0MEVfUkVTRVRfUkVDT1ZFUllfUEVORElORywgcGYtJmd0O3N0YXRlKTsKJiM0MzsJY2xlYXJfYW5kX3dha2VfdXBfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi0mZ3Q7c3RhdGUpOwogCWNsZWFyX2JpdChfX0k0MEVfVElNRU9VVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi0mZ3Q7c3RhdGUpOwogfQogCkBAIC0xMjgxOSw2ICYjNDM7MTI4MjEsOSBAQCBzdGF0aWMgaW50IGk0MGVfc3dfaW5pdChzdHJ1Y3QgaTQwZV9wZiAqcGYpCiAJCQkgJiMzNDt0b3RhbC1wb3J0LXNodXRkb3duIHdhcyBlbmFibGVkLCBsaW5rLWRvd24tb24tY2xvc2UgaXMgZm9yY2VkIG9uXG4mIzM0Oyk7CiAJfQogCW11dGV4X2luaXQoJmFtcDtwZi0mZ3Q7c3dpdGNoX211dGV4KTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3BmLSZndDtwdHBfY29uZmlnX2xvY2spOwomIzQzOwlpNDBlX3B0cF9pbml0X3dvcmsocGYpOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3BmLSZndDtwdHBfdHhfbG9jayk7CiAKIHN3X2luaXRfZG9uZToKIAlyZXR1cm4gZXJyOwpAQCAtMTYxNTcsNiAmIzQzOzE2MTYyLDIwIEBAIHN0YXRpYyB2b2lkIGk0MGVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCiAJaTQwZV9kZXZsaW5rX3VucmVnaXN0ZXIocGYpOwogCiYjNDM7CS8qIEludGVycnVwdHMgY2FuIHF1ZXVlIHRoZSBzZXJ2aWNlIHRhc2sgdW50aWwgX19JNDBFX0RPV04gaXMgc2V0LgomIzQzOwkgKiBEaXNhYmxlIGl0IHNvIG5vIHNlcnZpY2Ugd29yayBjYW4gb3V0bGl2ZSB0aGUgUEYuCiYjNDM7CSAqLwomIzQzOwlzZXRfYml0KF9fSTQwRV9TVVNQRU5ERUQsIHBmLSZndDtzdGF0ZSk7CiYjNDM7CWlmIChwZi0mZ3Q7c2VydmljZV90aW1lci5mdW5jdGlvbikKJiM0MzsJCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtwZi0mZ3Q7c2VydmljZV90aW1lcik7CiYjNDM7CWlmIChwZi0mZ3Q7c2VydmljZV90YXNrLmZ1bmMpCiYjNDM7CQlkaXNhYmxlX3dvcmtfc3luYygmYW1wO3BmLSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcmVzZXQgb3duZXIgYmVmb3JlIHRlYXJpbmcgZG93biBkZXZpY2UgcmVzb3VyY2VzLiAqLwomIzQzOwl3YWl0X29uX2JpdF9sb2NrKHBmLSZndDtzdGF0ZSwgX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsCiYjNDM7CQkJIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKJiM0MzsJc2V0X2JpdChfX0k0MEVfSU5fUkVNT1ZFLCBwZi0mZ3Q7c3RhdGUpOwomIzQzOwogCWk0MGVfZGJnX3BmX2V4aXQocGYpOwogCiAJaTQwZV9wdHBfc3RvcChwZik7CkBAIC0xNjE2NSwyNiAmIzQzOzE2MTg0LDEyIEBAIHN0YXRpYyB2b2lkIGk0MGVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCWk0MGVfd3JpdGVfcnhfY3RsKGh3LCBJNDBFX1BGUUZfSEVOQSgwKSwgMCk7CiAJaTQwZV93cml0ZV9yeF9jdGwoaHcsIEk0MEVfUEZRRl9IRU5BKDEpLCAwKTsKIAotCS8qIEdyYWIgX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcgYW5kIHNldCBfX0k0MEVfSU5fUkVNT1ZFCi0JICogZmxhZ3MsIG9uY2UgdGhleSBhcmUgc2V0LCBpNDBlX3JlYnVpbGQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgYXMKLQkgKiBpNDBlX3ByZXBfZm9yX3Jlc2V0IGFsd2F5cyByZXR1cm5zIGVhcmx5LgotCSAqLwotCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi0mZ3Q7c3RhdGUpKQotCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7Ci0Jc2V0X2JpdChfX0k0MEVfSU5fUkVNT1ZFLCBwZi0mZ3Q7c3RhdGUpOwotCiAJaWYgKHRlc3RfYml0KEk0MEVfRkxBR19TUklPVl9FTkEsIHBmLSZndDtmbGFncykpIHsKIAkJc2V0X2JpdChfX0k0MEVfVkZfUkVTRVRTX0RJU0FCTEVELCBwZi0mZ3Q7c3RhdGUpOwogCQlpNDBlX2ZyZWVfdmZzKHBmKTsKIAkJY2xlYXJfYml0KEk0MEVfRkxBR19TUklPVl9FTkEsIHBmLSZndDtmbGFncyk7CiAJfQotCS8qIG5vIG1vcmUgc2NoZWR1bGluZyBvZiBhbnkgdGFzayAqLwotCXNldF9iaXQoX19JNDBFX1NVU1BFTkRFRCwgcGYtJmd0O3N0YXRlKTsKIAlzZXRfYml0KF9fSTQwRV9ET1dOLCBwZi0mZ3Q7c3RhdGUpOwotCWlmIChwZi0mZ3Q7c2VydmljZV90aW1lci5mdW5jdGlvbikKLQkJdGltZXJfc2h1dGRvd25fc3luYygmYW1wO3BmLSZndDtzZXJ2aWNlX3RpbWVyKTsKLQlpZiAocGYtJmd0O3NlcnZpY2VfdGFzay5mdW5jKQotCQljYW5jZWxfd29ya19zeW5jKCZhbXA7cGYtJmd0O3NlcnZpY2VfdGFzayk7CiAKIAlpZiAodGVzdF9iaXQoX19JNDBFX1JFQ09WRVJZX01PREUsIHBmLSZndDtzdGF0ZSkpIHsKIAkJc3RydWN0IGk0MGVfdnNpICp2c2kgPSBwZi0mZ3Q7dnNpWzBdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jCmluZGV4IGZmNjJiNWYyYzgxNTAuLjVmMTVhM2Q0YTkxZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfcHRwLmMKQEAgLTE2OSw2ICYjNDM7MTY5LDE3IEBAIHN0YXRpYyB2b2lkIGk0MGVfcHRwX2V4dHRzMF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlwdHBfY2xvY2tfZXZlbnQocGYtJmd0O3B0cF9jbG9jaywgJmFtcDtldmVudCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpNDBlX3B0cF9pbml0X3dvcmsgLSBJbml0aWFsaXplIFBUUCB3b3JrIGZvciBhIFBGCiYjNDM7ICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogSW5pdGlhbGl6ZSB3b3JrIHdoaWNoIG11c3QgcmVtYWluIHZhbGlkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIFBGLgomIzQzOyAqLwomIzQzO3ZvaWQgaTQwZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpNDBlX3BmICpwZikKJiM0Mzt7CiYjNDM7CUlOSVRfV09SSygmYW1wO3BmLSZndDtwdHBfZXh0dHMwX3dvcmssIGk0MGVfcHRwX2V4dHRzMF93b3JrKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGk0MGVfaXNfcHRwX3Bpbl9kZXYgLSBjaGVjayBpZiBkZXZpY2Ugc3VwcG9ydHMgUFRQIHBpbnMKICAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlCkBAIC03MjgsMTQgJiM0Mzs3MzksMTcgQEAgdm9pZCBpNDBlX3B0cF9yeF9oYW5nKHN0cnVjdCBpNDBlX3BmICpwZikKICAqKi8KIHZvaWQgaTQwZV9wdHBfdHhfaGFuZyhzdHJ1Y3QgaTQwZV9wZiAqcGYpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCWlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLSZndDtmbGFncykgfHwgIXBmLSZndDtwdHBfdHgpCiAJCXJldHVybjsKIAomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3BmLSZndDtwdHBfdHhfbG9jaywgZmxhZ3MpOwomIzQzOwogCS8qIE5vdGhpbmcgdG8gZG8gaWYgd2UmIzM5O3JlIG5vdCBhbHJlYWR5IHdhaXRpbmcgZm9yIGEgdGltZXN0YW1wICovCi0JaWYgKCF0ZXN0X2JpdChfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLCBwZi0mZ3Q7c3RhdGUpKQotCQlyZXR1cm47CiYjNDM7CWlmICghcGYtJmd0O3B0cF90eF9za2IpCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKiBXZSBhbHJlYWR5IGhhdmUgYSBoYW5kbGVyIHJvdXRpbmUgd2hpY2ggaXMgcnVuIHdoZW4gd2UgYXJlIG5vdGlmaWVkCiAJICogb2YgYSBUeCB0aW1lc3RhbXAgaW4gdGhlIGhhcmR3YXJlLiBJZiB3ZSBkb24mIzM5O3QgZ2V0IGFuIGludGVycnVwdApAQCAtNzQ0LDEyICYjNDM7NzU4LDE2IEBAIHZvaWQgaTQwZV9wdHBfdHhfaGFuZyhzdHJ1Y3QgaTQwZV9wZiAqcGYpCiAJaWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMocGYtJmd0O3B0cF90eF9zdGFydCAmIzQzOyBIWikpIHsKIAkJc2tiID0gcGYtJmd0O3B0cF90eF9za2I7CiAJCXBmLSZndDtwdHBfdHhfc2tiID0gTlVMTDsKLQkJY2xlYXJfYml0X3VubG9jayhfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLCBwZi0mZ3Q7c3RhdGUpOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BmLSZndDtwdHBfdHhfbG9jaywgZmxhZ3MpOwogCi0JCS8qIEZyZWUgdGhlIHNrYiBhZnRlciB3ZSBjbGVhciB0aGUgYml0bG9jayAqLwomIzQzOwkJLyogRnJlZSB0aGUgc2tiIGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jay4gKi8KIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcGYtJmd0O3R4X2h3dHN0YW1wX3RpbWVvdXRzJiM0MzsmIzQzOzsKJiM0MzsJCXJldHVybjsKIAl9CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BmLSZndDtwdHBfdHhfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKQEAgLTc2MywxNyAmIzQzOzc4MSwyMSBAQCB2b2lkIGk0MGVfcHRwX3R4X2hhbmcoc3RydWN0IGk0MGVfcGYgKnBmKQogdm9pZCBpNDBlX3B0cF90eF9od3RzdGFtcChzdHJ1Y3QgaTQwZV9wZiAqcGYpCiB7CiAJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzOwotCXN0cnVjdCBza19idWZmICpza2IgPSBwZi0mZ3Q7cHRwX3R4X3NrYjsKIAlzdHJ1Y3QgaTQwZV9odyAqaHcgPSAmYW1wO3BmLSZndDtodzsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MzIgaGksIGxvOwogCXU2NCBuczsKIAogCWlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLSZndDtmbGFncykgfHwgIXBmLSZndDtwdHBfdHgpCiAJCXJldHVybjsKIAotCS8qIGRvbiYjMzk7dCBhdHRlbXB0IHRvIHRpbWVzdGFtcCBpZiB3ZSBkb24mIzM5O3QgaGF2ZSBhbiBza2IgKi8KLQlpZiAoIXBmLSZndDtwdHBfdHhfc2tiKQotCQlyZXR1cm47CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cGYtJmd0O3B0cF90eF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CS8qIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBza2IgYmVmb3JlIGFub3RoZXIgY2xlYW51cCBwYXRoIGNhbiBmcmVlIGl0LiAqLwomIzQzOwlza2IgPSBwZi0mZ3Q7cHRwX3R4X3NrYjsKJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiAKIAlsbyA9IHJkMzIoaHcsIEk0MEVfUFJUVFNZTl9UWFRJTUVfTCk7CiAJaGkgPSByZDMyKGh3LCBJNDBFX1BSVFRTWU5fVFhUSU1FX0gpOwpAQCAtNzgxLDE3ICYjNDM7ODAzLDIxIEBAIHZvaWQgaTQwZV9wdHBfdHhfaHd0c3RhbXAoc3RydWN0IGk0MGVfcGYgKnBmKQogCW5zID0gKCgodTY0KWhpKSAmbHQ7Jmx0OyAzMikgfCBsbzsKIAlpNDBlX3B0cF9jb252ZXJ0X3RvX2h3dHN0YW1wKCZhbXA7c2hod3RzdGFtcHMsIG5zKTsKIAotCS8qIENsZWFyIHRoZSBiaXQgbG9jayBhcyBzb29uIGFzIHBvc3NpYmxlIGFmdGVyIHJlYWRpbmcgdGhlIHJlZ2lzdGVyLAotCSAqIGFuZCBwcmlvciB0byBub3RpZnlpbmcgdGhlIHN0YWNrIHZpYSBza2JfdHN0YW1wX3R4KCkuIE90aGVyd2lzZQotCSAqIGFwcGxpY2F0aW9ucyBtaWdodCB3YWtlIHVwIGFuZCBhdHRlbXB0IHRvIHJlcXVlc3QgYW5vdGhlciB0cmFuc21pdAotCSAqIHRpbWVzdGFtcCBwcmlvciB0byB0aGUgYml0IGxvY2sgYmVpbmcgY2xlYXJlZC4KJiM0MzsJLyogTWFyayB0aGUgc2xvdCBhdmFpbGFibGUgYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciByZWFkaW5nIHRoZQomIzQzOwkgKiByZWdpc3RlciBhbmQgYmVmb3JlIG5vdGlmeWluZyB0aGUgc3RhY2sgdmlhIHNrYl90c3RhbXBfdHgoKS4KJiM0MzsJICogT3RoZXJ3aXNlLCBhcHBsaWNhdGlvbnMgbWlnaHQgd2FrZSB1cCBhbmQgcmVxdWVzdCBhbm90aGVyIHRyYW5zbWl0CiYjNDM7CSAqIHRpbWVzdGFtcCBiZWZvcmUgdGhlIHNsb3QgaXMgYXZhaWxhYmxlLgogCSAqLwogCXBmLSZndDtwdHBfdHhfc2tiID0gTlVMTDsKLQljbGVhcl9iaXRfdW5sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLSZndDtzdGF0ZSk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwZi0mZ3Q7cHRwX3R4X2xvY2ssIGZsYWdzKTsKIAogCS8qIE5vdGlmeSB0aGUgc3RhY2sgYW5kIGZyZWUgdGhlIHNrYiBhZnRlciB3ZSYjMzk7dmUgdW5sb2NrZWQgKi8KIAlza2JfdHN0YW1wX3R4KHNrYiwgJmFtcDtzaGh3dHN0YW1wcyk7CiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKJiM0MzsJcmV0dXJuOwomIzQzOwomIzQzO291dF91bmxvY2s6CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwZi0mZ3Q7cHRwX3R4X2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCkBAIC0xMTg2LDggJiM0MzsxMjEyLDYgQEAgc3RhdGljIGludCBpNDBlX3B0cF9zZXRfdGltZXN0YW1wX21vZGUoc3RydWN0IGk0MGVfcGYgKnBmLAogCXJlZ3ZhbCB8PSAxICZsdDsmbHQ7IEk0MEVfUFJUVFNZTl9DVEwwX0VWRU5UX0lOVF9FTkFfU0hJRlQ7CiAJd3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7CiAKLQlJTklUX1dPUksoJmFtcDtwZi0mZ3Q7cHRwX2V4dHRzMF93b3JrLCBpNDBlX3B0cF9leHR0czBfd29yayk7Ci0KIAlzd2l0Y2ggKGNvbmZpZy0mZ3Q7dHhfdHlwZSkgewogCWNhc2UgSFdUU1RBTVBfVFhfT0ZGOgogCQlwZi0mZ3Q7cHRwX3R4ID0gZmFsc2U7CkBAIC0xMzEzLDE3ICYjNDM7MTMzNywyMyBAQCBpbnQgaTQwZV9wdHBfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJc3RydWN0IGk0MGVfcGYgKnBmID0gbnAtJmd0O3ZzaS0mZ3Q7YmFjazsKIAlpbnQgZXJyOwogCi0JaWYgKCF0ZXN0X2JpdChJNDBFX0ZMQUdfUFRQX0VOQSwgcGYtJmd0O2ZsYWdzKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cGYtJmd0O3B0cF9jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLSZndDtmbGFncykpIHsKJiM0MzsJCWVyciA9IC1FT1BOT1RTVVBQOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KIAogCWVyciA9IGk0MGVfcHRwX3NldF90aW1lc3RhbXBfbW9kZShwZiwgY29uZmlnKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byB1bmxvY2s7CiAKIAkvKiBzYXZlIHRoZXNlIHNldHRpbmdzIGZvciBmdXR1cmUgcmVmZXJlbmNlICovCiAJcGYtJmd0O3RzdGFtcF9jb25maWcgPSAqY29uZmlnOwogCi0JcmV0dXJuIDA7CiYjNDM7dW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwZi0mZ3Q7cHRwX2NvbmZpZ19sb2NrKTsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogLyoqCkBAIC0xNTM5LDE5ICYjNDM7MTU2OSwzMSBAQCB2b2lkIGk0MGVfcHRwX3N0b3Aoc3RydWN0IGk0MGVfcGYgKnBmKQogewogCXN0cnVjdCBpNDBlX3ZzaSAqbWFpbl92c2kgPSBpNDBlX3BmX2dldF9tYWluX3ZzaShwZik7CiAJc3RydWN0IGk0MGVfaHcgKmh3ID0gJmFtcDtwZi0mZ3Q7aHc7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiAJdTMyIHJlZ3ZhbDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7cGYtJmd0O3B0cF9jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cGYtJmd0O3B0cF90eF9sb2NrLCBmbGFncyk7CiAJY2xlYXJfYml0KEk0MEVfRkxBR19QVFBfRU5BLCBwZi0mZ3Q7ZmxhZ3MpOwogCXBmLSZndDtwdHBfdHggPSBmYWxzZTsKJiM0MzsJc2tiID0gcGYtJmd0O3B0cF90eF9za2I7CiYjNDM7CXBmLSZndDtwdHBfdHhfc2tiID0gTlVMTDsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BmLSZndDtwdHBfdHhfbG9jaywgZmxhZ3MpOwomIzQzOwogCXBmLSZndDtwdHBfcnggPSBmYWxzZTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O3B0cF9jb25maWdfbG9jayk7CiAKLQlpZiAocGYtJmd0O3B0cF90eF9za2IpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBmLSZndDtwdHBfdHhfc2tiOwomIzQzOwkvKiBTdG9wIGV4dGVybmFsIHRpbWVzdGFtcCBldmVudHMgYmVmb3JlIHVucmVnaXN0ZXJpbmcgdGhlIGNsb2NrLiAqLwomIzQzOwlyZWd2YWwgPSByZDMyKGh3LCBJNDBFX1BSVFRTWU5fQ1RMMCk7CiYjNDM7CXJlZ3ZhbCAmYW1wOz0gfkk0MEVfUFJUVFNZTl9DVEwwX0VWRU5UX0lOVF9FTkFfTUFTSzsKJiM0MzsJd3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7CiAKLQkJcGYtJmd0O3B0cF90eF9za2IgPSBOVUxMOwotCQljbGVhcl9iaXRfdW5sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLSZndDtzdGF0ZSk7CiYjNDM7CWRpc2FibGVfd29ya19zeW5jKCZhbXA7cGYtJmd0O3B0cF9leHR0czBfd29yayk7CiYjNDM7CiYjNDM7CWlmIChza2IpCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfQogCiAJaWYgKHBmLSZndDtwdHBfY2xvY2spIHsKIAkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIocGYtJmd0O3B0cF9jbG9jayk7CkBAIC0xNTcwLDEwICYjNDM7MTYxMiw1IEBAIHZvaWQgaTQwZV9wdHBfc3RvcChzdHJ1Y3QgaTQwZV9wZiAqcGYpCiAJcmVndmFsICZhbXA7PSB+STQwRV9QUlRUU1lOX0FVWF8wX1BUUEZMQUdfTUFTSzsKIAl3cjMyKGh3LCBJNDBFX1BSVFRTWU5fQVVYXzAoMCksIHJlZ3ZhbCk7CiAKLQkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KLQlyZWd2YWwgPSByZDMyKGh3LCBJNDBFX1BSVFRTWU5fQ1RMMCk7Ci0JcmVndmFsICZhbXA7PSB+STQwRV9QUlRUU1lOX0NUTDBfRVZFTlRfSU5UX0VOQV9NQVNLOwotCXdyMzIoaHcsIEk0MEVfUFJUVFNZTl9DVEwwLCByZWd2YWwpOwotCiAJaTQwZV9wdHBfZnJlZV9waW5zKHBmKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jCmluZGV4IDg5NGYyZDA2ZDM5ZDAuLmY0MzA1NDZhY2Y0MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYwpAQCAtMzE5OCw3ICYjNDM7MzE5OCw5IEBAIHN0YXRpYyBpbnQgaTQwZV90c28oc3RydWN0IGk0MGVfdHhfYnVmZmVyICpmaXJzdCwgdTggKmhkcl9sZW4sCiBzdGF0aWMgaW50IGk0MGVfdHN5bihzdHJ1Y3QgaTQwZV9yaW5nICp0eF9yaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIHUzMiB0eF9mbGFncywgdTY0ICpjZF90eXBlX2NtZF90c29fbXNzKQogewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpNDBlX3BmICpwZjsKJiM0MzsJaW50IHRzeW4gPSAwOwogCiAJaWYgKGxpa2VseSghKHNrYl9zaGluZm8oc2tiKS0mZ3Q7dHhfZmxhZ3MgJmFtcDsgU0tCVFhfSFdfVFNUQU1QKSkpCiAJCXJldHVybiAwOwpAQCAtMzIxMSwyMyAmIzQzOzMyMTMsMjggQEAgc3RhdGljIGludCBpNDBlX3RzeW4oc3RydWN0IGk0MGVfcmluZyAqdHhfcmluZywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKiB3ZSBhcmUgbm90IGFscmVhZHkgdHJhbnNtaXR0aW5nIGEgcGFja2V0IHRvIGJlIHRpbWVzdGFtcGVkCiAJICovCiAJcGYgPSBpNDBlX25ldGRldl90b19wZih0eF9yaW5nLSZndDtuZXRkZXYpOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3BmLSZndDtwdHBfdHhfbG9jaywgZmxhZ3MpOwomIzQzOwogCWlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLSZndDtmbGFncykpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwogCi0JaWYgKHBmLSZndDtwdHBfdHggJmFtcDsmYW1wOwotCSAgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLSZndDtzdGF0ZSkpIHsKJiM0MzsJaWYgKHBmLSZndDtwdHBfdHggJmFtcDsmYW1wOyAhcGYtJmd0O3B0cF90eF9za2IpIHsKIAkJc2tiX3NoaW5mbyhza2IpLSZndDt0eF9mbGFncyB8PSBTS0JUWF9JTl9QUk9HUkVTUzsKIAkJcGYtJmd0O3B0cF90eF9zdGFydCA9IGppZmZpZXM7CiAJCXBmLSZndDtwdHBfdHhfc2tiID0gc2tiX2dldChza2IpOwomIzQzOwkJdHN5biA9IDE7CiAJfSBlbHNlIHsKIAkJcGYtJmd0O3R4X2h3dHN0YW1wX3NraXBwZWQmIzQzOyYjNDM7OwotCQlyZXR1cm4gMDsKIAl9CiAKLQkqY2RfdHlwZV9jbWRfdHNvX21zcyB8PSAodTY0KUk0MEVfVFhfQ1RYX0RFU0NfVFNZTiAmbHQ7Jmx0OwotCQkJCUk0MEVfVFhEX0NUWF9RVzFfQ01EX1NISUZUOwomIzQzO291dF91bmxvY2s6CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwZi0mZ3Q7cHRwX3R4X2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiAxOwomIzQzOwlpZiAodHN5bikKJiM0MzsJCSpjZF90eXBlX2NtZF90c29fbXNzIHw9ICh1NjQpSTQwRV9UWF9DVFhfREVTQ19UU1lOICZsdDsmbHQ7CiYjNDM7CQkJCQlJNDBFX1RYRF9DVFhfUVcxX0NNRF9TSElGVDsKJiM0MzsKJiM0MzsJcmV0dXJuIHRzeW47CiB9CiAKIC8qKgpAQCAtMzk1NywxMCAmIzQzOzM5NjQsMjEgQEAgc3RhdGljIG5ldGRldl90eF90IGk0MGVfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsCiBjbGVhbnVwX3R4X3RzdGFtcDoKIAlpZiAodW5saWtlbHkodHhfZmxhZ3MgJmFtcDsgSTQwRV9UWF9GTEFHU19UU1lOKSkgewogCQlzdHJ1Y3QgaTQwZV9wZiAqcGYgPSBpNDBlX25ldGRldl90b19wZih0eF9yaW5nLSZndDtuZXRkZXYpOwomIzQzOwkJc3RydWN0IHNrX2J1ZmYgKnB0cF9za2IgPSBOVUxMOwomIzQzOwkJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cGYtJmd0O3B0cF90eF9sb2NrLCBmbGFncyk7CiYjNDM7CQkvKiBBbm90aGVyIGNsZWFudXAgcGF0aCBtYXkgaGF2ZSBoYW5kZWQgdGhlIHNsb3QKJiM0MzsJCSAqIHRvIGEgbmV3IHNrYi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHBmLSZndDtwdHBfdHhfc2tiID09IHNrYikgewomIzQzOwkJCXB0cF9za2IgPSBwZi0mZ3Q7cHRwX3R4X3NrYjsKJiM0MzsJCQlwZi0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cGYtJmd0O3B0cF90eF9sb2NrLCBmbGFncyk7CiAKLQkJZGV2X2tmcmVlX3NrYl9hbnkocGYtJmd0O3B0cF90eF9za2IpOwotCQlwZi0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7Ci0JCWNsZWFyX2JpdF91bmxvY2soX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgcGYtJmd0O3N0YXRlKTsKJiM0MzsJCWlmIChwdHBfc2tiKQomIzQzOwkJCWRldl9rZnJlZV9za2JfYW55KHB0cF9za2IpOwogCX0KIAogCXJldHVybiBORVRERVZfVFhfT0s7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNzUKCQkJCQkJCW91dHB1dDogOTAKCQkJCQkJCXRob3VnaHRzOiAxMDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBpNDBlIERyaXZlciBQYXRjaCBhbmQgRnV6emluZyBGZWFzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIHRoZSBgaTQwZWAgZHJpdmVyIOKAkyBJbnRlbCYjMzk7cyA0MCBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIsIFhMNzEwIEZhbWlseS4gUmlnaHQgYXdheSwgSSBzZWUgY2hhbmdlcyBpbnZvbHZpbmcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM6IHJlcGxhY2luZyBhIGJpdCBmbGFnIChgX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTU2ApIHdpdGggYSBzcGlubG9jayAoYHB0cF90eF9sb2NrYCksIGludHJvZHVjaW5nIGEgbXV0ZXggKGBwdHBfY29uZmlnX2xvY2tgKSwgYW5kIHR3ZWFrcyB0byBob3cgcmVzZXQgcmVjb3ZlcnkgaXMgaGFuZGxlZCAoYGNsZWFyX2FuZF93YWtlX3VwX2JpdGAsIGB3YWl0X29uX2JpdF9sb2NrYCkuIEl0IGFsc28gaW5jbHVkZXMgbW9kaWZpY2F0aW9ucyB0byB0aGUgYGk0MGVfcmVtb3ZlYCBmdW5jdGlvbiB0byBzYWZlbHkgZGlzYWJsZSBzZXJ2aWNlcyBiZWZvcmUgcmVzb3VyY2UgdGVhcmRvd24uCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZ1enphYmxlLiBTaW5jZSBpdCYjMzk7cyBhbiBFdGhlcm5ldCBkcml2ZXIsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdmlydHVhbGl6YXRpb24gYW5kIHdoZXRoZXIgSSBjYW4gdGVzdCB0aGlzIHdpdGhpbiBRRU1VLiBCdXQgd2FpdCwgYGk0MGVgIGlzIGEgKnBoeXNpY2FsKiBFdGhlcm5ldCBkcml2ZXIuIERvZXMgUUVNVSBldmVuIGVtdWxhdGUgYGk0MGVgIGhhcmR3YXJlPyBJIG5lZWQgdG8gY2hlY2suCgpMZXQgbWUgcmVjYWxsIHdoYXQgUUVNVSBvZmZlcnMuIEl0IGhhcyBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGB2bXhuZXQzYCwgYHJ0bDgxMzlgLCBhbmQgYHZpcnRpby1uZXRgLiBCdXQsIGRvIHRoZXkgZW11bGF0ZSBgaTQwZWAgc3BlY2lmaWNhbGx5PyBObywgYSBxdWljayBjaGVjayBvZiBRRU1VJiMzOTtzIGRldmljZSBsaXN0IGNvbmZpcm1zIHRoYXQgdGhlcmUmIzM5O3Mgbm8gYGk0MGVgIGVtdWxhdGlvbi4gT2theSwgc28gaXQgbG9va3MgbGlrZSBRRU1VIGRvZXMgKm5vdCogb2ZmZXIgYW4gZW11bGF0ZWQgdmVyc2lvbiBvZiB0aGUgaTQwZS4KCkkgY29uc2lkZXJlZCBkaWdnaW5nIGludG8gdGhlIFFFTVUgc291cmNlLCBidXQgSSBkb24mIzM5O3QgaGF2ZSBpdCBhdCBoYW5kIHJpZ2h0IG5vdy4gTW9yZSBpbXBvcnRhbnRseSwgaXQmIzM5O3MgY2xlYXIgdGhhdCBpdCYjMzk7cyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgcmVzaWRpbmcgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvYC4gR2l2ZW4gaXRzIHBoeXNpY2FsIGhhcmR3YXJlIG5hdHVyZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBmdXp6aW5nIGZlYXNpYmlsaXR5IHF1ZXN0aW9uIGFzIGEgKnZpcnR1YWxpemVkKiBlbnZpcm9ubWVudC4KCkxvb2tpbmcgYmFjayBhdCB0aGUgcmVxdWlyZW1lbnRzLCBJIHJlbWVtYmVyIHRoZSBjcml0ZXJpYTogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpUaGlzIGV4YWN0bHkgZml0cyB0aGUgYmlsbC4gVGhlIGBpNDBlYCBkcml2ZXIgaXMgYSBoYXJkd2FyZSBkcml2ZXIgZm9yIGEgcGh5c2ljYWwgUENJZSBjYXJkLiBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIGBpNDBlYCBoYXJkd2FyZS4gQW5kIHRoZXJlZm9yZSwgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gd29uJiMzOTt0IHdvcmsgZm9yIHRoaXMgZHJpdmVyLgoKVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHRoYXQgbm8gb3RoZXIgdmlydHVhbGl6YXRpb24gb3B0aW9uIGNhbiByZWFjaCB0aGlzLiBJIHNlYXJjaGVkIG15IG1lbW9yaWVzIHRvIGNoZWNrIGZvciBmdXp6aW5nIG9mIGBpNDBlYCB0aHJvdWdoIHN5emthbGxlci4gU2luY2UgdGhlIGRldmljZSBpc24mIzM5O3QgdmlydHVhbGl6ZWQsIHN5emthbGxlciBnZW5lcmFsbHkgd29uJiMzOTt0IGZ1enogYGk0MGVgLiBJIHRoaW5rIEkgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZS4KCkkmIzM5O2xsIGNoZWNrIHNvbWUgbW9yZSBieSBjaGVja2luZyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG1vY2tzIG9yIHNpbWlsYXIuCgpOb3BlLCBubyBzdWNoIHRoaW5ncy4gSXQmIzM5O3MgYSBzdGFuZGFyZCBJbnRlbCBFdGhlcm5ldCBkcml2ZXIuCgpUaGUgcGF0Y2ggZGVmaW5pdGl2ZWx5IG1vZGlmaWVzIGEgaGFyZHdhcmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvYC4gVGhhdCBtZWFucyBJIGhhdmUgdG8gcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciAoSW50ZWwgaTQwZSkgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFRoaXMgY29kZSBpcyBpbmFjY2Vzc2libGUgdG8gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwLiBJJiMzOTttIGdvaW5nIHRvIHNldCBXb3J0aEZ1enppbmc9ZmFsc2UuIExldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIGk0MGUgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChJbnRlbCA0MCBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgaTQwZSBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKEludGVsIDQwIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlcikgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdXNlZCBmb3IgZnV6emluZy4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNjo1OTowNS40NjY0Mzc4MDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI0MDUxODE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIGk0MGUgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChJbnRlbCA0MCBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNjo1OTowNS40NjY0NDQzMDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDQyNjM0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1YzE1NDAzODZkMzJjY2YzMWIyOWJhMDNmYTUwMjAwOGRkNDdmNmY1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMDY6NTk6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGUuaFxcbmluZGV4IDgzZTc4MDkxOWFjOTcuLjE4NDUyZjlhYTc0ZTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGUuaFxcbkBAIC0xMDEsNyArMTAxLDYgQEAgZW51bSBpNDBlX3N0YXRlIHtcXG4gXFx0X19JNDBFX0dMT0JBTF9SRVNFVF9SRVFVRVNURUQsXFxuIFxcdF9fSTQwRV9FTVBfUkVTRVRfSU5UUl9SRUNFSVZFRCxcXG4gXFx0X19JNDBFX1NVU1BFTkRFRCxcXG4tXFx0X19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUyxcXG4gXFx0X19JNDBFX0JBRF9FRVBST00sXFxuIFxcdF9fSTQwRV9ET1dOX1JFUVVFU1RFRCxcXG4gXFx0X19JNDBFX0ZEX0ZMVVNIX1JFUVVFU1RFRCxcXG5AQCAtNjY5LDEyICs2NjgsMTYgQEAgc3RydWN0IGk0MGVfcGYge1xcbiBcXHRzdHJ1Y3QgdGltZXNwZWM2NCBwdHBfcHJldl9od190aW1lO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHRwX2V4dHRzMF93b3JrO1xcbiBcXHRrdGltZV90IHB0cF9yZXNldF9zdGFydDtcXG4rXFx0LyogU2VyaWFsaXplcyB0aW1lc3RhbXAgY29uZmlndXJhdGlvbiB3aXRoIFBUUCB0ZWFyZG93bi4gKi9cXG4rXFx0c3RydWN0IG11dGV4IHB0cF9jb25maWdfbG9jaztcXG4gXFx0c3RydWN0IG11dGV4IHRtcmVnX2xvY2s7IC8qIFVzZWQgdG8gcHJvdGVjdCB0aGUgU1lTVElNRSByZWdpc3RlcnMuICovXFxuIFxcdHUzMiBwdHBfYWRqX211bHQ7XFxuIFxcdHUzMiB0eF9od3RzdGFtcF90aW1lb3V0cztcXG4gXFx0dTMyIHR4X2h3dHN0YW1wX3NraXBwZWQ7XFxuIFxcdHUzMiByeF9od3RzdGFtcF9jbGVhcmVkO1xcbiBcXHR1MzIgbGF0Y2hfZXZlbnRfZmxhZ3M7XFxuK1xcdC8qIFByb3RlY3RzIHB0cF90eF9za2IsIHdoaWNoIGFsc28gaW5kaWNhdGVzIHRoZSBzbG90IHN0YXRlLiAqL1xcbitcXHRzcGlubG9ja190IHB0cF90eF9sb2NrO1xcbiBcXHRzcGlubG9ja190IHB0cF9yeF9sb2NrOyAvKiBVc2VkIHRvIHByb3RlY3QgUnggdGltZXN0YW1wIHJlZ2lzdGVycy4gKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBsYXRjaF9ldmVudHNbNF07XFxuIFxcdGJvb2wgcHRwX3R4O1xcbkBAIC0xMzE1LDYgKzEzMTgsNyBAQCBpbnQgaTQwZV9wdHBfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gdm9pZCBpNDBlX3B0cF9zYXZlX2h3X3RpbWUoc3RydWN0IGk0MGVfcGYgKnBmKTtcXG4gdm9pZCBpNDBlX3B0cF9yZXN0b3JlX2h3X3RpbWUoc3RydWN0IGk0MGVfcGYgKnBmKTtcXG4rdm9pZCBpNDBlX3B0cF9pbml0X3dvcmsoc3RydWN0IGk0MGVfcGYgKnBmKTtcXG4gdm9pZCBpNDBlX3B0cF9pbml0KHN0cnVjdCBpNDBlX3BmICpwZik7XFxuIHZvaWQgaTQwZV9wdHBfc3RvcChzdHJ1Y3QgaTQwZV9wZiAqcGYpO1xcbiBpbnQgaTQwZV9wdHBfYWxsb2NfcGlucyhzdHJ1Y3QgaTQwZV9wZiAqcGYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xcbmluZGV4IGEwNDY4MzAwNGE1NjcuLjQ4YmEzOGE0NTJkMGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcXG5AQCAtNyw2ICs3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfbWFjdmxhbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0X2JpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC94ZHBfc29ja19kcnYuaFxcdTAwM2VcXG4gXFxuQEAgLTEwODIyLDcgKzEwODIzLDggQEAgc3RhdGljIGludCBpNDBlX3Jlc2V0KHN0cnVjdCBpNDBlX3BmICpwZilcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcIlBGIHJlc2V0IGZhaWxlZCwgJWRcXFxcblxcXCIsIHJldCk7XFxuIFxcdFxcdHNldF9iaXQoX19JNDBFX1JFU0VUX0ZBSUxFRCwgcGYtXFx1MDAzZXN0YXRlKTtcXG4tXFx0XFx0Y2xlYXJfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHRjbGVhcl9hbmRfd2FrZV91cF9iaXQoX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBmLVxcdTAwM2VzdGF0ZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHBmLVxcdTAwM2VwZnJfY291bnQrKztcXG4gXFx0fVxcbkBAIC0xMTExNSw3ICsxMTExNyw3IEBAIHN0YXRpYyB2b2lkIGk0MGVfcmVidWlsZChzdHJ1Y3QgaTQwZV9wZiAqcGYsIGJvb2wgcmVpbml0LCBib29sIGxvY2tfYWNxdWlyZWQpXFxuIGVuZF9jb3JlX3Jlc2V0OlxcbiBcXHRjbGVhcl9iaXQoX19JNDBFX1JFU0VUX0ZBSUxFRCwgcGYtXFx1MDAzZXN0YXRlKTtcXG4gY2xlYXJfcmVjb3Zlcnk6XFxuLVxcdGNsZWFyX2JpdChfX0k0MEVfUkVTRVRfUkVDT1ZFUllfUEVORElORywgcGYtXFx1MDAzZXN0YXRlKTtcXG4rXFx0Y2xlYXJfYW5kX3dha2VfdXBfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi1cXHUwMDNlc3RhdGUpO1xcbiBcXHRjbGVhcl9iaXQoX19JNDBFX1RJTUVPVVRfUkVDT1ZFUllfUEVORElORywgcGYtXFx1MDAzZXN0YXRlKTtcXG4gfVxcbiBcXG5AQCAtMTI4MTksNiArMTI4MjEsOSBAQCBzdGF0aWMgaW50IGk0MGVfc3dfaW5pdChzdHJ1Y3QgaTQwZV9wZiAqcGYpXFxuIFxcdFxcdFxcdCBcXFwidG90YWwtcG9ydC1zaHV0ZG93biB3YXMgZW5hYmxlZCwgbGluay1kb3duLW9uLWNsb3NlIGlzIGZvcmNlZCBvblxcXFxuXFxcIik7XFxuIFxcdH1cXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2cGYtXFx1MDAzZXN3aXRjaF9tdXRleCk7XFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnBmLVxcdTAwM2VwdHBfY29uZmlnX2xvY2spO1xcbitcXHRpNDBlX3B0cF9pbml0X3dvcmsocGYpO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cGYtXFx1MDAzZXB0cF90eF9sb2NrKTtcXG4gXFxuIHN3X2luaXRfZG9uZTpcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMTYxNTcsNiArMTYxNjIsMjAgQEAgc3RhdGljIHZvaWQgaTQwZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHRpNDBlX2RldmxpbmtfdW5yZWdpc3RlcihwZik7XFxuIFxcbitcXHQvKiBJbnRlcnJ1cHRzIGNhbiBxdWV1ZSB0aGUgc2VydmljZSB0YXNrIHVudGlsIF9fSTQwRV9ET1dOIGlzIHNldC5cXG4rXFx0ICogRGlzYWJsZSBpdCBzbyBubyBzZXJ2aWNlIHdvcmsgY2FuIG91dGxpdmUgdGhlIFBGLlxcbitcXHQgKi9cXG4rXFx0c2V0X2JpdChfX0k0MEVfU1VTUEVOREVELCBwZi1cXHUwMDNlc3RhdGUpO1xcbitcXHRpZiAocGYtXFx1MDAzZXNlcnZpY2VfdGltZXIuZnVuY3Rpb24pXFxuK1xcdFxcdHRpbWVyX3NodXRkb3duX3N5bmMoXFx1MDAyNnBmLVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4rXFx0aWYgKHBmLVxcdTAwM2VzZXJ2aWNlX3Rhc2suZnVuYylcXG4rXFx0XFx0ZGlzYWJsZV93b3JrX3N5bmMoXFx1MDAyNnBmLVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHJlc2V0IG93bmVyIGJlZm9yZSB0ZWFyaW5nIGRvd24gZGV2aWNlIHJlc291cmNlcy4gKi9cXG4rXFx0d2FpdF9vbl9iaXRfbG9jayhwZi1cXHUwMDNlc3RhdGUsIF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLFxcbitcXHRcXHRcXHQgVEFTS19VTklOVEVSUlVQVElCTEUpO1xcbitcXHRzZXRfYml0KF9fSTQwRV9JTl9SRU1PVkUsIHBmLVxcdTAwM2VzdGF0ZSk7XFxuK1xcbiBcXHRpNDBlX2RiZ19wZl9leGl0KHBmKTtcXG4gXFxuIFxcdGk0MGVfcHRwX3N0b3AocGYpO1xcbkBAIC0xNjE2NSwyNiArMTYxODQsMTIgQEAgc3RhdGljIHZvaWQgaTQwZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdGk0MGVfd3JpdGVfcnhfY3RsKGh3LCBJNDBFX1BGUUZfSEVOQSgwKSwgMCk7XFxuIFxcdGk0MGVfd3JpdGVfcnhfY3RsKGh3LCBJNDBFX1BGUUZfSEVOQSgxKSwgMCk7XFxuIFxcbi1cXHQvKiBHcmFiIF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HIGFuZCBzZXQgX19JNDBFX0lOX1JFTU9WRVxcbi1cXHQgKiBmbGFncywgb25jZSB0aGV5IGFyZSBzZXQsIGk0MGVfcmVidWlsZCBzaG91bGQgbm90IGJlIGNhbGxlZCBhc1xcbi1cXHQgKiBpNDBlX3ByZXBfZm9yX3Jlc2V0IGFsd2F5cyByZXR1cm5zIGVhcmx5Llxcbi1cXHQgKi9cXG4tXFx0d2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsIHBmLVxcdTAwM2VzdGF0ZSkpXFxuLVxcdFxcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcXG4tXFx0c2V0X2JpdChfX0k0MEVfSU5fUkVNT1ZFLCBwZi1cXHUwMDNlc3RhdGUpO1xcbi1cXG4gXFx0aWYgKHRlc3RfYml0KEk0MEVfRkxBR19TUklPVl9FTkEsIHBmLVxcdTAwM2VmbGFncykpIHtcXG4gXFx0XFx0c2V0X2JpdChfX0k0MEVfVkZfUkVTRVRTX0RJU0FCTEVELCBwZi1cXHUwMDNlc3RhdGUpO1xcbiBcXHRcXHRpNDBlX2ZyZWVfdmZzKHBmKTtcXG4gXFx0XFx0Y2xlYXJfYml0KEk0MEVfRkxBR19TUklPVl9FTkEsIHBmLVxcdTAwM2VmbGFncyk7XFxuIFxcdH1cXG4tXFx0Lyogbm8gbW9yZSBzY2hlZHVsaW5nIG9mIGFueSB0YXNrICovXFxuLVxcdHNldF9iaXQoX19JNDBFX1NVU1BFTkRFRCwgcGYtXFx1MDAzZXN0YXRlKTtcXG4gXFx0c2V0X2JpdChfX0k0MEVfRE9XTiwgcGYtXFx1MDAzZXN0YXRlKTtcXG4tXFx0aWYgKHBmLVxcdTAwM2VzZXJ2aWNlX3RpbWVyLmZ1bmN0aW9uKVxcbi1cXHRcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZwZi1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuLVxcdGlmIChwZi1cXHUwMDNlc2VydmljZV90YXNrLmZ1bmMpXFxuLVxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnBmLVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbiBcXG4gXFx0aWYgKHRlc3RfYml0KF9fSTQwRV9SRUNPVkVSWV9NT0RFLCBwZi1cXHUwMDNlc3RhdGUpKSB7XFxuIFxcdFxcdHN0cnVjdCBpNDBlX3ZzaSAqdnNpID0gcGYtXFx1MDAzZXZzaVswXTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jXFxuaW5kZXggZmY2MmI1ZjJjODE1MC4uNWYxNWEzZDRhOTFlZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfcHRwLmNcXG5AQCAtMTY5LDYgKzE2OSwxNyBAQCBzdGF0aWMgdm9pZCBpNDBlX3B0cF9leHR0czBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHB0cF9jbG9ja19ldmVudChwZi1cXHUwMDNlcHRwX2Nsb2NrLCBcXHUwMDI2ZXZlbnQpO1xcbiB9XFxuIFxcbisvKipcXG4rICogaTQwZV9wdHBfaW5pdF93b3JrIC0gSW5pdGlhbGl6ZSBQVFAgd29yayBmb3IgYSBQRlxcbisgKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuKyAqXFxuKyAqIEluaXRpYWxpemUgd29yayB3aGljaCBtdXN0IHJlbWFpbiB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBQRi5cXG4rICovXFxuK3ZvaWQgaTQwZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpNDBlX3BmICpwZilcXG4re1xcbitcXHRJTklUX1dPUksoXFx1MDAyNnBmLVxcdTAwM2VwdHBfZXh0dHMwX3dvcmssIGk0MGVfcHRwX2V4dHRzMF93b3JrKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGk0MGVfaXNfcHRwX3Bpbl9kZXYgLSBjaGVjayBpZiBkZXZpY2Ugc3VwcG9ydHMgUFRQIHBpbnNcXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5AQCAtNzI4LDE0ICs3MzksMTcgQEAgdm9pZCBpNDBlX3B0cF9yeF9oYW5nKHN0cnVjdCBpNDBlX3BmICpwZilcXG4gICoqL1xcbiB2b2lkIGk0MGVfcHRwX3R4X2hhbmcoc3RydWN0IGk0MGVfcGYgKnBmKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbiBcXHRpZiAoIXRlc3RfYml0KEk0MEVfRkxBR19QVFBfRU5BLCBwZi1cXHUwMDNlZmxhZ3MpIHx8ICFwZi1cXHUwMDNlcHRwX3R4KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cGYtXFx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XFxuK1xcbiBcXHQvKiBOb3RoaW5nIHRvIGRvIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IHdhaXRpbmcgZm9yIGEgdGltZXN0YW1wICovXFxuLVxcdGlmICghdGVzdF9iaXQoX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgcGYtXFx1MDAzZXN0YXRlKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAoIXBmLVxcdTAwM2VwdHBfdHhfc2tiKVxcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcbiBcXHQvKiBXZSBhbHJlYWR5IGhhdmUgYSBoYW5kbGVyIHJvdXRpbmUgd2hpY2ggaXMgcnVuIHdoZW4gd2UgYXJlIG5vdGlmaWVkXFxuIFxcdCAqIG9mIGEgVHggdGltZXN0YW1wIGluIHRoZSBoYXJkd2FyZS4gSWYgd2UgZG9uJ3QgZ2V0IGFuIGludGVycnVwdFxcbkBAIC03NDQsMTIgKzc1OCwxNiBAQCB2b2lkIGk0MGVfcHRwX3R4X2hhbmcoc3RydWN0IGk0MGVfcGYgKnBmKVxcbiBcXHRpZiAodGltZV9pc19iZWZvcmVfamlmZmllcyhwZi1cXHUwMDNlcHRwX3R4X3N0YXJ0ICsgSFopKSB7XFxuIFxcdFxcdHNrYiA9IHBmLVxcdTAwM2VwdHBfdHhfc2tiO1xcbiBcXHRcXHRwZi1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuLVxcdFxcdGNsZWFyX2JpdF91bmxvY2soX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgcGYtXFx1MDAzZXN0YXRlKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cGYtXFx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRcXHQvKiBGcmVlIHRoZSBza2IgYWZ0ZXIgd2UgY2xlYXIgdGhlIGJpdGxvY2sgKi9cXG4rXFx0XFx0LyogRnJlZSB0aGUgc2tiIGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jay4gKi9cXG4gXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0XFx0cGYtXFx1MDAzZXR4X2h3dHN0YW1wX3RpbWVvdXRzKys7XFxuK1xcdFxcdHJldHVybjtcXG4gXFx0fVxcbitcXG4rb3V0X3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cGYtXFx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC03NjMsMTcgKzc4MSwyMSBAQCB2b2lkIGk0MGVfcHRwX3R4X2hhbmcoc3RydWN0IGk0MGVfcGYgKnBmKVxcbiB2b2lkIGk0MGVfcHRwX3R4X2h3dHN0YW1wKHN0cnVjdCBpNDBlX3BmICpwZilcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHM7XFxuLVxcdHN0cnVjdCBza19idWZmICpza2IgPSBwZi1cXHUwMDNlcHRwX3R4X3NrYjtcXG4gXFx0c3RydWN0IGk0MGVfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VodztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFx0dTMyIGhpLCBsbztcXG4gXFx0dTY0IG5zO1xcbiBcXG4gXFx0aWYgKCF0ZXN0X2JpdChJNDBFX0ZMQUdfUFRQX0VOQSwgcGYtXFx1MDAzZWZsYWdzKSB8fCAhcGYtXFx1MDAzZXB0cF90eClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0LyogZG9uJ3QgYXR0ZW1wdCB0byB0aW1lc3RhbXAgaWYgd2UgZG9uJ3QgaGF2ZSBhbiBza2IgKi9cXG4tXFx0aWYgKCFwZi1cXHUwMDNlcHRwX3R4X3NrYilcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cGYtXFx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XFxuK1xcbitcXHQvKiBUYWtlIG93bmVyc2hpcCBvZiB0aGUgc2tiIGJlZm9yZSBhbm90aGVyIGNsZWFudXAgcGF0aCBjYW4gZnJlZSBpdC4gKi9cXG4rXFx0c2tiID0gcGYtXFx1MDAzZXB0cF90eF9za2I7XFxuK1xcdGlmICghc2tiKVxcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcbiBcXHRsbyA9IHJkMzIoaHcsIEk0MEVfUFJUVFNZTl9UWFRJTUVfTCk7XFxuIFxcdGhpID0gcmQzMihodywgSTQwRV9QUlRUU1lOX1RYVElNRV9IKTtcXG5AQCAtNzgxLDE3ICs4MDMsMjEgQEAgdm9pZCBpNDBlX3B0cF90eF9od3RzdGFtcChzdHJ1Y3QgaTQwZV9wZiAqcGYpXFxuIFxcdG5zID0gKCgodTY0KWhpKSBcXHUwMDNjXFx1MDAzYyAzMikgfCBsbztcXG4gXFx0aTQwZV9wdHBfY29udmVydF90b19od3RzdGFtcChcXHUwMDI2c2hod3RzdGFtcHMsIG5zKTtcXG4gXFxuLVxcdC8qIENsZWFyIHRoZSBiaXQgbG9jayBhcyBzb29uIGFzIHBvc3NpYmxlIGFmdGVyIHJlYWRpbmcgdGhlIHJlZ2lzdGVyLFxcbi1cXHQgKiBhbmQgcHJpb3IgdG8gbm90aWZ5aW5nIHRoZSBzdGFjayB2aWEgc2tiX3RzdGFtcF90eCgpLiBPdGhlcndpc2VcXG4tXFx0ICogYXBwbGljYXRpb25zIG1pZ2h0IHdha2UgdXAgYW5kIGF0dGVtcHQgdG8gcmVxdWVzdCBhbm90aGVyIHRyYW5zbWl0XFxuLVxcdCAqIHRpbWVzdGFtcCBwcmlvciB0byB0aGUgYml0IGxvY2sgYmVpbmcgY2xlYXJlZC5cXG4rXFx0LyogTWFyayB0aGUgc2xvdCBhdmFpbGFibGUgYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciByZWFkaW5nIHRoZVxcbitcXHQgKiByZWdpc3RlciBhbmQgYmVmb3JlIG5vdGlmeWluZyB0aGUgc3RhY2sgdmlhIHNrYl90c3RhbXBfdHgoKS5cXG4rXFx0ICogT3RoZXJ3aXNlLCBhcHBsaWNhdGlvbnMgbWlnaHQgd2FrZSB1cCBhbmQgcmVxdWVzdCBhbm90aGVyIHRyYW5zbWl0XFxuK1xcdCAqIHRpbWVzdGFtcCBiZWZvcmUgdGhlIHNsb3QgaXMgYXZhaWxhYmxlLlxcbiBcXHQgKi9cXG4gXFx0cGYtXFx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xcbi1cXHRjbGVhcl9iaXRfdW5sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBmLVxcdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0LyogTm90aWZ5IHRoZSBzdGFjayBhbmQgZnJlZSB0aGUgc2tiIGFmdGVyIHdlJ3ZlIHVubG9ja2VkICovXFxuIFxcdHNrYl90c3RhbXBfdHgoc2tiLCBcXHUwMDI2c2hod3RzdGFtcHMpO1xcbiBcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbitcXHRyZXR1cm47XFxuK1xcbitvdXRfdW5sb2NrOlxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwZi1cXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTExODYsOCArMTIxMiw2IEBAIHN0YXRpYyBpbnQgaTQwZV9wdHBfc2V0X3RpbWVzdGFtcF9tb2RlKHN0cnVjdCBpNDBlX3BmICpwZixcXG4gXFx0cmVndmFsIHw9IDEgXFx1MDAzY1xcdTAwM2MgSTQwRV9QUlRUU1lOX0NUTDBfRVZFTlRfSU5UX0VOQV9TSElGVDtcXG4gXFx0d3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7XFxuIFxcbi1cXHRJTklUX1dPUksoXFx1MDAyNnBmLVxcdTAwM2VwdHBfZXh0dHMwX3dvcmssIGk0MGVfcHRwX2V4dHRzMF93b3JrKTtcXG4tXFxuIFxcdHN3aXRjaCAoY29uZmlnLVxcdTAwM2V0eF90eXBlKSB7XFxuIFxcdGNhc2UgSFdUU1RBTVBfVFhfT0ZGOlxcbiBcXHRcXHRwZi1cXHUwMDNlcHRwX3R4ID0gZmFsc2U7XFxuQEAgLTEzMTMsMTcgKzEzMzcsMjMgQEAgaW50IGk0MGVfcHRwX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRzdHJ1Y3QgaTQwZV9wZiAqcGYgPSBucC1cXHUwMDNldnNpLVxcdTAwM2ViYWNrO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCF0ZXN0X2JpdChJNDBFX0ZMQUdfUFRQX0VOQSwgcGYtXFx1MDAzZWZsYWdzKSlcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwZi1cXHUwMDNlcHRwX2NvbmZpZ19sb2NrKTtcXG4rXFxuK1xcdGlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHR9XFxuIFxcbiBcXHRlcnIgPSBpNDBlX3B0cF9zZXRfdGltZXN0YW1wX21vZGUocGYsIGNvbmZpZyk7XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXG4gXFx0Lyogc2F2ZSB0aGVzZSBzZXR0aW5ncyBmb3IgZnV0dXJlIHJlZmVyZW5jZSAqL1xcbiBcXHRwZi1cXHUwMDNldHN0YW1wX2NvbmZpZyA9ICpjb25maWc7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VwdHBfY29uZmlnX2xvY2spO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTUzOSwxOSArMTU2OSwzMSBAQCB2b2lkIGk0MGVfcHRwX3N0b3Aoc3RydWN0IGk0MGVfcGYgKnBmKVxcbiB7XFxuIFxcdHN0cnVjdCBpNDBlX3ZzaSAqbWFpbl92c2kgPSBpNDBlX3BmX2dldF9tYWluX3ZzaShwZik7XFxuIFxcdHN0cnVjdCBpNDBlX2h3ICpodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHUzMiByZWd2YWw7XFxuIFxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwZi1cXHUwMDNlcHRwX2NvbmZpZ19sb2NrKTtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwZi1cXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcXG4gXFx0Y2xlYXJfYml0KEk0MEVfRkxBR19QVFBfRU5BLCBwZi1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRwZi1cXHUwMDNlcHRwX3R4ID0gZmFsc2U7XFxuK1xcdHNrYiA9IHBmLVxcdTAwM2VwdHBfdHhfc2tiO1xcbitcXHRwZi1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBmLVxcdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xcbitcXG4gXFx0cGYtXFx1MDAzZXB0cF9yeCA9IGZhbHNlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VwdHBfY29uZmlnX2xvY2spO1xcbiBcXG4tXFx0aWYgKHBmLVxcdTAwM2VwdHBfdHhfc2tiKSB7XFxuLVxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBwZi1cXHUwMDNlcHRwX3R4X3NrYjtcXG4rXFx0LyogU3RvcCBleHRlcm5hbCB0aW1lc3RhbXAgZXZlbnRzIGJlZm9yZSB1bnJlZ2lzdGVyaW5nIHRoZSBjbG9jay4gKi9cXG4rXFx0cmVndmFsID0gcmQzMihodywgSTQwRV9QUlRUU1lOX0NUTDApO1xcbitcXHRyZWd2YWwgXFx1MDAyNj0gfkk0MEVfUFJUVFNZTl9DVEwwX0VWRU5UX0lOVF9FTkFfTUFTSztcXG4rXFx0d3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7XFxuIFxcbi1cXHRcXHRwZi1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuLVxcdFxcdGNsZWFyX2JpdF91bmxvY2soX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgcGYtXFx1MDAzZXN0YXRlKTtcXG4rXFx0ZGlzYWJsZV93b3JrX3N5bmMoXFx1MDAyNnBmLVxcdTAwM2VwdHBfZXh0dHMwX3dvcmspO1xcbitcXG4rXFx0aWYgKHNrYilcXG4gXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4tXFx0fVxcbiBcXG4gXFx0aWYgKHBmLVxcdTAwM2VwdHBfY2xvY2spIHtcXG4gXFx0XFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIocGYtXFx1MDAzZXB0cF9jbG9jayk7XFxuQEAgLTE1NzAsMTAgKzE2MTIsNSBAQCB2b2lkIGk0MGVfcHRwX3N0b3Aoc3RydWN0IGk0MGVfcGYgKnBmKVxcbiBcXHRyZWd2YWwgXFx1MDAyNj0gfkk0MEVfUFJUVFNZTl9BVVhfMF9QVFBGTEFHX01BU0s7XFxuIFxcdHdyMzIoaHcsIEk0MEVfUFJUVFNZTl9BVVhfMCgwKSwgcmVndmFsKTtcXG4gXFxuLVxcdC8qIERpc2FibGUgaW50ZXJydXB0cyAqL1xcbi1cXHRyZWd2YWwgPSByZDMyKGh3LCBJNDBFX1BSVFRTWU5fQ1RMMCk7XFxuLVxcdHJlZ3ZhbCBcXHUwMDI2PSB+STQwRV9QUlRUU1lOX0NUTDBfRVZFTlRfSU5UX0VOQV9NQVNLO1xcbi1cXHR3cjMyKGh3LCBJNDBFX1BSVFRTWU5fQ1RMMCwgcmVndmFsKTtcXG4tXFxuIFxcdGk0MGVfcHRwX2ZyZWVfcGlucyhwZik7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmNcXG5pbmRleCA4OTRmMmQwNmQzOWQwLi5mNDMwNTQ2YWNmNDIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jXFxuQEAgLTMxOTgsNyArMzE5OCw5IEBAIHN0YXRpYyBpbnQgaTQwZV90c28oc3RydWN0IGk0MGVfdHhfYnVmZmVyICpmaXJzdCwgdTggKmhkcl9sZW4sXFxuIHN0YXRpYyBpbnQgaTQwZV90c3luKHN0cnVjdCBpNDBlX3JpbmcgKnR4X3JpbmcsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAgICAgdTMyIHR4X2ZsYWdzLCB1NjQgKmNkX3R5cGVfY21kX3Rzb19tc3MpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0c3RydWN0IGk0MGVfcGYgKnBmO1xcbitcXHRpbnQgdHN5biA9IDA7XFxuIFxcbiBcXHRpZiAobGlrZWx5KCEoc2tiX3NoaW5mbyhza2IpLVxcdTAwM2V0eF9mbGFncyBcXHUwMDI2IFNLQlRYX0hXX1RTVEFNUCkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtMzIxMSwyMyArMzIxMywyOCBAQCBzdGF0aWMgaW50IGk0MGVfdHN5bihzdHJ1Y3QgaTQwZV9yaW5nICp0eF9yaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgKiB3ZSBhcmUgbm90IGFscmVhZHkgdHJhbnNtaXR0aW5nIGEgcGFja2V0IHRvIGJlIHRpbWVzdGFtcGVkXFxuIFxcdCAqL1xcbiBcXHRwZiA9IGk0MGVfbmV0ZGV2X3RvX3BmKHR4X3JpbmctXFx1MDAzZW5ldGRldik7XFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwZi1cXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcXG4rXFxuIFxcdGlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcbi1cXHRpZiAocGYtXFx1MDAzZXB0cF90eCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLCBwZi1cXHUwMDNlc3RhdGUpKSB7XFxuK1xcdGlmIChwZi1cXHUwMDNlcHRwX3R4IFxcdTAwMjZcXHUwMDI2ICFwZi1cXHUwMDNlcHRwX3R4X3NrYikge1xcbiBcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZXR4X2ZsYWdzIHw9IFNLQlRYX0lOX1BST0dSRVNTO1xcbiBcXHRcXHRwZi1cXHUwMDNlcHRwX3R4X3N0YXJ0ID0gamlmZmllcztcXG4gXFx0XFx0cGYtXFx1MDAzZXB0cF90eF9za2IgPSBza2JfZ2V0KHNrYik7XFxuK1xcdFxcdHRzeW4gPSAxO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRwZi1cXHUwMDNldHhfaHd0c3RhbXBfc2tpcHBlZCsrO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0KmNkX3R5cGVfY21kX3Rzb19tc3MgfD0gKHU2NClJNDBFX1RYX0NUWF9ERVNDX1RTWU4gXFx1MDAzY1xcdTAwM2NcXG4tXFx0XFx0XFx0XFx0STQwRV9UWERfQ1RYX1FXMV9DTURfU0hJRlQ7XFxuK291dF91bmxvY2s6XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBmLVxcdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0cmV0dXJuIDE7XFxuK1xcdGlmICh0c3luKVxcbitcXHRcXHQqY2RfdHlwZV9jbWRfdHNvX21zcyB8PSAodTY0KUk0MEVfVFhfQ1RYX0RFU0NfVFNZTiBcXHUwMDNjXFx1MDAzY1xcbitcXHRcXHRcXHRcXHRcXHRJNDBFX1RYRF9DVFhfUVcxX0NNRF9TSElGVDtcXG4rXFxuK1xcdHJldHVybiB0c3luO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzk1NywxMCArMzk2NCwyMSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaTQwZV94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gY2xlYW51cF90eF90c3RhbXA6XFxuIFxcdGlmICh1bmxpa2VseSh0eF9mbGFncyBcXHUwMDI2IEk0MEVfVFhfRkxBR1NfVFNZTikpIHtcXG4gXFx0XFx0c3RydWN0IGk0MGVfcGYgKnBmID0gaTQwZV9uZXRkZXZfdG9fcGYodHhfcmluZy1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnB0cF9za2IgPSBOVUxMO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBmLVxcdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHQvKiBBbm90aGVyIGNsZWFudXAgcGF0aCBtYXkgaGF2ZSBoYW5kZWQgdGhlIHNsb3RcXG4rXFx0XFx0ICogdG8gYSBuZXcgc2tiLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHBmLVxcdTAwM2VwdHBfdHhfc2tiID09IHNrYikge1xcbitcXHRcXHRcXHRwdHBfc2tiID0gcGYtXFx1MDAzZXB0cF90eF9za2I7XFxuK1xcdFxcdFxcdHBmLVxcdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwZi1cXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcXG4gXFxuLVxcdFxcdGRldl9rZnJlZV9za2JfYW55KHBmLVxcdTAwM2VwdHBfdHhfc2tiKTtcXG4tXFx0XFx0cGYtXFx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xcbi1cXHRcXHRjbGVhcl9iaXRfdW5sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdFxcdGlmIChwdHBfc2tiKVxcbitcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShwdHBfc2tiKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDY6NTk6MDYuNTcxNTEzOTUxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTUxMzU0MzY4MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBpNDBlIEV0aGVybmV0IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoSW50ZWwgNDAgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2VkIGZvciBmdXp6aW5nLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWMxNTQwMzg2ZDMyY2NmMzFiMjliYTAzZmE1MDIwMDhkZDQ3ZjZmNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDY6NTk6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZS5oXG5pbmRleCA4M2U3ODA5MTlhYzk3Li4xODQ1MmY5YWE3NGUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZS5oXG5AQCAtMTAxLDcgKzEwMSw2IEBAIGVudW0gaTQwZV9zdGF0ZSB7XG4gXHRfX0k0MEVfR0xPQkFMX1JFU0VUX1JFUVVFU1RFRCxcbiBcdF9fSTQwRV9FTVBfUkVTRVRfSU5UUl9SRUNFSVZFRCxcbiBcdF9fSTQwRV9TVVNQRU5ERUQsXG4tXHRfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLFxuIFx0X19JNDBFX0JBRF9FRVBST00sXG4gXHRfX0k0MEVfRE9XTl9SRVFVRVNURUQsXG4gXHRfX0k0MEVfRkRfRkxVU0hfUkVRVUVTVEVELFxuQEAgLTY2OSwxMiArNjY4LDE2IEBAIHN0cnVjdCBpNDBlX3BmIHtcbiBcdHN0cnVjdCB0aW1lc3BlYzY0IHB0cF9wcmV2X2h3X3RpbWU7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHRwX2V4dHRzMF93b3JrO1xuIFx0a3RpbWVfdCBwdHBfcmVzZXRfc3RhcnQ7XG4rXHQvKiBTZXJpYWxpemVzIHRpbWVzdGFtcCBjb25maWd1cmF0aW9uIHdpdGggUFRQIHRlYXJkb3duLiAqL1xuK1x0c3RydWN0IG11dGV4IHB0cF9jb25maWdfbG9jaztcbiBcdHN0cnVjdCBtdXRleCB0bXJlZ19sb2NrOyAvKiBVc2VkIHRvIHByb3RlY3QgdGhlIFNZU1RJTUUgcmVnaXN0ZXJzLiAqL1xuIFx0dTMyIHB0cF9hZGpfbXVsdDtcbiBcdHUzMiB0eF9od3RzdGFtcF90aW1lb3V0cztcbiBcdHUzMiB0eF9od3RzdGFtcF9za2lwcGVkO1xuIFx0dTMyIHJ4X2h3dHN0YW1wX2NsZWFyZWQ7XG4gXHR1MzIgbGF0Y2hfZXZlbnRfZmxhZ3M7XG4rXHQvKiBQcm90ZWN0cyBwdHBfdHhfc2tiLCB3aGljaCBhbHNvIGluZGljYXRlcyB0aGUgc2xvdCBzdGF0ZS4gKi9cbitcdHNwaW5sb2NrX3QgcHRwX3R4X2xvY2s7XG4gXHRzcGlubG9ja190IHB0cF9yeF9sb2NrOyAvKiBVc2VkIHRvIHByb3RlY3QgUnggdGltZXN0YW1wIHJlZ2lzdGVycy4gKi9cbiBcdHVuc2lnbmVkIGxvbmcgbGF0Y2hfZXZlbnRzWzRdO1xuIFx0Ym9vbCBwdHBfdHg7XG5AQCAtMTMxNSw2ICsxMzE4LDcgQEAgaW50IGk0MGVfcHRwX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiB2b2lkIGk0MGVfcHRwX3NhdmVfaHdfdGltZShzdHJ1Y3QgaTQwZV9wZiAqcGYpO1xuIHZvaWQgaTQwZV9wdHBfcmVzdG9yZV9od190aW1lKHN0cnVjdCBpNDBlX3BmICpwZik7XG4rdm9pZCBpNDBlX3B0cF9pbml0X3dvcmsoc3RydWN0IGk0MGVfcGYgKnBmKTtcbiB2b2lkIGk0MGVfcHRwX2luaXQoc3RydWN0IGk0MGVfcGYgKnBmKTtcbiB2b2lkIGk0MGVfcHRwX3N0b3Aoc3RydWN0IGk0MGVfcGYgKnBmKTtcbiBpbnQgaTQwZV9wdHBfYWxsb2NfcGlucyhzdHJ1Y3QgaTQwZV9wZiAqcGYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG5pbmRleCBhMDQ2ODMwMDRhNTY3Li40OGJhMzhhNDUyZDBiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuQEAgLTcsNiArNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9tYWN2bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hkcF9zb2NrX2Rydi5oXHUwMDNlXG4gXG5AQCAtMTA4MjIsNyArMTA4MjMsOCBAQCBzdGF0aWMgaW50IGk0MGVfcmVzZXQoc3RydWN0IGk0MGVfcGYgKnBmKVxuIFx0aWYgKHJldCkge1xuIFx0XHRkZXZfaW5mbyhcdTAwMjZwZi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCJQRiByZXNldCBmYWlsZWQsICVkXFxuXCIsIHJldCk7XG4gXHRcdHNldF9iaXQoX19JNDBFX1JFU0VUX0ZBSUxFRCwgcGYtXHUwMDNlc3RhdGUpO1xuLVx0XHRjbGVhcl9iaXQoX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsIHBmLVx1MDAzZXN0YXRlKTtcbitcdFx0Y2xlYXJfYW5kX3dha2VfdXBfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLFxuK1x0XHRcdFx0ICAgICAgcGYtXHUwMDNlc3RhdGUpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cGYtXHUwMDNlcGZyX2NvdW50Kys7XG4gXHR9XG5AQCAtMTExMTUsNyArMTExMTcsNyBAQCBzdGF0aWMgdm9pZCBpNDBlX3JlYnVpbGQoc3RydWN0IGk0MGVfcGYgKnBmLCBib29sIHJlaW5pdCwgYm9vbCBsb2NrX2FjcXVpcmVkKVxuIGVuZF9jb3JlX3Jlc2V0OlxuIFx0Y2xlYXJfYml0KF9fSTQwRV9SRVNFVF9GQUlMRUQsIHBmLVx1MDAzZXN0YXRlKTtcbiBjbGVhcl9yZWNvdmVyeTpcbi1cdGNsZWFyX2JpdChfX0k0MEVfUkVTRVRfUkVDT1ZFUllfUEVORElORywgcGYtXHUwMDNlc3RhdGUpO1xuK1x0Y2xlYXJfYW5kX3dha2VfdXBfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSk7XG4gXHRjbGVhcl9iaXQoX19JNDBFX1RJTUVPVVRfUkVDT1ZFUllfUEVORElORywgcGYtXHUwMDNlc3RhdGUpO1xuIH1cbiBcbkBAIC0xMjgxOSw2ICsxMjgyMSw5IEBAIHN0YXRpYyBpbnQgaTQwZV9zd19pbml0KHN0cnVjdCBpNDBlX3BmICpwZilcbiBcdFx0XHQgXCJ0b3RhbC1wb3J0LXNodXRkb3duIHdhcyBlbmFibGVkLCBsaW5rLWRvd24tb24tY2xvc2UgaXMgZm9yY2VkIG9uXFxuXCIpO1xuIFx0fVxuIFx0bXV0ZXhfaW5pdChcdTAwMjZwZi1cdTAwM2Vzd2l0Y2hfbXV0ZXgpO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwZi1cdTAwM2VwdHBfY29uZmlnX2xvY2spO1xuK1x0aTQwZV9wdHBfaW5pdF93b3JrKHBmKTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrKTtcbiBcbiBzd19pbml0X2RvbmU6XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE2MTU3LDYgKzE2MTYyLDIwIEBAIHN0YXRpYyB2b2lkIGk0MGVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0aTQwZV9kZXZsaW5rX3VucmVnaXN0ZXIocGYpO1xuIFxuK1x0LyogSW50ZXJydXB0cyBjYW4gcXVldWUgdGhlIHNlcnZpY2UgdGFzayB1bnRpbCBfX0k0MEVfRE9XTiBpcyBzZXQuXG4rXHQgKiBEaXNhYmxlIGl0IHNvIG5vIHNlcnZpY2Ugd29yayBjYW4gb3V0bGl2ZSB0aGUgUEYuXG4rXHQgKi9cbitcdHNldF9iaXQoX19JNDBFX1NVU1BFTkRFRCwgcGYtXHUwMDNlc3RhdGUpO1xuK1x0aWYgKHBmLVx1MDAzZXNlcnZpY2VfdGltZXIuZnVuY3Rpb24pXG4rXHRcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2cGYtXHUwMDNlc2VydmljZV90aW1lcik7XG4rXHRpZiAocGYtXHUwMDNlc2VydmljZV90YXNrLmZ1bmMpXG4rXHRcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnBmLVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcmVzZXQgb3duZXIgYmVmb3JlIHRlYXJpbmcgZG93biBkZXZpY2UgcmVzb3VyY2VzLiAqL1xuK1x0d2FpdF9vbl9iaXRfbG9jayhwZi1cdTAwM2VzdGF0ZSwgX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsXG4rXHRcdFx0IFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcbitcdHNldF9iaXQoX19JNDBFX0lOX1JFTU9WRSwgcGYtXHUwMDNlc3RhdGUpO1xuK1xuIFx0aTQwZV9kYmdfcGZfZXhpdChwZik7XG4gXG4gXHRpNDBlX3B0cF9zdG9wKHBmKTtcbkBAIC0xNjE2NSwyNiArMTYxODQsMTIgQEAgc3RhdGljIHZvaWQgaTQwZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRpNDBlX3dyaXRlX3J4X2N0bChodywgSTQwRV9QRlFGX0hFTkEoMCksIDApO1xuIFx0aTQwZV93cml0ZV9yeF9jdGwoaHcsIEk0MEVfUEZRRl9IRU5BKDEpLCAwKTtcbiBcbi1cdC8qIEdyYWIgX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcgYW5kIHNldCBfX0k0MEVfSU5fUkVNT1ZFXG4tXHQgKiBmbGFncywgb25jZSB0aGV5IGFyZSBzZXQsIGk0MGVfcmVidWlsZCBzaG91bGQgbm90IGJlIGNhbGxlZCBhc1xuLVx0ICogaTQwZV9wcmVwX2Zvcl9yZXNldCBhbHdheXMgcmV0dXJucyBlYXJseS5cbi1cdCAqL1xuLVx0d2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsIHBmLVx1MDAzZXN0YXRlKSlcbi1cdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuLVx0c2V0X2JpdChfX0k0MEVfSU5fUkVNT1ZFLCBwZi1cdTAwM2VzdGF0ZSk7XG4tXG4gXHRpZiAodGVzdF9iaXQoSTQwRV9GTEFHX1NSSU9WX0VOQSwgcGYtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdHNldF9iaXQoX19JNDBFX1ZGX1JFU0VUU19ESVNBQkxFRCwgcGYtXHUwMDNlc3RhdGUpO1xuIFx0XHRpNDBlX2ZyZWVfdmZzKHBmKTtcbiBcdFx0Y2xlYXJfYml0KEk0MEVfRkxBR19TUklPVl9FTkEsIHBmLVx1MDAzZWZsYWdzKTtcbiBcdH1cbi1cdC8qIG5vIG1vcmUgc2NoZWR1bGluZyBvZiBhbnkgdGFzayAqL1xuLVx0c2V0X2JpdChfX0k0MEVfU1VTUEVOREVELCBwZi1cdTAwM2VzdGF0ZSk7XG4gXHRzZXRfYml0KF9fSTQwRV9ET1dOLCBwZi1cdTAwM2VzdGF0ZSk7XG4tXHRpZiAocGYtXHUwMDNlc2VydmljZV90aW1lci5mdW5jdGlvbilcbi1cdFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZwZi1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbi1cdGlmIChwZi1cdTAwM2VzZXJ2aWNlX3Rhc2suZnVuYylcbi1cdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwZi1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuIFxuIFx0aWYgKHRlc3RfYml0KF9fSTQwRV9SRUNPVkVSWV9NT0RFLCBwZi1cdTAwM2VzdGF0ZSkpIHtcbiBcdFx0c3RydWN0IGk0MGVfdnNpICp2c2kgPSBwZi1cdTAwM2V2c2lbMF07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jXG5pbmRleCBmZjYyYjVmMmM4MTUwLi41ZjE1YTNkNGE5MWVkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfcHRwLmNcbkBAIC0xNjksNiArMTY5LDE3IEBAIHN0YXRpYyB2b2lkIGk0MGVfcHRwX2V4dHRzMF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHB0cF9jbG9ja19ldmVudChwZi1cdTAwM2VwdHBfY2xvY2ssIFx1MDAyNmV2ZW50KTtcbiB9XG4gXG4rLyoqXG4rICogaTQwZV9wdHBfaW5pdF93b3JrIC0gSW5pdGlhbGl6ZSBQVFAgd29yayBmb3IgYSBQRlxuKyAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbisgKlxuKyAqIEluaXRpYWxpemUgd29yayB3aGljaCBtdXN0IHJlbWFpbiB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBQRi5cbisgKi9cbit2b2lkIGk0MGVfcHRwX2luaXRfd29yayhzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4re1xuK1x0SU5JVF9XT1JLKFx1MDAyNnBmLVx1MDAzZXB0cF9leHR0czBfd29yaywgaTQwZV9wdHBfZXh0dHMwX3dvcmspO1xuK31cbitcbiAvKipcbiAgKiBpNDBlX2lzX3B0cF9waW5fZGV2IC0gY2hlY2sgaWYgZGV2aWNlIHN1cHBvcnRzIFBUUCBwaW5zXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC03MjgsMTQgKzczOSwxNyBAQCB2b2lkIGk0MGVfcHRwX3J4X2hhbmcoc3RydWN0IGk0MGVfcGYgKnBmKVxuICAqKi9cbiB2b2lkIGk0MGVfcHRwX3R4X2hhbmcoc3RydWN0IGk0MGVfcGYgKnBmKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuIFx0aWYgKCF0ZXN0X2JpdChJNDBFX0ZMQUdfUFRQX0VOQSwgcGYtXHUwMDNlZmxhZ3MpIHx8ICFwZi1cdTAwM2VwdHBfdHgpXG4gXHRcdHJldHVybjtcbiBcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4rXG4gXHQvKiBOb3RoaW5nIHRvIGRvIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IHdhaXRpbmcgZm9yIGEgdGltZXN0YW1wICovXG4tXHRpZiAoIXRlc3RfYml0KF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLVx1MDAzZXN0YXRlKSlcbi1cdFx0cmV0dXJuO1xuK1x0aWYgKCFwZi1cdTAwM2VwdHBfdHhfc2tiKVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKiBXZSBhbHJlYWR5IGhhdmUgYSBoYW5kbGVyIHJvdXRpbmUgd2hpY2ggaXMgcnVuIHdoZW4gd2UgYXJlIG5vdGlmaWVkXG4gXHQgKiBvZiBhIFR4IHRpbWVzdGFtcCBpbiB0aGUgaGFyZHdhcmUuIElmIHdlIGRvbid0IGdldCBhbiBpbnRlcnJ1cHRcbkBAIC03NDQsMTIgKzc1OCwxNiBAQCB2b2lkIGk0MGVfcHRwX3R4X2hhbmcoc3RydWN0IGk0MGVfcGYgKnBmKVxuIFx0aWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMocGYtXHUwMDNlcHRwX3R4X3N0YXJ0ICsgSFopKSB7XG4gXHRcdHNrYiA9IHBmLVx1MDAzZXB0cF90eF9za2I7XG4gXHRcdHBmLVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuLVx0XHRjbGVhcl9iaXRfdW5sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLVx1MDAzZXN0YXRlKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuIFxuLVx0XHQvKiBGcmVlIHRoZSBza2IgYWZ0ZXIgd2UgY2xlYXIgdGhlIGJpdGxvY2sgKi9cbitcdFx0LyogRnJlZSB0aGUgc2tiIGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jay4gKi9cbiBcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0cGYtXHUwMDNldHhfaHd0c3RhbXBfdGltZW91dHMrKztcbitcdFx0cmV0dXJuO1xuIFx0fVxuK1xuK291dF91bmxvY2s6XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuIC8qKlxuQEAgLTc2MywxNyArNzgxLDIxIEBAIHZvaWQgaTQwZV9wdHBfdHhfaGFuZyhzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4gdm9pZCBpNDBlX3B0cF90eF9od3RzdGFtcChzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBmLVx1MDAzZXB0cF90eF9za2I7XG4gXHRzdHJ1Y3QgaTQwZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0dTMyIGhpLCBsbztcbiBcdHU2NCBucztcbiBcbiBcdGlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLVx1MDAzZWZsYWdzKSB8fCAhcGYtXHUwMDNlcHRwX3R4KVxuIFx0XHRyZXR1cm47XG4gXG4tXHQvKiBkb24ndCBhdHRlbXB0IHRvIHRpbWVzdGFtcCBpZiB3ZSBkb24ndCBoYXZlIGFuIHNrYiAqL1xuLVx0aWYgKCFwZi1cdTAwM2VwdHBfdHhfc2tiKVxuLVx0XHRyZXR1cm47XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuK1xuK1x0LyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIHNrYiBiZWZvcmUgYW5vdGhlciBjbGVhbnVwIHBhdGggY2FuIGZyZWUgaXQuICovXG4rXHRza2IgPSBwZi1cdTAwM2VwdHBfdHhfc2tiO1xuK1x0aWYgKCFza2IpXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdGxvID0gcmQzMihodywgSTQwRV9QUlRUU1lOX1RYVElNRV9MKTtcbiBcdGhpID0gcmQzMihodywgSTQwRV9QUlRUU1lOX1RYVElNRV9IKTtcbkBAIC03ODEsMTcgKzgwMywyMSBAQCB2b2lkIGk0MGVfcHRwX3R4X2h3dHN0YW1wKHN0cnVjdCBpNDBlX3BmICpwZilcbiBcdG5zID0gKCgodTY0KWhpKSBcdTAwM2NcdTAwM2MgMzIpIHwgbG87XG4gXHRpNDBlX3B0cF9jb252ZXJ0X3RvX2h3dHN0YW1wKFx1MDAyNnNoaHd0c3RhbXBzLCBucyk7XG4gXG4tXHQvKiBDbGVhciB0aGUgYml0IGxvY2sgYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciByZWFkaW5nIHRoZSByZWdpc3Rlcixcbi1cdCAqIGFuZCBwcmlvciB0byBub3RpZnlpbmcgdGhlIHN0YWNrIHZpYSBza2JfdHN0YW1wX3R4KCkuIE90aGVyd2lzZVxuLVx0ICogYXBwbGljYXRpb25zIG1pZ2h0IHdha2UgdXAgYW5kIGF0dGVtcHQgdG8gcmVxdWVzdCBhbm90aGVyIHRyYW5zbWl0XG4tXHQgKiB0aW1lc3RhbXAgcHJpb3IgdG8gdGhlIGJpdCBsb2NrIGJlaW5nIGNsZWFyZWQuXG4rXHQvKiBNYXJrIHRoZSBzbG90IGF2YWlsYWJsZSBhcyBzb29uIGFzIHBvc3NpYmxlIGFmdGVyIHJlYWRpbmcgdGhlXG4rXHQgKiByZWdpc3RlciBhbmQgYmVmb3JlIG5vdGlmeWluZyB0aGUgc3RhY2sgdmlhIHNrYl90c3RhbXBfdHgoKS5cbitcdCAqIE90aGVyd2lzZSwgYXBwbGljYXRpb25zIG1pZ2h0IHdha2UgdXAgYW5kIHJlcXVlc3QgYW5vdGhlciB0cmFuc21pdFxuK1x0ICogdGltZXN0YW1wIGJlZm9yZSB0aGUgc2xvdCBpcyBhdmFpbGFibGUuXG4gXHQgKi9cbiBcdHBmLVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuLVx0Y2xlYXJfYml0X3VubG9jayhfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLCBwZi1cdTAwM2VzdGF0ZSk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4gXG4gXHQvKiBOb3RpZnkgdGhlIHN0YWNrIGFuZCBmcmVlIHRoZSBza2IgYWZ0ZXIgd2UndmUgdW5sb2NrZWQgKi9cbiBcdHNrYl90c3RhbXBfdHgoc2tiLCBcdTAwMjZzaGh3dHN0YW1wcyk7XG4gXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuK1x0cmV0dXJuO1xuK1xuK291dF91bmxvY2s6XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuIC8qKlxuQEAgLTExODYsOCArMTIxMiw2IEBAIHN0YXRpYyBpbnQgaTQwZV9wdHBfc2V0X3RpbWVzdGFtcF9tb2RlKHN0cnVjdCBpNDBlX3BmICpwZixcbiBcdHJlZ3ZhbCB8PSAxIFx1MDAzY1x1MDAzYyBJNDBFX1BSVFRTWU5fQ1RMMF9FVkVOVF9JTlRfRU5BX1NISUZUO1xuIFx0d3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7XG4gXG4tXHRJTklUX1dPUksoXHUwMDI2cGYtXHUwMDNlcHRwX2V4dHRzMF93b3JrLCBpNDBlX3B0cF9leHR0czBfd29yayk7XG4tXG4gXHRzd2l0Y2ggKGNvbmZpZy1cdTAwM2V0eF90eXBlKSB7XG4gXHRjYXNlIEhXVFNUQU1QX1RYX09GRjpcbiBcdFx0cGYtXHUwMDNlcHRwX3R4ID0gZmFsc2U7XG5AQCAtMTMxMywxNyArMTMzNywyMyBAQCBpbnQgaTQwZV9wdHBfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRzdHJ1Y3QgaTQwZV9wZiAqcGYgPSBucC1cdTAwM2V2c2ktXHUwMDNlYmFjaztcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoIXRlc3RfYml0KEk0MEVfRkxBR19QVFBfRU5BLCBwZi1cdTAwM2VmbGFncykpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlcHRwX2NvbmZpZ19sb2NrKTtcbitcbitcdGlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLVx1MDAzZWZsYWdzKSkge1xuK1x0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4gXG4gXHRlcnIgPSBpNDBlX3B0cF9zZXRfdGltZXN0YW1wX21vZGUocGYsIGNvbmZpZyk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIHVubG9jaztcbiBcbiBcdC8qIHNhdmUgdGhlc2Ugc2V0dGluZ3MgZm9yIGZ1dHVyZSByZWZlcmVuY2UgKi9cbiBcdHBmLVx1MDAzZXRzdGFtcF9jb25maWcgPSAqY29uZmlnO1xuIFxuLVx0cmV0dXJuIDA7XG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZXB0cF9jb25maWdfbG9jayk7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiAvKipcbkBAIC0xNTM5LDE5ICsxNTY5LDMxIEBAIHZvaWQgaTQwZV9wdHBfc3RvcChzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGk0MGVfdnNpICptYWluX3ZzaSA9IGk0MGVfcGZfZ2V0X21haW5fdnNpKHBmKTtcbiBcdHN0cnVjdCBpNDBlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHR1MzIgcmVndmFsO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZwZi1cdTAwM2VwdHBfY29uZmlnX2xvY2spO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGYtXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcbiBcdGNsZWFyX2JpdChJNDBFX0ZMQUdfUFRQX0VOQSwgcGYtXHUwMDNlZmxhZ3MpO1xuIFx0cGYtXHUwMDNlcHRwX3R4ID0gZmFsc2U7XG4rXHRza2IgPSBwZi1cdTAwM2VwdHBfdHhfc2tiO1xuK1x0cGYtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4rXG4gXHRwZi1cdTAwM2VwdHBfcnggPSBmYWxzZTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VwdHBfY29uZmlnX2xvY2spO1xuIFxuLVx0aWYgKHBmLVx1MDAzZXB0cF90eF9za2IpIHtcbi1cdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBmLVx1MDAzZXB0cF90eF9za2I7XG4rXHQvKiBTdG9wIGV4dGVybmFsIHRpbWVzdGFtcCBldmVudHMgYmVmb3JlIHVucmVnaXN0ZXJpbmcgdGhlIGNsb2NrLiAqL1xuK1x0cmVndmFsID0gcmQzMihodywgSTQwRV9QUlRUU1lOX0NUTDApO1xuK1x0cmVndmFsIFx1MDAyNj0gfkk0MEVfUFJUVFNZTl9DVEwwX0VWRU5UX0lOVF9FTkFfTUFTSztcbitcdHdyMzIoaHcsIEk0MEVfUFJUVFNZTl9DVEwwLCByZWd2YWwpO1xuIFxuLVx0XHRwZi1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbi1cdFx0Y2xlYXJfYml0X3VubG9jayhfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLCBwZi1cdTAwM2VzdGF0ZSk7XG4rXHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZwZi1cdTAwM2VwdHBfZXh0dHMwX3dvcmspO1xuK1xuK1x0aWYgKHNrYilcbiBcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbi1cdH1cbiBcbiBcdGlmIChwZi1cdTAwM2VwdHBfY2xvY2spIHtcbiBcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIocGYtXHUwMDNlcHRwX2Nsb2NrKTtcbkBAIC0xNTcwLDEwICsxNjEyLDUgQEAgdm9pZCBpNDBlX3B0cF9zdG9wKHN0cnVjdCBpNDBlX3BmICpwZilcbiBcdHJlZ3ZhbCBcdTAwMjY9IH5JNDBFX1BSVFRTWU5fQVVYXzBfUFRQRkxBR19NQVNLO1xuIFx0d3IzMihodywgSTQwRV9QUlRUU1lOX0FVWF8wKDApLCByZWd2YWwpO1xuIFxuLVx0LyogRGlzYWJsZSBpbnRlcnJ1cHRzICovXG4tXHRyZWd2YWwgPSByZDMyKGh3LCBJNDBFX1BSVFRTWU5fQ1RMMCk7XG4tXHRyZWd2YWwgXHUwMDI2PSB+STQwRV9QUlRUU1lOX0NUTDBfRVZFTlRfSU5UX0VOQV9NQVNLO1xuLVx0d3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7XG4tXG4gXHRpNDBlX3B0cF9mcmVlX3BpbnMocGYpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuaW5kZXggODk0ZjJkMDZkMzlkMC4uZjQzMDU0NmFjZjQyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmNcbkBAIC0zMTk4LDcgKzMxOTgsOSBAQCBzdGF0aWMgaW50IGk0MGVfdHNvKHN0cnVjdCBpNDBlX3R4X2J1ZmZlciAqZmlyc3QsIHU4ICpoZHJfbGVuLFxuIHN0YXRpYyBpbnQgaTQwZV90c3luKHN0cnVjdCBpNDBlX3JpbmcgKnR4X3JpbmcsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgICAgdTMyIHR4X2ZsYWdzLCB1NjQgKmNkX3R5cGVfY21kX3Rzb19tc3MpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCBpNDBlX3BmICpwZjtcbitcdGludCB0c3luID0gMDtcbiBcbiBcdGlmIChsaWtlbHkoIShza2Jfc2hpbmZvKHNrYiktXHUwMDNldHhfZmxhZ3MgXHUwMDI2IFNLQlRYX0hXX1RTVEFNUCkpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0zMjExLDIzICszMjEzLDI4IEBAIHN0YXRpYyBpbnQgaTQwZV90c3luKHN0cnVjdCBpNDBlX3JpbmcgKnR4X3JpbmcsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKiB3ZSBhcmUgbm90IGFscmVhZHkgdHJhbnNtaXR0aW5nIGEgcGFja2V0IHRvIGJlIHRpbWVzdGFtcGVkXG4gXHQgKi9cbiBcdHBmID0gaTQwZV9uZXRkZXZfdG9fcGYodHhfcmluZy1cdTAwM2VuZXRkZXYpO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGYtXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcbitcbiBcdGlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLVx1MDAzZWZsYWdzKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbi1cdGlmIChwZi1cdTAwM2VwdHBfdHggXHUwMDI2XHUwMDI2XG4tXHQgICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLCBwZi1cdTAwM2VzdGF0ZSkpIHtcbitcdGlmIChwZi1cdTAwM2VwdHBfdHggXHUwMDI2XHUwMDI2ICFwZi1cdTAwM2VwdHBfdHhfc2tiKSB7XG4gXHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2V0eF9mbGFncyB8PSBTS0JUWF9JTl9QUk9HUkVTUztcbiBcdFx0cGYtXHUwMDNlcHRwX3R4X3N0YXJ0ID0gamlmZmllcztcbiBcdFx0cGYtXHUwMDNlcHRwX3R4X3NrYiA9IHNrYl9nZXQoc2tiKTtcbitcdFx0dHN5biA9IDE7XG4gXHR9IGVsc2Uge1xuIFx0XHRwZi1cdTAwM2V0eF9od3RzdGFtcF9za2lwcGVkKys7XG4tXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0KmNkX3R5cGVfY21kX3Rzb19tc3MgfD0gKHU2NClJNDBFX1RYX0NUWF9ERVNDX1RTWU4gXHUwMDNjXHUwMDNjXG4tXHRcdFx0XHRJNDBFX1RYRF9DVFhfUVcxX0NNRF9TSElGVDtcbitvdXRfdW5sb2NrOlxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuIFxuLVx0cmV0dXJuIDE7XG4rXHRpZiAodHN5bilcbitcdFx0KmNkX3R5cGVfY21kX3Rzb19tc3MgfD0gKHU2NClJNDBFX1RYX0NUWF9ERVNDX1RTWU4gXHUwMDNjXHUwMDNjXG4rXHRcdFx0XHRcdEk0MEVfVFhEX0NUWF9RVzFfQ01EX1NISUZUO1xuK1xuK1x0cmV0dXJuIHRzeW47XG4gfVxuIFxuIC8qKlxuQEAgLTM5NTcsMTAgKzM5NjQsMjEgQEAgc3RhdGljIG5ldGRldl90eF90IGk0MGVfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsXG4gY2xlYW51cF90eF90c3RhbXA6XG4gXHRpZiAodW5saWtlbHkodHhfZmxhZ3MgXHUwMDI2IEk0MEVfVFhfRkxBR1NfVFNZTikpIHtcbiBcdFx0c3RydWN0IGk0MGVfcGYgKnBmID0gaTQwZV9uZXRkZXZfdG9fcGYodHhfcmluZy1cdTAwM2VuZXRkZXYpO1xuK1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqcHRwX3NrYiA9IE5VTEw7XG4rXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4rXHRcdC8qIEFub3RoZXIgY2xlYW51cCBwYXRoIG1heSBoYXZlIGhhbmRlZCB0aGUgc2xvdFxuK1x0XHQgKiB0byBhIG5ldyBza2IuXG4rXHRcdCAqL1xuK1x0XHRpZiAocGYtXHUwMDNlcHRwX3R4X3NrYiA9PSBza2IpIHtcbitcdFx0XHRwdHBfc2tiID0gcGYtXHUwMDNlcHRwX3R4X3NrYjtcbitcdFx0XHRwZi1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbitcdFx0fVxuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4gXG4tXHRcdGRldl9rZnJlZV9za2JfYW55KHBmLVx1MDAzZXB0cF90eF9za2IpO1xuLVx0XHRwZi1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbi1cdFx0Y2xlYXJfYml0X3VubG9jayhfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLCBwZi1cdTAwM2VzdGF0ZSk7XG4rXHRcdGlmIChwdHBfc2tiKVxuK1x0XHRcdGRldl9rZnJlZV9za2JfYW55KHB0cF9za2IpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA2OjU5OjA2LjU3MTUxNTU3MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTM1NDEzMzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBpNDBlIERyaXZlciBQYXRjaCBhbmQgRnV6emluZyBGZWFzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIHRoZSBgaTQwZWAgZHJpdmVyIOKAkyBJbnRlbCdzIDQwIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlciwgWEw3MTAgRmFtaWx5LiBSaWdodCBhd2F5LCBJIHNlZSBjaGFuZ2VzIGludm9sdmluZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczogcmVwbGFjaW5nIGEgYml0IGZsYWcgKGBfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTYCkgd2l0aCBhIHNwaW5sb2NrIChgcHRwX3R4X2xvY2tgKSwgaW50cm9kdWNpbmcgYSBtdXRleCAoYHB0cF9jb25maWdfbG9ja2ApLCBhbmQgdHdlYWtzIHRvIGhvdyByZXNldCByZWNvdmVyeSBpcyBoYW5kbGVkIChgY2xlYXJfYW5kX3dha2VfdXBfYml0YCwgYHdhaXRfb25fYml0X2xvY2tgKS4gSXQgYWxzbyBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHRvIHRoZSBgaTQwZV9yZW1vdmVgIGZ1bmN0aW9uIHRvIHNhZmVseSBkaXNhYmxlIHNlcnZpY2VzIGJlZm9yZSByZXNvdXJjZSB0ZWFyZG93bi5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmdXp6YWJsZS4gU2luY2UgaXQncyBhbiBFdGhlcm5ldCBkcml2ZXIsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdmlydHVhbGl6YXRpb24gYW5kIHdoZXRoZXIgSSBjYW4gdGVzdCB0aGlzIHdpdGhpbiBRRU1VLiBCdXQgd2FpdCwgYGk0MGVgIGlzIGEgKnBoeXNpY2FsKiBFdGhlcm5ldCBkcml2ZXIuIERvZXMgUUVNVSBldmVuIGVtdWxhdGUgYGk0MGVgIGhhcmR3YXJlPyBJIG5lZWQgdG8gY2hlY2suXG5cbkxldCBtZSByZWNhbGwgd2hhdCBRRU1VIG9mZmVycy4gSXQgaGFzIGBlMTAwMGAsIGBlMTAwMGVgLCBgaWdiYCwgYHZteG5ldDNgLCBgcnRsODEzOWAsIGFuZCBgdmlydGlvLW5ldGAuIEJ1dCwgZG8gdGhleSBlbXVsYXRlIGBpNDBlYCBzcGVjaWZpY2FsbHk/IE5vLCBhIHF1aWNrIGNoZWNrIG9mIFFFTVUncyBkZXZpY2UgbGlzdCBjb25maXJtcyB0aGF0IHRoZXJlJ3Mgbm8gYGk0MGVgIGVtdWxhdGlvbi4gT2theSwgc28gaXQgbG9va3MgbGlrZSBRRU1VIGRvZXMgKm5vdCogb2ZmZXIgYW4gZW11bGF0ZWQgdmVyc2lvbiBvZiB0aGUgaTQwZS5cblxuSSBjb25zaWRlcmVkIGRpZ2dpbmcgaW50byB0aGUgUUVNVSBzb3VyY2UsIGJ1dCBJIGRvbid0IGhhdmUgaXQgYXQgaGFuZCByaWdodCBub3cuIE1vcmUgaW1wb3J0YW50bHksIGl0J3MgY2xlYXIgdGhhdCBpdCdzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCByZXNpZGluZyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9gLiBHaXZlbiBpdHMgcGh5c2ljYWwgaGFyZHdhcmUgbmF0dXJlLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGZ1enppbmcgZmVhc2liaWxpdHkgcXVlc3Rpb24gYXMgYSAqdmlydHVhbGl6ZWQqIGVudmlyb25tZW50LlxuXG5Mb29raW5nIGJhY2sgYXQgdGhlIHJlcXVpcmVtZW50cywgSSByZW1lbWJlciB0aGUgY3JpdGVyaWE6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5UaGlzIGV4YWN0bHkgZml0cyB0aGUgYmlsbC4gVGhlIGBpNDBlYCBkcml2ZXIgaXMgYSBoYXJkd2FyZSBkcml2ZXIgZm9yIGEgcGh5c2ljYWwgUENJZSBjYXJkLiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgYGk0MGVgIGhhcmR3YXJlLiBBbmQgdGhlcmVmb3JlLCBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiB3b24ndCB3b3JrIGZvciB0aGlzIGRyaXZlci5cblxuVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHRoYXQgbm8gb3RoZXIgdmlydHVhbGl6YXRpb24gb3B0aW9uIGNhbiByZWFjaCB0aGlzLiBJIHNlYXJjaGVkIG15IG1lbW9yaWVzIHRvIGNoZWNrIGZvciBmdXp6aW5nIG9mIGBpNDBlYCB0aHJvdWdoIHN5emthbGxlci4gU2luY2UgdGhlIGRldmljZSBpc24ndCB2aXJ0dWFsaXplZCwgc3l6a2FsbGVyIGdlbmVyYWxseSB3b24ndCBmdXp6IGBpNDBlYC4gSSB0aGluayBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUuXG5cbkknbGwgY2hlY2sgc29tZSBtb3JlIGJ5IGNoZWNraW5nIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0c2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbW9ja3Mgb3Igc2ltaWxhci5cblxuTm9wZSwgbm8gc3VjaCB0aGluZ3MuIEl0J3MgYSBzdGFuZGFyZCBJbnRlbCBFdGhlcm5ldCBkcml2ZXIuXG5cblRoZSBwYXRjaCBkZWZpbml0aXZlbHkgbW9kaWZpZXMgYSBoYXJkd2FyZSBkcml2ZXIsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9gLiBUaGF0IG1lYW5zIEkgaGF2ZSB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIChJbnRlbCBpNDBlKSB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUsIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gVGhpcyBjb2RlIGlzIGluYWNjZXNzaWJsZSB0byBhIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuIEknbSBnb2luZyB0byBzZXQgV29ydGhGdXp6aW5nPWZhbHNlLiBMZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDc1LCJPdXRwdXRUb2tlbnMiOjkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA2OjU5OjIxLjcwNjkzMTQ0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIGk0MGUgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChJbnRlbCA0MCBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgaTQwZSBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKEludGVsIDQwIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlcikgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdXNlZCBmb3IgZnV6emluZy4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowf55wr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 06:57:48 +0000 UTC FinishedAt: 2026-08-05 06:59:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA2OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBpNDBlIEV0aGVybmV0IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoSW50ZWwgNDAgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2VkIGZvciBmdXp6aW5nLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNjo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVjMTU0MDM4NmQzMmNjZjMxYjI5YmEwM2ZhNTAyMDA4ZGQ0N2Y2ZjVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDA2OjU5OjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlLmhcbmluZGV4IDgzZTc4MDkxOWFjOTcuLjE4NDUyZjlhYTc0ZTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlLmhcbkBAIC0xMDEsNyAmIzQzOzEwMSw2IEBAIGVudW0gaTQwZV9zdGF0ZSB7XG4gXHRfX0k0MEVfR0xPQkFMX1JFU0VUX1JFUVVFU1RFRCxcbiBcdF9fSTQwRV9FTVBfUkVTRVRfSU5UUl9SRUNFSVZFRCxcbiBcdF9fSTQwRV9TVVNQRU5ERUQsXG4tXHRfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLFxuIFx0X19JNDBFX0JBRF9FRVBST00sXG4gXHRfX0k0MEVfRE9XTl9SRVFVRVNURUQsXG4gXHRfX0k0MEVfRkRfRkxVU0hfUkVRVUVTVEVELFxuQEAgLTY2OSwxMiAmIzQzOzY2OCwxNiBAQCBzdHJ1Y3QgaTQwZV9wZiB7XG4gXHRzdHJ1Y3QgdGltZXNwZWM2NCBwdHBfcHJldl9od190aW1lO1xuIFx0c3RydWN0IHdvcmtfc3RydWN0IHB0cF9leHR0czBfd29yaztcbiBcdGt0aW1lX3QgcHRwX3Jlc2V0X3N0YXJ0O1xuJiM0MztcdC8qIFNlcmlhbGl6ZXMgdGltZXN0YW1wIGNvbmZpZ3VyYXRpb24gd2l0aCBQVFAgdGVhcmRvd24uICovXG4mIzQzO1x0c3RydWN0IG11dGV4IHB0cF9jb25maWdfbG9jaztcbiBcdHN0cnVjdCBtdXRleCB0bXJlZ19sb2NrOyAvKiBVc2VkIHRvIHByb3RlY3QgdGhlIFNZU1RJTUUgcmVnaXN0ZXJzLiAqL1xuIFx0dTMyIHB0cF9hZGpfbXVsdDtcbiBcdHUzMiB0eF9od3RzdGFtcF90aW1lb3V0cztcbiBcdHUzMiB0eF9od3RzdGFtcF9za2lwcGVkO1xuIFx0dTMyIHJ4X2h3dHN0YW1wX2NsZWFyZWQ7XG4gXHR1MzIgbGF0Y2hfZXZlbnRfZmxhZ3M7XG4mIzQzO1x0LyogUHJvdGVjdHMgcHRwX3R4X3NrYiwgd2hpY2ggYWxzbyBpbmRpY2F0ZXMgdGhlIHNsb3Qgc3RhdGUuICovXG4mIzQzO1x0c3BpbmxvY2tfdCBwdHBfdHhfbG9jaztcbiBcdHNwaW5sb2NrX3QgcHRwX3J4X2xvY2s7IC8qIFVzZWQgdG8gcHJvdGVjdCBSeCB0aW1lc3RhbXAgcmVnaXN0ZXJzLiAqL1xuIFx0dW5zaWduZWQgbG9uZyBsYXRjaF9ldmVudHNbNF07XG4gXHRib29sIHB0cF90eDtcbkBAIC0xMzE1LDYgJiM0MzsxMzE4LDcgQEAgaW50IGk0MGVfcHRwX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiB2b2lkIGk0MGVfcHRwX3NhdmVfaHdfdGltZShzdHJ1Y3QgaTQwZV9wZiAqcGYpO1xuIHZvaWQgaTQwZV9wdHBfcmVzdG9yZV9od190aW1lKHN0cnVjdCBpNDBlX3BmICpwZik7XG4mIzQzO3ZvaWQgaTQwZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpNDBlX3BmICpwZik7XG4gdm9pZCBpNDBlX3B0cF9pbml0KHN0cnVjdCBpNDBlX3BmICpwZik7XG4gdm9pZCBpNDBlX3B0cF9zdG9wKHN0cnVjdCBpNDBlX3BmICpwZik7XG4gaW50IGk0MGVfcHRwX2FsbG9jX3BpbnMoc3RydWN0IGk0MGVfcGYgKnBmKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuaW5kZXggYTA0NjgzMDA0YTU2Ny4uNDhiYTM4YTQ1MmQwYiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcbkBAIC03LDYgJiM0Mzs3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9icmlkZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX21hY3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hkcF9zb2NrX2Rydi5oXHUwMDNlXG4gXG5AQCAtMTA4MjIsNyAmIzQzOzEwODIzLDggQEAgc3RhdGljIGludCBpNDBlX3Jlc2V0KHN0cnVjdCBpNDBlX3BmICpwZilcbiBcdGlmIChyZXQpIHtcbiBcdFx0ZGV2X2luZm8oXHUwMDI2cGYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwmIzM0O1BGIHJlc2V0IGZhaWxlZCwgJWRcXG5cJiMzNDssIHJldCk7XG4gXHRcdHNldF9iaXQoX19JNDBFX1JFU0VUX0ZBSUxFRCwgcGYtXHUwMDNlc3RhdGUpO1xuLVx0XHRjbGVhcl9iaXQoX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsIHBmLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRcdGNsZWFyX2FuZF93YWtlX3VwX2JpdChfX0k0MEVfUkVTRVRfUkVDT1ZFUllfUEVORElORyxcbiYjNDM7XHRcdFx0XHQgICAgICBwZi1cdTAwM2VzdGF0ZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRwZi1cdTAwM2VwZnJfY291bnQmIzQzOyYjNDM7O1xuIFx0fVxuQEAgLTExMTE1LDcgJiM0MzsxMTExNyw3IEBAIHN0YXRpYyB2b2lkIGk0MGVfcmVidWlsZChzdHJ1Y3QgaTQwZV9wZiAqcGYsIGJvb2wgcmVpbml0LCBib29sIGxvY2tfYWNxdWlyZWQpXG4gZW5kX2NvcmVfcmVzZXQ6XG4gXHRjbGVhcl9iaXQoX19JNDBFX1JFU0VUX0ZBSUxFRCwgcGYtXHUwMDNlc3RhdGUpO1xuIGNsZWFyX3JlY292ZXJ5OlxuLVx0Y2xlYXJfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0Y2xlYXJfYW5kX3dha2VfdXBfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSk7XG4gXHRjbGVhcl9iaXQoX19JNDBFX1RJTUVPVVRfUkVDT1ZFUllfUEVORElORywgcGYtXHUwMDNlc3RhdGUpO1xuIH1cbiBcbkBAIC0xMjgxOSw2ICYjNDM7MTI4MjEsOSBAQCBzdGF0aWMgaW50IGk0MGVfc3dfaW5pdChzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4gXHRcdFx0IFwmIzM0O3RvdGFsLXBvcnQtc2h1dGRvd24gd2FzIGVuYWJsZWQsIGxpbmstZG93bi1vbi1jbG9zZSBpcyBmb3JjZWQgb25cXG5cJiMzNDspO1xuIFx0fVxuIFx0bXV0ZXhfaW5pdChcdTAwMjZwZi1cdTAwM2Vzd2l0Y2hfbXV0ZXgpO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cGYtXHUwMDNlcHRwX2NvbmZpZ19sb2NrKTtcbiYjNDM7XHRpNDBlX3B0cF9pbml0X3dvcmsocGYpO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrKTtcbiBcbiBzd19pbml0X2RvbmU6XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE2MTU3LDYgJiM0MzsxNjE2MiwyMCBAQCBzdGF0aWMgdm9pZCBpNDBlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdGk0MGVfZGV2bGlua191bnJlZ2lzdGVyKHBmKTtcbiBcbiYjNDM7XHQvKiBJbnRlcnJ1cHRzIGNhbiBxdWV1ZSB0aGUgc2VydmljZSB0YXNrIHVudGlsIF9fSTQwRV9ET1dOIGlzIHNldC5cbiYjNDM7XHQgKiBEaXNhYmxlIGl0IHNvIG5vIHNlcnZpY2Ugd29yayBjYW4gb3V0bGl2ZSB0aGUgUEYuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2V0X2JpdChfX0k0MEVfU1VTUEVOREVELCBwZi1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0aWYgKHBmLVx1MDAzZXNlcnZpY2VfdGltZXIuZnVuY3Rpb24pXG4mIzQzO1x0XHR0aW1lcl9zaHV0ZG93bl9zeW5jKFx1MDAyNnBmLVx1MDAzZXNlcnZpY2VfdGltZXIpO1xuJiM0MztcdGlmIChwZi1cdTAwM2VzZXJ2aWNlX3Rhc2suZnVuYylcbiYjNDM7XHRcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnBmLVx1MDAzZXNlcnZpY2VfdGFzayk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFueSByZXNldCBvd25lciBiZWZvcmUgdGVhcmluZyBkb3duIGRldmljZSByZXNvdXJjZXMuICovXG4mIzQzO1x0d2FpdF9vbl9iaXRfbG9jayhwZi1cdTAwM2VzdGF0ZSwgX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsXG4mIzQzO1x0XHRcdCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4mIzQzO1x0c2V0X2JpdChfX0k0MEVfSU5fUkVNT1ZFLCBwZi1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuIFx0aTQwZV9kYmdfcGZfZXhpdChwZik7XG4gXG4gXHRpNDBlX3B0cF9zdG9wKHBmKTtcbkBAIC0xNjE2NSwyNiAmIzQzOzE2MTg0LDEyIEBAIHN0YXRpYyB2b2lkIGk0MGVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0aTQwZV93cml0ZV9yeF9jdGwoaHcsIEk0MEVfUEZRRl9IRU5BKDApLCAwKTtcbiBcdGk0MGVfd3JpdGVfcnhfY3RsKGh3LCBJNDBFX1BGUUZfSEVOQSgxKSwgMCk7XG4gXG4tXHQvKiBHcmFiIF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HIGFuZCBzZXQgX19JNDBFX0lOX1JFTU9WRVxuLVx0ICogZmxhZ3MsIG9uY2UgdGhleSBhcmUgc2V0LCBpNDBlX3JlYnVpbGQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgYXNcbi1cdCAqIGk0MGVfcHJlcF9mb3JfcmVzZXQgYWx3YXlzIHJldHVybnMgZWFybHkuXG4tXHQgKi9cbi1cdHdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSkpXG4tXHRcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcbi1cdHNldF9iaXQoX19JNDBFX0lOX1JFTU9WRSwgcGYtXHUwMDNlc3RhdGUpO1xuLVxuIFx0aWYgKHRlc3RfYml0KEk0MEVfRkxBR19TUklPVl9FTkEsIHBmLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRzZXRfYml0KF9fSTQwRV9WRl9SRVNFVFNfRElTQUJMRUQsIHBmLVx1MDAzZXN0YXRlKTtcbiBcdFx0aTQwZV9mcmVlX3ZmcyhwZik7XG4gXHRcdGNsZWFyX2JpdChJNDBFX0ZMQUdfU1JJT1ZfRU5BLCBwZi1cdTAwM2VmbGFncyk7XG4gXHR9XG4tXHQvKiBubyBtb3JlIHNjaGVkdWxpbmcgb2YgYW55IHRhc2sgKi9cbi1cdHNldF9iaXQoX19JNDBFX1NVU1BFTkRFRCwgcGYtXHUwMDNlc3RhdGUpO1xuIFx0c2V0X2JpdChfX0k0MEVfRE9XTiwgcGYtXHUwMDNlc3RhdGUpO1xuLVx0aWYgKHBmLVx1MDAzZXNlcnZpY2VfdGltZXIuZnVuY3Rpb24pXG4tXHRcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2cGYtXHUwMDNlc2VydmljZV90aW1lcik7XG4tXHRpZiAocGYtXHUwMDNlc2VydmljZV90YXNrLmZ1bmMpXG4tXHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cGYtXHUwMDNlc2VydmljZV90YXNrKTtcbiBcbiBcdGlmICh0ZXN0X2JpdChfX0k0MEVfUkVDT1ZFUllfTU9ERSwgcGYtXHUwMDNlc3RhdGUpKSB7XG4gXHRcdHN0cnVjdCBpNDBlX3ZzaSAqdnNpID0gcGYtXHUwMDNldnNpWzBdO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9wdHAuY1xuaW5kZXggZmY2MmI1ZjJjODE1MC4uNWYxNWEzZDRhOTFlZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9wdHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jXG5AQCAtMTY5LDYgJiM0MzsxNjksMTcgQEAgc3RhdGljIHZvaWQgaTQwZV9wdHBfZXh0dHMwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cHRwX2Nsb2NrX2V2ZW50KHBmLVx1MDAzZXB0cF9jbG9jaywgXHUwMDI2ZXZlbnQpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGk0MGVfcHRwX2luaXRfd29yayAtIEluaXRpYWxpemUgUFRQIHdvcmsgZm9yIGEgUEZcbiYjNDM7ICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBJbml0aWFsaXplIHdvcmsgd2hpY2ggbXVzdCByZW1haW4gdmFsaWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgUEYuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGk0MGVfcHRwX2luaXRfd29yayhzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4mIzQzO3tcbiYjNDM7XHRJTklUX1dPUksoXHUwMDI2cGYtXHUwMDNlcHRwX2V4dHRzMF93b3JrLCBpNDBlX3B0cF9leHR0czBfd29yayk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogaTQwZV9pc19wdHBfcGluX2RldiAtIGNoZWNrIGlmIGRldmljZSBzdXBwb3J0cyBQVFAgcGluc1xuICAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXG5AQCAtNzI4LDE0ICYjNDM7NzM5LDE3IEBAIHZvaWQgaTQwZV9wdHBfcnhfaGFuZyhzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4gICoqL1xuIHZvaWQgaTQwZV9wdHBfdHhfaGFuZyhzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4ge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuIFx0aWYgKCF0ZXN0X2JpdChJNDBFX0ZMQUdfUFRQX0VOQSwgcGYtXHUwMDNlZmxhZ3MpIHx8ICFwZi1cdTAwM2VwdHBfdHgpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiBcdC8qIE5vdGhpbmcgdG8gZG8gaWYgd2UmIzM5O3JlIG5vdCBhbHJlYWR5IHdhaXRpbmcgZm9yIGEgdGltZXN0YW1wICovXG4tXHRpZiAoIXRlc3RfYml0KF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLVx1MDAzZXN0YXRlKSlcbi1cdFx0cmV0dXJuO1xuJiM0MztcdGlmICghcGYtXHUwMDNlcHRwX3R4X3NrYilcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdC8qIFdlIGFscmVhZHkgaGF2ZSBhIGhhbmRsZXIgcm91dGluZSB3aGljaCBpcyBydW4gd2hlbiB3ZSBhcmUgbm90aWZpZWRcbiBcdCAqIG9mIGEgVHggdGltZXN0YW1wIGluIHRoZSBoYXJkd2FyZS4gSWYgd2UgZG9uJiMzOTt0IGdldCBhbiBpbnRlcnJ1cHRcbkBAIC03NDQsMTIgJiM0Mzs3NTgsMTYgQEAgdm9pZCBpNDBlX3B0cF90eF9oYW5nKHN0cnVjdCBpNDBlX3BmICpwZilcbiBcdGlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHBmLVx1MDAzZXB0cF90eF9zdGFydCAmIzQzOyBIWikpIHtcbiBcdFx0c2tiID0gcGYtXHUwMDNlcHRwX3R4X3NrYjtcbiBcdFx0cGYtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4tXHRcdGNsZWFyX2JpdF91bmxvY2soX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgcGYtXHUwMDNlc3RhdGUpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuIFxuLVx0XHQvKiBGcmVlIHRoZSBza2IgYWZ0ZXIgd2UgY2xlYXIgdGhlIGJpdGxvY2sgKi9cbiYjNDM7XHRcdC8qIEZyZWUgdGhlIHNrYiBhZnRlciByZWxlYXNpbmcgdGhlIGxvY2suICovXG4gXHRcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XG4gXHRcdHBmLVx1MDAzZXR4X2h3dHN0YW1wX3RpbWVvdXRzJiM0MzsmIzQzOztcbiYjNDM7XHRcdHJldHVybjtcbiBcdH1cbiYjNDM7XG4mIzQzO291dF91bmxvY2s6XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuIH1cbiBcbiAvKipcbkBAIC03NjMsMTcgJiM0Mzs3ODEsMjEgQEAgdm9pZCBpNDBlX3B0cF90eF9oYW5nKHN0cnVjdCBpNDBlX3BmICpwZilcbiB2b2lkIGk0MGVfcHRwX3R4X2h3dHN0YW1wKHN0cnVjdCBpNDBlX3BmICpwZilcbiB7XG4gXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHM7XG4tXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcGYtXHUwMDNlcHRwX3R4X3NrYjtcbiBcdHN0cnVjdCBpNDBlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHUzMiBoaSwgbG87XG4gXHR1NjQgbnM7XG4gXG4gXHRpZiAoIXRlc3RfYml0KEk0MEVfRkxBR19QVFBfRU5BLCBwZi1cdTAwM2VmbGFncykgfHwgIXBmLVx1MDAzZXB0cF90eClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogZG9uJiMzOTt0IGF0dGVtcHQgdG8gdGltZXN0YW1wIGlmIHdlIGRvbiYjMzk7dCBoYXZlIGFuIHNrYiAqL1xuLVx0aWYgKCFwZi1cdTAwM2VwdHBfdHhfc2tiKVxuLVx0XHRyZXR1cm47XG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGYtXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0LyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIHNrYiBiZWZvcmUgYW5vdGhlciBjbGVhbnVwIHBhdGggY2FuIGZyZWUgaXQuICovXG4mIzQzO1x0c2tiID0gcGYtXHUwMDNlcHRwX3R4X3NrYjtcbiYjNDM7XHRpZiAoIXNrYilcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdGxvID0gcmQzMihodywgSTQwRV9QUlRUU1lOX1RYVElNRV9MKTtcbiBcdGhpID0gcmQzMihodywgSTQwRV9QUlRUU1lOX1RYVElNRV9IKTtcbkBAIC03ODEsMTcgJiM0Mzs4MDMsMjEgQEAgdm9pZCBpNDBlX3B0cF90eF9od3RzdGFtcChzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4gXHRucyA9ICgoKHU2NCloaSkgXHUwMDNjXHUwMDNjIDMyKSB8IGxvO1xuIFx0aTQwZV9wdHBfY29udmVydF90b19od3RzdGFtcChcdTAwMjZzaGh3dHN0YW1wcywgbnMpO1xuIFxuLVx0LyogQ2xlYXIgdGhlIGJpdCBsb2NrIGFzIHNvb24gYXMgcG9zc2libGUgYWZ0ZXIgcmVhZGluZyB0aGUgcmVnaXN0ZXIsXG4tXHQgKiBhbmQgcHJpb3IgdG8gbm90aWZ5aW5nIHRoZSBzdGFjayB2aWEgc2tiX3RzdGFtcF90eCgpLiBPdGhlcndpc2Vcbi1cdCAqIGFwcGxpY2F0aW9ucyBtaWdodCB3YWtlIHVwIGFuZCBhdHRlbXB0IHRvIHJlcXVlc3QgYW5vdGhlciB0cmFuc21pdFxuLVx0ICogdGltZXN0YW1wIHByaW9yIHRvIHRoZSBiaXQgbG9jayBiZWluZyBjbGVhcmVkLlxuJiM0MztcdC8qIE1hcmsgdGhlIHNsb3QgYXZhaWxhYmxlIGFzIHNvb24gYXMgcG9zc2libGUgYWZ0ZXIgcmVhZGluZyB0aGVcbiYjNDM7XHQgKiByZWdpc3RlciBhbmQgYmVmb3JlIG5vdGlmeWluZyB0aGUgc3RhY2sgdmlhIHNrYl90c3RhbXBfdHgoKS5cbiYjNDM7XHQgKiBPdGhlcndpc2UsIGFwcGxpY2F0aW9ucyBtaWdodCB3YWtlIHVwIGFuZCByZXF1ZXN0IGFub3RoZXIgdHJhbnNtaXRcbiYjNDM7XHQgKiB0aW1lc3RhbXAgYmVmb3JlIHRoZSBzbG90IGlzIGF2YWlsYWJsZS5cbiBcdCAqL1xuIFx0cGYtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4tXHRjbGVhcl9iaXRfdW5sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4gXG4gXHQvKiBOb3RpZnkgdGhlIHN0YWNrIGFuZCBmcmVlIHRoZSBza2IgYWZ0ZXIgd2UmIzM5O3ZlIHVubG9ja2VkICovXG4gXHRza2JfdHN0YW1wX3R4KHNrYiwgXHUwMDI2c2hod3RzdGFtcHMpO1xuIFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiYjNDM7XHRyZXR1cm47XG4mIzQzO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGYtXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTE4Niw4ICYjNDM7MTIxMiw2IEBAIHN0YXRpYyBpbnQgaTQwZV9wdHBfc2V0X3RpbWVzdGFtcF9tb2RlKHN0cnVjdCBpNDBlX3BmICpwZixcbiBcdHJlZ3ZhbCB8PSAxIFx1MDAzY1x1MDAzYyBJNDBFX1BSVFRTWU5fQ1RMMF9FVkVOVF9JTlRfRU5BX1NISUZUO1xuIFx0d3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7XG4gXG4tXHRJTklUX1dPUksoXHUwMDI2cGYtXHUwMDNlcHRwX2V4dHRzMF93b3JrLCBpNDBlX3B0cF9leHR0czBfd29yayk7XG4tXG4gXHRzd2l0Y2ggKGNvbmZpZy1cdTAwM2V0eF90eXBlKSB7XG4gXHRjYXNlIEhXVFNUQU1QX1RYX09GRjpcbiBcdFx0cGYtXHUwMDNlcHRwX3R4ID0gZmFsc2U7XG5AQCAtMTMxMywxNyAmIzQzOzEzMzcsMjMgQEAgaW50IGk0MGVfcHRwX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0c3RydWN0IGk0MGVfcGYgKnBmID0gbnAtXHUwMDNldnNpLVx1MDAzZWJhY2s7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKCF0ZXN0X2JpdChJNDBFX0ZMQUdfUFRQX0VOQSwgcGYtXHUwMDNlZmxhZ3MpKVxuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwZi1cdTAwM2VwdHBfY29uZmlnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRlc3RfYml0KEk0MEVfRkxBR19QVFBfRU5BLCBwZi1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuIFxuIFx0ZXJyID0gaTQwZV9wdHBfc2V0X3RpbWVzdGFtcF9tb2RlKHBmLCBjb25maWcpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuIFxuIFx0Lyogc2F2ZSB0aGVzZSBzZXR0aW5ncyBmb3IgZnV0dXJlIHJlZmVyZW5jZSAqL1xuIFx0cGYtXHUwMDNldHN0YW1wX2NvbmZpZyA9ICpjb25maWc7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7dW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VwdHBfY29uZmlnX2xvY2spO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKlxuQEAgLTE1MzksMTkgJiM0MzsxNTY5LDMxIEBAIHZvaWQgaTQwZV9wdHBfc3RvcChzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGk0MGVfdnNpICptYWluX3ZzaSA9IGk0MGVfcGZfZ2V0X21haW5fdnNpKHBmKTtcbiBcdHN0cnVjdCBpNDBlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHUzMiByZWd2YWw7XG4gXG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwZi1cdTAwM2VwdHBfY29uZmlnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuIFx0Y2xlYXJfYml0KEk0MEVfRkxBR19QVFBfRU5BLCBwZi1cdTAwM2VmbGFncyk7XG4gXHRwZi1cdTAwM2VwdHBfdHggPSBmYWxzZTtcbiYjNDM7XHRza2IgPSBwZi1cdTAwM2VwdHBfdHhfc2tiO1xuJiM0MztcdHBmLVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGYtXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4gXHRwZi1cdTAwM2VwdHBfcnggPSBmYWxzZTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlcHRwX2NvbmZpZ19sb2NrKTtcbiBcbi1cdGlmIChwZi1cdTAwM2VwdHBfdHhfc2tiKSB7XG4tXHRcdHN0cnVjdCBza19idWZmICpza2IgPSBwZi1cdTAwM2VwdHBfdHhfc2tiO1xuJiM0MztcdC8qIFN0b3AgZXh0ZXJuYWwgdGltZXN0YW1wIGV2ZW50cyBiZWZvcmUgdW5yZWdpc3RlcmluZyB0aGUgY2xvY2suICovXG4mIzQzO1x0cmVndmFsID0gcmQzMihodywgSTQwRV9QUlRUU1lOX0NUTDApO1xuJiM0MztcdHJlZ3ZhbCBcdTAwMjY9IH5JNDBFX1BSVFRTWU5fQ1RMMF9FVkVOVF9JTlRfRU5BX01BU0s7XG4mIzQzO1x0d3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7XG4gXG4tXHRcdHBmLVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuLVx0XHRjbGVhcl9iaXRfdW5sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLVx1MDAzZXN0YXRlKTtcbiYjNDM7XHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZwZi1cdTAwM2VwdHBfZXh0dHMwX3dvcmspO1xuJiM0MztcbiYjNDM7XHRpZiAoc2tiKVxuIFx0XHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuLVx0fVxuIFxuIFx0aWYgKHBmLVx1MDAzZXB0cF9jbG9jaykge1xuIFx0XHRwdHBfY2xvY2tfdW5yZWdpc3RlcihwZi1cdTAwM2VwdHBfY2xvY2spO1xuQEAgLTE1NzAsMTAgJiM0MzsxNjEyLDUgQEAgdm9pZCBpNDBlX3B0cF9zdG9wKHN0cnVjdCBpNDBlX3BmICpwZilcbiBcdHJlZ3ZhbCBcdTAwMjY9IH5JNDBFX1BSVFRTWU5fQVVYXzBfUFRQRkxBR19NQVNLO1xuIFx0d3IzMihodywgSTQwRV9QUlRUU1lOX0FVWF8wKDApLCByZWd2YWwpO1xuIFxuLVx0LyogRGlzYWJsZSBpbnRlcnJ1cHRzICovXG4tXHRyZWd2YWwgPSByZDMyKGh3LCBJNDBFX1BSVFRTWU5fQ1RMMCk7XG4tXHRyZWd2YWwgXHUwMDI2PSB+STQwRV9QUlRUU1lOX0NUTDBfRVZFTlRfSU5UX0VOQV9NQVNLO1xuLVx0d3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7XG4tXG4gXHRpNDBlX3B0cF9mcmVlX3BpbnMocGYpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuaW5kZXggODk0ZjJkMDZkMzlkMC4uZjQzMDU0NmFjZjQyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmNcbkBAIC0zMTk4LDcgJiM0MzszMTk4LDkgQEAgc3RhdGljIGludCBpNDBlX3RzbyhzdHJ1Y3QgaTQwZV90eF9idWZmZXIgKmZpcnN0LCB1OCAqaGRyX2xlbixcbiBzdGF0aWMgaW50IGk0MGVfdHN5bihzdHJ1Y3QgaTQwZV9yaW5nICp0eF9yaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHQgICAgIHUzMiB0eF9mbGFncywgdTY0ICpjZF90eXBlX2NtZF90c29fbXNzKVxuIHtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0c3RydWN0IGk0MGVfcGYgKnBmO1xuJiM0MztcdGludCB0c3luID0gMDtcbiBcbiBcdGlmIChsaWtlbHkoIShza2Jfc2hpbmZvKHNrYiktXHUwMDNldHhfZmxhZ3MgXHUwMDI2IFNLQlRYX0hXX1RTVEFNUCkpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0zMjExLDIzICYjNDM7MzIxMywyOCBAQCBzdGF0aWMgaW50IGk0MGVfdHN5bihzdHJ1Y3QgaTQwZV9yaW5nICp0eF9yaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0ICogd2UgYXJlIG5vdCBhbHJlYWR5IHRyYW5zbWl0dGluZyBhIHBhY2tldCB0byBiZSB0aW1lc3RhbXBlZFxuIFx0ICovXG4gXHRwZiA9IGk0MGVfbmV0ZGV2X3RvX3BmKHR4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiBcdGlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLVx1MDAzZWZsYWdzKSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4tXHRpZiAocGYtXHUwMDNlcHRwX3R4IFx1MDAyNlx1MDAyNlxuLVx0ICAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgcGYtXHUwMDNlc3RhdGUpKSB7XG4mIzQzO1x0aWYgKHBmLVx1MDAzZXB0cF90eCBcdTAwMjZcdTAwMjYgIXBmLVx1MDAzZXB0cF90eF9za2IpIHtcbiBcdFx0c2tiX3NoaW5mbyhza2IpLVx1MDAzZXR4X2ZsYWdzIHw9IFNLQlRYX0lOX1BST0dSRVNTO1xuIFx0XHRwZi1cdTAwM2VwdHBfdHhfc3RhcnQgPSBqaWZmaWVzO1xuIFx0XHRwZi1cdTAwM2VwdHBfdHhfc2tiID0gc2tiX2dldChza2IpO1xuJiM0MztcdFx0dHN5biA9IDE7XG4gXHR9IGVsc2Uge1xuIFx0XHRwZi1cdTAwM2V0eF9od3RzdGFtcF9za2lwcGVkJiM0MzsmIzQzOztcbi1cdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHQqY2RfdHlwZV9jbWRfdHNvX21zcyB8PSAodTY0KUk0MEVfVFhfQ1RYX0RFU0NfVFNZTiBcdTAwM2NcdTAwM2Ncbi1cdFx0XHRcdEk0MEVfVFhEX0NUWF9RVzFfQ01EX1NISUZUO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cGYtXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcbiBcbi1cdHJldHVybiAxO1xuJiM0MztcdGlmICh0c3luKVxuJiM0MztcdFx0KmNkX3R5cGVfY21kX3Rzb19tc3MgfD0gKHU2NClJNDBFX1RYX0NUWF9ERVNDX1RTWU4gXHUwMDNjXHUwMDNjXG4mIzQzO1x0XHRcdFx0XHRJNDBFX1RYRF9DVFhfUVcxX0NNRF9TSElGVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRzeW47XG4gfVxuIFxuIC8qKlxuQEAgLTM5NTcsMTAgJiM0MzszOTY0LDIxIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpNDBlX3htaXRfZnJhbWVfcmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIGNsZWFudXBfdHhfdHN0YW1wOlxuIFx0aWYgKHVubGlrZWx5KHR4X2ZsYWdzIFx1MDAyNiBJNDBFX1RYX0ZMQUdTX1RTWU4pKSB7XG4gXHRcdHN0cnVjdCBpNDBlX3BmICpwZiA9IGk0MGVfbmV0ZGV2X3RvX3BmKHR4X3JpbmctXHUwMDNlbmV0ZGV2KTtcbiYjNDM7XHRcdHN0cnVjdCBza19idWZmICpwdHBfc2tiID0gTlVMTDtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGYtXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdC8qIEFub3RoZXIgY2xlYW51cCBwYXRoIG1heSBoYXZlIGhhbmRlZCB0aGUgc2xvdFxuJiM0MztcdFx0ICogdG8gYSBuZXcgc2tiLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAocGYtXHUwMDNlcHRwX3R4X3NrYiA9PSBza2IpIHtcbiYjNDM7XHRcdFx0cHRwX3NrYiA9IHBmLVx1MDAzZXB0cF90eF9za2I7XG4mIzQzO1x0XHRcdHBmLVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuIFxuLVx0XHRkZXZfa2ZyZWVfc2tiX2FueShwZi1cdTAwM2VwdHBfdHhfc2tiKTtcbi1cdFx0cGYtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4tXHRcdGNsZWFyX2JpdF91bmxvY2soX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgcGYtXHUwMDNlc3RhdGUpO1xuJiM0MztcdFx0aWYgKHB0cF9za2IpXG4mIzQzO1x0XHRcdGRldl9rZnJlZV9za2JfYW55KHB0cF9za2IpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwNjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIGk0MGUgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChJbnRlbCA0MCBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNWMxNTQwMzg2ZDMyY2NmMzFiMjliYTAzZmE1MDIwMDhkZDQ3ZjZmNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMDY6NTk6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZS5oCmluZGV4IDgzZTc4MDkxOWFjOTcuLjE4NDUyZjlhYTc0ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZS5oCkBAIC0xMDEsNyAmIzQzOzEwMSw2IEBAIGVudW0gaTQwZV9zdGF0ZSB7CiAJX19JNDBFX0dMT0JBTF9SRVNFVF9SRVFVRVNURUQsCiAJX19JNDBFX0VNUF9SRVNFVF9JTlRSX1JFQ0VJVkVELAogCV9fSTQwRV9TVVNQRU5ERUQsCi0JX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywKIAlfX0k0MEVfQkFEX0VFUFJPTSwKIAlfX0k0MEVfRE9XTl9SRVFVRVNURUQsCiAJX19JNDBFX0ZEX0ZMVVNIX1JFUVVFU1RFRCwKQEAgLTY2OSwxMiAmIzQzOzY2OCwxNiBAQCBzdHJ1Y3QgaTQwZV9wZiB7CiAJc3RydWN0IHRpbWVzcGVjNjQgcHRwX3ByZXZfaHdfdGltZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHRwX2V4dHRzMF93b3JrOwogCWt0aW1lX3QgcHRwX3Jlc2V0X3N0YXJ0OwomIzQzOwkvKiBTZXJpYWxpemVzIHRpbWVzdGFtcCBjb25maWd1cmF0aW9uIHdpdGggUFRQIHRlYXJkb3duLiAqLwomIzQzOwlzdHJ1Y3QgbXV0ZXggcHRwX2NvbmZpZ19sb2NrOwogCXN0cnVjdCBtdXRleCB0bXJlZ19sb2NrOyAvKiBVc2VkIHRvIHByb3RlY3QgdGhlIFNZU1RJTUUgcmVnaXN0ZXJzLiAqLwogCXUzMiBwdHBfYWRqX211bHQ7CiAJdTMyIHR4X2h3dHN0YW1wX3RpbWVvdXRzOwogCXUzMiB0eF9od3RzdGFtcF9za2lwcGVkOwogCXUzMiByeF9od3RzdGFtcF9jbGVhcmVkOwogCXUzMiBsYXRjaF9ldmVudF9mbGFnczsKJiM0MzsJLyogUHJvdGVjdHMgcHRwX3R4X3NrYiwgd2hpY2ggYWxzbyBpbmRpY2F0ZXMgdGhlIHNsb3Qgc3RhdGUuICovCiYjNDM7CXNwaW5sb2NrX3QgcHRwX3R4X2xvY2s7CiAJc3BpbmxvY2tfdCBwdHBfcnhfbG9jazsgLyogVXNlZCB0byBwcm90ZWN0IFJ4IHRpbWVzdGFtcCByZWdpc3RlcnMuICovCiAJdW5zaWduZWQgbG9uZyBsYXRjaF9ldmVudHNbNF07CiAJYm9vbCBwdHBfdHg7CkBAIC0xMzE1LDYgJiM0MzsxMzE4LDcgQEAgaW50IGk0MGVfcHRwX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwogdm9pZCBpNDBlX3B0cF9zYXZlX2h3X3RpbWUoc3RydWN0IGk0MGVfcGYgKnBmKTsKIHZvaWQgaTQwZV9wdHBfcmVzdG9yZV9od190aW1lKHN0cnVjdCBpNDBlX3BmICpwZik7CiYjNDM7dm9pZCBpNDBlX3B0cF9pbml0X3dvcmsoc3RydWN0IGk0MGVfcGYgKnBmKTsKIHZvaWQgaTQwZV9wdHBfaW5pdChzdHJ1Y3QgaTQwZV9wZiAqcGYpOwogdm9pZCBpNDBlX3B0cF9zdG9wKHN0cnVjdCBpNDBlX3BmICpwZik7CiBpbnQgaTQwZV9wdHBfYWxsb2NfcGlucyhzdHJ1Y3QgaTQwZV9wZiAqcGYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMKaW5kZXggYTA0NjgzMDA0YTU2Ny4uNDhiYTM4YTQ1MmQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jCkBAIC03LDYgJiM0Mzs3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pZl9icmlkZ2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl9tYWN2bGFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dhaXRfYml0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3BrdF9jbHMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQveGRwX3NvY2tfZHJ2LmgmZ3Q7CiAKQEAgLTEwODIyLDcgJiM0MzsxMDgyMyw4IEBAIHN0YXRpYyBpbnQgaTQwZV9yZXNldChzdHJ1Y3QgaTQwZV9wZiAqcGYpCiAJaWYgKHJldCkgewogCQlkZXZfaW5mbygmYW1wO3BmLSZndDtwZGV2LSZndDtkZXYsICYjMzQ7UEYgcmVzZXQgZmFpbGVkLCAlZFxuJiMzNDssIHJldCk7CiAJCXNldF9iaXQoX19JNDBFX1JFU0VUX0ZBSUxFRCwgcGYtJmd0O3N0YXRlKTsKLQkJY2xlYXJfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi0mZ3Q7c3RhdGUpOwomIzQzOwkJY2xlYXJfYW5kX3dha2VfdXBfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLAomIzQzOwkJCQkgICAgICBwZi0mZ3Q7c3RhdGUpOwogCX0gZWxzZSB7CiAJCXBmLSZndDtwZnJfY291bnQmIzQzOyYjNDM7OwogCX0KQEAgLTExMTE1LDcgJiM0MzsxMTExNyw3IEBAIHN0YXRpYyB2b2lkIGk0MGVfcmVidWlsZChzdHJ1Y3QgaTQwZV9wZiAqcGYsIGJvb2wgcmVpbml0LCBib29sIGxvY2tfYWNxdWlyZWQpCiBlbmRfY29yZV9yZXNldDoKIAljbGVhcl9iaXQoX19JNDBFX1JFU0VUX0ZBSUxFRCwgcGYtJmd0O3N0YXRlKTsKIGNsZWFyX3JlY292ZXJ5OgotCWNsZWFyX2JpdChfX0k0MEVfUkVTRVRfUkVDT1ZFUllfUEVORElORywgcGYtJmd0O3N0YXRlKTsKJiM0MzsJY2xlYXJfYW5kX3dha2VfdXBfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi0mZ3Q7c3RhdGUpOwogCWNsZWFyX2JpdChfX0k0MEVfVElNRU9VVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi0mZ3Q7c3RhdGUpOwogfQogCkBAIC0xMjgxOSw2ICYjNDM7MTI4MjEsOSBAQCBzdGF0aWMgaW50IGk0MGVfc3dfaW5pdChzdHJ1Y3QgaTQwZV9wZiAqcGYpCiAJCQkgJiMzNDt0b3RhbC1wb3J0LXNodXRkb3duIHdhcyBlbmFibGVkLCBsaW5rLWRvd24tb24tY2xvc2UgaXMgZm9yY2VkIG9uXG4mIzM0Oyk7CiAJfQogCW11dGV4X2luaXQoJmFtcDtwZi0mZ3Q7c3dpdGNoX211dGV4KTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3BmLSZndDtwdHBfY29uZmlnX2xvY2spOwomIzQzOwlpNDBlX3B0cF9pbml0X3dvcmsocGYpOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3BmLSZndDtwdHBfdHhfbG9jayk7CiAKIHN3X2luaXRfZG9uZToKIAlyZXR1cm4gZXJyOwpAQCAtMTYxNTcsNiAmIzQzOzE2MTYyLDIwIEBAIHN0YXRpYyB2b2lkIGk0MGVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCiAJaTQwZV9kZXZsaW5rX3VucmVnaXN0ZXIocGYpOwogCiYjNDM7CS8qIEludGVycnVwdHMgY2FuIHF1ZXVlIHRoZSBzZXJ2aWNlIHRhc2sgdW50aWwgX19JNDBFX0RPV04gaXMgc2V0LgomIzQzOwkgKiBEaXNhYmxlIGl0IHNvIG5vIHNlcnZpY2Ugd29yayBjYW4gb3V0bGl2ZSB0aGUgUEYuCiYjNDM7CSAqLwomIzQzOwlzZXRfYml0KF9fSTQwRV9TVVNQRU5ERUQsIHBmLSZndDtzdGF0ZSk7CiYjNDM7CWlmIChwZi0mZ3Q7c2VydmljZV90aW1lci5mdW5jdGlvbikKJiM0MzsJCXRpbWVyX3NodXRkb3duX3N5bmMoJmFtcDtwZi0mZ3Q7c2VydmljZV90aW1lcik7CiYjNDM7CWlmIChwZi0mZ3Q7c2VydmljZV90YXNrLmZ1bmMpCiYjNDM7CQlkaXNhYmxlX3dvcmtfc3luYygmYW1wO3BmLSZndDtzZXJ2aWNlX3Rhc2spOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBhbnkgcmVzZXQgb3duZXIgYmVmb3JlIHRlYXJpbmcgZG93biBkZXZpY2UgcmVzb3VyY2VzLiAqLwomIzQzOwl3YWl0X29uX2JpdF9sb2NrKHBmLSZndDtzdGF0ZSwgX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsCiYjNDM7CQkJIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKJiM0MzsJc2V0X2JpdChfX0k0MEVfSU5fUkVNT1ZFLCBwZi0mZ3Q7c3RhdGUpOwomIzQzOwogCWk0MGVfZGJnX3BmX2V4aXQocGYpOwogCiAJaTQwZV9wdHBfc3RvcChwZik7CkBAIC0xNjE2NSwyNiAmIzQzOzE2MTg0LDEyIEBAIHN0YXRpYyB2b2lkIGk0MGVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCWk0MGVfd3JpdGVfcnhfY3RsKGh3LCBJNDBFX1BGUUZfSEVOQSgwKSwgMCk7CiAJaTQwZV93cml0ZV9yeF9jdGwoaHcsIEk0MEVfUEZRRl9IRU5BKDEpLCAwKTsKIAotCS8qIEdyYWIgX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcgYW5kIHNldCBfX0k0MEVfSU5fUkVNT1ZFCi0JICogZmxhZ3MsIG9uY2UgdGhleSBhcmUgc2V0LCBpNDBlX3JlYnVpbGQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgYXMKLQkgKiBpNDBlX3ByZXBfZm9yX3Jlc2V0IGFsd2F5cyByZXR1cm5zIGVhcmx5LgotCSAqLwotCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi0mZ3Q7c3RhdGUpKQotCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7Ci0Jc2V0X2JpdChfX0k0MEVfSU5fUkVNT1ZFLCBwZi0mZ3Q7c3RhdGUpOwotCiAJaWYgKHRlc3RfYml0KEk0MEVfRkxBR19TUklPVl9FTkEsIHBmLSZndDtmbGFncykpIHsKIAkJc2V0X2JpdChfX0k0MEVfVkZfUkVTRVRTX0RJU0FCTEVELCBwZi0mZ3Q7c3RhdGUpOwogCQlpNDBlX2ZyZWVfdmZzKHBmKTsKIAkJY2xlYXJfYml0KEk0MEVfRkxBR19TUklPVl9FTkEsIHBmLSZndDtmbGFncyk7CiAJfQotCS8qIG5vIG1vcmUgc2NoZWR1bGluZyBvZiBhbnkgdGFzayAqLwotCXNldF9iaXQoX19JNDBFX1NVU1BFTkRFRCwgcGYtJmd0O3N0YXRlKTsKIAlzZXRfYml0KF9fSTQwRV9ET1dOLCBwZi0mZ3Q7c3RhdGUpOwotCWlmIChwZi0mZ3Q7c2VydmljZV90aW1lci5mdW5jdGlvbikKLQkJdGltZXJfc2h1dGRvd25fc3luYygmYW1wO3BmLSZndDtzZXJ2aWNlX3RpbWVyKTsKLQlpZiAocGYtJmd0O3NlcnZpY2VfdGFzay5mdW5jKQotCQljYW5jZWxfd29ya19zeW5jKCZhbXA7cGYtJmd0O3NlcnZpY2VfdGFzayk7CiAKIAlpZiAodGVzdF9iaXQoX19JNDBFX1JFQ09WRVJZX01PREUsIHBmLSZndDtzdGF0ZSkpIHsKIAkJc3RydWN0IGk0MGVfdnNpICp2c2kgPSBwZi0mZ3Q7dnNpWzBdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jCmluZGV4IGZmNjJiNWYyYzgxNTAuLjVmMTVhM2Q0YTkxZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9wdHAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfcHRwLmMKQEAgLTE2OSw2ICYjNDM7MTY5LDE3IEBAIHN0YXRpYyB2b2lkIGk0MGVfcHRwX2V4dHRzMF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlwdHBfY2xvY2tfZXZlbnQocGYtJmd0O3B0cF9jbG9jaywgJmFtcDtldmVudCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpNDBlX3B0cF9pbml0X3dvcmsgLSBJbml0aWFsaXplIFBUUCB3b3JrIGZvciBhIFBGCiYjNDM7ICogQHBmOiBCb2FyZCBwcml2YXRlIHN0cnVjdHVyZQomIzQzOyAqCiYjNDM7ICogSW5pdGlhbGl6ZSB3b3JrIHdoaWNoIG11c3QgcmVtYWluIHZhbGlkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIFBGLgomIzQzOyAqLwomIzQzO3ZvaWQgaTQwZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpNDBlX3BmICpwZikKJiM0Mzt7CiYjNDM7CUlOSVRfV09SSygmYW1wO3BmLSZndDtwdHBfZXh0dHMwX3dvcmssIGk0MGVfcHRwX2V4dHRzMF93b3JrKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIGk0MGVfaXNfcHRwX3Bpbl9kZXYgLSBjaGVjayBpZiBkZXZpY2Ugc3VwcG9ydHMgUFRQIHBpbnMKICAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlCkBAIC03MjgsMTQgJiM0Mzs3MzksMTcgQEAgdm9pZCBpNDBlX3B0cF9yeF9oYW5nKHN0cnVjdCBpNDBlX3BmICpwZikKICAqKi8KIHZvaWQgaTQwZV9wdHBfdHhfaGFuZyhzdHJ1Y3QgaTQwZV9wZiAqcGYpCiB7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCWlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLSZndDtmbGFncykgfHwgIXBmLSZndDtwdHBfdHgpCiAJCXJldHVybjsKIAomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3BmLSZndDtwdHBfdHhfbG9jaywgZmxhZ3MpOwomIzQzOwogCS8qIE5vdGhpbmcgdG8gZG8gaWYgd2UmIzM5O3JlIG5vdCBhbHJlYWR5IHdhaXRpbmcgZm9yIGEgdGltZXN0YW1wICovCi0JaWYgKCF0ZXN0X2JpdChfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLCBwZi0mZ3Q7c3RhdGUpKQotCQlyZXR1cm47CiYjNDM7CWlmICghcGYtJmd0O3B0cF90eF9za2IpCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKiBXZSBhbHJlYWR5IGhhdmUgYSBoYW5kbGVyIHJvdXRpbmUgd2hpY2ggaXMgcnVuIHdoZW4gd2UgYXJlIG5vdGlmaWVkCiAJICogb2YgYSBUeCB0aW1lc3RhbXAgaW4gdGhlIGhhcmR3YXJlLiBJZiB3ZSBkb24mIzM5O3QgZ2V0IGFuIGludGVycnVwdApAQCAtNzQ0LDEyICYjNDM7NzU4LDE2IEBAIHZvaWQgaTQwZV9wdHBfdHhfaGFuZyhzdHJ1Y3QgaTQwZV9wZiAqcGYpCiAJaWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMocGYtJmd0O3B0cF90eF9zdGFydCAmIzQzOyBIWikpIHsKIAkJc2tiID0gcGYtJmd0O3B0cF90eF9za2I7CiAJCXBmLSZndDtwdHBfdHhfc2tiID0gTlVMTDsKLQkJY2xlYXJfYml0X3VubG9jayhfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLCBwZi0mZ3Q7c3RhdGUpOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BmLSZndDtwdHBfdHhfbG9jaywgZmxhZ3MpOwogCi0JCS8qIEZyZWUgdGhlIHNrYiBhZnRlciB3ZSBjbGVhciB0aGUgYml0bG9jayAqLwomIzQzOwkJLyogRnJlZSB0aGUgc2tiIGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jay4gKi8KIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcGYtJmd0O3R4X2h3dHN0YW1wX3RpbWVvdXRzJiM0MzsmIzQzOzsKJiM0MzsJCXJldHVybjsKIAl9CiYjNDM7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BmLSZndDtwdHBfdHhfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKQEAgLTc2MywxNyAmIzQzOzc4MSwyMSBAQCB2b2lkIGk0MGVfcHRwX3R4X2hhbmcoc3RydWN0IGk0MGVfcGYgKnBmKQogdm9pZCBpNDBlX3B0cF90eF9od3RzdGFtcChzdHJ1Y3QgaTQwZV9wZiAqcGYpCiB7CiAJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzOwotCXN0cnVjdCBza19idWZmICpza2IgPSBwZi0mZ3Q7cHRwX3R4X3NrYjsKIAlzdHJ1Y3QgaTQwZV9odyAqaHcgPSAmYW1wO3BmLSZndDtodzsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MzIgaGksIGxvOwogCXU2NCBuczsKIAogCWlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLSZndDtmbGFncykgfHwgIXBmLSZndDtwdHBfdHgpCiAJCXJldHVybjsKIAotCS8qIGRvbiYjMzk7dCBhdHRlbXB0IHRvIHRpbWVzdGFtcCBpZiB3ZSBkb24mIzM5O3QgaGF2ZSBhbiBza2IgKi8KLQlpZiAoIXBmLSZndDtwdHBfdHhfc2tiKQotCQlyZXR1cm47CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cGYtJmd0O3B0cF90eF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CS8qIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBza2IgYmVmb3JlIGFub3RoZXIgY2xlYW51cCBwYXRoIGNhbiBmcmVlIGl0LiAqLwomIzQzOwlza2IgPSBwZi0mZ3Q7cHRwX3R4X3NrYjsKJiM0MzsJaWYgKCFza2IpCiYjNDM7CQlnb3RvIG91dF91bmxvY2s7CiAKIAlsbyA9IHJkMzIoaHcsIEk0MEVfUFJUVFNZTl9UWFRJTUVfTCk7CiAJaGkgPSByZDMyKGh3LCBJNDBFX1BSVFRTWU5fVFhUSU1FX0gpOwpAQCAtNzgxLDE3ICYjNDM7ODAzLDIxIEBAIHZvaWQgaTQwZV9wdHBfdHhfaHd0c3RhbXAoc3RydWN0IGk0MGVfcGYgKnBmKQogCW5zID0gKCgodTY0KWhpKSAmbHQ7Jmx0OyAzMikgfCBsbzsKIAlpNDBlX3B0cF9jb252ZXJ0X3RvX2h3dHN0YW1wKCZhbXA7c2hod3RzdGFtcHMsIG5zKTsKIAotCS8qIENsZWFyIHRoZSBiaXQgbG9jayBhcyBzb29uIGFzIHBvc3NpYmxlIGFmdGVyIHJlYWRpbmcgdGhlIHJlZ2lzdGVyLAotCSAqIGFuZCBwcmlvciB0byBub3RpZnlpbmcgdGhlIHN0YWNrIHZpYSBza2JfdHN0YW1wX3R4KCkuIE90aGVyd2lzZQotCSAqIGFwcGxpY2F0aW9ucyBtaWdodCB3YWtlIHVwIGFuZCBhdHRlbXB0IHRvIHJlcXVlc3QgYW5vdGhlciB0cmFuc21pdAotCSAqIHRpbWVzdGFtcCBwcmlvciB0byB0aGUgYml0IGxvY2sgYmVpbmcgY2xlYXJlZC4KJiM0MzsJLyogTWFyayB0aGUgc2xvdCBhdmFpbGFibGUgYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciByZWFkaW5nIHRoZQomIzQzOwkgKiByZWdpc3RlciBhbmQgYmVmb3JlIG5vdGlmeWluZyB0aGUgc3RhY2sgdmlhIHNrYl90c3RhbXBfdHgoKS4KJiM0MzsJICogT3RoZXJ3aXNlLCBhcHBsaWNhdGlvbnMgbWlnaHQgd2FrZSB1cCBhbmQgcmVxdWVzdCBhbm90aGVyIHRyYW5zbWl0CiYjNDM7CSAqIHRpbWVzdGFtcCBiZWZvcmUgdGhlIHNsb3QgaXMgYXZhaWxhYmxlLgogCSAqLwogCXBmLSZndDtwdHBfdHhfc2tiID0gTlVMTDsKLQljbGVhcl9iaXRfdW5sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLSZndDtzdGF0ZSk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwZi0mZ3Q7cHRwX3R4X2xvY2ssIGZsYWdzKTsKIAogCS8qIE5vdGlmeSB0aGUgc3RhY2sgYW5kIGZyZWUgdGhlIHNrYiBhZnRlciB3ZSYjMzk7dmUgdW5sb2NrZWQgKi8KIAlza2JfdHN0YW1wX3R4KHNrYiwgJmFtcDtzaGh3dHN0YW1wcyk7CiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKJiM0MzsJcmV0dXJuOwomIzQzOwomIzQzO291dF91bmxvY2s6CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwZi0mZ3Q7cHRwX3R4X2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCkBAIC0xMTg2LDggJiM0MzsxMjEyLDYgQEAgc3RhdGljIGludCBpNDBlX3B0cF9zZXRfdGltZXN0YW1wX21vZGUoc3RydWN0IGk0MGVfcGYgKnBmLAogCXJlZ3ZhbCB8PSAxICZsdDsmbHQ7IEk0MEVfUFJUVFNZTl9DVEwwX0VWRU5UX0lOVF9FTkFfU0hJRlQ7CiAJd3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7CiAKLQlJTklUX1dPUksoJmFtcDtwZi0mZ3Q7cHRwX2V4dHRzMF93b3JrLCBpNDBlX3B0cF9leHR0czBfd29yayk7Ci0KIAlzd2l0Y2ggKGNvbmZpZy0mZ3Q7dHhfdHlwZSkgewogCWNhc2UgSFdUU1RBTVBfVFhfT0ZGOgogCQlwZi0mZ3Q7cHRwX3R4ID0gZmFsc2U7CkBAIC0xMzEzLDE3ICYjNDM7MTMzNywyMyBAQCBpbnQgaTQwZV9wdHBfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJc3RydWN0IGk0MGVfcGYgKnBmID0gbnAtJmd0O3ZzaS0mZ3Q7YmFjazsKIAlpbnQgZXJyOwogCi0JaWYgKCF0ZXN0X2JpdChJNDBFX0ZMQUdfUFRQX0VOQSwgcGYtJmd0O2ZsYWdzKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cGYtJmd0O3B0cF9jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLSZndDtmbGFncykpIHsKJiM0MzsJCWVyciA9IC1FT1BOT1RTVVBQOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KIAogCWVyciA9IGk0MGVfcHRwX3NldF90aW1lc3RhbXBfbW9kZShwZiwgY29uZmlnKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byB1bmxvY2s7CiAKIAkvKiBzYXZlIHRoZXNlIHNldHRpbmdzIGZvciBmdXR1cmUgcmVmZXJlbmNlICovCiAJcGYtJmd0O3RzdGFtcF9jb25maWcgPSAqY29uZmlnOwogCi0JcmV0dXJuIDA7CiYjNDM7dW5sb2NrOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwZi0mZ3Q7cHRwX2NvbmZpZ19sb2NrKTsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogLyoqCkBAIC0xNTM5LDE5ICYjNDM7MTU2OSwzMSBAQCB2b2lkIGk0MGVfcHRwX3N0b3Aoc3RydWN0IGk0MGVfcGYgKnBmKQogewogCXN0cnVjdCBpNDBlX3ZzaSAqbWFpbl92c2kgPSBpNDBlX3BmX2dldF9tYWluX3ZzaShwZik7CiAJc3RydWN0IGk0MGVfaHcgKmh3ID0gJmFtcDtwZi0mZ3Q7aHc7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2I7CiAJdTMyIHJlZ3ZhbDsKIAomIzQzOwltdXRleF9sb2NrKCZhbXA7cGYtJmd0O3B0cF9jb25maWdfbG9jayk7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cGYtJmd0O3B0cF90eF9sb2NrLCBmbGFncyk7CiAJY2xlYXJfYml0KEk0MEVfRkxBR19QVFBfRU5BLCBwZi0mZ3Q7ZmxhZ3MpOwogCXBmLSZndDtwdHBfdHggPSBmYWxzZTsKJiM0MzsJc2tiID0gcGYtJmd0O3B0cF90eF9za2I7CiYjNDM7CXBmLSZndDtwdHBfdHhfc2tiID0gTlVMTDsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3BmLSZndDtwdHBfdHhfbG9jaywgZmxhZ3MpOwomIzQzOwogCXBmLSZndDtwdHBfcnggPSBmYWxzZTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGYtJmd0O3B0cF9jb25maWdfbG9jayk7CiAKLQlpZiAocGYtJmd0O3B0cF90eF9za2IpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBmLSZndDtwdHBfdHhfc2tiOwomIzQzOwkvKiBTdG9wIGV4dGVybmFsIHRpbWVzdGFtcCBldmVudHMgYmVmb3JlIHVucmVnaXN0ZXJpbmcgdGhlIGNsb2NrLiAqLwomIzQzOwlyZWd2YWwgPSByZDMyKGh3LCBJNDBFX1BSVFRTWU5fQ1RMMCk7CiYjNDM7CXJlZ3ZhbCAmYW1wOz0gfkk0MEVfUFJUVFNZTl9DVEwwX0VWRU5UX0lOVF9FTkFfTUFTSzsKJiM0MzsJd3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7CiAKLQkJcGYtJmd0O3B0cF90eF9za2IgPSBOVUxMOwotCQljbGVhcl9iaXRfdW5sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLSZndDtzdGF0ZSk7CiYjNDM7CWRpc2FibGVfd29ya19zeW5jKCZhbXA7cGYtJmd0O3B0cF9leHR0czBfd29yayk7CiYjNDM7CiYjNDM7CWlmIChza2IpCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfQogCiAJaWYgKHBmLSZndDtwdHBfY2xvY2spIHsKIAkJcHRwX2Nsb2NrX3VucmVnaXN0ZXIocGYtJmd0O3B0cF9jbG9jayk7CkBAIC0xNTcwLDEwICYjNDM7MTYxMiw1IEBAIHZvaWQgaTQwZV9wdHBfc3RvcChzdHJ1Y3QgaTQwZV9wZiAqcGYpCiAJcmVndmFsICZhbXA7PSB+STQwRV9QUlRUU1lOX0FVWF8wX1BUUEZMQUdfTUFTSzsKIAl3cjMyKGh3LCBJNDBFX1BSVFRTWU5fQVVYXzAoMCksIHJlZ3ZhbCk7CiAKLQkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KLQlyZWd2YWwgPSByZDMyKGh3LCBJNDBFX1BSVFRTWU5fQ1RMMCk7Ci0JcmVndmFsICZhbXA7PSB+STQwRV9QUlRUU1lOX0NUTDBfRVZFTlRfSU5UX0VOQV9NQVNLOwotCXdyMzIoaHcsIEk0MEVfUFJUVFNZTl9DVEwwLCByZWd2YWwpOwotCiAJaTQwZV9wdHBfZnJlZV9waW5zKHBmKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jCmluZGV4IDg5NGYyZDA2ZDM5ZDAuLmY0MzA1NDZhY2Y0MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYwpAQCAtMzE5OCw3ICYjNDM7MzE5OCw5IEBAIHN0YXRpYyBpbnQgaTQwZV90c28oc3RydWN0IGk0MGVfdHhfYnVmZmVyICpmaXJzdCwgdTggKmhkcl9sZW4sCiBzdGF0aWMgaW50IGk0MGVfdHN5bihzdHJ1Y3QgaTQwZV9yaW5nICp0eF9yaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIHUzMiB0eF9mbGFncywgdTY0ICpjZF90eXBlX2NtZF90c29fbXNzKQogewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpNDBlX3BmICpwZjsKJiM0MzsJaW50IHRzeW4gPSAwOwogCiAJaWYgKGxpa2VseSghKHNrYl9zaGluZm8oc2tiKS0mZ3Q7dHhfZmxhZ3MgJmFtcDsgU0tCVFhfSFdfVFNUQU1QKSkpCiAJCXJldHVybiAwOwpAQCAtMzIxMSwyMyAmIzQzOzMyMTMsMjggQEAgc3RhdGljIGludCBpNDBlX3RzeW4oc3RydWN0IGk0MGVfcmluZyAqdHhfcmluZywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgKiB3ZSBhcmUgbm90IGFscmVhZHkgdHJhbnNtaXR0aW5nIGEgcGFja2V0IHRvIGJlIHRpbWVzdGFtcGVkCiAJICovCiAJcGYgPSBpNDBlX25ldGRldl90b19wZih0eF9yaW5nLSZndDtuZXRkZXYpOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3BmLSZndDtwdHBfdHhfbG9jaywgZmxhZ3MpOwomIzQzOwogCWlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLSZndDtmbGFncykpCi0JCXJldHVybiAwOwomIzQzOwkJZ290byBvdXRfdW5sb2NrOwogCi0JaWYgKHBmLSZndDtwdHBfdHggJmFtcDsmYW1wOwotCSAgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLSZndDtzdGF0ZSkpIHsKJiM0MzsJaWYgKHBmLSZndDtwdHBfdHggJmFtcDsmYW1wOyAhcGYtJmd0O3B0cF90eF9za2IpIHsKIAkJc2tiX3NoaW5mbyhza2IpLSZndDt0eF9mbGFncyB8PSBTS0JUWF9JTl9QUk9HUkVTUzsKIAkJcGYtJmd0O3B0cF90eF9zdGFydCA9IGppZmZpZXM7CiAJCXBmLSZndDtwdHBfdHhfc2tiID0gc2tiX2dldChza2IpOwomIzQzOwkJdHN5biA9IDE7CiAJfSBlbHNlIHsKIAkJcGYtJmd0O3R4X2h3dHN0YW1wX3NraXBwZWQmIzQzOyYjNDM7OwotCQlyZXR1cm4gMDsKIAl9CiAKLQkqY2RfdHlwZV9jbWRfdHNvX21zcyB8PSAodTY0KUk0MEVfVFhfQ1RYX0RFU0NfVFNZTiAmbHQ7Jmx0OwotCQkJCUk0MEVfVFhEX0NUWF9RVzFfQ01EX1NISUZUOwomIzQzO291dF91bmxvY2s6CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwZi0mZ3Q7cHRwX3R4X2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiAxOwomIzQzOwlpZiAodHN5bikKJiM0MzsJCSpjZF90eXBlX2NtZF90c29fbXNzIHw9ICh1NjQpSTQwRV9UWF9DVFhfREVTQ19UU1lOICZsdDsmbHQ7CiYjNDM7CQkJCQlJNDBFX1RYRF9DVFhfUVcxX0NNRF9TSElGVDsKJiM0MzsKJiM0MzsJcmV0dXJuIHRzeW47CiB9CiAKIC8qKgpAQCAtMzk1NywxMCAmIzQzOzM5NjQsMjEgQEAgc3RhdGljIG5ldGRldl90eF90IGk0MGVfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsCiBjbGVhbnVwX3R4X3RzdGFtcDoKIAlpZiAodW5saWtlbHkodHhfZmxhZ3MgJmFtcDsgSTQwRV9UWF9GTEFHU19UU1lOKSkgewogCQlzdHJ1Y3QgaTQwZV9wZiAqcGYgPSBpNDBlX25ldGRldl90b19wZih0eF9yaW5nLSZndDtuZXRkZXYpOwomIzQzOwkJc3RydWN0IHNrX2J1ZmYgKnB0cF9za2IgPSBOVUxMOwomIzQzOwkJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cGYtJmd0O3B0cF90eF9sb2NrLCBmbGFncyk7CiYjNDM7CQkvKiBBbm90aGVyIGNsZWFudXAgcGF0aCBtYXkgaGF2ZSBoYW5kZWQgdGhlIHNsb3QKJiM0MzsJCSAqIHRvIGEgbmV3IHNrYi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHBmLSZndDtwdHBfdHhfc2tiID09IHNrYikgewomIzQzOwkJCXB0cF9za2IgPSBwZi0mZ3Q7cHRwX3R4X3NrYjsKJiM0MzsJCQlwZi0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7cGYtJmd0O3B0cF90eF9sb2NrLCBmbGFncyk7CiAKLQkJZGV2X2tmcmVlX3NrYl9hbnkocGYtJmd0O3B0cF90eF9za2IpOwotCQlwZi0mZ3Q7cHRwX3R4X3NrYiA9IE5VTEw7Ci0JCWNsZWFyX2JpdF91bmxvY2soX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgcGYtJmd0O3N0YXRlKTsKJiM0MzsJCWlmIChwdHBfc2tiKQomIzQzOwkJCWRldl9rZnJlZV9za2JfYW55KHB0cF9za2IpOwogCX0KIAogCXJldHVybiBORVRERVZfVFhfT0s7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA2OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNzUKCQkJCQkJCW91dHB1dDogOTAKCQkJCQkJCXRob3VnaHRzOiAxMDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBpNDBlIERyaXZlciBQYXRjaCBhbmQgRnV6emluZyBGZWFzaWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIHRoZSBgaTQwZWAgZHJpdmVyIOKAkyBJbnRlbCYjMzk7cyA0MCBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIsIFhMNzEwIEZhbWlseS4gUmlnaHQgYXdheSwgSSBzZWUgY2hhbmdlcyBpbnZvbHZpbmcgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM6IHJlcGxhY2luZyBhIGJpdCBmbGFnIChgX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTU2ApIHdpdGggYSBzcGlubG9jayAoYHB0cF90eF9sb2NrYCksIGludHJvZHVjaW5nIGEgbXV0ZXggKGBwdHBfY29uZmlnX2xvY2tgKSwgYW5kIHR3ZWFrcyB0byBob3cgcmVzZXQgcmVjb3ZlcnkgaXMgaGFuZGxlZCAoYGNsZWFyX2FuZF93YWtlX3VwX2JpdGAsIGB3YWl0X29uX2JpdF9sb2NrYCkuIEl0IGFsc28gaW5jbHVkZXMgbW9kaWZpY2F0aW9ucyB0byB0aGUgYGk0MGVfcmVtb3ZlYCBmdW5jdGlvbiB0byBzYWZlbHkgZGlzYWJsZSBzZXJ2aWNlcyBiZWZvcmUgcmVzb3VyY2UgdGVhcmRvd24uCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZ1enphYmxlLiBTaW5jZSBpdCYjMzk7cyBhbiBFdGhlcm5ldCBkcml2ZXIsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdmlydHVhbGl6YXRpb24gYW5kIHdoZXRoZXIgSSBjYW4gdGVzdCB0aGlzIHdpdGhpbiBRRU1VLiBCdXQgd2FpdCwgYGk0MGVgIGlzIGEgKnBoeXNpY2FsKiBFdGhlcm5ldCBkcml2ZXIuIERvZXMgUUVNVSBldmVuIGVtdWxhdGUgYGk0MGVgIGhhcmR3YXJlPyBJIG5lZWQgdG8gY2hlY2suCgpMZXQgbWUgcmVjYWxsIHdoYXQgUUVNVSBvZmZlcnMuIEl0IGhhcyBgZTEwMDBgLCBgZTEwMDBlYCwgYGlnYmAsIGB2bXhuZXQzYCwgYHJ0bDgxMzlgLCBhbmQgYHZpcnRpby1uZXRgLiBCdXQsIGRvIHRoZXkgZW11bGF0ZSBgaTQwZWAgc3BlY2lmaWNhbGx5PyBObywgYSBxdWljayBjaGVjayBvZiBRRU1VJiMzOTtzIGRldmljZSBsaXN0IGNvbmZpcm1zIHRoYXQgdGhlcmUmIzM5O3Mgbm8gYGk0MGVgIGVtdWxhdGlvbi4gT2theSwgc28gaXQgbG9va3MgbGlrZSBRRU1VIGRvZXMgKm5vdCogb2ZmZXIgYW4gZW11bGF0ZWQgdmVyc2lvbiBvZiB0aGUgaTQwZS4KCkkgY29uc2lkZXJlZCBkaWdnaW5nIGludG8gdGhlIFFFTVUgc291cmNlLCBidXQgSSBkb24mIzM5O3QgaGF2ZSBpdCBhdCBoYW5kIHJpZ2h0IG5vdy4gTW9yZSBpbXBvcnRhbnRseSwgaXQmIzM5O3MgY2xlYXIgdGhhdCBpdCYjMzk7cyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgcmVzaWRpbmcgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvYC4gR2l2ZW4gaXRzIHBoeXNpY2FsIGhhcmR3YXJlIG5hdHVyZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBmdXp6aW5nIGZlYXNpYmlsaXR5IHF1ZXN0aW9uIGFzIGEgKnZpcnR1YWxpemVkKiBlbnZpcm9ubWVudC4KCkxvb2tpbmcgYmFjayBhdCB0aGUgcmVxdWlyZW1lbnRzLCBJIHJlbWVtYmVyIHRoZSBjcml0ZXJpYTogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpUaGlzIGV4YWN0bHkgZml0cyB0aGUgYmlsbC4gVGhlIGBpNDBlYCBkcml2ZXIgaXMgYSBoYXJkd2FyZSBkcml2ZXIgZm9yIGEgcGh5c2ljYWwgUENJZSBjYXJkLiBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIGBpNDBlYCBoYXJkd2FyZS4gQW5kIHRoZXJlZm9yZSwgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gd29uJiMzOTt0IHdvcmsgZm9yIHRoaXMgZHJpdmVyLgoKVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHRoYXQgbm8gb3RoZXIgdmlydHVhbGl6YXRpb24gb3B0aW9uIGNhbiByZWFjaCB0aGlzLiBJIHNlYXJjaGVkIG15IG1lbW9yaWVzIHRvIGNoZWNrIGZvciBmdXp6aW5nIG9mIGBpNDBlYCB0aHJvdWdoIHN5emthbGxlci4gU2luY2UgdGhlIGRldmljZSBpc24mIzM5O3QgdmlydHVhbGl6ZWQsIHN5emthbGxlciBnZW5lcmFsbHkgd29uJiMzOTt0IGZ1enogYGk0MGVgLiBJIHRoaW5rIEkgaGF2ZSBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZS4KCkkmIzM5O2xsIGNoZWNrIHNvbWUgbW9yZSBieSBjaGVja2luZyBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG1vY2tzIG9yIHNpbWlsYXIuCgpOb3BlLCBubyBzdWNoIHRoaW5ncy4gSXQmIzM5O3MgYSBzdGFuZGFyZCBJbnRlbCBFdGhlcm5ldCBkcml2ZXIuCgpUaGUgcGF0Y2ggZGVmaW5pdGl2ZWx5IG1vZGlmaWVzIGEgaGFyZHdhcmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvYC4gVGhhdCBtZWFucyBJIGhhdmUgdG8gcmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciAoSW50ZWwgaTQwZSkgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMuIFRoaXMgY29kZSBpcyBpbmFjY2Vzc2libGUgdG8gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwLiBJJiMzOTttIGdvaW5nIHRvIHNldCBXb3J0aEZ1enppbmc9ZmFsc2UuIExldCYjMzk7cyBjYWxsIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDA2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIGk0MGUgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChJbnRlbCA0MCBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgaTQwZSBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKEludGVsIDQwIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlcikgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdXNlZCBmb3IgZnV6emluZy4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNjo1OTowNS40NjY0Mzc4MDhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI0MDUxODE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIGk0MGUgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChJbnRlbCA0MCBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwNjo1OTowNS40NjY0NDQzMDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDQyNjM0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1YzE1NDAzODZkMzJjY2YzMWIyOWJhMDNmYTUwMjAwOGRkNDdmNmY1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMDY6NTk6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGUuaFxcbmluZGV4IDgzZTc4MDkxOWFjOTcuLjE4NDUyZjlhYTc0ZTEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGUuaFxcbkBAIC0xMDEsNyArMTAxLDYgQEAgZW51bSBpNDBlX3N0YXRlIHtcXG4gXFx0X19JNDBFX0dMT0JBTF9SRVNFVF9SRVFVRVNURUQsXFxuIFxcdF9fSTQwRV9FTVBfUkVTRVRfSU5UUl9SRUNFSVZFRCxcXG4gXFx0X19JNDBFX1NVU1BFTkRFRCxcXG4tXFx0X19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUyxcXG4gXFx0X19JNDBFX0JBRF9FRVBST00sXFxuIFxcdF9fSTQwRV9ET1dOX1JFUVVFU1RFRCxcXG4gXFx0X19JNDBFX0ZEX0ZMVVNIX1JFUVVFU1RFRCxcXG5AQCAtNjY5LDEyICs2NjgsMTYgQEAgc3RydWN0IGk0MGVfcGYge1xcbiBcXHRzdHJ1Y3QgdGltZXNwZWM2NCBwdHBfcHJldl9od190aW1lO1xcbiBcXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHRwX2V4dHRzMF93b3JrO1xcbiBcXHRrdGltZV90IHB0cF9yZXNldF9zdGFydDtcXG4rXFx0LyogU2VyaWFsaXplcyB0aW1lc3RhbXAgY29uZmlndXJhdGlvbiB3aXRoIFBUUCB0ZWFyZG93bi4gKi9cXG4rXFx0c3RydWN0IG11dGV4IHB0cF9jb25maWdfbG9jaztcXG4gXFx0c3RydWN0IG11dGV4IHRtcmVnX2xvY2s7IC8qIFVzZWQgdG8gcHJvdGVjdCB0aGUgU1lTVElNRSByZWdpc3RlcnMuICovXFxuIFxcdHUzMiBwdHBfYWRqX211bHQ7XFxuIFxcdHUzMiB0eF9od3RzdGFtcF90aW1lb3V0cztcXG4gXFx0dTMyIHR4X2h3dHN0YW1wX3NraXBwZWQ7XFxuIFxcdHUzMiByeF9od3RzdGFtcF9jbGVhcmVkO1xcbiBcXHR1MzIgbGF0Y2hfZXZlbnRfZmxhZ3M7XFxuK1xcdC8qIFByb3RlY3RzIHB0cF90eF9za2IsIHdoaWNoIGFsc28gaW5kaWNhdGVzIHRoZSBzbG90IHN0YXRlLiAqL1xcbitcXHRzcGlubG9ja190IHB0cF90eF9sb2NrO1xcbiBcXHRzcGlubG9ja190IHB0cF9yeF9sb2NrOyAvKiBVc2VkIHRvIHByb3RlY3QgUnggdGltZXN0YW1wIHJlZ2lzdGVycy4gKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBsYXRjaF9ldmVudHNbNF07XFxuIFxcdGJvb2wgcHRwX3R4O1xcbkBAIC0xMzE1LDYgKzEzMTgsNyBAQCBpbnQgaTQwZV9wdHBfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4gdm9pZCBpNDBlX3B0cF9zYXZlX2h3X3RpbWUoc3RydWN0IGk0MGVfcGYgKnBmKTtcXG4gdm9pZCBpNDBlX3B0cF9yZXN0b3JlX2h3X3RpbWUoc3RydWN0IGk0MGVfcGYgKnBmKTtcXG4rdm9pZCBpNDBlX3B0cF9pbml0X3dvcmsoc3RydWN0IGk0MGVfcGYgKnBmKTtcXG4gdm9pZCBpNDBlX3B0cF9pbml0KHN0cnVjdCBpNDBlX3BmICpwZik7XFxuIHZvaWQgaTQwZV9wdHBfc3RvcChzdHJ1Y3QgaTQwZV9wZiAqcGYpO1xcbiBpbnQgaTQwZV9wdHBfYWxsb2NfcGlucyhzdHJ1Y3QgaTQwZV9wZiAqcGYpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xcbmluZGV4IGEwNDY4MzAwNGE1NjcuLjQ4YmEzOGE0NTJkMGIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmNcXG5AQCAtNyw2ICs3LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfbWFjdmxhbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC93YWl0X2JpdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3BrdF9jbHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC94ZHBfc29ja19kcnYuaFxcdTAwM2VcXG4gXFxuQEAgLTEwODIyLDcgKzEwODIzLDggQEAgc3RhdGljIGludCBpNDBlX3Jlc2V0KHN0cnVjdCBpNDBlX3BmICpwZilcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcIlBGIHJlc2V0IGZhaWxlZCwgJWRcXFxcblxcXCIsIHJldCk7XFxuIFxcdFxcdHNldF9iaXQoX19JNDBFX1JFU0VUX0ZBSUxFRCwgcGYtXFx1MDAzZXN0YXRlKTtcXG4tXFx0XFx0Y2xlYXJfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi1cXHUwMDNlc3RhdGUpO1xcbitcXHRcXHRjbGVhcl9hbmRfd2FrZV91cF9iaXQoX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHBmLVxcdTAwM2VzdGF0ZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHBmLVxcdTAwM2VwZnJfY291bnQrKztcXG4gXFx0fVxcbkBAIC0xMTExNSw3ICsxMTExNyw3IEBAIHN0YXRpYyB2b2lkIGk0MGVfcmVidWlsZChzdHJ1Y3QgaTQwZV9wZiAqcGYsIGJvb2wgcmVpbml0LCBib29sIGxvY2tfYWNxdWlyZWQpXFxuIGVuZF9jb3JlX3Jlc2V0OlxcbiBcXHRjbGVhcl9iaXQoX19JNDBFX1JFU0VUX0ZBSUxFRCwgcGYtXFx1MDAzZXN0YXRlKTtcXG4gY2xlYXJfcmVjb3Zlcnk6XFxuLVxcdGNsZWFyX2JpdChfX0k0MEVfUkVTRVRfUkVDT1ZFUllfUEVORElORywgcGYtXFx1MDAzZXN0YXRlKTtcXG4rXFx0Y2xlYXJfYW5kX3dha2VfdXBfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi1cXHUwMDNlc3RhdGUpO1xcbiBcXHRjbGVhcl9iaXQoX19JNDBFX1RJTUVPVVRfUkVDT1ZFUllfUEVORElORywgcGYtXFx1MDAzZXN0YXRlKTtcXG4gfVxcbiBcXG5AQCAtMTI4MTksNiArMTI4MjEsOSBAQCBzdGF0aWMgaW50IGk0MGVfc3dfaW5pdChzdHJ1Y3QgaTQwZV9wZiAqcGYpXFxuIFxcdFxcdFxcdCBcXFwidG90YWwtcG9ydC1zaHV0ZG93biB3YXMgZW5hYmxlZCwgbGluay1kb3duLW9uLWNsb3NlIGlzIGZvcmNlZCBvblxcXFxuXFxcIik7XFxuIFxcdH1cXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2cGYtXFx1MDAzZXN3aXRjaF9tdXRleCk7XFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnBmLVxcdTAwM2VwdHBfY29uZmlnX2xvY2spO1xcbitcXHRpNDBlX3B0cF9pbml0X3dvcmsocGYpO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2cGYtXFx1MDAzZXB0cF90eF9sb2NrKTtcXG4gXFxuIHN3X2luaXRfZG9uZTpcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMTYxNTcsNiArMTYxNjIsMjAgQEAgc3RhdGljIHZvaWQgaTQwZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcbiBcXHRpNDBlX2RldmxpbmtfdW5yZWdpc3RlcihwZik7XFxuIFxcbitcXHQvKiBJbnRlcnJ1cHRzIGNhbiBxdWV1ZSB0aGUgc2VydmljZSB0YXNrIHVudGlsIF9fSTQwRV9ET1dOIGlzIHNldC5cXG4rXFx0ICogRGlzYWJsZSBpdCBzbyBubyBzZXJ2aWNlIHdvcmsgY2FuIG91dGxpdmUgdGhlIFBGLlxcbitcXHQgKi9cXG4rXFx0c2V0X2JpdChfX0k0MEVfU1VTUEVOREVELCBwZi1cXHUwMDNlc3RhdGUpO1xcbitcXHRpZiAocGYtXFx1MDAzZXNlcnZpY2VfdGltZXIuZnVuY3Rpb24pXFxuK1xcdFxcdHRpbWVyX3NodXRkb3duX3N5bmMoXFx1MDAyNnBmLVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4rXFx0aWYgKHBmLVxcdTAwM2VzZXJ2aWNlX3Rhc2suZnVuYylcXG4rXFx0XFx0ZGlzYWJsZV93b3JrX3N5bmMoXFx1MDAyNnBmLVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgYW55IHJlc2V0IG93bmVyIGJlZm9yZSB0ZWFyaW5nIGRvd24gZGV2aWNlIHJlc291cmNlcy4gKi9cXG4rXFx0d2FpdF9vbl9iaXRfbG9jayhwZi1cXHUwMDNlc3RhdGUsIF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLFxcbitcXHRcXHRcXHQgVEFTS19VTklOVEVSUlVQVElCTEUpO1xcbitcXHRzZXRfYml0KF9fSTQwRV9JTl9SRU1PVkUsIHBmLVxcdTAwM2VzdGF0ZSk7XFxuK1xcbiBcXHRpNDBlX2RiZ19wZl9leGl0KHBmKTtcXG4gXFxuIFxcdGk0MGVfcHRwX3N0b3AocGYpO1xcbkBAIC0xNjE2NSwyNiArMTYxODQsMTIgQEAgc3RhdGljIHZvaWQgaTQwZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdGk0MGVfd3JpdGVfcnhfY3RsKGh3LCBJNDBFX1BGUUZfSEVOQSgwKSwgMCk7XFxuIFxcdGk0MGVfd3JpdGVfcnhfY3RsKGh3LCBJNDBFX1BGUUZfSEVOQSgxKSwgMCk7XFxuIFxcbi1cXHQvKiBHcmFiIF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HIGFuZCBzZXQgX19JNDBFX0lOX1JFTU9WRVxcbi1cXHQgKiBmbGFncywgb25jZSB0aGV5IGFyZSBzZXQsIGk0MGVfcmVidWlsZCBzaG91bGQgbm90IGJlIGNhbGxlZCBhc1xcbi1cXHQgKiBpNDBlX3ByZXBfZm9yX3Jlc2V0IGFsd2F5cyByZXR1cm5zIGVhcmx5Llxcbi1cXHQgKi9cXG4tXFx0d2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsIHBmLVxcdTAwM2VzdGF0ZSkpXFxuLVxcdFxcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcXG4tXFx0c2V0X2JpdChfX0k0MEVfSU5fUkVNT1ZFLCBwZi1cXHUwMDNlc3RhdGUpO1xcbi1cXG4gXFx0aWYgKHRlc3RfYml0KEk0MEVfRkxBR19TUklPVl9FTkEsIHBmLVxcdTAwM2VmbGFncykpIHtcXG4gXFx0XFx0c2V0X2JpdChfX0k0MEVfVkZfUkVTRVRTX0RJU0FCTEVELCBwZi1cXHUwMDNlc3RhdGUpO1xcbiBcXHRcXHRpNDBlX2ZyZWVfdmZzKHBmKTtcXG4gXFx0XFx0Y2xlYXJfYml0KEk0MEVfRkxBR19TUklPVl9FTkEsIHBmLVxcdTAwM2VmbGFncyk7XFxuIFxcdH1cXG4tXFx0Lyogbm8gbW9yZSBzY2hlZHVsaW5nIG9mIGFueSB0YXNrICovXFxuLVxcdHNldF9iaXQoX19JNDBFX1NVU1BFTkRFRCwgcGYtXFx1MDAzZXN0YXRlKTtcXG4gXFx0c2V0X2JpdChfX0k0MEVfRE9XTiwgcGYtXFx1MDAzZXN0YXRlKTtcXG4tXFx0aWYgKHBmLVxcdTAwM2VzZXJ2aWNlX3RpbWVyLmZ1bmN0aW9uKVxcbi1cXHRcXHR0aW1lcl9zaHV0ZG93bl9zeW5jKFxcdTAwMjZwZi1cXHUwMDNlc2VydmljZV90aW1lcik7XFxuLVxcdGlmIChwZi1cXHUwMDNlc2VydmljZV90YXNrLmZ1bmMpXFxuLVxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnBmLVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbiBcXG4gXFx0aWYgKHRlc3RfYml0KF9fSTQwRV9SRUNPVkVSWV9NT0RFLCBwZi1cXHUwMDNlc3RhdGUpKSB7XFxuIFxcdFxcdHN0cnVjdCBpNDBlX3ZzaSAqdnNpID0gcGYtXFx1MDAzZXZzaVswXTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jXFxuaW5kZXggZmY2MmI1ZjJjODE1MC4uNWYxNWEzZDRhOTFlZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfcHRwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfcHRwLmNcXG5AQCAtMTY5LDYgKzE2OSwxNyBAQCBzdGF0aWMgdm9pZCBpNDBlX3B0cF9leHR0czBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdHB0cF9jbG9ja19ldmVudChwZi1cXHUwMDNlcHRwX2Nsb2NrLCBcXHUwMDI2ZXZlbnQpO1xcbiB9XFxuIFxcbisvKipcXG4rICogaTQwZV9wdHBfaW5pdF93b3JrIC0gSW5pdGlhbGl6ZSBQVFAgd29yayBmb3IgYSBQRlxcbisgKiBAcGY6IEJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuKyAqXFxuKyAqIEluaXRpYWxpemUgd29yayB3aGljaCBtdXN0IHJlbWFpbiB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBQRi5cXG4rICovXFxuK3ZvaWQgaTQwZV9wdHBfaW5pdF93b3JrKHN0cnVjdCBpNDBlX3BmICpwZilcXG4re1xcbitcXHRJTklUX1dPUksoXFx1MDAyNnBmLVxcdTAwM2VwdHBfZXh0dHMwX3dvcmssIGk0MGVfcHRwX2V4dHRzMF93b3JrKTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGk0MGVfaXNfcHRwX3Bpbl9kZXYgLSBjaGVjayBpZiBkZXZpY2Ugc3VwcG9ydHMgUFRQIHBpbnNcXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5AQCAtNzI4LDE0ICs3MzksMTcgQEAgdm9pZCBpNDBlX3B0cF9yeF9oYW5nKHN0cnVjdCBpNDBlX3BmICpwZilcXG4gICoqL1xcbiB2b2lkIGk0MGVfcHRwX3R4X2hhbmcoc3RydWN0IGk0MGVfcGYgKnBmKVxcbiB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcbiBcXHRpZiAoIXRlc3RfYml0KEk0MEVfRkxBR19QVFBfRU5BLCBwZi1cXHUwMDNlZmxhZ3MpIHx8ICFwZi1cXHUwMDNlcHRwX3R4KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cGYtXFx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XFxuK1xcbiBcXHQvKiBOb3RoaW5nIHRvIGRvIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IHdhaXRpbmcgZm9yIGEgdGltZXN0YW1wICovXFxuLVxcdGlmICghdGVzdF9iaXQoX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgcGYtXFx1MDAzZXN0YXRlKSlcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAoIXBmLVxcdTAwM2VwdHBfdHhfc2tiKVxcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcbiBcXHQvKiBXZSBhbHJlYWR5IGhhdmUgYSBoYW5kbGVyIHJvdXRpbmUgd2hpY2ggaXMgcnVuIHdoZW4gd2UgYXJlIG5vdGlmaWVkXFxuIFxcdCAqIG9mIGEgVHggdGltZXN0YW1wIGluIHRoZSBoYXJkd2FyZS4gSWYgd2UgZG9uJ3QgZ2V0IGFuIGludGVycnVwdFxcbkBAIC03NDQsMTIgKzc1OCwxNiBAQCB2b2lkIGk0MGVfcHRwX3R4X2hhbmcoc3RydWN0IGk0MGVfcGYgKnBmKVxcbiBcXHRpZiAodGltZV9pc19iZWZvcmVfamlmZmllcyhwZi1cXHUwMDNlcHRwX3R4X3N0YXJ0ICsgSFopKSB7XFxuIFxcdFxcdHNrYiA9IHBmLVxcdTAwM2VwdHBfdHhfc2tiO1xcbiBcXHRcXHRwZi1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuLVxcdFxcdGNsZWFyX2JpdF91bmxvY2soX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgcGYtXFx1MDAzZXN0YXRlKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cGYtXFx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRcXHQvKiBGcmVlIHRoZSBza2IgYWZ0ZXIgd2UgY2xlYXIgdGhlIGJpdGxvY2sgKi9cXG4rXFx0XFx0LyogRnJlZSB0aGUgc2tiIGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jay4gKi9cXG4gXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4gXFx0XFx0cGYtXFx1MDAzZXR4X2h3dHN0YW1wX3RpbWVvdXRzKys7XFxuK1xcdFxcdHJldHVybjtcXG4gXFx0fVxcbitcXG4rb3V0X3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cGYtXFx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC03NjMsMTcgKzc4MSwyMSBAQCB2b2lkIGk0MGVfcHRwX3R4X2hhbmcoc3RydWN0IGk0MGVfcGYgKnBmKVxcbiB2b2lkIGk0MGVfcHRwX3R4X2h3dHN0YW1wKHN0cnVjdCBpNDBlX3BmICpwZilcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHM7XFxuLVxcdHN0cnVjdCBza19idWZmICpza2IgPSBwZi1cXHUwMDNlcHRwX3R4X3NrYjtcXG4gXFx0c3RydWN0IGk0MGVfaHcgKmh3ID0gXFx1MDAyNnBmLVxcdTAwM2VodztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFx0dTMyIGhpLCBsbztcXG4gXFx0dTY0IG5zO1xcbiBcXG4gXFx0aWYgKCF0ZXN0X2JpdChJNDBFX0ZMQUdfUFRQX0VOQSwgcGYtXFx1MDAzZWZsYWdzKSB8fCAhcGYtXFx1MDAzZXB0cF90eClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0LyogZG9uJ3QgYXR0ZW1wdCB0byB0aW1lc3RhbXAgaWYgd2UgZG9uJ3QgaGF2ZSBhbiBza2IgKi9cXG4tXFx0aWYgKCFwZi1cXHUwMDNlcHRwX3R4X3NrYilcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cGYtXFx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XFxuK1xcbitcXHQvKiBUYWtlIG93bmVyc2hpcCBvZiB0aGUgc2tiIGJlZm9yZSBhbm90aGVyIGNsZWFudXAgcGF0aCBjYW4gZnJlZSBpdC4gKi9cXG4rXFx0c2tiID0gcGYtXFx1MDAzZXB0cF90eF9za2I7XFxuK1xcdGlmICghc2tiKVxcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcbiBcXHRsbyA9IHJkMzIoaHcsIEk0MEVfUFJUVFNZTl9UWFRJTUVfTCk7XFxuIFxcdGhpID0gcmQzMihodywgSTQwRV9QUlRUU1lOX1RYVElNRV9IKTtcXG5AQCAtNzgxLDE3ICs4MDMsMjEgQEAgdm9pZCBpNDBlX3B0cF90eF9od3RzdGFtcChzdHJ1Y3QgaTQwZV9wZiAqcGYpXFxuIFxcdG5zID0gKCgodTY0KWhpKSBcXHUwMDNjXFx1MDAzYyAzMikgfCBsbztcXG4gXFx0aTQwZV9wdHBfY29udmVydF90b19od3RzdGFtcChcXHUwMDI2c2hod3RzdGFtcHMsIG5zKTtcXG4gXFxuLVxcdC8qIENsZWFyIHRoZSBiaXQgbG9jayBhcyBzb29uIGFzIHBvc3NpYmxlIGFmdGVyIHJlYWRpbmcgdGhlIHJlZ2lzdGVyLFxcbi1cXHQgKiBhbmQgcHJpb3IgdG8gbm90aWZ5aW5nIHRoZSBzdGFjayB2aWEgc2tiX3RzdGFtcF90eCgpLiBPdGhlcndpc2VcXG4tXFx0ICogYXBwbGljYXRpb25zIG1pZ2h0IHdha2UgdXAgYW5kIGF0dGVtcHQgdG8gcmVxdWVzdCBhbm90aGVyIHRyYW5zbWl0XFxuLVxcdCAqIHRpbWVzdGFtcCBwcmlvciB0byB0aGUgYml0IGxvY2sgYmVpbmcgY2xlYXJlZC5cXG4rXFx0LyogTWFyayB0aGUgc2xvdCBhdmFpbGFibGUgYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciByZWFkaW5nIHRoZVxcbitcXHQgKiByZWdpc3RlciBhbmQgYmVmb3JlIG5vdGlmeWluZyB0aGUgc3RhY2sgdmlhIHNrYl90c3RhbXBfdHgoKS5cXG4rXFx0ICogT3RoZXJ3aXNlLCBhcHBsaWNhdGlvbnMgbWlnaHQgd2FrZSB1cCBhbmQgcmVxdWVzdCBhbm90aGVyIHRyYW5zbWl0XFxuK1xcdCAqIHRpbWVzdGFtcCBiZWZvcmUgdGhlIHNsb3QgaXMgYXZhaWxhYmxlLlxcbiBcXHQgKi9cXG4gXFx0cGYtXFx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xcbi1cXHRjbGVhcl9iaXRfdW5sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBmLVxcdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0LyogTm90aWZ5IHRoZSBzdGFjayBhbmQgZnJlZSB0aGUgc2tiIGFmdGVyIHdlJ3ZlIHVubG9ja2VkICovXFxuIFxcdHNrYl90c3RhbXBfdHgoc2tiLCBcXHUwMDI2c2hod3RzdGFtcHMpO1xcbiBcXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xcbitcXHRyZXR1cm47XFxuK1xcbitvdXRfdW5sb2NrOlxcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwZi1cXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTExODYsOCArMTIxMiw2IEBAIHN0YXRpYyBpbnQgaTQwZV9wdHBfc2V0X3RpbWVzdGFtcF9tb2RlKHN0cnVjdCBpNDBlX3BmICpwZixcXG4gXFx0cmVndmFsIHw9IDEgXFx1MDAzY1xcdTAwM2MgSTQwRV9QUlRUU1lOX0NUTDBfRVZFTlRfSU5UX0VOQV9TSElGVDtcXG4gXFx0d3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7XFxuIFxcbi1cXHRJTklUX1dPUksoXFx1MDAyNnBmLVxcdTAwM2VwdHBfZXh0dHMwX3dvcmssIGk0MGVfcHRwX2V4dHRzMF93b3JrKTtcXG4tXFxuIFxcdHN3aXRjaCAoY29uZmlnLVxcdTAwM2V0eF90eXBlKSB7XFxuIFxcdGNhc2UgSFdUU1RBTVBfVFhfT0ZGOlxcbiBcXHRcXHRwZi1cXHUwMDNlcHRwX3R4ID0gZmFsc2U7XFxuQEAgLTEzMTMsMTcgKzEzMzcsMjMgQEAgaW50IGk0MGVfcHRwX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRzdHJ1Y3QgaTQwZV9wZiAqcGYgPSBucC1cXHUwMDNldnNpLVxcdTAwM2ViYWNrO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCF0ZXN0X2JpdChJNDBFX0ZMQUdfUFRQX0VOQSwgcGYtXFx1MDAzZWZsYWdzKSlcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwZi1cXHUwMDNlcHRwX2NvbmZpZ19sb2NrKTtcXG4rXFxuK1xcdGlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHR9XFxuIFxcbiBcXHRlcnIgPSBpNDBlX3B0cF9zZXRfdGltZXN0YW1wX21vZGUocGYsIGNvbmZpZyk7XFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXG4gXFx0Lyogc2F2ZSB0aGVzZSBzZXR0aW5ncyBmb3IgZnV0dXJlIHJlZmVyZW5jZSAqL1xcbiBcXHRwZi1cXHUwMDNldHN0YW1wX2NvbmZpZyA9ICpjb25maWc7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VwdHBfY29uZmlnX2xvY2spO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTUzOSwxOSArMTU2OSwzMSBAQCB2b2lkIGk0MGVfcHRwX3N0b3Aoc3RydWN0IGk0MGVfcGYgKnBmKVxcbiB7XFxuIFxcdHN0cnVjdCBpNDBlX3ZzaSAqbWFpbl92c2kgPSBpNDBlX3BmX2dldF9tYWluX3ZzaShwZik7XFxuIFxcdHN0cnVjdCBpNDBlX2h3ICpodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHUzMiByZWd2YWw7XFxuIFxcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwZi1cXHUwMDNlcHRwX2NvbmZpZ19sb2NrKTtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwZi1cXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcXG4gXFx0Y2xlYXJfYml0KEk0MEVfRkxBR19QVFBfRU5BLCBwZi1cXHUwMDNlZmxhZ3MpO1xcbiBcXHRwZi1cXHUwMDNlcHRwX3R4ID0gZmFsc2U7XFxuK1xcdHNrYiA9IHBmLVxcdTAwM2VwdHBfdHhfc2tiO1xcbitcXHRwZi1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBmLVxcdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xcbitcXG4gXFx0cGYtXFx1MDAzZXB0cF9yeCA9IGZhbHNlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VwdHBfY29uZmlnX2xvY2spO1xcbiBcXG4tXFx0aWYgKHBmLVxcdTAwM2VwdHBfdHhfc2tiKSB7XFxuLVxcdFxcdHN0cnVjdCBza19idWZmICpza2IgPSBwZi1cXHUwMDNlcHRwX3R4X3NrYjtcXG4rXFx0LyogU3RvcCBleHRlcm5hbCB0aW1lc3RhbXAgZXZlbnRzIGJlZm9yZSB1bnJlZ2lzdGVyaW5nIHRoZSBjbG9jay4gKi9cXG4rXFx0cmVndmFsID0gcmQzMihodywgSTQwRV9QUlRUU1lOX0NUTDApO1xcbitcXHRyZWd2YWwgXFx1MDAyNj0gfkk0MEVfUFJUVFNZTl9DVEwwX0VWRU5UX0lOVF9FTkFfTUFTSztcXG4rXFx0d3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7XFxuIFxcbi1cXHRcXHRwZi1cXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XFxuLVxcdFxcdGNsZWFyX2JpdF91bmxvY2soX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgcGYtXFx1MDAzZXN0YXRlKTtcXG4rXFx0ZGlzYWJsZV93b3JrX3N5bmMoXFx1MDAyNnBmLVxcdTAwM2VwdHBfZXh0dHMwX3dvcmspO1xcbitcXG4rXFx0aWYgKHNrYilcXG4gXFx0XFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcXG4tXFx0fVxcbiBcXG4gXFx0aWYgKHBmLVxcdTAwM2VwdHBfY2xvY2spIHtcXG4gXFx0XFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIocGYtXFx1MDAzZXB0cF9jbG9jayk7XFxuQEAgLTE1NzAsMTAgKzE2MTIsNSBAQCB2b2lkIGk0MGVfcHRwX3N0b3Aoc3RydWN0IGk0MGVfcGYgKnBmKVxcbiBcXHRyZWd2YWwgXFx1MDAyNj0gfkk0MEVfUFJUVFNZTl9BVVhfMF9QVFBGTEFHX01BU0s7XFxuIFxcdHdyMzIoaHcsIEk0MEVfUFJUVFNZTl9BVVhfMCgwKSwgcmVndmFsKTtcXG4gXFxuLVxcdC8qIERpc2FibGUgaW50ZXJydXB0cyAqL1xcbi1cXHRyZWd2YWwgPSByZDMyKGh3LCBJNDBFX1BSVFRTWU5fQ1RMMCk7XFxuLVxcdHJlZ3ZhbCBcXHUwMDI2PSB+STQwRV9QUlRUU1lOX0NUTDBfRVZFTlRfSU5UX0VOQV9NQVNLO1xcbi1cXHR3cjMyKGh3LCBJNDBFX1BSVFRTWU5fQ1RMMCwgcmVndmFsKTtcXG4tXFxuIFxcdGk0MGVfcHRwX2ZyZWVfcGlucyhwZik7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmNcXG5pbmRleCA4OTRmMmQwNmQzOWQwLi5mNDMwNTQ2YWNmNDIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jXFxuQEAgLTMxOTgsNyArMzE5OCw5IEBAIHN0YXRpYyBpbnQgaTQwZV90c28oc3RydWN0IGk0MGVfdHhfYnVmZmVyICpmaXJzdCwgdTggKmhkcl9sZW4sXFxuIHN0YXRpYyBpbnQgaTQwZV90c3luKHN0cnVjdCBpNDBlX3JpbmcgKnR4X3JpbmcsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdCAgICAgdTMyIHR4X2ZsYWdzLCB1NjQgKmNkX3R5cGVfY21kX3Rzb19tc3MpXFxuIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0c3RydWN0IGk0MGVfcGYgKnBmO1xcbitcXHRpbnQgdHN5biA9IDA7XFxuIFxcbiBcXHRpZiAobGlrZWx5KCEoc2tiX3NoaW5mbyhza2IpLVxcdTAwM2V0eF9mbGFncyBcXHUwMDI2IFNLQlRYX0hXX1RTVEFNUCkpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtMzIxMSwyMyArMzIxMywyOCBAQCBzdGF0aWMgaW50IGk0MGVfdHN5bihzdHJ1Y3QgaTQwZV9yaW5nICp0eF9yaW5nLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHQgKiB3ZSBhcmUgbm90IGFscmVhZHkgdHJhbnNtaXR0aW5nIGEgcGFja2V0IHRvIGJlIHRpbWVzdGFtcGVkXFxuIFxcdCAqL1xcbiBcXHRwZiA9IGk0MGVfbmV0ZGV2X3RvX3BmKHR4X3JpbmctXFx1MDAzZW5ldGRldik7XFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwZi1cXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcXG4rXFxuIFxcdGlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcbi1cXHRpZiAocGYtXFx1MDAzZXB0cF90eCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLCBwZi1cXHUwMDNlc3RhdGUpKSB7XFxuK1xcdGlmIChwZi1cXHUwMDNlcHRwX3R4IFxcdTAwMjZcXHUwMDI2ICFwZi1cXHUwMDNlcHRwX3R4X3NrYikge1xcbiBcXHRcXHRza2Jfc2hpbmZvKHNrYiktXFx1MDAzZXR4X2ZsYWdzIHw9IFNLQlRYX0lOX1BST0dSRVNTO1xcbiBcXHRcXHRwZi1cXHUwMDNlcHRwX3R4X3N0YXJ0ID0gamlmZmllcztcXG4gXFx0XFx0cGYtXFx1MDAzZXB0cF90eF9za2IgPSBza2JfZ2V0KHNrYik7XFxuK1xcdFxcdHRzeW4gPSAxO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRwZi1cXHUwMDNldHhfaHd0c3RhbXBfc2tpcHBlZCsrO1xcbi1cXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0KmNkX3R5cGVfY21kX3Rzb19tc3MgfD0gKHU2NClJNDBFX1RYX0NUWF9ERVNDX1RTWU4gXFx1MDAzY1xcdTAwM2NcXG4tXFx0XFx0XFx0XFx0STQwRV9UWERfQ1RYX1FXMV9DTURfU0hJRlQ7XFxuK291dF91bmxvY2s6XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnBmLVxcdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0cmV0dXJuIDE7XFxuK1xcdGlmICh0c3luKVxcbitcXHRcXHQqY2RfdHlwZV9jbWRfdHNvX21zcyB8PSAodTY0KUk0MEVfVFhfQ1RYX0RFU0NfVFNZTiBcXHUwMDNjXFx1MDAzY1xcbitcXHRcXHRcXHRcXHRcXHRJNDBFX1RYRF9DVFhfUVcxX0NNRF9TSElGVDtcXG4rXFxuK1xcdHJldHVybiB0c3luO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzk1NywxMCArMzk2NCwyMSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaTQwZV94bWl0X2ZyYW1lX3Jpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gY2xlYW51cF90eF90c3RhbXA6XFxuIFxcdGlmICh1bmxpa2VseSh0eF9mbGFncyBcXHUwMDI2IEk0MEVfVFhfRkxBR1NfVFNZTikpIHtcXG4gXFx0XFx0c3RydWN0IGk0MGVfcGYgKnBmID0gaTQwZV9uZXRkZXZfdG9fcGYodHhfcmluZy1cXHUwMDNlbmV0ZGV2KTtcXG4rXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnB0cF9za2IgPSBOVUxMO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnBmLVxcdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xcbitcXHRcXHQvKiBBbm90aGVyIGNsZWFudXAgcGF0aCBtYXkgaGF2ZSBoYW5kZWQgdGhlIHNsb3RcXG4rXFx0XFx0ICogdG8gYSBuZXcgc2tiLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHBmLVxcdTAwM2VwdHBfdHhfc2tiID09IHNrYikge1xcbitcXHRcXHRcXHRwdHBfc2tiID0gcGYtXFx1MDAzZXB0cF90eF9za2I7XFxuK1xcdFxcdFxcdHBmLVxcdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcXG4rXFx0XFx0fVxcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwZi1cXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcXG4gXFxuLVxcdFxcdGRldl9rZnJlZV9za2JfYW55KHBmLVxcdTAwM2VwdHBfdHhfc2tiKTtcXG4tXFx0XFx0cGYtXFx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xcbi1cXHRcXHRjbGVhcl9iaXRfdW5sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLVxcdTAwM2VzdGF0ZSk7XFxuK1xcdFxcdGlmIChwdHBfc2tiKVxcbitcXHRcXHRcXHRkZXZfa2ZyZWVfc2tiX2FueShwdHBfc2tiKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDY6NTk6MDYuNTcxNTEzOTUxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTUxMzU0MzY4MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBJbnRlbCBpNDBlIEV0aGVybmV0IGRyaXZlciwgd2hpY2ggcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAoSW50ZWwgNDAgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cyB1c2VkIGZvciBmdXp6aW5nLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWMxNTQwMzg2ZDMyY2NmMzFiMjliYTAzZmE1MDIwMDhkZDQ3ZjZmNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDY6NTk6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZS5oXG5pbmRleCA4M2U3ODA5MTlhYzk3Li4xODQ1MmY5YWE3NGUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZS5oXG5AQCAtMTAxLDcgKzEwMSw2IEBAIGVudW0gaTQwZV9zdGF0ZSB7XG4gXHRfX0k0MEVfR0xPQkFMX1JFU0VUX1JFUVVFU1RFRCxcbiBcdF9fSTQwRV9FTVBfUkVTRVRfSU5UUl9SRUNFSVZFRCxcbiBcdF9fSTQwRV9TVVNQRU5ERUQsXG4tXHRfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLFxuIFx0X19JNDBFX0JBRF9FRVBST00sXG4gXHRfX0k0MEVfRE9XTl9SRVFVRVNURUQsXG4gXHRfX0k0MEVfRkRfRkxVU0hfUkVRVUVTVEVELFxuQEAgLTY2OSwxMiArNjY4LDE2IEBAIHN0cnVjdCBpNDBlX3BmIHtcbiBcdHN0cnVjdCB0aW1lc3BlYzY0IHB0cF9wcmV2X2h3X3RpbWU7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHRwX2V4dHRzMF93b3JrO1xuIFx0a3RpbWVfdCBwdHBfcmVzZXRfc3RhcnQ7XG4rXHQvKiBTZXJpYWxpemVzIHRpbWVzdGFtcCBjb25maWd1cmF0aW9uIHdpdGggUFRQIHRlYXJkb3duLiAqL1xuK1x0c3RydWN0IG11dGV4IHB0cF9jb25maWdfbG9jaztcbiBcdHN0cnVjdCBtdXRleCB0bXJlZ19sb2NrOyAvKiBVc2VkIHRvIHByb3RlY3QgdGhlIFNZU1RJTUUgcmVnaXN0ZXJzLiAqL1xuIFx0dTMyIHB0cF9hZGpfbXVsdDtcbiBcdHUzMiB0eF9od3RzdGFtcF90aW1lb3V0cztcbiBcdHUzMiB0eF9od3RzdGFtcF9za2lwcGVkO1xuIFx0dTMyIHJ4X2h3dHN0YW1wX2NsZWFyZWQ7XG4gXHR1MzIgbGF0Y2hfZXZlbnRfZmxhZ3M7XG4rXHQvKiBQcm90ZWN0cyBwdHBfdHhfc2tiLCB3aGljaCBhbHNvIGluZGljYXRlcyB0aGUgc2xvdCBzdGF0ZS4gKi9cbitcdHNwaW5sb2NrX3QgcHRwX3R4X2xvY2s7XG4gXHRzcGlubG9ja190IHB0cF9yeF9sb2NrOyAvKiBVc2VkIHRvIHByb3RlY3QgUnggdGltZXN0YW1wIHJlZ2lzdGVycy4gKi9cbiBcdHVuc2lnbmVkIGxvbmcgbGF0Y2hfZXZlbnRzWzRdO1xuIFx0Ym9vbCBwdHBfdHg7XG5AQCAtMTMxNSw2ICsxMzE4LDcgQEAgaW50IGk0MGVfcHRwX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiB2b2lkIGk0MGVfcHRwX3NhdmVfaHdfdGltZShzdHJ1Y3QgaTQwZV9wZiAqcGYpO1xuIHZvaWQgaTQwZV9wdHBfcmVzdG9yZV9od190aW1lKHN0cnVjdCBpNDBlX3BmICpwZik7XG4rdm9pZCBpNDBlX3B0cF9pbml0X3dvcmsoc3RydWN0IGk0MGVfcGYgKnBmKTtcbiB2b2lkIGk0MGVfcHRwX2luaXQoc3RydWN0IGk0MGVfcGYgKnBmKTtcbiB2b2lkIGk0MGVfcHRwX3N0b3Aoc3RydWN0IGk0MGVfcGYgKnBmKTtcbiBpbnQgaTQwZV9wdHBfYWxsb2NfcGlucyhzdHJ1Y3QgaTQwZV9wZiAqcGYpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jXG5pbmRleCBhMDQ2ODMwMDRhNTY3Li40OGJhMzhhNDUyZDBiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uY1xuQEAgLTcsNiArNyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9tYWN2bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXRfYml0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcGt0X2Nscy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hkcF9zb2NrX2Rydi5oXHUwMDNlXG4gXG5AQCAtMTA4MjIsNyArMTA4MjMsOCBAQCBzdGF0aWMgaW50IGk0MGVfcmVzZXQoc3RydWN0IGk0MGVfcGYgKnBmKVxuIFx0aWYgKHJldCkge1xuIFx0XHRkZXZfaW5mbyhcdTAwMjZwZi1cdTAwM2VwZGV2LVx1MDAzZWRldiwgXCJQRiByZXNldCBmYWlsZWQsICVkXFxuXCIsIHJldCk7XG4gXHRcdHNldF9iaXQoX19JNDBFX1JFU0VUX0ZBSUxFRCwgcGYtXHUwMDNlc3RhdGUpO1xuLVx0XHRjbGVhcl9iaXQoX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsIHBmLVx1MDAzZXN0YXRlKTtcbitcdFx0Y2xlYXJfYW5kX3dha2VfdXBfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLFxuK1x0XHRcdFx0ICAgICAgcGYtXHUwMDNlc3RhdGUpO1xuIFx0fSBlbHNlIHtcbiBcdFx0cGYtXHUwMDNlcGZyX2NvdW50Kys7XG4gXHR9XG5AQCAtMTExMTUsNyArMTExMTcsNyBAQCBzdGF0aWMgdm9pZCBpNDBlX3JlYnVpbGQoc3RydWN0IGk0MGVfcGYgKnBmLCBib29sIHJlaW5pdCwgYm9vbCBsb2NrX2FjcXVpcmVkKVxuIGVuZF9jb3JlX3Jlc2V0OlxuIFx0Y2xlYXJfYml0KF9fSTQwRV9SRVNFVF9GQUlMRUQsIHBmLVx1MDAzZXN0YXRlKTtcbiBjbGVhcl9yZWNvdmVyeTpcbi1cdGNsZWFyX2JpdChfX0k0MEVfUkVTRVRfUkVDT1ZFUllfUEVORElORywgcGYtXHUwMDNlc3RhdGUpO1xuK1x0Y2xlYXJfYW5kX3dha2VfdXBfYml0KF9fSTQwRV9SRVNFVF9SRUNPVkVSWV9QRU5ESU5HLCBwZi1cdTAwM2VzdGF0ZSk7XG4gXHRjbGVhcl9iaXQoX19JNDBFX1RJTUVPVVRfUkVDT1ZFUllfUEVORElORywgcGYtXHUwMDNlc3RhdGUpO1xuIH1cbiBcbkBAIC0xMjgxOSw2ICsxMjgyMSw5IEBAIHN0YXRpYyBpbnQgaTQwZV9zd19pbml0KHN0cnVjdCBpNDBlX3BmICpwZilcbiBcdFx0XHQgXCJ0b3RhbC1wb3J0LXNodXRkb3duIHdhcyBlbmFibGVkLCBsaW5rLWRvd24tb24tY2xvc2UgaXMgZm9yY2VkIG9uXFxuXCIpO1xuIFx0fVxuIFx0bXV0ZXhfaW5pdChcdTAwMjZwZi1cdTAwM2Vzd2l0Y2hfbXV0ZXgpO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwZi1cdTAwM2VwdHBfY29uZmlnX2xvY2spO1xuK1x0aTQwZV9wdHBfaW5pdF93b3JrKHBmKTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrKTtcbiBcbiBzd19pbml0X2RvbmU6XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE2MTU3LDYgKzE2MTYyLDIwIEBAIHN0YXRpYyB2b2lkIGk0MGVfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFxuIFx0aTQwZV9kZXZsaW5rX3VucmVnaXN0ZXIocGYpO1xuIFxuK1x0LyogSW50ZXJydXB0cyBjYW4gcXVldWUgdGhlIHNlcnZpY2UgdGFzayB1bnRpbCBfX0k0MEVfRE9XTiBpcyBzZXQuXG4rXHQgKiBEaXNhYmxlIGl0IHNvIG5vIHNlcnZpY2Ugd29yayBjYW4gb3V0bGl2ZSB0aGUgUEYuXG4rXHQgKi9cbitcdHNldF9iaXQoX19JNDBFX1NVU1BFTkRFRCwgcGYtXHUwMDNlc3RhdGUpO1xuK1x0aWYgKHBmLVx1MDAzZXNlcnZpY2VfdGltZXIuZnVuY3Rpb24pXG4rXHRcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2cGYtXHUwMDNlc2VydmljZV90aW1lcik7XG4rXHRpZiAocGYtXHUwMDNlc2VydmljZV90YXNrLmZ1bmMpXG4rXHRcdGRpc2FibGVfd29ya19zeW5jKFx1MDAyNnBmLVx1MDAzZXNlcnZpY2VfdGFzayk7XG4rXG4rXHQvKiBXYWl0IGZvciBhbnkgcmVzZXQgb3duZXIgYmVmb3JlIHRlYXJpbmcgZG93biBkZXZpY2UgcmVzb3VyY2VzLiAqL1xuK1x0d2FpdF9vbl9iaXRfbG9jayhwZi1cdTAwM2VzdGF0ZSwgX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsXG4rXHRcdFx0IFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcbitcdHNldF9iaXQoX19JNDBFX0lOX1JFTU9WRSwgcGYtXHUwMDNlc3RhdGUpO1xuK1xuIFx0aTQwZV9kYmdfcGZfZXhpdChwZik7XG4gXG4gXHRpNDBlX3B0cF9zdG9wKHBmKTtcbkBAIC0xNjE2NSwyNiArMTYxODQsMTIgQEAgc3RhdGljIHZvaWQgaTQwZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRpNDBlX3dyaXRlX3J4X2N0bChodywgSTQwRV9QRlFGX0hFTkEoMCksIDApO1xuIFx0aTQwZV93cml0ZV9yeF9jdGwoaHcsIEk0MEVfUEZRRl9IRU5BKDEpLCAwKTtcbiBcbi1cdC8qIEdyYWIgX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcgYW5kIHNldCBfX0k0MEVfSU5fUkVNT1ZFXG4tXHQgKiBmbGFncywgb25jZSB0aGV5IGFyZSBzZXQsIGk0MGVfcmVidWlsZCBzaG91bGQgbm90IGJlIGNhbGxlZCBhc1xuLVx0ICogaTQwZV9wcmVwX2Zvcl9yZXNldCBhbHdheXMgcmV0dXJucyBlYXJseS5cbi1cdCAqL1xuLVx0d2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JNDBFX1JFU0VUX1JFQ09WRVJZX1BFTkRJTkcsIHBmLVx1MDAzZXN0YXRlKSlcbi1cdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuLVx0c2V0X2JpdChfX0k0MEVfSU5fUkVNT1ZFLCBwZi1cdTAwM2VzdGF0ZSk7XG4tXG4gXHRpZiAodGVzdF9iaXQoSTQwRV9GTEFHX1NSSU9WX0VOQSwgcGYtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdHNldF9iaXQoX19JNDBFX1ZGX1JFU0VUU19ESVNBQkxFRCwgcGYtXHUwMDNlc3RhdGUpO1xuIFx0XHRpNDBlX2ZyZWVfdmZzKHBmKTtcbiBcdFx0Y2xlYXJfYml0KEk0MEVfRkxBR19TUklPVl9FTkEsIHBmLVx1MDAzZWZsYWdzKTtcbiBcdH1cbi1cdC8qIG5vIG1vcmUgc2NoZWR1bGluZyBvZiBhbnkgdGFzayAqL1xuLVx0c2V0X2JpdChfX0k0MEVfU1VTUEVOREVELCBwZi1cdTAwM2VzdGF0ZSk7XG4gXHRzZXRfYml0KF9fSTQwRV9ET1dOLCBwZi1cdTAwM2VzdGF0ZSk7XG4tXHRpZiAocGYtXHUwMDNlc2VydmljZV90aW1lci5mdW5jdGlvbilcbi1cdFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZwZi1cdTAwM2VzZXJ2aWNlX3RpbWVyKTtcbi1cdGlmIChwZi1cdTAwM2VzZXJ2aWNlX3Rhc2suZnVuYylcbi1cdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwZi1cdTAwM2VzZXJ2aWNlX3Rhc2spO1xuIFxuIFx0aWYgKHRlc3RfYml0KF9fSTQwRV9SRUNPVkVSWV9NT0RFLCBwZi1cdTAwM2VzdGF0ZSkpIHtcbiBcdFx0c3RydWN0IGk0MGVfdnNpICp2c2kgPSBwZi1cdTAwM2V2c2lbMF07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jXG5pbmRleCBmZjYyYjVmMmM4MTUwLi41ZjE1YTNkNGE5MWVkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfcHRwLmNcbkBAIC0xNjksNiArMTY5LDE3IEBAIHN0YXRpYyB2b2lkIGk0MGVfcHRwX2V4dHRzMF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHB0cF9jbG9ja19ldmVudChwZi1cdTAwM2VwdHBfY2xvY2ssIFx1MDAyNmV2ZW50KTtcbiB9XG4gXG4rLyoqXG4rICogaTQwZV9wdHBfaW5pdF93b3JrIC0gSW5pdGlhbGl6ZSBQVFAgd29yayBmb3IgYSBQRlxuKyAqIEBwZjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbisgKlxuKyAqIEluaXRpYWxpemUgd29yayB3aGljaCBtdXN0IHJlbWFpbiB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBQRi5cbisgKi9cbit2b2lkIGk0MGVfcHRwX2luaXRfd29yayhzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4re1xuK1x0SU5JVF9XT1JLKFx1MDAyNnBmLVx1MDAzZXB0cF9leHR0czBfd29yaywgaTQwZV9wdHBfZXh0dHMwX3dvcmspO1xuK31cbitcbiAvKipcbiAgKiBpNDBlX2lzX3B0cF9waW5fZGV2IC0gY2hlY2sgaWYgZGV2aWNlIHN1cHBvcnRzIFBUUCBwaW5zXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbkBAIC03MjgsMTQgKzczOSwxNyBAQCB2b2lkIGk0MGVfcHRwX3J4X2hhbmcoc3RydWN0IGk0MGVfcGYgKnBmKVxuICAqKi9cbiB2b2lkIGk0MGVfcHRwX3R4X2hhbmcoc3RydWN0IGk0MGVfcGYgKnBmKVxuIHtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFxuIFx0aWYgKCF0ZXN0X2JpdChJNDBFX0ZMQUdfUFRQX0VOQSwgcGYtXHUwMDNlZmxhZ3MpIHx8ICFwZi1cdTAwM2VwdHBfdHgpXG4gXHRcdHJldHVybjtcbiBcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4rXG4gXHQvKiBOb3RoaW5nIHRvIGRvIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IHdhaXRpbmcgZm9yIGEgdGltZXN0YW1wICovXG4tXHRpZiAoIXRlc3RfYml0KF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLVx1MDAzZXN0YXRlKSlcbi1cdFx0cmV0dXJuO1xuK1x0aWYgKCFwZi1cdTAwM2VwdHBfdHhfc2tiKVxuK1x0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKiBXZSBhbHJlYWR5IGhhdmUgYSBoYW5kbGVyIHJvdXRpbmUgd2hpY2ggaXMgcnVuIHdoZW4gd2UgYXJlIG5vdGlmaWVkXG4gXHQgKiBvZiBhIFR4IHRpbWVzdGFtcCBpbiB0aGUgaGFyZHdhcmUuIElmIHdlIGRvbid0IGdldCBhbiBpbnRlcnJ1cHRcbkBAIC03NDQsMTIgKzc1OCwxNiBAQCB2b2lkIGk0MGVfcHRwX3R4X2hhbmcoc3RydWN0IGk0MGVfcGYgKnBmKVxuIFx0aWYgKHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMocGYtXHUwMDNlcHRwX3R4X3N0YXJ0ICsgSFopKSB7XG4gXHRcdHNrYiA9IHBmLVx1MDAzZXB0cF90eF9za2I7XG4gXHRcdHBmLVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuLVx0XHRjbGVhcl9iaXRfdW5sb2NrKF9fSTQwRV9QVFBfVFhfSU5fUFJPR1JFU1MsIHBmLVx1MDAzZXN0YXRlKTtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuIFxuLVx0XHQvKiBGcmVlIHRoZSBza2IgYWZ0ZXIgd2UgY2xlYXIgdGhlIGJpdGxvY2sgKi9cbitcdFx0LyogRnJlZSB0aGUgc2tiIGFmdGVyIHJlbGVhc2luZyB0aGUgbG9jay4gKi9cbiBcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdFx0cGYtXHUwMDNldHhfaHd0c3RhbXBfdGltZW91dHMrKztcbitcdFx0cmV0dXJuO1xuIFx0fVxuK1xuK291dF91bmxvY2s6XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuIC8qKlxuQEAgLTc2MywxNyArNzgxLDIxIEBAIHZvaWQgaTQwZV9wdHBfdHhfaGFuZyhzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4gdm9pZCBpNDBlX3B0cF90eF9od3RzdGFtcChzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHNoaHd0c3RhbXBzO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBmLVx1MDAzZXB0cF90eF9za2I7XG4gXHRzdHJ1Y3QgaTQwZV9odyAqaHcgPSBcdTAwMjZwZi1cdTAwM2VodztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIFx0dTMyIGhpLCBsbztcbiBcdHU2NCBucztcbiBcbiBcdGlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLVx1MDAzZWZsYWdzKSB8fCAhcGYtXHUwMDNlcHRwX3R4KVxuIFx0XHRyZXR1cm47XG4gXG4tXHQvKiBkb24ndCBhdHRlbXB0IHRvIHRpbWVzdGFtcCBpZiB3ZSBkb24ndCBoYXZlIGFuIHNrYiAqL1xuLVx0aWYgKCFwZi1cdTAwM2VwdHBfdHhfc2tiKVxuLVx0XHRyZXR1cm47XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuK1xuK1x0LyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIHNrYiBiZWZvcmUgYW5vdGhlciBjbGVhbnVwIHBhdGggY2FuIGZyZWUgaXQuICovXG4rXHRza2IgPSBwZi1cdTAwM2VwdHBfdHhfc2tiO1xuK1x0aWYgKCFza2IpXG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdGxvID0gcmQzMihodywgSTQwRV9QUlRUU1lOX1RYVElNRV9MKTtcbiBcdGhpID0gcmQzMihodywgSTQwRV9QUlRUU1lOX1RYVElNRV9IKTtcbkBAIC03ODEsMTcgKzgwMywyMSBAQCB2b2lkIGk0MGVfcHRwX3R4X2h3dHN0YW1wKHN0cnVjdCBpNDBlX3BmICpwZilcbiBcdG5zID0gKCgodTY0KWhpKSBcdTAwM2NcdTAwM2MgMzIpIHwgbG87XG4gXHRpNDBlX3B0cF9jb252ZXJ0X3RvX2h3dHN0YW1wKFx1MDAyNnNoaHd0c3RhbXBzLCBucyk7XG4gXG4tXHQvKiBDbGVhciB0aGUgYml0IGxvY2sgYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciByZWFkaW5nIHRoZSByZWdpc3Rlcixcbi1cdCAqIGFuZCBwcmlvciB0byBub3RpZnlpbmcgdGhlIHN0YWNrIHZpYSBza2JfdHN0YW1wX3R4KCkuIE90aGVyd2lzZVxuLVx0ICogYXBwbGljYXRpb25zIG1pZ2h0IHdha2UgdXAgYW5kIGF0dGVtcHQgdG8gcmVxdWVzdCBhbm90aGVyIHRyYW5zbWl0XG4tXHQgKiB0aW1lc3RhbXAgcHJpb3IgdG8gdGhlIGJpdCBsb2NrIGJlaW5nIGNsZWFyZWQuXG4rXHQvKiBNYXJrIHRoZSBzbG90IGF2YWlsYWJsZSBhcyBzb29uIGFzIHBvc3NpYmxlIGFmdGVyIHJlYWRpbmcgdGhlXG4rXHQgKiByZWdpc3RlciBhbmQgYmVmb3JlIG5vdGlmeWluZyB0aGUgc3RhY2sgdmlhIHNrYl90c3RhbXBfdHgoKS5cbitcdCAqIE90aGVyd2lzZSwgYXBwbGljYXRpb25zIG1pZ2h0IHdha2UgdXAgYW5kIHJlcXVlc3QgYW5vdGhlciB0cmFuc21pdFxuK1x0ICogdGltZXN0YW1wIGJlZm9yZSB0aGUgc2xvdCBpcyBhdmFpbGFibGUuXG4gXHQgKi9cbiBcdHBmLVx1MDAzZXB0cF90eF9za2IgPSBOVUxMO1xuLVx0Y2xlYXJfYml0X3VubG9jayhfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLCBwZi1cdTAwM2VzdGF0ZSk7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4gXG4gXHQvKiBOb3RpZnkgdGhlIHN0YWNrIGFuZCBmcmVlIHRoZSBza2IgYWZ0ZXIgd2UndmUgdW5sb2NrZWQgKi9cbiBcdHNrYl90c3RhbXBfdHgoc2tiLCBcdTAwMjZzaGh3dHN0YW1wcyk7XG4gXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuK1x0cmV0dXJuO1xuK1xuK291dF91bmxvY2s6XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4gfVxuIFxuIC8qKlxuQEAgLTExODYsOCArMTIxMiw2IEBAIHN0YXRpYyBpbnQgaTQwZV9wdHBfc2V0X3RpbWVzdGFtcF9tb2RlKHN0cnVjdCBpNDBlX3BmICpwZixcbiBcdHJlZ3ZhbCB8PSAxIFx1MDAzY1x1MDAzYyBJNDBFX1BSVFRTWU5fQ1RMMF9FVkVOVF9JTlRfRU5BX1NISUZUO1xuIFx0d3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7XG4gXG4tXHRJTklUX1dPUksoXHUwMDI2cGYtXHUwMDNlcHRwX2V4dHRzMF93b3JrLCBpNDBlX3B0cF9leHR0czBfd29yayk7XG4tXG4gXHRzd2l0Y2ggKGNvbmZpZy1cdTAwM2V0eF90eXBlKSB7XG4gXHRjYXNlIEhXVFNUQU1QX1RYX09GRjpcbiBcdFx0cGYtXHUwMDNlcHRwX3R4ID0gZmFsc2U7XG5AQCAtMTMxMywxNyArMTMzNywyMyBAQCBpbnQgaTQwZV9wdHBfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRzdHJ1Y3QgaTQwZV9wZiAqcGYgPSBucC1cdTAwM2V2c2ktXHUwMDNlYmFjaztcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoIXRlc3RfYml0KEk0MEVfRkxBR19QVFBfRU5BLCBwZi1cdTAwM2VmbGFncykpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdG11dGV4X2xvY2soXHUwMDI2cGYtXHUwMDNlcHRwX2NvbmZpZ19sb2NrKTtcbitcbitcdGlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLVx1MDAzZWZsYWdzKSkge1xuK1x0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4gXG4gXHRlcnIgPSBpNDBlX3B0cF9zZXRfdGltZXN0YW1wX21vZGUocGYsIGNvbmZpZyk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIHVubG9jaztcbiBcbiBcdC8qIHNhdmUgdGhlc2Ugc2V0dGluZ3MgZm9yIGZ1dHVyZSByZWZlcmVuY2UgKi9cbiBcdHBmLVx1MDAzZXRzdGFtcF9jb25maWcgPSAqY29uZmlnO1xuIFxuLVx0cmV0dXJuIDA7XG4rdW5sb2NrOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZXB0cF9jb25maWdfbG9jayk7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiAvKipcbkBAIC0xNTM5LDE5ICsxNTY5LDMxIEBAIHZvaWQgaTQwZV9wdHBfc3RvcChzdHJ1Y3QgaTQwZV9wZiAqcGYpXG4ge1xuIFx0c3RydWN0IGk0MGVfdnNpICptYWluX3ZzaSA9IGk0MGVfcGZfZ2V0X21haW5fdnNpKHBmKTtcbiBcdHN0cnVjdCBpNDBlX2h3ICpodyA9IFx1MDAyNnBmLVx1MDAzZWh3O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHR1MzIgcmVndmFsO1xuIFxuK1x0bXV0ZXhfbG9jayhcdTAwMjZwZi1cdTAwM2VwdHBfY29uZmlnX2xvY2spO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGYtXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcbiBcdGNsZWFyX2JpdChJNDBFX0ZMQUdfUFRQX0VOQSwgcGYtXHUwMDNlZmxhZ3MpO1xuIFx0cGYtXHUwMDNlcHRwX3R4ID0gZmFsc2U7XG4rXHRza2IgPSBwZi1cdTAwM2VwdHBfdHhfc2tiO1xuK1x0cGYtXHUwMDNlcHRwX3R4X3NrYiA9IE5VTEw7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4rXG4gXHRwZi1cdTAwM2VwdHBfcnggPSBmYWxzZTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VwdHBfY29uZmlnX2xvY2spO1xuIFxuLVx0aWYgKHBmLVx1MDAzZXB0cF90eF9za2IpIHtcbi1cdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHBmLVx1MDAzZXB0cF90eF9za2I7XG4rXHQvKiBTdG9wIGV4dGVybmFsIHRpbWVzdGFtcCBldmVudHMgYmVmb3JlIHVucmVnaXN0ZXJpbmcgdGhlIGNsb2NrLiAqL1xuK1x0cmVndmFsID0gcmQzMihodywgSTQwRV9QUlRUU1lOX0NUTDApO1xuK1x0cmVndmFsIFx1MDAyNj0gfkk0MEVfUFJUVFNZTl9DVEwwX0VWRU5UX0lOVF9FTkFfTUFTSztcbitcdHdyMzIoaHcsIEk0MEVfUFJUVFNZTl9DVEwwLCByZWd2YWwpO1xuIFxuLVx0XHRwZi1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbi1cdFx0Y2xlYXJfYml0X3VubG9jayhfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLCBwZi1cdTAwM2VzdGF0ZSk7XG4rXHRkaXNhYmxlX3dvcmtfc3luYyhcdTAwMjZwZi1cdTAwM2VwdHBfZXh0dHMwX3dvcmspO1xuK1xuK1x0aWYgKHNrYilcbiBcdFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbi1cdH1cbiBcbiBcdGlmIChwZi1cdTAwM2VwdHBfY2xvY2spIHtcbiBcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIocGYtXHUwMDNlcHRwX2Nsb2NrKTtcbkBAIC0xNTcwLDEwICsxNjEyLDUgQEAgdm9pZCBpNDBlX3B0cF9zdG9wKHN0cnVjdCBpNDBlX3BmICpwZilcbiBcdHJlZ3ZhbCBcdTAwMjY9IH5JNDBFX1BSVFRTWU5fQVVYXzBfUFRQRkxBR19NQVNLO1xuIFx0d3IzMihodywgSTQwRV9QUlRUU1lOX0FVWF8wKDApLCByZWd2YWwpO1xuIFxuLVx0LyogRGlzYWJsZSBpbnRlcnJ1cHRzICovXG4tXHRyZWd2YWwgPSByZDMyKGh3LCBJNDBFX1BSVFRTWU5fQ1RMMCk7XG4tXHRyZWd2YWwgXHUwMDI2PSB+STQwRV9QUlRUU1lOX0NUTDBfRVZFTlRfSU5UX0VOQV9NQVNLO1xuLVx0d3IzMihodywgSTQwRV9QUlRUU1lOX0NUTDAsIHJlZ3ZhbCk7XG4tXG4gXHRpNDBlX3B0cF9mcmVlX3BpbnMocGYpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguY1xuaW5kZXggODk0ZjJkMDZkMzlkMC4uZjQzMDU0NmFjZjQyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmNcbkBAIC0zMTk4LDcgKzMxOTgsOSBAQCBzdGF0aWMgaW50IGk0MGVfdHNvKHN0cnVjdCBpNDBlX3R4X2J1ZmZlciAqZmlyc3QsIHU4ICpoZHJfbGVuLFxuIHN0YXRpYyBpbnQgaTQwZV90c3luKHN0cnVjdCBpNDBlX3JpbmcgKnR4X3JpbmcsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgICAgdTMyIHR4X2ZsYWdzLCB1NjQgKmNkX3R5cGVfY21kX3Rzb19tc3MpXG4ge1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHN0cnVjdCBpNDBlX3BmICpwZjtcbitcdGludCB0c3luID0gMDtcbiBcbiBcdGlmIChsaWtlbHkoIShza2Jfc2hpbmZvKHNrYiktXHUwMDNldHhfZmxhZ3MgXHUwMDI2IFNLQlRYX0hXX1RTVEFNUCkpKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0zMjExLDIzICszMjEzLDI4IEBAIHN0YXRpYyBpbnQgaTQwZV90c3luKHN0cnVjdCBpNDBlX3JpbmcgKnR4X3JpbmcsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHQgKiB3ZSBhcmUgbm90IGFscmVhZHkgdHJhbnNtaXR0aW5nIGEgcGFja2V0IHRvIGJlIHRpbWVzdGFtcGVkXG4gXHQgKi9cbiBcdHBmID0gaTQwZV9uZXRkZXZfdG9fcGYodHhfcmluZy1cdTAwM2VuZXRkZXYpO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cGYtXHUwMDNlcHRwX3R4X2xvY2ssIGZsYWdzKTtcbitcbiBcdGlmICghdGVzdF9iaXQoSTQwRV9GTEFHX1BUUF9FTkEsIHBmLVx1MDAzZWZsYWdzKSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbi1cdGlmIChwZi1cdTAwM2VwdHBfdHggXHUwMDI2XHUwMDI2XG4tXHQgICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLCBwZi1cdTAwM2VzdGF0ZSkpIHtcbitcdGlmIChwZi1cdTAwM2VwdHBfdHggXHUwMDI2XHUwMDI2ICFwZi1cdTAwM2VwdHBfdHhfc2tiKSB7XG4gXHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2V0eF9mbGFncyB8PSBTS0JUWF9JTl9QUk9HUkVTUztcbiBcdFx0cGYtXHUwMDNlcHRwX3R4X3N0YXJ0ID0gamlmZmllcztcbiBcdFx0cGYtXHUwMDNlcHRwX3R4X3NrYiA9IHNrYl9nZXQoc2tiKTtcbitcdFx0dHN5biA9IDE7XG4gXHR9IGVsc2Uge1xuIFx0XHRwZi1cdTAwM2V0eF9od3RzdGFtcF9za2lwcGVkKys7XG4tXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuLVx0KmNkX3R5cGVfY21kX3Rzb19tc3MgfD0gKHU2NClJNDBFX1RYX0NUWF9ERVNDX1RTWU4gXHUwMDNjXHUwMDNjXG4tXHRcdFx0XHRJNDBFX1RYRF9DVFhfUVcxX0NNRF9TSElGVDtcbitvdXRfdW5sb2NrOlxuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwZi1cdTAwM2VwdHBfdHhfbG9jaywgZmxhZ3MpO1xuIFxuLVx0cmV0dXJuIDE7XG4rXHRpZiAodHN5bilcbitcdFx0KmNkX3R5cGVfY21kX3Rzb19tc3MgfD0gKHU2NClJNDBFX1RYX0NUWF9ERVNDX1RTWU4gXHUwMDNjXHUwMDNjXG4rXHRcdFx0XHRcdEk0MEVfVFhEX0NUWF9RVzFfQ01EX1NISUZUO1xuK1xuK1x0cmV0dXJuIHRzeW47XG4gfVxuIFxuIC8qKlxuQEAgLTM5NTcsMTAgKzM5NjQsMjEgQEAgc3RhdGljIG5ldGRldl90eF90IGk0MGVfeG1pdF9mcmFtZV9yaW5nKHN0cnVjdCBza19idWZmICpza2IsXG4gY2xlYW51cF90eF90c3RhbXA6XG4gXHRpZiAodW5saWtlbHkodHhfZmxhZ3MgXHUwMDI2IEk0MEVfVFhfRkxBR1NfVFNZTikpIHtcbiBcdFx0c3RydWN0IGk0MGVfcGYgKnBmID0gaTQwZV9uZXRkZXZfdG9fcGYodHhfcmluZy1cdTAwM2VuZXRkZXYpO1xuK1x0XHRzdHJ1Y3Qgc2tfYnVmZiAqcHRwX3NrYiA9IE5VTEw7XG4rXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4rXHRcdC8qIEFub3RoZXIgY2xlYW51cCBwYXRoIG1heSBoYXZlIGhhbmRlZCB0aGUgc2xvdFxuK1x0XHQgKiB0byBhIG5ldyBza2IuXG4rXHRcdCAqL1xuK1x0XHRpZiAocGYtXHUwMDNlcHRwX3R4X3NrYiA9PSBza2IpIHtcbitcdFx0XHRwdHBfc2tiID0gcGYtXHUwMDNlcHRwX3R4X3NrYjtcbitcdFx0XHRwZi1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbitcdFx0fVxuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnBmLVx1MDAzZXB0cF90eF9sb2NrLCBmbGFncyk7XG4gXG4tXHRcdGRldl9rZnJlZV9za2JfYW55KHBmLVx1MDAzZXB0cF90eF9za2IpO1xuLVx0XHRwZi1cdTAwM2VwdHBfdHhfc2tiID0gTlVMTDtcbi1cdFx0Y2xlYXJfYml0X3VubG9jayhfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTLCBwZi1cdTAwM2VzdGF0ZSk7XG4rXHRcdGlmIChwdHBfc2tiKVxuK1x0XHRcdGRldl9rZnJlZV9za2JfYW55KHB0cF9za2IpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA2OjU5OjA2LjU3MTUxNTU3MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTM1NDEzMzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBpNDBlIERyaXZlciBQYXRjaCBhbmQgRnV6emluZyBGZWFzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIHRoZSBgaTQwZWAgZHJpdmVyIOKAkyBJbnRlbCdzIDQwIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlciwgWEw3MTAgRmFtaWx5LiBSaWdodCBhd2F5LCBJIHNlZSBjaGFuZ2VzIGludm9sdmluZyBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczogcmVwbGFjaW5nIGEgYml0IGZsYWcgKGBfX0k0MEVfUFRQX1RYX0lOX1BST0dSRVNTYCkgd2l0aCBhIHNwaW5sb2NrIChgcHRwX3R4X2xvY2tgKSwgaW50cm9kdWNpbmcgYSBtdXRleCAoYHB0cF9jb25maWdfbG9ja2ApLCBhbmQgdHdlYWtzIHRvIGhvdyByZXNldCByZWNvdmVyeSBpcyBoYW5kbGVkIChgY2xlYXJfYW5kX3dha2VfdXBfYml0YCwgYHdhaXRfb25fYml0X2xvY2tgKS4gSXQgYWxzbyBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHRvIHRoZSBgaTQwZV9yZW1vdmVgIGZ1bmN0aW9uIHRvIHNhZmVseSBkaXNhYmxlIHNlcnZpY2VzIGJlZm9yZSByZXNvdXJjZSB0ZWFyZG93bi5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmdXp6YWJsZS4gU2luY2UgaXQncyBhbiBFdGhlcm5ldCBkcml2ZXIsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdmlydHVhbGl6YXRpb24gYW5kIHdoZXRoZXIgSSBjYW4gdGVzdCB0aGlzIHdpdGhpbiBRRU1VLiBCdXQgd2FpdCwgYGk0MGVgIGlzIGEgKnBoeXNpY2FsKiBFdGhlcm5ldCBkcml2ZXIuIERvZXMgUUVNVSBldmVuIGVtdWxhdGUgYGk0MGVgIGhhcmR3YXJlPyBJIG5lZWQgdG8gY2hlY2suXG5cbkxldCBtZSByZWNhbGwgd2hhdCBRRU1VIG9mZmVycy4gSXQgaGFzIGBlMTAwMGAsIGBlMTAwMGVgLCBgaWdiYCwgYHZteG5ldDNgLCBgcnRsODEzOWAsIGFuZCBgdmlydGlvLW5ldGAuIEJ1dCwgZG8gdGhleSBlbXVsYXRlIGBpNDBlYCBzcGVjaWZpY2FsbHk/IE5vLCBhIHF1aWNrIGNoZWNrIG9mIFFFTVUncyBkZXZpY2UgbGlzdCBjb25maXJtcyB0aGF0IHRoZXJlJ3Mgbm8gYGk0MGVgIGVtdWxhdGlvbi4gT2theSwgc28gaXQgbG9va3MgbGlrZSBRRU1VIGRvZXMgKm5vdCogb2ZmZXIgYW4gZW11bGF0ZWQgdmVyc2lvbiBvZiB0aGUgaTQwZS5cblxuSSBjb25zaWRlcmVkIGRpZ2dpbmcgaW50byB0aGUgUUVNVSBzb3VyY2UsIGJ1dCBJIGRvbid0IGhhdmUgaXQgYXQgaGFuZCByaWdodCBub3cuIE1vcmUgaW1wb3J0YW50bHksIGl0J3MgY2xlYXIgdGhhdCBpdCdzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCByZXNpZGluZyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9gLiBHaXZlbiBpdHMgcGh5c2ljYWwgaGFyZHdhcmUgbmF0dXJlLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGZ1enppbmcgZmVhc2liaWxpdHkgcXVlc3Rpb24gYXMgYSAqdmlydHVhbGl6ZWQqIGVudmlyb25tZW50LlxuXG5Mb29raW5nIGJhY2sgYXQgdGhlIHJlcXVpcmVtZW50cywgSSByZW1lbWJlciB0aGUgY3JpdGVyaWE6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLkNvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5UaGlzIGV4YWN0bHkgZml0cyB0aGUgYmlsbC4gVGhlIGBpNDBlYCBkcml2ZXIgaXMgYSBoYXJkd2FyZSBkcml2ZXIgZm9yIGEgcGh5c2ljYWwgUENJZSBjYXJkLiBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgYGk0MGVgIGhhcmR3YXJlLiBBbmQgdGhlcmVmb3JlLCBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiB3b24ndCB3b3JrIGZvciB0aGlzIGRyaXZlci5cblxuVG8gYmUgZXh0cmEgY2VydGFpbiwgSSBuZWVkIHRvIGNoZWNrIHRoYXQgbm8gb3RoZXIgdmlydHVhbGl6YXRpb24gb3B0aW9uIGNhbiByZWFjaCB0aGlzLiBJIHNlYXJjaGVkIG15IG1lbW9yaWVzIHRvIGNoZWNrIGZvciBmdXp6aW5nIG9mIGBpNDBlYCB0aHJvdWdoIHN5emthbGxlci4gU2luY2UgdGhlIGRldmljZSBpc24ndCB2aXJ0dWFsaXplZCwgc3l6a2FsbGVyIGdlbmVyYWxseSB3b24ndCBmdXp6IGBpNDBlYC4gSSB0aGluayBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUuXG5cbkknbGwgY2hlY2sgc29tZSBtb3JlIGJ5IGNoZWNraW5nIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0c2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbW9ja3Mgb3Igc2ltaWxhci5cblxuTm9wZSwgbm8gc3VjaCB0aGluZ3MuIEl0J3MgYSBzdGFuZGFyZCBJbnRlbCBFdGhlcm5ldCBkcml2ZXIuXG5cblRoZSBwYXRjaCBkZWZpbml0aXZlbHkgbW9kaWZpZXMgYSBoYXJkd2FyZSBkcml2ZXIsIHNwZWNpZmljYWxseSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9gLiBUaGF0IG1lYW5zIEkgaGF2ZSB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIChJbnRlbCBpNDBlKSB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUsIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gVGhpcyBjb2RlIGlzIGluYWNjZXNzaWJsZSB0byBhIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuIEknbSBnb2luZyB0byBzZXQgV29ydGhGdXp6aW5nPWZhbHNlLiBMZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDc1LCJPdXRwdXRUb2tlbnMiOjkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDA2OjU5OjIxLjcwNjkzMTQ0NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEludGVsIGk0MGUgRXRoZXJuZXQgZHJpdmVyLCB3aGljaCByZXF1aXJlcyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChJbnRlbCA0MCBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIpIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzIHVzZWQgZm9yIGZ1enppbmcuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSW50ZWwgaTQwZSBFdGhlcm5ldCBkcml2ZXIsIHdoaWNoIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKEludGVsIDQwIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlcikgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMgdXNlZCBmb3IgZnV6emluZy4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowf55wr[1] Phase: Running StartedAt: 2026-08-05 06:59:33 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowf55wr[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-05 06:59:33 +0000 UTC FinishedAt: 2026-08-05 06:59:39 +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,}