Name: series-workflowbndnz Phase: Succeeded StartedAt: 2026-08-21 07:20:23 +0000 UTC FinishedAt: 2026-08-21 11:21:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[0] Phase: Succeeded StartedAt: 2026-08-21 07:20:23 +0000 UTC FinishedAt: 2026-08-21 07:40:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 07:20:23 +0000 UTC FinishedAt: 2026-08-21 07:40:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INFINIBAND", "RDMA_RXE", "RDMA_SIW" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INFINIBAND", "RDMA_RXE", "RDMA_SIW" ], "series_id": "44fd2fb1-99f9-4c46-9b24-81bdf8c26535" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ib_get_eth_speed" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7UkRNQV9SWEUmIzM0OywKICAgICYjMzQ7UkRNQV9TSVcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpYl9nZXRfZXRoX3NwZWVkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYG5ldGRldi1cdTAwM2VuYW1lYCB3YXMgYWNjZXNzZWQgaW4gYSBgcHJfd2FybmAgc3RhdGVtZW50IGFmdGVyIGBkZXZfcHV0KG5ldGRldilgIGhhZCBhbHJlYWR5IGRyb3BwZWQgdGhlIHJlZmVyZW5jZSB0byBgbmV0ZGV2YC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBsb2dpYyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gYGliX2dldF9ldGhfc3BlZWRgIGJ5IG1vdmluZyBgZGV2X3B1dChuZXRkZXYpYCBhZnRlciBhY2Nlc3NpbmcgYG5ldGRldi1cdTAwM2VuYW1lYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHNvZnR3YXJlIFJETUEgZHJpdmVycyAoUlhFIGFuZCBTSVcpIHdoZW4gcXVlcnlpbmcgcG9ydCBhdHRyaWJ1dGVzLCBtYWtpbmcgaXQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmE0ZTJlMGZmYjRhNWViYTIwMGVjYWQ1Mjg4Mzg3YWY3MmMwZmI1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA3OjM5OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jXG5pbmRleCA4NjgxMWQzMTA5MmNlLi41N2YxMDljODA4NWRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY1xuQEAgLTIwNTIsOCAmIzQzOzIwNTIsNiBAQCBpbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxuIFx0cmMgPSBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgXHUwMDI2bGtzZXR0aW5ncyk7XG4gXHRydG5sX3VubG9jaygpO1xuIFxuLVx0ZGV2X3B1dChuZXRkZXYpO1xuLVxuIFx0aWYgKCFyYyBcdTAwMjZcdTAwMjYgbGtzZXR0aW5ncy5iYXNlLnNwZWVkICE9ICh1MzIpU1BFRURfVU5LTk9XTikge1xuIFx0XHRuZXRkZXZfc3BlZWQgPSBsa3NldHRpbmdzLmJhc2Uuc3BlZWQ7XG4gXHR9IGVsc2Uge1xuQEAgLTIwNjMsNiAmIzQzOzIwNjEsOCBAQCBpbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxuIFx0XHRcdFx0bmV0ZGV2LVx1MDAzZW5hbWUsIG5ldGRldl9zcGVlZCk7XG4gXHR9XG4gXG4mIzQzO1x0ZGV2X3B1dChuZXRkZXYpO1xuJiM0MztcbiBcdGliX2dldF93aWR0aF9hbmRfc3BlZWQobmV0ZGV2X3NwZWVkLCBsa3NldHRpbmdzLmxhbmVzLFxuIFx0XHRcdCAgICAgICBzcGVlZCwgd2lkdGgpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDssCiAgICAmIzM0O1JETUFfU0lXJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZ2V0X2V0aF9zcGVlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiBgaWJfZ2V0X2V0aF9zcGVlZGAgYnkgbW92aW5nIGBkZXZfcHV0KG5ldGRldilgIGFmdGVyIGFjY2Vzc2luZyBgbmV0ZGV2LVx1MDAzZW5hbWVgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUgUkRNQSBkcml2ZXJzIChSWEUgYW5kIFNJVykgd2hlbiBxdWVyeWluZyBwb3J0IGF0dHJpYnV0ZXMsIG1ha2luZyBpdCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYTRlMmUwZmZiNGE1ZWJhMjAwZWNhZDUyODgzODdhZjcyYzBmYjU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMDc6Mzk6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYwppbmRleCA4NjgxMWQzMTA5MmNlLi41N2YxMDljODA4NWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKQEAgLTIwNTIsOCAmIzQzOzIwNTIsNiBAQCBpbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKQogCXJjID0gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsICZhbXA7bGtzZXR0aW5ncyk7CiAJcnRubF91bmxvY2soKTsKIAotCWRldl9wdXQobmV0ZGV2KTsKLQogCWlmICghcmMgJmFtcDsmYW1wOyBsa3NldHRpbmdzLmJhc2Uuc3BlZWQgIT0gKHUzMilTUEVFRF9VTktOT1dOKSB7CiAJCW5ldGRldl9zcGVlZCA9IGxrc2V0dGluZ3MuYmFzZS5zcGVlZDsKIAl9IGVsc2UgewpAQCAtMjA2Myw2ICYjNDM7MjA2MSw4IEBAIGludCBpYl9nZXRfZXRoX3NwZWVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIHBvcnRfbnVtLCB1MTYgKnNwZWVkLCB1OCAqd2lkdGgpCiAJCQkJbmV0ZGV2LSZndDtuYW1lLCBuZXRkZXZfc3BlZWQpOwogCX0KIAomIzQzOwlkZXZfcHV0KG5ldGRldik7CiYjNDM7CiAJaWJfZ2V0X3dpZHRoX2FuZF9zcGVlZChuZXRkZXZfc3BlZWQsIGxrc2V0dGluZ3MubGFuZXMsCiAJCQkgICAgICAgc3BlZWQsIHdpZHRoKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIGEgTmV0d29yayBEZXZpY2UgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY2AuIFJpZ2h0IGF3YXksIGl0IHNlZW1zIHRvIGludm9sdmUgYSBmYWlybHkgc3BlY2lmaWMgZnVuY3Rpb24sIGBpYl9nZXRfZXRoX3NwZWVkYC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBzaW1wbHkgYmUgbW92aW5nIHRoZSBsaW5lIGBkZXZfcHV0KG5ldGRldik7YCBkb3duIGEgZmV3IGxpbmVzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIE1vdmluZyBhIGBkZXZfcHV0YCBjYWxsIHN1Z2dlc3RzIHNvbWUgcmVzb3VyY2UgbWFuYWdlbWVudCBjb25jZXJuLCBsaWtlbHkgcmVsYXRlZCB0byByZWxlYXNpbmcgYSBuZXR3b3JrIGRldmljZS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0IG9mIGBpYl9nZXRfZXRoX3NwZWVkYCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGFjdCBpcy4gSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBpcyBhIGJ1ZyBmaXgsIGFuIG9wdGltaXphdGlvbiwgb3IgcG9zc2libHkgZXZlbiBhIHN1YnRsZSBjaGFuZ2UgdGhhdCBjb3VsZCBoYXZlIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWJfZ2V0X2V0aF9zcGVlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYz0xOTU0PXN0YXRpYyB2b2lkIGliX2dldF93aWR0aF9hbmRfc3BlZWQodTMyIG5ldGRldl9zcGVlZCwgdTMyIGxhbmVzLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMtMjAzNi1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmM6MjAzNzppbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYy0yMDM4LXtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jLTIwNzAtfVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYzoyMDcxOkVYUE9SVF9TWU1CT0woaWJfZ2V0X2V0aF9zcGVlZCk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jLTIwNzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEluZmluaWJhbmQgTklDIFNwZWVkIERldGVjdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJbmZpbmliYW5kIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgaWJfZ2V0X2V0aF9zcGVlZGAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmNgLCBmaWd1cmVzIG91dCB0aGUgRXRoZXJuZXQgc3BlZWQgb2YgdGhlIGF0dGFjaGVkIGhhcmR3YXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGFuZCB0aGVuIEkmIzM5O2xsIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIGFuZCBmaW5hbGx5IHN0YXJ0IG1ha2luZyBpbmZlcmVuY2VzLiBUaGlzIHNlZW1zIGxpa2UgYSBjb3JlIGZ1bmN0aW9uLCBzbyBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgaW50byB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgUEhZIGRyaXZlcnMsIHBlcmhhcHMgd2l0aCBzb21lIGNsZXZlciBhdXRvLW5lZ290aWF0aW9uIGhhbmRsaW5nLiBJJiMzOTttIGFsc28gY3VyaW91cyBpZiBpdCBoYW5kbGVzIGRpZmZlcmVudCBFdGhlcm5ldCBnZW5lcmF0aW9ucyBhbmQgd2hhdCBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZS4gVGltZSB0byBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAzNzpcdGludCBpYl9nZXRfZXRoX3NwZWVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIHBvcnRfbnVtLCB1MTYgKnNwZWVkLCB1OCAqd2lkdGgpXG4yMDM4Olx0e1xuMjAzOTpcdFx0aW50IHJjO1xuMjA0MDpcdFx0dTMyIG5ldGRldl9zcGVlZDtcbjIwNDE6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4yMDQyOlx0XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBsa3NldHRpbmdzID0ge307XG4yMDQzOlx0XG4yMDQ0Olx0XHRpZiAocmRtYV9wb3J0X2dldF9saW5rX2xheWVyKGRldiwgcG9ydF9udW0pICE9IElCX0xJTktfTEFZRVJfRVRIRVJORVQpXG4yMDQ1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjA0NjpcdFxuMjA0NzpcdFx0bmV0ZGV2ID0gaWJfZGV2aWNlX2dldF9uZXRkZXYoZGV2LCBwb3J0X251bSk7XG4yMDQ4Olx0XHRpZiAoIW5ldGRldilcbjIwNDk6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4yMDUwOlx0XG4yMDUxOlx0XHRydG5sX2xvY2soKTtcbjIwNTI6XHRcdHJjID0gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFx1MDAyNmxrc2V0dGluZ3MpO1xuMjA1MzpcdFx0cnRubF91bmxvY2soKTtcbjIwNTQ6XHRcbjIwNTU6XHRcdGlmICghcmMgXHUwMDI2XHUwMDI2IGxrc2V0dGluZ3MuYmFzZS5zcGVlZCAhPSAodTMyKVNQRUVEX1VOS05PV04pIHtcbjIwNTY6XHRcdFx0bmV0ZGV2X3NwZWVkID0gbGtzZXR0aW5ncy5iYXNlLnNwZWVkO1xuMjA1NzpcdFx0fSBlbHNlIHtcbjIwNTg6XHRcdFx0bmV0ZGV2X3NwZWVkID0gU1BFRURfMTAwMDtcbjIwNTk6XHRcdFx0aWYgKHJjKVxuMjA2MDpcdFx0XHRcdHByX3dhcm4oXCYjMzQ7JXMgc3BlZWQgaXMgdW5rbm93biwgZGVmYXVsdGluZyB0byAldVxcblwmIzM0OyxcbjIwNjE6XHRcdFx0XHRcdG5ldGRldi1cdTAwM2VuYW1lLCBuZXRkZXZfc3BlZWQpO1xuMjA2MjpcdFx0fVxuMjA2MzpcdFxuMjA2NDpcdFx0ZGV2X3B1dChuZXRkZXYpO1xuMjA2NTpcdFxuMjA2NjpcdFx0aWJfZ2V0X3dpZHRoX2FuZF9zcGVlZChuZXRkZXZfc3BlZWQsIGxrc2V0dGluZ3MubGFuZXMsXG4yMDY3Olx0XHRcdFx0ICAgICAgIHNwZWVkLCB3aWR0aCk7XG4yMDY4Olx0XG4yMDY5Olx0XHRyZXR1cm4gMDtcbjIwNzA6XHR9XG4yMDcxOlx0RVhQT1JUX1NZTUJPTChpYl9nZXRfZXRoX3NwZWVkKTtcbjIwNzI6XHRcbjIwNzM6XHRpbnQgaWJfbW9kaWZ5X3FwKHN0cnVjdCBpYl9xcCAqcXAsXG4yMDc0Olx0XHRcdCBzdHJ1Y3QgaWJfcXBfYXR0ciAqcXBfYXR0cixcbjIwNzU6XHRcdFx0IGludCBxcF9hdHRyX21hc2spXG4yMDc2Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEEgVXNlLUFmdGVyLUZyZWUgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBtb3ZpbmcgdGhlIGBkZXZfcHV0KG5ldGRldilgIGNhbGwuIEFoLCBJIHNlZSB3aHkuIFRoZXkmIzM5O3JlIGRvaW5nIHRoaXMgYmVjYXVzZSB0aGUgY29kZSBpbnNpZGUgdGhhdCBgaWYgKCFyYyAuLi4pYCBibG9jaywgc3BlY2lmaWNhbGx5IGluIHRoZSBgZWxzZWAgYnJhbmNoIHdpdGggdGhhdCBgcHJfd2FybmAsIGFjY2Vzc2VzIGBuZXRkZXYtJmd0O25hbWVgLiBJZiBgZGV2X3B1dChuZXRkZXYpYCBoYXBwZW5zICpiZWZvcmUqIHRoYXQsIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gYG5ldGRldmAgY291bGQgYmUgZnJlZWQgcmlnaHQgYmVmb3JlIHdlIHRyeSB0byBhY2Nlc3MgaXRzIGBuYW1lYCBmaWVsZCwgd2hpY2ggaXMsIG9idmlvdXNseSwgYmFkIG5ld3MuCgpIbW0sIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgaXMgYSBsZWdpdGltYXRlIHVzZS1hZnRlci1mcmVlIGJ1ZyB0aGF0JiMzOTtzIGJlaW5nIGZpeGVkIGluIGBpYl9nZXRfZXRoX3NwZWVkYC4gQW5kLCBiZWNhdXNlIGBpYl9nZXRfZXRoX3NwZWVkYCBpcyBleHBvcnRlZCwgaXQmIzM5O3MgdXNlZCBieSBkcml2ZXJzLiBUaGlzIGlzIGltcG9ydGFudDogbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGRyaXZlcnMgYXJlIGFjdHVhbGx5IGNhbGxpbmcgYGliX2dldF9ldGhfc3BlZWRgLiBUaW1lIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgYW5kIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2liX2dldF9ldGhfc3BlZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYz0xOTU0PXN0YXRpYyB2b2lkIGliX2dldF93aWR0aF9hbmRfc3BlZWQodTMyIG5ldGRldl9zcGVlZCwgdTMyIGxhbmVzLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMtMjAzNi1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmM6MjAzNzppbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYy0yMDM4LXtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jLTIwNzAtfVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYzoyMDcxOkVYUE9SVF9TWU1CT0woaWJfZ2V0X2V0aF9zcGVlZCk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jLTIwNzItXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz0yOTE9aW50IGJueHRfcmVfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnRfbnVtLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzI3LVx0cG9ydF9hdHRyLVx1MDAzZWluaXRfdHlwZV9yZXBseSA9IDA7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jOjMyODpcdHJjID0gaWJfZ2V0X2V0aF9zcGVlZChcdTAwMjZyZGV2LVx1MDAzZWliZGV2LCBwb3J0X251bSwgXHUwMDI2cG9ydF9hdHRyLVx1MDAzZWFjdGl2ZV9zcGVlZCxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzI5LVx0XHRcdCAgICAgIFx1MDAyNnBvcnRfYXR0ci1cdTAwM2VhY3RpdmVfd2lkdGgpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9wcm92aWRlci5jPTMwNj1zdGF0aWMgaW50IGM0aXdfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnQsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Byb3ZpZGVyLmMtMzEwLVx0cHJfZGVidWcoXCYjMzQ7aWJkZXYgJXBcXG5cJiMzNDssIGliZGV2KTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9wcm92aWRlci5jOjMxMTpcdHJldCA9IGliX2dldF9ldGhfc3BlZWQoaWJkZXYsIHBvcnQsIFx1MDAyNnByb3BzLVx1MDAzZWFjdGl2ZV9zcGVlZCxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9wcm92aWRlci5jLTMxMi1cdFx0XHQgICAgICAgXHUwMDI2cHJvcHMtXHUwMDNlYWN0aXZlX3dpZHRoKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYz0zODA9aW50IGVyZG1hX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTQwMS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jOjQwMjpcdGliX2dldF9ldGhfc3BlZWQoaWJkZXYsIHBvcnQsIFx1MDAyNmF0dHItXHUwMDNlYWN0aXZlX3NwZWVkLCBcdTAwMjZhdHRyLVx1MDAzZWFjdGl2ZV93aWR0aCk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYy00MDMtXHRhdHRyLVx1MDAzZW1heF9tdHUgPSBpYl9tdHVfaW50X3RvX2VudW0obmRldi1cdTAwM2VtdHUpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfbWFpbi5jPTI4NT1zdGF0aWMgaW50IGhuc19yb2NlX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJfZGV2LCB1MzIgcG9ydF9udW0sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9tYWluLmMtMzA0LVx0cHJvcHMtXHUwMDNlcGtleV90YmxfbGVuID0gMTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfbWFpbi5jOjMwNTpcdHJldCA9IGliX2dldF9ldGhfc3BlZWQoaWJfZGV2LCBwb3J0X251bSwgXHUwMDI2cHJvcHMtXHUwMDNlYWN0aXZlX3NwZWVkLFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9tYWluLmMtMzA2LVx0XHRcdCAgICAgICBcdTAwMjZwcm9wcy1cdTAwM2VhY3RpdmVfd2lkdGgpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19pYmRldi5jPTgwPXN0YXRpYyBpbnQgaW9uaWNfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnQsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2liZGV2LmMtMTE0LVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2liZGV2LmM6MTE1Olx0cmV0dXJuIGliX2dldF9ldGhfc3BlZWQoaWJkZXYsIHBvcnQsXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfaWJkZXYuYy0xMTYtXHRcdFx0XHRcdTAwMjZhdHRyLVx1MDAzZWFjdGl2ZV9zcGVlZCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYz04OD1zdGF0aWMgaW50IGlyZG1hX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTEwOS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjExMDpcdGliX2dldF9ldGhfc3BlZWQoaWJkZXYsIHBvcnQsIFx1MDAyNnByb3BzLVx1MDAzZWFjdGl2ZV9zcGVlZCxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTExMS1cdFx0XHQgXHUwMDI2cHJvcHMtXHUwMDNlYWN0aXZlX3dpZHRoKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmM9NjExPWludCBtYW5hX2liX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYy02MzEtXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmM6NjMyOlx0aWJfZ2V0X2V0aF9zcGVlZChpYmRldiwgcG9ydCwgXHUwMDI2cHJvcHMtXHUwMDNlYWN0aXZlX3NwZWVkLCBcdTAwMjZwcm9wcy1cdTAwM2VhY3RpdmVfd2lkdGgpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFpbi5jLTYzMy1cdHByb3BzLVx1MDAzZXBrZXlfdGJsX2xlbiA9IDE7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmM9MzMwPWludCB1c25pY19pYl9xdWVyeV9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1MzIgcG9ydCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvdXNuaWNfaWJfdmVyYnMuYy0zMzYtXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvdXNuaWNfaWJfdmVyYnMuYzozMzc6XHRpZiAoaWJfZ2V0X2V0aF9zcGVlZChpYmRldiwgcG9ydCwgXHUwMDI2cHJvcHMtXHUwMDNlYWN0aXZlX3NwZWVkLFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmMtMzM4LVx0XHRcdCAgICAgXHUwMDI2cHJvcHMtXHUwMDNlYWN0aXZlX3dpZHRoKSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvdXNuaWNfaWJfdmVyYnMuYy0zNDEtXHQvKlxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmM6MzQyOlx0ICogdXNkZXZfbG9jayBpcyBhY3F1aXJlZCBhZnRlciAoYW5kIG5vdCBiZWZvcmUpIGliX2dldF9ldGhfc3BlZWQgY2FsbFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmM6MzQzOlx0ICogYmVjYXVzZSBhY3F1aXJpbmcgcnRubF9sb2NrIGluIGliX2dldF9ldGhfc3BlZWQsIHdoaWxlIGhvbGRpbmdcbmRyaXZlcnMvaW5maW5pYmFuZC9ody91c25pYy91c25pY19pYl92ZXJicy5jLTM0NC1cdCAqIHVzZGV2X2xvY2sgY291bGQgbGVhZCB0byBhIGRlYWRsb2NrLlxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmM9MzQ9c3RhdGljIGludCByeGVfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jLTU1LVx0bXV0ZXhfbG9jayhcdTAwMjZyeGUtXHUwMDNldXNkZXZfbG9jayk7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jOjU2Olx0cmV0ID0gaWJfZ2V0X2V0aF9zcGVlZChpYmRldiwgcG9ydF9udW0sIFx1MDAyNmF0dHItXHUwMDNlYWN0aXZlX3NwZWVkLFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYy01Ny1cdFx0XHQgICAgICAgXHUwMDI2YXR0ci1cdTAwM2VhY3RpdmVfd2lkdGgpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3ZlcmJzLmM9MTczPWludCBzaXdfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICpiYXNlX2RldiwgdTMyIHBvcnQsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfdmVyYnMuYy0xODAtXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd192ZXJicy5jOjE4MTpcdHJ2ID0gaWJfZ2V0X2V0aF9zcGVlZChiYXNlX2RldiwgcG9ydCwgXHUwMDI2YXR0ci1cdTAwM2VhY3RpdmVfc3BlZWQsXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd192ZXJicy5jLTE4Mi1cdFx0XHQgXHUwMDI2YXR0ci1cdTAwM2VhY3RpdmVfd2lkdGgpO1xuLS1cbmluY2x1ZGUvcmRtYS9pYl92ZXJicy5oPTQ3NjE9dm9pZCBpYl9kcmFpbl9xcChzdHJ1Y3QgaWJfcXAgKnFwKTtcbmluY2x1ZGUvcmRtYS9pYl92ZXJicy5oLTQ3NjItXG5pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaDo0NzYzOmludCBpYl9nZXRfZXRoX3NwZWVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIHBvcnRfbnVtLCB1MTYgKnNwZWVkLFxuaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgtNDc2NC1cdFx0ICAgICB1OCAqd2lkdGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGByeGVfcXVlcnlfcG9ydGAgYW5kIGBzaXdfcXVlcnlfcG9ydGAgYXJlIHRoZSBlbnRyeSBwb2ludHMuIFRoZXkmIzM5O3JlIHNvZnR3YXJlIFJETUEgZHJpdmVycywgc3BlY2lmaWNhbGx5IFJYRSBhbmQgU0lXLCBhbmQgSSBrbm93IHRoZXNlIGFyZSBvZnRlbiBmb3VuZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEludGVyZXN0aW5nLiBUaGVuIEkgc3BvdCBgaWJfZ2V0X2V0aF9zcGVlZGAsIHdoaWNoIGlzIGZpeGluZyBhIHVzZS1hZnRlci1mcmVlIGJ1Zy4gVGhhdCBncmFicyBteSBhdHRlbnRpb24g4oCTIGEgY3JpdGljYWwgYnVnIGZpeCBpbiBhIGNvcmUgSW5maW5pYmFuZCBmdW5jdGlvbj8gQWJzb2x1dGVseSwgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggc2VyaW91cyBpbnZlc3RpZ2F0aW9uIGFuZCBmdXp6aW5nLCBnaXZlbiBpdHMgaW1wb3J0YW5jZS4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmb2N1cyBvbiB0aG9zZSB0aHJlZSBmdW5jdGlvbnM6IGBpYl9nZXRfZXRoX3NwZWVkYCwgYHJ4ZV9xdWVyeV9wb3J0YCwgYW5kIGBzaXdfcXVlcnlfcG9ydGAuIEJ1dCB3YWl0IGEgbWludXRlLi4uIGBpYl9nZXRfZXRoX3NwZWVkYCBpcyBpbnZvbHZlZCBpbiAqcXVlcnlpbmcqIHBvcnQgYXR0cmlidXRlcy4gSXQmIzM5O3MgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZXNlIG90aGVyIGZ1bmN0aW9ucywgd2hpY2ggbWFrZXMgaXQgZXZlbiBtb3JlIGFwcGVhbGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXMgdGhlIGF0dHJpYnV0ZXMgY291bGQgYmUgbWFuaXB1bGF0ZWQgaW4gd2F5cyB0byB0cmlnZ2VyIHRoZSBidWcuIEkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgd2l0aCB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgcnhlX3F1ZXJ5X3BvcnRgIGZpcnN0LCB0byBzZWUgaG93IGl0IGNhbGxzIGBpYl9nZXRfZXRoX3NwZWVkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhlX3F1ZXJ5X3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jPTE4PXN0YXRpYyBpbnQgcnhlX3F1ZXJ5X2RldmljZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jLTMzLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYzozNDpzdGF0aWMgaW50IHJ4ZV9xdWVyeV9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYy0zNS1cdFx0XHQgIHUzMiBwb3J0X251bSwgc3RydWN0IGliX3BvcnRfYXR0ciAqYXR0cilcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jPTE0NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2Vfb3BzIHJ4ZV9kZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMtMTUwMi1cdC5xdWVyeV9naWQgPSByeGVfcXVlcnlfZ2lkLFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYzoxNTAzOlx0LnF1ZXJ5X3BvcnQgPSByeGVfcXVlcnlfcG9ydCxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMtMTUwNC1cdC5xdWVyeV9xcCA9IHJ4ZV9xdWVyeV9xcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJYRSBRdWVyeSBQb3J0IENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKgoKT2theSwgc28gYHJ4ZV9xdWVyeV9wb3J0YCBpcyBhIGRldmljZSBvcGVyYXRpb24g4oCTIGdvdCBpdC4gTm93LCB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGRvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyB0aGluZyBydW5zIGFzIGV4cGVjdGVkPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgUlhFLXNwZWNpZmljIGFuZCBTSVctc3BlY2lmaWMgcmVxdWlyZW1lbnRzLiBGb3IgUlhFLCB0aGF0JiMzOTtzIG9idmlvdXNseSBgUkRNQV9SWEVgLiBBbmQgZm9yIFNJVywgaXQmIzM5O3MgYFJETUFfU0lXYC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuIFRvIGJlIGV4dHJhIHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZ2AuIEl04oCZcyBhbHdheXMgZ29vZCB0byBjb25maXJtIGFzc3VtcHRpb25zIHdpdGggdGhlIGRlZmluaXRpdmUgc291cmNlLCBldmVuIGZvciBzb21ldGhpbmcgdGhhdCAqc2VlbXMqIGJhc2ljLiBBIHF1aWNrIGNoZWNrIG9mIHRoYXQgS2NvbmZpZyBzaG91bGQgZ2l2ZSBtZSBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgdG8gYXZvaWQgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFJETUFfUlhFXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTb2Z0d2FyZSBSRE1BIG92ZXIgRXRoZXJuZXQgKFJvQ0UpIGRyaXZlclwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBQQ0kgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IDY0QklUXG4gICA1Olx0XHRkZXBlbmRzIG9uIElORklOSUJBTkRfVklSVF9ETUFcbiAgIDY6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAgNzpcdFx0c2VsZWN0IENSQzMyXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHRUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBJbmZpbmlCYW5kIFJETUEgdHJhbnNwb3J0IG92ZXJcbiAgMTA6XHRcdHRoZSBMaW51eCBuZXR3b3JrIHN0YWNrLiBJdCBlbmFibGVzIGEgc3lzdGVtIHdpdGggYVxuICAxMTpcdFx0c3RhbmRhcmQgRXRoZXJuZXQgYWRhcHRlciB0byBpbnRlcm9wZXJhdGUgd2l0aCBhIFJvQ0VcbiAgMTI6XHRcdGFkYXB0ZXIgb3Igd2l0aCBhbm90aGVyIHN5c3RlbSBydW5uaW5nIHRoZSBSWEUgZHJpdmVyLlxuICAxMzpcdFx0RG9jdW1lbnRhdGlvbiBvbiBJbmZpbmlCYW5kIGFuZCBSb0NFIGNhbiBiZSBkb3dubG9hZGVkIGF0XG4gIDE0Olx0XHR3d3cuaW5maW5pYmFuZHRhLm9yZyBhbmQgd3d3Lm9wZW5mYWJyaWNzLm9yZy4gKFNlZSBhbHNvXG4gIDE1Olx0XHRzaXcgd2hpY2ggaXMgYSBzaW1pbGFyIHNvZnR3YXJlIGRyaXZlciBmb3IgaVdBUlAuKVxuICAxNjpcdFxuICAxNzpcdFx0VGhlIGRyaXZlciBpcyBzcGxpdCBpbnRvIHR3byBsYXllcnMsIG9uZSBpbnRlcmZhY2VzIHdpdGggdGhlXG4gIDE4Olx0XHRMaW51eCBSRE1BIHN0YWNrIGFuZCBpbXBsZW1lbnRzIGEga2VybmVsIG9yIHVzZXIgc3BhY2VcbiAgMTk6XHRcdHZlcmJzIEFQSS4gVGhlIHVzZXIgc3BhY2UgdmVyYnMgQVBJIHJlcXVpcmVzIGEgc3VwcG9ydFxuICAyMDpcdFx0bGlicmFyeSBuYW1lZCBsaWJyeGUgd2hpY2ggaXMgbG9hZGVkIGJ5IHRoZSBnZW5lcmljIHVzZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ0MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBTSVcgS2NvbmZpZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgZm9yIFNJVyAoU29ja2V0LWJhc2VkIEluZmluaUJhbmQpLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBTSVcgZHJpdmVyIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHZhcmlhYmxlcyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBvdmVyYWxsIEluZmluaUJhbmQgc3RhY2suCgpGaXJzdCwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBzdXNwZWN0czogYGJvb2xgIGFuZCBgdHJpc3RhdGVgIG9wdGlvbnMgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgZHJpdmVyIGFuZCBwb3NzaWJseSBmaW5lLXR1bmluZyBpdHMgZmVhdHVyZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zIOKAkyBidWZmZXIgc2l6ZXMsIGNhY2hpbmcgc2V0dGluZ3MsIG1heWJlIGV2ZW4gc29tZSBvcHRpb25zIHJlbGF0ZWQgdG8gb2ZmbG9hZGluZy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaWYgdGhlcmUgYXJlIGRlYnVnIG9yIHRyYWNpbmcgZmxhZ3MsIGFzIHRob3NlIGFyZSBjcml0aWNhbCBmb3IgZGlhZ25vc2luZyBhbnkgcGVyZm9ybWFuY2UgaXNzdWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpHaXZlbiB0aGF0IGl0JiMzOTtzIFNJVywgSSYjMzk7bGwgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0LWJhc2VkIHRyYW5zcG9ydC1sYXllciBvcHRpbWl6YXRpb25zLiBBcmUgdGhlcmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBidWZmZXIgcG9vbCBtYW5hZ2VtZW50LCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgdGltZW91dHMsIGNvbmdlc3Rpb24gY29udHJvbCBiZWhhdmlvciwgb3IgbWF5YmUgZXZlbiBUQ1AvVURQIHByb3RvY29sIHNwZWNpZmljIHR3ZWFrcz8gVW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugb3B0aW9ucyBpbmZsdWVuY2UgcGVyZm9ybWFuY2UgY29tcGFyZWQgdG8gbmF0aXZlIEluZmluaUJhbmQgaXMgY3J1Y2lhbC4KCknigJltIGFsc28gYXNzdW1pbmcgdGhlcmUgd2lsbCBiZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgc3BlY2lmaWVkLCBsaW5raW5nIHRoZSBTSVcgb3B0aW9ucyB0byBvdGhlciBJbmZpbmlCYW5kIGNvbXBvbmVudHMgb3IsIHBvdGVudGlhbGx5LCBuZXR3b3JrIHN0YWNrIGZlYXR1cmVzLiBUaGUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgYXJlIGdvaW5nIHRvIGJlIGtleSB0byBzZWUgaWYgYW55IHByZXJlcXVpc2l0ZXMgbGlrZSBzcGVjaWZpYyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIFJETUEgZmVhdHVyZXMsIG9yIGtlcm5lbCB2ZXJzaW9ucyBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciBhIGNlcnRhaW4gb3B0aW9uIHRvIGJlIHZpYWJsZS4gSXTigJlzIGFsc28gaW1wb3J0YW50IHRvIGlkZW50aWZ5IHdoYXQgb3RoZXIgS2NvbmZpZyBmaWxlcyB0aGlzIG9uZSBwdWxscyBpbiBvciByZWxpZXMgb24uCgpGaW5hbGx5LCBJIHdpbGwgYmUgc2Nhbm5pbmcgZm9yIGRldGFpbGVkIGhlbHAgdGV4dC4gSG9wZWZ1bGx5LCB0aGUgZGVzY3JpcHRpb25zIGFyZSBjbGVhciwgY29uY2lzZSwgYW5kIHByb3ZpZGUgZW5vdWdoIGNvbnRleHQgYWJvdXQgdGhlIGltcGFjdHMgb2YgZWFjaCBzZXR0aW5nLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgY2xlYXIgZXhwbGFuYXRpb24gb2YgZWFjaCBvcHRpb24mIzM5O3MgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLCBwb3dlciBjb25zdW1wdGlvbiwgYW5kIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5IGlzc3Vlcy4gR29vZCBkb2N1bWVudGF0aW9uIG1ha2VzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSB3ZWxsLXVuZGVyc3Rvb2QgbW9kdWxlIGFuZCBhIGJsYWNrIGJveC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjb25maWcgUkRNQV9TSVdcbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O1NvZnR3YXJlIFJETUEgb3ZlciBUQ1AvSVAgKGlXQVJQKSBkcml2ZXJcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORFxuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkZJTklCQU5EX1ZJUlRfRE1BXG4gICA1Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDY6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHRUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBpV0FSUCBSRE1BIHRyYW5zcG9ydCBvdmVyXG4gICA5Olx0XHR0aGUgTGludXggVENQL0lQIG5ldHdvcmsgc3RhY2suIEl0IGVuYWJsZXMgYSBzeXN0ZW0gd2l0aCBhXG4gIDEwOlx0XHRzdGFuZGFyZCBFdGhlcm5ldCBhZGFwdGVyIHRvIGludGVyb3BlcmF0ZSB3aXRoIGEgaVdBUlBcbiAgMTE6XHRcdGFkYXB0ZXIgb3Igd2l0aCBhbm90aGVyIHN5c3RlbSBydW5uaW5nIHRoZSBTSVcgZHJpdmVyLlxuICAxMjpcdFx0KFNlZSBhbHNvIFJYRSB3aGljaCBpcyBhIHNpbWlsYXIgc29mdHdhcmUgZHJpdmVyIGZvciBSb0NFLilcbiAgMTM6XHRcbiAgMTQ6XHRcdFRoZSBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIHRoZSBMaW51eCBSRE1BIHN0YWNrIGFuZFxuICAxNTpcdFx0aW1wbGVtZW50cyBib3RoIGEga2VybmVsIGFuZCB1c2VyIHNwYWNlIFJETUEgdmVyYnMgQVBJLlxuICAxNjpcdFx0VGhlIHVzZXIgc3BhY2UgdmVyYnMgQVBJIHJlcXVpcmVzIGEgc3VwcG9ydFxuICAxNzpcdFx0bGlicmFyeSBuYW1lZCBsaWJzaXcgd2hpY2ggaXMgbG9hZGVkIGJ5IHRoZSBnZW5lcmljIHVzZXJcbiAgMTg6XHRcdHNwYWNlIHZlcmJzIEFQSSwgbGliaWJ2ZXJicy4gVG8gaW1wbGVtZW50IFJETUEgb3ZlclxuICAxOTpcdFx0VENQL0lQLCB0aGUgZHJpdmVyIGZ1cnRoZXIgaW50ZXJmYWNlcyB3aXRoIHRoZSBMaW51eFxuICAyMDpcdFx0aW4ta2VybmVsIFRDUCBzb2NrZXQgbGF5ZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqRXhhbWluaW5nIFJETUEgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBSRE1BIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYFJETUFfUlhFYCBhbmQgYFJETUFfU0lXYC4gSSBrbm93IHRob3NlIGFyZSByZWxhdGVkIHRvIHNwZWNpZmljIFJETUEgdHJhbnNwb3J0cy4gQW5kIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGBJTkZJTklCQU5EYCBzZXR0aW5nIGlzIGFsc28gZW5hYmxlZCwgYXMgdGhlc2UgYXJlIGxpa2VseSBkZXBlbmRlbnQgb24gaXQuIFRoZSB0YXNrLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGludm9sdmVzIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIGxvY2F0aW9uIG9mIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGBpYl9nZXRfZXRoX3NwZWVkYC4gRnJvbSBwYXN0IGV4cGVyaWVuY2UsIEkgcmVjYWxsIHRoYXQgYGliX2dldF9ldGhfc3BlZWRgIHJlc2lkZXMgaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmNgLCB3aGljaCBpcyBoZWxwZnVsLiBUbyB2ZXJpZnkgdGhlIHByZWNpc2UgZGVwZW5kZW5jaWVzIGZvciB0aGUgY29uZmlndXJhdGlvbiwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gRWl0aGVyIGBkcml2ZXJzL2luZmluaWJhbmQvY29yZS9LY29uZmlnYCBvciBwb3NzaWJseSBqdXN0IGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2Agc2hvdWxkIHNoZWQgbGlnaHQgb24gdGhlIGV4YWN0IHJlcXVpcmVtZW50cyBmb3IgZW5hYmxpbmcgdGhlc2UgZmVhdHVyZXMgYW5kIGNvbmZpcm0gdGhlIGxpbmsgd2l0aCBgSU5GSU5JQkFORGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIElORklOSUJBTkRcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IEhBU19ETUFcbiAgIDU6XHRcdGRlcGVuZHMgb24gTkVUXG4gICA2Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDc6XHRcdGRlcGVuZHMgb24gIUFMUEhBXG4gICA4Olx0XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbiAgIDk6XHRcdHNlbGVjdCBJUlFfUE9MTFxuICAxMDpcdFx0c2VsZWN0IERJTUxJQlxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBDb3JlIHN1cHBvcnQgZm9yIEluZmluaUJhbmQgKElCKS4gIE1ha2Ugc3VyZSB0byBhbHNvIHNlbGVjdFxuICAxMzpcdFx0ICBhbnkgcHJvdG9jb2xzIHlvdSB3aXNoIHRvIHVzZSBhcyB3ZWxsIGFzIGRyaXZlcnMgZm9yIHlvdXJcbiAgMTQ6XHRcdCAgSW5maW5pQmFuZCBoYXJkd2FyZS5cbiAgMTU6XHRcbiAgMTY6XHRpZiBJTkZJTklCQU5EXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgdXNlcnNwYWNlIE1BRCBzdXBwb3J0XCYjMzQ7XG4gIDIwOlx0XHRkZXBlbmRzIG9uIElORklOSUJBTkRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0OQoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSW5maW5pQmFuZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdC4gVGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBrZWVwIGluIG1pbmQgYXJlIGBJTkZJTklCQU5EYCwgYFJETUFfUlhFYCwgYW5kIGBSRE1BX1NJV2AuIFRoZSBhY3R1YWwgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkIGhlcmUgaXMgYGliX2dldF9ldGhfc3BlZWRgLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCB3aGljaCBpcyBhbHdheXMgYSBjcml0aWNhbCBmaXguCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zIGZvciB0ZXN0aW5nIGFuZCBmdXp6aW5nLiBUaGUgcGF0Y2ggbW92ZXMgYGRldl9wdXQobmV0ZGV2KWAgKmFmdGVyKiB0aGUgYWNjZXNzIHRvIGBuZXRkZXYtJmd0O25hbWVgIHdpdGhpbiBgaWJfZ2V0X2V0aF9zcGVlZGAsIHJpZ2h0PyBUaGlzIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBgaWJfZ2V0X2V0aF9zcGVlZGAgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHNvZnR3YXJlIFJETUEgZHJpdmVycywgc3BlY2lmaWNhbGx5IFJYRSBhbmQgU0lXLiBUaGlzIGlzIGZhbnRhc3RpYyBiZWNhdXNlIGl0IG1lYW5zIHdlIGNhbiBhY3R1YWxseSByZXByb2R1Y2UgYW5kIHRlc3QgdGhpcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIHNvbWV0aGluZyB0aGF0IGlzIG9mdGVuIGNoYWxsZW5naW5nIHdpdGggdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBuZXR3b3JraW5nIGNvZGUuCgpTbywgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIEkmIzM5O2Qgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gTXkgcmVhc29uaW5nIGlzIHRoZSBjbGFzc2ljICYjMzQ7Zml4IGZvciBhIHVzZS1hZnRlci1mcmVlLCByZWFjaGFibGUgdGhyb3VnaCBzb2Z0d2FyZSBSRE1BLCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMmIzM0OyBsaW5lLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBgaWJfZ2V0X2V0aF9zcGVlZGAsIG9idmlvdXNseS4gQW5kLCBvZiBjb3Vyc2UsIEkmIzM5O2xsIGVuYWJsZSB0aGUgYElORklOSUJBTkRgLCBgUkRNQV9SWEVgLCBhbmQgYFJETUFfU0lXYCBjb25maWd1cmF0aW9ucyB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYXJlIGFjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7UkRNQV9SWEUmIzM0OywKICAgICYjMzQ7UkRNQV9TSVcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpYl9nZXRfZXRoX3NwZWVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIGBpYl9nZXRfZXRoX3NwZWVkYCBieSBtb3ZpbmcgYGRldl9wdXQobmV0ZGV2KWAgYWZ0ZXIgYWNjZXNzaW5nIGBuZXRkZXYtXHUwMDNlbmFtZWAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZSBSRE1BIGRyaXZlcnMgKFJYRSBhbmQgU0lXKSB3aGVuIHF1ZXJ5aW5nIHBvcnQgYXR0cmlidXRlcywgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7LAogICAgJiMzNDtSRE1BX1JYRSYjMzQ7LAogICAgJiMzNDtSRE1BX1NJVyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2liX2dldF9ldGhfc3BlZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gYGliX2dldF9ldGhfc3BlZWRgIGJ5IG1vdmluZyBgZGV2X3B1dChuZXRkZXYpYCBhZnRlciBhY2Nlc3NpbmcgYG5ldGRldi1cdTAwM2VuYW1lYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHNvZnR3YXJlIFJETUEgZHJpdmVycyAoUlhFIGFuZCBTSVcpIHdoZW4gcXVlcnlpbmcgcG9ydCBhdHRyaWJ1dGVzLCBtYWtpbmcgaXQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIHdoZXJlIGBuZXRkZXYtXHUwMDNlbmFtZWAgd2FzIGFjY2Vzc2VkIGluIGEgYHByX3dhcm5gIHN0YXRlbWVudCBhZnRlciBgZGV2X3B1dChuZXRkZXYpYCBoYWQgYWxyZWFkeSBkcm9wcGVkIHRoZSByZWZlcmVuY2UgdG8gYG5ldGRldmAuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbG9naWMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZhNGUyZTBmZmI0YTVlYmEyMDBlY2FkNTI4ODM4N2FmNzJjMGZiNTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwNzozOToxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCmluZGV4IDg2ODExZDMxMDkyY2UuLjU3ZjEwOWM4MDg1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYwpAQCAtMjA1Miw4ICYjNDM7MjA1Miw2IEBAIGludCBpYl9nZXRfZXRoX3NwZWVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIHBvcnRfbnVtLCB1MTYgKnNwZWVkLCB1OCAqd2lkdGgpCiAJcmMgPSBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgJmFtcDtsa3NldHRpbmdzKTsKIAlydG5sX3VubG9jaygpOwogCi0JZGV2X3B1dChuZXRkZXYpOwotCiAJaWYgKCFyYyAmYW1wOyZhbXA7IGxrc2V0dGluZ3MuYmFzZS5zcGVlZCAhPSAodTMyKVNQRUVEX1VOS05PV04pIHsKIAkJbmV0ZGV2X3NwZWVkID0gbGtzZXR0aW5ncy5iYXNlLnNwZWVkOwogCX0gZWxzZSB7CkBAIC0yMDYzLDYgJiM0MzsyMDYxLDggQEAgaW50IGliX2dldF9ldGhfc3BlZWQoc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgcG9ydF9udW0sIHUxNiAqc3BlZWQsIHU4ICp3aWR0aCkKIAkJCQluZXRkZXYtJmd0O25hbWUsIG5ldGRldl9zcGVlZCk7CiAJfQogCiYjNDM7CWRldl9wdXQobmV0ZGV2KTsKJiM0MzsKIAlpYl9nZXRfd2lkdGhfYW5kX3NwZWVkKG5ldGRldl9zcGVlZCwgbGtzZXR0aW5ncy5sYW5lcywKIAkJCSAgICAgICBzcGVlZCwgd2lkdGgpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyCgkJCQkJCQlvdXRwdXQ6IDEyMAoJCQkJCQkJdGhvdWdodHM6IDUxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgU2FmZXR5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaWJfZ2V0X2V0aF9zcGVlZCgpYCBpbiBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgbW92aW5nIGBkZXZfcHV0KG5ldGRldilgIGRvd24gYSBmZXcgbGluZXMuIFByZXZpb3VzbHksIHRoZSBjb2RlIHNlcXVlbmNlIHdhcyBgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncygpYCwgYHJ0bmxfdW5sb2NrKClgLCBgZGV2X3B1dChuZXRkZXYpYCwgYW5kIHRoZW4gYSBjaGVjayBvbiB0aGUgYGxrc2V0dGluZ3NgIHN0cnVjdCBhbmQgYSB3YXJuaW5nIG1lc3NhZ2UgdGhhdCBtaWdodCB1c2UgYG5ldGRldi0mZ3Q7bmFtZWAuIE5vdywgaXQmIzM5O3MgYF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MoKWAsIGBydG5sX3VubG9jaygpYCwgdGhlIGNoZWNrLCAqdGhlbiogYGRldl9wdXQobmV0ZGV2KWAuCgpUaGUgYnVnIGlzIHByZXR0eSBjbGVhcjogYSB1c2UtYWZ0ZXItZnJlZS4gYGRldl9wdXQobmV0ZGV2KWAgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZSwgcG90ZW50aWFsbHkgZnJlZWluZyB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYG5ldGRldmAgcG9pbnRlci4gIFRoZW4sIGluc2lkZSB0aGF0IHdhcm5pbmcgbWVzc2FnZSwgc3BlY2lmaWNhbGx5IHRoZSBgcHJfd2FybmAgY2FsbCwgdGhlcmUmIzM5O3MgYSBkZXJlZmVyZW5jZSB0byBgbmV0ZGV2LSZndDtuYW1lYC4gIFRoYXQmIzM5O3MgdGV4dGJvb2sgdXNlLWFmdGVyLWZyZWUsIHBsYWluIGFuZCBzaW1wbGUuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucz8gV2UmIzM5O3JlIGNvbmNlcm5lZCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gQnV0IHRoZSBwYXRjaCBpcyBwdXJlbHkgYWJvdXQgKm1vdmluZyogYSBgZGV2X3B1dCgpYCBjYWxsIHRvIGZpeCBhbiBleGlzdGluZyB1c2UtYWZ0ZXItZnJlZS4gVGhlIGBsa3NldHRpbmdzYCBzdHJ1Y3QgaXMgcG9wdWxhdGVkIGJ5IGBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKClgLCBhbmQgdGhlIGxvZ2ljIGFyb3VuZCBpdCByZW1haW5zIHRoZSBzYW1lLiBObyBuZXcgbWVtb3J5IGlzIGJlaW5nIGluaXRpYWxpemVkIG9yIHJlYWQgaW4gYSBkaWZmZXJlbnQgd2F5IGJlY2F1c2Ugb2YgdGhlIHBhdGNoLiBTbywgbm8sIEkmIzM5O20gY29uZmlkZW50IHRoZXJlJiMzOTtzIG5vIG5lZWQgZm9yIEtNU0FOIGhlcmUuICBXZSYjMzk7cmUgb25seSBmaXhpbmcgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLCBub3QgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyB3aGVyZSBgbmV0ZGV2LVx1MDAzZW5hbWVgIHdhcyBhY2Nlc3NlZCBpbiBhIGBwcl93YXJuYCBzdGF0ZW1lbnQgYWZ0ZXIgYGRldl9wdXQobmV0ZGV2KWAgaGFkIGFscmVhZHkgZHJvcHBlZCB0aGUgcmVmZXJlbmNlIHRvIGBuZXRkZXZgLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYG5ldGRldi1cdTAwM2VuYW1lYCB3YXMgYWNjZXNzZWQgaW4gYSBgcHJfd2FybmAgc3RhdGVtZW50IGFmdGVyIGBkZXZfcHV0KG5ldGRldilgIGhhZCBhbHJlYWR5IGRyb3BwZWQgdGhlIHJlZmVyZW5jZSB0byBgbmV0ZGV2YC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBsb2dpYyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6MTkuODU2ODI0ODY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNDg5OTA3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiUkRNQV9SWEVcIixcbiAgICBcIlJETUFfU0lXXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWJfZ2V0X2V0aF9zcGVlZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYG5ldGRldi1cXHUwMDNlbmFtZWAgd2FzIGFjY2Vzc2VkIGluIGEgYHByX3dhcm5gIHN0YXRlbWVudCBhZnRlciBgZGV2X3B1dChuZXRkZXYpYCBoYWQgYWxyZWFkeSBkcm9wcGVkIHRoZSByZWZlcmVuY2UgdG8gYG5ldGRldmAuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbG9naWMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gYGliX2dldF9ldGhfc3BlZWRgIGJ5IG1vdmluZyBgZGV2X3B1dChuZXRkZXYpYCBhZnRlciBhY2Nlc3NpbmcgYG5ldGRldi1cXHUwMDNlbmFtZWAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZSBSRE1BIGRyaXZlcnMgKFJYRSBhbmQgU0lXKSB3aGVuIHF1ZXJ5aW5nIHBvcnQgYXR0cmlidXRlcywgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6MTkuODU2ODMwODY3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIyMDk1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYTRlMmUwZmZiNGE1ZWJhMjAwZWNhZDUyODgzODdhZjcyYzBmYjU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDA3OjM5OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jXFxuaW5kZXggODY4MTFkMzEwOTJjZS4uNTdmMTA5YzgwODVkYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY1xcbkBAIC0yMDUyLDggKzIwNTIsNiBAQCBpbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxcbiBcXHRyYyA9IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcXHUwMDI2bGtzZXR0aW5ncyk7XFxuIFxcdHJ0bmxfdW5sb2NrKCk7XFxuIFxcbi1cXHRkZXZfcHV0KG5ldGRldik7XFxuLVxcbiBcXHRpZiAoIXJjIFxcdTAwMjZcXHUwMDI2IGxrc2V0dGluZ3MuYmFzZS5zcGVlZCAhPSAodTMyKVNQRUVEX1VOS05PV04pIHtcXG4gXFx0XFx0bmV0ZGV2X3NwZWVkID0gbGtzZXR0aW5ncy5iYXNlLnNwZWVkO1xcbiBcXHR9IGVsc2Uge1xcbkBAIC0yMDYzLDYgKzIwNjEsOCBAQCBpbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxcbiBcXHRcXHRcXHRcXHRuZXRkZXYtXFx1MDAzZW5hbWUsIG5ldGRldl9zcGVlZCk7XFxuIFxcdH1cXG4gXFxuK1xcdGRldl9wdXQobmV0ZGV2KTtcXG4rXFxuIFxcdGliX2dldF93aWR0aF9hbmRfc3BlZWQobmV0ZGV2X3NwZWVkLCBsa3NldHRpbmdzLmxhbmVzLFxcbiBcXHRcXHRcXHQgICAgICAgc3BlZWQsIHdpZHRoKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM5OjIwLjMwOTg4NDg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzgxMzUwNjE4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiUkRNQV9SWEVcIixcbiAgICBcIlJETUFfU0lXXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWJfZ2V0X2V0aF9zcGVlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIGBpYl9nZXRfZXRoX3NwZWVkYCBieSBtb3ZpbmcgYGRldl9wdXQobmV0ZGV2KWAgYWZ0ZXIgYWNjZXNzaW5nIGBuZXRkZXYtXFx1MDAzZW5hbWVgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUgUkRNQSBkcml2ZXJzIChSWEUgYW5kIFNJVykgd2hlbiBxdWVyeWluZyBwb3J0IGF0dHJpYnV0ZXMsIG1ha2luZyBpdCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZhNGUyZTBmZmI0YTVlYmEyMDBlY2FkNTI4ODM4N2FmNzJjMGZiNThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwNzozOToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jXG5pbmRleCA4NjgxMWQzMTA5MmNlLi41N2YxMDljODA4NWRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY1xuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY1xuQEAgLTIwNTIsOCArMjA1Miw2IEBAIGludCBpYl9nZXRfZXRoX3NwZWVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIHBvcnRfbnVtLCB1MTYgKnNwZWVkLCB1OCAqd2lkdGgpXG4gXHRyYyA9IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcdTAwMjZsa3NldHRpbmdzKTtcbiBcdHJ0bmxfdW5sb2NrKCk7XG4gXG4tXHRkZXZfcHV0KG5ldGRldik7XG4tXG4gXHRpZiAoIXJjIFx1MDAyNlx1MDAyNiBsa3NldHRpbmdzLmJhc2Uuc3BlZWQgIT0gKHUzMilTUEVFRF9VTktOT1dOKSB7XG4gXHRcdG5ldGRldl9zcGVlZCA9IGxrc2V0dGluZ3MuYmFzZS5zcGVlZDtcbiBcdH0gZWxzZSB7XG5AQCAtMjA2Myw2ICsyMDYxLDggQEAgaW50IGliX2dldF9ldGhfc3BlZWQoc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgcG9ydF9udW0sIHUxNiAqc3BlZWQsIHU4ICp3aWR0aClcbiBcdFx0XHRcdG5ldGRldi1cdTAwM2VuYW1lLCBuZXRkZXZfc3BlZWQpO1xuIFx0fVxuIFxuK1x0ZGV2X3B1dChuZXRkZXYpO1xuK1xuIFx0aWJfZ2V0X3dpZHRoX2FuZF9zcGVlZChuZXRkZXZfc3BlZWQsIGxrc2V0dGluZ3MubGFuZXMsXG4gXHRcdFx0ICAgICAgIHNwZWVkLCB3aWR0aCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOToyMC4zMDk4ODY0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzI0MzEyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIGEgTmV0d29yayBEZXZpY2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmNgLiBSaWdodCBhd2F5LCBpdCBzZWVtcyB0byBpbnZvbHZlIGEgZmFpcmx5IHNwZWNpZmljIGZ1bmN0aW9uLCBgaWJfZ2V0X2V0aF9zcGVlZGAuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gc2ltcGx5IGJlIG1vdmluZyB0aGUgbGluZSBgZGV2X3B1dChuZXRkZXYpO2AgZG93biBhIGZldyBsaW5lcyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBNb3ZpbmcgYSBgZGV2X3B1dGAgY2FsbCBzdWdnZXN0cyBzb21lIHJlc291cmNlIG1hbmFnZW1lbnQgY29uY2VybiwgbGlrZWx5IHJlbGF0ZWQgdG8gcmVsZWFzaW5nIGEgbmV0d29yayBkZXZpY2UuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29udGV4dCBvZiBgaWJfZ2V0X2V0aF9zcGVlZGAgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGFjdCBpcy4gSSdsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGlzIGEgYnVnIGZpeCwgYW4gb3B0aW1pemF0aW9uLCBvciBwb3NzaWJseSBldmVuIGEgc3VidGxlIGNoYW5nZSB0aGF0IGNvdWxkIGhhdmUgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM5OjIzLjc0MjMyMDIwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTA1NzY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpYl9nZXRfZXRoX3NwZWVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYz0xOTU0PXN0YXRpYyB2b2lkIGliX2dldF93aWR0aF9hbmRfc3BlZWQodTMyIG5ldGRldl9zcGVlZCwgdTMyIGxhbmVzLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYy0yMDM2LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmM6MjAzNzppbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMtMjAzOC17XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jLTIwNzAtfVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmM6MjA3MTpFWFBPUlRfU1lNQk9MKGliX2dldF9ldGhfc3BlZWQpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMtMjA3Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6MjMuNzkxMzgzOTc3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MjU5MzI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJbmZpbmliYW5kIE5JQyBTcGVlZCBEZXRlY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJbmZpbmliYW5kIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgaWJfZ2V0X2V0aF9zcGVlZGAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmNgLCBmaWd1cmVzIG91dCB0aGUgRXRoZXJuZXQgc3BlZWQgb2YgdGhlIGF0dGFjaGVkIGhhcmR3YXJlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgYW5kIHRoZW4gSSdsbCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBhbmQgZmluYWxseSBzdGFydCBtYWtpbmcgaW5mZXJlbmNlcy4gVGhpcyBzZWVtcyBsaWtlIGEgY29yZSBmdW5jdGlvbiwgc28gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgaW50byB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgUEhZIGRyaXZlcnMsIHBlcmhhcHMgd2l0aCBzb21lIGNsZXZlciBhdXRvLW5lZ290aWF0aW9uIGhhbmRsaW5nLiBJJ20gYWxzbyBjdXJpb3VzIGlmIGl0IGhhbmRsZXMgZGlmZmVyZW50IEV0aGVybmV0IGdlbmVyYXRpb25zIGFuZCB3aGF0IGVycm9yIGhhbmRsaW5nIGlzIGluIHBsYWNlLiBUaW1lIHRvIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOToyNi44ODM5ODE5ODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjg4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDM3LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDM3OlxcdGludCBpYl9nZXRfZXRoX3NwZWVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIHBvcnRfbnVtLCB1MTYgKnNwZWVkLCB1OCAqd2lkdGgpXFxuMjAzODpcXHR7XFxuMjAzOTpcXHRcXHRpbnQgcmM7XFxuMjA0MDpcXHRcXHR1MzIgbmV0ZGV2X3NwZWVkO1xcbjIwNDE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4yMDQyOlxcdFxcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGxrc2V0dGluZ3MgPSB7fTtcXG4yMDQzOlxcdFxcbjIwNDQ6XFx0XFx0aWYgKHJkbWFfcG9ydF9nZXRfbGlua19sYXllcihkZXYsIHBvcnRfbnVtKSAhPSBJQl9MSU5LX0xBWUVSX0VUSEVSTkVUKVxcbjIwNDU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjA0NjpcXHRcXG4yMDQ3OlxcdFxcdG5ldGRldiA9IGliX2RldmljZV9nZXRfbmV0ZGV2KGRldiwgcG9ydF9udW0pO1xcbjIwNDg6XFx0XFx0aWYgKCFuZXRkZXYpXFxuMjA0OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4yMDUwOlxcdFxcbjIwNTE6XFx0XFx0cnRubF9sb2NrKCk7XFxuMjA1MjpcXHRcXHRyYyA9IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcXHUwMDI2bGtzZXR0aW5ncyk7XFxuMjA1MzpcXHRcXHRydG5sX3VubG9jaygpO1xcbjIwNTQ6XFx0XFxuMjA1NTpcXHRcXHRpZiAoIXJjIFxcdTAwMjZcXHUwMDI2IGxrc2V0dGluZ3MuYmFzZS5zcGVlZCAhPSAodTMyKVNQRUVEX1VOS05PV04pIHtcXG4yMDU2OlxcdFxcdFxcdG5ldGRldl9zcGVlZCA9IGxrc2V0dGluZ3MuYmFzZS5zcGVlZDtcXG4yMDU3OlxcdFxcdH0gZWxzZSB7XFxuMjA1ODpcXHRcXHRcXHRuZXRkZXZfc3BlZWQgPSBTUEVFRF8xMDAwO1xcbjIwNTk6XFx0XFx0XFx0aWYgKHJjKVxcbjIwNjA6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiJXMgc3BlZWQgaXMgdW5rbm93biwgZGVmYXVsdGluZyB0byAldVxcXFxuXFxcIixcXG4yMDYxOlxcdFxcdFxcdFxcdFxcdG5ldGRldi1cXHUwMDNlbmFtZSwgbmV0ZGV2X3NwZWVkKTtcXG4yMDYyOlxcdFxcdH1cXG4yMDYzOlxcdFxcbjIwNjQ6XFx0XFx0ZGV2X3B1dChuZXRkZXYpO1xcbjIwNjU6XFx0XFxuMjA2NjpcXHRcXHRpYl9nZXRfd2lkdGhfYW5kX3NwZWVkKG5ldGRldl9zcGVlZCwgbGtzZXR0aW5ncy5sYW5lcyxcXG4yMDY3OlxcdFxcdFxcdFxcdCAgICAgICBzcGVlZCwgd2lkdGgpO1xcbjIwNjg6XFx0XFxuMjA2OTpcXHRcXHRyZXR1cm4gMDtcXG4yMDcwOlxcdH1cXG4yMDcxOlxcdEVYUE9SVF9TWU1CT0woaWJfZ2V0X2V0aF9zcGVlZCk7XFxuMjA3MjpcXHRcXG4yMDczOlxcdGludCBpYl9tb2RpZnlfcXAoc3RydWN0IGliX3FwICpxcCxcXG4yMDc0OlxcdFxcdFxcdCBzdHJ1Y3QgaWJfcXBfYXR0ciAqcXBfYXR0cixcXG4yMDc1OlxcdFxcdFxcdCBpbnQgcXBfYXR0cl9tYXNrKVxcbjIwNzY6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOToyNi44ODQzMTQ0MjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzk5NTcyODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBBIFVzZS1BZnRlci1GcmVlIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIG1vdmluZyB0aGUgYGRldl9wdXQobmV0ZGV2KWAgY2FsbC4gQWgsIEkgc2VlIHdoeS4gVGhleSdyZSBkb2luZyB0aGlzIGJlY2F1c2UgdGhlIGNvZGUgaW5zaWRlIHRoYXQgYGlmICghcmMgLi4uKWAgYmxvY2ssIHNwZWNpZmljYWxseSBpbiB0aGUgYGVsc2VgIGJyYW5jaCB3aXRoIHRoYXQgYHByX3dhcm5gLCBhY2Nlc3NlcyBgbmV0ZGV2LVx1MDAzZW5hbWVgLiBJZiBgZGV2X3B1dChuZXRkZXYpYCBoYXBwZW5zICpiZWZvcmUqIHRoYXQsIHdlJ3JlIGxvb2tpbmcgYXQgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBgbmV0ZGV2YCBjb3VsZCBiZSBmcmVlZCByaWdodCBiZWZvcmUgd2UgdHJ5IHRvIGFjY2VzcyBpdHMgYG5hbWVgIGZpZWxkLCB3aGljaCBpcywgb2J2aW91c2x5LCBiYWQgbmV3cy5cblxuSG1tLCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgbGVnaXRpbWF0ZSB1c2UtYWZ0ZXItZnJlZSBidWcgdGhhdCdzIGJlaW5nIGZpeGVkIGluIGBpYl9nZXRfZXRoX3NwZWVkYC4gQW5kLCBiZWNhdXNlIGBpYl9nZXRfZXRoX3NwZWVkYCBpcyBleHBvcnRlZCwgaXQncyB1c2VkIGJ5IGRyaXZlcnMuIFRoaXMgaXMgaW1wb3J0YW50OiBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZHJpdmVycyBhcmUgYWN0dWFsbHkgY2FsbGluZyBgaWJfZ2V0X2V0aF9zcGVlZGAuIFRpbWUgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBhbmQgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MjgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOTozMS4yODM4OTEyNjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4MTE3MTkyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpYl9nZXRfZXRoX3NwZWVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jPTE5NTQ9c3RhdGljIHZvaWQgaWJfZ2V0X3dpZHRoX2FuZF9zcGVlZCh1MzIgbmV0ZGV2X3NwZWVkLCB1MzIgbGFuZXMsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jLTIwMzYtXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYzoyMDM3OmludCBpYl9nZXRfZXRoX3NwZWVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIHBvcnRfbnVtLCB1MTYgKnNwZWVkLCB1OCAqd2lkdGgpXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYy0yMDM4LXtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMtMjA3MC19XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYzoyMDcxOkVYUE9SVF9TWU1CT0woaWJfZ2V0X2V0aF9zcGVlZCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYy0yMDcyLVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz0yOTE9aW50IGJueHRfcmVfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnRfbnVtLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0zMjctXFx0cG9ydF9hdHRyLVxcdTAwM2Vpbml0X3R5cGVfcmVwbHkgPSAwO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MzI4OlxcdHJjID0gaWJfZ2V0X2V0aF9zcGVlZChcXHUwMDI2cmRldi1cXHUwMDNlaWJkZXYsIHBvcnRfbnVtLCBcXHUwMDI2cG9ydF9hdHRyLVxcdTAwM2VhY3RpdmVfc3BlZWQsXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0zMjktXFx0XFx0XFx0ICAgICAgXFx1MDAyNnBvcnRfYXR0ci1cXHUwMDNlYWN0aXZlX3dpZHRoKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9wcm92aWRlci5jPTMwNj1zdGF0aWMgaW50IGM0aXdfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcHJvdmlkZXIuYy0zMTAtXFx0cHJfZGVidWcoXFxcImliZGV2ICVwXFxcXG5cXFwiLCBpYmRldik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Byb3ZpZGVyLmM6MzExOlxcdHJldCA9IGliX2dldF9ldGhfc3BlZWQoaWJkZXYsIHBvcnQsIFxcdTAwMjZwcm9wcy1cXHUwMDNlYWN0aXZlX3NwZWVkLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9wcm92aWRlci5jLTMxMi1cXHRcXHRcXHQgICAgICAgXFx1MDAyNnByb3BzLVxcdTAwM2VhY3RpdmVfd2lkdGgpO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM9MzgwPWludCBlcmRtYV9xdWVyeV9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1MzIgcG9ydCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTQwMS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYzo0MDI6XFx0aWJfZ2V0X2V0aF9zcGVlZChpYmRldiwgcG9ydCwgXFx1MDAyNmF0dHItXFx1MDAzZWFjdGl2ZV9zcGVlZCwgXFx1MDAyNmF0dHItXFx1MDAzZWFjdGl2ZV93aWR0aCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmMtNDAzLVxcdGF0dHItXFx1MDAzZW1heF9tdHUgPSBpYl9tdHVfaW50X3RvX2VudW0obmRldi1cXHUwMDNlbXR1KTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfbWFpbi5jPTI4NT1zdGF0aWMgaW50IGhuc19yb2NlX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJfZGV2LCB1MzIgcG9ydF9udW0sXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX21haW4uYy0zMDQtXFx0cHJvcHMtXFx1MDAzZXBrZXlfdGJsX2xlbiA9IDE7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9tYWluLmM6MzA1OlxcdHJldCA9IGliX2dldF9ldGhfc3BlZWQoaWJfZGV2LCBwb3J0X251bSwgXFx1MDAyNnByb3BzLVxcdTAwM2VhY3RpdmVfc3BlZWQsXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9tYWluLmMtMzA2LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2cHJvcHMtXFx1MDAzZWFjdGl2ZV93aWR0aCk7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfaWJkZXYuYz04MD1zdGF0aWMgaW50IGlvbmljX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2liZGV2LmMtMTE0LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19pYmRldi5jOjExNTpcXHRyZXR1cm4gaWJfZ2V0X2V0aF9zcGVlZChpYmRldiwgcG9ydCxcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfaWJkZXYuYy0xMTYtXFx0XFx0XFx0XFx0XFx1MDAyNmF0dHItXFx1MDAzZWFjdGl2ZV9zcGVlZCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jPTg4PXN0YXRpYyBpbnQgaXJkbWFfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0xMDktXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM6MTEwOlxcdGliX2dldF9ldGhfc3BlZWQoaWJkZXYsIHBvcnQsIFxcdTAwMjZwcm9wcy1cXHUwMDNlYWN0aXZlX3NwZWVkLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTExMS1cXHRcXHRcXHQgXFx1MDAyNnByb3BzLVxcdTAwM2VhY3RpdmVfd2lkdGgpO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFpbi5jPTYxMT1pbnQgbWFuYV9pYl9xdWVyeV9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1MzIgcG9ydCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYy02MzEtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFpbi5jOjYzMjpcXHRpYl9nZXRfZXRoX3NwZWVkKGliZGV2LCBwb3J0LCBcXHUwMDI2cHJvcHMtXFx1MDAzZWFjdGl2ZV9zcGVlZCwgXFx1MDAyNnByb3BzLVxcdTAwM2VhY3RpdmVfd2lkdGgpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYy02MzMtXFx0cHJvcHMtXFx1MDAzZXBrZXlfdGJsX2xlbiA9IDE7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvdXNuaWNfaWJfdmVyYnMuYz0zMzA9aW50IHVzbmljX2liX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmMtMzM2LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody91c25pYy91c25pY19pYl92ZXJicy5jOjMzNzpcXHRpZiAoaWJfZ2V0X2V0aF9zcGVlZChpYmRldiwgcG9ydCwgXFx1MDAyNnByb3BzLVxcdTAwM2VhY3RpdmVfc3BlZWQsXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmMtMzM4LVxcdFxcdFxcdCAgICAgXFx1MDAyNnByb3BzLVxcdTAwM2VhY3RpdmVfd2lkdGgpKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmMtMzQxLVxcdC8qXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmM6MzQyOlxcdCAqIHVzZGV2X2xvY2sgaXMgYWNxdWlyZWQgYWZ0ZXIgKGFuZCBub3QgYmVmb3JlKSBpYl9nZXRfZXRoX3NwZWVkIGNhbGxcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvdXNuaWNfaWJfdmVyYnMuYzozNDM6XFx0ICogYmVjYXVzZSBhY3F1aXJpbmcgcnRubF9sb2NrIGluIGliX2dldF9ldGhfc3BlZWQsIHdoaWxlIGhvbGRpbmdcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvdXNuaWNfaWJfdmVyYnMuYy0zNDQtXFx0ICogdXNkZXZfbG9jayBjb3VsZCBsZWFkIHRvIGEgZGVhZGxvY2suXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jPTM0PXN0YXRpYyBpbnQgcnhlX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jLTU1LVxcdG11dGV4X2xvY2soXFx1MDAyNnJ4ZS1cXHUwMDNldXNkZXZfbG9jayk7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYzo1NjpcXHRyZXQgPSBpYl9nZXRfZXRoX3NwZWVkKGliZGV2LCBwb3J0X251bSwgXFx1MDAyNmF0dHItXFx1MDAzZWFjdGl2ZV9zcGVlZCxcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jLTU3LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2YXR0ci1cXHUwMDNlYWN0aXZlX3dpZHRoKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3ZlcmJzLmM9MTczPWludCBzaXdfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICpiYXNlX2RldiwgdTMyIHBvcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd192ZXJicy5jLTE4MC1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd192ZXJicy5jOjE4MTpcXHRydiA9IGliX2dldF9ldGhfc3BlZWQoYmFzZV9kZXYsIHBvcnQsIFxcdTAwMjZhdHRyLVxcdTAwM2VhY3RpdmVfc3BlZWQsXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfdmVyYnMuYy0xODItXFx0XFx0XFx0IFxcdTAwMjZhdHRyLVxcdTAwM2VhY3RpdmVfd2lkdGgpO1xcbi0tXFxuaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmg9NDc2MT12b2lkIGliX2RyYWluX3FwKHN0cnVjdCBpYl9xcCAqcXApO1xcbmluY2x1ZGUvcmRtYS9pYl92ZXJicy5oLTQ3NjItXFxuaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmg6NDc2MzppbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCxcXG5pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaC00NzY0LVxcdFxcdCAgICAgdTggKndpZHRoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6MzQuMDY1MDcxMTI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3OTc2MDg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGByeGVfcXVlcnlfcG9ydGAgYW5kIGBzaXdfcXVlcnlfcG9ydGAgYXJlIHRoZSBlbnRyeSBwb2ludHMuIFRoZXkncmUgc29mdHdhcmUgUkRNQSBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgUlhFIGFuZCBTSVcsIGFuZCBJIGtub3cgdGhlc2UgYXJlIG9mdGVuIGZvdW5kIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSW50ZXJlc3RpbmcuIFRoZW4gSSBzcG90IGBpYl9nZXRfZXRoX3NwZWVkYCwgd2hpY2ggaXMgZml4aW5nIGEgdXNlLWFmdGVyLWZyZWUgYnVnLiBUaGF0IGdyYWJzIG15IGF0dGVudGlvbiDigJMgYSBjcml0aWNhbCBidWcgZml4IGluIGEgY29yZSBJbmZpbmliYW5kIGZ1bmN0aW9uPyBBYnNvbHV0ZWx5LCB0aGlzIGlzIHNvbWV0aGluZyB3b3J0aCBzZXJpb3VzIGludmVzdGlnYXRpb24gYW5kIGZ1enppbmcsIGdpdmVuIGl0cyBpbXBvcnRhbmNlLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZm9jdXMgb24gdGhvc2UgdGhyZWUgZnVuY3Rpb25zOiBgaWJfZ2V0X2V0aF9zcGVlZGAsIGByeGVfcXVlcnlfcG9ydGAsIGFuZCBgc2l3X3F1ZXJ5X3BvcnRgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBgaWJfZ2V0X2V0aF9zcGVlZGAgaXMgaW52b2x2ZWQgaW4gKnF1ZXJ5aW5nKiBwb3J0IGF0dHJpYnV0ZXMuIEl0J3MgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZXNlIG90aGVyIGZ1bmN0aW9ucywgd2hpY2ggbWFrZXMgaXQgZXZlbiBtb3JlIGFwcGVhbGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXMgdGhlIGF0dHJpYnV0ZXMgY291bGQgYmUgbWFuaXB1bGF0ZWQgaW4gd2F5cyB0byB0cmlnZ2VyIHRoZSBidWcuIEkgdGhpbmsgSSdsbCBzdGFydCB3aXRoIHRha2luZyBhIGNsb3NlciBsb29rIGF0IGByeGVfcXVlcnlfcG9ydGAgZmlyc3QsIHRvIHNlZSBob3cgaXQgY2FsbHMgYGliX2dldF9ldGhfc3BlZWRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDU5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM5OjM4Ljc0NDgzNTE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjkxNjA4NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnhlX3F1ZXJ5X3BvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYz0xOD1zdGF0aWMgaW50IHJ4ZV9xdWVyeV9kZXZpY2Uoc3RydWN0IGliX2RldmljZSAqaWJkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jLTMzLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmM6MzQ6c3RhdGljIGludCByeGVfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldixcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jLTM1LVxcdFxcdFxcdCAgdTMyIHBvcnRfbnVtLCBzdHJ1Y3QgaWJfcG9ydF9hdHRyICphdHRyKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYz0xNDU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyByeGVfZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMtMTUwMi1cXHQucXVlcnlfZ2lkID0gcnhlX3F1ZXJ5X2dpZCxcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jOjE1MDM6XFx0LnF1ZXJ5X3BvcnQgPSByeGVfcXVlcnlfcG9ydCxcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jLTE1MDQtXFx0LnF1ZXJ5X3FwID0gcnhlX3F1ZXJ5X3FwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOTozOS4wMTQwMDE3MDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk1OTc2OTczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSWEUgUXVlcnkgUG9ydCBDb25maWd1cmF0aW9uOiBBIFF1aWNrIENoZWNrKipcblxuT2theSwgc28gYHJ4ZV9xdWVyeV9wb3J0YCBpcyBhIGRldmljZSBvcGVyYXRpb24g4oCTIGdvdCBpdC4gTm93LCB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGRvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyB0aGluZyBydW5zIGFzIGV4cGVjdGVkPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgUlhFLXNwZWNpZmljIGFuZCBTSVctc3BlY2lmaWMgcmVxdWlyZW1lbnRzLiBGb3IgUlhFLCB0aGF0J3Mgb2J2aW91c2x5IGBSRE1BX1JYRWAuIEFuZCBmb3IgU0lXLCBpdCdzIGBSRE1BX1NJV2AuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgc28gZmFyLiBUbyBiZSBleHRyYSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZ2AuIEl04oCZcyBhbHdheXMgZ29vZCB0byBjb25maXJtIGFzc3VtcHRpb25zIHdpdGggdGhlIGRlZmluaXRpdmUgc291cmNlLCBldmVuIGZvciBzb21ldGhpbmcgdGhhdCAqc2VlbXMqIGJhc2ljLiBBIHF1aWNrIGNoZWNrIG9mIHRoYXQgS2NvbmZpZyBzaG91bGQgZ2l2ZSBtZSBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgdG8gYXZvaWQgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MjgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOTo0My45NzM3NzYyNTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgUkRNQV9SWEVcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTb2Z0d2FyZSBSRE1BIG92ZXIgRXRoZXJuZXQgKFJvQ0UpIGRyaXZlclxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBQQ0kgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiA2NEJJVFxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBJTkZJTklCQU5EX1ZJUlRfRE1BXFxuICAgNjpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0VGhpcyBkcml2ZXIgaW1wbGVtZW50cyB0aGUgSW5maW5pQmFuZCBSRE1BIHRyYW5zcG9ydCBvdmVyXFxuICAxMDpcXHRcXHR0aGUgTGludXggbmV0d29yayBzdGFjay4gSXQgZW5hYmxlcyBhIHN5c3RlbSB3aXRoIGFcXG4gIDExOlxcdFxcdHN0YW5kYXJkIEV0aGVybmV0IGFkYXB0ZXIgdG8gaW50ZXJvcGVyYXRlIHdpdGggYSBSb0NFXFxuICAxMjpcXHRcXHRhZGFwdGVyIG9yIHdpdGggYW5vdGhlciBzeXN0ZW0gcnVubmluZyB0aGUgUlhFIGRyaXZlci5cXG4gIDEzOlxcdFxcdERvY3VtZW50YXRpb24gb24gSW5maW5pQmFuZCBhbmQgUm9DRSBjYW4gYmUgZG93bmxvYWRlZCBhdFxcbiAgMTQ6XFx0XFx0d3d3LmluZmluaWJhbmR0YS5vcmcgYW5kIHd3dy5vcGVuZmFicmljcy5vcmcuIChTZWUgYWxzb1xcbiAgMTU6XFx0XFx0c2l3IHdoaWNoIGlzIGEgc2ltaWxhciBzb2Z0d2FyZSBkcml2ZXIgZm9yIGlXQVJQLilcXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0VGhlIGRyaXZlciBpcyBzcGxpdCBpbnRvIHR3byBsYXllcnMsIG9uZSBpbnRlcmZhY2VzIHdpdGggdGhlXFxuICAxODpcXHRcXHRMaW51eCBSRE1BIHN0YWNrIGFuZCBpbXBsZW1lbnRzIGEga2VybmVsIG9yIHVzZXIgc3BhY2VcXG4gIDE5OlxcdFxcdHZlcmJzIEFQSS4gVGhlIHVzZXIgc3BhY2UgdmVyYnMgQVBJIHJlcXVpcmVzIGEgc3VwcG9ydFxcbiAgMjA6XFx0XFx0bGlicmFyeSBuYW1lZCBsaWJyeGUgd2hpY2ggaXMgbG9hZGVkIGJ5IHRoZSBnZW5lcmljIHVzZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6NDMuOTczODYwNTA2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjc1OTYyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBTSVcgS2NvbmZpZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGZvciBTSVcgKFNvY2tldC1iYXNlZCBJbmZpbmlCYW5kKS4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgU0lXIGRyaXZlciBhcmUgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBJbmZpbmlCYW5kIHN0YWNrLlxuXG5GaXJzdCwgSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBgYm9vbGAgYW5kIGB0cmlzdGF0ZWAgb3B0aW9ucyBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBkcml2ZXIgYW5kIHBvc3NpYmx5IGZpbmUtdHVuaW5nIGl0cyBmZWF0dXJlcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9ucyDigJMgYnVmZmVyIHNpemVzLCBjYWNoaW5nIHNldHRpbmdzLCBtYXliZSBldmVuIHNvbWUgb3B0aW9ucyByZWxhdGVkIHRvIG9mZmxvYWRpbmcuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaWYgdGhlcmUgYXJlIGRlYnVnIG9yIHRyYWNpbmcgZmxhZ3MsIGFzIHRob3NlIGFyZSBjcml0aWNhbCBmb3IgZGlhZ25vc2luZyBhbnkgcGVyZm9ybWFuY2UgaXNzdWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cbkdpdmVuIHRoYXQgaXQncyBTSVcsIEknbGwgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0LWJhc2VkIHRyYW5zcG9ydC1sYXllciBvcHRpbWl6YXRpb25zLiBBcmUgdGhlcmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBidWZmZXIgcG9vbCBtYW5hZ2VtZW50LCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgdGltZW91dHMsIGNvbmdlc3Rpb24gY29udHJvbCBiZWhhdmlvciwgb3IgbWF5YmUgZXZlbiBUQ1AvVURQIHByb3RvY29sIHNwZWNpZmljIHR3ZWFrcz8gVW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugb3B0aW9ucyBpbmZsdWVuY2UgcGVyZm9ybWFuY2UgY29tcGFyZWQgdG8gbmF0aXZlIEluZmluaUJhbmQgaXMgY3J1Y2lhbC5cblxuSeKAmW0gYWxzbyBhc3N1bWluZyB0aGVyZSB3aWxsIGJlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBzcGVjaWZpZWQsIGxpbmtpbmcgdGhlIFNJVyBvcHRpb25zIHRvIG90aGVyIEluZmluaUJhbmQgY29tcG9uZW50cyBvciwgcG90ZW50aWFsbHksIG5ldHdvcmsgc3RhY2sgZmVhdHVyZXMuIFRoZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIHNlZSBpZiBhbnkgcHJlcmVxdWlzaXRlcyBsaWtlIHNwZWNpZmljIGhhcmR3YXJlIGNhcGFiaWxpdGllcywgUkRNQSBmZWF0dXJlcywgb3Iga2VybmVsIHZlcnNpb25zIG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIGEgY2VydGFpbiBvcHRpb24gdG8gYmUgdmlhYmxlLiBJdOKAmXMgYWxzbyBpbXBvcnRhbnQgdG8gaWRlbnRpZnkgd2hhdCBvdGhlciBLY29uZmlnIGZpbGVzIHRoaXMgb25lIHB1bGxzIGluIG9yIHJlbGllcyBvbi5cblxuRmluYWxseSwgSSB3aWxsIGJlIHNjYW5uaW5nIGZvciBkZXRhaWxlZCBoZWxwIHRleHQuIEhvcGVmdWxseSwgdGhlIGRlc2NyaXB0aW9ucyBhcmUgY2xlYXIsIGNvbmNpc2UsIGFuZCBwcm92aWRlIGVub3VnaCBjb250ZXh0IGFib3V0IHRoZSBpbXBhY3RzIG9mIGVhY2ggc2V0dGluZy4gSSdtIGxvb2tpbmcgZm9yIGEgY2xlYXIgZXhwbGFuYXRpb24gb2YgZWFjaCBvcHRpb24ncyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsIHBvd2VyIGNvbnN1bXB0aW9uLCBhbmQgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgaXNzdWVzLiBHb29kIGRvY3VtZW50YXRpb24gbWFrZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIHdlbGwtdW5kZXJzdG9vZCBtb2R1bGUgYW5kIGEgYmxhY2sgYm94LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDQzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOTo0OC4yNDE0NjA0OTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIFJETUFfU0lXXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU29mdHdhcmUgUkRNQSBvdmVyIFRDUC9JUCAoaVdBUlApIGRyaXZlclxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORklOSUJBTkRfVklSVF9ETUFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDY6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdFRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIGlXQVJQIFJETUEgdHJhbnNwb3J0IG92ZXJcXG4gICA5OlxcdFxcdHRoZSBMaW51eCBUQ1AvSVAgbmV0d29yayBzdGFjay4gSXQgZW5hYmxlcyBhIHN5c3RlbSB3aXRoIGFcXG4gIDEwOlxcdFxcdHN0YW5kYXJkIEV0aGVybmV0IGFkYXB0ZXIgdG8gaW50ZXJvcGVyYXRlIHdpdGggYSBpV0FSUFxcbiAgMTE6XFx0XFx0YWRhcHRlciBvciB3aXRoIGFub3RoZXIgc3lzdGVtIHJ1bm5pbmcgdGhlIFNJVyBkcml2ZXIuXFxuICAxMjpcXHRcXHQoU2VlIGFsc28gUlhFIHdoaWNoIGlzIGEgc2ltaWxhciBzb2Z0d2FyZSBkcml2ZXIgZm9yIFJvQ0UuKVxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHRUaGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgTGludXggUkRNQSBzdGFjayBhbmRcXG4gIDE1OlxcdFxcdGltcGxlbWVudHMgYm90aCBhIGtlcm5lbCBhbmQgdXNlciBzcGFjZSBSRE1BIHZlcmJzIEFQSS5cXG4gIDE2OlxcdFxcdFRoZSB1c2VyIHNwYWNlIHZlcmJzIEFQSSByZXF1aXJlcyBhIHN1cHBvcnRcXG4gIDE3OlxcdFxcdGxpYnJhcnkgbmFtZWQgbGlic2l3IHdoaWNoIGlzIGxvYWRlZCBieSB0aGUgZ2VuZXJpYyB1c2VyXFxuICAxODpcXHRcXHRzcGFjZSB2ZXJicyBBUEksIGxpYmlidmVyYnMuIFRvIGltcGxlbWVudCBSRE1BIG92ZXJcXG4gIDE5OlxcdFxcdFRDUC9JUCwgdGhlIGRyaXZlciBmdXJ0aGVyIGludGVyZmFjZXMgd2l0aCB0aGUgTGludXhcXG4gIDIwOlxcdFxcdGluLWtlcm5lbCBUQ1Agc29ja2V0IGxheWVyLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOTo0OC4yNDE1NDQzODJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MTMzMTI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkV4YW1pbmluZyBSRE1BIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBzZWUgd2UncmUgZGVhbGluZyB3aXRoIFJETUEgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBgUkRNQV9SWEVgIGFuZCBgUkRNQV9TSVdgLiBJIGtub3cgdGhvc2UgYXJlIHJlbGF0ZWQgdG8gc3BlY2lmaWMgUkRNQSB0cmFuc3BvcnRzLiBBbmQgSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgYElORklOSUJBTkRgIHNldHRpbmcgaXMgYWxzbyBlbmFibGVkLCBhcyB0aGVzZSBhcmUgbGlrZWx5IGRlcGVuZGVudCBvbiBpdC4gVGhlIHRhc2ssIGFzIEkgdW5kZXJzdGFuZCBpdCwgaW52b2x2ZXMgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgbG9jYXRpb24gb2YgYSBzcGVjaWZpYyBmdW5jdGlvbiwgYGliX2dldF9ldGhfc3BlZWRgLiBGcm9tIHBhc3QgZXhwZXJpZW5jZSwgSSByZWNhbGwgdGhhdCBgaWJfZ2V0X2V0aF9zcGVlZGAgcmVzaWRlcyBpbiBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY2AsIHdoaWNoIGlzIGhlbHBmdWwuIFRvIHZlcmlmeSB0aGUgcHJlY2lzZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBjb25maWd1cmF0aW9uLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBFaXRoZXIgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL0tjb25maWdgIG9yIHBvc3NpYmx5IGp1c3QgYGRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnYCBzaG91bGQgc2hlZCBsaWdodCBvbiB0aGUgZXhhY3QgcmVxdWlyZW1lbnRzIGZvciBlbmFibGluZyB0aGVzZSBmZWF0dXJlcyBhbmQgY29uZmlybSB0aGUgbGluayB3aXRoIGBJTkZJTklCQU5EYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI0OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6NTEuOTEyODc5MDE5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIElORklOSUJBTkRcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBIQVNfRE1BXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uICFBTFBIQVxcbiAgIDg6XFx0XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuICAgOTpcXHRcXHRzZWxlY3QgSVJRX1BPTExcXG4gIDEwOlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgQ29yZSBzdXBwb3J0IGZvciBJbmZpbmlCYW5kIChJQikuICBNYWtlIHN1cmUgdG8gYWxzbyBzZWxlY3RcXG4gIDEzOlxcdFxcdCAgYW55IHByb3RvY29scyB5b3Ugd2lzaCB0byB1c2UgYXMgd2VsbCBhcyBkcml2ZXJzIGZvciB5b3VyXFxuICAxNDpcXHRcXHQgIEluZmluaUJhbmQgaGFyZHdhcmUuXFxuICAxNTpcXHRcXG4gIDE2OlxcdGlmIElORklOSUJBTkRcXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcXG4gIDE5OlxcdFxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIHVzZXJzcGFjZSBNQUQgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gSU5GSU5JQkFORFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOTo1MS45MTI5NzY0MzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ1MTcyODIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJbmZpbmlCYW5kIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8ga2VlcCBpbiBtaW5kIGFyZSBgSU5GSU5JQkFORGAsIGBSRE1BX1JYRWAsIGFuZCBgUkRNQV9TSVdgLiBUaGUgYWN0dWFsIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkIGhlcmUgaXMgYGliX2dldF9ldGhfc3BlZWRgLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCB3aGljaCBpcyBhbHdheXMgYSBjcml0aWNhbCBmaXguXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGltcGxpY2F0aW9ucyBmb3IgdGVzdGluZyBhbmQgZnV6emluZy4gVGhlIHBhdGNoIG1vdmVzIGBkZXZfcHV0KG5ldGRldilgICphZnRlciogdGhlIGFjY2VzcyB0byBgbmV0ZGV2LVx1MDAzZW5hbWVgIHdpdGhpbiBgaWJfZ2V0X2V0aF9zcGVlZGAsIHJpZ2h0PyBUaGlzIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBgaWJfZ2V0X2V0aF9zcGVlZGAgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHNvZnR3YXJlIFJETUEgZHJpdmVycywgc3BlY2lmaWNhbGx5IFJYRSBhbmQgU0lXLiBUaGlzIGlzIGZhbnRhc3RpYyBiZWNhdXNlIGl0IG1lYW5zIHdlIGNhbiBhY3R1YWxseSByZXByb2R1Y2UgYW5kIHRlc3QgdGhpcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIHNvbWV0aGluZyB0aGF0IGlzIG9mdGVuIGNoYWxsZW5naW5nIHdpdGggdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBuZXR3b3JraW5nIGNvZGUuXG5cblNvLCAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSdkIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIE15IHJlYXNvbmluZyBpcyB0aGUgY2xhc3NpYyBcImZpeCBmb3IgYSB1c2UtYWZ0ZXItZnJlZSwgcmVhY2hhYmxlIHRocm91Z2ggc29mdHdhcmUgUkRNQSwgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzXCIgbGluZS4gSSdsbCBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBgaWJfZ2V0X2V0aF9zcGVlZGAsIG9idmlvdXNseS4gQW5kLCBvZiBjb3Vyc2UsIEknbGwgZW5hYmxlIHRoZSBgSU5GSU5JQkFORGAsIGBSRE1BX1JYRWAsIGFuZCBgUkRNQV9TSVdgIGNvbmZpZ3VyYXRpb25zIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgYWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQ5LCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM5OjU4LjM2NDcwNzEyOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjM1OTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJSRE1BX1JYRVwiLFxuICAgIFwiUkRNQV9TSVdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpYl9nZXRfZXRoX3NwZWVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gYGliX2dldF9ldGhfc3BlZWRgIGJ5IG1vdmluZyBgZGV2X3B1dChuZXRkZXYpYCBhZnRlciBhY2Nlc3NpbmcgYG5ldGRldi1cXHUwMDNlbmFtZWAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZSBSRE1BIGRyaXZlcnMgKFJYRSBhbmQgU0lXKSB3aGVuIHF1ZXJ5aW5nIHBvcnQgYXR0cmlidXRlcywgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJSRE1BX1JYRVwiLFxuICAgIFwiUkRNQV9TSVdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpYl9nZXRfZXRoX3NwZWVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gYGliX2dldF9ldGhfc3BlZWRgIGJ5IG1vdmluZyBgZGV2X3B1dChuZXRkZXYpYCBhZnRlciBhY2Nlc3NpbmcgYG5ldGRldi1cXHUwMDNlbmFtZWAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZSBSRE1BIGRyaXZlcnMgKFJYRSBhbmQgU0lXKSB3aGVuIHF1ZXJ5aW5nIHBvcnQgYXR0cmlidXRlcywgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6NTguNDQ0OTUxMzM5WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDYwODUyNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6NTguNDQ1NTg0OTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODQ2MDIxMzcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYG5ldGRldi1cXHUwMDNlbmFtZWAgd2FzIGFjY2Vzc2VkIGluIGEgYHByX3dhcm5gIHN0YXRlbWVudCBhZnRlciBgZGV2X3B1dChuZXRkZXYpYCBoYWQgYWxyZWFkeSBkcm9wcGVkIHRoZSByZWZlcmVuY2UgdG8gYG5ldGRldmAuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbG9naWMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmE0ZTJlMGZmYjRhNWViYTIwMGVjYWQ1Mjg4Mzg3YWY3MmMwZmI1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA3OjM5OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmNcbmluZGV4IDg2ODExZDMxMDkyY2UuLjU3ZjEwOWM4MDg1ZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jXG5AQCAtMjA1Miw4ICsyMDUyLDYgQEAgaW50IGliX2dldF9ldGhfc3BlZWQoc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgcG9ydF9udW0sIHUxNiAqc3BlZWQsIHU4ICp3aWR0aClcbiBcdHJjID0gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFx1MDAyNmxrc2V0dGluZ3MpO1xuIFx0cnRubF91bmxvY2soKTtcbiBcbi1cdGRldl9wdXQobmV0ZGV2KTtcbi1cbiBcdGlmICghcmMgXHUwMDI2XHUwMDI2IGxrc2V0dGluZ3MuYmFzZS5zcGVlZCAhPSAodTMyKVNQRUVEX1VOS05PV04pIHtcbiBcdFx0bmV0ZGV2X3NwZWVkID0gbGtzZXR0aW5ncy5iYXNlLnNwZWVkO1xuIFx0fSBlbHNlIHtcbkBAIC0yMDYzLDYgKzIwNjEsOCBAQCBpbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxuIFx0XHRcdFx0bmV0ZGV2LVx1MDAzZW5hbWUsIG5ldGRldl9zcGVlZCk7XG4gXHR9XG4gXG4rXHRkZXZfcHV0KG5ldGRldik7XG4rXG4gXHRpYl9nZXRfd2lkdGhfYW5kX3NwZWVkKG5ldGRldl9zcGVlZCwgbGtzZXR0aW5ncy5sYW5lcyxcbiBcdFx0XHQgICAgICAgc3BlZWQsIHdpZHRoKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM5OjU4LjQ0NTU4NjI1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDYwMTg0NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBTYWZldHkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaWJfZ2V0X2V0aF9zcGVlZCgpYCBpbiBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgbW92aW5nIGBkZXZfcHV0KG5ldGRldilgIGRvd24gYSBmZXcgbGluZXMuIFByZXZpb3VzbHksIHRoZSBjb2RlIHNlcXVlbmNlIHdhcyBgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncygpYCwgYHJ0bmxfdW5sb2NrKClgLCBgZGV2X3B1dChuZXRkZXYpYCwgYW5kIHRoZW4gYSBjaGVjayBvbiB0aGUgYGxrc2V0dGluZ3NgIHN0cnVjdCBhbmQgYSB3YXJuaW5nIG1lc3NhZ2UgdGhhdCBtaWdodCB1c2UgYG5ldGRldi1cdTAwM2VuYW1lYC4gTm93LCBpdCdzIGBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKClgLCBgcnRubF91bmxvY2soKWAsIHRoZSBjaGVjaywgKnRoZW4qIGBkZXZfcHV0KG5ldGRldilgLlxuXG5UaGUgYnVnIGlzIHByZXR0eSBjbGVhcjogYSB1c2UtYWZ0ZXItZnJlZS4gYGRldl9wdXQobmV0ZGV2KWAgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZSwgcG90ZW50aWFsbHkgZnJlZWluZyB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYG5ldGRldmAgcG9pbnRlci4gIFRoZW4sIGluc2lkZSB0aGF0IHdhcm5pbmcgbWVzc2FnZSwgc3BlY2lmaWNhbGx5IHRoZSBgcHJfd2FybmAgY2FsbCwgdGhlcmUncyBhIGRlcmVmZXJlbmNlIHRvIGBuZXRkZXYtXHUwMDNlbmFtZWAuICBUaGF0J3MgdGV4dGJvb2sgdXNlLWFmdGVyLWZyZWUsIHBsYWluIGFuZCBzaW1wbGUuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zPyBXZSdyZSBjb25jZXJuZWQgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEJ1dCB0aGUgcGF0Y2ggaXMgcHVyZWx5IGFib3V0ICptb3ZpbmcqIGEgYGRldl9wdXQoKWAgY2FsbCB0byBmaXggYW4gZXhpc3RpbmcgdXNlLWFmdGVyLWZyZWUuIFRoZSBgbGtzZXR0aW5nc2Agc3RydWN0IGlzIHBvcHVsYXRlZCBieSBgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncygpYCwgYW5kIHRoZSBsb2dpYyBhcm91bmQgaXQgcmVtYWlucyB0aGUgc2FtZS4gTm8gbmV3IG1lbW9yeSBpcyBiZWluZyBpbml0aWFsaXplZCBvciByZWFkIGluIGEgZGlmZmVyZW50IHdheSBiZWNhdXNlIG9mIHRoZSBwYXRjaC4gU28sIG5vLCBJJ20gY29uZmlkZW50IHRoZXJlJ3Mgbm8gbmVlZCBmb3IgS01TQU4gaGVyZS4gIFdlJ3JlIG9ubHkgZml4aW5nIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSwgbm90IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMiwiT3V0cHV0VG9rZW5zIjoxMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzo0MDowNi45MDU3NzUzNjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIHdoZXJlIGBuZXRkZXYtXFx1MDAzZW5hbWVgIHdhcyBhY2Nlc3NlZCBpbiBhIGBwcl93YXJuYCBzdGF0ZW1lbnQgYWZ0ZXIgYGRldl9wdXQobmV0ZGV2KWAgaGFkIGFscmVhZHkgZHJvcHBlZCB0aGUgcmVmZXJlbmNlIHRvIGBuZXRkZXZgLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIHdoZXJlIGBuZXRkZXYtXFx1MDAzZW5hbWVgIHdhcyBhY2Nlc3NlZCBpbiBhIGBwcl93YXJuYCBzdGF0ZW1lbnQgYWZ0ZXIgYGRldl9wdXQobmV0ZGV2KWAgaGFkIGFscmVhZHkgZHJvcHBlZCB0aGUgcmVmZXJlbmNlIHRvIGBuZXRkZXZgLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbndnz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 07:20:23 +0000 UTC FinishedAt: 2026-08-21 07:40:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INFINIBAND", "RDMA_RXE", "RDMA_SIW" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INFINIBAND", "RDMA_RXE", "RDMA_SIW" ], "series_id": "44fd2fb1-99f9-4c46-9b24-81bdf8c26535" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ib_get_eth_speed" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7UkRNQV9SWEUmIzM0OywKICAgICYjMzQ7UkRNQV9TSVcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpYl9nZXRfZXRoX3NwZWVkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYG5ldGRldi1cdTAwM2VuYW1lYCB3YXMgYWNjZXNzZWQgaW4gYSBgcHJfd2FybmAgc3RhdGVtZW50IGFmdGVyIGBkZXZfcHV0KG5ldGRldilgIGhhZCBhbHJlYWR5IGRyb3BwZWQgdGhlIHJlZmVyZW5jZSB0byBgbmV0ZGV2YC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBsb2dpYyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gYGliX2dldF9ldGhfc3BlZWRgIGJ5IG1vdmluZyBgZGV2X3B1dChuZXRkZXYpYCBhZnRlciBhY2Nlc3NpbmcgYG5ldGRldi1cdTAwM2VuYW1lYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHNvZnR3YXJlIFJETUEgZHJpdmVycyAoUlhFIGFuZCBTSVcpIHdoZW4gcXVlcnlpbmcgcG9ydCBhdHRyaWJ1dGVzLCBtYWtpbmcgaXQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmE0ZTJlMGZmYjRhNWViYTIwMGVjYWQ1Mjg4Mzg3YWY3MmMwZmI1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA3OjM5OjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jXG5pbmRleCA4NjgxMWQzMTA5MmNlLi41N2YxMDljODA4NWRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY1xuQEAgLTIwNTIsOCAmIzQzOzIwNTIsNiBAQCBpbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxuIFx0cmMgPSBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgXHUwMDI2bGtzZXR0aW5ncyk7XG4gXHRydG5sX3VubG9jaygpO1xuIFxuLVx0ZGV2X3B1dChuZXRkZXYpO1xuLVxuIFx0aWYgKCFyYyBcdTAwMjZcdTAwMjYgbGtzZXR0aW5ncy5iYXNlLnNwZWVkICE9ICh1MzIpU1BFRURfVU5LTk9XTikge1xuIFx0XHRuZXRkZXZfc3BlZWQgPSBsa3NldHRpbmdzLmJhc2Uuc3BlZWQ7XG4gXHR9IGVsc2Uge1xuQEAgLTIwNjMsNiAmIzQzOzIwNjEsOCBAQCBpbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxuIFx0XHRcdFx0bmV0ZGV2LVx1MDAzZW5hbWUsIG5ldGRldl9zcGVlZCk7XG4gXHR9XG4gXG4mIzQzO1x0ZGV2X3B1dChuZXRkZXYpO1xuJiM0MztcbiBcdGliX2dldF93aWR0aF9hbmRfc3BlZWQobmV0ZGV2X3NwZWVkLCBsa3NldHRpbmdzLmxhbmVzLFxuIFx0XHRcdCAgICAgICBzcGVlZCwgd2lkdGgpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O1JETUFfUlhFJiMzNDssCiAgICAmIzM0O1JETUFfU0lXJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aWJfZ2V0X2V0aF9zcGVlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiBgaWJfZ2V0X2V0aF9zcGVlZGAgYnkgbW92aW5nIGBkZXZfcHV0KG5ldGRldilgIGFmdGVyIGFjY2Vzc2luZyBgbmV0ZGV2LVx1MDAzZW5hbWVgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUgUkRNQSBkcml2ZXJzIChSWEUgYW5kIFNJVykgd2hlbiBxdWVyeWluZyBwb3J0IGF0dHJpYnV0ZXMsIG1ha2luZyBpdCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYTRlMmUwZmZiNGE1ZWJhMjAwZWNhZDUyODgzODdhZjcyYzBmYjU4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMDc6Mzk6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYwppbmRleCA4NjgxMWQzMTA5MmNlLi41N2YxMDljODA4NWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKQEAgLTIwNTIsOCAmIzQzOzIwNTIsNiBAQCBpbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKQogCXJjID0gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsICZhbXA7bGtzZXR0aW5ncyk7CiAJcnRubF91bmxvY2soKTsKIAotCWRldl9wdXQobmV0ZGV2KTsKLQogCWlmICghcmMgJmFtcDsmYW1wOyBsa3NldHRpbmdzLmJhc2Uuc3BlZWQgIT0gKHUzMilTUEVFRF9VTktOT1dOKSB7CiAJCW5ldGRldl9zcGVlZCA9IGxrc2V0dGluZ3MuYmFzZS5zcGVlZDsKIAl9IGVsc2UgewpAQCAtMjA2Myw2ICYjNDM7MjA2MSw4IEBAIGludCBpYl9nZXRfZXRoX3NwZWVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIHBvcnRfbnVtLCB1MTYgKnNwZWVkLCB1OCAqd2lkdGgpCiAJCQkJbmV0ZGV2LSZndDtuYW1lLCBuZXRkZXZfc3BlZWQpOwogCX0KIAomIzQzOwlkZXZfcHV0KG5ldGRldik7CiYjNDM7CiAJaWJfZ2V0X3dpZHRoX2FuZF9zcGVlZChuZXRkZXZfc3BlZWQsIGxrc2V0dGluZ3MubGFuZXMsCiAJCQkgICAgICAgc3BlZWQsIHdpZHRoKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIGEgTmV0d29yayBEZXZpY2UgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY2AuIFJpZ2h0IGF3YXksIGl0IHNlZW1zIHRvIGludm9sdmUgYSBmYWlybHkgc3BlY2lmaWMgZnVuY3Rpb24sIGBpYl9nZXRfZXRoX3NwZWVkYC4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBzaW1wbHkgYmUgbW92aW5nIHRoZSBsaW5lIGBkZXZfcHV0KG5ldGRldik7YCBkb3duIGEgZmV3IGxpbmVzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkuIE1vdmluZyBhIGBkZXZfcHV0YCBjYWxsIHN1Z2dlc3RzIHNvbWUgcmVzb3VyY2UgbWFuYWdlbWVudCBjb25jZXJuLCBsaWtlbHkgcmVsYXRlZCB0byByZWxlYXNpbmcgYSBuZXR3b3JrIGRldmljZS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0IG9mIGBpYl9nZXRfZXRoX3NwZWVkYCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGFjdCBpcy4gSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBpcyBhIGJ1ZyBmaXgsIGFuIG9wdGltaXphdGlvbiwgb3IgcG9zc2libHkgZXZlbiBhIHN1YnRsZSBjaGFuZ2UgdGhhdCBjb3VsZCBoYXZlIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWJfZ2V0X2V0aF9zcGVlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYz0xOTU0PXN0YXRpYyB2b2lkIGliX2dldF93aWR0aF9hbmRfc3BlZWQodTMyIG5ldGRldl9zcGVlZCwgdTMyIGxhbmVzLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMtMjAzNi1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmM6MjAzNzppbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYy0yMDM4LXtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jLTIwNzAtfVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYzoyMDcxOkVYUE9SVF9TWU1CT0woaWJfZ2V0X2V0aF9zcGVlZCk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jLTIwNzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY2MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEluZmluaWJhbmQgTklDIFNwZWVkIERldGVjdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJbmZpbmliYW5kIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgaWJfZ2V0X2V0aF9zcGVlZGAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmNgLCBmaWd1cmVzIG91dCB0aGUgRXRoZXJuZXQgc3BlZWQgb2YgdGhlIGF0dGFjaGVkIGhhcmR3YXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBmdW5jdGlvbiBpdHNlbGYsIGFuZCB0aGVuIEkmIzM5O2xsIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQsIGFuZCBmaW5hbGx5IHN0YXJ0IG1ha2luZyBpbmZlcmVuY2VzLiBUaGlzIHNlZW1zIGxpa2UgYSBjb3JlIGZ1bmN0aW9uLCBzbyBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgaW50byB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgUEhZIGRyaXZlcnMsIHBlcmhhcHMgd2l0aCBzb21lIGNsZXZlciBhdXRvLW5lZ290aWF0aW9uIGhhbmRsaW5nLiBJJiMzOTttIGFsc28gY3VyaW91cyBpZiBpdCBoYW5kbGVzIGRpZmZlcmVudCBFdGhlcm5ldCBnZW5lcmF0aW9ucyBhbmQgd2hhdCBlcnJvciBoYW5kbGluZyBpcyBpbiBwbGFjZS4gVGltZSB0byBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAzNzpcdGludCBpYl9nZXRfZXRoX3NwZWVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIHBvcnRfbnVtLCB1MTYgKnNwZWVkLCB1OCAqd2lkdGgpXG4yMDM4Olx0e1xuMjAzOTpcdFx0aW50IHJjO1xuMjA0MDpcdFx0dTMyIG5ldGRldl9zcGVlZDtcbjIwNDE6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4yMDQyOlx0XHRzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyBsa3NldHRpbmdzID0ge307XG4yMDQzOlx0XG4yMDQ0Olx0XHRpZiAocmRtYV9wb3J0X2dldF9saW5rX2xheWVyKGRldiwgcG9ydF9udW0pICE9IElCX0xJTktfTEFZRVJfRVRIRVJORVQpXG4yMDQ1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjA0NjpcdFxuMjA0NzpcdFx0bmV0ZGV2ID0gaWJfZGV2aWNlX2dldF9uZXRkZXYoZGV2LCBwb3J0X251bSk7XG4yMDQ4Olx0XHRpZiAoIW5ldGRldilcbjIwNDk6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4yMDUwOlx0XG4yMDUxOlx0XHRydG5sX2xvY2soKTtcbjIwNTI6XHRcdHJjID0gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFx1MDAyNmxrc2V0dGluZ3MpO1xuMjA1MzpcdFx0cnRubF91bmxvY2soKTtcbjIwNTQ6XHRcbjIwNTU6XHRcdGlmICghcmMgXHUwMDI2XHUwMDI2IGxrc2V0dGluZ3MuYmFzZS5zcGVlZCAhPSAodTMyKVNQRUVEX1VOS05PV04pIHtcbjIwNTY6XHRcdFx0bmV0ZGV2X3NwZWVkID0gbGtzZXR0aW5ncy5iYXNlLnNwZWVkO1xuMjA1NzpcdFx0fSBlbHNlIHtcbjIwNTg6XHRcdFx0bmV0ZGV2X3NwZWVkID0gU1BFRURfMTAwMDtcbjIwNTk6XHRcdFx0aWYgKHJjKVxuMjA2MDpcdFx0XHRcdHByX3dhcm4oXCYjMzQ7JXMgc3BlZWQgaXMgdW5rbm93biwgZGVmYXVsdGluZyB0byAldVxcblwmIzM0OyxcbjIwNjE6XHRcdFx0XHRcdG5ldGRldi1cdTAwM2VuYW1lLCBuZXRkZXZfc3BlZWQpO1xuMjA2MjpcdFx0fVxuMjA2MzpcdFxuMjA2NDpcdFx0ZGV2X3B1dChuZXRkZXYpO1xuMjA2NTpcdFxuMjA2NjpcdFx0aWJfZ2V0X3dpZHRoX2FuZF9zcGVlZChuZXRkZXZfc3BlZWQsIGxrc2V0dGluZ3MubGFuZXMsXG4yMDY3Olx0XHRcdFx0ICAgICAgIHNwZWVkLCB3aWR0aCk7XG4yMDY4Olx0XG4yMDY5Olx0XHRyZXR1cm4gMDtcbjIwNzA6XHR9XG4yMDcxOlx0RVhQT1JUX1NZTUJPTChpYl9nZXRfZXRoX3NwZWVkKTtcbjIwNzI6XHRcbjIwNzM6XHRpbnQgaWJfbW9kaWZ5X3FwKHN0cnVjdCBpYl9xcCAqcXAsXG4yMDc0Olx0XHRcdCBzdHJ1Y3QgaWJfcXBfYXR0ciAqcXBfYXR0cixcbjIwNzU6XHRcdFx0IGludCBxcF9hdHRyX21hc2spXG4yMDc2Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MjgKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEEgVXNlLUFmdGVyLUZyZWUgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBtb3ZpbmcgdGhlIGBkZXZfcHV0KG5ldGRldilgIGNhbGwuIEFoLCBJIHNlZSB3aHkuIFRoZXkmIzM5O3JlIGRvaW5nIHRoaXMgYmVjYXVzZSB0aGUgY29kZSBpbnNpZGUgdGhhdCBgaWYgKCFyYyAuLi4pYCBibG9jaywgc3BlY2lmaWNhbGx5IGluIHRoZSBgZWxzZWAgYnJhbmNoIHdpdGggdGhhdCBgcHJfd2FybmAsIGFjY2Vzc2VzIGBuZXRkZXYtJmd0O25hbWVgLiBJZiBgZGV2X3B1dChuZXRkZXYpYCBoYXBwZW5zICpiZWZvcmUqIHRoYXQsIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gYG5ldGRldmAgY291bGQgYmUgZnJlZWQgcmlnaHQgYmVmb3JlIHdlIHRyeSB0byBhY2Nlc3MgaXRzIGBuYW1lYCBmaWVsZCwgd2hpY2ggaXMsIG9idmlvdXNseSwgYmFkIG5ld3MuCgpIbW0sIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgaXMgYSBsZWdpdGltYXRlIHVzZS1hZnRlci1mcmVlIGJ1ZyB0aGF0JiMzOTtzIGJlaW5nIGZpeGVkIGluIGBpYl9nZXRfZXRoX3NwZWVkYC4gQW5kLCBiZWNhdXNlIGBpYl9nZXRfZXRoX3NwZWVkYCBpcyBleHBvcnRlZCwgaXQmIzM5O3MgdXNlZCBieSBkcml2ZXJzLiBUaGlzIGlzIGltcG9ydGFudDogbm93IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGRyaXZlcnMgYXJlIGFjdHVhbGx5IGNhbGxpbmcgYGliX2dldF9ldGhfc3BlZWRgLiBUaW1lIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgYW5kIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2liX2dldF9ldGhfc3BlZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYz0xOTU0PXN0YXRpYyB2b2lkIGliX2dldF93aWR0aF9hbmRfc3BlZWQodTMyIG5ldGRldl9zcGVlZCwgdTMyIGxhbmVzLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMtMjAzNi1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmM6MjAzNzppbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYy0yMDM4LXtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jLTIwNzAtfVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYzoyMDcxOkVYUE9SVF9TWU1CT0woaWJfZ2V0X2V0aF9zcGVlZCk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jLTIwNzItXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz0yOTE9aW50IGJueHRfcmVfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnRfbnVtLFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzI3LVx0cG9ydF9hdHRyLVx1MDAzZWluaXRfdHlwZV9yZXBseSA9IDA7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvYm54dF9yZS9pYl92ZXJicy5jOjMyODpcdHJjID0gaWJfZ2V0X2V0aF9zcGVlZChcdTAwMjZyZGV2LVx1MDAzZWliZGV2LCBwb3J0X251bSwgXHUwMDI2cG9ydF9hdHRyLVx1MDAzZWFjdGl2ZV9zcGVlZCxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmMtMzI5LVx0XHRcdCAgICAgIFx1MDAyNnBvcnRfYXR0ci1cdTAwM2VhY3RpdmVfd2lkdGgpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9wcm92aWRlci5jPTMwNj1zdGF0aWMgaW50IGM0aXdfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnQsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Byb3ZpZGVyLmMtMzEwLVx0cHJfZGVidWcoXCYjMzQ7aWJkZXYgJXBcXG5cJiMzNDssIGliZGV2KTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9wcm92aWRlci5jOjMxMTpcdHJldCA9IGliX2dldF9ldGhfc3BlZWQoaWJkZXYsIHBvcnQsIFx1MDAyNnByb3BzLVx1MDAzZWFjdGl2ZV9zcGVlZCxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9wcm92aWRlci5jLTMxMi1cdFx0XHQgICAgICAgXHUwMDI2cHJvcHMtXHUwMDNlYWN0aXZlX3dpZHRoKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYz0zODA9aW50IGVyZG1hX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTQwMS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jOjQwMjpcdGliX2dldF9ldGhfc3BlZWQoaWJkZXYsIHBvcnQsIFx1MDAyNmF0dHItXHUwMDNlYWN0aXZlX3NwZWVkLCBcdTAwMjZhdHRyLVx1MDAzZWFjdGl2ZV93aWR0aCk7XG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYy00MDMtXHRhdHRyLVx1MDAzZW1heF9tdHUgPSBpYl9tdHVfaW50X3RvX2VudW0obmRldi1cdTAwM2VtdHUpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfbWFpbi5jPTI4NT1zdGF0aWMgaW50IGhuc19yb2NlX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJfZGV2LCB1MzIgcG9ydF9udW0sXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9tYWluLmMtMzA0LVx0cHJvcHMtXHUwMDNlcGtleV90YmxfbGVuID0gMTtcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfbWFpbi5jOjMwNTpcdHJldCA9IGliX2dldF9ldGhfc3BlZWQoaWJfZGV2LCBwb3J0X251bSwgXHUwMDI2cHJvcHMtXHUwMDNlYWN0aXZlX3NwZWVkLFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9tYWluLmMtMzA2LVx0XHRcdCAgICAgICBcdTAwMjZwcm9wcy1cdTAwM2VhY3RpdmVfd2lkdGgpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19pYmRldi5jPTgwPXN0YXRpYyBpbnQgaW9uaWNfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnQsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2liZGV2LmMtMTE0LVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2liZGV2LmM6MTE1Olx0cmV0dXJuIGliX2dldF9ldGhfc3BlZWQoaWJkZXYsIHBvcnQsXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfaWJkZXYuYy0xMTYtXHRcdFx0XHRcdTAwMjZhdHRyLVx1MDAzZWFjdGl2ZV9zcGVlZCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYz04OD1zdGF0aWMgaW50IGlyZG1hX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTEwOS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jOjExMDpcdGliX2dldF9ldGhfc3BlZWQoaWJkZXYsIHBvcnQsIFx1MDAyNnByb3BzLVx1MDAzZWFjdGl2ZV9zcGVlZCxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTExMS1cdFx0XHQgXHUwMDI2cHJvcHMtXHUwMDNlYWN0aXZlX3dpZHRoKTtcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmM9NjExPWludCBtYW5hX2liX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0LFxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYy02MzEtXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9tYWluLmM6NjMyOlx0aWJfZ2V0X2V0aF9zcGVlZChpYmRldiwgcG9ydCwgXHUwMDI2cHJvcHMtXHUwMDNlYWN0aXZlX3NwZWVkLCBcdTAwMjZwcm9wcy1cdTAwM2VhY3RpdmVfd2lkdGgpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFpbi5jLTYzMy1cdHByb3BzLVx1MDAzZXBrZXlfdGJsX2xlbiA9IDE7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmM9MzMwPWludCB1c25pY19pYl9xdWVyeV9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1MzIgcG9ydCxcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvdXNuaWNfaWJfdmVyYnMuYy0zMzYtXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvdXNuaWNfaWJfdmVyYnMuYzozMzc6XHRpZiAoaWJfZ2V0X2V0aF9zcGVlZChpYmRldiwgcG9ydCwgXHUwMDI2cHJvcHMtXHUwMDNlYWN0aXZlX3NwZWVkLFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmMtMzM4LVx0XHRcdCAgICAgXHUwMDI2cHJvcHMtXHUwMDNlYWN0aXZlX3dpZHRoKSlcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvdXNuaWNfaWJfdmVyYnMuYy0zNDEtXHQvKlxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmM6MzQyOlx0ICogdXNkZXZfbG9jayBpcyBhY3F1aXJlZCBhZnRlciAoYW5kIG5vdCBiZWZvcmUpIGliX2dldF9ldGhfc3BlZWQgY2FsbFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmM6MzQzOlx0ICogYmVjYXVzZSBhY3F1aXJpbmcgcnRubF9sb2NrIGluIGliX2dldF9ldGhfc3BlZWQsIHdoaWxlIGhvbGRpbmdcbmRyaXZlcnMvaW5maW5pYmFuZC9ody91c25pYy91c25pY19pYl92ZXJicy5jLTM0NC1cdCAqIHVzZGV2X2xvY2sgY291bGQgbGVhZCB0byBhIGRlYWRsb2NrLlxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmM9MzQ9c3RhdGljIGludCByeGVfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jLTU1LVx0bXV0ZXhfbG9jayhcdTAwMjZyeGUtXHUwMDNldXNkZXZfbG9jayk7XG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jOjU2Olx0cmV0ID0gaWJfZ2V0X2V0aF9zcGVlZChpYmRldiwgcG9ydF9udW0sIFx1MDAyNmF0dHItXHUwMDNlYWN0aXZlX3NwZWVkLFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYy01Ny1cdFx0XHQgICAgICAgXHUwMDI2YXR0ci1cdTAwM2VhY3RpdmVfd2lkdGgpO1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3ZlcmJzLmM9MTczPWludCBzaXdfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICpiYXNlX2RldiwgdTMyIHBvcnQsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfdmVyYnMuYy0xODAtXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd192ZXJicy5jOjE4MTpcdHJ2ID0gaWJfZ2V0X2V0aF9zcGVlZChiYXNlX2RldiwgcG9ydCwgXHUwMDI2YXR0ci1cdTAwM2VhY3RpdmVfc3BlZWQsXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd192ZXJicy5jLTE4Mi1cdFx0XHQgXHUwMDI2YXR0ci1cdTAwM2VhY3RpdmVfd2lkdGgpO1xuLS1cbmluY2x1ZGUvcmRtYS9pYl92ZXJicy5oPTQ3NjE9dm9pZCBpYl9kcmFpbl9xcChzdHJ1Y3QgaWJfcXAgKnFwKTtcbmluY2x1ZGUvcmRtYS9pYl92ZXJicy5oLTQ3NjItXG5pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaDo0NzYzOmludCBpYl9nZXRfZXRoX3NwZWVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIHBvcnRfbnVtLCB1MTYgKnNwZWVkLFxuaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgtNDc2NC1cdFx0ICAgICB1OCAqd2lkdGgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGByeGVfcXVlcnlfcG9ydGAgYW5kIGBzaXdfcXVlcnlfcG9ydGAgYXJlIHRoZSBlbnRyeSBwb2ludHMuIFRoZXkmIzM5O3JlIHNvZnR3YXJlIFJETUEgZHJpdmVycywgc3BlY2lmaWNhbGx5IFJYRSBhbmQgU0lXLCBhbmQgSSBrbm93IHRoZXNlIGFyZSBvZnRlbiBmb3VuZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEludGVyZXN0aW5nLiBUaGVuIEkgc3BvdCBgaWJfZ2V0X2V0aF9zcGVlZGAsIHdoaWNoIGlzIGZpeGluZyBhIHVzZS1hZnRlci1mcmVlIGJ1Zy4gVGhhdCBncmFicyBteSBhdHRlbnRpb24g4oCTIGEgY3JpdGljYWwgYnVnIGZpeCBpbiBhIGNvcmUgSW5maW5pYmFuZCBmdW5jdGlvbj8gQWJzb2x1dGVseSwgdGhpcyBpcyBzb21ldGhpbmcgd29ydGggc2VyaW91cyBpbnZlc3RpZ2F0aW9uIGFuZCBmdXp6aW5nLCBnaXZlbiBpdHMgaW1wb3J0YW5jZS4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmb2N1cyBvbiB0aG9zZSB0aHJlZSBmdW5jdGlvbnM6IGBpYl9nZXRfZXRoX3NwZWVkYCwgYHJ4ZV9xdWVyeV9wb3J0YCwgYW5kIGBzaXdfcXVlcnlfcG9ydGAuIEJ1dCB3YWl0IGEgbWludXRlLi4uIGBpYl9nZXRfZXRoX3NwZWVkYCBpcyBpbnZvbHZlZCBpbiAqcXVlcnlpbmcqIHBvcnQgYXR0cmlidXRlcy4gSXQmIzM5O3MgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZXNlIG90aGVyIGZ1bmN0aW9ucywgd2hpY2ggbWFrZXMgaXQgZXZlbiBtb3JlIGFwcGVhbGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXMgdGhlIGF0dHJpYnV0ZXMgY291bGQgYmUgbWFuaXB1bGF0ZWQgaW4gd2F5cyB0byB0cmlnZ2VyIHRoZSBidWcuIEkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgd2l0aCB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgcnhlX3F1ZXJ5X3BvcnRgIGZpcnN0LCB0byBzZWUgaG93IGl0IGNhbGxzIGBpYl9nZXRfZXRoX3NwZWVkYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cnhlX3F1ZXJ5X3BvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jPTE4PXN0YXRpYyBpbnQgcnhlX3F1ZXJ5X2RldmljZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldixcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jLTMzLVxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYzozNDpzdGF0aWMgaW50IHJ4ZV9xdWVyeV9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYy0zNS1cdFx0XHQgIHUzMiBwb3J0X251bSwgc3RydWN0IGliX3BvcnRfYXR0ciAqYXR0cilcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jPTE0NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpYl9kZXZpY2Vfb3BzIHJ4ZV9kZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMtMTUwMi1cdC5xdWVyeV9naWQgPSByeGVfcXVlcnlfZ2lkLFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYzoxNTAzOlx0LnF1ZXJ5X3BvcnQgPSByeGVfcXVlcnlfcG9ydCxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMtMTUwNC1cdC5xdWVyeV9xcCA9IHJ4ZV9xdWVyeV9xcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJYRSBRdWVyeSBQb3J0IENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKgoKT2theSwgc28gYHJ4ZV9xdWVyeV9wb3J0YCBpcyBhIGRldmljZSBvcGVyYXRpb24g4oCTIGdvdCBpdC4gTm93LCB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGRvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyB0aGluZyBydW5zIGFzIGV4cGVjdGVkPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgUlhFLXNwZWNpZmljIGFuZCBTSVctc3BlY2lmaWMgcmVxdWlyZW1lbnRzLiBGb3IgUlhFLCB0aGF0JiMzOTtzIG9idmlvdXNseSBgUkRNQV9SWEVgLiBBbmQgZm9yIFNJVywgaXQmIzM5O3MgYFJETUFfU0lXYC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBzbyBmYXIuIFRvIGJlIGV4dHJhIHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZ2AuIEl04oCZcyBhbHdheXMgZ29vZCB0byBjb25maXJtIGFzc3VtcHRpb25zIHdpdGggdGhlIGRlZmluaXRpdmUgc291cmNlLCBldmVuIGZvciBzb21ldGhpbmcgdGhhdCAqc2VlbXMqIGJhc2ljLiBBIHF1aWNrIGNoZWNrIG9mIHRoYXQgS2NvbmZpZyBzaG91bGQgZ2l2ZSBtZSBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgdG8gYXZvaWQgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFJETUFfUlhFXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTb2Z0d2FyZSBSRE1BIG92ZXIgRXRoZXJuZXQgKFJvQ0UpIGRyaXZlclwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBQQ0kgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IDY0QklUXG4gICA1Olx0XHRkZXBlbmRzIG9uIElORklOSUJBTkRfVklSVF9ETUFcbiAgIDY6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAgNzpcdFx0c2VsZWN0IENSQzMyXG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHRUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBJbmZpbmlCYW5kIFJETUEgdHJhbnNwb3J0IG92ZXJcbiAgMTA6XHRcdHRoZSBMaW51eCBuZXR3b3JrIHN0YWNrLiBJdCBlbmFibGVzIGEgc3lzdGVtIHdpdGggYVxuICAxMTpcdFx0c3RhbmRhcmQgRXRoZXJuZXQgYWRhcHRlciB0byBpbnRlcm9wZXJhdGUgd2l0aCBhIFJvQ0VcbiAgMTI6XHRcdGFkYXB0ZXIgb3Igd2l0aCBhbm90aGVyIHN5c3RlbSBydW5uaW5nIHRoZSBSWEUgZHJpdmVyLlxuICAxMzpcdFx0RG9jdW1lbnRhdGlvbiBvbiBJbmZpbmlCYW5kIGFuZCBSb0NFIGNhbiBiZSBkb3dubG9hZGVkIGF0XG4gIDE0Olx0XHR3d3cuaW5maW5pYmFuZHRhLm9yZyBhbmQgd3d3Lm9wZW5mYWJyaWNzLm9yZy4gKFNlZSBhbHNvXG4gIDE1Olx0XHRzaXcgd2hpY2ggaXMgYSBzaW1pbGFyIHNvZnR3YXJlIGRyaXZlciBmb3IgaVdBUlAuKVxuICAxNjpcdFxuICAxNzpcdFx0VGhlIGRyaXZlciBpcyBzcGxpdCBpbnRvIHR3byBsYXllcnMsIG9uZSBpbnRlcmZhY2VzIHdpdGggdGhlXG4gIDE4Olx0XHRMaW51eCBSRE1BIHN0YWNrIGFuZCBpbXBsZW1lbnRzIGEga2VybmVsIG9yIHVzZXIgc3BhY2VcbiAgMTk6XHRcdHZlcmJzIEFQSS4gVGhlIHVzZXIgc3BhY2UgdmVyYnMgQVBJIHJlcXVpcmVzIGEgc3VwcG9ydFxuICAyMDpcdFx0bGlicmFyeSBuYW1lZCBsaWJyeGUgd2hpY2ggaXMgbG9hZGVkIGJ5IHRoZSBnZW5lcmljIHVzZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQ0MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBTSVcgS2NvbmZpZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgZm9yIFNJVyAoU29ja2V0LWJhc2VkIEluZmluaUJhbmQpLiBNeSBpbml0aWFsIHNjYW4gdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBTSVcgZHJpdmVyIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHZhcmlhYmxlcyBhcmUgYXZhaWxhYmxlIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBvdmVyYWxsIEluZmluaUJhbmQgc3RhY2suCgpGaXJzdCwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSB1c3VhbCBzdXNwZWN0czogYGJvb2xgIGFuZCBgdHJpc3RhdGVgIG9wdGlvbnMgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgZHJpdmVyIGFuZCBwb3NzaWJseSBmaW5lLXR1bmluZyBpdHMgZmVhdHVyZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zIOKAkyBidWZmZXIgc2l6ZXMsIGNhY2hpbmcgc2V0dGluZ3MsIG1heWJlIGV2ZW4gc29tZSBvcHRpb25zIHJlbGF0ZWQgdG8gb2ZmbG9hZGluZy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaWYgdGhlcmUgYXJlIGRlYnVnIG9yIHRyYWNpbmcgZmxhZ3MsIGFzIHRob3NlIGFyZSBjcml0aWNhbCBmb3IgZGlhZ25vc2luZyBhbnkgcGVyZm9ybWFuY2UgaXNzdWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpHaXZlbiB0aGF0IGl0JiMzOTtzIFNJVywgSSYjMzk7bGwgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0LWJhc2VkIHRyYW5zcG9ydC1sYXllciBvcHRpbWl6YXRpb25zLiBBcmUgdGhlcmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBidWZmZXIgcG9vbCBtYW5hZ2VtZW50LCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgdGltZW91dHMsIGNvbmdlc3Rpb24gY29udHJvbCBiZWhhdmlvciwgb3IgbWF5YmUgZXZlbiBUQ1AvVURQIHByb3RvY29sIHNwZWNpZmljIHR3ZWFrcz8gVW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugb3B0aW9ucyBpbmZsdWVuY2UgcGVyZm9ybWFuY2UgY29tcGFyZWQgdG8gbmF0aXZlIEluZmluaUJhbmQgaXMgY3J1Y2lhbC4KCknigJltIGFsc28gYXNzdW1pbmcgdGhlcmUgd2lsbCBiZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMgc3BlY2lmaWVkLCBsaW5raW5nIHRoZSBTSVcgb3B0aW9ucyB0byBvdGhlciBJbmZpbmlCYW5kIGNvbXBvbmVudHMgb3IsIHBvdGVudGlhbGx5LCBuZXR3b3JrIHN0YWNrIGZlYXR1cmVzLiBUaGUgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgYXJlIGdvaW5nIHRvIGJlIGtleSB0byBzZWUgaWYgYW55IHByZXJlcXVpc2l0ZXMgbGlrZSBzcGVjaWZpYyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMsIFJETUEgZmVhdHVyZXMsIG9yIGtlcm5lbCB2ZXJzaW9ucyBuZWVkIHRvIGJlIGluIHBsYWNlIGZvciBhIGNlcnRhaW4gb3B0aW9uIHRvIGJlIHZpYWJsZS4gSXTigJlzIGFsc28gaW1wb3J0YW50IHRvIGlkZW50aWZ5IHdoYXQgb3RoZXIgS2NvbmZpZyBmaWxlcyB0aGlzIG9uZSBwdWxscyBpbiBvciByZWxpZXMgb24uCgpGaW5hbGx5LCBJIHdpbGwgYmUgc2Nhbm5pbmcgZm9yIGRldGFpbGVkIGhlbHAgdGV4dC4gSG9wZWZ1bGx5LCB0aGUgZGVzY3JpcHRpb25zIGFyZSBjbGVhciwgY29uY2lzZSwgYW5kIHByb3ZpZGUgZW5vdWdoIGNvbnRleHQgYWJvdXQgdGhlIGltcGFjdHMgb2YgZWFjaCBzZXR0aW5nLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgY2xlYXIgZXhwbGFuYXRpb24gb2YgZWFjaCBvcHRpb24mIzM5O3MgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLCBwb3dlciBjb25zdW1wdGlvbiwgYW5kIHBvdGVudGlhbCBjb21wYXRpYmlsaXR5IGlzc3Vlcy4gR29vZCBkb2N1bWVudGF0aW9uIG1ha2VzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSB3ZWxsLXVuZGVyc3Rvb2QgbW9kdWxlIGFuZCBhIGJsYWNrIGJveC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHRjb25maWcgUkRNQV9TSVdcbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O1NvZnR3YXJlIFJETUEgb3ZlciBUQ1AvSVAgKGlXQVJQKSBkcml2ZXJcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORFxuICAgNDpcdFx0ZGVwZW5kcyBvbiBJTkZJTklCQU5EX1ZJUlRfRE1BXG4gICA1Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDY6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHRUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBpV0FSUCBSRE1BIHRyYW5zcG9ydCBvdmVyXG4gICA5Olx0XHR0aGUgTGludXggVENQL0lQIG5ldHdvcmsgc3RhY2suIEl0IGVuYWJsZXMgYSBzeXN0ZW0gd2l0aCBhXG4gIDEwOlx0XHRzdGFuZGFyZCBFdGhlcm5ldCBhZGFwdGVyIHRvIGludGVyb3BlcmF0ZSB3aXRoIGEgaVdBUlBcbiAgMTE6XHRcdGFkYXB0ZXIgb3Igd2l0aCBhbm90aGVyIHN5c3RlbSBydW5uaW5nIHRoZSBTSVcgZHJpdmVyLlxuICAxMjpcdFx0KFNlZSBhbHNvIFJYRSB3aGljaCBpcyBhIHNpbWlsYXIgc29mdHdhcmUgZHJpdmVyIGZvciBSb0NFLilcbiAgMTM6XHRcbiAgMTQ6XHRcdFRoZSBkcml2ZXIgaW50ZXJmYWNlcyB3aXRoIHRoZSBMaW51eCBSRE1BIHN0YWNrIGFuZFxuICAxNTpcdFx0aW1wbGVtZW50cyBib3RoIGEga2VybmVsIGFuZCB1c2VyIHNwYWNlIFJETUEgdmVyYnMgQVBJLlxuICAxNjpcdFx0VGhlIHVzZXIgc3BhY2UgdmVyYnMgQVBJIHJlcXVpcmVzIGEgc3VwcG9ydFxuICAxNzpcdFx0bGlicmFyeSBuYW1lZCBsaWJzaXcgd2hpY2ggaXMgbG9hZGVkIGJ5IHRoZSBnZW5lcmljIHVzZXJcbiAgMTg6XHRcdHNwYWNlIHZlcmJzIEFQSSwgbGliaWJ2ZXJicy4gVG8gaW1wbGVtZW50IFJETUEgb3ZlclxuICAxOTpcdFx0VENQL0lQLCB0aGUgZHJpdmVyIGZ1cnRoZXIgaW50ZXJmYWNlcyB3aXRoIHRoZSBMaW51eFxuICAyMDpcdFx0aW4ta2VybmVsIFRDUCBzb2NrZXQgbGF5ZXIuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpczoKCioqRXhhbWluaW5nIFJETUEgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBSRE1BIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgYFJETUFfUlhFYCBhbmQgYFJETUFfU0lXYC4gSSBrbm93IHRob3NlIGFyZSByZWxhdGVkIHRvIHNwZWNpZmljIFJETUEgdHJhbnNwb3J0cy4gQW5kIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGBJTkZJTklCQU5EYCBzZXR0aW5nIGlzIGFsc28gZW5hYmxlZCwgYXMgdGhlc2UgYXJlIGxpa2VseSBkZXBlbmRlbnQgb24gaXQuIFRoZSB0YXNrLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGludm9sdmVzIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIGxvY2F0aW9uIG9mIGEgc3BlY2lmaWMgZnVuY3Rpb24sIGBpYl9nZXRfZXRoX3NwZWVkYC4gRnJvbSBwYXN0IGV4cGVyaWVuY2UsIEkgcmVjYWxsIHRoYXQgYGliX2dldF9ldGhfc3BlZWRgIHJlc2lkZXMgaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmNgLCB3aGljaCBpcyBoZWxwZnVsLiBUbyB2ZXJpZnkgdGhlIHByZWNpc2UgZGVwZW5kZW5jaWVzIGZvciB0aGUgY29uZmlndXJhdGlvbiwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlcy4gRWl0aGVyIGBkcml2ZXJzL2luZmluaWJhbmQvY29yZS9LY29uZmlnYCBvciBwb3NzaWJseSBqdXN0IGBkcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZ2Agc2hvdWxkIHNoZWQgbGlnaHQgb24gdGhlIGV4YWN0IHJlcXVpcmVtZW50cyBmb3IgZW5hYmxpbmcgdGhlc2UgZmVhdHVyZXMgYW5kIGNvbmZpcm0gdGhlIGxpbmsgd2l0aCBgSU5GSU5JQkFORGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51Y29uZmlnIElORklOSUJBTkRcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IEhBU19ETUFcbiAgIDU6XHRcdGRlcGVuZHMgb24gTkVUXG4gICA2Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDc6XHRcdGRlcGVuZHMgb24gIUFMUEhBXG4gICA4Olx0XHRzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVJcbiAgIDk6XHRcdHNlbGVjdCBJUlFfUE9MTFxuICAxMDpcdFx0c2VsZWN0IERJTUxJQlxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBDb3JlIHN1cHBvcnQgZm9yIEluZmluaUJhbmQgKElCKS4gIE1ha2Ugc3VyZSB0byBhbHNvIHNlbGVjdFxuICAxMzpcdFx0ICBhbnkgcHJvdG9jb2xzIHlvdSB3aXNoIHRvIHVzZSBhcyB3ZWxsIGFzIGRyaXZlcnMgZm9yIHlvdXJcbiAgMTQ6XHRcdCAgSW5maW5pQmFuZCBoYXJkd2FyZS5cbiAgMTU6XHRcbiAgMTY6XHRpZiBJTkZJTklCQU5EXG4gIDE3Olx0XG4gIDE4Olx0Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcbiAgMTk6XHRcdHRyaXN0YXRlIFwmIzM0O0luZmluaUJhbmQgdXNlcnNwYWNlIE1BRCBzdXBwb3J0XCYjMzQ7XG4gIDIwOlx0XHRkZXBlbmRzIG9uIElORklOSUJBTkRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg0OQoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSW5maW5pQmFuZCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdC4gVGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBrZWVwIGluIG1pbmQgYXJlIGBJTkZJTklCQU5EYCwgYFJETUFfUlhFYCwgYW5kIGBSRE1BX1NJV2AuIFRoZSBhY3R1YWwgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWVuIG1vZGlmaWVkIGhlcmUgaXMgYGliX2dldF9ldGhfc3BlZWRgLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCB3aGljaCBpcyBhbHdheXMgYSBjcml0aWNhbCBmaXguCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zIGZvciB0ZXN0aW5nIGFuZCBmdXp6aW5nLiBUaGUgcGF0Y2ggbW92ZXMgYGRldl9wdXQobmV0ZGV2KWAgKmFmdGVyKiB0aGUgYWNjZXNzIHRvIGBuZXRkZXYtJmd0O25hbWVgIHdpdGhpbiBgaWJfZ2V0X2V0aF9zcGVlZGAsIHJpZ2h0PyBUaGlzIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBgaWJfZ2V0X2V0aF9zcGVlZGAgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHNvZnR3YXJlIFJETUEgZHJpdmVycywgc3BlY2lmaWNhbGx5IFJYRSBhbmQgU0lXLiBUaGlzIGlzIGZhbnRhc3RpYyBiZWNhdXNlIGl0IG1lYW5zIHdlIGNhbiBhY3R1YWxseSByZXByb2R1Y2UgYW5kIHRlc3QgdGhpcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIHNvbWV0aGluZyB0aGF0IGlzIG9mdGVuIGNoYWxsZW5naW5nIHdpdGggdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBuZXR3b3JraW5nIGNvZGUuCgpTbywgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIEkmIzM5O2Qgc2V0IGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gTXkgcmVhc29uaW5nIGlzIHRoZSBjbGFzc2ljICYjMzQ7Zml4IGZvciBhIHVzZS1hZnRlci1mcmVlLCByZWFjaGFibGUgdGhyb3VnaCBzb2Z0d2FyZSBSRE1BLCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMmIzM0OyBsaW5lLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBgaWJfZ2V0X2V0aF9zcGVlZGAsIG9idmlvdXNseS4gQW5kLCBvZiBjb3Vyc2UsIEkmIzM5O2xsIGVuYWJsZSB0aGUgYElORklOSUJBTkRgLCBgUkRNQV9SWEVgLCBhbmQgYFJETUFfU0lXYCBjb25maWd1cmF0aW9ucyB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYXJlIGFjdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7UkRNQV9SWEUmIzM0OywKICAgICYjMzQ7UkRNQV9TSVcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpYl9nZXRfZXRoX3NwZWVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIGBpYl9nZXRfZXRoX3NwZWVkYCBieSBtb3ZpbmcgYGRldl9wdXQobmV0ZGV2KWAgYWZ0ZXIgYWNjZXNzaW5nIGBuZXRkZXYtXHUwMDNlbmFtZWAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZSBSRE1BIGRyaXZlcnMgKFJYRSBhbmQgU0lXKSB3aGVuIHF1ZXJ5aW5nIHBvcnQgYXR0cmlidXRlcywgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7LAogICAgJiMzNDtSRE1BX1JYRSYjMzQ7LAogICAgJiMzNDtSRE1BX1NJVyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2liX2dldF9ldGhfc3BlZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gYGliX2dldF9ldGhfc3BlZWRgIGJ5IG1vdmluZyBgZGV2X3B1dChuZXRkZXYpYCBhZnRlciBhY2Nlc3NpbmcgYG5ldGRldi1cdTAwM2VuYW1lYC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgdmlhIHNvZnR3YXJlIFJETUEgZHJpdmVycyAoUlhFIGFuZCBTSVcpIHdoZW4gcXVlcnlpbmcgcG9ydCBhdHRyaWJ1dGVzLCBtYWtpbmcgaXQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjM5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIHdoZXJlIGBuZXRkZXYtXHUwMDNlbmFtZWAgd2FzIGFjY2Vzc2VkIGluIGEgYHByX3dhcm5gIHN0YXRlbWVudCBhZnRlciBgZGV2X3B1dChuZXRkZXYpYCBoYWQgYWxyZWFkeSBkcm9wcGVkIHRoZSByZWZlcmVuY2UgdG8gYG5ldGRldmAuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbG9naWMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZhNGUyZTBmZmI0YTVlYmEyMDBlY2FkNTI4ODM4N2FmNzJjMGZiNTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwNzozOToxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCmluZGV4IDg2ODExZDMxMDkyY2UuLjU3ZjEwOWM4MDg1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYwpAQCAtMjA1Miw4ICYjNDM7MjA1Miw2IEBAIGludCBpYl9nZXRfZXRoX3NwZWVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIHBvcnRfbnVtLCB1MTYgKnNwZWVkLCB1OCAqd2lkdGgpCiAJcmMgPSBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKG5ldGRldiwgJmFtcDtsa3NldHRpbmdzKTsKIAlydG5sX3VubG9jaygpOwogCi0JZGV2X3B1dChuZXRkZXYpOwotCiAJaWYgKCFyYyAmYW1wOyZhbXA7IGxrc2V0dGluZ3MuYmFzZS5zcGVlZCAhPSAodTMyKVNQRUVEX1VOS05PV04pIHsKIAkJbmV0ZGV2X3NwZWVkID0gbGtzZXR0aW5ncy5iYXNlLnNwZWVkOwogCX0gZWxzZSB7CkBAIC0yMDYzLDYgJiM0MzsyMDYxLDggQEAgaW50IGliX2dldF9ldGhfc3BlZWQoc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgcG9ydF9udW0sIHUxNiAqc3BlZWQsIHU4ICp3aWR0aCkKIAkJCQluZXRkZXYtJmd0O25hbWUsIG5ldGRldl9zcGVlZCk7CiAJfQogCiYjNDM7CWRldl9wdXQobmV0ZGV2KTsKJiM0MzsKIAlpYl9nZXRfd2lkdGhfYW5kX3NwZWVkKG5ldGRldl9zcGVlZCwgbGtzZXR0aW5ncy5sYW5lcywKIAkJCSAgICAgICBzcGVlZCwgd2lkdGgpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMyCgkJCQkJCQlvdXRwdXQ6IDEyMAoJCQkJCQkJdGhvdWdodHM6IDUxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgU2FmZXR5IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaWJfZ2V0X2V0aF9zcGVlZCgpYCBpbiBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgbW92aW5nIGBkZXZfcHV0KG5ldGRldilgIGRvd24gYSBmZXcgbGluZXMuIFByZXZpb3VzbHksIHRoZSBjb2RlIHNlcXVlbmNlIHdhcyBgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncygpYCwgYHJ0bmxfdW5sb2NrKClgLCBgZGV2X3B1dChuZXRkZXYpYCwgYW5kIHRoZW4gYSBjaGVjayBvbiB0aGUgYGxrc2V0dGluZ3NgIHN0cnVjdCBhbmQgYSB3YXJuaW5nIG1lc3NhZ2UgdGhhdCBtaWdodCB1c2UgYG5ldGRldi0mZ3Q7bmFtZWAuIE5vdywgaXQmIzM5O3MgYF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MoKWAsIGBydG5sX3VubG9jaygpYCwgdGhlIGNoZWNrLCAqdGhlbiogYGRldl9wdXQobmV0ZGV2KWAuCgpUaGUgYnVnIGlzIHByZXR0eSBjbGVhcjogYSB1c2UtYWZ0ZXItZnJlZS4gYGRldl9wdXQobmV0ZGV2KWAgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZSwgcG90ZW50aWFsbHkgZnJlZWluZyB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYG5ldGRldmAgcG9pbnRlci4gIFRoZW4sIGluc2lkZSB0aGF0IHdhcm5pbmcgbWVzc2FnZSwgc3BlY2lmaWNhbGx5IHRoZSBgcHJfd2FybmAgY2FsbCwgdGhlcmUmIzM5O3MgYSBkZXJlZmVyZW5jZSB0byBgbmV0ZGV2LSZndDtuYW1lYC4gIFRoYXQmIzM5O3MgdGV4dGJvb2sgdXNlLWFmdGVyLWZyZWUsIHBsYWluIGFuZCBzaW1wbGUuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucz8gV2UmIzM5O3JlIGNvbmNlcm5lZCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gQnV0IHRoZSBwYXRjaCBpcyBwdXJlbHkgYWJvdXQgKm1vdmluZyogYSBgZGV2X3B1dCgpYCBjYWxsIHRvIGZpeCBhbiBleGlzdGluZyB1c2UtYWZ0ZXItZnJlZS4gVGhlIGBsa3NldHRpbmdzYCBzdHJ1Y3QgaXMgcG9wdWxhdGVkIGJ5IGBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKClgLCBhbmQgdGhlIGxvZ2ljIGFyb3VuZCBpdCByZW1haW5zIHRoZSBzYW1lLiBObyBuZXcgbWVtb3J5IGlzIGJlaW5nIGluaXRpYWxpemVkIG9yIHJlYWQgaW4gYSBkaWZmZXJlbnQgd2F5IGJlY2F1c2Ugb2YgdGhlIHBhdGNoLiBTbywgbm8sIEkmIzM5O20gY29uZmlkZW50IHRoZXJlJiMzOTtzIG5vIG5lZWQgZm9yIEtNU0FOIGhlcmUuICBXZSYjMzk7cmUgb25seSBmaXhpbmcgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLCBub3QgaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHVzZS1hZnRlci1mcmVlIGJ1ZyB3aGVyZSBgbmV0ZGV2LVx1MDAzZW5hbWVgIHdhcyBhY2Nlc3NlZCBpbiBhIGBwcl93YXJuYCBzdGF0ZW1lbnQgYWZ0ZXIgYGRldl9wdXQobmV0ZGV2KWAgaGFkIGFscmVhZHkgZHJvcHBlZCB0aGUgcmVmZXJlbmNlIHRvIGBuZXRkZXZgLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYG5ldGRldi1cdTAwM2VuYW1lYCB3YXMgYWNjZXNzZWQgaW4gYSBgcHJfd2FybmAgc3RhdGVtZW50IGFmdGVyIGBkZXZfcHV0KG5ldGRldilgIGhhZCBhbHJlYWR5IGRyb3BwZWQgdGhlIHJlZmVyZW5jZSB0byBgbmV0ZGV2YC4gVXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBsb2dpYyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6MTkuODU2ODI0ODY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwNDg5OTA3NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiUkRNQV9SWEVcIixcbiAgICBcIlJETUFfU0lXXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWJfZ2V0X2V0aF9zcGVlZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYG5ldGRldi1cXHUwMDNlbmFtZWAgd2FzIGFjY2Vzc2VkIGluIGEgYHByX3dhcm5gIHN0YXRlbWVudCBhZnRlciBgZGV2X3B1dChuZXRkZXYpYCBoYWQgYWxyZWFkeSBkcm9wcGVkIHRoZSByZWZlcmVuY2UgdG8gYG5ldGRldmAuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbG9naWMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gYGliX2dldF9ldGhfc3BlZWRgIGJ5IG1vdmluZyBgZGV2X3B1dChuZXRkZXYpYCBhZnRlciBhY2Nlc3NpbmcgYG5ldGRldi1cXHUwMDNlbmFtZWAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZSBSRE1BIGRyaXZlcnMgKFJYRSBhbmQgU0lXKSB3aGVuIHF1ZXJ5aW5nIHBvcnQgYXR0cmlidXRlcywgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6MTkuODU2ODMwODY3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIyMDk1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYTRlMmUwZmZiNGE1ZWJhMjAwZWNhZDUyODgzODdhZjcyYzBmYjU4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDA3OjM5OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jXFxuaW5kZXggODY4MTFkMzEwOTJjZS4uNTdmMTA5YzgwODVkYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY1xcbkBAIC0yMDUyLDggKzIwNTIsNiBAQCBpbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxcbiBcXHRyYyA9IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcXHUwMDI2bGtzZXR0aW5ncyk7XFxuIFxcdHJ0bmxfdW5sb2NrKCk7XFxuIFxcbi1cXHRkZXZfcHV0KG5ldGRldik7XFxuLVxcbiBcXHRpZiAoIXJjIFxcdTAwMjZcXHUwMDI2IGxrc2V0dGluZ3MuYmFzZS5zcGVlZCAhPSAodTMyKVNQRUVEX1VOS05PV04pIHtcXG4gXFx0XFx0bmV0ZGV2X3NwZWVkID0gbGtzZXR0aW5ncy5iYXNlLnNwZWVkO1xcbiBcXHR9IGVsc2Uge1xcbkBAIC0yMDYzLDYgKzIwNjEsOCBAQCBpbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxcbiBcXHRcXHRcXHRcXHRuZXRkZXYtXFx1MDAzZW5hbWUsIG5ldGRldl9zcGVlZCk7XFxuIFxcdH1cXG4gXFxuK1xcdGRldl9wdXQobmV0ZGV2KTtcXG4rXFxuIFxcdGliX2dldF93aWR0aF9hbmRfc3BlZWQobmV0ZGV2X3NwZWVkLCBsa3NldHRpbmdzLmxhbmVzLFxcbiBcXHRcXHRcXHQgICAgICAgc3BlZWQsIHdpZHRoKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM5OjIwLjMwOTg4NDg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzgxMzUwNjE4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiUkRNQV9SWEVcIixcbiAgICBcIlJETUFfU0lXXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaWJfZ2V0X2V0aF9zcGVlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIGluIGBpYl9nZXRfZXRoX3NwZWVkYCBieSBtb3ZpbmcgYGRldl9wdXQobmV0ZGV2KWAgYWZ0ZXIgYWNjZXNzaW5nIGBuZXRkZXYtXFx1MDAzZW5hbWVgLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB2aWEgc29mdHdhcmUgUkRNQSBkcml2ZXJzIChSWEUgYW5kIFNJVykgd2hlbiBxdWVyeWluZyBwb3J0IGF0dHJpYnV0ZXMsIG1ha2luZyBpdCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZhNGUyZTBmZmI0YTVlYmEyMDBlY2FkNTI4ODM4N2FmNzJjMGZiNThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwNzozOToxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jXG5pbmRleCA4NjgxMWQzMTA5MmNlLi41N2YxMDljODA4NWRhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY1xuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY1xuQEAgLTIwNTIsOCArMjA1Miw2IEBAIGludCBpYl9nZXRfZXRoX3NwZWVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIHBvcnRfbnVtLCB1MTYgKnNwZWVkLCB1OCAqd2lkdGgpXG4gXHRyYyA9IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcdTAwMjZsa3NldHRpbmdzKTtcbiBcdHJ0bmxfdW5sb2NrKCk7XG4gXG4tXHRkZXZfcHV0KG5ldGRldik7XG4tXG4gXHRpZiAoIXJjIFx1MDAyNlx1MDAyNiBsa3NldHRpbmdzLmJhc2Uuc3BlZWQgIT0gKHUzMilTUEVFRF9VTktOT1dOKSB7XG4gXHRcdG5ldGRldl9zcGVlZCA9IGxrc2V0dGluZ3MuYmFzZS5zcGVlZDtcbiBcdH0gZWxzZSB7XG5AQCAtMjA2Myw2ICsyMDYxLDggQEAgaW50IGliX2dldF9ldGhfc3BlZWQoc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgcG9ydF9udW0sIHUxNiAqc3BlZWQsIHU4ICp3aWR0aClcbiBcdFx0XHRcdG5ldGRldi1cdTAwM2VuYW1lLCBuZXRkZXZfc3BlZWQpO1xuIFx0fVxuIFxuK1x0ZGV2X3B1dChuZXRkZXYpO1xuK1xuIFx0aWJfZ2V0X3dpZHRoX2FuZF9zcGVlZChuZXRkZXZfc3BlZWQsIGxrc2V0dGluZ3MubGFuZXMsXG4gXHRcdFx0ICAgICAgIHNwZWVkLCB3aWR0aCk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOToyMC4zMDk4ODY0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzI0MzEyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIGEgTmV0d29yayBEZXZpY2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmNgLiBSaWdodCBhd2F5LCBpdCBzZWVtcyB0byBpbnZvbHZlIGEgZmFpcmx5IHNwZWNpZmljIGZ1bmN0aW9uLCBgaWJfZ2V0X2V0aF9zcGVlZGAuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gc2ltcGx5IGJlIG1vdmluZyB0aGUgbGluZSBgZGV2X3B1dChuZXRkZXYpO2AgZG93biBhIGZldyBsaW5lcyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5LiBNb3ZpbmcgYSBgZGV2X3B1dGAgY2FsbCBzdWdnZXN0cyBzb21lIHJlc291cmNlIG1hbmFnZW1lbnQgY29uY2VybiwgbGlrZWx5IHJlbGF0ZWQgdG8gcmVsZWFzaW5nIGEgbmV0d29yayBkZXZpY2UuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29udGV4dCBvZiBgaWJfZ2V0X2V0aF9zcGVlZGAgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZCBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGltcGFjdCBpcy4gSSdsbCBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGlzIGEgYnVnIGZpeCwgYW4gb3B0aW1pemF0aW9uLCBvciBwb3NzaWJseSBldmVuIGEgc3VidGxlIGNoYW5nZSB0aGF0IGNvdWxkIGhhdmUgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM5OjIzLjc0MjMyMDIwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTA1NzY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpYl9nZXRfZXRoX3NwZWVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYz0xOTU0PXN0YXRpYyB2b2lkIGliX2dldF93aWR0aF9hbmRfc3BlZWQodTMyIG5ldGRldl9zcGVlZCwgdTMyIGxhbmVzLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYy0yMDM2LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmM6MjAzNzppbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMtMjAzOC17XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jLTIwNzAtfVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmM6MjA3MTpFWFBPUlRfU1lNQk9MKGliX2dldF9ldGhfc3BlZWQpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMtMjA3Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6MjMuNzkxMzgzOTc3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MjU5MzI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJbmZpbmliYW5kIE5JQyBTcGVlZCBEZXRlY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJbmZpbmliYW5kIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBgaWJfZ2V0X2V0aF9zcGVlZGAgZnVuY3Rpb24gaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmNgLCBmaWd1cmVzIG91dCB0aGUgRXRoZXJuZXQgc3BlZWQgb2YgdGhlIGF0dGFjaGVkIGhhcmR3YXJlLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgYW5kIHRoZW4gSSdsbCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LCBhbmQgZmluYWxseSBzdGFydCBtYWtpbmcgaW5mZXJlbmNlcy4gVGhpcyBzZWVtcyBsaWtlIGEgY29yZSBmdW5jdGlvbiwgc28gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgaW50byB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgUEhZIGRyaXZlcnMsIHBlcmhhcHMgd2l0aCBzb21lIGNsZXZlciBhdXRvLW5lZ290aWF0aW9uIGhhbmRsaW5nLiBJJ20gYWxzbyBjdXJpb3VzIGlmIGl0IGhhbmRsZXMgZGlmZmVyZW50IEV0aGVybmV0IGdlbmVyYXRpb25zIGFuZCB3aGF0IGVycm9yIGhhbmRsaW5nIGlzIGluIHBsYWNlLiBUaW1lIHRvIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOToyNi44ODM5ODE5ODVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjg4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDM3LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDM3OlxcdGludCBpYl9nZXRfZXRoX3NwZWVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIHBvcnRfbnVtLCB1MTYgKnNwZWVkLCB1OCAqd2lkdGgpXFxuMjAzODpcXHR7XFxuMjAzOTpcXHRcXHRpbnQgcmM7XFxuMjA0MDpcXHRcXHR1MzIgbmV0ZGV2X3NwZWVkO1xcbjIwNDE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4yMDQyOlxcdFxcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGxrc2V0dGluZ3MgPSB7fTtcXG4yMDQzOlxcdFxcbjIwNDQ6XFx0XFx0aWYgKHJkbWFfcG9ydF9nZXRfbGlua19sYXllcihkZXYsIHBvcnRfbnVtKSAhPSBJQl9MSU5LX0xBWUVSX0VUSEVSTkVUKVxcbjIwNDU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMjA0NjpcXHRcXG4yMDQ3OlxcdFxcdG5ldGRldiA9IGliX2RldmljZV9nZXRfbmV0ZGV2KGRldiwgcG9ydF9udW0pO1xcbjIwNDg6XFx0XFx0aWYgKCFuZXRkZXYpXFxuMjA0OTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4yMDUwOlxcdFxcbjIwNTE6XFx0XFx0cnRubF9sb2NrKCk7XFxuMjA1MjpcXHRcXHRyYyA9IF9fZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MobmV0ZGV2LCBcXHUwMDI2bGtzZXR0aW5ncyk7XFxuMjA1MzpcXHRcXHRydG5sX3VubG9jaygpO1xcbjIwNTQ6XFx0XFxuMjA1NTpcXHRcXHRpZiAoIXJjIFxcdTAwMjZcXHUwMDI2IGxrc2V0dGluZ3MuYmFzZS5zcGVlZCAhPSAodTMyKVNQRUVEX1VOS05PV04pIHtcXG4yMDU2OlxcdFxcdFxcdG5ldGRldl9zcGVlZCA9IGxrc2V0dGluZ3MuYmFzZS5zcGVlZDtcXG4yMDU3OlxcdFxcdH0gZWxzZSB7XFxuMjA1ODpcXHRcXHRcXHRuZXRkZXZfc3BlZWQgPSBTUEVFRF8xMDAwO1xcbjIwNTk6XFx0XFx0XFx0aWYgKHJjKVxcbjIwNjA6XFx0XFx0XFx0XFx0cHJfd2FybihcXFwiJXMgc3BlZWQgaXMgdW5rbm93biwgZGVmYXVsdGluZyB0byAldVxcXFxuXFxcIixcXG4yMDYxOlxcdFxcdFxcdFxcdFxcdG5ldGRldi1cXHUwMDNlbmFtZSwgbmV0ZGV2X3NwZWVkKTtcXG4yMDYyOlxcdFxcdH1cXG4yMDYzOlxcdFxcbjIwNjQ6XFx0XFx0ZGV2X3B1dChuZXRkZXYpO1xcbjIwNjU6XFx0XFxuMjA2NjpcXHRcXHRpYl9nZXRfd2lkdGhfYW5kX3NwZWVkKG5ldGRldl9zcGVlZCwgbGtzZXR0aW5ncy5sYW5lcyxcXG4yMDY3OlxcdFxcdFxcdFxcdCAgICAgICBzcGVlZCwgd2lkdGgpO1xcbjIwNjg6XFx0XFxuMjA2OTpcXHRcXHRyZXR1cm4gMDtcXG4yMDcwOlxcdH1cXG4yMDcxOlxcdEVYUE9SVF9TWU1CT0woaWJfZ2V0X2V0aF9zcGVlZCk7XFxuMjA3MjpcXHRcXG4yMDczOlxcdGludCBpYl9tb2RpZnlfcXAoc3RydWN0IGliX3FwICpxcCxcXG4yMDc0OlxcdFxcdFxcdCBzdHJ1Y3QgaWJfcXBfYXR0ciAqcXBfYXR0cixcXG4yMDc1OlxcdFxcdFxcdCBpbnQgcXBfYXR0cl9tYXNrKVxcbjIwNzY6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOToyNi44ODQzMTQ0MjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzk5NTcyODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBBIFVzZS1BZnRlci1GcmVlIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIG1vdmluZyB0aGUgYGRldl9wdXQobmV0ZGV2KWAgY2FsbC4gQWgsIEkgc2VlIHdoeS4gVGhleSdyZSBkb2luZyB0aGlzIGJlY2F1c2UgdGhlIGNvZGUgaW5zaWRlIHRoYXQgYGlmICghcmMgLi4uKWAgYmxvY2ssIHNwZWNpZmljYWxseSBpbiB0aGUgYGVsc2VgIGJyYW5jaCB3aXRoIHRoYXQgYHByX3dhcm5gLCBhY2Nlc3NlcyBgbmV0ZGV2LVx1MDAzZW5hbWVgLiBJZiBgZGV2X3B1dChuZXRkZXYpYCBoYXBwZW5zICpiZWZvcmUqIHRoYXQsIHdlJ3JlIGxvb2tpbmcgYXQgYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBgbmV0ZGV2YCBjb3VsZCBiZSBmcmVlZCByaWdodCBiZWZvcmUgd2UgdHJ5IHRvIGFjY2VzcyBpdHMgYG5hbWVgIGZpZWxkLCB3aGljaCBpcywgb2J2aW91c2x5LCBiYWQgbmV3cy5cblxuSG1tLCB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIGlzIGEgbGVnaXRpbWF0ZSB1c2UtYWZ0ZXItZnJlZSBidWcgdGhhdCdzIGJlaW5nIGZpeGVkIGluIGBpYl9nZXRfZXRoX3NwZWVkYC4gQW5kLCBiZWNhdXNlIGBpYl9nZXRfZXRoX3NwZWVkYCBpcyBleHBvcnRlZCwgaXQncyB1c2VkIGJ5IGRyaXZlcnMuIFRoaXMgaXMgaW1wb3J0YW50OiBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZHJpdmVycyBhcmUgYWN0dWFsbHkgY2FsbGluZyBgaWJfZ2V0X2V0aF9zcGVlZGAuIFRpbWUgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVycyBhbmQgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhpcyBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MjgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOTozMS4yODM4OTEyNjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4MTE3MTkyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpYl9nZXRfZXRoX3NwZWVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jPTE5NTQ9c3RhdGljIHZvaWQgaWJfZ2V0X3dpZHRoX2FuZF9zcGVlZCh1MzIgbmV0ZGV2X3NwZWVkLCB1MzIgbGFuZXMsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jLTIwMzYtXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYzoyMDM3OmludCBpYl9nZXRfZXRoX3NwZWVkKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwgdTMyIHBvcnRfbnVtLCB1MTYgKnNwZWVkLCB1OCAqd2lkdGgpXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYy0yMDM4LXtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMtMjA3MC19XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYzoyMDcxOkVYUE9SVF9TWU1CT0woaWJfZ2V0X2V0aF9zcGVlZCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYy0yMDcyLVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYz0yOTE9aW50IGJueHRfcmVfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnRfbnVtLFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0zMjctXFx0cG9ydF9hdHRyLVxcdTAwM2Vpbml0X3R5cGVfcmVwbHkgPSAwO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9ibnh0X3JlL2liX3ZlcmJzLmM6MzI4OlxcdHJjID0gaWJfZ2V0X2V0aF9zcGVlZChcXHUwMDI2cmRldi1cXHUwMDNlaWJkZXYsIHBvcnRfbnVtLCBcXHUwMDI2cG9ydF9hdHRyLVxcdTAwM2VhY3RpdmVfc3BlZWQsXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2JueHRfcmUvaWJfdmVyYnMuYy0zMjktXFx0XFx0XFx0ICAgICAgXFx1MDAyNnBvcnRfYXR0ci1cXHUwMDNlYWN0aXZlX3dpZHRoKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9wcm92aWRlci5jPTMwNj1zdGF0aWMgaW50IGM0aXdfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcHJvdmlkZXIuYy0zMTAtXFx0cHJfZGVidWcoXFxcImliZGV2ICVwXFxcXG5cXFwiLCBpYmRldik7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Byb3ZpZGVyLmM6MzExOlxcdHJldCA9IGliX2dldF9ldGhfc3BlZWQoaWJkZXYsIHBvcnQsIFxcdTAwMjZwcm9wcy1cXHUwMDNlYWN0aXZlX3NwZWVkLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9wcm92aWRlci5jLTMxMi1cXHRcXHRcXHQgICAgICAgXFx1MDAyNnByb3BzLVxcdTAwM2VhY3RpdmVfd2lkdGgpO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmM9MzgwPWludCBlcmRtYV9xdWVyeV9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1MzIgcG9ydCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV92ZXJicy5jLTQwMS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvZXJkbWEvZXJkbWFfdmVyYnMuYzo0MDI6XFx0aWJfZ2V0X2V0aF9zcGVlZChpYmRldiwgcG9ydCwgXFx1MDAyNmF0dHItXFx1MDAzZWFjdGl2ZV9zcGVlZCwgXFx1MDAyNmF0dHItXFx1MDAzZWFjdGl2ZV93aWR0aCk7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX3ZlcmJzLmMtNDAzLVxcdGF0dHItXFx1MDAzZW1heF9tdHUgPSBpYl9tdHVfaW50X3RvX2VudW0obmRldi1cXHUwMDNlbXR1KTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9obnMvaG5zX3JvY2VfbWFpbi5jPTI4NT1zdGF0aWMgaW50IGhuc19yb2NlX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJfZGV2LCB1MzIgcG9ydF9udW0sXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaG5zL2huc19yb2NlX21haW4uYy0zMDQtXFx0cHJvcHMtXFx1MDAzZXBrZXlfdGJsX2xlbiA9IDE7XFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9tYWluLmM6MzA1OlxcdHJldCA9IGliX2dldF9ldGhfc3BlZWQoaWJfZGV2LCBwb3J0X251bSwgXFx1MDAyNnByb3BzLVxcdTAwM2VhY3RpdmVfc3BlZWQsXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2hucy9obnNfcm9jZV9tYWluLmMtMzA2LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2cHJvcHMtXFx1MDAzZWFjdGl2ZV93aWR0aCk7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfaWJkZXYuYz04MD1zdGF0aWMgaW50IGlvbmljX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lvbmljL2lvbmljX2liZGV2LmMtMTE0LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pb25pYy9pb25pY19pYmRldi5jOjExNTpcXHRyZXR1cm4gaWJfZ2V0X2V0aF9zcGVlZChpYmRldiwgcG9ydCxcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaW9uaWMvaW9uaWNfaWJkZXYuYy0xMTYtXFx0XFx0XFx0XFx0XFx1MDAyNmF0dHItXFx1MDAzZWFjdGl2ZV9zcGVlZCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jPTg4PXN0YXRpYyBpbnQgaXJkbWFfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTMyIHBvcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvaXJkbWEvdmVyYnMuYy0xMDktXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2lyZG1hL3ZlcmJzLmM6MTEwOlxcdGliX2dldF9ldGhfc3BlZWQoaWJkZXYsIHBvcnQsIFxcdTAwMjZwcm9wcy1cXHUwMDNlYWN0aXZlX3NwZWVkLFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9pcmRtYS92ZXJicy5jLTExMS1cXHRcXHRcXHQgXFx1MDAyNnByb3BzLVxcdTAwM2VhY3RpdmVfd2lkdGgpO1xcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFpbi5jPTYxMT1pbnQgbWFuYV9pYl9xdWVyeV9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1MzIgcG9ydCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYy02MzEtXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvbWFpbi5jOjYzMjpcXHRpYl9nZXRfZXRoX3NwZWVkKGliZGV2LCBwb3J0LCBcXHUwMDI2cHJvcHMtXFx1MDAzZWFjdGl2ZV9zcGVlZCwgXFx1MDAyNnByb3BzLVxcdTAwM2VhY3RpdmVfd2lkdGgpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL21haW4uYy02MzMtXFx0cHJvcHMtXFx1MDAzZXBrZXlfdGJsX2xlbiA9IDE7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvdXNuaWNfaWJfdmVyYnMuYz0zMzA9aW50IHVzbmljX2liX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHUzMiBwb3J0LFxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmMtMzM2LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody91c25pYy91c25pY19pYl92ZXJicy5jOjMzNzpcXHRpZiAoaWJfZ2V0X2V0aF9zcGVlZChpYmRldiwgcG9ydCwgXFx1MDAyNnByb3BzLVxcdTAwM2VhY3RpdmVfc3BlZWQsXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmMtMzM4LVxcdFxcdFxcdCAgICAgXFx1MDAyNnByb3BzLVxcdTAwM2VhY3RpdmVfd2lkdGgpKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmMtMzQxLVxcdC8qXFxuZHJpdmVycy9pbmZpbmliYW5kL2h3L3VzbmljL3VzbmljX2liX3ZlcmJzLmM6MzQyOlxcdCAqIHVzZGV2X2xvY2sgaXMgYWNxdWlyZWQgYWZ0ZXIgKGFuZCBub3QgYmVmb3JlKSBpYl9nZXRfZXRoX3NwZWVkIGNhbGxcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvdXNuaWNfaWJfdmVyYnMuYzozNDM6XFx0ICogYmVjYXVzZSBhY3F1aXJpbmcgcnRubF9sb2NrIGluIGliX2dldF9ldGhfc3BlZWQsIHdoaWxlIGhvbGRpbmdcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvdXNuaWMvdXNuaWNfaWJfdmVyYnMuYy0zNDQtXFx0ICogdXNkZXZfbG9jayBjb3VsZCBsZWFkIHRvIGEgZGVhZGxvY2suXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jPTM0PXN0YXRpYyBpbnQgcnhlX3F1ZXJ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jLTU1LVxcdG11dGV4X2xvY2soXFx1MDAyNnJ4ZS1cXHUwMDNldXNkZXZfbG9jayk7XFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYzo1NjpcXHRyZXQgPSBpYl9nZXRfZXRoX3NwZWVkKGliZGV2LCBwb3J0X251bSwgXFx1MDAyNmF0dHItXFx1MDAzZWFjdGl2ZV9zcGVlZCxcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jLTU3LVxcdFxcdFxcdCAgICAgICBcXHUwMDI2YXR0ci1cXHUwMDNlYWN0aXZlX3dpZHRoKTtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9zaXcvc2l3X3ZlcmJzLmM9MTczPWludCBzaXdfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICpiYXNlX2RldiwgdTMyIHBvcnQsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd192ZXJicy5jLTE4MC1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvc2l3L3Npd192ZXJicy5jOjE4MTpcXHRydiA9IGliX2dldF9ldGhfc3BlZWQoYmFzZV9kZXYsIHBvcnQsIFxcdTAwMjZhdHRyLVxcdTAwM2VhY3RpdmVfc3BlZWQsXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9zaXdfdmVyYnMuYy0xODItXFx0XFx0XFx0IFxcdTAwMjZhdHRyLVxcdTAwM2VhY3RpdmVfd2lkdGgpO1xcbi0tXFxuaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmg9NDc2MT12b2lkIGliX2RyYWluX3FwKHN0cnVjdCBpYl9xcCAqcXApO1xcbmluY2x1ZGUvcmRtYS9pYl92ZXJicy5oLTQ3NjItXFxuaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmg6NDc2MzppbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCxcXG5pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaC00NzY0LVxcdFxcdCAgICAgdTggKndpZHRoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6MzQuMDY1MDcxMTI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY3OTc2MDg1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGByeGVfcXVlcnlfcG9ydGAgYW5kIGBzaXdfcXVlcnlfcG9ydGAgYXJlIHRoZSBlbnRyeSBwb2ludHMuIFRoZXkncmUgc29mdHdhcmUgUkRNQSBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgUlhFIGFuZCBTSVcsIGFuZCBJIGtub3cgdGhlc2UgYXJlIG9mdGVuIGZvdW5kIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gSW50ZXJlc3RpbmcuIFRoZW4gSSBzcG90IGBpYl9nZXRfZXRoX3NwZWVkYCwgd2hpY2ggaXMgZml4aW5nIGEgdXNlLWFmdGVyLWZyZWUgYnVnLiBUaGF0IGdyYWJzIG15IGF0dGVudGlvbiDigJMgYSBjcml0aWNhbCBidWcgZml4IGluIGEgY29yZSBJbmZpbmliYW5kIGZ1bmN0aW9uPyBBYnNvbHV0ZWx5LCB0aGlzIGlzIHNvbWV0aGluZyB3b3J0aCBzZXJpb3VzIGludmVzdGlnYXRpb24gYW5kIGZ1enppbmcsIGdpdmVuIGl0cyBpbXBvcnRhbmNlLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZm9jdXMgb24gdGhvc2UgdGhyZWUgZnVuY3Rpb25zOiBgaWJfZ2V0X2V0aF9zcGVlZGAsIGByeGVfcXVlcnlfcG9ydGAsIGFuZCBgc2l3X3F1ZXJ5X3BvcnRgLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBgaWJfZ2V0X2V0aF9zcGVlZGAgaXMgaW52b2x2ZWQgaW4gKnF1ZXJ5aW5nKiBwb3J0IGF0dHJpYnV0ZXMuIEl0J3MgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZXNlIG90aGVyIGZ1bmN0aW9ucywgd2hpY2ggbWFrZXMgaXQgZXZlbiBtb3JlIGFwcGVhbGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXMgdGhlIGF0dHJpYnV0ZXMgY291bGQgYmUgbWFuaXB1bGF0ZWQgaW4gd2F5cyB0byB0cmlnZ2VyIHRoZSBidWcuIEkgdGhpbmsgSSdsbCBzdGFydCB3aXRoIHRha2luZyBhIGNsb3NlciBsb29rIGF0IGByeGVfcXVlcnlfcG9ydGAgZmlyc3QsIHRvIHNlZSBob3cgaXQgY2FsbHMgYGliX2dldF9ldGhfc3BlZWRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDU5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM5OjM4Ljc0NDgzNTE4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjkxNjA4NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnhlX3F1ZXJ5X3BvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYz0xOD1zdGF0aWMgaW50IHJ4ZV9xdWVyeV9kZXZpY2Uoc3RydWN0IGliX2RldmljZSAqaWJkZXYsXFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jLTMzLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmM6MzQ6c3RhdGljIGludCByeGVfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldixcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jLTM1LVxcdFxcdFxcdCAgdTMyIHBvcnRfbnVtLCBzdHJ1Y3QgaWJfcG9ydF9hdHRyICphdHRyKVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9yeGVfdmVyYnMuYz0xNDU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlX29wcyByeGVfZGV2X29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvcnhlX3ZlcmJzLmMtMTUwMi1cXHQucXVlcnlfZ2lkID0gcnhlX3F1ZXJ5X2dpZCxcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jOjE1MDM6XFx0LnF1ZXJ5X3BvcnQgPSByeGVfcXVlcnlfcG9ydCxcXG5kcml2ZXJzL2luZmluaWJhbmQvc3cvcnhlL3J4ZV92ZXJicy5jLTE1MDQtXFx0LnF1ZXJ5X3FwID0gcnhlX3F1ZXJ5X3FwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOTozOS4wMTQwMDE3MDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk1OTc2OTczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSWEUgUXVlcnkgUG9ydCBDb25maWd1cmF0aW9uOiBBIFF1aWNrIENoZWNrKipcblxuT2theSwgc28gYHJ4ZV9xdWVyeV9wb3J0YCBpcyBhIGRldmljZSBvcGVyYXRpb24g4oCTIGdvdCBpdC4gTm93LCB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGRvIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyB0aGluZyBydW5zIGFzIGV4cGVjdGVkPyBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgUlhFLXNwZWNpZmljIGFuZCBTSVctc3BlY2lmaWMgcmVxdWlyZW1lbnRzLiBGb3IgUlhFLCB0aGF0J3Mgb2J2aW91c2x5IGBSRE1BX1JYRWAuIEFuZCBmb3IgU0lXLCBpdCdzIGBSRE1BX1NJV2AuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgc28gZmFyLiBUbyBiZSBleHRyYSBzdXJlLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGUgaW4gYGRyaXZlcnMvaW5maW5pYmFuZC9zdy9yeGUvS2NvbmZpZ2AuIEl04oCZcyBhbHdheXMgZ29vZCB0byBjb25maXJtIGFzc3VtcHRpb25zIHdpdGggdGhlIGRlZmluaXRpdmUgc291cmNlLCBldmVuIGZvciBzb21ldGhpbmcgdGhhdCAqc2VlbXMqIGJhc2ljLiBBIHF1aWNrIGNoZWNrIG9mIHRoYXQgS2NvbmZpZyBzaG91bGQgZ2l2ZSBtZSBhbGwgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgdG8gYXZvaWQgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MjgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOTo0My45NzM3NzYyNTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3J4ZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgUkRNQV9SWEVcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTb2Z0d2FyZSBSRE1BIG92ZXIgRXRoZXJuZXQgKFJvQ0UpIGRyaXZlclxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBQQ0kgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiA2NEJJVFxcbiAgIDU6XFx0XFx0ZGVwZW5kcyBvbiBJTkZJTklCQU5EX1ZJUlRfRE1BXFxuICAgNjpcXHRcXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0VGhpcyBkcml2ZXIgaW1wbGVtZW50cyB0aGUgSW5maW5pQmFuZCBSRE1BIHRyYW5zcG9ydCBvdmVyXFxuICAxMDpcXHRcXHR0aGUgTGludXggbmV0d29yayBzdGFjay4gSXQgZW5hYmxlcyBhIHN5c3RlbSB3aXRoIGFcXG4gIDExOlxcdFxcdHN0YW5kYXJkIEV0aGVybmV0IGFkYXB0ZXIgdG8gaW50ZXJvcGVyYXRlIHdpdGggYSBSb0NFXFxuICAxMjpcXHRcXHRhZGFwdGVyIG9yIHdpdGggYW5vdGhlciBzeXN0ZW0gcnVubmluZyB0aGUgUlhFIGRyaXZlci5cXG4gIDEzOlxcdFxcdERvY3VtZW50YXRpb24gb24gSW5maW5pQmFuZCBhbmQgUm9DRSBjYW4gYmUgZG93bmxvYWRlZCBhdFxcbiAgMTQ6XFx0XFx0d3d3LmluZmluaWJhbmR0YS5vcmcgYW5kIHd3dy5vcGVuZmFicmljcy5vcmcuIChTZWUgYWxzb1xcbiAgMTU6XFx0XFx0c2l3IHdoaWNoIGlzIGEgc2ltaWxhciBzb2Z0d2FyZSBkcml2ZXIgZm9yIGlXQVJQLilcXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0VGhlIGRyaXZlciBpcyBzcGxpdCBpbnRvIHR3byBsYXllcnMsIG9uZSBpbnRlcmZhY2VzIHdpdGggdGhlXFxuICAxODpcXHRcXHRMaW51eCBSRE1BIHN0YWNrIGFuZCBpbXBsZW1lbnRzIGEga2VybmVsIG9yIHVzZXIgc3BhY2VcXG4gIDE5OlxcdFxcdHZlcmJzIEFQSS4gVGhlIHVzZXIgc3BhY2UgdmVyYnMgQVBJIHJlcXVpcmVzIGEgc3VwcG9ydFxcbiAgMjA6XFx0XFx0bGlicmFyeSBuYW1lZCBsaWJyeGUgd2hpY2ggaXMgbG9hZGVkIGJ5IHRoZSBnZW5lcmljIHVzZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6NDMuOTczODYwNTA2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjc1OTYyOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBTSVcgS2NvbmZpZyBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGZvciBTSVcgKFNvY2tldC1iYXNlZCBJbmZpbmlCYW5kKS4gTXkgaW5pdGlhbCBzY2FuIHRlbGxzIG1lIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgU0lXIGRyaXZlciBhcmUgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBJbmZpbmlCYW5kIHN0YWNrLlxuXG5GaXJzdCwgSSdtIGV4cGVjdGluZyB0byBzZWUgdGhlIHVzdWFsIHN1c3BlY3RzOiBgYm9vbGAgYW5kIGB0cmlzdGF0ZWAgb3B0aW9ucyBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBkcml2ZXIgYW5kIHBvc3NpYmx5IGZpbmUtdHVuaW5nIGl0cyBmZWF0dXJlcy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9ucyDigJMgYnVmZmVyIHNpemVzLCBjYWNoaW5nIHNldHRpbmdzLCBtYXliZSBldmVuIHNvbWUgb3B0aW9ucyByZWxhdGVkIHRvIG9mZmxvYWRpbmcuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaWYgdGhlcmUgYXJlIGRlYnVnIG9yIHRyYWNpbmcgZmxhZ3MsIGFzIHRob3NlIGFyZSBjcml0aWNhbCBmb3IgZGlhZ25vc2luZyBhbnkgcGVyZm9ybWFuY2UgaXNzdWVzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cbkdpdmVuIHRoYXQgaXQncyBTSVcsIEknbGwgYmUgb24gdGhlIGxvb2tvdXQgZm9yIGFueXRoaW5nIHJlbGF0ZWQgdG8gc29ja2V0LWJhc2VkIHRyYW5zcG9ydC1sYXllciBvcHRpbWl6YXRpb25zLiBBcmUgdGhlcmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBidWZmZXIgcG9vbCBtYW5hZ2VtZW50LCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgdGltZW91dHMsIGNvbmdlc3Rpb24gY29udHJvbCBiZWhhdmlvciwgb3IgbWF5YmUgZXZlbiBUQ1AvVURQIHByb3RvY29sIHNwZWNpZmljIHR3ZWFrcz8gVW5kZXJzdGFuZGluZyBob3cgdGhlc2Ugb3B0aW9ucyBpbmZsdWVuY2UgcGVyZm9ybWFuY2UgY29tcGFyZWQgdG8gbmF0aXZlIEluZmluaUJhbmQgaXMgY3J1Y2lhbC5cblxuSeKAmW0gYWxzbyBhc3N1bWluZyB0aGVyZSB3aWxsIGJlIGRlcGVuZGVuY2llcyBhbmQgcmVsYXRpb25zaGlwcyBzcGVjaWZpZWQsIGxpbmtpbmcgdGhlIFNJVyBvcHRpb25zIHRvIG90aGVyIEluZmluaUJhbmQgY29tcG9uZW50cyBvciwgcG90ZW50aWFsbHksIG5ldHdvcmsgc3RhY2sgZmVhdHVyZXMuIFRoZSBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBhcmUgZ29pbmcgdG8gYmUga2V5IHRvIHNlZSBpZiBhbnkgcHJlcmVxdWlzaXRlcyBsaWtlIHNwZWNpZmljIGhhcmR3YXJlIGNhcGFiaWxpdGllcywgUkRNQSBmZWF0dXJlcywgb3Iga2VybmVsIHZlcnNpb25zIG5lZWQgdG8gYmUgaW4gcGxhY2UgZm9yIGEgY2VydGFpbiBvcHRpb24gdG8gYmUgdmlhYmxlLiBJdOKAmXMgYWxzbyBpbXBvcnRhbnQgdG8gaWRlbnRpZnkgd2hhdCBvdGhlciBLY29uZmlnIGZpbGVzIHRoaXMgb25lIHB1bGxzIGluIG9yIHJlbGllcyBvbi5cblxuRmluYWxseSwgSSB3aWxsIGJlIHNjYW5uaW5nIGZvciBkZXRhaWxlZCBoZWxwIHRleHQuIEhvcGVmdWxseSwgdGhlIGRlc2NyaXB0aW9ucyBhcmUgY2xlYXIsIGNvbmNpc2UsIGFuZCBwcm92aWRlIGVub3VnaCBjb250ZXh0IGFib3V0IHRoZSBpbXBhY3RzIG9mIGVhY2ggc2V0dGluZy4gSSdtIGxvb2tpbmcgZm9yIGEgY2xlYXIgZXhwbGFuYXRpb24gb2YgZWFjaCBvcHRpb24ncyBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsIHBvd2VyIGNvbnN1bXB0aW9uLCBhbmQgcG90ZW50aWFsIGNvbXBhdGliaWxpdHkgaXNzdWVzLiBHb29kIGRvY3VtZW50YXRpb24gbWFrZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIHdlbGwtdW5kZXJzdG9vZCBtb2R1bGUgYW5kIGEgYmxhY2sgYm94LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDQzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOTo0OC4yNDE0NjA0OTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL3N3L3Npdy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIFJETUFfU0lXXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiU29mdHdhcmUgUkRNQSBvdmVyIFRDUC9JUCAoaVdBUlApIGRyaXZlclxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORklOSUJBTkRfVklSVF9ETUFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDY6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdFRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIGlXQVJQIFJETUEgdHJhbnNwb3J0IG92ZXJcXG4gICA5OlxcdFxcdHRoZSBMaW51eCBUQ1AvSVAgbmV0d29yayBzdGFjay4gSXQgZW5hYmxlcyBhIHN5c3RlbSB3aXRoIGFcXG4gIDEwOlxcdFxcdHN0YW5kYXJkIEV0aGVybmV0IGFkYXB0ZXIgdG8gaW50ZXJvcGVyYXRlIHdpdGggYSBpV0FSUFxcbiAgMTE6XFx0XFx0YWRhcHRlciBvciB3aXRoIGFub3RoZXIgc3lzdGVtIHJ1bm5pbmcgdGhlIFNJVyBkcml2ZXIuXFxuICAxMjpcXHRcXHQoU2VlIGFsc28gUlhFIHdoaWNoIGlzIGEgc2ltaWxhciBzb2Z0d2FyZSBkcml2ZXIgZm9yIFJvQ0UuKVxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHRUaGUgZHJpdmVyIGludGVyZmFjZXMgd2l0aCB0aGUgTGludXggUkRNQSBzdGFjayBhbmRcXG4gIDE1OlxcdFxcdGltcGxlbWVudHMgYm90aCBhIGtlcm5lbCBhbmQgdXNlciBzcGFjZSBSRE1BIHZlcmJzIEFQSS5cXG4gIDE2OlxcdFxcdFRoZSB1c2VyIHNwYWNlIHZlcmJzIEFQSSByZXF1aXJlcyBhIHN1cHBvcnRcXG4gIDE3OlxcdFxcdGxpYnJhcnkgbmFtZWQgbGlic2l3IHdoaWNoIGlzIGxvYWRlZCBieSB0aGUgZ2VuZXJpYyB1c2VyXFxuICAxODpcXHRcXHRzcGFjZSB2ZXJicyBBUEksIGxpYmlidmVyYnMuIFRvIGltcGxlbWVudCBSRE1BIG92ZXJcXG4gIDE5OlxcdFxcdFRDUC9JUCwgdGhlIGRyaXZlciBmdXJ0aGVyIGludGVyZmFjZXMgd2l0aCB0aGUgTGludXhcXG4gIDIwOlxcdFxcdGluLWtlcm5lbCBUQ1Agc29ja2V0IGxheWVyLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOTo0OC4yNDE1NDQzODJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MTMzMTI5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzOlxuXG4qKkV4YW1pbmluZyBSRE1BIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBzZWUgd2UncmUgZGVhbGluZyB3aXRoIFJETUEgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBgUkRNQV9SWEVgIGFuZCBgUkRNQV9TSVdgLiBJIGtub3cgdGhvc2UgYXJlIHJlbGF0ZWQgdG8gc3BlY2lmaWMgUkRNQSB0cmFuc3BvcnRzLiBBbmQgSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgYElORklOSUJBTkRgIHNldHRpbmcgaXMgYWxzbyBlbmFibGVkLCBhcyB0aGVzZSBhcmUgbGlrZWx5IGRlcGVuZGVudCBvbiBpdC4gVGhlIHRhc2ssIGFzIEkgdW5kZXJzdGFuZCBpdCwgaW52b2x2ZXMgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgbG9jYXRpb24gb2YgYSBzcGVjaWZpYyBmdW5jdGlvbiwgYGliX2dldF9ldGhfc3BlZWRgLiBGcm9tIHBhc3QgZXhwZXJpZW5jZSwgSSByZWNhbGwgdGhhdCBgaWJfZ2V0X2V0aF9zcGVlZGAgcmVzaWRlcyBpbiBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY2AsIHdoaWNoIGlzIGhlbHBmdWwuIFRvIHZlcmlmeSB0aGUgcHJlY2lzZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBjb25maWd1cmF0aW9uLCBteSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLiBFaXRoZXIgYGRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL0tjb25maWdgIG9yIHBvc3NpYmx5IGp1c3QgYGRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnYCBzaG91bGQgc2hlZCBsaWdodCBvbiB0aGUgZXhhY3QgcmVxdWlyZW1lbnRzIGZvciBlbmFibGluZyB0aGVzZSBmZWF0dXJlcyBhbmQgY29uZmlybSB0aGUgbGluayB3aXRoIGBJTkZJTklCQU5EYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI0OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6NTEuOTEyODc5MDE5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51Y29uZmlnIElORklOSUJBTkRcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBIQVNfRE1BXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgIDY6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uICFBTFBIQVxcbiAgIDg6XFx0XFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuICAgOTpcXHRcXHRzZWxlY3QgSVJRX1BPTExcXG4gIDEwOlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgQ29yZSBzdXBwb3J0IGZvciBJbmZpbmlCYW5kIChJQikuICBNYWtlIHN1cmUgdG8gYWxzbyBzZWxlY3RcXG4gIDEzOlxcdFxcdCAgYW55IHByb3RvY29scyB5b3Ugd2lzaCB0byB1c2UgYXMgd2VsbCBhcyBkcml2ZXJzIGZvciB5b3VyXFxuICAxNDpcXHRcXHQgIEluZmluaUJhbmQgaGFyZHdhcmUuXFxuICAxNTpcXHRcXG4gIDE2OlxcdGlmIElORklOSUJBTkRcXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIElORklOSUJBTkRfVVNFUl9NQURcXG4gIDE5OlxcdFxcdHRyaXN0YXRlIFxcXCJJbmZpbmlCYW5kIHVzZXJzcGFjZSBNQUQgc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gSU5GSU5JQkFORFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzozOTo1MS45MTI5NzY0MzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ1MTcyODIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJbmZpbmlCYW5kIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgdG8ga2VlcCBpbiBtaW5kIGFyZSBgSU5GSU5JQkFORGAsIGBSRE1BX1JYRWAsIGFuZCBgUkRNQV9TSVdgLiBUaGUgYWN0dWFsIGZ1bmN0aW9uIHRoYXQncyBiZWVuIG1vZGlmaWVkIGhlcmUgaXMgYGliX2dldF9ldGhfc3BlZWRgLiBGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCB3aGljaCBpcyBhbHdheXMgYSBjcml0aWNhbCBmaXguXG5cbkxldCdzIGJyZWFrIGRvd24gdGhlIGltcGxpY2F0aW9ucyBmb3IgdGVzdGluZyBhbmQgZnV6emluZy4gVGhlIHBhdGNoIG1vdmVzIGBkZXZfcHV0KG5ldGRldilgICphZnRlciogdGhlIGFjY2VzcyB0byBgbmV0ZGV2LVx1MDAzZW5hbWVgIHdpdGhpbiBgaWJfZ2V0X2V0aF9zcGVlZGAsIHJpZ2h0PyBUaGlzIGlzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUuIFRoZSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhhdCBgaWJfZ2V0X2V0aF9zcGVlZGAgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHNvZnR3YXJlIFJETUEgZHJpdmVycywgc3BlY2lmaWNhbGx5IFJYRSBhbmQgU0lXLiBUaGlzIGlzIGZhbnRhc3RpYyBiZWNhdXNlIGl0IG1lYW5zIHdlIGNhbiBhY3R1YWxseSByZXByb2R1Y2UgYW5kIHRlc3QgdGhpcyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMg4oCTIHNvbWV0aGluZyB0aGF0IGlzIG9mdGVuIGNoYWxsZW5naW5nIHdpdGggdGhpcyBraW5kIG9mIGxvdy1sZXZlbCBuZXR3b3JraW5nIGNvZGUuXG5cblNvLCAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSdkIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIE15IHJlYXNvbmluZyBpcyB0aGUgY2xhc3NpYyBcImZpeCBmb3IgYSB1c2UtYWZ0ZXItZnJlZSwgcmVhY2hhYmxlIHRocm91Z2ggc29mdHdhcmUgUkRNQSwgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzXCIgbGluZS4gSSdsbCBuZWVkIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiBgaWJfZ2V0X2V0aF9zcGVlZGAsIG9idmlvdXNseS4gQW5kLCBvZiBjb3Vyc2UsIEknbGwgZW5hYmxlIHRoZSBgSU5GSU5JQkFORGAsIGBSRE1BX1JYRWAsIGFuZCBgUkRNQV9TSVdgIGNvbmZpZ3VyYXRpb25zIHRvIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBwYXRocyBhcmUgYWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQ5LCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM5OjU4LjM2NDcwNzEyOFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjM1OTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJSRE1BX1JYRVwiLFxuICAgIFwiUkRNQV9TSVdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpYl9nZXRfZXRoX3NwZWVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gYGliX2dldF9ldGhfc3BlZWRgIGJ5IG1vdmluZyBgZGV2X3B1dChuZXRkZXYpYCBhZnRlciBhY2Nlc3NpbmcgYG5ldGRldi1cXHUwMDNlbmFtZWAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZSBSRE1BIGRyaXZlcnMgKFJYRSBhbmQgU0lXKSB3aGVuIHF1ZXJ5aW5nIHBvcnQgYXR0cmlidXRlcywgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJSRE1BX1JYRVwiLFxuICAgIFwiUkRNQV9TSVdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpYl9nZXRfZXRoX3NwZWVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gYGliX2dldF9ldGhfc3BlZWRgIGJ5IG1vdmluZyBgZGV2X3B1dChuZXRkZXYpYCBhZnRlciBhY2Nlc3NpbmcgYG5ldGRldi1cXHUwMDNlbmFtZWAuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHZpYSBzb2Z0d2FyZSBSRE1BIGRyaXZlcnMgKFJYRSBhbmQgU0lXKSB3aGVuIHF1ZXJ5aW5nIHBvcnQgYXR0cmlidXRlcywgbWFraW5nIGl0IHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6NTguNDQ0OTUxMzM5WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDYwODUyNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6Mzk6NTguNDQ1NTg0OTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODQ2MDIxMzcxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSB1c2UtYWZ0ZXItZnJlZSBidWcgd2hlcmUgYG5ldGRldi1cXHUwMDNlbmFtZWAgd2FzIGFjY2Vzc2VkIGluIGEgYHByX3dhcm5gIHN0YXRlbWVudCBhZnRlciBgZGV2X3B1dChuZXRkZXYpYCBoYWQgYWxyZWFkeSBkcm9wcGVkIHRoZSByZWZlcmVuY2UgdG8gYG5ldGRldmAuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbG9naWMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmE0ZTJlMGZmYjRhNWViYTIwMGVjYWQ1Mjg4Mzg3YWY3MmMwZmI1OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA3OjM5OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmNcbmluZGV4IDg2ODExZDMxMDkyY2UuLjU3ZjEwOWM4MDg1ZGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jXG5AQCAtMjA1Miw4ICsyMDUyLDYgQEAgaW50IGliX2dldF9ldGhfc3BlZWQoc3RydWN0IGliX2RldmljZSAqZGV2LCB1MzIgcG9ydF9udW0sIHUxNiAqc3BlZWQsIHU4ICp3aWR0aClcbiBcdHJjID0gX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyhuZXRkZXYsIFx1MDAyNmxrc2V0dGluZ3MpO1xuIFx0cnRubF91bmxvY2soKTtcbiBcbi1cdGRldl9wdXQobmV0ZGV2KTtcbi1cbiBcdGlmICghcmMgXHUwMDI2XHUwMDI2IGxrc2V0dGluZ3MuYmFzZS5zcGVlZCAhPSAodTMyKVNQRUVEX1VOS05PV04pIHtcbiBcdFx0bmV0ZGV2X3NwZWVkID0gbGtzZXR0aW5ncy5iYXNlLnNwZWVkO1xuIFx0fSBlbHNlIHtcbkBAIC0yMDYzLDYgKzIwNjEsOCBAQCBpbnQgaWJfZ2V0X2V0aF9zcGVlZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXYsIHUzMiBwb3J0X251bSwgdTE2ICpzcGVlZCwgdTggKndpZHRoKVxuIFx0XHRcdFx0bmV0ZGV2LVx1MDAzZW5hbWUsIG5ldGRldl9zcGVlZCk7XG4gXHR9XG4gXG4rXHRkZXZfcHV0KG5ldGRldik7XG4rXG4gXHRpYl9nZXRfd2lkdGhfYW5kX3NwZWVkKG5ldGRldl9zcGVlZCwgbGtzZXR0aW5ncy5sYW5lcyxcbiBcdFx0XHQgICAgICAgc3BlZWQsIHdpZHRoKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjM5OjU4LjQ0NTU4NjI1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDYwMTg0NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBTYWZldHkgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgaWJfZ2V0X2V0aF9zcGVlZCgpYCBpbiBgZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgbW92aW5nIGBkZXZfcHV0KG5ldGRldilgIGRvd24gYSBmZXcgbGluZXMuIFByZXZpb3VzbHksIHRoZSBjb2RlIHNlcXVlbmNlIHdhcyBgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncygpYCwgYHJ0bmxfdW5sb2NrKClgLCBgZGV2X3B1dChuZXRkZXYpYCwgYW5kIHRoZW4gYSBjaGVjayBvbiB0aGUgYGxrc2V0dGluZ3NgIHN0cnVjdCBhbmQgYSB3YXJuaW5nIG1lc3NhZ2UgdGhhdCBtaWdodCB1c2UgYG5ldGRldi1cdTAwM2VuYW1lYC4gTm93LCBpdCdzIGBfX2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzKClgLCBgcnRubF91bmxvY2soKWAsIHRoZSBjaGVjaywgKnRoZW4qIGBkZXZfcHV0KG5ldGRldilgLlxuXG5UaGUgYnVnIGlzIHByZXR0eSBjbGVhcjogYSB1c2UtYWZ0ZXItZnJlZS4gYGRldl9wdXQobmV0ZGV2KWAgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZSwgcG90ZW50aWFsbHkgZnJlZWluZyB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYG5ldGRldmAgcG9pbnRlci4gIFRoZW4sIGluc2lkZSB0aGF0IHdhcm5pbmcgbWVzc2FnZSwgc3BlY2lmaWNhbGx5IHRoZSBgcHJfd2FybmAgY2FsbCwgdGhlcmUncyBhIGRlcmVmZXJlbmNlIHRvIGBuZXRkZXYtXHUwMDNlbmFtZWAuICBUaGF0J3MgdGV4dGJvb2sgdXNlLWFmdGVyLWZyZWUsIHBsYWluIGFuZCBzaW1wbGUuIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggdGhhdC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IEtNU0FOIGNvbmNlcm5zPyBXZSdyZSBjb25jZXJuZWQgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIEJ1dCB0aGUgcGF0Y2ggaXMgcHVyZWx5IGFib3V0ICptb3ZpbmcqIGEgYGRldl9wdXQoKWAgY2FsbCB0byBmaXggYW4gZXhpc3RpbmcgdXNlLWFmdGVyLWZyZWUuIFRoZSBgbGtzZXR0aW5nc2Agc3RydWN0IGlzIHBvcHVsYXRlZCBieSBgX19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncygpYCwgYW5kIHRoZSBsb2dpYyBhcm91bmQgaXQgcmVtYWlucyB0aGUgc2FtZS4gTm8gbmV3IG1lbW9yeSBpcyBiZWluZyBpbml0aWFsaXplZCBvciByZWFkIGluIGEgZGlmZmVyZW50IHdheSBiZWNhdXNlIG9mIHRoZSBwYXRjaC4gU28sIG5vLCBJJ20gY29uZmlkZW50IHRoZXJlJ3Mgbm8gbmVlZCBmb3IgS01TQU4gaGVyZS4gIFdlJ3JlIG9ubHkgZml4aW5nIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZSwgbm90IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEzMiwiT3V0cHV0VG9rZW5zIjoxMjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzo0MDowNi45MDU3NzUzNjlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIHdoZXJlIGBuZXRkZXYtXFx1MDAzZW5hbWVgIHdhcyBhY2Nlc3NlZCBpbiBhIGBwcl93YXJuYCBzdGF0ZW1lbnQgYWZ0ZXIgYGRldl9wdXQobmV0ZGV2KWAgaGFkIGFscmVhZHkgZHJvcHBlZCB0aGUgcmVmZXJlbmNlIHRvIGBuZXRkZXZgLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgdXNlLWFmdGVyLWZyZWUgYnVnIHdoZXJlIGBuZXRkZXYtXFx1MDAzZW5hbWVgIHdhcyBhY2Nlc3NlZCBpbiBhIGBwcl93YXJuYCBzdGF0ZW1lbnQgYWZ0ZXIgYGRldl9wdXQobmV0ZGV2KWAgaGFkIGFscmVhZHkgZHJvcHBlZCB0aGUgcmVmZXJlbmNlIHRvIGBuZXRkZXZgLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGxvZ2ljIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnksIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbndnz[1] Phase: Succeeded StartedAt: 2026-08-21 07:40:58 +0000 UTC FinishedAt: 2026-08-21 07:40:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 07:40:58 +0000 UTC FinishedAt: 2026-08-21 07:40:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2] Phase: Succeeded StartedAt: 2026-08-21 07:40:58 +0000 UTC FinishedAt: 2026-08-21 11:21:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 07:40:58 +0000 UTC FinishedAt: 2026-08-21 11:21:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 07:40:58 +0000 UTC FinishedAt: 2026-08-21 07:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 07:40:58 +0000 UTC FinishedAt: 2026-08-21 07:41:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-convert-artifact-2159598956/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 07:41:18 +0000 UTC FinishedAt: 2026-08-21 07:58:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 07:41:18 +0000 UTC FinishedAt: 2026-08-21 07:58:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1f9b5f55-5c5b-4050-8550-dfbd54ff2e6c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-convert-artifact-2159598956/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "915c591e-ad74-471d-a7bf-2b0663f4bef0", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-build-action-1356220314/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 07:41:18 +0000 UTC FinishedAt: 2026-08-21 07:58:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1f9b5f55-5c5b-4050-8550-dfbd54ff2e6c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-convert-artifact-2159598956/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "915c591e-ad74-471d-a7bf-2b0663f4bef0", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-build-action-1356220314/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 07:58:15 +0000 UTC FinishedAt: 2026-08-21 07:58:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 07:58:15 +0000 UTC FinishedAt: 2026-08-21 07:58:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 07:58:15 +0000 UTC FinishedAt: 2026-08-21 07:58:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 07:58:15 +0000 UTC FinishedAt: 2026-08-21 07:58:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-convert-artifact-3442724395/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 07:58:25 +0000 UTC FinishedAt: 2026-08-21 08:00:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 07:58:25 +0000 UTC FinishedAt: 2026-08-21 08:00:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*915c591e-ad74-471d-a7bf-2b0663f4bef0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-build-action-1356220314/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 08:00:50 +0000 UTC FinishedAt: 2026-08-21 08:00:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 08:00:50 +0000 UTC FinishedAt: 2026-08-21 08:00:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 08:00:50 +0000 UTC FinishedAt: 2026-08-21 08:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 08:00:50 +0000 UTC FinishedAt: 2026-08-21 08:17:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1f9b5f55-5c5b-4050-8550-dfbd54ff2e6c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-convert-artifact-3442724395/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "fe18a594-3471-48ba-908b-993ff133e145", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-build-action-3994910287/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 08:00:50 +0000 UTC FinishedAt: 2026-08-21 08:16:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1f9b5f55-5c5b-4050-8550-dfbd54ff2e6c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-convert-artifact-3442724395/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "fe18a594-3471-48ba-908b-993ff133e145", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-build-action-3994910287/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 08:17:09 +0000 UTC FinishedAt: 2026-08-21 08:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 08:17:09 +0000 UTC FinishedAt: 2026-08-21 08:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 08:17:09 +0000 UTC FinishedAt: 2026-08-21 08:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 08:17:09 +0000 UTC FinishedAt: 2026-08-21 08:19:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe18a594-3471-48ba-908b-993ff133e145,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-build-action-3994910287/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 08:19:19 +0000 UTC FinishedAt: 2026-08-21 11:21:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 08:19:19 +0000 UTC FinishedAt: 2026-08-21 11:21:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*915c591e-ad74-471d-a7bf-2b0663f4bef0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe18a594-3471-48ba-908b-993ff133e145,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-build-action-1356220314/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-build-action-3994910287/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 08:19:19 +0000 UTC FinishedAt: 2026-08-21 08:19:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 08:19:19 +0000 UTC FinishedAt: 2026-08-21 08:19:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-convert-artifact-4293671492/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 08:19:19 +0000 UTC FinishedAt: 2026-08-21 08:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 08:19:19 +0000 UTC FinishedAt: 2026-08-21 08:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 08:19:19 +0000 UTC FinishedAt: 2026-08-21 08:19:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 08:19:29 +0000 UTC FinishedAt: 2026-08-21 11:21:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbndnz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ib_get_eth_speed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["INFINIBAND","RDMA_RXE","RDMA_SIW"],"series_id":"44fd2fb1-99f9-4c46-9b24-81bdf8c26535","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 08:19:29 +0000 UTC FinishedAt: 2026-08-21 11:21:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*915c591e-ad74-471d-a7bf-2b0663f4bef0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fe18a594-3471-48ba-908b-993ff133e145,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-build-action-1356220314/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-build-action-3994910287/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbndnz/series-workflowbndnz-convert-artifact-4293671492/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}