Name: series-workflow9rkcl Phase: Failed StartedAt: 2026-09-07 12:52:00 +0000 UTC FinishedAt: 2026-09-07 13:18:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rkcl[0] Phase: Succeeded StartedAt: 2026-09-07 12:52:00 +0000 UTC FinishedAt: 2026-09-07 13:17:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rkcl[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 12:52:00 +0000 UTC FinishedAt: 2026-09-07 13:17:40 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIE1lZGlhVGVrIFBDSWUgNUcgV1dBTiBtb2RlbSAoVDd4eCkgZHJpdmVyIGluIGRyaXZlcnMvbmV0L3d3YW4vdDd4eC8uIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKE1lZGlhVGVrIFQ3eHggbW9kZW0pIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBhMWY5OTFlNTUwNjMxMjZlMzI2YmE4YTg5NTRlNGI0NzA0NDUxMzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDEzOjE3OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9jbGRtYS5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmNcbmluZGV4IGUxMGNiNGY5MTA0ZTMuLjNkNzcxMjEyNjc2MTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfY2xkbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmNcbkBAIC0xMzEzLDcgJiM0MzsxMzEzLDcgQEAgaW50IHQ3eHhfY2xkbWFfaW5pdChzdHJ1Y3QgY2xkbWFfY3RybCAqbWRfY3RybClcbiBcdFx0bWRfY2RfcXVldWVfc3RydWN0X2luaXQoXHUwMDI2bWRfY3RybC1cdTAwM2V0eHFbaV0sIG1kX2N0cmwsIE1US19UWCwgaSk7XG4gXHRcdG1kX2N0cmwtXHUwMDNldHhxW2ldLndvcmtlciA9XG4gXHRcdFx0YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCYjMzQ7bWRfaGlmJWRfdHglZF93b3JrZXJcJiMzNDssXG4tXHRcdFx0XHRcdFdRX01FTV9SRUNMQUlNIHwgKGkgPyAwIDogV1FfSElHSFBSSSksXG4mIzQzO1x0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSB8IChpID8gMCA6IFdRX0hJR0hQUkkpLFxuIFx0XHRcdFx0XHRtZF9jdHJsLVx1MDAzZWhpZl9pZCwgaSk7XG4gXHRcdGlmICghbWRfY3RybC1cdTAwM2V0eHFbaV0ud29ya2VyKVxuIFx0XHRcdGdvdG8gZXJyX3dvcmtxdWV1ZTtcbkBAIC0xMzI3LDcgJiM0MzsxMzI3LDcgQEAgaW50IHQ3eHhfY2xkbWFfaW5pdChzdHJ1Y3QgY2xkbWFfY3RybCAqbWRfY3RybClcbiBcbiBcdFx0bWRfY3RybC1cdTAwM2VyeHFbaV0ud29ya2VyID1cbiBcdFx0XHRhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDttZF9oaWYlZF9yeCVkX3dvcmtlclwmIzM0Oyxcbi1cdFx0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSxcbiYjNDM7XHRcdFx0XHRcdFx0V1FfTUVNX1JFQ0xBSU0gfCBXUV9GUkVFWkFCTEUsXG4gXHRcdFx0XHRcdFx0bWRfY3RybC1cdTAwM2VoaWZfaWQsIGkpO1xuIFx0XHRpZiAoIW1kX2N0cmwtXHUwMDNlcnhxW2ldLndvcmtlcilcbiBcdFx0XHRnb3RvIGVycl93b3JrcXVldWU7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jXG5pbmRleCA1YWY5MGNhNmUwNjMxLi4wZmUyZGQxMzYzYTRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3J4LmNcbkBAIC0xMDg4LDcgJiM0MzsxMDg4LDcgQEAgc3RhdGljIHZvaWQgdDd4eF9kcG1haWZfYmF0X3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gaW50IHQ3eHhfZHBtYWlmX2JhdF9yZWxfd3FfYWxsb2Moc3RydWN0IGRwbWFpZl9jdHJsICpkcG1haWZfY3RybClcbiB7XG4gXHRkcG1haWZfY3RybC1cdTAwM2ViYXRfcmVsZWFzZV93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtkcG1haWZfYmF0X3JlbGVhc2Vfd29ya19xdWV1ZVwmIzM0Oyxcbi1cdFx0XHRcdFx0XHQgICAgICBXUV9NRU1fUkVDTEFJTSB8IFdRX1BFUkNQVSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUgfCBXUV9GUkVFWkFCTEUsXG4gXHRcdFx0XHRcdFx0ICAgICAgMSk7XG4gXHRpZiAoIWRwbWFpZl9jdHJsLVx1MDAzZWJhdF9yZWxlYXNlX3dxKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3R4LmMgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3R4LmNcbmluZGV4IDIzNmQ2MzJjZjU5MWIuLmNjZTcxYzgyN2U3YjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3R4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9kcG1haWZfdHguY1xuQEAgLTIyLDYgJiM0MzsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWRpcmVjdGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbkBAIC00MjEsNiAmIzQzOzQyMiwxMiBAQCBzdGF0aWMgdm9pZCB0N3h4X2RvX3R4X2h3X3B1c2goc3RydWN0IGRwbWFpZl9jdHJsICpkcG1haWZfY3RybClcbiBcbiBcdFx0ZHJiX3NlbmRfY250ID0gdDd4eF90eHFfYnVyc3Rfc2VuZF9za2IodHhxKTtcbiBcdFx0aWYgKGRyYl9zZW5kX2NudCBcdTAwM2M9IDApIHtcbiYjNDM7XHRcdFx0LyogSWYgYSBmcmVlemUgaXMgcGVuZGluZyB0aGUgVFgtZG9uZSB3b3JrZXIgbWF5IGFscmVhZHkgYmVcbiYjNDM7XHRcdFx0ICogZnJvemVuIGFuZCB1bmFibGUgdG8gZHJhaW4gdGhlIERSQiByaW5nOyByZXR1cm4gdG8gdGhlXG4mIzQzO1x0XHRcdCAqIGNhbGxlciBzbyBQTSByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIGJlZm9yZSB0cnlfdG9fZnJlZXplKCkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoZnJlZXppbmcoY3VycmVudCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuIFx0XHRcdHVzbGVlcF9yYW5nZSgxMCwgMjApO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTQ0NywxOSAmIzQzOzQ1NCwyOCBAQCBzdGF0aWMgaW50IHQ3eHhfZHBtYWlmX3R4X2h3X3B1c2hfdGhyZWFkKHZvaWQgKmFyZylcbiBcdHN0cnVjdCBkcG1haWZfY3RybCAqZHBtYWlmX2N0cmwgPSBhcmc7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdHNldF9mcmVlemFibGUoKTtcbiYjNDM7XG4gXHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xuIFx0XHRpZiAodDd4eF90eF9saXN0c19hcmVfYWxsX2VtcHR5KGRwbWFpZl9jdHJsKSB8fFxuIFx0XHQgICAgZHBtYWlmX2N0cmwtXHUwMDNlc3RhdGUgIT0gRFBNQUlGX1NUQVRFX1BXUk9OKSB7XG4tXHRcdFx0aWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkcG1haWZfY3RybC1cdTAwM2V0eF93cSxcbi1cdFx0XHRcdFx0XHQgICAgICghdDd4eF90eF9saXN0c19hcmVfYWxsX2VtcHR5KGRwbWFpZl9jdHJsKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdFx0XHQgICAgIGRwbWFpZl9jdHJsLVx1MDAzZXN0YXRlID09IERQTUFJRl9TVEFURV9QV1JPTikgfHxcbi1cdFx0XHRcdFx0XHQgICAgIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkpXG4mIzQzO1x0XHRcdGlmICh3YWl0X2V2ZW50X2ZyZWV6YWJsZShkcG1haWZfY3RybC1cdTAwM2V0eF93cSxcbiYjNDM7XHRcdFx0XHRcdFx0ICghdDd4eF90eF9saXN0c19hcmVfYWxsX2VtcHR5KGRwbWFpZl9jdHJsKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHRcdFx0ICBkcG1haWZfY3RybC1cdTAwM2VzdGF0ZSA9PSBEUE1BSUZfU1RBVEVfUFdST04pIHx8XG4mIzQzO1x0XHRcdFx0XHRcdCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0aWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHQvKiBGcmVlemUgaGVyZSwgb3V0c2lkZSB0aGUgcnVudGltZS1QTSBhbmQgTU1JTyBzZWN0aW9uIGJlbG93LCBzb1xuJiM0MztcdFx0ICogdGhlIHN5c3RlbSBzdXNwZW5kIGZyZWV6ZXIgcGFya3MgdGhpcyB0aHJlYWQgYmVmb3JlIHRoZSBkZXZpY2VcbiYjNDM7XHRcdCAqIHN1c3BlbmQgY2FsbGJhY2tzIHRlYXIgdGhlIERQTUFJRiBoYXJkd2FyZSBkb3duLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodHJ5X3RvX2ZyZWV6ZSgpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoZHBtYWlmX2N0cmwtXHUwMDNlZGV2KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUNDRVMpXG4gXHRcdFx0cmV0dXJuIHJldDtcbkBAIC02MTcsNyAmIzQzOzYzMyw3IEBAIGludCB0N3h4X2RwbWFpZl90eHFfaW5pdChzdHJ1Y3QgZHBtYWlmX3R4X3F1ZXVlICp0eHEpXG4gXHR9XG4gXG4gXHR0eHEtXHUwMDNld29ya2VyID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCYjMzQ7bWRfZHBtYWlmX3R4JWRfd29ya2VyXCYjMzQ7LFxuLVx0XHRcdFx0V1FfTUVNX1JFQ0xBSU0gfCAodHhxLVx1MDAzZWluZGV4ID8gMCA6IFdRX0hJR0hQUkkpLFxuJiM0MztcdFx0XHRcdFdRX01FTV9SRUNMQUlNIHwgV1FfRlJFRVpBQkxFIHwgKHR4cS1cdTAwM2VpbmRleCA/IDAgOiBXUV9ISUdIUFJJKSxcbiBcdFx0XHRcdHR4cS1cdTAwM2VpbmRleCk7XG4gXHRpZiAoIXR4cS1cdTAwM2V3b3JrZXIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBNZWRpYVRlayBQQ0llIDVHIFdXQU4gbW9kZW0gKFQ3eHgpIGRyaXZlciBpbiBkcml2ZXJzL25ldC93d2FuL3Q3eHgvLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChNZWRpYVRlayBUN3h4IG1vZGVtKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYTFmOTkxZTU1MDYzMTI2ZTMyNmJhOGE4OTU0ZTRiNDcwNDQ1MTM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMzoxNzowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9jbGRtYS5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmMKaW5kZXggZTEwY2I0ZjkxMDRlMy4uM2Q3NzEyMTI2NzYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmMKQEAgLTEzMTMsNyAmIzQzOzEzMTMsNyBAQCBpbnQgdDd4eF9jbGRtYV9pbml0KHN0cnVjdCBjbGRtYV9jdHJsICptZF9jdHJsKQogCQltZF9jZF9xdWV1ZV9zdHJ1Y3RfaW5pdCgmYW1wO21kX2N0cmwtJmd0O3R4cVtpXSwgbWRfY3RybCwgTVRLX1RYLCBpKTsKIAkJbWRfY3RybC0mZ3Q7dHhxW2ldLndvcmtlciA9CiAJCQlhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgmIzM0O21kX2hpZiVkX3R4JWRfd29ya2VyJiMzNDssCi0JCQkJCVdRX01FTV9SRUNMQUlNIHwgKGkgPyAwIDogV1FfSElHSFBSSSksCiYjNDM7CQkJCQlXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSB8IChpID8gMCA6IFdRX0hJR0hQUkkpLAogCQkJCQltZF9jdHJsLSZndDtoaWZfaWQsIGkpOwogCQlpZiAoIW1kX2N0cmwtJmd0O3R4cVtpXS53b3JrZXIpCiAJCQlnb3RvIGVycl93b3JrcXVldWU7CkBAIC0xMzI3LDcgJiM0MzsxMzI3LDcgQEAgaW50IHQ3eHhfY2xkbWFfaW5pdChzdHJ1Y3QgY2xkbWFfY3RybCAqbWRfY3RybCkKIAogCQltZF9jdHJsLSZndDtyeHFbaV0ud29ya2VyID0KIAkJCWFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKCYjMzQ7bWRfaGlmJWRfcnglZF93b3JrZXImIzM0OywKLQkJCQkJCVdRX01FTV9SRUNMQUlNLAomIzQzOwkJCQkJCVdRX01FTV9SRUNMQUlNIHwgV1FfRlJFRVpBQkxFLAogCQkJCQkJbWRfY3RybC0mZ3Q7aGlmX2lkLCBpKTsKIAkJaWYgKCFtZF9jdHJsLSZndDtyeHFbaV0ud29ya2VyKQogCQkJZ290byBlcnJfd29ya3F1ZXVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jCmluZGV4IDVhZjkwY2E2ZTA2MzEuLjBmZTJkZDEzNjNhNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9kcG1haWZfcnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3J4LmMKQEAgLTEwODgsNyAmIzQzOzEwODgsNyBAQCBzdGF0aWMgdm9pZCB0N3h4X2RwbWFpZl9iYXRfcmVsZWFzZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIGludCB0N3h4X2RwbWFpZl9iYXRfcmVsX3dxX2FsbG9jKHN0cnVjdCBkcG1haWZfY3RybCAqZHBtYWlmX2N0cmwpCiB7CiAJZHBtYWlmX2N0cmwtJmd0O2JhdF9yZWxlYXNlX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7ZHBtYWlmX2JhdF9yZWxlYXNlX3dvcmtfcXVldWUmIzM0OywKLQkJCQkJCSAgICAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVLAomIzQzOwkJCQkJCSAgICAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVIHwgV1FfRlJFRVpBQkxFLAogCQkJCQkJICAgICAgMSk7CiAJaWYgKCFkcG1haWZfY3RybC0mZ3Q7YmF0X3JlbGVhc2Vfd3EpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jCmluZGV4IDIzNmQ2MzJjZjU5MWIuLmNjZTcxYzgyN2U3YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9kcG1haWZfdHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3R4LmMKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hLWRpcmVjdGlvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1tYXBwaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZyZWV6ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9nZnAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rdGhyZWFkLmgmZ3Q7CkBAIC00MjEsNiAmIzQzOzQyMiwxMiBAQCBzdGF0aWMgdm9pZCB0N3h4X2RvX3R4X2h3X3B1c2goc3RydWN0IGRwbWFpZl9jdHJsICpkcG1haWZfY3RybCkKIAogCQlkcmJfc2VuZF9jbnQgPSB0N3h4X3R4cV9idXJzdF9zZW5kX3NrYih0eHEpOwogCQlpZiAoZHJiX3NlbmRfY250ICZsdDs9IDApIHsKJiM0MzsJCQkvKiBJZiBhIGZyZWV6ZSBpcyBwZW5kaW5nIHRoZSBUWC1kb25lIHdvcmtlciBtYXkgYWxyZWFkeSBiZQomIzQzOwkJCSAqIGZyb3plbiBhbmQgdW5hYmxlIHRvIGRyYWluIHRoZSBEUkIgcmluZzsgcmV0dXJuIHRvIHRoZQomIzQzOwkJCSAqIGNhbGxlciBzbyBQTSByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIGJlZm9yZSB0cnlfdG9fZnJlZXplKCkuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKGZyZWV6aW5nKGN1cnJlbnQpKQomIzQzOwkJCQlyZXR1cm47CiAJCQl1c2xlZXBfcmFuZ2UoMTAsIDIwKTsKIAkJCWNvbmRfcmVzY2hlZCgpOwogCQkJY29udGludWU7CkBAIC00NDcsMTkgJiM0Mzs0NTQsMjggQEAgc3RhdGljIGludCB0N3h4X2RwbWFpZl90eF9od19wdXNoX3RocmVhZCh2b2lkICphcmcpCiAJc3RydWN0IGRwbWFpZl9jdHJsICpkcG1haWZfY3RybCA9IGFyZzsKIAlpbnQgcmV0OwogCiYjNDM7CXNldF9mcmVlemFibGUoKTsKJiM0MzsKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQlpZiAodDd4eF90eF9saXN0c19hcmVfYWxsX2VtcHR5KGRwbWFpZl9jdHJsKSB8fAogCQkgICAgZHBtYWlmX2N0cmwtJmd0O3N0YXRlICE9IERQTUFJRl9TVEFURV9QV1JPTikgewotCQkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkcG1haWZfY3RybC0mZ3Q7dHhfd3EsCi0JCQkJCQkgICAgICghdDd4eF90eF9saXN0c19hcmVfYWxsX2VtcHR5KGRwbWFpZl9jdHJsKSAmYW1wOyZhbXA7Ci0JCQkJCQkgICAgIGRwbWFpZl9jdHJsLSZndDtzdGF0ZSA9PSBEUE1BSUZfU1RBVEVfUFdST04pIHx8Ci0JCQkJCQkgICAgIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkpCiYjNDM7CQkJaWYgKHdhaXRfZXZlbnRfZnJlZXphYmxlKGRwbWFpZl9jdHJsLSZndDt0eF93cSwKJiM0MzsJCQkJCQkgKCF0N3h4X3R4X2xpc3RzX2FyZV9hbGxfZW1wdHkoZHBtYWlmX2N0cmwpICZhbXA7JmFtcDsKJiM0MzsJCQkJCQkgIGRwbWFpZl9jdHJsLSZndDtzdGF0ZSA9PSBEUE1BSUZfU1RBVEVfUFdST04pIHx8CiYjNDM7CQkJCQkJIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkpCiAJCQkJY29udGludWU7CiAKIAkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCiAJCQkJYnJlYWs7CiAJCX0KIAomIzQzOwkJLyogRnJlZXplIGhlcmUsIG91dHNpZGUgdGhlIHJ1bnRpbWUtUE0gYW5kIE1NSU8gc2VjdGlvbiBiZWxvdywgc28KJiM0MzsJCSAqIHRoZSBzeXN0ZW0gc3VzcGVuZCBmcmVlemVyIHBhcmtzIHRoaXMgdGhyZWFkIGJlZm9yZSB0aGUgZGV2aWNlCiYjNDM7CQkgKiBzdXNwZW5kIGNhbGxiYWNrcyB0ZWFyIHRoZSBEUE1BSUYgaGFyZHdhcmUgZG93bi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHRyeV90b19mcmVlemUoKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJcmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChkcG1haWZfY3RybC0mZ3Q7ZGV2KTsKIAkJaWYgKHJldCAmbHQ7IDAgJmFtcDsmYW1wOyByZXQgIT0gLUVBQ0NFUykKIAkJCXJldHVybiByZXQ7CkBAIC02MTcsNyAmIzQzOzYzMyw3IEBAIGludCB0N3h4X2RwbWFpZl90eHFfaW5pdChzdHJ1Y3QgZHBtYWlmX3R4X3F1ZXVlICp0eHEpCiAJfQogCiAJdHhxLSZndDt3b3JrZXIgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgmIzM0O21kX2RwbWFpZl90eCVkX3dvcmtlciYjMzQ7LAotCQkJCVdRX01FTV9SRUNMQUlNIHwgKHR4cS0mZ3Q7aW5kZXggPyAwIDogV1FfSElHSFBSSSksCiYjNDM7CQkJCVdRX01FTV9SRUNMQUlNIHwgV1FfRlJFRVpBQkxFIHwgKHR4cS0mZ3Q7aW5kZXggPyAwIDogV1FfSElHSFBSSSksCiAJCQkJdHhxLSZndDtpbmRleCk7CiAJaWYgKCF0eHEtJmd0O3dvcmtlcikKIAkJcmV0dXJuIC1FTk9NRU07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpczoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBGdXp6aW5nIENhbmRpZGF0ZSBFdmFsdWF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBzeXprYWxsZXI6IHRoZSBgZHJpdmVycy9uZXQvd3dhbi90N3h4L2AgZHJpdmVyLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZXZlbiB3b3J0aCB0aGUgZWZmb3J0IHRvIGZ1enogaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBkcml2ZXIgYWN0dWFsbHkgZG9lcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuCgpUaGUgYmVzdCB3YXkgdG8gZmlndXJlIG91dCB3aGF0IGl0IGlzLCBpcyB0byBsb29rIGF0IHRoZSBjb2RlLCBvYnZpb3VzbHkuIEkmIzM5O2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgV1dBTiBpdCBpbnRlcmZhY2VzIHdpdGguIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgaXMgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIG9idmlvdXMgcGxhY2VzOiBlaXRoZXIgcnVubmluZyBgZ3JlcHBlcmAgb3IgZGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3d3YW4vdDd4eC9gIGRpcmVjdG9yeSBpdHNlbGYsIGFuZCBwb3NzaWJseSBldmVuIHRoZSBwYXJlbnQgYGRyaXZlcnMvbmV0L3d3YW4vYCBkaXJlY3RvcnkuIEtjb25maWcgZmlsZXMgb2Z0ZW4gY29udGFpbiB1c2VmdWwgZGVzY3JpcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCYjMzk7bGwgaGVscCBtZSBncmFzcCB0aGUgZHJpdmVyJiMzOTtzIHB1cnBvc2UgYW5kIHNjb3BlIHF1aWNrbHkuIEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhpcyBkcml2ZXIgYmVmb3JlIEkgY2FuIGRldGVybWluZSBpZiBpdCYjMzk7cyBhIGdvb2QgZnV6emluZyBjYW5kaWRhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TVRLX1Q3WFgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz05Nj1jb25maWcgSU9TTVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMDgtXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTA5OmNvbmZpZyBNVEtfVDdYWFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTExMC1cdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIFBDSWUgNUcgV1dBTiBtb2RlbSBUN3h4IGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vTWFrZWZpbGU9MTU9b2JqLSQoQ09ORklHX0lPU00pICYjNDM7PSBpb3NtL1xuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfTVRLX1Q3WFgpICYjNDM7PSB0N3h4L1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC9NYWtlZmlsZS0yLVxuZHJpdmVycy9uZXQvd3dhbi90N3h4L01ha2VmaWxlOjM6b2JqLSR7Q09ORklHX01US19UN1hYfSA6PSBtdGtfdDd4eC5vXG5kcml2ZXJzL25ldC93d2FuL3Q3eHgvTWFrZWZpbGUtNC1tdGtfdDd4eC15Oj1cdHQ3eHhfcGNpLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTM2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgV1dBTiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyByZWxhdGVkIHRvIFdXQU4gY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBzZXR0aW5ncyB1c3VhbGx5IHJlc2lkZS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgdGhhdCBhcm91bmQgbGluZSAxMDkgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IGdlbmVyYWwgYXJlYSBvZnRlbiBjb3ZlcnMgZmVhdHVyZSBlbmFibGVzIG9yIGRpc2FibGVzIHRoYXQgY291bGQgYmUgcmVsZXZhbnQgdG8gd2hhdGV2ZXIgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcuIExldCBtZSBwdWxsIHRoYXQgZmlsZSB1cCBhbmQgaGF2ZSBhIGxvb2suLi4gSSBleHBlY3QgdG8gZmluZCBzb21lIGZhbWlsaWFyIGAjaWZkZWZgIGNvbnN0cnVjdHMgb3IgbWF5YmUgc29tZSBtb3JlIGNvbXBsZXggYHNlbGVjdGAgc3RhdGVtZW50cyBpbmZsdWVuY2luZyBob3cgV1dBTiBmdW5jdGlvbmFsaXR5IGlzIGJ1aWx0LiBJJiMzOTttIGhvcGluZyBJIGNhbiBxdWlja2x5IHBpbnBvaW50IHRoZSBvcHRpb24gSSYjMzk7bSBsb29raW5nIGZvciBvciBhdCBsZWFzdCBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gaXMgc3RydWN0dXJlZCB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGFyZWEgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0c2VsZWN0IFJFTEFZIGlmIFdXQU5fREVCVUdGU1xuIDEwMTpcdFx0aGVscFxuIDEwMjpcdFx0ICBUaGlzIGRyaXZlciBlbmFibGVzIEludGVsIE0uMiBXV0FOIERldmljZSBjb21tdW5pY2F0aW9uLlxuIDEwMzpcdFxuIDEwNDpcdFx0ICBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhvc2UgSW50ZWwgTS4yIFdXQU4gTW9kdWxlcyBhbmQgd2lzaCB0byB1c2UgaXQgaW5cbiAxMDU6XHRcdCAgTGludXggc2F5IFkvTSBoZXJlLlxuIDEwNjpcdFxuIDEwNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEwODpcdFxuIDEwOTpcdGNvbmZpZyBNVEtfVDdYWFxuIDExMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgUENJZSA1RyBXV0FOIG1vZGVtIFQ3eHggZGV2aWNlXCYjMzQ7XG4gMTExOlx0XHRkZXBlbmRzIG9uIFBDSVxuIDExMjpcdFx0c2VsZWN0IFJFTEFZIGlmIFdXQU5fREVCVUdGU1xuIDExMzpcdFx0aGVscFxuIDExNDpcdFx0ICBFbmFibGVzIE1lZGlhVGVrIFBDSWUgYmFzZWQgNUcgV1dBTiBtb2RlbSAoVDd4eCBzZXJpZXMpIGRldmljZS5cbiAxMTU6XHRcdCAgQWRhcHRzIFdXQU4gZnJhbWV3b3JrIGFuZCBwcm92aWRlcyBuZXR3b3JrIGludGVyZmFjZSBsaWtlIHd3YW4wXG4gMTE2Olx0XHQgIGFuZCB0dHkgaW50ZXJmYWNlcyBsaWtlIHd3YW4wYXQwIChBVCBwcm90b2NvbCksIHd3YW4wbWJpbTBcbiAxMTc6XHRcdCAgKE1CSU0gcHJvdG9jb2wpLCBldGMuXG4gMTE4Olx0XG4gMTE5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuIDEyMDpcdFx0ICBjYWxsZWQgbXRrX3Q3eHguXG4gMTIxOlx0XG4gMTIyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTIzOlx0XG4gMTI0Olx0ZW5kaWYgIyBXV0FOXG4gMTI1Olx0XG4gMTI2Olx0ZW5kbWVudVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBUN1hYIEhhcmR3YXJlKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGBNVEtfVDdYWGAgdGhpbmcgdG8gbG9vayBhdC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgKmlzKi4gT2theSwgaXQmIzM5O3MgYSAmIzM0O01lZGlhVGVrIFBDSWUgNUcgV1dBTiBtb2RlbSBUN3h4IGRldmljZS4mIzM0OyBSaWdodCwgc28gdGhhdCBzdWdnZXN0cyBhIHBoeXNpY2FsIFBDSWUgY2FyZCBvciBhIG1vZGVtIGludGVncmF0ZWQgd2l0aCBQQ0llLiBOb3csIHRoYXQmIzM5O3MgY3J1Y2lhbCDigJMgaXQgaW1wbGllcyBhIGRpcmVjdCBoYXJkd2FyZSBpbnRlcmZhY2UuCgpUbyBnZXQgYSBoYW5kbGUgb24gdGhlIHNvZnR3YXJlIHNpZGUsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBgdDd4eF9wY2kuY2AuIFRoZSBkcml2ZXImIzM5O3MgYmluZGluZyBsb2dpYyB3aXRoaW4gdGhlIGB0N3h4X3BjaS5jYCBmaWxlIGlzIHdoZXJlIEkmIzM5O2xsIHNlZSBob3cgdGhpcyBkZXZpY2UgaW50ZXJmYWNlcyB3aXRoIHRoZSBzeXN0ZW0uIFRoYXQgY29kZSBpcyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZXZpY2UgSURzLCB2ZW5kb3IgSURzLCBhbmQgb3RoZXIgY3JpdGljYWwgUENJIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uIEZyb20gdGhlcmUsIEkmIzM5O2xsIHN0YXJ0IHRvIGJ1aWxkIGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyByb2xlIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL3Q3eHgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmM9OTQ5PU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB0N3h4X3BjaV90YWJsZSk7XG5kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuYy05NTAtXG5kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuYzo5NTE6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHQ3eHhfcGNpX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X3BjaS5jLTk1Mi1cdC5uYW1lID0gRFJJVkVSX05BTUUsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmMtOTU5LVxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmM6OTYwOm1vZHVsZV9wY2lfZHJpdmVyKHQ3eHhfcGNpX2RyaXZlcik7XG5kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuYy05NjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM0NAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBUN3h4IFBDSSBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIFQ3eHggV1dBTiBkZXZpY2UgaXMgaGFuZGxlZCwgc28gbGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaXRzIFBDSSBpbml0aWFsaXphdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBkZWx2ZSBpbnRvIHRoZSBgdDd4eF9wY2lfdGFibGVgIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIGFuZCBjb25maWd1cmVzIHRoZSBoYXJkd2FyZS4gVGhlIGZpbGUgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGlzIGBkcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuY2AuIFRoZSB0YWJsZSBkZWZpbml0aW9uIGFuZCBkZXZpY2UgbWF0Y2hpbmcgbG9naWMgYXJlIGxpa2VseSBob3VzZWQgd2l0aGluIHRoYXQgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIHRoaXMgdGFibGUgd2lsbCBvZmZlciBjbHVlcyBhYm91dCBzdXBwb3J0ZWQgZGV2aWNlcywgYXNzb2NpYXRlZCBQQ0kgSURzLCBhbmQgZHJpdmVyIGJpbmRpbmcuIEl0IGlzIHRoZSBjb3JlIG9mIGhvdyB0aGUgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIHJlY29nbml6ZSBhbmQgd29yayB3aXRoIGRpZmZlcmVudCBpdGVyYXRpb25zIG9mIHRoZSBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTM1Olx0XHRcdFx0Y29udGludWU7XG4gOTM2Olx0XG4gOTM3Olx0XHRcdGZyZWVfaXJxKHBjaV9pcnFfdmVjdG9yKHBkZXYsIGkpLCB0N3h4X2Rldi1cdTAwM2VjYWxsYmFja19wYXJhbVtpXSk7XG4gOTM4Olx0XHR9XG4gOTM5Olx0XG4gOTQwOlx0XHRwY2lfZnJlZV9pcnFfdmVjdG9ycyh0N3h4X2Rldi1cdTAwM2VwZGV2KTtcbiA5NDE6XHR9XG4gOTQyOlx0XG4gOTQzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHQ3eHhfcGNpX3RhYmxlW10gPSB7XG4gOTQ0Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NRURJQVRFSywgMHg0ZDc1KSB9LFxuIDk0NTpcdFx0eyBQQ0lfREVWSUNFKDB4MDNmMCwgMHgwOWM4KSB9LCAvLyBIUCBEUk1SLUgwMVxuIDk0NjpcdFx0eyBQQ0lfREVWSUNFKDB4MTRjMCwgMHg0ZDc1KSB9LCAvLyBEZWxsIERXNTkzM2VcbiA5NDc6XHRcdHsgfVxuIDk0ODpcdH07XG4gOTQ5Olx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHQ3eHhfcGNpX3RhYmxlKTtcbiA5NTA6XHRcbiA5NTE6XHRzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdDd4eF9wY2lfZHJpdmVyID0ge1xuIDk1MjpcdFx0Lm5hbWUgPSBEUklWRVJfTkFNRSxcbiA5NTM6XHRcdC5pZF90YWJsZSA9IHQ3eHhfcGNpX3RhYmxlLFxuIDk1NDpcdFx0LnByb2JlID0gdDd4eF9wY2lfcHJvYmUsXG4gOTU1Olx0XHQucmVtb3ZlID0gdDd4eF9wY2lfcmVtb3ZlLFxuIDk1NjpcdFx0LmRyaXZlci5wbSA9IFx1MDAyNnQ3eHhfcGNpX3BtX29wcyxcbiA5NTc6XHRcdC5zaHV0ZG93biA9IHQ3eHhfcGNpX3NodXRkb3duLFxuIDk1ODpcdH07XG4gOTU5Olx0XG4gOTYwOlx0bW9kdWxlX3BjaV9kcml2ZXIodDd4eF9wY2lfZHJpdmVyKTtcbiA5NjE6XHRcbiA5NjI6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O01lZGlhVGVrIEluY1wmIzM0Oyk7XG4gOTYzOlx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01lZGlhVGVrIFBDSWUgNUcgV1dBTiBtb2RlbSBUN3h4IGRyaXZlclwmIzM0Oyk7XG4gOTY0Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE0NgoJCQkJCQkJb3V0cHV0OiAxMDMKCQkJCQkJCXRob3VnaHRzOiA3NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJpYWdlIERlY2lzaW9uOiBXb3J0aEZ1enppbmcgPSBGYWxzZSoqCgpPa2F5LCBsZXQmIzM5O3Mgd2FsayB0aHJvdWdoIHRoaXMuIFRpbWUgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGwgb24gd2hldGhlciB0aGlzIHdhcnJhbnRzIGZ1cnRoZXIgZnV6emluZy4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuIFRoZSB0cmlhZ2UgcnVsZXMgZGljdGF0ZSB0aGF0IHdlIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBtb2RpZmljYXRpb25zIGZhbGwgKnN0cmljdGx5KiBpbnRvIGEgc3BlY2lmaWMsIG5lZ2F0aXZlLWNyaXRlcmlhIGNhdGVnb3J5LiBTcGVjaWZpY2FsbHksICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiYjMzQ7IEkga25vdyB0aGlzIGRyaWxsLCBJJiMzOTt2ZSBzZWVuIHRoaXMgYmVmb3JlLgoKTGV0JiMzOTtzIHNlZTogSXMgdGhlIE1lZGlhVGVrIFQ3eHggV1dBTiBtb2RlbSwgd2l0aCBpdHMgaWRlbnRpZmllZCBQQ0kgSUQgKDB4NGQ3NSksIEhQIERSTVItSDAxIGFuZCBEZWxsIERXNTkzM2UgdmFyaWFudHMsIGEgY2FuZGlkYXRlIGZvciB0aGlzIGNhdGVnb3J5PyBJdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGNhcmQsIGlzbiYjMzk7dCBpdD8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBUN3h4IG1vZGVtICpuZWVkcyogdGhhdCBwaHlzaWNhbCBQQ0llIGludGVyZmFjZS4gV2UmIzM5O3JlIG5vdCB0YWxraW5nIGFib3V0IHNvbWUgY2xldmVyIFVTQiBnYWRnZXQgZW11bGF0aW9uIG9yIHZpcnRpbyB0cmlja2VyeSBoZXJlLiBUaGUgY29kZSBJIGFtIGxvb2tpbmcgYXQgcGVydGFpbnMgc3BlY2lmaWNhbGx5IHRvIHRoZSBNZWRpYVRlayBNVDY4OTAgLyBUN3h4IFBDSWUgNUcgV1dBTiBtb2RlbS4gSXQmIzM5O3MgdGllZCB0byB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLiBTdGFuZGFyZCBRRU1VL0dDRSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBkb2VzICpub3QqIGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZS4KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGdyYW51bGFyIGFuZCByZXZpZXcgdGhlIGRpZmYuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlIGNoYW5nZXMgYXJlIGNvbnRhaW5lZDoKCjEuICBgZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmNgOiBXb3JrZXIgcXVldWVzIG5vdyBoYXZlIHRoZSBgV1FfRlJFRVpBQkxFYCBmbGFnLgoyLiAgYGRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9kcG1haWZfcnguY2A6IFRoZSBgYmF0X3JlbGVhc2Vfd3FgIG5vdyBhbHNvIHVzZXMgYFdRX0ZSRUVaQUJMRWAuCjMuICBgZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jYDogVGhpcyBjaGFuZ2UgYWRkZWQgZnJlZXplciBoYW5kbGluZyBhbmQgYFdRX0ZSRUVaQUJMRWAgdG8gdGhlIGBkb190eGAgZnVuY3Rpb25zLgoKQWxsIGNoYW5nZXMgYXJlICpzdHJpY3RseSogd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd3dhbi90N3h4L2AgZGlyZWN0b3J5LiBUaGF0IHNlYWxzIGl0OiBhbGwgbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIHRoZSBNZWRpYVRlayBUN3h4IFBDSWUgNUcgV1dBTiBtb2RlbSBkcml2ZXIuIEFuZCB0aGF0IG1vZGVtICpuZWVkcyogcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gUUVNVSBhbmQgR0NFLCBpbiB0aGVpciBzdGFuZGFyZCBjb25maWd1cmF0aW9ucywgYXJlIG5vdCBnb2luZyB0byBzaW11bGF0ZSB0aGF0IHNwZWNpZmljIE1lZGlhVGVrIGhhcmR3YXJlLgoKU28sIHRoaXMgaGl0cyB0aGUgbWFyay4gSXQmIzM5O3MgYSBjbGVhciBjYXNlIG9mICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiYjMzQ7IFRoaXMgaXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgdGhhdCBjYW4mIzM5O3QgYmUgcmVwcm9kdWNlZCBpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuCgpMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBndWlkYW5jZSBwcm9wZXJseToKCiogICBgV29ydGhGdXp6aW5nYDogZmFsc2UgLSBBYnNvbHV0ZWx5LgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBcWyBdIC0gTm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFncyBuZWVkZWQuCiogICBgRm9jdXNTeW1ib2xzYDogXFsgXSAtIE5vIHNwZWNpZmljIHN5bWJvbHMgdG8gaWRlbnRpZnkuCiogICBgUmVhc29uaW5nYDogSGVyZSYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gYmUgY29uY2lzZS4gSSBtdXN0IHNheSB0aGUgY29kZSBjaGFuZ2VzIGFyZSBwYXJ0IG9mIHRoZSBNZWRpYVRlayBUN3h4IFBDSWUgV1dBTiBtb2RlbSBkcml2ZXIgKGBkcml2ZXJzL25ldC93d2FuL3Q3eHgvYCksIGFuZCB0aGlzIG1vZGVtIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgdGh1cyBtYWtpbmcgaXQgdW5yZWFjaGFibGUuCgpUaW1lIGZvciB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIE1lZGlhVGVrIFBDSWUgNUcgV1dBTiBtb2RlbSAoVDd4eCkgZHJpdmVyIGluIGRyaXZlcnMvbmV0L3d3YW4vdDd4eC8uIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKE1lZGlhVGVrIFQ3eHggbW9kZW0pIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIE1lZGlhVGVrIFBDSWUgNUcgV1dBTiBtb2RlbSAoVDd4eCkgZHJpdmVyIGluIGRyaXZlcnMvbmV0L3d3YW4vdDd4eC8uIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKE1lZGlhVGVrIFQ3eHggbW9kZW0pIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjA4Ljc5NzcyODExNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjMzODM2MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIE1lZGlhVGVrIFBDSWUgNUcgV1dBTiBtb2RlbSAoVDd4eCkgZHJpdmVyIGluIGRyaXZlcnMvbmV0L3d3YW4vdDd4eC8uIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKE1lZGlhVGVrIFQ3eHggbW9kZW0pIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MTc6MDguNzk3NzMzNzQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzAyNzM3NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwYTFmOTkxZTU1MDYzMTI2ZTMyNmJhOGE4OTU0ZTRiNDcwNDQ1MTM5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTM6MTc6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmMgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfY2xkbWEuY1xcbmluZGV4IGUxMGNiNGY5MTA0ZTMuLjNkNzcxMjEyNjc2MTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmNcXG4rKysgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfY2xkbWEuY1xcbkBAIC0xMzEzLDcgKzEzMTMsNyBAQCBpbnQgdDd4eF9jbGRtYV9pbml0KHN0cnVjdCBjbGRtYV9jdHJsICptZF9jdHJsKVxcbiBcXHRcXHRtZF9jZF9xdWV1ZV9zdHJ1Y3RfaW5pdChcXHUwMDI2bWRfY3RybC1cXHUwMDNldHhxW2ldLCBtZF9jdHJsLCBNVEtfVFgsIGkpO1xcbiBcXHRcXHRtZF9jdHJsLVxcdTAwM2V0eHFbaV0ud29ya2VyID1cXG4gXFx0XFx0XFx0YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXFxcIm1kX2hpZiVkX3R4JWRfd29ya2VyXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0V1FfTUVNX1JFQ0xBSU0gfCAoaSA/IDAgOiBXUV9ISUdIUFJJKSxcXG4rXFx0XFx0XFx0XFx0XFx0V1FfTUVNX1JFQ0xBSU0gfCBXUV9GUkVFWkFCTEUgfCAoaSA/IDAgOiBXUV9ISUdIUFJJKSxcXG4gXFx0XFx0XFx0XFx0XFx0bWRfY3RybC1cXHUwMDNlaGlmX2lkLCBpKTtcXG4gXFx0XFx0aWYgKCFtZF9jdHJsLVxcdTAwM2V0eHFbaV0ud29ya2VyKVxcbiBcXHRcXHRcXHRnb3RvIGVycl93b3JrcXVldWU7XFxuQEAgLTEzMjcsNyArMTMyNyw3IEBAIGludCB0N3h4X2NsZG1hX2luaXQoc3RydWN0IGNsZG1hX2N0cmwgKm1kX2N0cmwpXFxuIFxcbiBcXHRcXHRtZF9jdHJsLVxcdTAwM2VyeHFbaV0ud29ya2VyID1cXG4gXFx0XFx0XFx0YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXFxcIm1kX2hpZiVkX3J4JWRfd29ya2VyXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0V1FfTUVNX1JFQ0xBSU0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFdRX01FTV9SRUNMQUlNIHwgV1FfRlJFRVpBQkxFLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRtZF9jdHJsLVxcdTAwM2VoaWZfaWQsIGkpO1xcbiBcXHRcXHRpZiAoIW1kX2N0cmwtXFx1MDAzZXJ4cVtpXS53b3JrZXIpXFxuIFxcdFxcdFxcdGdvdG8gZXJyX3dvcmtxdWV1ZTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jXFxuaW5kZXggNWFmOTBjYTZlMDYzMS4uMGZlMmRkMTM2M2E0YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3J4LmNcXG5AQCAtMTA4OCw3ICsxMDg4LDcgQEAgc3RhdGljIHZvaWQgdDd4eF9kcG1haWZfYmF0X3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIGludCB0N3h4X2RwbWFpZl9iYXRfcmVsX3dxX2FsbG9jKHN0cnVjdCBkcG1haWZfY3RybCAqZHBtYWlmX2N0cmwpXFxuIHtcXG4gXFx0ZHBtYWlmX2N0cmwtXFx1MDAzZWJhdF9yZWxlYXNlX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJkcG1haWZfYmF0X3JlbGVhc2Vfd29ya19xdWV1ZVxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBXUV9NRU1fUkVDTEFJTSB8IFdRX1BFUkNQVSB8IFdRX0ZSRUVaQUJMRSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgMSk7XFxuIFxcdGlmICghZHBtYWlmX2N0cmwtXFx1MDAzZWJhdF9yZWxlYXNlX3dxKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jXFxuaW5kZXggMjM2ZDYzMmNmNTkxYi4uY2NlNzFjODI3ZTdiMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3R4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3R4LmNcXG5AQCAtMjIsNiArMjIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWRpcmVjdGlvbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vyci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnJlZXplci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZ2ZwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aHJlYWQuaFxcdTAwM2VcXG5AQCAtNDIxLDYgKzQyMiwxMiBAQCBzdGF0aWMgdm9pZCB0N3h4X2RvX3R4X2h3X3B1c2goc3RydWN0IGRwbWFpZl9jdHJsICpkcG1haWZfY3RybClcXG4gXFxuIFxcdFxcdGRyYl9zZW5kX2NudCA9IHQ3eHhfdHhxX2J1cnN0X3NlbmRfc2tiKHR4cSk7XFxuIFxcdFxcdGlmIChkcmJfc2VuZF9jbnQgXFx1MDAzYz0gMCkge1xcbitcXHRcXHRcXHQvKiBJZiBhIGZyZWV6ZSBpcyBwZW5kaW5nIHRoZSBUWC1kb25lIHdvcmtlciBtYXkgYWxyZWFkeSBiZVxcbitcXHRcXHRcXHQgKiBmcm96ZW4gYW5kIHVuYWJsZSB0byBkcmFpbiB0aGUgRFJCIHJpbmc7IHJldHVybiB0byB0aGVcXG4rXFx0XFx0XFx0ICogY2FsbGVyIHNvIFBNIHJlc291cmNlcyBhcmUgcmVsZWFzZWQgYmVmb3JlIHRyeV90b19mcmVlemUoKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChmcmVlemluZyhjdXJyZW50KSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHRcXHR1c2xlZXBfcmFuZ2UoMTAsIDIwKTtcXG4gXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC00NDcsMTkgKzQ1NCwyOCBAQCBzdGF0aWMgaW50IHQ3eHhfZHBtYWlmX3R4X2h3X3B1c2hfdGhyZWFkKHZvaWQgKmFyZylcXG4gXFx0c3RydWN0IGRwbWFpZl9jdHJsICpkcG1haWZfY3RybCA9IGFyZztcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdHNldF9mcmVlemFibGUoKTtcXG4rXFxuIFxcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XFxuIFxcdFxcdGlmICh0N3h4X3R4X2xpc3RzX2FyZV9hbGxfZW1wdHkoZHBtYWlmX2N0cmwpIHx8XFxuIFxcdFxcdCAgICBkcG1haWZfY3RybC1cXHUwMDNlc3RhdGUgIT0gRFBNQUlGX1NUQVRFX1BXUk9OKSB7XFxuLVxcdFxcdFxcdGlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZHBtYWlmX2N0cmwtXFx1MDAzZXR4X3dxLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICghdDd4eF90eF9saXN0c19hcmVfYWxsX2VtcHR5KGRwbWFpZl9jdHJsKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRwbWFpZl9jdHJsLVxcdTAwM2VzdGF0ZSA9PSBEUE1BSUZfU1RBVEVfUFdST04pIHx8XFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAga3RocmVhZF9zaG91bGRfc3RvcCgpKSlcXG4rXFx0XFx0XFx0aWYgKHdhaXRfZXZlbnRfZnJlZXphYmxlKGRwbWFpZl9jdHJsLVxcdTAwM2V0eF93cSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICghdDd4eF90eF9saXN0c19hcmVfYWxsX2VtcHR5KGRwbWFpZl9jdHJsKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGRwbWFpZl9jdHJsLVxcdTAwM2VzdGF0ZSA9PSBEUE1BSUZfU1RBVEVfUFdST04pIHx8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdGlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHQvKiBGcmVlemUgaGVyZSwgb3V0c2lkZSB0aGUgcnVudGltZS1QTSBhbmQgTU1JTyBzZWN0aW9uIGJlbG93LCBzb1xcbitcXHRcXHQgKiB0aGUgc3lzdGVtIHN1c3BlbmQgZnJlZXplciBwYXJrcyB0aGlzIHRocmVhZCBiZWZvcmUgdGhlIGRldmljZVxcbitcXHRcXHQgKiBzdXNwZW5kIGNhbGxiYWNrcyB0ZWFyIHRoZSBEUE1BSUYgaGFyZHdhcmUgZG93bi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh0cnlfdG9fZnJlZXplKCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChkcG1haWZfY3RybC1cXHUwMDNlZGV2KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQUNDRVMpXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTYxNyw3ICs2MzMsNyBAQCBpbnQgdDd4eF9kcG1haWZfdHhxX2luaXQoc3RydWN0IGRwbWFpZl90eF9xdWV1ZSAqdHhxKVxcbiBcXHR9XFxuIFxcbiBcXHR0eHEtXFx1MDAzZXdvcmtlciA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJtZF9kcG1haWZfdHglZF93b3JrZXJcXFwiLFxcbi1cXHRcXHRcXHRcXHRXUV9NRU1fUkVDTEFJTSB8ICh0eHEtXFx1MDAzZWluZGV4ID8gMCA6IFdRX0hJR0hQUkkpLFxcbitcXHRcXHRcXHRcXHRXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSB8ICh0eHEtXFx1MDAzZWluZGV4ID8gMCA6IFdRX0hJR0hQUkkpLFxcbiBcXHRcXHRcXHRcXHR0eHEtXFx1MDAzZWluZGV4KTtcXG4gXFx0aWYgKCF0eHEtXFx1MDAzZXdvcmtlcilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjA5LjMyODc1MDk4NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk3MDI3OTk1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBNZWRpYVRlayBQQ0llIDVHIFdXQU4gbW9kZW0gKFQ3eHgpIGRyaXZlciBpbiBkcml2ZXJzL25ldC93d2FuL3Q3eHgvLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChNZWRpYVRlayBUN3h4IG1vZGVtKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGExZjk5MWU1NTA2MzEyNmUzMjZiYThhODk1NGU0YjQ3MDQ0NTEzOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTM6MTc6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfY2xkbWEuYyBiL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9jbGRtYS5jXG5pbmRleCBlMTBjYjRmOTEwNGUzLi4zZDc3MTIxMjY3NjE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmNcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9jbGRtYS5jXG5AQCAtMTMxMyw3ICsxMzEzLDcgQEAgaW50IHQ3eHhfY2xkbWFfaW5pdChzdHJ1Y3QgY2xkbWFfY3RybCAqbWRfY3RybClcbiBcdFx0bWRfY2RfcXVldWVfc3RydWN0X2luaXQoXHUwMDI2bWRfY3RybC1cdTAwM2V0eHFbaV0sIG1kX2N0cmwsIE1US19UWCwgaSk7XG4gXHRcdG1kX2N0cmwtXHUwMDNldHhxW2ldLndvcmtlciA9XG4gXHRcdFx0YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCJtZF9oaWYlZF90eCVkX3dvcmtlclwiLFxuLVx0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IChpID8gMCA6IFdRX0hJR0hQUkkpLFxuK1x0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSB8IChpID8gMCA6IFdRX0hJR0hQUkkpLFxuIFx0XHRcdFx0XHRtZF9jdHJsLVx1MDAzZWhpZl9pZCwgaSk7XG4gXHRcdGlmICghbWRfY3RybC1cdTAwM2V0eHFbaV0ud29ya2VyKVxuIFx0XHRcdGdvdG8gZXJyX3dvcmtxdWV1ZTtcbkBAIC0xMzI3LDcgKzEzMjcsNyBAQCBpbnQgdDd4eF9jbGRtYV9pbml0KHN0cnVjdCBjbGRtYV9jdHJsICptZF9jdHJsKVxuIFxuIFx0XHRtZF9jdHJsLVx1MDAzZXJ4cVtpXS53b3JrZXIgPVxuIFx0XHRcdGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFwibWRfaGlmJWRfcnglZF93b3JrZXJcIixcbi1cdFx0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSxcbitcdFx0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSxcbiBcdFx0XHRcdFx0XHRtZF9jdHJsLVx1MDAzZWhpZl9pZCwgaSk7XG4gXHRcdGlmICghbWRfY3RybC1cdTAwM2VyeHFbaV0ud29ya2VyKVxuIFx0XHRcdGdvdG8gZXJyX3dvcmtxdWV1ZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3J4LmMgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3J4LmNcbmluZGV4IDVhZjkwY2E2ZTA2MzEuLjBmZTJkZDEzNjNhNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9kcG1haWZfcnguY1xuQEAgLTEwODgsNyArMTA4OCw3IEBAIHN0YXRpYyB2b2lkIHQ3eHhfZHBtYWlmX2JhdF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIGludCB0N3h4X2RwbWFpZl9iYXRfcmVsX3dxX2FsbG9jKHN0cnVjdCBkcG1haWZfY3RybCAqZHBtYWlmX2N0cmwpXG4ge1xuIFx0ZHBtYWlmX2N0cmwtXHUwMDNlYmF0X3JlbGVhc2Vfd3EgPSBhbGxvY193b3JrcXVldWUoXCJkcG1haWZfYmF0X3JlbGVhc2Vfd29ya19xdWV1ZVwiLFxuLVx0XHRcdFx0XHRcdCAgICAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVLFxuK1x0XHRcdFx0XHRcdCAgICAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVIHwgV1FfRlJFRVpBQkxFLFxuIFx0XHRcdFx0XHRcdCAgICAgIDEpO1xuIFx0aWYgKCFkcG1haWZfY3RybC1cdTAwM2ViYXRfcmVsZWFzZV93cSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jXG5pbmRleCAyMzZkNjMyY2Y1OTFiLi5jY2U3MWM4MjdlN2IyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jXG4rKysgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3R4LmNcbkBAIC0yMiw2ICsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWRpcmVjdGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnJlZXplci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuQEAgLTQyMSw2ICs0MjIsMTIgQEAgc3RhdGljIHZvaWQgdDd4eF9kb190eF9od19wdXNoKHN0cnVjdCBkcG1haWZfY3RybCAqZHBtYWlmX2N0cmwpXG4gXG4gXHRcdGRyYl9zZW5kX2NudCA9IHQ3eHhfdHhxX2J1cnN0X3NlbmRfc2tiKHR4cSk7XG4gXHRcdGlmIChkcmJfc2VuZF9jbnQgXHUwMDNjPSAwKSB7XG4rXHRcdFx0LyogSWYgYSBmcmVlemUgaXMgcGVuZGluZyB0aGUgVFgtZG9uZSB3b3JrZXIgbWF5IGFscmVhZHkgYmVcbitcdFx0XHQgKiBmcm96ZW4gYW5kIHVuYWJsZSB0byBkcmFpbiB0aGUgRFJCIHJpbmc7IHJldHVybiB0byB0aGVcbitcdFx0XHQgKiBjYWxsZXIgc28gUE0gcmVzb3VyY2VzIGFyZSByZWxlYXNlZCBiZWZvcmUgdHJ5X3RvX2ZyZWV6ZSgpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChmcmVlemluZyhjdXJyZW50KSlcbitcdFx0XHRcdHJldHVybjtcbiBcdFx0XHR1c2xlZXBfcmFuZ2UoMTAsIDIwKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0XHRjb250aW51ZTtcbkBAIC00NDcsMTkgKzQ1NCwyOCBAQCBzdGF0aWMgaW50IHQ3eHhfZHBtYWlmX3R4X2h3X3B1c2hfdGhyZWFkKHZvaWQgKmFyZylcbiBcdHN0cnVjdCBkcG1haWZfY3RybCAqZHBtYWlmX2N0cmwgPSBhcmc7XG4gXHRpbnQgcmV0O1xuIFxuK1x0c2V0X2ZyZWV6YWJsZSgpO1xuK1xuIFx0d2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHtcbiBcdFx0aWYgKHQ3eHhfdHhfbGlzdHNfYXJlX2FsbF9lbXB0eShkcG1haWZfY3RybCkgfHxcbiBcdFx0ICAgIGRwbWFpZl9jdHJsLVx1MDAzZXN0YXRlICE9IERQTUFJRl9TVEFURV9QV1JPTikge1xuLVx0XHRcdGlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZHBtYWlmX2N0cmwtXHUwMDNldHhfd3EsXG4tXHRcdFx0XHRcdFx0ICAgICAoIXQ3eHhfdHhfbGlzdHNfYXJlX2FsbF9lbXB0eShkcG1haWZfY3RybCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdFx0ICAgICBkcG1haWZfY3RybC1cdTAwM2VzdGF0ZSA9PSBEUE1BSUZfU1RBVEVfUFdST04pIHx8XG4tXHRcdFx0XHRcdFx0ICAgICBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpKVxuK1x0XHRcdGlmICh3YWl0X2V2ZW50X2ZyZWV6YWJsZShkcG1haWZfY3RybC1cdTAwM2V0eF93cSxcbitcdFx0XHRcdFx0XHQgKCF0N3h4X3R4X2xpc3RzX2FyZV9hbGxfZW1wdHkoZHBtYWlmX2N0cmwpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0XHRcdCAgZHBtYWlmX2N0cmwtXHUwMDNlc3RhdGUgPT0gRFBNQUlGX1NUQVRFX1BXUk9OKSB8fFxuK1x0XHRcdFx0XHRcdCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0aWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4rXHRcdC8qIEZyZWV6ZSBoZXJlLCBvdXRzaWRlIHRoZSBydW50aW1lLVBNIGFuZCBNTUlPIHNlY3Rpb24gYmVsb3csIHNvXG4rXHRcdCAqIHRoZSBzeXN0ZW0gc3VzcGVuZCBmcmVlemVyIHBhcmtzIHRoaXMgdGhyZWFkIGJlZm9yZSB0aGUgZGV2aWNlXG4rXHRcdCAqIHN1c3BlbmQgY2FsbGJhY2tzIHRlYXIgdGhlIERQTUFJRiBoYXJkd2FyZSBkb3duLlxuK1x0XHQgKi9cbitcdFx0aWYgKHRyeV90b19mcmVlemUoKSlcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChkcG1haWZfY3RybC1cdTAwM2VkZXYpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBQ0NFUylcbiBcdFx0XHRyZXR1cm4gcmV0O1xuQEAgLTYxNyw3ICs2MzMsNyBAQCBpbnQgdDd4eF9kcG1haWZfdHhxX2luaXQoc3RydWN0IGRwbWFpZl90eF9xdWV1ZSAqdHhxKVxuIFx0fVxuIFxuIFx0dHhxLVx1MDAzZXdvcmtlciA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFwibWRfZHBtYWlmX3R4JWRfd29ya2VyXCIsXG4tXHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8ICh0eHEtXHUwMDNlaW5kZXggPyAwIDogV1FfSElHSFBSSSksXG4rXHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSB8ICh0eHEtXHUwMDNlaW5kZXggPyAwIDogV1FfSElHSFBSSSksXG4gXHRcdFx0XHR0eHEtXHUwMDNlaW5kZXgpO1xuIFx0aWYgKCF0eHEtXHUwMDNld29ya2VyKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjA5LjMyODc1MjI0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MzE1NDU1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpczpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEZ1enppbmcgQ2FuZGlkYXRlIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBzeXprYWxsZXI6IHRoZSBgZHJpdmVycy9uZXQvd3dhbi90N3h4L2AgZHJpdmVyLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBldmVuIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGRyaXZlciBhY3R1YWxseSBkb2VzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFRoYXQncyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLlxuXG5UaGUgYmVzdCB3YXkgdG8gZmlndXJlIG91dCB3aGF0IGl0IGlzLCBpcyB0byBsb29rIGF0IHRoZSBjb2RlLCBvYnZpb3VzbHkuIEknbGwgbmVlZCB0byBpbW1lZGlhdGVseSBmaWd1cmUgb3V0IHdoYXQga2luZCBvZiBXV0FOIGl0IGludGVyZmFjZXMgd2l0aC4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgZnVuY3Rpb25hbGl0eSBleHBvc2VkIGlzIGxpa2VseSB0byBiZSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS5cblxuSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgb2J2aW91cyBwbGFjZXM6IGVpdGhlciBydW5uaW5nIGBncmVwcGVyYCBvciBkaWdnaW5nIGludG8gdGhlIEtjb25maWcgZmlsZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd3dhbi90N3h4L2AgZGlyZWN0b3J5IGl0c2VsZiwgYW5kIHBvc3NpYmx5IGV2ZW4gdGhlIHBhcmVudCBgZHJpdmVycy9uZXQvd3dhbi9gIGRpcmVjdG9yeS4gS2NvbmZpZyBmaWxlcyBvZnRlbiBjb250YWluIHVzZWZ1bCBkZXNjcmlwdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0aGF0J2xsIGhlbHAgbWUgZ3Jhc3AgdGhlIGRyaXZlcidzIHB1cnBvc2UgYW5kIHNjb3BlIHF1aWNrbHkuIEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhpcyBkcml2ZXIgYmVmb3JlIEkgY2FuIGRldGVybWluZSBpZiBpdCdzIGEgZ29vZCBmdXp6aW5nIGNhbmRpZGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUxMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MTc6MTMuOTYwMzAwMzgyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTcyNTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1US19UN1hYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3d3YW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTk2PWNvbmZpZyBJT1NNXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTA4LVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxMDk6Y29uZmlnIE1US19UN1hYXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTExMC1cXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgUENJZSA1RyBXV0FOIG1vZGVtIFQ3eHggZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZT0xNT1vYmotJChDT05GSUdfSU9TTSkgKz0gaW9zbS9cXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19NVEtfVDdYWCkgKz0gdDd4eC9cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC9NYWtlZmlsZS0yLVxcbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC9NYWtlZmlsZTozOm9iai0ke0NPTkZJR19NVEtfVDdYWH0gOj0gbXRrX3Q3eHgub1xcbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC9NYWtlZmlsZS00LW10a190N3h4LXk6PVxcdHQ3eHhfcGNpLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzoxNzoxNC4wMTE4NzkwNjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQwMjg5MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXV0FOIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBzb21ldGhpbmcgcmVsYXRlZCB0byBXV0FOIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBzZXR0aW5ncyB1c3VhbGx5IHJlc2lkZS4gSSdtIHNwZWNpZmljYWxseSB0aGlua2luZyB0aGF0IGFyb3VuZCBsaW5lIDEwOSBtaWdodCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgZ2VuZXJhbCBhcmVhIG9mdGVuIGNvdmVycyBmZWF0dXJlIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhhdCBjb3VsZCBiZSByZWxldmFudCB0byB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nLiBMZXQgbWUgcHVsbCB0aGF0IGZpbGUgdXAgYW5kIGhhdmUgYSBsb29rLi4uIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBmYW1pbGlhciBgI2lmZGVmYCBjb25zdHJ1Y3RzIG9yIG1heWJlIHNvbWUgbW9yZSBjb21wbGV4IGBzZWxlY3RgIHN0YXRlbWVudHMgaW5mbHVlbmNpbmcgaG93IFdXQU4gZnVuY3Rpb25hbGl0eSBpcyBidWlsdC4gSSdtIGhvcGluZyBJIGNhbiBxdWlja2x5IHBpbnBvaW50IHRoZSBvcHRpb24gSSdtIGxvb2tpbmcgZm9yIG9yIGF0IGxlYXN0IGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgYXJlYSBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEzNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjE2LjI1MjE3MDczNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0c2VsZWN0IFJFTEFZIGlmIFdXQU5fREVCVUdGU1xcbiAxMDE6XFx0XFx0aGVscFxcbiAxMDI6XFx0XFx0ICBUaGlzIGRyaXZlciBlbmFibGVzIEludGVsIE0uMiBXV0FOIERldmljZSBjb21tdW5pY2F0aW9uLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHQgIElmIHlvdSBoYXZlIG9uZSBvZiB0aG9zZSBJbnRlbCBNLjIgV1dBTiBNb2R1bGVzIGFuZCB3aXNoIHRvIHVzZSBpdCBpblxcbiAxMDU6XFx0XFx0ICBMaW51eCBzYXkgWS9NIGhlcmUuXFxuIDEwNjpcXHRcXG4gMTA3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTA4OlxcdFxcbiAxMDk6XFx0Y29uZmlnIE1US19UN1hYXFxuIDExMDpcXHRcXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgUENJZSA1RyBXV0FOIG1vZGVtIFQ3eHggZGV2aWNlXFxcIlxcbiAxMTE6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gMTEyOlxcdFxcdHNlbGVjdCBSRUxBWSBpZiBXV0FOX0RFQlVHRlNcXG4gMTEzOlxcdFxcdGhlbHBcXG4gMTE0OlxcdFxcdCAgRW5hYmxlcyBNZWRpYVRlayBQQ0llIGJhc2VkIDVHIFdXQU4gbW9kZW0gKFQ3eHggc2VyaWVzKSBkZXZpY2UuXFxuIDExNTpcXHRcXHQgIEFkYXB0cyBXV0FOIGZyYW1ld29yayBhbmQgcHJvdmlkZXMgbmV0d29yayBpbnRlcmZhY2UgbGlrZSB3d2FuMFxcbiAxMTY6XFx0XFx0ICBhbmQgdHR5IGludGVyZmFjZXMgbGlrZSB3d2FuMGF0MCAoQVQgcHJvdG9jb2wpLCB3d2FuMG1iaW0wXFxuIDExNzpcXHRcXHQgIChNQklNIHByb3RvY29sKSwgZXRjLlxcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbiAxMjA6XFx0XFx0ICBjYWxsZWQgbXRrX3Q3eHguXFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTIzOlxcdFxcbiAxMjQ6XFx0ZW5kaWYgIyBXV0FOXFxuIDEyNTpcXHRcXG4gMTI2OlxcdGVuZG1lbnVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MTc6MTYuMjUyMjMzOTA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzEzMDY3MjQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVDdYWCBIYXJkd2FyZSoqXG5cbkFscmlnaHQsIHNvIEkndmUgZ290IHRoaXMgYE1US19UN1hYYCB0aGluZyB0byBsb29rIGF0LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCAqaXMqLiBPa2F5LCBpdCdzIGEgXCJNZWRpYVRlayBQQ0llIDVHIFdXQU4gbW9kZW0gVDd4eCBkZXZpY2UuXCIgUmlnaHQsIHNvIHRoYXQgc3VnZ2VzdHMgYSBwaHlzaWNhbCBQQ0llIGNhcmQgb3IgYSBtb2RlbSBpbnRlZ3JhdGVkIHdpdGggUENJZS4gTm93LCB0aGF0J3MgY3J1Y2lhbCDigJMgaXQgaW1wbGllcyBhIGRpcmVjdCBoYXJkd2FyZSBpbnRlcmZhY2UuXG5cblRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc29mdHdhcmUgc2lkZSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgYHQ3eHhfcGNpLmNgLiBUaGUgZHJpdmVyJ3MgYmluZGluZyBsb2dpYyB3aXRoaW4gdGhlIGB0N3h4X3BjaS5jYCBmaWxlIGlzIHdoZXJlIEknbGwgc2VlIGhvdyB0aGlzIGRldmljZSBpbnRlcmZhY2VzIHdpdGggdGhlIHN5c3RlbS4gVGhhdCBjb2RlIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgZGV2aWNlIElEcywgdmVuZG9yIElEcywgYW5kIG90aGVyIGNyaXRpY2FsIFBDSSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiBGcm9tIHRoZXJlLCBJJ2xsIHN0YXJ0IHRvIGJ1aWxkIGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyByb2xlIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3ODIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjE5LjM4MjkwODYyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ2NzM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vdDd4eFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuYz05NDk9TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHQ3eHhfcGNpX3RhYmxlKTtcXG5kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuYy05NTAtXFxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmM6OTUxOnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0N3h4X3BjaV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmMtOTUyLVxcdC5uYW1lID0gRFJJVkVSX05BTUUsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuYy05NTktXFxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmM6OTYwOm1vZHVsZV9wY2lfZHJpdmVyKHQ3eHhfcGNpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmMtOTYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzoxNzoxOS40MzIzODE0MTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI3MTEwODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgVDd4eCBQQ0kgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIFQ3eHggV1dBTiBkZXZpY2UgaXMgaGFuZGxlZCwgc28gbGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBpdHMgUENJIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGRlbHZlIGludG8gdGhlIGB0N3h4X3BjaV90YWJsZWAgc3RydWN0dXJlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaWRlbnRpZmllcyBhbmQgY29uZmlndXJlcyB0aGUgaGFyZHdhcmUuIFRoZSBmaWxlIEknbSBpbnRlcmVzdGVkIGluIGlzIGBkcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuY2AuIFRoZSB0YWJsZSBkZWZpbml0aW9uIGFuZCBkZXZpY2UgbWF0Y2hpbmcgbG9naWMgYXJlIGxpa2VseSBob3VzZWQgd2l0aGluIHRoYXQgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIHRoaXMgdGFibGUgd2lsbCBvZmZlciBjbHVlcyBhYm91dCBzdXBwb3J0ZWQgZGV2aWNlcywgYXNzb2NpYXRlZCBQQ0kgSURzLCBhbmQgZHJpdmVyIGJpbmRpbmcuIEl0IGlzIHRoZSBjb3JlIG9mIGhvdyB0aGUgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIHJlY29nbml6ZSBhbmQgd29yayB3aXRoIGRpZmZlcmVudCBpdGVyYXRpb25zIG9mIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM0NCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjIxLjM1OTQ5NTg3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTM1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTM1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA5MzY6XFx0XFxuIDkzNzpcXHRcXHRcXHRmcmVlX2lycShwY2lfaXJxX3ZlY3RvcihwZGV2LCBpKSwgdDd4eF9kZXYtXFx1MDAzZWNhbGxiYWNrX3BhcmFtW2ldKTtcXG4gOTM4OlxcdFxcdH1cXG4gOTM5OlxcdFxcbiA5NDA6XFx0XFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnModDd4eF9kZXYtXFx1MDAzZXBkZXYpO1xcbiA5NDE6XFx0fVxcbiA5NDI6XFx0XFxuIDk0MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdDd4eF9wY2lfdGFibGVbXSA9IHtcXG4gOTQ0OlxcdFxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01FRElBVEVLLCAweDRkNzUpIH0sXFxuIDk0NTpcXHRcXHR7IFBDSV9ERVZJQ0UoMHgwM2YwLCAweDA5YzgpIH0sIC8vIEhQIERSTVItSDAxXFxuIDk0NjpcXHRcXHR7IFBDSV9ERVZJQ0UoMHgxNGMwLCAweDRkNzUpIH0sIC8vIERlbGwgRFc1OTMzZVxcbiA5NDc6XFx0XFx0eyB9XFxuIDk0ODpcXHR9O1xcbiA5NDk6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHQ3eHhfcGNpX3RhYmxlKTtcXG4gOTUwOlxcdFxcbiA5NTE6XFx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHQ3eHhfcGNpX2RyaXZlciA9IHtcXG4gOTUyOlxcdFxcdC5uYW1lID0gRFJJVkVSX05BTUUsXFxuIDk1MzpcXHRcXHQuaWRfdGFibGUgPSB0N3h4X3BjaV90YWJsZSxcXG4gOTU0OlxcdFxcdC5wcm9iZSA9IHQ3eHhfcGNpX3Byb2JlLFxcbiA5NTU6XFx0XFx0LnJlbW92ZSA9IHQ3eHhfcGNpX3JlbW92ZSxcXG4gOTU2OlxcdFxcdC5kcml2ZXIucG0gPSBcXHUwMDI2dDd4eF9wY2lfcG1fb3BzLFxcbiA5NTc6XFx0XFx0LnNodXRkb3duID0gdDd4eF9wY2lfc2h1dGRvd24sXFxuIDk1ODpcXHR9O1xcbiA5NTk6XFx0XFxuIDk2MDpcXHRtb2R1bGVfcGNpX2RyaXZlcih0N3h4X3BjaV9kcml2ZXIpO1xcbiA5NjE6XFx0XFxuIDk2MjpcXHRNT0RVTEVfQVVUSE9SKFxcXCJNZWRpYVRlayBJbmNcXFwiKTtcXG4gOTYzOlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiTWVkaWFUZWsgUENJZSA1RyBXV0FOIG1vZGVtIFQ3eHggZHJpdmVyXFxcIik7XFxuIDk2NDpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjIxLjM1OTcyMzQ3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjcxNzk4NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyaWFnZSBEZWNpc2lvbjogV29ydGhGdXp6aW5nID0gRmFsc2UqKlxuXG5Pa2F5LCBsZXQncyB3YWxrIHRocm91Z2ggdGhpcy4gVGltZSB0byBtYWtlIGEganVkZ21lbnQgY2FsbCBvbiB3aGV0aGVyIHRoaXMgd2FycmFudHMgZnVydGhlciBmdXp6aW5nLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIHRyaWFnZSBydWxlcyBkaWN0YXRlIHRoYXQgd2UgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgZmFsbCAqc3RyaWN0bHkqIGludG8gYSBzcGVjaWZpYywgbmVnYXRpdmUtY3JpdGVyaWEgY2F0ZWdvcnkuIFNwZWNpZmljYWxseSwgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuXCIgSSBrbm93IHRoaXMgZHJpbGwsIEkndmUgc2VlbiB0aGlzIGJlZm9yZS5cblxuTGV0J3Mgc2VlOiBJcyB0aGUgTWVkaWFUZWsgVDd4eCBXV0FOIG1vZGVtLCB3aXRoIGl0cyBpZGVudGlmaWVkIFBDSSBJRCAoMHg0ZDc1KSwgSFAgRFJNUi1IMDEgYW5kIERlbGwgRFc1OTMzZSB2YXJpYW50cywgYSBjYW5kaWRhdGUgZm9yIHRoaXMgY2F0ZWdvcnk/IEl0J3MgYSB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBjYXJkLCBpc24ndCBpdD8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBUN3h4IG1vZGVtICpuZWVkcyogdGhhdCBwaHlzaWNhbCBQQ0llIGludGVyZmFjZS4gV2UncmUgbm90IHRhbGtpbmcgYWJvdXQgc29tZSBjbGV2ZXIgVVNCIGdhZGdldCBlbXVsYXRpb24gb3IgdmlydGlvIHRyaWNrZXJ5IGhlcmUuIFRoZSBjb2RlIEkgYW0gbG9va2luZyBhdCBwZXJ0YWlucyBzcGVjaWZpY2FsbHkgdG8gdGhlIE1lZGlhVGVrIE1UNjg5MCAvIFQ3eHggUENJZSA1RyBXV0FOIG1vZGVtLiBJdCdzIHRpZWQgdG8gdGhhdCBzcGVjaWZpYyBoYXJkd2FyZS4gU3RhbmRhcmQgUUVNVS9HQ0UsIGFzIEkgdW5kZXJzdGFuZCBpdCwgZG9lcyAqbm90KiBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUuXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGdyYW51bGFyIGFuZCByZXZpZXcgdGhlIGRpZmYuIExldCdzIG1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBhcmUgY29udGFpbmVkOlxuXG4xLiAgYGRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9jbGRtYS5jYDogV29ya2VyIHF1ZXVlcyBub3cgaGF2ZSB0aGUgYFdRX0ZSRUVaQUJMRWAgZmxhZy5cbjIuICBgZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jYDogVGhlIGBiYXRfcmVsZWFzZV93cWAgbm93IGFsc28gdXNlcyBgV1FfRlJFRVpBQkxFYC5cbjMuICBgZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jYDogVGhpcyBjaGFuZ2UgYWRkZWQgZnJlZXplciBoYW5kbGluZyBhbmQgYFdRX0ZSRUVaQUJMRWAgdG8gdGhlIGBkb190eGAgZnVuY3Rpb25zLlxuXG5BbGwgY2hhbmdlcyBhcmUgKnN0cmljdGx5KiB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93d2FuL3Q3eHgvYCBkaXJlY3RvcnkuIFRoYXQgc2VhbHMgaXQ6IGFsbCBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gdGhlIE1lZGlhVGVrIFQ3eHggUENJZSA1RyBXV0FOIG1vZGVtIGRyaXZlci4gQW5kIHRoYXQgbW9kZW0gKm5lZWRzKiBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLiBRRU1VIGFuZCBHQ0UsIGluIHRoZWlyIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zLCBhcmUgbm90IGdvaW5nIHRvIHNpbXVsYXRlIHRoYXQgc3BlY2lmaWMgTWVkaWFUZWsgaGFyZHdhcmUuXG5cblNvLCB0aGlzIGhpdHMgdGhlIG1hcmsuIEl0J3MgYSBjbGVhciBjYXNlIG9mIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLlwiIFRoaXMgaXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgdGhhdCBjYW4ndCBiZSByZXByb2R1Y2VkIGluIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy5cblxuTGV0J3MgbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGd1aWRhbmNlIHByb3Blcmx5OlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlIC0gQWJzb2x1dGVseS5cbiogICBgRW5hYmxlQ29uZmlnc2A6IFxcWyBdIC0gTm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFncyBuZWVkZWQuXG4qICAgYEZvY3VzU3ltYm9sc2A6IFxcWyBdIC0gTm8gc3BlY2lmaWMgc3ltYm9scyB0byBpZGVudGlmeS5cbiogICBgUmVhc29uaW5nYDogSGVyZSdzIHdoZXJlIEkgbmVlZCB0byBiZSBjb25jaXNlLiBJIG11c3Qgc2F5IHRoZSBjb2RlIGNoYW5nZXMgYXJlIHBhcnQgb2YgdGhlIE1lZGlhVGVrIFQ3eHggUENJZSBXV0FOIG1vZGVtIGRyaXZlciAoYGRyaXZlcnMvbmV0L3d3YW4vdDd4eC9gKSwgYW5kIHRoaXMgbW9kZW0gcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aHVzIG1ha2luZyBpdCB1bnJlYWNoYWJsZS5cblxuVGltZSBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTQ2LCJPdXRwdXRUb2tlbnMiOjEwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjI5LjAzMTUyNjE4OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBNZWRpYVRlayBQQ0llIDVHIFdXQU4gbW9kZW0gKFQ3eHgpIGRyaXZlciBpbiBkcml2ZXJzL25ldC93d2FuL3Q3eHgvLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChNZWRpYVRlayBUN3h4IG1vZGVtKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBNZWRpYVRlayBQQ0llIDVHIFdXQU4gbW9kZW0gKFQ3eHgpIGRyaXZlciBpbiBkcml2ZXJzL25ldC93d2FuL3Q3eHgvLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChNZWRpYVRlayBUN3h4IG1vZGVtKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjI5LjAzMTU1MjM4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9rkcl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 12:52:00 +0000 UTC FinishedAt: 2026-09-07 13:17:30 +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+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIE1lZGlhVGVrIFBDSWUgNUcgV1dBTiBtb2RlbSAoVDd4eCkgZHJpdmVyIGluIGRyaXZlcnMvbmV0L3d3YW4vdDd4eC8uIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKE1lZGlhVGVrIFQ3eHggbW9kZW0pIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzoxNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBhMWY5OTFlNTUwNjMxMjZlMzI2YmE4YTg5NTRlNGI0NzA0NDUxMzlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDEzOjE3OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9jbGRtYS5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmNcbmluZGV4IGUxMGNiNGY5MTA0ZTMuLjNkNzcxMjEyNjc2MTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfY2xkbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmNcbkBAIC0xMzEzLDcgJiM0MzsxMzEzLDcgQEAgaW50IHQ3eHhfY2xkbWFfaW5pdChzdHJ1Y3QgY2xkbWFfY3RybCAqbWRfY3RybClcbiBcdFx0bWRfY2RfcXVldWVfc3RydWN0X2luaXQoXHUwMDI2bWRfY3RybC1cdTAwM2V0eHFbaV0sIG1kX2N0cmwsIE1US19UWCwgaSk7XG4gXHRcdG1kX2N0cmwtXHUwMDNldHhxW2ldLndvcmtlciA9XG4gXHRcdFx0YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCYjMzQ7bWRfaGlmJWRfdHglZF93b3JrZXJcJiMzNDssXG4tXHRcdFx0XHRcdFdRX01FTV9SRUNMQUlNIHwgKGkgPyAwIDogV1FfSElHSFBSSSksXG4mIzQzO1x0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSB8IChpID8gMCA6IFdRX0hJR0hQUkkpLFxuIFx0XHRcdFx0XHRtZF9jdHJsLVx1MDAzZWhpZl9pZCwgaSk7XG4gXHRcdGlmICghbWRfY3RybC1cdTAwM2V0eHFbaV0ud29ya2VyKVxuIFx0XHRcdGdvdG8gZXJyX3dvcmtxdWV1ZTtcbkBAIC0xMzI3LDcgJiM0MzsxMzI3LDcgQEAgaW50IHQ3eHhfY2xkbWFfaW5pdChzdHJ1Y3QgY2xkbWFfY3RybCAqbWRfY3RybClcbiBcbiBcdFx0bWRfY3RybC1cdTAwM2VyeHFbaV0ud29ya2VyID1cbiBcdFx0XHRhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcJiMzNDttZF9oaWYlZF9yeCVkX3dvcmtlclwmIzM0Oyxcbi1cdFx0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSxcbiYjNDM7XHRcdFx0XHRcdFx0V1FfTUVNX1JFQ0xBSU0gfCBXUV9GUkVFWkFCTEUsXG4gXHRcdFx0XHRcdFx0bWRfY3RybC1cdTAwM2VoaWZfaWQsIGkpO1xuIFx0XHRpZiAoIW1kX2N0cmwtXHUwMDNlcnhxW2ldLndvcmtlcilcbiBcdFx0XHRnb3RvIGVycl93b3JrcXVldWU7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jXG5pbmRleCA1YWY5MGNhNmUwNjMxLi4wZmUyZGQxMzYzYTRiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3J4LmNcbkBAIC0xMDg4LDcgJiM0MzsxMDg4LDcgQEAgc3RhdGljIHZvaWQgdDd4eF9kcG1haWZfYmF0X3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gaW50IHQ3eHhfZHBtYWlmX2JhdF9yZWxfd3FfYWxsb2Moc3RydWN0IGRwbWFpZl9jdHJsICpkcG1haWZfY3RybClcbiB7XG4gXHRkcG1haWZfY3RybC1cdTAwM2ViYXRfcmVsZWFzZV93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDtkcG1haWZfYmF0X3JlbGVhc2Vfd29ya19xdWV1ZVwmIzM0Oyxcbi1cdFx0XHRcdFx0XHQgICAgICBXUV9NRU1fUkVDTEFJTSB8IFdRX1BFUkNQVSxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUgfCBXUV9GUkVFWkFCTEUsXG4gXHRcdFx0XHRcdFx0ICAgICAgMSk7XG4gXHRpZiAoIWRwbWFpZl9jdHJsLVx1MDAzZWJhdF9yZWxlYXNlX3dxKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3R4LmMgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3R4LmNcbmluZGV4IDIzNmQ2MzJjZjU5MWIuLmNjZTcxYzgyN2U3YjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3R4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9kcG1haWZfdHguY1xuQEAgLTIyLDYgJiM0MzsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWRpcmVjdGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbkBAIC00MjEsNiAmIzQzOzQyMiwxMiBAQCBzdGF0aWMgdm9pZCB0N3h4X2RvX3R4X2h3X3B1c2goc3RydWN0IGRwbWFpZl9jdHJsICpkcG1haWZfY3RybClcbiBcbiBcdFx0ZHJiX3NlbmRfY250ID0gdDd4eF90eHFfYnVyc3Rfc2VuZF9za2IodHhxKTtcbiBcdFx0aWYgKGRyYl9zZW5kX2NudCBcdTAwM2M9IDApIHtcbiYjNDM7XHRcdFx0LyogSWYgYSBmcmVlemUgaXMgcGVuZGluZyB0aGUgVFgtZG9uZSB3b3JrZXIgbWF5IGFscmVhZHkgYmVcbiYjNDM7XHRcdFx0ICogZnJvemVuIGFuZCB1bmFibGUgdG8gZHJhaW4gdGhlIERSQiByaW5nOyByZXR1cm4gdG8gdGhlXG4mIzQzO1x0XHRcdCAqIGNhbGxlciBzbyBQTSByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIGJlZm9yZSB0cnlfdG9fZnJlZXplKCkuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoZnJlZXppbmcoY3VycmVudCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuIFx0XHRcdHVzbGVlcF9yYW5nZSgxMCwgMjApO1xuIFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0XHRcdGNvbnRpbnVlO1xuQEAgLTQ0NywxOSAmIzQzOzQ1NCwyOCBAQCBzdGF0aWMgaW50IHQ3eHhfZHBtYWlmX3R4X2h3X3B1c2hfdGhyZWFkKHZvaWQgKmFyZylcbiBcdHN0cnVjdCBkcG1haWZfY3RybCAqZHBtYWlmX2N0cmwgPSBhcmc7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdHNldF9mcmVlemFibGUoKTtcbiYjNDM7XG4gXHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xuIFx0XHRpZiAodDd4eF90eF9saXN0c19hcmVfYWxsX2VtcHR5KGRwbWFpZl9jdHJsKSB8fFxuIFx0XHQgICAgZHBtYWlmX2N0cmwtXHUwMDNlc3RhdGUgIT0gRFBNQUlGX1NUQVRFX1BXUk9OKSB7XG4tXHRcdFx0aWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkcG1haWZfY3RybC1cdTAwM2V0eF93cSxcbi1cdFx0XHRcdFx0XHQgICAgICghdDd4eF90eF9saXN0c19hcmVfYWxsX2VtcHR5KGRwbWFpZl9jdHJsKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHRcdFx0XHQgICAgIGRwbWFpZl9jdHJsLVx1MDAzZXN0YXRlID09IERQTUFJRl9TVEFURV9QV1JPTikgfHxcbi1cdFx0XHRcdFx0XHQgICAgIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkpXG4mIzQzO1x0XHRcdGlmICh3YWl0X2V2ZW50X2ZyZWV6YWJsZShkcG1haWZfY3RybC1cdTAwM2V0eF93cSxcbiYjNDM7XHRcdFx0XHRcdFx0ICghdDd4eF90eF9saXN0c19hcmVfYWxsX2VtcHR5KGRwbWFpZl9jdHJsKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHRcdFx0ICBkcG1haWZfY3RybC1cdTAwM2VzdGF0ZSA9PSBEUE1BSUZfU1RBVEVfUFdST04pIHx8XG4mIzQzO1x0XHRcdFx0XHRcdCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0aWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHQvKiBGcmVlemUgaGVyZSwgb3V0c2lkZSB0aGUgcnVudGltZS1QTSBhbmQgTU1JTyBzZWN0aW9uIGJlbG93LCBzb1xuJiM0MztcdFx0ICogdGhlIHN5c3RlbSBzdXNwZW5kIGZyZWV6ZXIgcGFya3MgdGhpcyB0aHJlYWQgYmVmb3JlIHRoZSBkZXZpY2VcbiYjNDM7XHRcdCAqIHN1c3BlbmQgY2FsbGJhY2tzIHRlYXIgdGhlIERQTUFJRiBoYXJkd2FyZSBkb3duLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodHJ5X3RvX2ZyZWV6ZSgpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdHJldCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQoZHBtYWlmX2N0cmwtXHUwMDNlZGV2KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUNDRVMpXG4gXHRcdFx0cmV0dXJuIHJldDtcbkBAIC02MTcsNyAmIzQzOzYzMyw3IEBAIGludCB0N3h4X2RwbWFpZl90eHFfaW5pdChzdHJ1Y3QgZHBtYWlmX3R4X3F1ZXVlICp0eHEpXG4gXHR9XG4gXG4gXHR0eHEtXHUwMDNld29ya2VyID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCYjMzQ7bWRfZHBtYWlmX3R4JWRfd29ya2VyXCYjMzQ7LFxuLVx0XHRcdFx0V1FfTUVNX1JFQ0xBSU0gfCAodHhxLVx1MDAzZWluZGV4ID8gMCA6IFdRX0hJR0hQUkkpLFxuJiM0MztcdFx0XHRcdFdRX01FTV9SRUNMQUlNIHwgV1FfRlJFRVpBQkxFIHwgKHR4cS1cdTAwM2VpbmRleCA/IDAgOiBXUV9ISUdIUFJJKSxcbiBcdFx0XHRcdHR4cS1cdTAwM2VpbmRleCk7XG4gXHRpZiAoIXR4cS1cdTAwM2V3b3JrZXIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBNZWRpYVRlayBQQ0llIDVHIFdXQU4gbW9kZW0gKFQ3eHgpIGRyaXZlciBpbiBkcml2ZXJzL25ldC93d2FuL3Q3eHgvLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChNZWRpYVRlayBUN3h4IG1vZGVtKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYTFmOTkxZTU1MDYzMTI2ZTMyNmJhOGE4OTU0ZTRiNDcwNDQ1MTM5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMzoxNzowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9jbGRtYS5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmMKaW5kZXggZTEwY2I0ZjkxMDRlMy4uM2Q3NzEyMTI2NzYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmMKQEAgLTEzMTMsNyAmIzQzOzEzMTMsNyBAQCBpbnQgdDd4eF9jbGRtYV9pbml0KHN0cnVjdCBjbGRtYV9jdHJsICptZF9jdHJsKQogCQltZF9jZF9xdWV1ZV9zdHJ1Y3RfaW5pdCgmYW1wO21kX2N0cmwtJmd0O3R4cVtpXSwgbWRfY3RybCwgTVRLX1RYLCBpKTsKIAkJbWRfY3RybC0mZ3Q7dHhxW2ldLndvcmtlciA9CiAJCQlhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgmIzM0O21kX2hpZiVkX3R4JWRfd29ya2VyJiMzNDssCi0JCQkJCVdRX01FTV9SRUNMQUlNIHwgKGkgPyAwIDogV1FfSElHSFBSSSksCiYjNDM7CQkJCQlXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSB8IChpID8gMCA6IFdRX0hJR0hQUkkpLAogCQkJCQltZF9jdHJsLSZndDtoaWZfaWQsIGkpOwogCQlpZiAoIW1kX2N0cmwtJmd0O3R4cVtpXS53b3JrZXIpCiAJCQlnb3RvIGVycl93b3JrcXVldWU7CkBAIC0xMzI3LDcgJiM0MzsxMzI3LDcgQEAgaW50IHQ3eHhfY2xkbWFfaW5pdChzdHJ1Y3QgY2xkbWFfY3RybCAqbWRfY3RybCkKIAogCQltZF9jdHJsLSZndDtyeHFbaV0ud29ya2VyID0KIAkJCWFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKCYjMzQ7bWRfaGlmJWRfcnglZF93b3JrZXImIzM0OywKLQkJCQkJCVdRX01FTV9SRUNMQUlNLAomIzQzOwkJCQkJCVdRX01FTV9SRUNMQUlNIHwgV1FfRlJFRVpBQkxFLAogCQkJCQkJbWRfY3RybC0mZ3Q7aGlmX2lkLCBpKTsKIAkJaWYgKCFtZF9jdHJsLSZndDtyeHFbaV0ud29ya2VyKQogCQkJZ290byBlcnJfd29ya3F1ZXVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jCmluZGV4IDVhZjkwY2E2ZTA2MzEuLjBmZTJkZDEzNjNhNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9kcG1haWZfcnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3J4LmMKQEAgLTEwODgsNyAmIzQzOzEwODgsNyBAQCBzdGF0aWMgdm9pZCB0N3h4X2RwbWFpZl9iYXRfcmVsZWFzZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIGludCB0N3h4X2RwbWFpZl9iYXRfcmVsX3dxX2FsbG9jKHN0cnVjdCBkcG1haWZfY3RybCAqZHBtYWlmX2N0cmwpCiB7CiAJZHBtYWlmX2N0cmwtJmd0O2JhdF9yZWxlYXNlX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7ZHBtYWlmX2JhdF9yZWxlYXNlX3dvcmtfcXVldWUmIzM0OywKLQkJCQkJCSAgICAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVLAomIzQzOwkJCQkJCSAgICAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVIHwgV1FfRlJFRVpBQkxFLAogCQkJCQkJICAgICAgMSk7CiAJaWYgKCFkcG1haWZfY3RybC0mZ3Q7YmF0X3JlbGVhc2Vfd3EpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jCmluZGV4IDIzNmQ2MzJjZjU5MWIuLmNjZTcxYzgyN2U3YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9kcG1haWZfdHguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3R4LmMKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hLWRpcmVjdGlvbi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1tYXBwaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZyZWV6ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9nZnAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rdGhyZWFkLmgmZ3Q7CkBAIC00MjEsNiAmIzQzOzQyMiwxMiBAQCBzdGF0aWMgdm9pZCB0N3h4X2RvX3R4X2h3X3B1c2goc3RydWN0IGRwbWFpZl9jdHJsICpkcG1haWZfY3RybCkKIAogCQlkcmJfc2VuZF9jbnQgPSB0N3h4X3R4cV9idXJzdF9zZW5kX3NrYih0eHEpOwogCQlpZiAoZHJiX3NlbmRfY250ICZsdDs9IDApIHsKJiM0MzsJCQkvKiBJZiBhIGZyZWV6ZSBpcyBwZW5kaW5nIHRoZSBUWC1kb25lIHdvcmtlciBtYXkgYWxyZWFkeSBiZQomIzQzOwkJCSAqIGZyb3plbiBhbmQgdW5hYmxlIHRvIGRyYWluIHRoZSBEUkIgcmluZzsgcmV0dXJuIHRvIHRoZQomIzQzOwkJCSAqIGNhbGxlciBzbyBQTSByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIGJlZm9yZSB0cnlfdG9fZnJlZXplKCkuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKGZyZWV6aW5nKGN1cnJlbnQpKQomIzQzOwkJCQlyZXR1cm47CiAJCQl1c2xlZXBfcmFuZ2UoMTAsIDIwKTsKIAkJCWNvbmRfcmVzY2hlZCgpOwogCQkJY29udGludWU7CkBAIC00NDcsMTkgJiM0Mzs0NTQsMjggQEAgc3RhdGljIGludCB0N3h4X2RwbWFpZl90eF9od19wdXNoX3RocmVhZCh2b2lkICphcmcpCiAJc3RydWN0IGRwbWFpZl9jdHJsICpkcG1haWZfY3RybCA9IGFyZzsKIAlpbnQgcmV0OwogCiYjNDM7CXNldF9mcmVlemFibGUoKTsKJiM0MzsKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQlpZiAodDd4eF90eF9saXN0c19hcmVfYWxsX2VtcHR5KGRwbWFpZl9jdHJsKSB8fAogCQkgICAgZHBtYWlmX2N0cmwtJmd0O3N0YXRlICE9IERQTUFJRl9TVEFURV9QV1JPTikgewotCQkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkcG1haWZfY3RybC0mZ3Q7dHhfd3EsCi0JCQkJCQkgICAgICghdDd4eF90eF9saXN0c19hcmVfYWxsX2VtcHR5KGRwbWFpZl9jdHJsKSAmYW1wOyZhbXA7Ci0JCQkJCQkgICAgIGRwbWFpZl9jdHJsLSZndDtzdGF0ZSA9PSBEUE1BSUZfU1RBVEVfUFdST04pIHx8Ci0JCQkJCQkgICAgIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkpCiYjNDM7CQkJaWYgKHdhaXRfZXZlbnRfZnJlZXphYmxlKGRwbWFpZl9jdHJsLSZndDt0eF93cSwKJiM0MzsJCQkJCQkgKCF0N3h4X3R4X2xpc3RzX2FyZV9hbGxfZW1wdHkoZHBtYWlmX2N0cmwpICZhbXA7JmFtcDsKJiM0MzsJCQkJCQkgIGRwbWFpZl9jdHJsLSZndDtzdGF0ZSA9PSBEUE1BSUZfU1RBVEVfUFdST04pIHx8CiYjNDM7CQkJCQkJIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkpCiAJCQkJY29udGludWU7CiAKIAkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCiAJCQkJYnJlYWs7CiAJCX0KIAomIzQzOwkJLyogRnJlZXplIGhlcmUsIG91dHNpZGUgdGhlIHJ1bnRpbWUtUE0gYW5kIE1NSU8gc2VjdGlvbiBiZWxvdywgc28KJiM0MzsJCSAqIHRoZSBzeXN0ZW0gc3VzcGVuZCBmcmVlemVyIHBhcmtzIHRoaXMgdGhyZWFkIGJlZm9yZSB0aGUgZGV2aWNlCiYjNDM7CQkgKiBzdXNwZW5kIGNhbGxiYWNrcyB0ZWFyIHRoZSBEUE1BSUYgaGFyZHdhcmUgZG93bi4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHRyeV90b19mcmVlemUoKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJcmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChkcG1haWZfY3RybC0mZ3Q7ZGV2KTsKIAkJaWYgKHJldCAmbHQ7IDAgJmFtcDsmYW1wOyByZXQgIT0gLUVBQ0NFUykKIAkJCXJldHVybiByZXQ7CkBAIC02MTcsNyAmIzQzOzYzMyw3IEBAIGludCB0N3h4X2RwbWFpZl90eHFfaW5pdChzdHJ1Y3QgZHBtYWlmX3R4X3F1ZXVlICp0eHEpCiAJfQogCiAJdHhxLSZndDt3b3JrZXIgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSgmIzM0O21kX2RwbWFpZl90eCVkX3dvcmtlciYjMzQ7LAotCQkJCVdRX01FTV9SRUNMQUlNIHwgKHR4cS0mZ3Q7aW5kZXggPyAwIDogV1FfSElHSFBSSSksCiYjNDM7CQkJCVdRX01FTV9SRUNMQUlNIHwgV1FfRlJFRVpBQkxFIHwgKHR4cS0mZ3Q7aW5kZXggPyAwIDogV1FfSElHSFBSSSksCiAJCQkJdHhxLSZndDtpbmRleCk7CiAJaWYgKCF0eHEtJmd0O3dvcmtlcikKIAkJcmV0dXJuIC1FTk9NRU07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpczoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBGdXp6aW5nIENhbmRpZGF0ZSBFdmFsdWF0aW9uKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBnb3QgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBzeXprYWxsZXI6IHRoZSBgZHJpdmVycy9uZXQvd3dhbi90N3h4L2AgZHJpdmVyLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZXZlbiB3b3J0aCB0aGUgZWZmb3J0IHRvIGZ1enogaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBkcml2ZXIgYWN0dWFsbHkgZG9lcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLiBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuCgpUaGUgYmVzdCB3YXkgdG8gZmlndXJlIG91dCB3aGF0IGl0IGlzLCBpcyB0byBsb29rIGF0IHRoZSBjb2RlLCBvYnZpb3VzbHkuIEkmIzM5O2xsIG5lZWQgdG8gaW1tZWRpYXRlbHkgZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgV1dBTiBpdCBpbnRlcmZhY2VzIHdpdGguIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIHRoZSBmdW5jdGlvbmFsaXR5IGV4cG9zZWQgaXMgbGlrZWx5IHRvIGJlIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLgoKSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIG9idmlvdXMgcGxhY2VzOiBlaXRoZXIgcnVubmluZyBgZ3JlcHBlcmAgb3IgZGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3d3YW4vdDd4eC9gIGRpcmVjdG9yeSBpdHNlbGYsIGFuZCBwb3NzaWJseSBldmVuIHRoZSBwYXJlbnQgYGRyaXZlcnMvbmV0L3d3YW4vYCBkaXJlY3RvcnkuIEtjb25maWcgZmlsZXMgb2Z0ZW4gY29udGFpbiB1c2VmdWwgZGVzY3JpcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCYjMzk7bGwgaGVscCBtZSBncmFzcCB0aGUgZHJpdmVyJiMzOTtzIHB1cnBvc2UgYW5kIHNjb3BlIHF1aWNrbHkuIEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhpcyBkcml2ZXIgYmVmb3JlIEkgY2FuIGRldGVybWluZSBpZiBpdCYjMzk7cyBhIGdvb2QgZnV6emluZyBjYW5kaWRhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TVRLX1Q3WFgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz05Nj1jb25maWcgSU9TTVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMDgtXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTA5OmNvbmZpZyBNVEtfVDdYWFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTExMC1cdHRyaXN0YXRlIFwmIzM0O01lZGlhVGVrIFBDSWUgNUcgV1dBTiBtb2RlbSBUN3h4IGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vTWFrZWZpbGU9MTU9b2JqLSQoQ09ORklHX0lPU00pICYjNDM7PSBpb3NtL1xuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfTVRLX1Q3WFgpICYjNDM7PSB0N3h4L1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC9NYWtlZmlsZS0yLVxuZHJpdmVycy9uZXQvd3dhbi90N3h4L01ha2VmaWxlOjM6b2JqLSR7Q09ORklHX01US19UN1hYfSA6PSBtdGtfdDd4eC5vXG5kcml2ZXJzL25ldC93d2FuL3Q3eHgvTWFrZWZpbGUtNC1tdGtfdDd4eC15Oj1cdHQ3eHhfcGNpLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTM2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgV1dBTiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyByZWxhdGVkIHRvIFdXQU4gY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byBgZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBzZXR0aW5ncyB1c3VhbGx5IHJlc2lkZS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgdGhhdCBhcm91bmQgbGluZSAxMDkgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IGdlbmVyYWwgYXJlYSBvZnRlbiBjb3ZlcnMgZmVhdHVyZSBlbmFibGVzIG9yIGRpc2FibGVzIHRoYXQgY291bGQgYmUgcmVsZXZhbnQgdG8gd2hhdGV2ZXIgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcuIExldCBtZSBwdWxsIHRoYXQgZmlsZSB1cCBhbmQgaGF2ZSBhIGxvb2suLi4gSSBleHBlY3QgdG8gZmluZCBzb21lIGZhbWlsaWFyIGAjaWZkZWZgIGNvbnN0cnVjdHMgb3IgbWF5YmUgc29tZSBtb3JlIGNvbXBsZXggYHNlbGVjdGAgc3RhdGVtZW50cyBpbmZsdWVuY2luZyBob3cgV1dBTiBmdW5jdGlvbmFsaXR5IGlzIGJ1aWx0LiBJJiMzOTttIGhvcGluZyBJIGNhbiBxdWlja2x5IHBpbnBvaW50IHRoZSBvcHRpb24gSSYjMzk7bSBsb29raW5nIGZvciBvciBhdCBsZWFzdCBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoZSBvdmVyYWxsIGNvbmZpZ3VyYXRpb24gaXMgc3RydWN0dXJlZCB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGFyZWEgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0c2VsZWN0IFJFTEFZIGlmIFdXQU5fREVCVUdGU1xuIDEwMTpcdFx0aGVscFxuIDEwMjpcdFx0ICBUaGlzIGRyaXZlciBlbmFibGVzIEludGVsIE0uMiBXV0FOIERldmljZSBjb21tdW5pY2F0aW9uLlxuIDEwMzpcdFxuIDEwNDpcdFx0ICBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhvc2UgSW50ZWwgTS4yIFdXQU4gTW9kdWxlcyBhbmQgd2lzaCB0byB1c2UgaXQgaW5cbiAxMDU6XHRcdCAgTGludXggc2F5IFkvTSBoZXJlLlxuIDEwNjpcdFxuIDEwNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDEwODpcdFxuIDEwOTpcdGNvbmZpZyBNVEtfVDdYWFxuIDExMDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgUENJZSA1RyBXV0FOIG1vZGVtIFQ3eHggZGV2aWNlXCYjMzQ7XG4gMTExOlx0XHRkZXBlbmRzIG9uIFBDSVxuIDExMjpcdFx0c2VsZWN0IFJFTEFZIGlmIFdXQU5fREVCVUdGU1xuIDExMzpcdFx0aGVscFxuIDExNDpcdFx0ICBFbmFibGVzIE1lZGlhVGVrIFBDSWUgYmFzZWQgNUcgV1dBTiBtb2RlbSAoVDd4eCBzZXJpZXMpIGRldmljZS5cbiAxMTU6XHRcdCAgQWRhcHRzIFdXQU4gZnJhbWV3b3JrIGFuZCBwcm92aWRlcyBuZXR3b3JrIGludGVyZmFjZSBsaWtlIHd3YW4wXG4gMTE2Olx0XHQgIGFuZCB0dHkgaW50ZXJmYWNlcyBsaWtlIHd3YW4wYXQwIChBVCBwcm90b2NvbCksIHd3YW4wbWJpbTBcbiAxMTc6XHRcdCAgKE1CSU0gcHJvdG9jb2wpLCBldGMuXG4gMTE4Olx0XG4gMTE5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuIDEyMDpcdFx0ICBjYWxsZWQgbXRrX3Q3eHguXG4gMTIxOlx0XG4gMTIyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMTIzOlx0XG4gMTI0Olx0ZW5kaWYgIyBXV0FOXG4gMTI1Olx0XG4gMTI2Olx0ZW5kbWVudVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBUN1hYIEhhcmR3YXJlKioKCkFscmlnaHQsIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGBNVEtfVDdYWGAgdGhpbmcgdG8gbG9vayBhdC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgKmlzKi4gT2theSwgaXQmIzM5O3MgYSAmIzM0O01lZGlhVGVrIFBDSWUgNUcgV1dBTiBtb2RlbSBUN3h4IGRldmljZS4mIzM0OyBSaWdodCwgc28gdGhhdCBzdWdnZXN0cyBhIHBoeXNpY2FsIFBDSWUgY2FyZCBvciBhIG1vZGVtIGludGVncmF0ZWQgd2l0aCBQQ0llLiBOb3csIHRoYXQmIzM5O3MgY3J1Y2lhbCDigJMgaXQgaW1wbGllcyBhIGRpcmVjdCBoYXJkd2FyZSBpbnRlcmZhY2UuCgpUbyBnZXQgYSBoYW5kbGUgb24gdGhlIHNvZnR3YXJlIHNpZGUsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBgdDd4eF9wY2kuY2AuIFRoZSBkcml2ZXImIzM5O3MgYmluZGluZyBsb2dpYyB3aXRoaW4gdGhlIGB0N3h4X3BjaS5jYCBmaWxlIGlzIHdoZXJlIEkmIzM5O2xsIHNlZSBob3cgdGhpcyBkZXZpY2UgaW50ZXJmYWNlcyB3aXRoIHRoZSBzeXN0ZW0uIFRoYXQgY29kZSBpcyB3aGVyZSBJJiMzOTtsbCBmaW5kIHRoZSBkZXZpY2UgSURzLCB2ZW5kb3IgSURzLCBhbmQgb3RoZXIgY3JpdGljYWwgUENJIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uIEZyb20gdGhlcmUsIEkmIzM5O2xsIHN0YXJ0IHRvIGJ1aWxkIGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyByb2xlIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL3Q3eHgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmM9OTQ5PU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB0N3h4X3BjaV90YWJsZSk7XG5kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuYy05NTAtXG5kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuYzo5NTE6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHQ3eHhfcGNpX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X3BjaS5jLTk1Mi1cdC5uYW1lID0gRFJJVkVSX05BTUUsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmMtOTU5LVxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmM6OTYwOm1vZHVsZV9wY2lfZHJpdmVyKHQ3eHhfcGNpX2RyaXZlcik7XG5kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuYy05NjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM0NAoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhhbWluaW5nIHRoZSBUN3h4IFBDSSBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIFQ3eHggV1dBTiBkZXZpY2UgaXMgaGFuZGxlZCwgc28gbGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgaXRzIFBDSSBpbml0aWFsaXphdGlvbi4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBkZWx2ZSBpbnRvIHRoZSBgdDd4eF9wY2lfdGFibGVgIHN0cnVjdHVyZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBpZGVudGlmaWVzIGFuZCBjb25maWd1cmVzIHRoZSBoYXJkd2FyZS4gVGhlIGZpbGUgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGlzIGBkcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuY2AuIFRoZSB0YWJsZSBkZWZpbml0aW9uIGFuZCBkZXZpY2UgbWF0Y2hpbmcgbG9naWMgYXJlIGxpa2VseSBob3VzZWQgd2l0aGluIHRoYXQgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIHRoaXMgdGFibGUgd2lsbCBvZmZlciBjbHVlcyBhYm91dCBzdXBwb3J0ZWQgZGV2aWNlcywgYXNzb2NpYXRlZCBQQ0kgSURzLCBhbmQgZHJpdmVyIGJpbmRpbmcuIEl0IGlzIHRoZSBjb3JlIG9mIGhvdyB0aGUgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIHJlY29nbml6ZSBhbmQgd29yayB3aXRoIGRpZmZlcmVudCBpdGVyYXRpb25zIG9mIHRoZSBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDkzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTM1Olx0XHRcdFx0Y29udGludWU7XG4gOTM2Olx0XG4gOTM3Olx0XHRcdGZyZWVfaXJxKHBjaV9pcnFfdmVjdG9yKHBkZXYsIGkpLCB0N3h4X2Rldi1cdTAwM2VjYWxsYmFja19wYXJhbVtpXSk7XG4gOTM4Olx0XHR9XG4gOTM5Olx0XG4gOTQwOlx0XHRwY2lfZnJlZV9pcnFfdmVjdG9ycyh0N3h4X2Rldi1cdTAwM2VwZGV2KTtcbiA5NDE6XHR9XG4gOTQyOlx0XG4gOTQzOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHQ3eHhfcGNpX3RhYmxlW10gPSB7XG4gOTQ0Olx0XHR7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NRURJQVRFSywgMHg0ZDc1KSB9LFxuIDk0NTpcdFx0eyBQQ0lfREVWSUNFKDB4MDNmMCwgMHgwOWM4KSB9LCAvLyBIUCBEUk1SLUgwMVxuIDk0NjpcdFx0eyBQQ0lfREVWSUNFKDB4MTRjMCwgMHg0ZDc1KSB9LCAvLyBEZWxsIERXNTkzM2VcbiA5NDc6XHRcdHsgfVxuIDk0ODpcdH07XG4gOTQ5Olx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHQ3eHhfcGNpX3RhYmxlKTtcbiA5NTA6XHRcbiA5NTE6XHRzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdDd4eF9wY2lfZHJpdmVyID0ge1xuIDk1MjpcdFx0Lm5hbWUgPSBEUklWRVJfTkFNRSxcbiA5NTM6XHRcdC5pZF90YWJsZSA9IHQ3eHhfcGNpX3RhYmxlLFxuIDk1NDpcdFx0LnByb2JlID0gdDd4eF9wY2lfcHJvYmUsXG4gOTU1Olx0XHQucmVtb3ZlID0gdDd4eF9wY2lfcmVtb3ZlLFxuIDk1NjpcdFx0LmRyaXZlci5wbSA9IFx1MDAyNnQ3eHhfcGNpX3BtX29wcyxcbiA5NTc6XHRcdC5zaHV0ZG93biA9IHQ3eHhfcGNpX3NodXRkb3duLFxuIDk1ODpcdH07XG4gOTU5Olx0XG4gOTYwOlx0bW9kdWxlX3BjaV9kcml2ZXIodDd4eF9wY2lfZHJpdmVyKTtcbiA5NjE6XHRcbiA5NjI6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O01lZGlhVGVrIEluY1wmIzM0Oyk7XG4gOTYzOlx0TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01lZGlhVGVrIFBDSWUgNUcgV1dBTiBtb2RlbSBUN3h4IGRyaXZlclwmIzM0Oyk7XG4gOTY0Olx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE0NgoJCQkJCQkJb3V0cHV0OiAxMDMKCQkJCQkJCXRob3VnaHRzOiA3NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVHJpYWdlIERlY2lzaW9uOiBXb3J0aEZ1enppbmcgPSBGYWxzZSoqCgpPa2F5LCBsZXQmIzM5O3Mgd2FsayB0aHJvdWdoIHRoaXMuIFRpbWUgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGwgb24gd2hldGhlciB0aGlzIHdhcnJhbnRzIGZ1cnRoZXIgZnV6emluZy4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuIFRoZSB0cmlhZ2UgcnVsZXMgZGljdGF0ZSB0aGF0IHdlIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY29kZSBtb2RpZmljYXRpb25zIGZhbGwgKnN0cmljdGx5KiBpbnRvIGEgc3BlY2lmaWMsIG5lZ2F0aXZlLWNyaXRlcmlhIGNhdGVnb3J5LiBTcGVjaWZpY2FsbHksICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiYjMzQ7IEkga25vdyB0aGlzIGRyaWxsLCBJJiMzOTt2ZSBzZWVuIHRoaXMgYmVmb3JlLgoKTGV0JiMzOTtzIHNlZTogSXMgdGhlIE1lZGlhVGVrIFQ3eHggV1dBTiBtb2RlbSwgd2l0aCBpdHMgaWRlbnRpZmllZCBQQ0kgSUQgKDB4NGQ3NSksIEhQIERSTVItSDAxIGFuZCBEZWxsIERXNTkzM2UgdmFyaWFudHMsIGEgY2FuZGlkYXRlIGZvciB0aGlzIGNhdGVnb3J5PyBJdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGNhcmQsIGlzbiYjMzk7dCBpdD8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBUN3h4IG1vZGVtICpuZWVkcyogdGhhdCBwaHlzaWNhbCBQQ0llIGludGVyZmFjZS4gV2UmIzM5O3JlIG5vdCB0YWxraW5nIGFib3V0IHNvbWUgY2xldmVyIFVTQiBnYWRnZXQgZW11bGF0aW9uIG9yIHZpcnRpbyB0cmlja2VyeSBoZXJlLiBUaGUgY29kZSBJIGFtIGxvb2tpbmcgYXQgcGVydGFpbnMgc3BlY2lmaWNhbGx5IHRvIHRoZSBNZWRpYVRlayBNVDY4OTAgLyBUN3h4IFBDSWUgNUcgV1dBTiBtb2RlbS4gSXQmIzM5O3MgdGllZCB0byB0aGF0IHNwZWNpZmljIGhhcmR3YXJlLiBTdGFuZGFyZCBRRU1VL0dDRSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBkb2VzICpub3QqIGVtdWxhdGUgdGhpcyBzcGVjaWZpYyBoYXJkd2FyZS4KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGdyYW51bGFyIGFuZCByZXZpZXcgdGhlIGRpZmYuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlIGNoYW5nZXMgYXJlIGNvbnRhaW5lZDoKCjEuICBgZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmNgOiBXb3JrZXIgcXVldWVzIG5vdyBoYXZlIHRoZSBgV1FfRlJFRVpBQkxFYCBmbGFnLgoyLiAgYGRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9kcG1haWZfcnguY2A6IFRoZSBgYmF0X3JlbGVhc2Vfd3FgIG5vdyBhbHNvIHVzZXMgYFdRX0ZSRUVaQUJMRWAuCjMuICBgZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jYDogVGhpcyBjaGFuZ2UgYWRkZWQgZnJlZXplciBoYW5kbGluZyBhbmQgYFdRX0ZSRUVaQUJMRWAgdG8gdGhlIGBkb190eGAgZnVuY3Rpb25zLgoKQWxsIGNoYW5nZXMgYXJlICpzdHJpY3RseSogd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd3dhbi90N3h4L2AgZGlyZWN0b3J5LiBUaGF0IHNlYWxzIGl0OiBhbGwgbW9kaWZpY2F0aW9ucyBhcmUgd2l0aGluIHRoZSBNZWRpYVRlayBUN3h4IFBDSWUgNUcgV1dBTiBtb2RlbSBkcml2ZXIuIEFuZCB0aGF0IG1vZGVtICpuZWVkcyogcGh5c2ljYWwgUENJZSBoYXJkd2FyZS4gUUVNVSBhbmQgR0NFLCBpbiB0aGVpciBzdGFuZGFyZCBjb25maWd1cmF0aW9ucywgYXJlIG5vdCBnb2luZyB0byBzaW11bGF0ZSB0aGF0IHNwZWNpZmljIE1lZGlhVGVrIGhhcmR3YXJlLgoKU28sIHRoaXMgaGl0cyB0aGUgbWFyay4gSXQmIzM5O3MgYSBjbGVhciBjYXNlIG9mICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiYjMzQ7IFRoaXMgaXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgdGhhdCBjYW4mIzM5O3QgYmUgcmVwcm9kdWNlZCBpbiB0aGUgc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuCgpMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoZSBndWlkYW5jZSBwcm9wZXJseToKCiogICBgV29ydGhGdXp6aW5nYDogZmFsc2UgLSBBYnNvbHV0ZWx5LgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBcWyBdIC0gTm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFncyBuZWVkZWQuCiogICBgRm9jdXNTeW1ib2xzYDogXFsgXSAtIE5vIHNwZWNpZmljIHN5bWJvbHMgdG8gaWRlbnRpZnkuCiogICBgUmVhc29uaW5nYDogSGVyZSYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gYmUgY29uY2lzZS4gSSBtdXN0IHNheSB0aGUgY29kZSBjaGFuZ2VzIGFyZSBwYXJ0IG9mIHRoZSBNZWRpYVRlayBUN3h4IFBDSWUgV1dBTiBtb2RlbSBkcml2ZXIgKGBkcml2ZXJzL25ldC93d2FuL3Q3eHgvYCksIGFuZCB0aGlzIG1vZGVtIHJlcXVpcmVzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvR0NFIGVudmlyb25tZW50cywgdGh1cyBtYWtpbmcgaXQgdW5yZWFjaGFibGUuCgpUaW1lIGZvciB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIE1lZGlhVGVrIFBDSWUgNUcgV1dBTiBtb2RlbSAoVDd4eCkgZHJpdmVyIGluIGRyaXZlcnMvbmV0L3d3YW4vdDd4eC8uIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKE1lZGlhVGVrIFQ3eHggbW9kZW0pIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIE1lZGlhVGVrIFBDSWUgNUcgV1dBTiBtb2RlbSAoVDd4eCkgZHJpdmVyIGluIGRyaXZlcnMvbmV0L3d3YW4vdDd4eC8uIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKE1lZGlhVGVrIFQ3eHggbW9kZW0pIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTM6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjA4Ljc5NzcyODExNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMjMzODM2MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIE1lZGlhVGVrIFBDSWUgNUcgV1dBTiBtb2RlbSAoVDd4eCkgZHJpdmVyIGluIGRyaXZlcnMvbmV0L3d3YW4vdDd4eC8uIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKE1lZGlhVGVrIFQ3eHggbW9kZW0pIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgR0NFIGZ1enppbmcgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MTc6MDguNzk3NzMzNzQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzAyNzM3NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwYTFmOTkxZTU1MDYzMTI2ZTMyNmJhOGE4OTU0ZTRiNDcwNDQ1MTM5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTM6MTc6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmMgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfY2xkbWEuY1xcbmluZGV4IGUxMGNiNGY5MTA0ZTMuLjNkNzcxMjEyNjc2MTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmNcXG4rKysgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfY2xkbWEuY1xcbkBAIC0xMzEzLDcgKzEzMTMsNyBAQCBpbnQgdDd4eF9jbGRtYV9pbml0KHN0cnVjdCBjbGRtYV9jdHJsICptZF9jdHJsKVxcbiBcXHRcXHRtZF9jZF9xdWV1ZV9zdHJ1Y3RfaW5pdChcXHUwMDI2bWRfY3RybC1cXHUwMDNldHhxW2ldLCBtZF9jdHJsLCBNVEtfVFgsIGkpO1xcbiBcXHRcXHRtZF9jdHJsLVxcdTAwM2V0eHFbaV0ud29ya2VyID1cXG4gXFx0XFx0XFx0YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXFxcIm1kX2hpZiVkX3R4JWRfd29ya2VyXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0V1FfTUVNX1JFQ0xBSU0gfCAoaSA/IDAgOiBXUV9ISUdIUFJJKSxcXG4rXFx0XFx0XFx0XFx0XFx0V1FfTUVNX1JFQ0xBSU0gfCBXUV9GUkVFWkFCTEUgfCAoaSA/IDAgOiBXUV9ISUdIUFJJKSxcXG4gXFx0XFx0XFx0XFx0XFx0bWRfY3RybC1cXHUwMDNlaGlmX2lkLCBpKTtcXG4gXFx0XFx0aWYgKCFtZF9jdHJsLVxcdTAwM2V0eHFbaV0ud29ya2VyKVxcbiBcXHRcXHRcXHRnb3RvIGVycl93b3JrcXVldWU7XFxuQEAgLTEzMjcsNyArMTMyNyw3IEBAIGludCB0N3h4X2NsZG1hX2luaXQoc3RydWN0IGNsZG1hX2N0cmwgKm1kX2N0cmwpXFxuIFxcbiBcXHRcXHRtZF9jdHJsLVxcdTAwM2VyeHFbaV0ud29ya2VyID1cXG4gXFx0XFx0XFx0YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXFxcIm1kX2hpZiVkX3J4JWRfd29ya2VyXFxcIixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0V1FfTUVNX1JFQ0xBSU0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFdRX01FTV9SRUNMQUlNIHwgV1FfRlJFRVpBQkxFLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRtZF9jdHJsLVxcdTAwM2VoaWZfaWQsIGkpO1xcbiBcXHRcXHRpZiAoIW1kX2N0cmwtXFx1MDAzZXJ4cVtpXS53b3JrZXIpXFxuIFxcdFxcdFxcdGdvdG8gZXJyX3dvcmtxdWV1ZTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jXFxuaW5kZXggNWFmOTBjYTZlMDYzMS4uMGZlMmRkMTM2M2E0YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3J4LmNcXG5AQCAtMTA4OCw3ICsxMDg4LDcgQEAgc3RhdGljIHZvaWQgdDd4eF9kcG1haWZfYmF0X3JlbGVhc2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIGludCB0N3h4X2RwbWFpZl9iYXRfcmVsX3dxX2FsbG9jKHN0cnVjdCBkcG1haWZfY3RybCAqZHBtYWlmX2N0cmwpXFxuIHtcXG4gXFx0ZHBtYWlmX2N0cmwtXFx1MDAzZWJhdF9yZWxlYXNlX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCJkcG1haWZfYmF0X3JlbGVhc2Vfd29ya19xdWV1ZVxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBXUV9NRU1fUkVDTEFJTSB8IFdRX1BFUkNQVSB8IFdRX0ZSRUVaQUJMRSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgMSk7XFxuIFxcdGlmICghZHBtYWlmX2N0cmwtXFx1MDAzZWJhdF9yZWxlYXNlX3dxKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jXFxuaW5kZXggMjM2ZDYzMmNmNTkxYi4uY2NlNzFjODI3ZTdiMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3R4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3R4LmNcXG5AQCAtMjIsNiArMjIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWRpcmVjdGlvbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vyci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnJlZXplci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZ2ZwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aHJlYWQuaFxcdTAwM2VcXG5AQCAtNDIxLDYgKzQyMiwxMiBAQCBzdGF0aWMgdm9pZCB0N3h4X2RvX3R4X2h3X3B1c2goc3RydWN0IGRwbWFpZl9jdHJsICpkcG1haWZfY3RybClcXG4gXFxuIFxcdFxcdGRyYl9zZW5kX2NudCA9IHQ3eHhfdHhxX2J1cnN0X3NlbmRfc2tiKHR4cSk7XFxuIFxcdFxcdGlmIChkcmJfc2VuZF9jbnQgXFx1MDAzYz0gMCkge1xcbitcXHRcXHRcXHQvKiBJZiBhIGZyZWV6ZSBpcyBwZW5kaW5nIHRoZSBUWC1kb25lIHdvcmtlciBtYXkgYWxyZWFkeSBiZVxcbitcXHRcXHRcXHQgKiBmcm96ZW4gYW5kIHVuYWJsZSB0byBkcmFpbiB0aGUgRFJCIHJpbmc7IHJldHVybiB0byB0aGVcXG4rXFx0XFx0XFx0ICogY2FsbGVyIHNvIFBNIHJlc291cmNlcyBhcmUgcmVsZWFzZWQgYmVmb3JlIHRyeV90b19mcmVlemUoKS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGlmIChmcmVlemluZyhjdXJyZW50KSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHRcXHR1c2xlZXBfcmFuZ2UoMTAsIDIwKTtcXG4gXFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC00NDcsMTkgKzQ1NCwyOCBAQCBzdGF0aWMgaW50IHQ3eHhfZHBtYWlmX3R4X2h3X3B1c2hfdGhyZWFkKHZvaWQgKmFyZylcXG4gXFx0c3RydWN0IGRwbWFpZl9jdHJsICpkcG1haWZfY3RybCA9IGFyZztcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdHNldF9mcmVlemFibGUoKTtcXG4rXFxuIFxcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XFxuIFxcdFxcdGlmICh0N3h4X3R4X2xpc3RzX2FyZV9hbGxfZW1wdHkoZHBtYWlmX2N0cmwpIHx8XFxuIFxcdFxcdCAgICBkcG1haWZfY3RybC1cXHUwMDNlc3RhdGUgIT0gRFBNQUlGX1NUQVRFX1BXUk9OKSB7XFxuLVxcdFxcdFxcdGlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZHBtYWlmX2N0cmwtXFx1MDAzZXR4X3dxLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICghdDd4eF90eF9saXN0c19hcmVfYWxsX2VtcHR5KGRwbWFpZl9jdHJsKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRwbWFpZl9jdHJsLVxcdTAwM2VzdGF0ZSA9PSBEUE1BSUZfU1RBVEVfUFdST04pIHx8XFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAga3RocmVhZF9zaG91bGRfc3RvcCgpKSlcXG4rXFx0XFx0XFx0aWYgKHdhaXRfZXZlbnRfZnJlZXphYmxlKGRwbWFpZl9jdHJsLVxcdTAwM2V0eF93cSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICghdDd4eF90eF9saXN0c19hcmVfYWxsX2VtcHR5KGRwbWFpZl9jdHJsKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGRwbWFpZl9jdHJsLVxcdTAwM2VzdGF0ZSA9PSBEUE1BSUZfU1RBVEVfUFdST04pIHx8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdGlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHQvKiBGcmVlemUgaGVyZSwgb3V0c2lkZSB0aGUgcnVudGltZS1QTSBhbmQgTU1JTyBzZWN0aW9uIGJlbG93LCBzb1xcbitcXHRcXHQgKiB0aGUgc3lzdGVtIHN1c3BlbmQgZnJlZXplciBwYXJrcyB0aGlzIHRocmVhZCBiZWZvcmUgdGhlIGRldmljZVxcbitcXHRcXHQgKiBzdXNwZW5kIGNhbGxiYWNrcyB0ZWFyIHRoZSBEUE1BSUYgaGFyZHdhcmUgZG93bi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh0cnlfdG9fZnJlZXplKCkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4gXFx0XFx0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChkcG1haWZfY3RybC1cXHUwMDNlZGV2KTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQUNDRVMpXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTYxNyw3ICs2MzMsNyBAQCBpbnQgdDd4eF9kcG1haWZfdHhxX2luaXQoc3RydWN0IGRwbWFpZl90eF9xdWV1ZSAqdHhxKVxcbiBcXHR9XFxuIFxcbiBcXHR0eHEtXFx1MDAzZXdvcmtlciA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJtZF9kcG1haWZfdHglZF93b3JrZXJcXFwiLFxcbi1cXHRcXHRcXHRcXHRXUV9NRU1fUkVDTEFJTSB8ICh0eHEtXFx1MDAzZWluZGV4ID8gMCA6IFdRX0hJR0hQUkkpLFxcbitcXHRcXHRcXHRcXHRXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSB8ICh0eHEtXFx1MDAzZWluZGV4ID8gMCA6IFdRX0hJR0hQUkkpLFxcbiBcXHRcXHRcXHRcXHR0eHEtXFx1MDAzZWluZGV4KTtcXG4gXFx0aWYgKCF0eHEtXFx1MDAzZXdvcmtlcilcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjA5LjMyODc1MDk4NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTk3MDI3OTk1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBNZWRpYVRlayBQQ0llIDVHIFdXQU4gbW9kZW0gKFQ3eHgpIGRyaXZlciBpbiBkcml2ZXJzL25ldC93d2FuL3Q3eHgvLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChNZWRpYVRlayBUN3h4IG1vZGVtKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGExZjk5MWU1NTA2MzEyNmUzMjZiYThhODk1NGU0YjQ3MDQ0NTEzOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTM6MTc6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfY2xkbWEuYyBiL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9jbGRtYS5jXG5pbmRleCBlMTBjYjRmOTEwNGUzLi4zZDc3MTIxMjY3NjE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2NsZG1hLmNcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9jbGRtYS5jXG5AQCAtMTMxMyw3ICsxMzEzLDcgQEAgaW50IHQ3eHhfY2xkbWFfaW5pdChzdHJ1Y3QgY2xkbWFfY3RybCAqbWRfY3RybClcbiBcdFx0bWRfY2RfcXVldWVfc3RydWN0X2luaXQoXHUwMDI2bWRfY3RybC1cdTAwM2V0eHFbaV0sIG1kX2N0cmwsIE1US19UWCwgaSk7XG4gXHRcdG1kX2N0cmwtXHUwMDNldHhxW2ldLndvcmtlciA9XG4gXHRcdFx0YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCJtZF9oaWYlZF90eCVkX3dvcmtlclwiLFxuLVx0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IChpID8gMCA6IFdRX0hJR0hQUkkpLFxuK1x0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSB8IChpID8gMCA6IFdRX0hJR0hQUkkpLFxuIFx0XHRcdFx0XHRtZF9jdHJsLVx1MDAzZWhpZl9pZCwgaSk7XG4gXHRcdGlmICghbWRfY3RybC1cdTAwM2V0eHFbaV0ud29ya2VyKVxuIFx0XHRcdGdvdG8gZXJyX3dvcmtxdWV1ZTtcbkBAIC0xMzI3LDcgKzEzMjcsNyBAQCBpbnQgdDd4eF9jbGRtYV9pbml0KHN0cnVjdCBjbGRtYV9jdHJsICptZF9jdHJsKVxuIFxuIFx0XHRtZF9jdHJsLVx1MDAzZXJ4cVtpXS53b3JrZXIgPVxuIFx0XHRcdGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFwibWRfaGlmJWRfcnglZF93b3JrZXJcIixcbi1cdFx0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSxcbitcdFx0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSxcbiBcdFx0XHRcdFx0XHRtZF9jdHJsLVx1MDAzZWhpZl9pZCwgaSk7XG4gXHRcdGlmICghbWRfY3RybC1cdTAwM2VyeHFbaV0ud29ya2VyKVxuIFx0XHRcdGdvdG8gZXJyX3dvcmtxdWV1ZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3J4LmMgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3J4LmNcbmluZGV4IDVhZjkwY2E2ZTA2MzEuLjBmZTJkZDEzNjNhNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9kcG1haWZfcnguY1xuQEAgLTEwODgsNyArMTA4OCw3IEBAIHN0YXRpYyB2b2lkIHQ3eHhfZHBtYWlmX2JhdF9yZWxlYXNlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIGludCB0N3h4X2RwbWFpZl9iYXRfcmVsX3dxX2FsbG9jKHN0cnVjdCBkcG1haWZfY3RybCAqZHBtYWlmX2N0cmwpXG4ge1xuIFx0ZHBtYWlmX2N0cmwtXHUwMDNlYmF0X3JlbGVhc2Vfd3EgPSBhbGxvY193b3JrcXVldWUoXCJkcG1haWZfYmF0X3JlbGVhc2Vfd29ya19xdWV1ZVwiLFxuLVx0XHRcdFx0XHRcdCAgICAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVLFxuK1x0XHRcdFx0XHRcdCAgICAgIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVIHwgV1FfRlJFRVpBQkxFLFxuIFx0XHRcdFx0XHRcdCAgICAgIDEpO1xuIFx0aWYgKCFkcG1haWZfY3RybC1cdTAwM2ViYXRfcmVsZWFzZV93cSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jIGIvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jXG5pbmRleCAyMzZkNjMyY2Y1OTFiLi5jY2U3MWM4MjdlN2IyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jXG4rKysgYi9kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9oaWZfZHBtYWlmX3R4LmNcbkBAIC0yMiw2ICsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWRpcmVjdGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnJlZXplci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuQEAgLTQyMSw2ICs0MjIsMTIgQEAgc3RhdGljIHZvaWQgdDd4eF9kb190eF9od19wdXNoKHN0cnVjdCBkcG1haWZfY3RybCAqZHBtYWlmX2N0cmwpXG4gXG4gXHRcdGRyYl9zZW5kX2NudCA9IHQ3eHhfdHhxX2J1cnN0X3NlbmRfc2tiKHR4cSk7XG4gXHRcdGlmIChkcmJfc2VuZF9jbnQgXHUwMDNjPSAwKSB7XG4rXHRcdFx0LyogSWYgYSBmcmVlemUgaXMgcGVuZGluZyB0aGUgVFgtZG9uZSB3b3JrZXIgbWF5IGFscmVhZHkgYmVcbitcdFx0XHQgKiBmcm96ZW4gYW5kIHVuYWJsZSB0byBkcmFpbiB0aGUgRFJCIHJpbmc7IHJldHVybiB0byB0aGVcbitcdFx0XHQgKiBjYWxsZXIgc28gUE0gcmVzb3VyY2VzIGFyZSByZWxlYXNlZCBiZWZvcmUgdHJ5X3RvX2ZyZWV6ZSgpLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChmcmVlemluZyhjdXJyZW50KSlcbitcdFx0XHRcdHJldHVybjtcbiBcdFx0XHR1c2xlZXBfcmFuZ2UoMTAsIDIwKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0XHRjb250aW51ZTtcbkBAIC00NDcsMTkgKzQ1NCwyOCBAQCBzdGF0aWMgaW50IHQ3eHhfZHBtYWlmX3R4X2h3X3B1c2hfdGhyZWFkKHZvaWQgKmFyZylcbiBcdHN0cnVjdCBkcG1haWZfY3RybCAqZHBtYWlmX2N0cmwgPSBhcmc7XG4gXHRpbnQgcmV0O1xuIFxuK1x0c2V0X2ZyZWV6YWJsZSgpO1xuK1xuIFx0d2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHtcbiBcdFx0aWYgKHQ3eHhfdHhfbGlzdHNfYXJlX2FsbF9lbXB0eShkcG1haWZfY3RybCkgfHxcbiBcdFx0ICAgIGRwbWFpZl9jdHJsLVx1MDAzZXN0YXRlICE9IERQTUFJRl9TVEFURV9QV1JPTikge1xuLVx0XHRcdGlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZHBtYWlmX2N0cmwtXHUwMDNldHhfd3EsXG4tXHRcdFx0XHRcdFx0ICAgICAoIXQ3eHhfdHhfbGlzdHNfYXJlX2FsbF9lbXB0eShkcG1haWZfY3RybCkgXHUwMDI2XHUwMDI2XG4tXHRcdFx0XHRcdFx0ICAgICBkcG1haWZfY3RybC1cdTAwM2VzdGF0ZSA9PSBEUE1BSUZfU1RBVEVfUFdST04pIHx8XG4tXHRcdFx0XHRcdFx0ICAgICBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpKVxuK1x0XHRcdGlmICh3YWl0X2V2ZW50X2ZyZWV6YWJsZShkcG1haWZfY3RybC1cdTAwM2V0eF93cSxcbitcdFx0XHRcdFx0XHQgKCF0N3h4X3R4X2xpc3RzX2FyZV9hbGxfZW1wdHkoZHBtYWlmX2N0cmwpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0XHRcdCAgZHBtYWlmX2N0cmwtXHUwMDNlc3RhdGUgPT0gRFBNQUlGX1NUQVRFX1BXUk9OKSB8fFxuK1x0XHRcdFx0XHRcdCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0aWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSlcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4rXHRcdC8qIEZyZWV6ZSBoZXJlLCBvdXRzaWRlIHRoZSBydW50aW1lLVBNIGFuZCBNTUlPIHNlY3Rpb24gYmVsb3csIHNvXG4rXHRcdCAqIHRoZSBzeXN0ZW0gc3VzcGVuZCBmcmVlemVyIHBhcmtzIHRoaXMgdGhyZWFkIGJlZm9yZSB0aGUgZGV2aWNlXG4rXHRcdCAqIHN1c3BlbmQgY2FsbGJhY2tzIHRlYXIgdGhlIERQTUFJRiBoYXJkd2FyZSBkb3duLlxuK1x0XHQgKi9cbitcdFx0aWYgKHRyeV90b19mcmVlemUoKSlcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0cmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChkcG1haWZfY3RybC1cdTAwM2VkZXYpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVBQ0NFUylcbiBcdFx0XHRyZXR1cm4gcmV0O1xuQEAgLTYxNyw3ICs2MzMsNyBAQCBpbnQgdDd4eF9kcG1haWZfdHhxX2luaXQoc3RydWN0IGRwbWFpZl90eF9xdWV1ZSAqdHhxKVxuIFx0fVxuIFxuIFx0dHhxLVx1MDAzZXdvcmtlciA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFwibWRfZHBtYWlmX3R4JWRfd29ya2VyXCIsXG4tXHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8ICh0eHEtXHUwMDNlaW5kZXggPyAwIDogV1FfSElHSFBSSSksXG4rXHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaQUJMRSB8ICh0eHEtXHUwMDNlaW5kZXggPyAwIDogV1FfSElHSFBSSSksXG4gXHRcdFx0XHR0eHEtXHUwMDNlaW5kZXgpO1xuIFx0aWYgKCF0eHEtXHUwMDNld29ya2VyKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjA5LjMyODc1MjI0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MzE1NDU1MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpczpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IEZ1enppbmcgQ2FuZGlkYXRlIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgdGFyZ2V0IGZvciBzeXprYWxsZXI6IHRoZSBgZHJpdmVycy9uZXQvd3dhbi90N3h4L2AgZHJpdmVyLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBldmVuIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGRyaXZlciBhY3R1YWxseSBkb2VzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIFRoYXQncyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLlxuXG5UaGUgYmVzdCB3YXkgdG8gZmlndXJlIG91dCB3aGF0IGl0IGlzLCBpcyB0byBsb29rIGF0IHRoZSBjb2RlLCBvYnZpb3VzbHkuIEknbGwgbmVlZCB0byBpbW1lZGlhdGVseSBmaWd1cmUgb3V0IHdoYXQga2luZCBvZiBXV0FOIGl0IGludGVyZmFjZXMgd2l0aC4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciB0aGUgZnVuY3Rpb25hbGl0eSBleHBvc2VkIGlzIGxpa2VseSB0byBiZSBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS5cblxuSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgb2J2aW91cyBwbGFjZXM6IGVpdGhlciBydW5uaW5nIGBncmVwcGVyYCBvciBkaWdnaW5nIGludG8gdGhlIEtjb25maWcgZmlsZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd3dhbi90N3h4L2AgZGlyZWN0b3J5IGl0c2VsZiwgYW5kIHBvc3NpYmx5IGV2ZW4gdGhlIHBhcmVudCBgZHJpdmVycy9uZXQvd3dhbi9gIGRpcmVjdG9yeS4gS2NvbmZpZyBmaWxlcyBvZnRlbiBjb250YWluIHVzZWZ1bCBkZXNjcmlwdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0aGF0J2xsIGhlbHAgbWUgZ3Jhc3AgdGhlIGRyaXZlcidzIHB1cnBvc2UgYW5kIHNjb3BlIHF1aWNrbHkuIEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhpcyBkcml2ZXIgYmVmb3JlIEkgY2FuIGRldGVybWluZSBpZiBpdCdzIGEgZ29vZCBmdXp6aW5nIGNhbmRpZGF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUxMSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MTc6MTMuOTYwMzAwMzgyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTcyNTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1US19UN1hYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3d3YW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTk2PWNvbmZpZyBJT1NNXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTA4LVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxMDk6Y29uZmlnIE1US19UN1hYXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTExMC1cXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgUENJZSA1RyBXV0FOIG1vZGVtIFQ3eHggZGV2aWNlXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZT0xNT1vYmotJChDT05GSUdfSU9TTSkgKz0gaW9zbS9cXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19NVEtfVDdYWCkgKz0gdDd4eC9cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC9NYWtlZmlsZS0yLVxcbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC9NYWtlZmlsZTozOm9iai0ke0NPTkZJR19NVEtfVDdYWH0gOj0gbXRrX3Q3eHgub1xcbmRyaXZlcnMvbmV0L3d3YW4vdDd4eC9NYWtlZmlsZS00LW10a190N3h4LXk6PVxcdHQ3eHhfcGNpLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzoxNzoxNC4wMTE4NzkwNjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjQwMjg5MjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXV0FOIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBzb21ldGhpbmcgcmVsYXRlZCB0byBXV0FOIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYGRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBzZXR0aW5ncyB1c3VhbGx5IHJlc2lkZS4gSSdtIHNwZWNpZmljYWxseSB0aGlua2luZyB0aGF0IGFyb3VuZCBsaW5lIDEwOSBtaWdodCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgZ2VuZXJhbCBhcmVhIG9mdGVuIGNvdmVycyBmZWF0dXJlIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhhdCBjb3VsZCBiZSByZWxldmFudCB0byB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nLiBMZXQgbWUgcHVsbCB0aGF0IGZpbGUgdXAgYW5kIGhhdmUgYSBsb29rLi4uIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBmYW1pbGlhciBgI2lmZGVmYCBjb25zdHJ1Y3RzIG9yIG1heWJlIHNvbWUgbW9yZSBjb21wbGV4IGBzZWxlY3RgIHN0YXRlbWVudHMgaW5mbHVlbmNpbmcgaG93IFdXQU4gZnVuY3Rpb25hbGl0eSBpcyBidWlsdC4gSSdtIGhvcGluZyBJIGNhbiBxdWlja2x5IHBpbnBvaW50IHRoZSBvcHRpb24gSSdtIGxvb2tpbmcgZm9yIG9yIGF0IGxlYXN0IGdldCBhIGJldHRlciBzZW5zZSBvZiBob3cgdGhlIG92ZXJhbGwgY29uZmlndXJhdGlvbiBpcyBzdHJ1Y3R1cmVkIHdpdGhpbiB0aGF0IHBhcnRpY3VsYXIgYXJlYSBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEzNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjE2LjI1MjE3MDczNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0c2VsZWN0IFJFTEFZIGlmIFdXQU5fREVCVUdGU1xcbiAxMDE6XFx0XFx0aGVscFxcbiAxMDI6XFx0XFx0ICBUaGlzIGRyaXZlciBlbmFibGVzIEludGVsIE0uMiBXV0FOIERldmljZSBjb21tdW5pY2F0aW9uLlxcbiAxMDM6XFx0XFxuIDEwNDpcXHRcXHQgIElmIHlvdSBoYXZlIG9uZSBvZiB0aG9zZSBJbnRlbCBNLjIgV1dBTiBNb2R1bGVzIGFuZCB3aXNoIHRvIHVzZSBpdCBpblxcbiAxMDU6XFx0XFx0ICBMaW51eCBzYXkgWS9NIGhlcmUuXFxuIDEwNjpcXHRcXG4gMTA3OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTA4OlxcdFxcbiAxMDk6XFx0Y29uZmlnIE1US19UN1hYXFxuIDExMDpcXHRcXHR0cmlzdGF0ZSBcXFwiTWVkaWFUZWsgUENJZSA1RyBXV0FOIG1vZGVtIFQ3eHggZGV2aWNlXFxcIlxcbiAxMTE6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gMTEyOlxcdFxcdHNlbGVjdCBSRUxBWSBpZiBXV0FOX0RFQlVHRlNcXG4gMTEzOlxcdFxcdGhlbHBcXG4gMTE0OlxcdFxcdCAgRW5hYmxlcyBNZWRpYVRlayBQQ0llIGJhc2VkIDVHIFdXQU4gbW9kZW0gKFQ3eHggc2VyaWVzKSBkZXZpY2UuXFxuIDExNTpcXHRcXHQgIEFkYXB0cyBXV0FOIGZyYW1ld29yayBhbmQgcHJvdmlkZXMgbmV0d29yayBpbnRlcmZhY2UgbGlrZSB3d2FuMFxcbiAxMTY6XFx0XFx0ICBhbmQgdHR5IGludGVyZmFjZXMgbGlrZSB3d2FuMGF0MCAoQVQgcHJvdG9jb2wpLCB3d2FuMG1iaW0wXFxuIDExNzpcXHRcXHQgIChNQklNIHByb3RvY29sKSwgZXRjLlxcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbiAxMjA6XFx0XFx0ICBjYWxsZWQgbXRrX3Q3eHguXFxuIDEyMTpcXHRcXG4gMTIyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMTIzOlxcdFxcbiAxMjQ6XFx0ZW5kaWYgIyBXV0FOXFxuIDEyNTpcXHRcXG4gMTI2OlxcdGVuZG1lbnVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTM6MTc6MTYuMjUyMjMzOTA1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzEzMDY3MjQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVDdYWCBIYXJkd2FyZSoqXG5cbkFscmlnaHQsIHNvIEkndmUgZ290IHRoaXMgYE1US19UN1hYYCB0aGluZyB0byBsb29rIGF0LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCAqaXMqLiBPa2F5LCBpdCdzIGEgXCJNZWRpYVRlayBQQ0llIDVHIFdXQU4gbW9kZW0gVDd4eCBkZXZpY2UuXCIgUmlnaHQsIHNvIHRoYXQgc3VnZ2VzdHMgYSBwaHlzaWNhbCBQQ0llIGNhcmQgb3IgYSBtb2RlbSBpbnRlZ3JhdGVkIHdpdGggUENJZS4gTm93LCB0aGF0J3MgY3J1Y2lhbCDigJMgaXQgaW1wbGllcyBhIGRpcmVjdCBoYXJkd2FyZSBpbnRlcmZhY2UuXG5cblRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc29mdHdhcmUgc2lkZSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgYHQ3eHhfcGNpLmNgLiBUaGUgZHJpdmVyJ3MgYmluZGluZyBsb2dpYyB3aXRoaW4gdGhlIGB0N3h4X3BjaS5jYCBmaWxlIGlzIHdoZXJlIEknbGwgc2VlIGhvdyB0aGlzIGRldmljZSBpbnRlcmZhY2VzIHdpdGggdGhlIHN5c3RlbS4gVGhhdCBjb2RlIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgZGV2aWNlIElEcywgdmVuZG9yIElEcywgYW5kIG90aGVyIGNyaXRpY2FsIFBDSSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiBGcm9tIHRoZXJlLCBJJ2xsIHN0YXJ0IHRvIGJ1aWxkIGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyByb2xlIGFuZCBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3ODIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjE5LjM4MjkwODYyNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ2NzM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vdDd4eFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuYz05NDk9TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHQ3eHhfcGNpX3RhYmxlKTtcXG5kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuYy05NTAtXFxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmM6OTUxOnN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0N3h4X3BjaV9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmMtOTUyLVxcdC5uYW1lID0gRFJJVkVSX05BTUUsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuYy05NTktXFxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmM6OTYwOm1vZHVsZV9wY2lfZHJpdmVyKHQ3eHhfcGNpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmMtOTYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMzoxNzoxOS40MzIzODE0MTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTI3MTEwODk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgVDd4eCBQQ0kgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIFQ3eHggV1dBTiBkZXZpY2UgaXMgaGFuZGxlZCwgc28gbGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBpdHMgUENJIGluaXRpYWxpemF0aW9uLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGRlbHZlIGludG8gdGhlIGB0N3h4X3BjaV90YWJsZWAgc3RydWN0dXJlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzeXN0ZW0gaWRlbnRpZmllcyBhbmQgY29uZmlndXJlcyB0aGUgaGFyZHdhcmUuIFRoZSBmaWxlIEknbSBpbnRlcmVzdGVkIGluIGlzIGBkcml2ZXJzL25ldC93d2FuL3Q3eHgvdDd4eF9wY2kuY2AuIFRoZSB0YWJsZSBkZWZpbml0aW9uIGFuZCBkZXZpY2UgbWF0Y2hpbmcgbG9naWMgYXJlIGxpa2VseSBob3VzZWQgd2l0aGluIHRoYXQgbW9kdWxlLiBVbmRlcnN0YW5kaW5nIHRoaXMgdGFibGUgd2lsbCBvZmZlciBjbHVlcyBhYm91dCBzdXBwb3J0ZWQgZGV2aWNlcywgYXNzb2NpYXRlZCBQQ0kgSURzLCBhbmQgZHJpdmVyIGJpbmRpbmcuIEl0IGlzIHRoZSBjb3JlIG9mIGhvdyB0aGUgZHJpdmVyIGlzIHN1cHBvc2VkIHRvIHJlY29nbml6ZSBhbmQgd29yayB3aXRoIGRpZmZlcmVudCBpdGVyYXRpb25zIG9mIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM0NCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjIxLjM1OTQ5NTg3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjMyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTM1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTM1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA5MzY6XFx0XFxuIDkzNzpcXHRcXHRcXHRmcmVlX2lycShwY2lfaXJxX3ZlY3RvcihwZGV2LCBpKSwgdDd4eF9kZXYtXFx1MDAzZWNhbGxiYWNrX3BhcmFtW2ldKTtcXG4gOTM4OlxcdFxcdH1cXG4gOTM5OlxcdFxcbiA5NDA6XFx0XFx0cGNpX2ZyZWVfaXJxX3ZlY3RvcnModDd4eF9kZXYtXFx1MDAzZXBkZXYpO1xcbiA5NDE6XFx0fVxcbiA5NDI6XFx0XFxuIDk0MzpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdDd4eF9wY2lfdGFibGVbXSA9IHtcXG4gOTQ0OlxcdFxcdHsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01FRElBVEVLLCAweDRkNzUpIH0sXFxuIDk0NTpcXHRcXHR7IFBDSV9ERVZJQ0UoMHgwM2YwLCAweDA5YzgpIH0sIC8vIEhQIERSTVItSDAxXFxuIDk0NjpcXHRcXHR7IFBDSV9ERVZJQ0UoMHgxNGMwLCAweDRkNzUpIH0sIC8vIERlbGwgRFc1OTMzZVxcbiA5NDc6XFx0XFx0eyB9XFxuIDk0ODpcXHR9O1xcbiA5NDk6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHQ3eHhfcGNpX3RhYmxlKTtcXG4gOTUwOlxcdFxcbiA5NTE6XFx0c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHQ3eHhfcGNpX2RyaXZlciA9IHtcXG4gOTUyOlxcdFxcdC5uYW1lID0gRFJJVkVSX05BTUUsXFxuIDk1MzpcXHRcXHQuaWRfdGFibGUgPSB0N3h4X3BjaV90YWJsZSxcXG4gOTU0OlxcdFxcdC5wcm9iZSA9IHQ3eHhfcGNpX3Byb2JlLFxcbiA5NTU6XFx0XFx0LnJlbW92ZSA9IHQ3eHhfcGNpX3JlbW92ZSxcXG4gOTU2OlxcdFxcdC5kcml2ZXIucG0gPSBcXHUwMDI2dDd4eF9wY2lfcG1fb3BzLFxcbiA5NTc6XFx0XFx0LnNodXRkb3duID0gdDd4eF9wY2lfc2h1dGRvd24sXFxuIDk1ODpcXHR9O1xcbiA5NTk6XFx0XFxuIDk2MDpcXHRtb2R1bGVfcGNpX2RyaXZlcih0N3h4X3BjaV9kcml2ZXIpO1xcbiA5NjE6XFx0XFxuIDk2MjpcXHRNT0RVTEVfQVVUSE9SKFxcXCJNZWRpYVRlayBJbmNcXFwiKTtcXG4gOTYzOlxcdE1PRFVMRV9ERVNDUklQVElPTihcXFwiTWVkaWFUZWsgUENJZSA1RyBXV0FOIG1vZGVtIFQ3eHggZHJpdmVyXFxcIik7XFxuIDk2NDpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjIxLjM1OTcyMzQ3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjcxNzk4NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRyaWFnZSBEZWNpc2lvbjogV29ydGhGdXp6aW5nID0gRmFsc2UqKlxuXG5Pa2F5LCBsZXQncyB3YWxrIHRocm91Z2ggdGhpcy4gVGltZSB0byBtYWtlIGEganVkZ21lbnQgY2FsbCBvbiB3aGV0aGVyIHRoaXMgd2FycmFudHMgZnVydGhlciBmdXp6aW5nLiBJIG5lZWQgdG8gYmUgbWV0aG9kaWNhbC4gVGhlIHRyaWFnZSBydWxlcyBkaWN0YXRlIHRoYXQgd2UgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgZmFsbCAqc3RyaWN0bHkqIGludG8gYSBzcGVjaWZpYywgbmVnYXRpdmUtY3JpdGVyaWEgY2F0ZWdvcnkuIFNwZWNpZmljYWxseSwgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuXCIgSSBrbm93IHRoaXMgZHJpbGwsIEkndmUgc2VlbiB0aGlzIGJlZm9yZS5cblxuTGV0J3Mgc2VlOiBJcyB0aGUgTWVkaWFUZWsgVDd4eCBXV0FOIG1vZGVtLCB3aXRoIGl0cyBpZGVudGlmaWVkIFBDSSBJRCAoMHg0ZDc1KSwgSFAgRFJNUi1IMDEgYW5kIERlbGwgRFc1OTMzZSB2YXJpYW50cywgYSBjYW5kaWRhdGUgZm9yIHRoaXMgY2F0ZWdvcnk/IEl0J3MgYSB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgUENJZSBjYXJkLCBpc24ndCBpdD8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBUN3h4IG1vZGVtICpuZWVkcyogdGhhdCBwaHlzaWNhbCBQQ0llIGludGVyZmFjZS4gV2UncmUgbm90IHRhbGtpbmcgYWJvdXQgc29tZSBjbGV2ZXIgVVNCIGdhZGdldCBlbXVsYXRpb24gb3IgdmlydGlvIHRyaWNrZXJ5IGhlcmUuIFRoZSBjb2RlIEkgYW0gbG9va2luZyBhdCBwZXJ0YWlucyBzcGVjaWZpY2FsbHkgdG8gdGhlIE1lZGlhVGVrIE1UNjg5MCAvIFQ3eHggUENJZSA1RyBXV0FOIG1vZGVtLiBJdCdzIHRpZWQgdG8gdGhhdCBzcGVjaWZpYyBoYXJkd2FyZS4gU3RhbmRhcmQgUUVNVS9HQ0UsIGFzIEkgdW5kZXJzdGFuZCBpdCwgZG9lcyAqbm90KiBlbXVsYXRlIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUuXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGdyYW51bGFyIGFuZCByZXZpZXcgdGhlIGRpZmYuIExldCdzIG1ha2Ugc3VyZSB0aGUgY2hhbmdlcyBhcmUgY29udGFpbmVkOlxuXG4xLiAgYGRyaXZlcnMvbmV0L3d3YW4vdDd4eC90N3h4X2hpZl9jbGRtYS5jYDogV29ya2VyIHF1ZXVlcyBub3cgaGF2ZSB0aGUgYFdRX0ZSRUVaQUJMRWAgZmxhZy5cbjIuICBgZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl9yeC5jYDogVGhlIGBiYXRfcmVsZWFzZV93cWAgbm93IGFsc28gdXNlcyBgV1FfRlJFRVpBQkxFYC5cbjMuICBgZHJpdmVycy9uZXQvd3dhbi90N3h4L3Q3eHhfaGlmX2RwbWFpZl90eC5jYDogVGhpcyBjaGFuZ2UgYWRkZWQgZnJlZXplciBoYW5kbGluZyBhbmQgYFdRX0ZSRUVaQUJMRWAgdG8gdGhlIGBkb190eGAgZnVuY3Rpb25zLlxuXG5BbGwgY2hhbmdlcyBhcmUgKnN0cmljdGx5KiB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93d2FuL3Q3eHgvYCBkaXJlY3RvcnkuIFRoYXQgc2VhbHMgaXQ6IGFsbCBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gdGhlIE1lZGlhVGVrIFQ3eHggUENJZSA1RyBXV0FOIG1vZGVtIGRyaXZlci4gQW5kIHRoYXQgbW9kZW0gKm5lZWRzKiBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlLiBRRU1VIGFuZCBHQ0UsIGluIHRoZWlyIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zLCBhcmUgbm90IGdvaW5nIHRvIHNpbXVsYXRlIHRoYXQgc3BlY2lmaWMgTWVkaWFUZWsgaGFyZHdhcmUuXG5cblNvLCB0aGlzIGhpdHMgdGhlIG1hcmsuIEl0J3MgYSBjbGVhciBjYXNlIG9mIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLlwiIFRoaXMgaXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgaGFyZHdhcmUgdGhhdCBjYW4ndCBiZSByZXByb2R1Y2VkIGluIHRoZSBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy5cblxuTGV0J3MgbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhlIGd1aWRhbmNlIHByb3Blcmx5OlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlIC0gQWJzb2x1dGVseS5cbiogICBgRW5hYmxlQ29uZmlnc2A6IFxcWyBdIC0gTm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmbGFncyBuZWVkZWQuXG4qICAgYEZvY3VzU3ltYm9sc2A6IFxcWyBdIC0gTm8gc3BlY2lmaWMgc3ltYm9scyB0byBpZGVudGlmeS5cbiogICBgUmVhc29uaW5nYDogSGVyZSdzIHdoZXJlIEkgbmVlZCB0byBiZSBjb25jaXNlLiBJIG11c3Qgc2F5IHRoZSBjb2RlIGNoYW5nZXMgYXJlIHBhcnQgb2YgdGhlIE1lZGlhVGVrIFQ3eHggUENJZSBXV0FOIG1vZGVtIGRyaXZlciAoYGRyaXZlcnMvbmV0L3d3YW4vdDd4eC9gKSwgYW5kIHRoaXMgbW9kZW0gcmVxdWlyZXMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLCB0aHVzIG1ha2luZyBpdCB1bnJlYWNoYWJsZS5cblxuVGltZSBmb3IgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTQ2LCJPdXRwdXRUb2tlbnMiOjEwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjI5LjAzMTUyNjE4OVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBNZWRpYVRlayBQQ0llIDVHIFdXQU4gbW9kZW0gKFQ3eHgpIGRyaXZlciBpbiBkcml2ZXJzL25ldC93d2FuL3Q3eHgvLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChNZWRpYVRlayBUN3h4IG1vZGVtKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBNZWRpYVRlayBQQ0llIDVHIFdXQU4gbW9kZW0gKFQ3eHgpIGRyaXZlciBpbiBkcml2ZXJzL25ldC93d2FuL3Q3eHgvLiBUaGlzIGRyaXZlciByZXF1aXJlcyBzcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIChNZWRpYVRlayBUN3h4IG1vZGVtKSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIEdDRSBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEzOjE3OjI5LjAzMTU1MjM4OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow9rkcl[1] Phase: Running StartedAt: 2026-09-07 13:17:40 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9rkcl[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-07 13:17:40 +0000 UTC FinishedAt: 2026-09-07 13:17:52 +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,}