Name: series-workflowkp4ms Phase: Succeeded StartedAt: 2026-07-02 17:51:02 +0000 UTC FinishedAt: 2026-07-02 19:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[0] Phase: Succeeded StartedAt: 2026-07-02 17:51:02 +0000 UTC FinishedAt: 2026-07-02 18:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 17:51:03 +0000 UTC FinishedAt: 2026-07-02 18:11:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d8e8b85a85fe21954d303db68034aac4639df88d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACB", "MACB_PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d8e8b85a85fe21954d303db68034aac4639df88d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACB", "MACB_PCI" ], "series_id": "f271c85a-74b2-4f65-a78b-01ac1e63987f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "macb_free_consistent" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQ0ImIzM0OywKICAgICYjMzQ7TUFDQl9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWNiX2ZyZWVfY29uc2lzdGVudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgdG8gdW5tYXAgYW5kIGRyb3AgcGVuZGluZyBUWCBza2JzIHdoZW4gZnJlZWluZyBjb25zaXN0ZW50IG1lbW9yeS4gVGhpcyBpcyBmdW5jdGlvbmFsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHdyYXBwZXIgKG1hY2JfcGNpKSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1YTJiMGFiNmIwNGFkMDI1MjI4MzA2OGFjN2QyYjA5ODhhYjRjZDMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxODoxMDozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuaW5kZXggZmQyODJhMTcwMGZiOTguLmQzOTRmMWY0M2I2ODVlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuQEAgLTI2NjgsOCAmIzQzOzI2NjgsMjUgQEAgc3RhdGljIHZvaWQgbWFjYl9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IG1hY2IgKmJwKVxuIFx0ZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBicC1cdTAwM2VxdWV1ZXNbMF0ucnhfcmluZywgYnAtXHUwMDNlcXVldWVzWzBdLnJ4X3JpbmdfZG1hKTtcbiBcbiBcdGZvciAocSA9IDAsIHF1ZXVlID0gYnAtXHUwMDNlcXVldWVzOyBxIFx1MDAzYyBicC1cdTAwM2VudW1fcXVldWVzOyAmIzQzOyYjNDM7cSwgJiM0MzsmIzQzO3F1ZXVlKSB7XG4tXHRcdGtmcmVlKHF1ZXVlLVx1MDAzZXR4X3NrYik7XG4tXHRcdHF1ZXVlLVx1MDAzZXR4X3NrYiA9IE5VTEw7XG4mIzQzO1x0XHRpZiAocXVldWUtXHUwMDNldHhfc2tiKSB7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBkcm9wcGVkID0gMCwgdGFpbDtcbiYjNDM7XG4mIzQzO1x0XHRcdGZvciAodGFpbCA9IHF1ZXVlLVx1MDAzZXR4X3RhaWw7IHRhaWwgIT0gcXVldWUtXHUwMDNldHhfaGVhZDtcbiYjNDM7XHRcdFx0ICAgICB0YWlsJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdGlmIChtYWNiX3R4X3NrYihxdWV1ZSwgdGFpbCktXHUwMDNlc2tiKVxuJiM0MztcdFx0XHRcdFx0ZHJvcHBlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdFx0bWFjYl90eF91bm1hcChicCwgbWFjYl90eF9za2IocXVldWUsIHRhaWwpLCAwKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCAmIzQzOz0gZHJvcHBlZDtcbiYjNDM7XHRcdFx0YnAtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQgJiM0Mzs9IGRyb3BwZWQ7XG4mIzQzO1xuJiM0MztcdFx0XHRrZnJlZShxdWV1ZS1cdTAwM2V0eF9za2IpO1xuJiM0MztcdFx0XHRxdWV1ZS1cdTAwM2V0eF9za2IgPSBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHF1ZXVlLVx1MDAzZXR4X2hlYWQgPSAwO1xuJiM0MztcdFx0cXVldWUtXHUwMDNldHhfdGFpbCA9IDA7XG4gXHRcdHF1ZXVlLVx1MDAzZXR4X3JpbmcgPSBOVUxMO1xuIFx0XHRxdWV1ZS1cdTAwM2VyeF9yaW5nID0gTlVMTDtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNCJiMzNDssCiAgICAmIzM0O01BQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjYl9mcmVlX2NvbnNpc3RlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIHRvIHVubWFwIGFuZCBkcm9wIHBlbmRpbmcgVFggc2ticyB3aGVuIGZyZWVpbmcgY29uc2lzdGVudCBtZW1vcnkuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIFBDSSB3cmFwcGVyIChtYWNiX3BjaSkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YTJiMGFiNmIwNGFkMDI1MjI4MzA2OGFjN2QyYjA5ODhhYjRjZDMzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAxODoxMDozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCmluZGV4IGZkMjgyYTE3MDBmYjk4Li5kMzk0ZjFmNDNiNjg1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCkBAIC0yNjY4LDggJiM0MzsyNjY4LDI1IEBAIHN0YXRpYyB2b2lkIG1hY2JfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBtYWNiICpicCkKIAlkbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIGJwLSZndDtxdWV1ZXNbMF0ucnhfcmluZywgYnAtJmd0O3F1ZXVlc1swXS5yeF9yaW5nX2RtYSk7CiAKIAlmb3IgKHEgPSAwLCBxdWV1ZSA9IGJwLSZndDtxdWV1ZXM7IHEgJmx0OyBicC0mZ3Q7bnVtX3F1ZXVlczsgJiM0MzsmIzQzO3EsICYjNDM7JiM0MztxdWV1ZSkgewotCQlrZnJlZShxdWV1ZS0mZ3Q7dHhfc2tiKTsKLQkJcXVldWUtJmd0O3R4X3NrYiA9IE5VTEw7CiYjNDM7CQlpZiAocXVldWUtJmd0O3R4X3NrYikgewomIzQzOwkJCXVuc2lnbmVkIGludCBkcm9wcGVkID0gMCwgdGFpbDsKJiM0MzsKJiM0MzsJCQlmb3IgKHRhaWwgPSBxdWV1ZS0mZ3Q7dHhfdGFpbDsgdGFpbCAhPSBxdWV1ZS0mZ3Q7dHhfaGVhZDsKJiM0MzsJCQkgICAgIHRhaWwmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCWlmIChtYWNiX3R4X3NrYihxdWV1ZSwgdGFpbCktJmd0O3NrYikKJiM0MzsJCQkJCWRyb3BwZWQmIzQzOyYjNDM7OwomIzQzOwkJCQltYWNiX3R4X3VubWFwKGJwLCBtYWNiX3R4X3NrYihxdWV1ZSwgdGFpbCksIDApOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlxdWV1ZS0mZ3Q7c3RhdHMudHhfZHJvcHBlZCAmIzQzOz0gZHJvcHBlZDsKJiM0MzsJCQlicC0mZ3Q7ZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkICYjNDM7PSBkcm9wcGVkOwomIzQzOwomIzQzOwkJCWtmcmVlKHF1ZXVlLSZndDt0eF9za2IpOwomIzQzOwkJCXF1ZXVlLSZndDt0eF9za2IgPSBOVUxMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcXVldWUtJmd0O3R4X2hlYWQgPSAwOwomIzQzOwkJcXVldWUtJmd0O3R4X3RhaWwgPSAwOwogCQlxdWV1ZS0mZ3Q7dHhfcmluZyA9IE5VTEw7CiAJCXF1ZXVlLSZndDtyeF9yaW5nID0gTlVMTDsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRHJpdmVyIFBhdGNoIGZvciBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNgLiBJdCYjMzk7cyB0aGUgYG1hY2JfZnJlZV9jb25zaXN0ZW50YCBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgYWRkaW5nIHNvbWUgY2xlYW51cCBmb3IgdHJhbnNtaXQgc2tidWZmcyBiZWZvcmUgbWVtb3J5IGlzIGZyZWVkLiBUaGF0JiMzOTtzIGEgZ29vZCBwcmFjdGljZSwgZXNwZWNpYWxseSBpbiBlbnZpcm9ubWVudHMgd2hlcmUgcmVzb3VyY2VzIG1pZ2h0IGJlIHRpZ2h0bHkgbWFuYWdlZC4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB3aGV0aGVyIHRoaXMgZHJpdmVyLCB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciwgaXMgZXZlbiByZWxldmFudCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoZSBwYXRjaCBzdWdnZXN0cyB0aGF0IHRoZXJlIG1pZ2h0IGJlIHNvbWUga2luZCBvZiBpbnRlcmFjdGlvbiB3aXRoIGEgaG9zdCBzeXN0ZW0gd2hpY2ggbWF5IHVzZSB2aXJ0dWFsaXphdGlvbi4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gY29uZmlybSB0aGUgdHlwZSBvZiBkcml2ZXIgaW4gcXVlc3Rpb24uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCBiYWNrIHRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYCBhbmQgZmlndXJlIG91dCBpZiBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciBvciBhIFBDSSBkcml2ZXIuIFRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGFuZCB3aGVyZSBpdCBtaWdodCBiZSBleHBvc2VkIHRvIHZpcnR1YWxpemF0aW9uLXJlbGF0ZWQgaXNzdWVzLiBVbmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFic3RyYWN0aW9uIGlzIGNydWNpYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNiX2ZyZWVfY29uc2lzdGVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0yNjQ0PXN0YXRpYyB1bnNpZ25lZCBpbnQgbWFjYl9yeF9yaW5nX3NpemVfcGVyX3F1ZXVlKHN0cnVjdCBtYWNiICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTI2NDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjI2NDk6c3RhdGljIHZvaWQgbWFjYl9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IG1hY2IgKmJwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0yNjUwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTI3MzE9c3RhdGljIGludCBtYWNiX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IG1hY2IgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMjc4OC1vdXRfZXJyOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoyNzg5Olx0bWFjYl9mcmVlX2NvbnNpc3RlbnQoYnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0yNzkwLVx0cmV0dXJuIC1FTk9NRU07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0zMTYwPXN0YXRpYyBpbnQgbWFjYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0zMjIxLVx0fVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzozMjIyOlx0bWFjYl9mcmVlX2NvbnNpc3RlbnQoYnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0zMjIzLXBtX2V4aXQ6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0zMjI4PXN0YXRpYyBpbnQgbWFjYl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzI1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MzI1NTpcdG1hY2JfZnJlZV9jb25zaXN0ZW50KGJwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzI1Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRXRoZXJuZXQgRHJpdmVyIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgY2xlYXJseSBhbiBFdGhlcm5ldCBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBob3cgaXQmIzM5O3MgYmVpbmcgcmVnaXN0ZXJlZCB3aXRoIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0eXBpY2FsIHJlZ2lzdHJhdGlvbiBmbG93OiBpcyBpdCB1c2luZyB0aGUgc3RhbmRhcmQgYG5ldF9kZXZpY2VgIHN0cnVjdHVyZSBhbmQgdGhlIGByZWdpc3Rlcl9uZXRkZXYoKWAgY2FsbD8gT3IsIGFyZSB0aGV5IGdvaW5nIHdpdGggYSBtb3JlIG1vZGVybiBhcHByb2FjaCwgcGVyaGFwcyBhIHBsYXRmb3JtIGRldmljZSBvciBzb21ldGhpbmcgcmVsYXRlZCB0byBhIHNwZWNpZmljIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyPwoKSSYjMzk7bSBtZW50YWxseSBzY2FubmluZyBmb3IgdGhlIHJlbGV2YW50IG1hY3JvcyBhbmQgZnVuY3Rpb24gY2FsbHMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcmVnaXN0cmF0aW9uIG1ldGhvZCBvbiB0aGluZ3MgbGlrZSBwcm9iZS9yZW1vdmUsIHJlc291cmNlIGFsbG9jYXRpb24sIGludGVycnVwdCBoYW5kbGluZywgYW5kIGRyaXZlciBpbml0aWFsaXphdGlvbi4gVGhlIHJlZ2lzdHJhdGlvbiBpcyB0aGUgbGluY2hwaW4sIGFuZCB0aGUgd2F5IGl0JiMzOTtzIGRvbmUgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSBob3cgZXZlcnl0aGluZyBlbHNlIHdvcmtzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgcmVsYXRlZCB0byBzZXR0aW5nIHVwIHRoZSBuZXQgZGV2aWNlLCBpbml0aWFsaXppbmcgYW55IGhhcmR3YXJlLXNwZWNpZmljIGRhdGEsIGFuZCBsaW5raW5nIHRoZSBkcml2ZXIgdG8gdGhlIHJlbGV2YW50IG5ldHdvcmsgcHJvdG9jb2xzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZm9sbG93cyB0aGUgZXhwZWN0ZWQgcGF0dGVybnMgb3IgZGV2aWF0ZXMgaW4gYW4gaW50ZXJlc3Rpbmcgd2F5Li4uIEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBzb21lIGxpa2VseSBxdWVzdGlvbnMgaW4gbXkgbWluZCBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBleHBlY3RpbmcgdG8gc2VlIHdoZXJlIHRoZSBkcml2ZXIgdG91Y2hlcyB0aGUga2VybmVsIG5ldHdvcmsgc3RhY2ssIHRoZSByZWxldmFudCBpbnRlcnJ1cHQgaGFuZGxlcnMgYW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgZGlmZmVyZW50IG5ldHdvcmtpbmcgcHJvdG9jb2xzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGNvbmZpcm1zIHdoYXQgSSBhbHJlYWR5IGtub3cgYWJvdXQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BsYXRmb3JtX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz02MjQ2PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1hY2JfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI1Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjI1Nzptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1hY2JfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI1OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIFRoaXMgRHJpdmVyKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHBsYXRmb3JtIGRyaXZlciBoZXJlLCBhbmQgdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgbGVhcHMgdG8gbWluZCwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIGl0JiMzOTtzIGdvdCBhIFBDSSBjb3VudGVycGFydC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBlYXNpZXN0IHdheSB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBsaWtlIE1BQ0IuIFNvLCB0aGUgbWVudGFsIGNoZWNrbGlzdCBraWNrcyBpbjogbGV0JiMzOTtzIHF1aWNrbHkgc2VlIGlmIHRoZXJlJiMzOTtzIGFuIGFzc29jaWF0ZWQgUENJIGRyaXZlciBmb3IgTUFDQi4gS25vd2luZyB0aGF0IGFyY2hpdGVjdHVyZSB3aWxsIHNpZ25pZmljYW50bHkgc3RyZWFtbGluZSB0aGUgZGVidWdnaW5nIHByb2Nlc3MsIGFuZCBhbGxvdyBtZSB0byBxdWlja2x5IGdldCBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UuIEZyb20gdGhlcmUsIEkgY2FuIGdldCBhbGwgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwbGF0Zm9ybSBkcml2ZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM9MTI1PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYWNiX3BjaV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEzMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoxMzI6bW9kdWxlX3BjaV9kcml2ZXIobWFjYl9wY2lfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMzMtTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRldl9pZF90YWJsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbmZpcm1pbmcgUENJLVNwZWNpZmljIE1BQ0IgSW50ZXJhY3Rpb25zKioKClllcywgY29uZmlybWVkLCBgbWFjYl9wY2kuY2AgaXMgZGVmaW5pdGVseSBhIHRoaW5nLiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGludG8gYG1hY2JfcGNpLmNgLiBUaGUgY29yZSBxdWVzdGlvbiBJIG5lZWQgYW5zd2VyZWQgaXMgd2hldGhlciB0aGlzIFBDSS1zcGVjaWZpYyBkcml2ZXIgZGlyZWN0bHkgaW50ZWdyYXRlcyB3aXRoIG9yIHV0aWxpemVzIHRoZSBmdW5jdGlvbmFsaXR5IGRlZmluZWQgaW4gYG1hY2JfbWFpbi5jYC4gVW5kZXJzdGFuZGluZyB0aGF0IHJlbGF0aW9uc2hpcCBpcyBjcnVjaWFsLiBJcyBpdCBhIG1vZHVsYXIgYXBwcm9hY2gsIHdpdGggYG1hY2JfcGNpLmNgIGFjdGluZyBhcyBhIHRoaW4gUENJIGdsdWUgbGF5ZXIgY2FsbGluZyBmdW5jdGlvbnMgaW4gYG1hY2JfbWFpbi5jYCwgb3IgZG9lcyBpdCByZS1pbXBsZW1lbnQgb3IgaGVhdmlseSBvdmVycmlkZSBsb2dpYz8gVGhlIGludGVyYWN0aW9uIG1vZGVsIGRpY3RhdGVzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIGFueSBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoZSBQQ0kgaW50ZXJmYWNlIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBNQUNCJiMzOTtzIG92ZXJhbGwgYmVoYXZpb3IuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiBgbWFjYl9tYWluLmNgIGlzIHRoZSBjb3JlLCBzaGFyZWQgTUFDQiBpbXBsZW1lbnRhdGlvbiBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNiX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0yNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoyNzpzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0yOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jPTEyNT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFjYl9wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMjctXHQuaWRfdGFibGUgPSBkZXZfaWRfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6MTI4Olx0LnByb2JlICAgID0gbWFjYl9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMjktXHQucmVtb3ZlXHQgID0gbWFjYl9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbWFjYl9wcm9iZWAgaW4gdGhlIENvbnRleHQgb2YgTUFDQiBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtYWNiX3Byb2JlYCBpbiBgbWFjYl9wY2kuY2AsIGFuZCBteSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29udHJvbCBmbG93IGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0uIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBgbWFjYl9wcm9iZWAgKmRpcmVjdGx5KiBqdW1wIGludG8gYG1hY2JfbWFpbi5jYCB0byBoYW5kbGUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgb3IgZG9lcyBpdCBwcmltYXJpbHkgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIChgbmV0ZGV2YCkgd2l0aCB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2s/IEkmIzM5O20gYmV0dGluZyB0aGF0IGl0JiMzOTtzIHRoZSBsYXR0ZXIsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHkuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGp1bXAgdG8gdGhlIHJpZ2h0IGZpbGVzIGFuZCBmdW5jdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgcm91dGUgdGhhdCBpdCB0YWtlcy4gSXMgdGhlcmUgc29tZXRoaW5nLCBsaWtlIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGluIGBtYWNiX21haW4uY2AgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRoYXQgSSBjYW4gcXVpY2tseSBzcG90PyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjYl9jb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzE1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgbWFjYl9wY2kuY2AgZmlsZToKCioqQW5hbHl6aW5nIHRoZSBNQUNCIFBDSSBEcml2ZXIgQ29kZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGBtYWNiX3BjaS5jYCBmaWxlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGVzc2VuY2Ugb2YgdGhpcyBkcml2ZXIuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBub3QgbG9va2luZyBmb3IgYSBsaW5lLWJ5LWxpbmUgdW5kZXJzdGFuZGluZywgYnV0IHJhdGhlciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGtleSBpbnRlcmFjdGlvbnMuIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgUENJIGJ1cywgaG93IGl0IGhhbmRsZXMgZGV2aWNlIGluaXRpYWxpemF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIG1hbmFnZSB0aGUgTUFDQiBFdGhlcm5ldCBjb250cm9sbGVyLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyBhbnkgYXJlYXMgd2hlcmUgdGhlIFBDSSBzcGVjaWZpYyBjb2RlIG1pZ2h0IGRldmlhdGUgZnJvbSBhIG1vcmUgZ2VuZXJpYyBNQUNCIGRyaXZlciwgYW5kIGhvdyBpdCBpcyBhZGFwdGVkIHRvIGludGVyYWN0IHdpdGggdGhlIFBDSSBidXMuIEFueSBjbGV2ZXIgdHJpY2tzIG9yIHVudXN1YWwgb3B0aW1pemF0aW9ucyB1c2VkIHdpbGwganVtcCBvdXQgYXQgbWUgcHJldHR5IHF1aWNrbHkuIEkmIzM5O20gYWxzbyBnb2luZyB0byBzZWUgaG93IHdlbGwgaXQmIzM5O3Mgd3JpdHRlbiBhbmQgc3RydWN0dXJlZCwgbG9va2luZyBmb3IgZ29vZCBjb2RpbmcgcHJhY3RpY2VzIGFuZCBhcmVhcyB0aGF0IGNvdWxkIGJlIGltcHJvdmVkLiBJIHdpbGwgbG9vayBmb3IgYW55IHN1YnRsZSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MuIE92ZXJhbGwsIEkgd2FudCBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIFBDSS1zcGVjaWZpYyBwYXJ0cyBvZiB0aGlzIGRyaXZlciB3b3JrIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIE1BQ0Igc3Vic3lzdGVtLCByZWxhdGl2ZSB0byBteSBwcmlvciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0b3BpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qXG4gICAzOlx0ICogRE9DOiBDYWRlbmNlIEdFTSBQQ0kgd3JhcHBlci5cbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMjAxNiBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zIC0gaHR0cHM6Ly93d3cuY2FkZW5jZS5jb21cbiAgIDY6XHQgKlxuICAgNzpcdCAqIEF1dGhvcnM6IFJhZmFsIE96aWVibG8gXHUwMDNjcmFmYWxvQGNhZGVuY2UuY29tXHUwMDNlXG4gICA4Olx0ICpcdCAgICBCYXJ0b3N6IEZvbHRhIFx1MDAzY2Jmb2x0YUBjYWRlbmNlLmNvbVx1MDAzZVxuICAgOTpcdCAqL1xuICAxMDpcdFxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLXByb3ZpZGVyLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXCYjMzQ7bWFjYi5oXCYjMzQ7XG4gIDE4Olx0XG4gIDE5Olx0I2RlZmluZSBQQ0lfRFJJVkVSX05BTUUgXCYjMzQ7bWFjYl9wY2lcJiMzNDtcbiAgMjA6XHQjZGVmaW5lIFBMQVRfRFJJVkVSX05BTUUgXCYjMzQ7bWFjYlwmIzM0O1xuICAyMTpcdFxuICAyMjpcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9DRE5TX01BQ0IgMHhlMDA3XG4gIDIzOlx0XG4gIDI0Olx0I2RlZmluZSBHRU1fUENMS19SQVRFIDUwMDAwMDAwXG4gIDI1Olx0I2RlZmluZSBHRU1fSENMS19SQVRFIDUwMDAwMDAwXG4gIDI2Olx0XG4gIDI3Olx0c3RhdGljIGludCBtYWNiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gIDI4Olx0e1xuICAyOTpcdFx0aW50IGVycjtcbiAgMzA6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2O1xuICAzMTpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIHBsYXRfaW5mbztcbiAgMzI6XHRcdHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgcGxhdF9kYXRhO1xuICAzMzpcdFx0c3RydWN0IHJlc291cmNlIHJlc1syXTtcbiAgMzQ6XHRcbiAgMzU6XHRcdC8qIGVuYWJsZSBwY2kgZGV2aWNlICovXG4gIDM2Olx0XHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7XG4gIDM3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gIDM4Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0VuYWJsaW5nIFBDSSBkZXZpY2UgaGFzIGZhaWxlZDogJWRcJiMzNDssIGVycik7XG4gIDM5Olx0XHRcdHJldHVybiBlcnI7XG4gIDQwOlx0XHR9XG4gIDQxOlx0XG4gIDQyOlx0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiAgNDM6XHRcbiAgNDQ6XHRcdC8qIHNldCB1cCByZXNvdXJjZXMgKi9cbiAgNDU6XHRcdG1lbXNldChyZXMsIDB4MDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogQVJSQVlfU0laRShyZXMpKTtcbiAgNDY6XHRcdHJlc1swXS5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTtcbiAgNDc6XHRcdHJlc1swXS5lbmQgPSBwY2lfcmVzb3VyY2VfZW5kKHBkZXYsIDApO1xuICA0ODpcdFx0cmVzWzBdLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUU7XG4gIDQ5Olx0XHRyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTtcbiAgNTA6XHRcdHJlc1sxXS5zdGFydCA9IHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApO1xuICA1MTpcdFx0cmVzWzFdLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUU7XG4gIDUyOlx0XHRyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTtcbiAgNTM6XHRcbiAgNTQ6XHRcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtFTUFDIHBoeXNpY2FsIGJhc2UgYWRkcjogJXBhXFxuXCYjMzQ7LFxuICA1NTpcdFx0XHQgXHUwMDI2cmVzWzBdLnN0YXJ0KTtcbiAgNTY6XHRcbiAgNTc6XHRcdC8qIHNldCB1cCBtYWNiIHBsYXRmb3JtIGRhdGEgKi9cbiAgNTg6XHRcdG1lbXNldChcdTAwMjZwbGF0X2RhdGEsIDAsIHNpemVvZihwbGF0X2RhdGEpKTtcbiAgNTk6XHRcbiAgNjA6XHRcdC8qIGluaXRpYWxpemUgY2xvY2tzICovXG4gIDYxOlx0XHRwbGF0X2RhdGEucGNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtwY2xrXCYjMzQ7LCBOVUxMLCAwLFxuICA2MjpcdFx0XHRcdFx0XHRcdCBHRU1fUENMS19SQVRFKTtcbiAgNjM6XHRcdGlmIChJU19FUlIocGxhdF9kYXRhLnBjbGspKSB7XG4gIDY0Olx0XHRcdGVyciA9IFBUUl9FUlIocGxhdF9kYXRhLnBjbGspO1xuICA2NTpcdFx0XHRnb3RvIGVycl9wY2xrX3JlZ2lzdGVyO1xuICA2NjpcdFx0fVxuICA2NzpcdFxuICA2ODpcdFx0cGxhdF9kYXRhLmhjbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7aGNsa1wmIzM0OywgTlVMTCwgMCxcbiAgNjk6XHRcdFx0XHRcdFx0XHQgR0VNX0hDTEtfUkFURSk7XG4gIDcwOlx0XHRpZiAoSVNfRVJSKHBsYXRfZGF0YS5oY2xrKSkge1xuICA3MTpcdFx0XHRlcnIgPSBQVFJfRVJSKHBsYXRfZGF0YS5oY2xrKTtcbiAgNzI6XHRcdFx0Z290byBlcnJfaGNsa19yZWdpc3RlcjtcbiAgNzM6XHRcdH1cbiAgNzQ6XHRcbiAgNzU6XHRcdC8qIHNldCB1cCBwbGF0Zm9ybSBkZXZpY2UgaW5mbyAqL1xuICA3NjpcdFx0bWVtc2V0KFx1MDAyNnBsYXRfaW5mbywgMCwgc2l6ZW9mKHBsYXRfaW5mbykpO1xuICA3NzpcdFx0cGxhdF9pbmZvLnBhcmVudCA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuICA3ODpcdFx0cGxhdF9pbmZvLmZ3bm9kZSA9IHBkZXYtXHUwMDNlZGV2LmZ3bm9kZTtcbiAgNzk6XHRcdHBsYXRfaW5mby5uYW1lID0gUExBVF9EUklWRVJfTkFNRTtcbiAgODA6XHRcdHBsYXRfaW5mby5pZCA9IHBkZXYtXHUwMDNlZGV2Zm47XG4gIDgxOlx0XHRwbGF0X2luZm8ucmVzID0gcmVzO1xuICA4MjpcdFx0cGxhdF9pbmZvLm51bV9yZXMgPSBBUlJBWV9TSVpFKHJlcyk7XG4gIDgzOlx0XHRwbGF0X2luZm8uZGF0YSA9IFx1MDAyNnBsYXRfZGF0YTtcbiAgODQ6XHRcdHBsYXRfaW5mby5zaXplX2RhdGEgPSBzaXplb2YocGxhdF9kYXRhKTtcbiAgODU6XHRcdHBsYXRfaW5mby5kbWFfbWFzayA9IHBkZXYtXHUwMDNlZG1hX21hc2s7XG4gIDg2Olx0XG4gIDg3Olx0XHQvKiByZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2UgKi9cbiAgODg6XHRcdHBsYXRfZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoXHUwMDI2cGxhdF9pbmZvKTtcbiAgODk6XHRcdGlmIChJU19FUlIocGxhdF9kZXYpKSB7XG4gIDkwOlx0XHRcdGVyciA9IFBUUl9FUlIocGxhdF9kZXYpO1xuICA5MTpcdFx0XHRnb3RvIGVycl9wbGF0X2Rldl9yZWdpc3RlcjtcbiAgOTI6XHRcdH1cbiAgOTM6XHRcbiAgOTQ6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwbGF0X2Rldik7XG4gIDk1Olx0XG4gIDk2Olx0XHRyZXR1cm4gMDtcbiAgOTc6XHRcbiAgOTg6XHRlcnJfcGxhdF9kZXZfcmVnaXN0ZXI6XG4gIDk5Olx0XHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBsYXRfZGF0YS5oY2xrKTtcbiAxMDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUFDQiBQbGF0Zm9ybSBEZXZpY2UqKgoKT2theSwgc28gSSBzZWUgdGhlIHN5c3RlbSByZWdpc3RlcnMgYSBwbGF0Zm9ybSBkZXZpY2UsIHNwZWNpZmljYWxseSB0aGUgYG1hY2JgIGluc3RhbmNlLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGBtYWNiX21haW4uY2AgYXMgdGhlIGRyaXZlciB0aGF0JiMzOTtzIGdvaW5nIHRvIGdldCBwcm9iZWQuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkZXZpY2Ugc3VnZ2VzdHMgYSBjbG9zZXIgcmVsYXRpb25zaGlwIHRvIHRoZSBoYXJkd2FyZSBhcmNoaXRlY3R1cmUgdGhhbiBzb21lIG90aGVyIGFwcHJvYWNoZXMuIEFoIGhhLCBhbmQgSSBzZWUgbm93IHRoYXQgaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBQQ0khIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIGxldCYjMzk7cyBqdW1wIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgYE1BQ0JgLiBUaW1lIHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGluc3RhbmNlIGlzIGVuYWJsZWQgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IG1pZ2h0IGJlIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9DQURFTkNFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6MjI6Y29uZmlnIE1BQ0JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzozNzpjb25maWcgTUFDQl9VU0VfSFdTVEFNUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM4LVx0Ym9vbCBcJiMzNDtVc2UgSUVFRSAxNTg4IGh3c3RhbXBcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6NDU6Y29uZmlnIE1BQ0JfUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQW5hbHl6aW5nIHRoZSBNQUNCIERyaXZlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgTUFDQl9QQ0lgIGlzIGNsZWFybHkgdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhbGx5IGZvciB0aGUgUENJIHdyYXBwZXIsIGFuZCBgTUFDQmAgaXRzZWxmIGlzIHRoZSBoZWFydCBvZiB0aGUgZHJpdmVyLiBOb3csIGtub3dpbmcgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgcmVsYXRlIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBgTUFDQl9QQ0lgIGhhcy4gVGltZSB0byBjaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgdXN1YWxseSBhcmUuIFVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyB3aWxsIHByb2JhYmx5IHByb3ZpZGUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgUENJIHdyYXBwZXIgY29uZmlnIGlzIGludGVncmF0ZWQgd2l0aCB0aGUgbWFpbiBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUNCX1BDSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9Mzc9Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6NDU6Y29uZmlnIE1BQ0JfUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDYWRlbmNlIEV0aGVybmV0IEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQ2FkZW5jZSBFdGhlcm5ldCBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdgIGZpbGUsIGFyb3VuZCBsaW5lIDQ1LiBJJiMzOTttIGhvcGluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIHNlbGVjdGlvbiBsb2dpYyBvciBkZXBlbmRlbnQgZmVhdHVyZXMgc3RhcnQgdG8gYmVjb21lIGFwcGFyZW50LiBMaW5lIDQ1Li4uIHRoYXQmIzM5O3MgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBnZXR0aW5nIGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgZmVhdHVyZXMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggZGlmZmVyZW50IGNhcGFiaWxpdGllcyBhcmUgZW5hYmxlZC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdFx0ICBBVDkxIHBhcnRzLiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBHRU0gKEdpZ2FiaXRcbiAgMzE6XHRcdCAgRXRoZXJuZXQgTUFDIGZvdW5kIGluIHNvbWUgQVJNIFNvQyBkZXZpY2VzKS4gIFNheSBZIHRvIGluY2x1ZGVcbiAgMzI6XHRcdCAgc3VwcG9ydCBmb3IgdGhlIE1BQ0IvR0VNIGNoaXAuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMzU6XHRcdCAgd2lsbCBiZSBtYWNiLlxuICAzNjpcdFxuICAzNzpcdGNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXG4gIDM4Olx0XHRib29sIFwmIzM0O1VzZSBJRUVFIDE1ODggaHdzdGFtcFwmIzM0O1xuICAzOTpcdFx0ZGVwZW5kcyBvbiBNQUNCXG4gIDQwOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXG4gIDQxOlx0XHRkZWZhdWx0IHlcbiAgNDI6XHRcdGhlbHBcbiAgNDM6XHRcdCAgRW5hYmxlIElFRUUgMTU4OCBQcmVjaXNpb24gVGltZSBQcm90b2NvbCAoUFRQKSBzdXBwb3J0IGZvciBNQUNCLlxuICA0NDpcdFxuICA0NTpcdGNvbmZpZyBNQUNCX1BDSVxuICA0NjpcdFx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuICA0NzpcdFx0ZGVwZW5kcyBvbiBNQUNCIFx1MDAyNlx1MDAyNiBQQ0lcbiAgNDg6XHRcdGhlbHBcbiAgNDk6XHRcdCAgVGhpcyBpcyBQQ0kgd3JhcHBlciBmb3IgTUFDQiBkcml2ZXIuXG4gIDUwOlx0XG4gIDUxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNTI6XHRcdCAgd2lsbCBiZSBjYWxsZWQgbWFjYl9wY2kuXG4gIDUzOlx0XG4gIDU0Olx0ZW5kaWYgIyBORVRfVkVORE9SX0NBREVOQ0VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkzNwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1BQ0IgQ29uc2lzdGVudCBNZW1vcnkgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0b3VjaGluZyBgTUFDQmAgYW5kIGBNQUNCX1BDSWAsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBjaGFuZ2UgaXMgd2l0aGluIGBtYWNiX2ZyZWVfY29uc2lzdGVudGAgaW4gYG1hY2JfbWFpbi5jYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBgbWFjYl9mcmVlX2NvbnNpc3RlbnRgIGlzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IHRoZSBlcnJvciBoYW5kbGluZyBpbiBgbWFjYl9hbGxvY19jb25zaXN0ZW50YCwgdGhlIGVycm9yIGhhbmRsaW5nIGluIGBtYWNiX29wZW5gLCBhbmQgZHVyaW5nIHRoZSBjbGVhbnVwIGluIGBtYWNiX2Nsb3NlYC4KCkVzc2VudGlhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIGNvbnNpc3RlbnQgbWVtb3J5IGFuZCB1bm1hcHBpbmcgdGhlIHRyYW5zbWl0IHNrYnVmZnMuIFRoZSBwYXRjaCwgc3BlY2lmaWNhbGx5LCBpcyBhZGRpbmcgbG9naWMgdG8gdW5tYXAgYW5kIGRpc2NhcmQgYW55IHRyYW5zbWl0IHNrYnVmZnMgdGhhdCBhcmUgcGVuZGluZyB3aGVuIHRoZSBjb25zaXN0ZW50IG1lbW9yeSBpcyBiZWluZyBmcmVlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgbG9naWMsIGFuZCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIFBDSSwgbWVhbmluZyB3ZSBoYXZlIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgdGhlcmUuIEdpdmVuIHRoZSBjaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgZm9yIGRyb3BwZWQgcGFja2V0cywgYFdvcnRoRnV6emluZz10cnVlYCBmZWVscyBsaWtlIGEgc29saWQgYXNzZXNzbWVudC4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBwYXRjaCAqb25seSogbW9kaWZpZXMgYG1hY2JfZnJlZV9jb25zaXN0ZW50YC4gQSBxdWljayByZXZpZXcgb2YgdGhlIGRpZmYgY29uZmlybXMgdGhhdCwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLgoKRmluYWxseSwgSSBuZWVkIHRvIHRob3JvdWdobHkgcmUtZXhhbWluZSBgbWFjYl9mcmVlX2NvbnNpc3RlbnRgIHdpdGhpbiBgbWFjYl9tYWluLmNgIGl0c2VsZi4gR290dGEgbWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBzbGlwcGVkIGluIHRoZXJlIHVubm90aWNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjYl9mcmVlX2NvbnNpc3RlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MjY0ND1zdGF0aWMgdW5zaWduZWQgaW50IG1hY2JfcnhfcmluZ19zaXplX3Blcl9xdWV1ZShzdHJ1Y3QgbWFjYiAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0yNjQ4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoyNjQ5OnN0YXRpYyB2b2lkIG1hY2JfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBtYWNiICpicClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMjY1MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0yNzMxPXN0YXRpYyBpbnQgbWFjYl9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBtYWNiICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTI3ODgtb3V0X2VycjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6Mjc4OTpcdG1hY2JfZnJlZV9jb25zaXN0ZW50KGJwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMjc5MC1cdHJldHVybiAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MzE2MD1zdGF0aWMgaW50IG1hY2Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzIyMS1cdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MzIyMjpcdG1hY2JfZnJlZV9jb25zaXN0ZW50KGJwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzIyMy1wbV9leGl0OlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MzIyOD1zdGF0aWMgaW50IG1hY2JfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTMyNTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjMyNTU6XHRtYWNiX2ZyZWVfY29uc2lzdGVudChicCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTMyNTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMTEKCQkJCQkJCW91dHB1dDogOTkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyB0aGUgU29sdXRpb24qKgoKQWxyaWdodCwgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBzaXR1YXRpb24sIEkmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoaW5ncy4gVGhpcyBkZWZpbml0ZWx5IHNlZW1zIGFjaGlldmFibGUsIGFuZCBtb3Jlb3ZlciwgaXQmIzM5O3Mgb3BlcmF0aW5nIGFzIGludGVuZGVkLiBObyBtYWpvciByb2FkYmxvY2tzIG9yIGhpZGRlbiBpc3N1ZXMgSSBjYW4gc2VlIGF0IHRoaXMgcG9pbnQuIFRpbWUgdG8gbG9jayB0aGlzIGluLiBMZXQmIzM5O3MgZ2V0IHRoaXMgZmluYWxpemVkLiBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gY2FsbCBpbiB0aGF0IGBzZXQtcmVzdWx0c2AgZnVuY3Rpb24gdG8gb2ZmaWNpYWxseSBpbXBsZW1lbnQgdGhlIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNCJiMzNDssCiAgICAmIzM0O01BQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjYl9mcmVlX2NvbnNpc3RlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIHRvIHVubWFwIGFuZCBkcm9wIHBlbmRpbmcgVFggc2ticyB3aGVuIGZyZWVpbmcgY29uc2lzdGVudCBtZW1vcnkuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIFBDSSB3cmFwcGVyIChtYWNiX3BjaSkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNCJiMzNDssCiAgICAmIzM0O01BQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjYl9mcmVlX2NvbnNpc3RlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIHRvIHVubWFwIGFuZCBkcm9wIHBlbmRpbmcgVFggc2ticyB3aGVuIGZyZWVpbmcgY29uc2lzdGVudCBtZW1vcnkuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIFBDSSB3cmFwcGVyIChtYWNiX3BjaSkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTA6MzkuMzgzNjAzNzQ3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA0NDE0MTQ4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDQlwiLFxuICAgIFwiTUFDQl9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWNiX2ZyZWVfY29uc2lzdGVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciB0byB1bm1hcCBhbmQgZHJvcCBwZW5kaW5nIFRYIHNrYnMgd2hlbiBmcmVlaW5nIGNvbnNpc3RlbnQgbWVtb3J5LiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgd3JhcHBlciAobWFjYl9wY2kpIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTA6MzkuMzgzNjIwMjM3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTQ0Nzc4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1YTJiMGFiNmIwNGFkMDI1MjI4MzA2OGFjN2QyYjA5ODhhYjRjZDMzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTg6MTA6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG5pbmRleCBmZDI4MmExNzAwZmI5OC4uZDM5NGYxZjQzYjY4NWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG5AQCAtMjY2OCw4ICsyNjY4LDI1IEBAIHN0YXRpYyB2b2lkIG1hY2JfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBtYWNiICpicClcXG4gXFx0ZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBicC1cXHUwMDNlcXVldWVzWzBdLnJ4X3JpbmcsIGJwLVxcdTAwM2VxdWV1ZXNbMF0ucnhfcmluZ19kbWEpO1xcbiBcXG4gXFx0Zm9yIChxID0gMCwgcXVldWUgPSBicC1cXHUwMDNlcXVldWVzOyBxIFxcdTAwM2MgYnAtXFx1MDAzZW51bV9xdWV1ZXM7ICsrcSwgKytxdWV1ZSkge1xcbi1cXHRcXHRrZnJlZShxdWV1ZS1cXHUwMDNldHhfc2tiKTtcXG4tXFx0XFx0cXVldWUtXFx1MDAzZXR4X3NrYiA9IE5VTEw7XFxuK1xcdFxcdGlmIChxdWV1ZS1cXHUwMDNldHhfc2tiKSB7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBkcm9wcGVkID0gMCwgdGFpbDtcXG4rXFxuK1xcdFxcdFxcdGZvciAodGFpbCA9IHF1ZXVlLVxcdTAwM2V0eF90YWlsOyB0YWlsICE9IHF1ZXVlLVxcdTAwM2V0eF9oZWFkO1xcbitcXHRcXHRcXHQgICAgIHRhaWwrKykge1xcbitcXHRcXHRcXHRcXHRpZiAobWFjYl90eF9za2IocXVldWUsIHRhaWwpLVxcdTAwM2Vza2IpXFxuK1xcdFxcdFxcdFxcdFxcdGRyb3BwZWQrKztcXG4rXFx0XFx0XFx0XFx0bWFjYl90eF91bm1hcChicCwgbWFjYl90eF9za2IocXVldWUsIHRhaWwpLCAwKTtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0cXVldWUtXFx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQgKz0gZHJvcHBlZDtcXG4rXFx0XFx0XFx0YnAtXFx1MDAzZWRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCArPSBkcm9wcGVkO1xcbitcXG4rXFx0XFx0XFx0a2ZyZWUocXVldWUtXFx1MDAzZXR4X3NrYik7XFxuK1xcdFxcdFxcdHF1ZXVlLVxcdTAwM2V0eF9za2IgPSBOVUxMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRxdWV1ZS1cXHUwMDNldHhfaGVhZCA9IDA7XFxuK1xcdFxcdHF1ZXVlLVxcdTAwM2V0eF90YWlsID0gMDtcXG4gXFx0XFx0cXVldWUtXFx1MDAzZXR4X3JpbmcgPSBOVUxMO1xcbiBcXHRcXHRxdWV1ZS1cXHUwMDNlcnhfcmluZyA9IE5VTEw7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTA6NDAuMjc5MjI3MDgyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTU0NTc3NjEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUNCXCIsXG4gICAgXCJNQUNCX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY2JfZnJlZV9jb25zaXN0ZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIHRvIHVubWFwIGFuZCBkcm9wIHBlbmRpbmcgVFggc2ticyB3aGVuIGZyZWVpbmcgY29uc2lzdGVudCBtZW1vcnkuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIFBDSSB3cmFwcGVyIChtYWNiX3BjaSkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVhMmIwYWI2YjA0YWQwMjUyMjgzMDY4YWM3ZDJiMDk4OGFiNGNkMzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE4OjEwOjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbmluZGV4IGZkMjgyYTE3MDBmYjk4Li5kMzk0ZjFmNDNiNjg1ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbkBAIC0yNjY4LDggKzI2NjgsMjUgQEAgc3RhdGljIHZvaWQgbWFjYl9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IG1hY2IgKmJwKVxuIFx0ZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBicC1cdTAwM2VxdWV1ZXNbMF0ucnhfcmluZywgYnAtXHUwMDNlcXVldWVzWzBdLnJ4X3JpbmdfZG1hKTtcbiBcbiBcdGZvciAocSA9IDAsIHF1ZXVlID0gYnAtXHUwMDNlcXVldWVzOyBxIFx1MDAzYyBicC1cdTAwM2VudW1fcXVldWVzOyArK3EsICsrcXVldWUpIHtcbi1cdFx0a2ZyZWUocXVldWUtXHUwMDNldHhfc2tiKTtcbi1cdFx0cXVldWUtXHUwMDNldHhfc2tiID0gTlVMTDtcbitcdFx0aWYgKHF1ZXVlLVx1MDAzZXR4X3NrYikge1xuK1x0XHRcdHVuc2lnbmVkIGludCBkcm9wcGVkID0gMCwgdGFpbDtcbitcbitcdFx0XHRmb3IgKHRhaWwgPSBxdWV1ZS1cdTAwM2V0eF90YWlsOyB0YWlsICE9IHF1ZXVlLVx1MDAzZXR4X2hlYWQ7XG4rXHRcdFx0ICAgICB0YWlsKyspIHtcbitcdFx0XHRcdGlmIChtYWNiX3R4X3NrYihxdWV1ZSwgdGFpbCktXHUwMDNlc2tiKVxuK1x0XHRcdFx0XHRkcm9wcGVkKys7XG4rXHRcdFx0XHRtYWNiX3R4X3VubWFwKGJwLCBtYWNiX3R4X3NrYihxdWV1ZSwgdGFpbCksIDApO1xuK1x0XHRcdH1cbitcbitcdFx0XHRxdWV1ZS1cdTAwM2VzdGF0cy50eF9kcm9wcGVkICs9IGRyb3BwZWQ7XG4rXHRcdFx0YnAtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQgKz0gZHJvcHBlZDtcbitcbitcdFx0XHRrZnJlZShxdWV1ZS1cdTAwM2V0eF9za2IpO1xuK1x0XHRcdHF1ZXVlLVx1MDAzZXR4X3NrYiA9IE5VTEw7XG4rXHRcdH1cbitcbitcdFx0cXVldWUtXHUwMDNldHhfaGVhZCA9IDA7XG4rXHRcdHF1ZXVlLVx1MDAzZXR4X3RhaWwgPSAwO1xuIFx0XHRxdWV1ZS1cdTAwM2V0eF9yaW5nID0gTlVMTDtcbiBcdFx0cXVldWUtXHUwMDNlcnhfcmluZyA9IE5VTEw7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo0MC4yNzkyMjkzNjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg2NTAwMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCBmb3IgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AuIEl0J3MgdGhlIGBtYWNiX2ZyZWVfY29uc2lzdGVudGAgZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgYWRkaW5nIHNvbWUgY2xlYW51cCBmb3IgdHJhbnNtaXQgc2tidWZmcyBiZWZvcmUgbWVtb3J5IGlzIGZyZWVkLiBUaGF0J3MgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IGluIGVudmlyb25tZW50cyB3aGVyZSByZXNvdXJjZXMgbWlnaHQgYmUgdGlnaHRseSBtYW5hZ2VkLiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHdoZXRoZXIgdGhpcyBkcml2ZXIsIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyLCBpcyBldmVuIHJlbGV2YW50IGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlIHBhdGNoIHN1Z2dlc3RzIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBraW5kIG9mIGludGVyYWN0aW9uIHdpdGggYSBob3N0IHN5c3RlbSB3aGljaCBtYXkgdXNlIHZpcnR1YWxpemF0aW9uLiBUaGlzIGlzIHdoZXJlIEkgaGF2ZSB0byBjb25maXJtIHRoZSB0eXBlIG9mIGRyaXZlciBpbiBxdWVzdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGhlYWQgYmFjayB0byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AgYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyBhIHBsYXRmb3JtIGRyaXZlciBvciBhIFBDSSBkcml2ZXIuIFRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBpdCdzIGludGVncmF0ZWQgYW5kIHdoZXJlIGl0IG1pZ2h0IGJlIGV4cG9zZWQgdG8gdmlydHVhbGl6YXRpb24tcmVsYXRlZCBpc3N1ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYWJzdHJhY3Rpb24gaXMgY3J1Y2lhbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTA6NDQuNDY1NzMyMjI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzIwNDMxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNiX2ZyZWVfY29uc2lzdGVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MjY0ND1zdGF0aWMgdW5zaWduZWQgaW50IG1hY2JfcnhfcmluZ19zaXplX3Blcl9xdWV1ZShzdHJ1Y3QgbWFjYiAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTI2NDgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoyNjQ5OnN0YXRpYyB2b2lkIG1hY2JfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBtYWNiICpicClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTI2NTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0yNzMxPXN0YXRpYyBpbnQgbWFjYl9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBtYWNiICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMjc4OC1vdXRfZXJyOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6Mjc4OTpcXHRtYWNiX2ZyZWVfY29uc2lzdGVudChicCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0yNzkwLVxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0zMTYwPXN0YXRpYyBpbnQgbWFjYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTMyMjEtXFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MzIyMjpcXHRtYWNiX2ZyZWVfY29uc2lzdGVudChicCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0zMjIzLXBtX2V4aXQ6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTMyMjg9c3RhdGljIGludCBtYWNiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTMyNTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzozMjU1OlxcdG1hY2JfZnJlZV9jb25zaXN0ZW50KGJwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTMyNTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjEwOjQ0LjkxMjk0NTM1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MjY5ODYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRXRoZXJuZXQgRHJpdmVyIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0J3MgY2xlYXJseSBhbiBFdGhlcm5ldCBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBob3cgaXQncyBiZWluZyByZWdpc3RlcmVkIHdpdGggdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHR5cGljYWwgcmVnaXN0cmF0aW9uIGZsb3c6IGlzIGl0IHVzaW5nIHRoZSBzdGFuZGFyZCBgbmV0X2RldmljZWAgc3RydWN0dXJlIGFuZCB0aGUgYHJlZ2lzdGVyX25ldGRldigpYCBjYWxsPyBPciwgYXJlIHRoZXkgZ29pbmcgd2l0aCBhIG1vcmUgbW9kZXJuIGFwcHJvYWNoLCBwZXJoYXBzIGEgcGxhdGZvcm0gZGV2aWNlIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXI/XG5cbkknbSBtZW50YWxseSBzY2FubmluZyBmb3IgdGhlIHJlbGV2YW50IG1hY3JvcyBhbmQgZnVuY3Rpb24gY2FsbHMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSByZWdpc3RyYXRpb24gbWV0aG9kIG9uIHRoaW5ncyBsaWtlIHByb2JlL3JlbW92ZSwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgZHJpdmVyIGluaXRpYWxpemF0aW9uLiBUaGUgcmVnaXN0cmF0aW9uIGlzIHRoZSBsaW5jaHBpbiwgYW5kIHRoZSB3YXkgaXQncyBkb25lIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgaG93IGV2ZXJ5dGhpbmcgZWxzZSB3b3Jrcy4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgcmVsYXRlZCB0byBzZXR0aW5nIHVwIHRoZSBuZXQgZGV2aWNlLCBpbml0aWFsaXppbmcgYW55IGhhcmR3YXJlLXNwZWNpZmljIGRhdGEsIGFuZCBsaW5raW5nIHRoZSBkcml2ZXIgdG8gdGhlIHJlbGV2YW50IG5ldHdvcmsgcHJvdG9jb2xzLiBMZXQncyBzZWUgaWYgdGhpcyBmb2xsb3dzIHRoZSBleHBlY3RlZCBwYXR0ZXJucyBvciBkZXZpYXRlcyBpbiBhbiBpbnRlcmVzdGluZyB3YXkuLi4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBsaWtlbHkgcXVlc3Rpb25zIGluIG15IG1pbmQgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZSwgZXhwZWN0aW5nIHRvIHNlZSB3aGVyZSB0aGUgZHJpdmVyIHRvdWNoZXMgdGhlIGtlcm5lbCBuZXR3b3JrIHN0YWNrLCB0aGUgcmVsZXZhbnQgaW50ZXJydXB0IGhhbmRsZXJzIGFuZCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRpZmZlcmVudCBuZXR3b3JraW5nIHByb3RvY29scy4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIGNvbmZpcm1zIHdoYXQgSSBhbHJlYWR5IGtub3cgYWJvdXQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo0OC41NTU2NDY3NDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNDI4NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTYyNDY9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFjYl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYyNTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo2MjU3Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobWFjYl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI1OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTA6NDguNzA4MDg0ODc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3ODUxMjY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIFRoaXMgRHJpdmVyKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBwbGF0Zm9ybSBkcml2ZXIgaGVyZSwgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IGxlYXBzIHRvIG1pbmQsIGFzIGFsd2F5cywgaXMgd2hldGhlciBpdCdzIGdvdCBhIFBDSSBjb3VudGVycGFydC4gVGhhdCdzIHVzdWFsbHkgdGhlIGVhc2llc3Qgd2F5IHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbGlrZSBNQUNCLiBTbywgdGhlIG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IGxldCdzIHF1aWNrbHkgc2VlIGlmIHRoZXJlJ3MgYW4gYXNzb2NpYXRlZCBQQ0kgZHJpdmVyIGZvciBNQUNCLiBLbm93aW5nIHRoYXQgYXJjaGl0ZWN0dXJlIHdpbGwgc2lnbmlmaWNhbnRseSBzdHJlYW1saW5lIHRoZSBkZWJ1Z2dpbmcgcHJvY2VzcywgYW5kIGFsbG93IG1lIHRvIHF1aWNrbHkgZ2V0IGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGRldmljZS4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGFsbCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBsYXRmb3JtIGRyaXZlciBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjEwOjUxLjY4NjYwMDQ1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA3NzIzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jPTEyNT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFjYl9wY2lfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEzMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6MTMyOm1vZHVsZV9wY2lfZHJpdmVyKG1hY2JfcGNpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEzMy1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGV2X2lkX3RhYmxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTA6NTEuOTA3Mzc4MzA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3OTQ1MjQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uZmlybWluZyBQQ0ktU3BlY2lmaWMgTUFDQiBJbnRlcmFjdGlvbnMqKlxuXG5ZZXMsIGNvbmZpcm1lZCwgYG1hY2JfcGNpLmNgIGlzIGRlZmluaXRlbHkgYSB0aGluZy4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIGBtYWNiX3BjaS5jYC4gVGhlIGNvcmUgcXVlc3Rpb24gSSBuZWVkIGFuc3dlcmVkIGlzIHdoZXRoZXIgdGhpcyBQQ0ktc3BlY2lmaWMgZHJpdmVyIGRpcmVjdGx5IGludGVncmF0ZXMgd2l0aCBvciB1dGlsaXplcyB0aGUgZnVuY3Rpb25hbGl0eSBkZWZpbmVkIGluIGBtYWNiX21haW4uY2AuIFVuZGVyc3RhbmRpbmcgdGhhdCByZWxhdGlvbnNoaXAgaXMgY3J1Y2lhbC4gSXMgaXQgYSBtb2R1bGFyIGFwcHJvYWNoLCB3aXRoIGBtYWNiX3BjaS5jYCBhY3RpbmcgYXMgYSB0aGluIFBDSSBnbHVlIGxheWVyIGNhbGxpbmcgZnVuY3Rpb25zIGluIGBtYWNiX21haW4uY2AsIG9yIGRvZXMgaXQgcmUtaW1wbGVtZW50IG9yIGhlYXZpbHkgb3ZlcnJpZGUgbG9naWM/IFRoZSBpbnRlcmFjdGlvbiBtb2RlbCBkaWN0YXRlcyBob3cgSSdkIGFwcHJvYWNoIGFueSBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoZSBQQ0kgaW50ZXJmYWNlIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBNQUNCJ3Mgb3ZlcmFsbCBiZWhhdmlvci4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGBtYWNiX21haW4uY2AgaXMgdGhlIGNvcmUsIHNoYXJlZCBNQUNCIGltcGxlbWVudGF0aW9uIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo1NC45ODY4MzQ4MjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjc5ODA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjI3OnN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0yOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM9MTI1PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYWNiX3BjaV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTI3LVxcdC5pZF90YWJsZSA9IGRldl9pZF90YWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6MTI4OlxcdC5wcm9iZSAgICA9IG1hY2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEyOS1cXHQucmVtb3ZlXFx0ICA9IG1hY2JfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo1NS4xMTM2NDAxNjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzNDUzMjE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYG1hY2JfcHJvYmVgIGluIHRoZSBDb250ZXh0IG9mIE1BQ0IgRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG1hY2JfcHJvYmVgIGluIGBtYWNiX3BjaS5jYCwgYW5kIG15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGNvbnRyb2wgZmxvdyBhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgYG1hY2JfcHJvYmVgICpkaXJlY3RseSoganVtcCBpbnRvIGBtYWNiX21haW4uY2AgdG8gaGFuZGxlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIG9yIGRvZXMgaXQgcHJpbWFyaWx5IGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZSAoYG5ldGRldmApIHdpdGggdGhlIGtlcm5lbCdzIG5ldHdvcmtpbmcgc3RhY2s/IEknbSBiZXR0aW5nIHRoYXQgaXQncyB0aGUgbGF0dGVyLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBxdWlja2x5LiBJIG5lZWQgdG8gYmUgYWJsZSB0byBqdW1wIHRvIHRoZSByaWdodCBmaWxlcyBhbmQgZnVuY3Rpb25zLCBkZXBlbmRpbmcgb24gdGhlIHJvdXRlIHRoYXQgaXQgdGFrZXMuIElzIHRoZXJlIHNvbWV0aGluZywgbGlrZSBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBpbiBgbWFjYl9tYWluLmNgIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0aGF0IEkgY2FuIHF1aWNrbHkgc3BvdD8gTGV0J3MgY2hlY2sgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo1OC4zNDgxNzU5NDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzQ2NzIyNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjYl9jb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo1OC44OTE2NjM3ODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MzU3OTgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgbWFjYl9wY2kuY2AgZmlsZTpcblxuKipBbmFseXppbmcgdGhlIE1BQ0IgUENJIERyaXZlciBDb2RlKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGBtYWNiX3BjaS5jYCBmaWxlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGVzc2VuY2Ugb2YgdGhpcyBkcml2ZXIuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIG5vdCBsb29raW5nIGZvciBhIGxpbmUtYnktbGluZSB1bmRlcnN0YW5kaW5nLCBidXQgcmF0aGVyIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQga2V5IGludGVyYWN0aW9ucy4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIFBDSSBidXMsIGhvdyBpdCBoYW5kbGVzIGRldmljZSBpbml0aWFsaXphdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byBtYW5hZ2UgdGhlIE1BQ0IgRXRoZXJuZXQgY29udHJvbGxlci4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyBhbnkgYXJlYXMgd2hlcmUgdGhlIFBDSSBzcGVjaWZpYyBjb2RlIG1pZ2h0IGRldmlhdGUgZnJvbSBhIG1vcmUgZ2VuZXJpYyBNQUNCIGRyaXZlciwgYW5kIGhvdyBpdCBpcyBhZGFwdGVkIHRvIGludGVyYWN0IHdpdGggdGhlIFBDSSBidXMuIEFueSBjbGV2ZXIgdHJpY2tzIG9yIHVudXN1YWwgb3B0aW1pemF0aW9ucyB1c2VkIHdpbGwganVtcCBvdXQgYXQgbWUgcHJldHR5IHF1aWNrbHkuIEknbSBhbHNvIGdvaW5nIHRvIHNlZSBob3cgd2VsbCBpdCdzIHdyaXR0ZW4gYW5kIHN0cnVjdHVyZWQsIGxvb2tpbmcgZm9yIGdvb2QgY29kaW5nIHByYWN0aWNlcyBhbmQgYXJlYXMgdGhhdCBjb3VsZCBiZSBpbXByb3ZlZC4gSSB3aWxsIGxvb2sgZm9yIGFueSBzdWJ0bGUgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBPdmVyYWxsLCBJIHdhbnQgYSBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBQQ0ktc3BlY2lmaWMgcGFydHMgb2YgdGhpcyBkcml2ZXIgd29yayBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBNQUNCIHN1YnN5c3RlbSwgcmVsYXRpdmUgdG8gbXkgcHJpb3IgdW5kZXJzdGFuZGluZyBvZiB0aGUgdG9waWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMTowMi40NDUyNDcxMzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogRE9DOiBDYWRlbmNlIEdFTSBQQ0kgd3JhcHBlci5cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2FkZW5jZSBEZXNpZ24gU3lzdGVtcyAtIGh0dHBzOi8vd3d3LmNhZGVuY2UuY29tXFxuICAgNjpcXHQgKlxcbiAgIDc6XFx0ICogQXV0aG9yczogUmFmYWwgT3ppZWJsbyBcXHUwMDNjcmFmYWxvQGNhZGVuY2UuY29tXFx1MDAzZVxcbiAgIDg6XFx0ICpcXHQgICAgQmFydG9zeiBGb2x0YSBcXHUwMDNjYmZvbHRhQGNhZGVuY2UuY29tXFx1MDAzZVxcbiAgIDk6XFx0ICovXFxuICAxMDpcXHRcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGstcHJvdmlkZXIuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAgMTc6XFx0I2luY2x1ZGUgXFxcIm1hY2IuaFxcXCJcXG4gIDE4OlxcdFxcbiAgMTk6XFx0I2RlZmluZSBQQ0lfRFJJVkVSX05BTUUgXFxcIm1hY2JfcGNpXFxcIlxcbiAgMjA6XFx0I2RlZmluZSBQTEFUX0RSSVZFUl9OQU1FIFxcXCJtYWNiXFxcIlxcbiAgMjE6XFx0XFxuICAyMjpcXHQjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0ROU19NQUNCIDB4ZTAwN1xcbiAgMjM6XFx0XFxuICAyNDpcXHQjZGVmaW5lIEdFTV9QQ0xLX1JBVEUgNTAwMDAwMDBcXG4gIDI1OlxcdCNkZWZpbmUgR0VNX0hDTEtfUkFURSA1MDAwMDAwMFxcbiAgMjY6XFx0XFxuICAyNzpcXHRzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gIDI4OlxcdHtcXG4gIDI5OlxcdFxcdGludCBlcnI7XFxuICAzMDpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldjtcXG4gIDMxOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBwbGF0X2luZm87XFxuICAzMjpcXHRcXHRzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIHBsYXRfZGF0YTtcXG4gIDMzOlxcdFxcdHN0cnVjdCByZXNvdXJjZSByZXNbMl07XFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdC8qIGVuYWJsZSBwY2kgZGV2aWNlICovXFxuICAzNjpcXHRcXHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7XFxuICAzNzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiAgMzg6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRW5hYmxpbmcgUENJIGRldmljZSBoYXMgZmFpbGVkOiAlZFxcXCIsIGVycik7XFxuICAzOTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAgNDA6XFx0XFx0fVxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0Lyogc2V0IHVwIHJlc291cmNlcyAqL1xcbiAgNDU6XFx0XFx0bWVtc2V0KHJlcywgMHgwMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBBUlJBWV9TSVpFKHJlcykpO1xcbiAgNDY6XFx0XFx0cmVzWzBdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApO1xcbiAgNDc6XFx0XFx0cmVzWzBdLmVuZCA9IHBjaV9yZXNvdXJjZV9lbmQocGRldiwgMCk7XFxuICA0ODpcXHRcXHRyZXNbMF0ubmFtZSA9IFBDSV9EUklWRVJfTkFNRTtcXG4gIDQ5OlxcdFxcdHJlc1swXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNO1xcbiAgNTA6XFx0XFx0cmVzWzFdLnN0YXJ0ID0gcGNpX2lycV92ZWN0b3IocGRldiwgMCk7XFxuICA1MTpcXHRcXHRyZXNbMV0ubmFtZSA9IFBDSV9EUklWRVJfTkFNRTtcXG4gIDUyOlxcdFxcdHJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRU1BQyBwaHlzaWNhbCBiYXNlIGFkZHI6ICVwYVxcXFxuXFxcIixcXG4gIDU1OlxcdFxcdFxcdCBcXHUwMDI2cmVzWzBdLnN0YXJ0KTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0Lyogc2V0IHVwIG1hY2IgcGxhdGZvcm0gZGF0YSAqL1xcbiAgNTg6XFx0XFx0bWVtc2V0KFxcdTAwMjZwbGF0X2RhdGEsIDAsIHNpemVvZihwbGF0X2RhdGEpKTtcXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0LyogaW5pdGlhbGl6ZSBjbG9ja3MgKi9cXG4gIDYxOlxcdFxcdHBsYXRfZGF0YS5wY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInBjbGtcXFwiLCBOVUxMLCAwLFxcbiAgNjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IEdFTV9QQ0xLX1JBVEUpO1xcbiAgNjM6XFx0XFx0aWYgKElTX0VSUihwbGF0X2RhdGEucGNsaykpIHtcXG4gIDY0OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIocGxhdF9kYXRhLnBjbGspO1xcbiAgNjU6XFx0XFx0XFx0Z290byBlcnJfcGNsa19yZWdpc3RlcjtcXG4gIDY2OlxcdFxcdH1cXG4gIDY3OlxcdFxcbiAgNjg6XFx0XFx0cGxhdF9kYXRhLmhjbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiaGNsa1xcXCIsIE5VTEwsIDAsXFxuICA2OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0VNX0hDTEtfUkFURSk7XFxuICA3MDpcXHRcXHRpZiAoSVNfRVJSKHBsYXRfZGF0YS5oY2xrKSkge1xcbiAgNzE6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihwbGF0X2RhdGEuaGNsayk7XFxuICA3MjpcXHRcXHRcXHRnb3RvIGVycl9oY2xrX3JlZ2lzdGVyO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHQvKiBzZXQgdXAgcGxhdGZvcm0gZGV2aWNlIGluZm8gKi9cXG4gIDc2OlxcdFxcdG1lbXNldChcXHUwMDI2cGxhdF9pbmZvLCAwLCBzaXplb2YocGxhdF9pbmZvKSk7XFxuICA3NzpcXHRcXHRwbGF0X2luZm8ucGFyZW50ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gIDc4OlxcdFxcdHBsYXRfaW5mby5md25vZGUgPSBwZGV2LVxcdTAwM2VkZXYuZndub2RlO1xcbiAgNzk6XFx0XFx0cGxhdF9pbmZvLm5hbWUgPSBQTEFUX0RSSVZFUl9OQU1FO1xcbiAgODA6XFx0XFx0cGxhdF9pbmZvLmlkID0gcGRldi1cXHUwMDNlZGV2Zm47XFxuICA4MTpcXHRcXHRwbGF0X2luZm8ucmVzID0gcmVzO1xcbiAgODI6XFx0XFx0cGxhdF9pbmZvLm51bV9yZXMgPSBBUlJBWV9TSVpFKHJlcyk7XFxuICA4MzpcXHRcXHRwbGF0X2luZm8uZGF0YSA9IFxcdTAwMjZwbGF0X2RhdGE7XFxuICA4NDpcXHRcXHRwbGF0X2luZm8uc2l6ZV9kYXRhID0gc2l6ZW9mKHBsYXRfZGF0YSk7XFxuICA4NTpcXHRcXHRwbGF0X2luZm8uZG1hX21hc2sgPSBwZGV2LVxcdTAwM2VkbWFfbWFzaztcXG4gIDg2OlxcdFxcbiAgODc6XFx0XFx0LyogcmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlICovXFxuICA4ODpcXHRcXHRwbGF0X2RldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKFxcdTAwMjZwbGF0X2luZm8pO1xcbiAgODk6XFx0XFx0aWYgKElTX0VSUihwbGF0X2RldikpIHtcXG4gIDkwOlxcdFxcdFxcdGVyciA9IFBUUl9FUlIocGxhdF9kZXYpO1xcbiAgOTE6XFx0XFx0XFx0Z290byBlcnJfcGxhdF9kZXZfcmVnaXN0ZXI7XFxuICA5MjpcXHRcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwbGF0X2Rldik7XFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdHJldHVybiAwO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRlcnJfcGxhdF9kZXZfcmVnaXN0ZXI6XFxuICA5OTpcXHRcXHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBsYXRfZGF0YS5oY2xrKTtcXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMTowMi40NDUzOTY4NDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1Mjc5NDY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1BQ0IgUGxhdGZvcm0gRGV2aWNlKipcblxuT2theSwgc28gSSBzZWUgdGhlIHN5c3RlbSByZWdpc3RlcnMgYSBwbGF0Zm9ybSBkZXZpY2UsIHNwZWNpZmljYWxseSB0aGUgYG1hY2JgIGluc3RhbmNlLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGBtYWNiX21haW4uY2AgYXMgdGhlIGRyaXZlciB0aGF0J3MgZ29pbmcgdG8gZ2V0IHByb2JlZC4gVGhlIGZhY3QgdGhhdCBpdCdzIGEgcGxhdGZvcm0gZGV2aWNlIHN1Z2dlc3RzIGEgY2xvc2VyIHJlbGF0aW9uc2hpcCB0byB0aGUgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlIHRoYW4gc29tZSBvdGhlciBhcHByb2FjaGVzLiBBaCBoYSwgYW5kIEkgc2VlIG5vdyB0aGF0IGl0J3MgcmVhY2hhYmxlIHZpYSBQQ0khIFRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gbGV0J3MganVtcCBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIGBNQUNCYC4gVGltZSB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBpbnN0YW5jZSBpcyBlbmFibGVkIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhhdCBtaWdodCBiZSBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTE6MDUuNDk4MTk0OTI2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA4NzI2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQ0JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZz0yMD1pZiBORVRfVkVORE9SX0NBREVOQ0VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjIyOmNvbmZpZyBNQUNCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJDYWRlbmNlIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjM3OmNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM4LVxcdGJvb2wgXFxcIlVzZSBJRUVFIDE1ODggaHdzdGFtcFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6NDU6Y29uZmlnIE1BQ0JfUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ2LVxcdHRyaXN0YXRlIFxcXCJDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMTowNS42MDkwNzY0OTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY1OTY4MjEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKkFuYWx5emluZyB0aGUgTUFDQiBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgTUFDQl9QQ0lgIGlzIGNsZWFybHkgdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhbGx5IGZvciB0aGUgUENJIHdyYXBwZXIsIGFuZCBgTUFDQmAgaXRzZWxmIGlzIHRoZSBoZWFydCBvZiB0aGUgZHJpdmVyLiBOb3csIGtub3dpbmcgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgcmVsYXRlIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBgTUFDQl9QQ0lgIGhhcy4gVGltZSB0byBjaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMg4oCTIHRoYXQncyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyB1c3VhbGx5IGFyZS4gVW5kZXJzdGFuZGluZyBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgcHJvYmFibHkgcHJvdmlkZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBQQ0kgd3JhcHBlciBjb25maWcgaXMgaW50ZWdyYXRlZCB3aXRoIHRoZSBtYWluIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjExOjA4LjI2ODc2MTUyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MDIxMTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUNCX1BDSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTM3PWNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQ1OmNvbmZpZyBNQUNCX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTE6MDguMzk0Nzg4MzY5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTUxODUwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIENhZGVuY2UgRXRoZXJuZXQgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQ2FkZW5jZSBFdGhlcm5ldCBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ2AgZmlsZSwgYXJvdW5kIGxpbmUgNDUuIEknbSBob3BpbmcgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIHNlbGVjdGlvbiBsb2dpYyBvciBkZXBlbmRlbnQgZmVhdHVyZXMgc3RhcnQgdG8gYmVjb21lIGFwcGFyZW50LiBMaW5lIDQ1Li4uIHRoYXQncyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBmZWF0dXJlcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBkaWZmZXJlbnQgY2FwYWJpbGl0aWVzIGFyZSBlbmFibGVkLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM1NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjExOjExLjU4OTk3NjUwNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFx0ICBBVDkxIHBhcnRzLiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBHRU0gKEdpZ2FiaXRcXG4gIDMxOlxcdFxcdCAgRXRoZXJuZXQgTUFDIGZvdW5kIGluIHNvbWUgQVJNIFNvQyBkZXZpY2VzKS4gIFNheSBZIHRvIGluY2x1ZGVcXG4gIDMyOlxcdFxcdCAgc3VwcG9ydCBmb3IgdGhlIE1BQ0IvR0VNIGNoaXAuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzU6XFx0XFx0ICB3aWxsIGJlIG1hY2IuXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuICAzODpcXHRcXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE1BQ0JcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQxOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBNQUNCX1BDSVxcbiAgNDY6XFx0XFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE1BQ0IgXFx1MDAyNlxcdTAwMjYgUENJXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDUyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgbWFjYl9wY2kuXFxuICA1MzpcXHRcXG4gIDU0OlxcdGVuZGlmICMgTkVUX1ZFTkRPUl9DQURFTkNFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjExOjExLjU5MDA2MTk5NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTYzMTkzMjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUFDQiBDb25zaXN0ZW50IE1lbW9yeSBQYXRjaCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHRvdWNoaW5nIGBNQUNCYCBhbmQgYE1BQ0JfUENJYCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZSBpcyB3aXRoaW4gYG1hY2JfZnJlZV9jb25zaXN0ZW50YCBpbiBgbWFjYl9tYWluLmNgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGBtYWNiX2ZyZWVfY29uc2lzdGVudGAgaXMgY2FsbGVkIGZyb20gYSBmZXcga2V5IHBsYWNlczogdGhlIGVycm9yIGhhbmRsaW5nIGluIGBtYWNiX2FsbG9jX2NvbnNpc3RlbnRgLCB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYG1hY2Jfb3BlbmAsIGFuZCBkdXJpbmcgdGhlIGNsZWFudXAgaW4gYG1hY2JfY2xvc2VgLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIHRoZSBjb25zaXN0ZW50IG1lbW9yeSBhbmQgdW5tYXBwaW5nIHRoZSB0cmFuc21pdCBza2J1ZmZzLiBUaGUgcGF0Y2gsIHNwZWNpZmljYWxseSwgaXMgYWRkaW5nIGxvZ2ljIHRvIHVubWFwIGFuZCBkaXNjYXJkIGFueSB0cmFuc21pdCBza2J1ZmZzIHRoYXQgYXJlIHBlbmRpbmcgd2hlbiB0aGUgY29uc2lzdGVudCBtZW1vcnkgaXMgYmVpbmcgZnJlZWQuIFRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGxvZ2ljLCBhbmQgaXQncyByZWFjaGFibGUgdmlhIFBDSSwgbWVhbmluZyB3ZSBoYXZlIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgdGhlcmUuIEdpdmVuIHRoZSBjaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgZm9yIGRyb3BwZWQgcGFja2V0cywgYFdvcnRoRnV6emluZz10cnVlYCBmZWVscyBsaWtlIGEgc29saWQgYXNzZXNzbWVudC5cblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBgbWFjYl9mcmVlX2NvbnNpc3RlbnRgLiBBIHF1aWNrIHJldmlldyBvZiB0aGUgZGlmZiBjb25maXJtcyB0aGF0LCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuRmluYWxseSwgSSBuZWVkIHRvIHRob3JvdWdobHkgcmUtZXhhbWluZSBgbWFjYl9mcmVlX2NvbnNpc3RlbnRgIHdpdGhpbiBgbWFjYl9tYWluLmNgIGl0c2VsZi4gR290dGEgbWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBzbGlwcGVkIGluIHRoZXJlIHVubm90aWNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkzNywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjExOjE2LjE1MzI1Nzk0N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwMjA1NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY2JfZnJlZV9jb25zaXN0ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0yNjQ0PXN0YXRpYyB1bnNpZ25lZCBpbnQgbWFjYl9yeF9yaW5nX3NpemVfcGVyX3F1ZXVlKHN0cnVjdCBtYWNiICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMjY0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjI2NDk6c3RhdGljIHZvaWQgbWFjYl9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IG1hY2IgKmJwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMjY1MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTI3MzE9c3RhdGljIGludCBtYWNiX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IG1hY2IgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0yNzg4LW91dF9lcnI6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoyNzg5OlxcdG1hY2JfZnJlZV9jb25zaXN0ZW50KGJwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTI3OTAtXFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTMxNjA9c3RhdGljIGludCBtYWNiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzIyMS1cXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzozMjIyOlxcdG1hY2JfZnJlZV9jb25zaXN0ZW50KGJwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTMyMjMtcG1fZXhpdDpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MzIyOD1zdGF0aWMgaW50IG1hY2JfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzI1NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjMyNTU6XFx0bWFjYl9mcmVlX2NvbnNpc3RlbnQoYnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzI1Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTE6MTYuNDEzNDcyMzgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTk5OTM5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBTb2x1dGlvbioqXG5cbkFscmlnaHQsIGFmdGVyIHJldmlld2luZyB0aGUgc2l0dWF0aW9uLCBJJ3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoaW5ncy4gVGhpcyBkZWZpbml0ZWx5IHNlZW1zIGFjaGlldmFibGUsIGFuZCBtb3Jlb3ZlciwgaXQncyBvcGVyYXRpbmcgYXMgaW50ZW5kZWQuIE5vIG1ham9yIHJvYWRibG9ja3Mgb3IgaGlkZGVuIGlzc3VlcyBJIGNhbiBzZWUgYXQgdGhpcyBwb2ludC4gVGltZSB0byBsb2NrIHRoaXMgaW4uIExldCdzIGdldCB0aGlzIGZpbmFsaXplZC4gSSB0aGluayBpdCdzIHRpbWUgdG8gY2FsbCBpbiB0aGF0IGBzZXQtcmVzdWx0c2AgZnVuY3Rpb24gdG8gb2ZmaWNpYWxseSBpbXBsZW1lbnQgdGhlIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMTEsIk91dHB1dFRva2VucyI6OTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMToxOS42MTM0NjkwOTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE1MjUyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQ0JcIixcbiAgICBcIk1BQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFjYl9mcmVlX2NvbnNpc3RlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgdG8gdW5tYXAgYW5kIGRyb3AgcGVuZGluZyBUWCBza2JzIHdoZW4gZnJlZWluZyBjb25zaXN0ZW50IG1lbW9yeS4gVGhpcyBpcyBmdW5jdGlvbmFsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHdyYXBwZXIgKG1hY2JfcGNpKSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDQlwiLFxuICAgIFwiTUFDQl9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWNiX2ZyZWVfY29uc2lzdGVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciB0byB1bm1hcCBhbmQgZHJvcCBwZW5kaW5nIFRYIHNrYnMgd2hlbiBmcmVlaW5nIGNvbnNpc3RlbnQgbWVtb3J5LiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgd3JhcHBlciAobWFjYl9wY2kpIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkp4ms[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 17:51:03 +0000 UTC FinishedAt: 2026-07-02 18:11:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d8e8b85a85fe21954d303db68034aac4639df88d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACB", "MACB_PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d8e8b85a85fe21954d303db68034aac4639df88d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MACB", "MACB_PCI" ], "series_id": "f271c85a-74b2-4f65-a78b-01ac1e63987f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "macb_free_consistent" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQ0ImIzM0OywKICAgICYjMzQ7TUFDQl9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWNiX2ZyZWVfY29uc2lzdGVudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgdG8gdW5tYXAgYW5kIGRyb3AgcGVuZGluZyBUWCBza2JzIHdoZW4gZnJlZWluZyBjb25zaXN0ZW50IG1lbW9yeS4gVGhpcyBpcyBmdW5jdGlvbmFsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHdyYXBwZXIgKG1hY2JfcGNpKSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1YTJiMGFiNmIwNGFkMDI1MjI4MzA2OGFjN2QyYjA5ODhhYjRjZDMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAxODoxMDozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuaW5kZXggZmQyODJhMTcwMGZiOTguLmQzOTRmMWY0M2I2ODVlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xuQEAgLTI2NjgsOCAmIzQzOzI2NjgsMjUgQEAgc3RhdGljIHZvaWQgbWFjYl9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IG1hY2IgKmJwKVxuIFx0ZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBicC1cdTAwM2VxdWV1ZXNbMF0ucnhfcmluZywgYnAtXHUwMDNlcXVldWVzWzBdLnJ4X3JpbmdfZG1hKTtcbiBcbiBcdGZvciAocSA9IDAsIHF1ZXVlID0gYnAtXHUwMDNlcXVldWVzOyBxIFx1MDAzYyBicC1cdTAwM2VudW1fcXVldWVzOyAmIzQzOyYjNDM7cSwgJiM0MzsmIzQzO3F1ZXVlKSB7XG4tXHRcdGtmcmVlKHF1ZXVlLVx1MDAzZXR4X3NrYik7XG4tXHRcdHF1ZXVlLVx1MDAzZXR4X3NrYiA9IE5VTEw7XG4mIzQzO1x0XHRpZiAocXVldWUtXHUwMDNldHhfc2tiKSB7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBkcm9wcGVkID0gMCwgdGFpbDtcbiYjNDM7XG4mIzQzO1x0XHRcdGZvciAodGFpbCA9IHF1ZXVlLVx1MDAzZXR4X3RhaWw7IHRhaWwgIT0gcXVldWUtXHUwMDNldHhfaGVhZDtcbiYjNDM7XHRcdFx0ICAgICB0YWlsJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdGlmIChtYWNiX3R4X3NrYihxdWV1ZSwgdGFpbCktXHUwMDNlc2tiKVxuJiM0MztcdFx0XHRcdFx0ZHJvcHBlZCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdFx0bWFjYl90eF91bm1hcChicCwgbWFjYl90eF9za2IocXVldWUsIHRhaWwpLCAwKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cXVldWUtXHUwMDNlc3RhdHMudHhfZHJvcHBlZCAmIzQzOz0gZHJvcHBlZDtcbiYjNDM7XHRcdFx0YnAtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQgJiM0Mzs9IGRyb3BwZWQ7XG4mIzQzO1xuJiM0MztcdFx0XHRrZnJlZShxdWV1ZS1cdTAwM2V0eF9za2IpO1xuJiM0MztcdFx0XHRxdWV1ZS1cdTAwM2V0eF9za2IgPSBOVUxMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHF1ZXVlLVx1MDAzZXR4X2hlYWQgPSAwO1xuJiM0MztcdFx0cXVldWUtXHUwMDNldHhfdGFpbCA9IDA7XG4gXHRcdHF1ZXVlLVx1MDAzZXR4X3JpbmcgPSBOVUxMO1xuIFx0XHRxdWV1ZS1cdTAwM2VyeF9yaW5nID0gTlVMTDtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNCJiMzNDssCiAgICAmIzM0O01BQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjYl9mcmVlX2NvbnNpc3RlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIHRvIHVubWFwIGFuZCBkcm9wIHBlbmRpbmcgVFggc2ticyB3aGVuIGZyZWVpbmcgY29uc2lzdGVudCBtZW1vcnkuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIFBDSSB3cmFwcGVyIChtYWNiX3BjaSkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YTJiMGFiNmIwNGFkMDI1MjI4MzA2OGFjN2QyYjA5ODhhYjRjZDMzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAxODoxMDozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCmluZGV4IGZkMjgyYTE3MDBmYjk4Li5kMzk0ZjFmNDNiNjg1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jCkBAIC0yNjY4LDggJiM0MzsyNjY4LDI1IEBAIHN0YXRpYyB2b2lkIG1hY2JfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBtYWNiICpicCkKIAlkbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIGJwLSZndDtxdWV1ZXNbMF0ucnhfcmluZywgYnAtJmd0O3F1ZXVlc1swXS5yeF9yaW5nX2RtYSk7CiAKIAlmb3IgKHEgPSAwLCBxdWV1ZSA9IGJwLSZndDtxdWV1ZXM7IHEgJmx0OyBicC0mZ3Q7bnVtX3F1ZXVlczsgJiM0MzsmIzQzO3EsICYjNDM7JiM0MztxdWV1ZSkgewotCQlrZnJlZShxdWV1ZS0mZ3Q7dHhfc2tiKTsKLQkJcXVldWUtJmd0O3R4X3NrYiA9IE5VTEw7CiYjNDM7CQlpZiAocXVldWUtJmd0O3R4X3NrYikgewomIzQzOwkJCXVuc2lnbmVkIGludCBkcm9wcGVkID0gMCwgdGFpbDsKJiM0MzsKJiM0MzsJCQlmb3IgKHRhaWwgPSBxdWV1ZS0mZ3Q7dHhfdGFpbDsgdGFpbCAhPSBxdWV1ZS0mZ3Q7dHhfaGVhZDsKJiM0MzsJCQkgICAgIHRhaWwmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCWlmIChtYWNiX3R4X3NrYihxdWV1ZSwgdGFpbCktJmd0O3NrYikKJiM0MzsJCQkJCWRyb3BwZWQmIzQzOyYjNDM7OwomIzQzOwkJCQltYWNiX3R4X3VubWFwKGJwLCBtYWNiX3R4X3NrYihxdWV1ZSwgdGFpbCksIDApOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQlxdWV1ZS0mZ3Q7c3RhdHMudHhfZHJvcHBlZCAmIzQzOz0gZHJvcHBlZDsKJiM0MzsJCQlicC0mZ3Q7ZGV2LSZndDtzdGF0cy50eF9kcm9wcGVkICYjNDM7PSBkcm9wcGVkOwomIzQzOwomIzQzOwkJCWtmcmVlKHF1ZXVlLSZndDt0eF9za2IpOwomIzQzOwkJCXF1ZXVlLSZndDt0eF9za2IgPSBOVUxMOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcXVldWUtJmd0O3R4X2hlYWQgPSAwOwomIzQzOwkJcXVldWUtJmd0O3R4X3RhaWwgPSAwOwogCQlxdWV1ZS0mZ3Q7dHhfcmluZyA9IE5VTEw7CiAJCXF1ZXVlLSZndDtyeF9yaW5nID0gTlVMTDsKIAl9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTUKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRHJpdmVyIFBhdGNoIGZvciBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNgLiBJdCYjMzk7cyB0aGUgYG1hY2JfZnJlZV9jb25zaXN0ZW50YCBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgYWRkaW5nIHNvbWUgY2xlYW51cCBmb3IgdHJhbnNtaXQgc2tidWZmcyBiZWZvcmUgbWVtb3J5IGlzIGZyZWVkLiBUaGF0JiMzOTtzIGEgZ29vZCBwcmFjdGljZSwgZXNwZWNpYWxseSBpbiBlbnZpcm9ubWVudHMgd2hlcmUgcmVzb3VyY2VzIG1pZ2h0IGJlIHRpZ2h0bHkgbWFuYWdlZC4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB3aGV0aGVyIHRoaXMgZHJpdmVyLCB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciwgaXMgZXZlbiByZWxldmFudCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcuIFRoZSBwYXRjaCBzdWdnZXN0cyB0aGF0IHRoZXJlIG1pZ2h0IGJlIHNvbWUga2luZCBvZiBpbnRlcmFjdGlvbiB3aXRoIGEgaG9zdCBzeXN0ZW0gd2hpY2ggbWF5IHVzZSB2aXJ0dWFsaXphdGlvbi4gVGhpcyBpcyB3aGVyZSBJIGhhdmUgdG8gY29uZmlybSB0aGUgdHlwZSBvZiBkcml2ZXIgaW4gcXVlc3Rpb24uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCBiYWNrIHRvIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jYCBhbmQgZmlndXJlIG91dCBpZiBpdCYjMzk7cyBhIHBsYXRmb3JtIGRyaXZlciBvciBhIFBDSSBkcml2ZXIuIFRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBpdCYjMzk7cyBpbnRlZ3JhdGVkIGFuZCB3aGVyZSBpdCBtaWdodCBiZSBleHBvc2VkIHRvIHZpcnR1YWxpemF0aW9uLXJlbGF0ZWQgaXNzdWVzLiBVbmRlcnN0YW5kaW5nIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFic3RyYWN0aW9uIGlzIGNydWNpYWwgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNiX2ZyZWVfY29uc2lzdGVudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0yNjQ0PXN0YXRpYyB1bnNpZ25lZCBpbnQgbWFjYl9yeF9yaW5nX3NpemVfcGVyX3F1ZXVlKHN0cnVjdCBtYWNiICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTI2NDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjI2NDk6c3RhdGljIHZvaWQgbWFjYl9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IG1hY2IgKmJwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0yNjUwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTI3MzE9c3RhdGljIGludCBtYWNiX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IG1hY2IgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMjc4OC1vdXRfZXJyOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoyNzg5Olx0bWFjYl9mcmVlX2NvbnNpc3RlbnQoYnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0yNzkwLVx0cmV0dXJuIC1FTk9NRU07XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0zMTYwPXN0YXRpYyBpbnQgbWFjYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0zMjIxLVx0fVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzozMjIyOlx0bWFjYl9mcmVlX2NvbnNpc3RlbnQoYnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0zMjIzLXBtX2V4aXQ6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0zMjI4PXN0YXRpYyBpbnQgbWFjYl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzI1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MzI1NTpcdG1hY2JfZnJlZV9jb25zaXN0ZW50KGJwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzI1Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRXRoZXJuZXQgRHJpdmVyIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBhbmQgaXQmIzM5O3MgY2xlYXJseSBhbiBFdGhlcm5ldCBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBob3cgaXQmIzM5O3MgYmVpbmcgcmVnaXN0ZXJlZCB3aXRoIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB0eXBpY2FsIHJlZ2lzdHJhdGlvbiBmbG93OiBpcyBpdCB1c2luZyB0aGUgc3RhbmRhcmQgYG5ldF9kZXZpY2VgIHN0cnVjdHVyZSBhbmQgdGhlIGByZWdpc3Rlcl9uZXRkZXYoKWAgY2FsbD8gT3IsIGFyZSB0aGV5IGdvaW5nIHdpdGggYSBtb3JlIG1vZGVybiBhcHByb2FjaCwgcGVyaGFwcyBhIHBsYXRmb3JtIGRldmljZSBvciBzb21ldGhpbmcgcmVsYXRlZCB0byBhIHNwZWNpZmljIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyPwoKSSYjMzk7bSBtZW50YWxseSBzY2FubmluZyBmb3IgdGhlIHJlbGV2YW50IG1hY3JvcyBhbmQgZnVuY3Rpb24gY2FsbHMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcmVnaXN0cmF0aW9uIG1ldGhvZCBvbiB0aGluZ3MgbGlrZSBwcm9iZS9yZW1vdmUsIHJlc291cmNlIGFsbG9jYXRpb24sIGludGVycnVwdCBoYW5kbGluZywgYW5kIGRyaXZlciBpbml0aWFsaXphdGlvbi4gVGhlIHJlZ2lzdHJhdGlvbiBpcyB0aGUgbGluY2hwaW4sIGFuZCB0aGUgd2F5IGl0JiMzOTtzIGRvbmUgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSBob3cgZXZlcnl0aGluZyBlbHNlIHdvcmtzLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgcmVsYXRlZCB0byBzZXR0aW5nIHVwIHRoZSBuZXQgZGV2aWNlLCBpbml0aWFsaXppbmcgYW55IGhhcmR3YXJlLXNwZWNpZmljIGRhdGEsIGFuZCBsaW5raW5nIHRoZSBkcml2ZXIgdG8gdGhlIHJlbGV2YW50IG5ldHdvcmsgcHJvdG9jb2xzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZm9sbG93cyB0aGUgZXhwZWN0ZWQgcGF0dGVybnMgb3IgZGV2aWF0ZXMgaW4gYW4gaW50ZXJlc3Rpbmcgd2F5Li4uIEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBzb21lIGxpa2VseSBxdWVzdGlvbnMgaW4gbXkgbWluZCBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBleHBlY3RpbmcgdG8gc2VlIHdoZXJlIHRoZSBkcml2ZXIgdG91Y2hlcyB0aGUga2VybmVsIG5ldHdvcmsgc3RhY2ssIHRoZSByZWxldmFudCBpbnRlcnJ1cHQgaGFuZGxlcnMgYW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgZGlmZmVyZW50IG5ldHdvcmtpbmcgcHJvdG9jb2xzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGNvbmZpcm1zIHdoYXQgSSBhbHJlYWR5IGtub3cgYWJvdXQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BsYXRmb3JtX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz02MjQ2PXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1hY2JfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI1Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6NjI1Nzptb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1hY2JfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI1OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIFRoaXMgRHJpdmVyKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIHBsYXRmb3JtIGRyaXZlciBoZXJlLCBhbmQgdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgbGVhcHMgdG8gbWluZCwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIGl0JiMzOTtzIGdvdCBhIFBDSSBjb3VudGVycGFydC4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBlYXNpZXN0IHdheSB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgZXNwZWNpYWxseSBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyBsaWtlIE1BQ0IuIFNvLCB0aGUgbWVudGFsIGNoZWNrbGlzdCBraWNrcyBpbjogbGV0JiMzOTtzIHF1aWNrbHkgc2VlIGlmIHRoZXJlJiMzOTtzIGFuIGFzc29jaWF0ZWQgUENJIGRyaXZlciBmb3IgTUFDQi4gS25vd2luZyB0aGF0IGFyY2hpdGVjdHVyZSB3aWxsIHNpZ25pZmljYW50bHkgc3RyZWFtbGluZSB0aGUgZGVidWdnaW5nIHByb2Nlc3MsIGFuZCBhbGxvdyBtZSB0byBxdWlja2x5IGdldCBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UuIEZyb20gdGhlcmUsIEkgY2FuIGdldCBhbGwgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCwgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBwbGF0Zm9ybSBkcml2ZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM9MTI1PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYWNiX3BjaV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEzMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoxMzI6bW9kdWxlX3BjaV9kcml2ZXIobWFjYl9wY2lfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMzMtTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRldl9pZF90YWJsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNvbmZpcm1pbmcgUENJLVNwZWNpZmljIE1BQ0IgSW50ZXJhY3Rpb25zKioKClllcywgY29uZmlybWVkLCBgbWFjYl9wY2kuY2AgaXMgZGVmaW5pdGVseSBhIHRoaW5nLiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGludG8gYG1hY2JfcGNpLmNgLiBUaGUgY29yZSBxdWVzdGlvbiBJIG5lZWQgYW5zd2VyZWQgaXMgd2hldGhlciB0aGlzIFBDSS1zcGVjaWZpYyBkcml2ZXIgZGlyZWN0bHkgaW50ZWdyYXRlcyB3aXRoIG9yIHV0aWxpemVzIHRoZSBmdW5jdGlvbmFsaXR5IGRlZmluZWQgaW4gYG1hY2JfbWFpbi5jYC4gVW5kZXJzdGFuZGluZyB0aGF0IHJlbGF0aW9uc2hpcCBpcyBjcnVjaWFsLiBJcyBpdCBhIG1vZHVsYXIgYXBwcm9hY2gsIHdpdGggYG1hY2JfcGNpLmNgIGFjdGluZyBhcyBhIHRoaW4gUENJIGdsdWUgbGF5ZXIgY2FsbGluZyBmdW5jdGlvbnMgaW4gYG1hY2JfbWFpbi5jYCwgb3IgZG9lcyBpdCByZS1pbXBsZW1lbnQgb3IgaGVhdmlseSBvdmVycmlkZSBsb2dpYz8gVGhlIGludGVyYWN0aW9uIG1vZGVsIGRpY3RhdGVzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIGFueSBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoZSBQQ0kgaW50ZXJmYWNlIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBNQUNCJiMzOTtzIG92ZXJhbGwgYmVoYXZpb3IuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiBgbWFjYl9tYWluLmNgIGlzIHRoZSBjb3JlLCBzaGFyZWQgTUFDQiBpbXBsZW1lbnRhdGlvbiBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWNiX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0yNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYzoyNzpzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0yOC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jPTEyNT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFjYl9wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMjctXHQuaWRfdGFibGUgPSBkZXZfaWRfdGFibGUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6MTI4Olx0LnByb2JlICAgID0gbWFjYl9wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0xMjktXHQucmVtb3ZlXHQgID0gbWFjYl9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgbWFjYl9wcm9iZWAgaW4gdGhlIENvbnRleHQgb2YgTUFDQiBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtYWNiX3Byb2JlYCBpbiBgbWFjYl9wY2kuY2AsIGFuZCBteSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29udHJvbCBmbG93IGFuZCBob3cgdGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0uIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBgbWFjYl9wcm9iZWAgKmRpcmVjdGx5KiBqdW1wIGludG8gYG1hY2JfbWFpbi5jYCB0byBoYW5kbGUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgb3IgZG9lcyBpdCBwcmltYXJpbHkgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgdGhlIG5ldHdvcmsgZGV2aWNlIChgbmV0ZGV2YCkgd2l0aCB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3RhY2s/IEkmIzM5O20gYmV0dGluZyB0aGF0IGl0JiMzOTtzIHRoZSBsYXR0ZXIsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHkuIEkgbmVlZCB0byBiZSBhYmxlIHRvIGp1bXAgdG8gdGhlIHJpZ2h0IGZpbGVzIGFuZCBmdW5jdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgcm91dGUgdGhhdCBpdCB0YWtlcy4gSXMgdGhlcmUgc29tZXRoaW5nLCBsaWtlIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGluIGBtYWNiX21haW4uY2AgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRoYXQgSSBjYW4gcXVpY2tseSBzcG90PyBMZXQmIzM5O3MgY2hlY2sgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjYl9jb25maWcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzE1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgbWFjYl9wY2kuY2AgZmlsZToKCioqQW5hbHl6aW5nIHRoZSBNQUNCIFBDSSBEcml2ZXIgQ29kZSoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGBtYWNiX3BjaS5jYCBmaWxlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGVzc2VuY2Ugb2YgdGhpcyBkcml2ZXIuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBub3QgbG9va2luZyBmb3IgYSBsaW5lLWJ5LWxpbmUgdW5kZXJzdGFuZGluZywgYnV0IHJhdGhlciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIGtleSBpbnRlcmFjdGlvbnMuIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgUENJIGJ1cywgaG93IGl0IGhhbmRsZXMgZGV2aWNlIGluaXRpYWxpemF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIG1hbmFnZSB0aGUgTUFDQiBFdGhlcm5ldCBjb250cm9sbGVyLiBJJiMzOTtsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyBhbnkgYXJlYXMgd2hlcmUgdGhlIFBDSSBzcGVjaWZpYyBjb2RlIG1pZ2h0IGRldmlhdGUgZnJvbSBhIG1vcmUgZ2VuZXJpYyBNQUNCIGRyaXZlciwgYW5kIGhvdyBpdCBpcyBhZGFwdGVkIHRvIGludGVyYWN0IHdpdGggdGhlIFBDSSBidXMuIEFueSBjbGV2ZXIgdHJpY2tzIG9yIHVudXN1YWwgb3B0aW1pemF0aW9ucyB1c2VkIHdpbGwganVtcCBvdXQgYXQgbWUgcHJldHR5IHF1aWNrbHkuIEkmIzM5O20gYWxzbyBnb2luZyB0byBzZWUgaG93IHdlbGwgaXQmIzM5O3Mgd3JpdHRlbiBhbmQgc3RydWN0dXJlZCwgbG9va2luZyBmb3IgZ29vZCBjb2RpbmcgcHJhY3RpY2VzIGFuZCBhcmVhcyB0aGF0IGNvdWxkIGJlIGltcHJvdmVkLiBJIHdpbGwgbG9vayBmb3IgYW55IHN1YnRsZSBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MuIE92ZXJhbGwsIEkgd2FudCBhIGhpZ2gtbGV2ZWwgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIFBDSS1zcGVjaWZpYyBwYXJ0cyBvZiB0aGlzIGRyaXZlciB3b3JrIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIE1BQ0Igc3Vic3lzdGVtLCByZWxhdGl2ZSB0byBteSBwcmlvciB1bmRlcnN0YW5kaW5nIG9mIHRoZSB0b3BpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qXG4gICAzOlx0ICogRE9DOiBDYWRlbmNlIEdFTSBQQ0kgd3JhcHBlci5cbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMjAxNiBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zIC0gaHR0cHM6Ly93d3cuY2FkZW5jZS5jb21cbiAgIDY6XHQgKlxuICAgNzpcdCAqIEF1dGhvcnM6IFJhZmFsIE96aWVibG8gXHUwMDNjcmFmYWxvQGNhZGVuY2UuY29tXHUwMDNlXG4gICA4Olx0ICpcdCAgICBCYXJ0b3N6IEZvbHRhIFx1MDAzY2Jmb2x0YUBjYWRlbmNlLmNvbVx1MDAzZVxuICAgOTpcdCAqL1xuICAxMDpcdFxuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Nsay5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLXByb3ZpZGVyLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2kuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4gIDE3Olx0I2luY2x1ZGUgXCYjMzQ7bWFjYi5oXCYjMzQ7XG4gIDE4Olx0XG4gIDE5Olx0I2RlZmluZSBQQ0lfRFJJVkVSX05BTUUgXCYjMzQ7bWFjYl9wY2lcJiMzNDtcbiAgMjA6XHQjZGVmaW5lIFBMQVRfRFJJVkVSX05BTUUgXCYjMzQ7bWFjYlwmIzM0O1xuICAyMTpcdFxuICAyMjpcdCNkZWZpbmUgUENJX0RFVklDRV9JRF9DRE5TX01BQ0IgMHhlMDA3XG4gIDIzOlx0XG4gIDI0Olx0I2RlZmluZSBHRU1fUENMS19SQVRFIDUwMDAwMDAwXG4gIDI1Olx0I2RlZmluZSBHRU1fSENMS19SQVRFIDUwMDAwMDAwXG4gIDI2Olx0XG4gIDI3Olx0c3RhdGljIGludCBtYWNiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4gIDI4Olx0e1xuICAyOTpcdFx0aW50IGVycjtcbiAgMzA6XHRcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2O1xuICAzMTpcdFx0c3RydWN0IHBsYXRmb3JtX2RldmljZV9pbmZvIHBsYXRfaW5mbztcbiAgMzI6XHRcdHN0cnVjdCBtYWNiX3BsYXRmb3JtX2RhdGEgcGxhdF9kYXRhO1xuICAzMzpcdFx0c3RydWN0IHJlc291cmNlIHJlc1syXTtcbiAgMzQ6XHRcbiAgMzU6XHRcdC8qIGVuYWJsZSBwY2kgZGV2aWNlICovXG4gIDM2Olx0XHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7XG4gIDM3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gIDM4Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O0VuYWJsaW5nIFBDSSBkZXZpY2UgaGFzIGZhaWxlZDogJWRcJiMzNDssIGVycik7XG4gIDM5Olx0XHRcdHJldHVybiBlcnI7XG4gIDQwOlx0XHR9XG4gIDQxOlx0XG4gIDQyOlx0XHRwY2lfc2V0X21hc3RlcihwZGV2KTtcbiAgNDM6XHRcbiAgNDQ6XHRcdC8qIHNldCB1cCByZXNvdXJjZXMgKi9cbiAgNDU6XHRcdG1lbXNldChyZXMsIDB4MDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogQVJSQVlfU0laRShyZXMpKTtcbiAgNDY6XHRcdHJlc1swXS5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTtcbiAgNDc6XHRcdHJlc1swXS5lbmQgPSBwY2lfcmVzb3VyY2VfZW5kKHBkZXYsIDApO1xuICA0ODpcdFx0cmVzWzBdLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUU7XG4gIDQ5Olx0XHRyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTtcbiAgNTA6XHRcdHJlc1sxXS5zdGFydCA9IHBjaV9pcnFfdmVjdG9yKHBkZXYsIDApO1xuICA1MTpcdFx0cmVzWzFdLm5hbWUgPSBQQ0lfRFJJVkVSX05BTUU7XG4gIDUyOlx0XHRyZXNbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTtcbiAgNTM6XHRcbiAgNTQ6XHRcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtFTUFDIHBoeXNpY2FsIGJhc2UgYWRkcjogJXBhXFxuXCYjMzQ7LFxuICA1NTpcdFx0XHQgXHUwMDI2cmVzWzBdLnN0YXJ0KTtcbiAgNTY6XHRcbiAgNTc6XHRcdC8qIHNldCB1cCBtYWNiIHBsYXRmb3JtIGRhdGEgKi9cbiAgNTg6XHRcdG1lbXNldChcdTAwMjZwbGF0X2RhdGEsIDAsIHNpemVvZihwbGF0X2RhdGEpKTtcbiAgNTk6XHRcbiAgNjA6XHRcdC8qIGluaXRpYWxpemUgY2xvY2tzICovXG4gIDYxOlx0XHRwbGF0X2RhdGEucGNsayA9IGNsa19yZWdpc3Rlcl9maXhlZF9yYXRlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtwY2xrXCYjMzQ7LCBOVUxMLCAwLFxuICA2MjpcdFx0XHRcdFx0XHRcdCBHRU1fUENMS19SQVRFKTtcbiAgNjM6XHRcdGlmIChJU19FUlIocGxhdF9kYXRhLnBjbGspKSB7XG4gIDY0Olx0XHRcdGVyciA9IFBUUl9FUlIocGxhdF9kYXRhLnBjbGspO1xuICA2NTpcdFx0XHRnb3RvIGVycl9wY2xrX3JlZ2lzdGVyO1xuICA2NjpcdFx0fVxuICA2NzpcdFxuICA2ODpcdFx0cGxhdF9kYXRhLmhjbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7aGNsa1wmIzM0OywgTlVMTCwgMCxcbiAgNjk6XHRcdFx0XHRcdFx0XHQgR0VNX0hDTEtfUkFURSk7XG4gIDcwOlx0XHRpZiAoSVNfRVJSKHBsYXRfZGF0YS5oY2xrKSkge1xuICA3MTpcdFx0XHRlcnIgPSBQVFJfRVJSKHBsYXRfZGF0YS5oY2xrKTtcbiAgNzI6XHRcdFx0Z290byBlcnJfaGNsa19yZWdpc3RlcjtcbiAgNzM6XHRcdH1cbiAgNzQ6XHRcbiAgNzU6XHRcdC8qIHNldCB1cCBwbGF0Zm9ybSBkZXZpY2UgaW5mbyAqL1xuICA3NjpcdFx0bWVtc2V0KFx1MDAyNnBsYXRfaW5mbywgMCwgc2l6ZW9mKHBsYXRfaW5mbykpO1xuICA3NzpcdFx0cGxhdF9pbmZvLnBhcmVudCA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuICA3ODpcdFx0cGxhdF9pbmZvLmZ3bm9kZSA9IHBkZXYtXHUwMDNlZGV2LmZ3bm9kZTtcbiAgNzk6XHRcdHBsYXRfaW5mby5uYW1lID0gUExBVF9EUklWRVJfTkFNRTtcbiAgODA6XHRcdHBsYXRfaW5mby5pZCA9IHBkZXYtXHUwMDNlZGV2Zm47XG4gIDgxOlx0XHRwbGF0X2luZm8ucmVzID0gcmVzO1xuICA4MjpcdFx0cGxhdF9pbmZvLm51bV9yZXMgPSBBUlJBWV9TSVpFKHJlcyk7XG4gIDgzOlx0XHRwbGF0X2luZm8uZGF0YSA9IFx1MDAyNnBsYXRfZGF0YTtcbiAgODQ6XHRcdHBsYXRfaW5mby5zaXplX2RhdGEgPSBzaXplb2YocGxhdF9kYXRhKTtcbiAgODU6XHRcdHBsYXRfaW5mby5kbWFfbWFzayA9IHBkZXYtXHUwMDNlZG1hX21hc2s7XG4gIDg2Olx0XG4gIDg3Olx0XHQvKiByZWdpc3RlciBwbGF0Zm9ybSBkZXZpY2UgKi9cbiAgODg6XHRcdHBsYXRfZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2Z1bGwoXHUwMDI2cGxhdF9pbmZvKTtcbiAgODk6XHRcdGlmIChJU19FUlIocGxhdF9kZXYpKSB7XG4gIDkwOlx0XHRcdGVyciA9IFBUUl9FUlIocGxhdF9kZXYpO1xuICA5MTpcdFx0XHRnb3RvIGVycl9wbGF0X2Rldl9yZWdpc3RlcjtcbiAgOTI6XHRcdH1cbiAgOTM6XHRcbiAgOTQ6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwbGF0X2Rldik7XG4gIDk1Olx0XG4gIDk2Olx0XHRyZXR1cm4gMDtcbiAgOTc6XHRcbiAgOTg6XHRlcnJfcGxhdF9kZXZfcmVnaXN0ZXI6XG4gIDk5Olx0XHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBsYXRfZGF0YS5oY2xrKTtcbiAxMDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUFDQiBQbGF0Zm9ybSBEZXZpY2UqKgoKT2theSwgc28gSSBzZWUgdGhlIHN5c3RlbSByZWdpc3RlcnMgYSBwbGF0Zm9ybSBkZXZpY2UsIHNwZWNpZmljYWxseSB0aGUgYG1hY2JgIGluc3RhbmNlLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGBtYWNiX21haW4uY2AgYXMgdGhlIGRyaXZlciB0aGF0JiMzOTtzIGdvaW5nIHRvIGdldCBwcm9iZWQuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgYSBwbGF0Zm9ybSBkZXZpY2Ugc3VnZ2VzdHMgYSBjbG9zZXIgcmVsYXRpb25zaGlwIHRvIHRoZSBoYXJkd2FyZSBhcmNoaXRlY3R1cmUgdGhhbiBzb21lIG90aGVyIGFwcHJvYWNoZXMuIEFoIGhhLCBhbmQgSSBzZWUgbm93IHRoYXQgaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBQQ0khIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIGxldCYjMzk7cyBqdW1wIGludG8gdGhlIEtjb25maWcgZmlsZSBmb3IgYE1BQ0JgLiBUaW1lIHRvIHNlZSBob3cgdGhpcyBwYXJ0aWN1bGFyIGluc3RhbmNlIGlzIGVuYWJsZWQgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IG1pZ2h0IGJlIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUFDQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9MjA9aWYgTkVUX1ZFTkRPUl9DQURFTkNFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6MjI6Y29uZmlnIE1BQ0JcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0yMy1cdHRyaXN0YXRlIFwmIzM0O0NhZGVuY2UgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy0zNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZzozNzpjb25maWcgTUFDQl9VU0VfSFdTVEFNUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM4LVx0Ym9vbCBcJiMzNDtVc2UgSUVFRSAxNTg4IGh3c3RhbXBcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6NDU6Y29uZmlnIE1BQ0JfUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQW5hbHl6aW5nIHRoZSBNQUNCIERyaXZlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgTUFDQl9QQ0lgIGlzIGNsZWFybHkgdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhbGx5IGZvciB0aGUgUENJIHdyYXBwZXIsIGFuZCBgTUFDQmAgaXRzZWxmIGlzIHRoZSBoZWFydCBvZiB0aGUgZHJpdmVyLiBOb3csIGtub3dpbmcgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgcmVsYXRlIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBgTUFDQl9QQ0lgIGhhcy4gVGltZSB0byBjaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgdXN1YWxseSBhcmUuIFVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyB3aWxsIHByb2JhYmx5IHByb3ZpZGUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgUENJIHdyYXBwZXIgY29uZmlnIGlzIGludGVncmF0ZWQgd2l0aCB0aGUgbWFpbiBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUNCX1BDSSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc9Mzc9Y29uZmlnIE1BQ0JfVVNFX0hXU1RBTVBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6NDU6Y29uZmlnIE1BQ0JfUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDYWRlbmNlIEV0aGVybmV0IEtjb25maWcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQ2FkZW5jZSBFdGhlcm5ldCBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBJIHNob3VsZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdgIGZpbGUsIGFyb3VuZCBsaW5lIDQ1LiBJJiMzOTttIGhvcGluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIHNlbGVjdGlvbiBsb2dpYyBvciBkZXBlbmRlbnQgZmVhdHVyZXMgc3RhcnQgdG8gYmVjb21lIGFwcGFyZW50LiBMaW5lIDQ1Li4uIHRoYXQmIzM5O3MgcHJvYmFibHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBnZXR0aW5nIGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUgZmVhdHVyZXMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggZGlmZmVyZW50IGNhcGFiaWxpdGllcyBhcmUgZW5hYmxlZC4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdFx0ICBBVDkxIHBhcnRzLiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBHRU0gKEdpZ2FiaXRcbiAgMzE6XHRcdCAgRXRoZXJuZXQgTUFDIGZvdW5kIGluIHNvbWUgQVJNIFNvQyBkZXZpY2VzKS4gIFNheSBZIHRvIGluY2x1ZGVcbiAgMzI6XHRcdCAgc3VwcG9ydCBmb3IgdGhlIE1BQ0IvR0VNIGNoaXAuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgMzU6XHRcdCAgd2lsbCBiZSBtYWNiLlxuICAzNjpcdFxuICAzNzpcdGNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXG4gIDM4Olx0XHRib29sIFwmIzM0O1VzZSBJRUVFIDE1ODggaHdzdGFtcFwmIzM0O1xuICAzOTpcdFx0ZGVwZW5kcyBvbiBNQUNCXG4gIDQwOlx0XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLXG4gIDQxOlx0XHRkZWZhdWx0IHlcbiAgNDI6XHRcdGhlbHBcbiAgNDM6XHRcdCAgRW5hYmxlIElFRUUgMTU4OCBQcmVjaXNpb24gVGltZSBQcm90b2NvbCAoUFRQKSBzdXBwb3J0IGZvciBNQUNCLlxuICA0NDpcdFxuICA0NTpcdGNvbmZpZyBNQUNCX1BDSVxuICA0NjpcdFx0dHJpc3RhdGUgXCYjMzQ7Q2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFwmIzM0O1xuICA0NzpcdFx0ZGVwZW5kcyBvbiBNQUNCIFx1MDAyNlx1MDAyNiBQQ0lcbiAgNDg6XHRcdGhlbHBcbiAgNDk6XHRcdCAgVGhpcyBpcyBQQ0kgd3JhcHBlciBmb3IgTUFDQiBkcml2ZXIuXG4gIDUwOlx0XG4gIDUxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNTI6XHRcdCAgd2lsbCBiZSBjYWxsZWQgbWFjYl9wY2kuXG4gIDUzOlx0XG4gIDU0Olx0ZW5kaWYgIyBORVRfVkVORE9SX0NBREVOQ0VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkzNwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1BQ0IgQ29uc2lzdGVudCBNZW1vcnkgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyB0b3VjaGluZyBgTUFDQmAgYW5kIGBNQUNCX1BDSWAsIHdoaWNoIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBjaGFuZ2UgaXMgd2l0aGluIGBtYWNiX2ZyZWVfY29uc2lzdGVudGAgaW4gYG1hY2JfbWFpbi5jYC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBgbWFjYl9mcmVlX2NvbnNpc3RlbnRgIGlzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IHRoZSBlcnJvciBoYW5kbGluZyBpbiBgbWFjYl9hbGxvY19jb25zaXN0ZW50YCwgdGhlIGVycm9yIGhhbmRsaW5nIGluIGBtYWNiX29wZW5gLCBhbmQgZHVyaW5nIHRoZSBjbGVhbnVwIGluIGBtYWNiX2Nsb3NlYC4KCkVzc2VudGlhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIGNvbnNpc3RlbnQgbWVtb3J5IGFuZCB1bm1hcHBpbmcgdGhlIHRyYW5zbWl0IHNrYnVmZnMuIFRoZSBwYXRjaCwgc3BlY2lmaWNhbGx5LCBpcyBhZGRpbmcgbG9naWMgdG8gdW5tYXAgYW5kIGRpc2NhcmQgYW55IHRyYW5zbWl0IHNrYnVmZnMgdGhhdCBhcmUgcGVuZGluZyB3aGVuIHRoZSBjb25zaXN0ZW50IG1lbW9yeSBpcyBiZWluZyBmcmVlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1bmN0aW9uYWwgbG9naWMsIGFuZCBpdCYjMzk7cyByZWFjaGFibGUgdmlhIFBDSSwgbWVhbmluZyB3ZSBoYXZlIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgdGhlcmUuIEdpdmVuIHRoZSBjaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgZm9yIGRyb3BwZWQgcGFja2V0cywgYFdvcnRoRnV6emluZz10cnVlYCBmZWVscyBsaWtlIGEgc29saWQgYXNzZXNzbWVudC4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBwYXRjaCAqb25seSogbW9kaWZpZXMgYG1hY2JfZnJlZV9jb25zaXN0ZW50YC4gQSBxdWljayByZXZpZXcgb2YgdGhlIGRpZmYgY29uZmlybXMgdGhhdCwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLgoKRmluYWxseSwgSSBuZWVkIHRvIHRob3JvdWdobHkgcmUtZXhhbWluZSBgbWFjYl9mcmVlX2NvbnNpc3RlbnRgIHdpdGhpbiBgbWFjYl9tYWluLmNgIGl0c2VsZi4gR290dGEgbWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBzbGlwcGVkIGluIHRoZXJlIHVubm90aWNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFjYl9mcmVlX2NvbnNpc3RlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MjY0ND1zdGF0aWMgdW5zaWduZWQgaW50IG1hY2JfcnhfcmluZ19zaXplX3Blcl9xdWV1ZShzdHJ1Y3QgbWFjYiAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0yNjQ4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoyNjQ5OnN0YXRpYyB2b2lkIG1hY2JfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBtYWNiICpicClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMjY1MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0yNzMxPXN0YXRpYyBpbnQgbWFjYl9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBtYWNiICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTI3ODgtb3V0X2VycjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6Mjc4OTpcdG1hY2JfZnJlZV9jb25zaXN0ZW50KGJwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMjc5MC1cdHJldHVybiAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MzE2MD1zdGF0aWMgaW50IG1hY2Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzIyMS1cdH1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MzIyMjpcdG1hY2JfZnJlZV9jb25zaXN0ZW50KGJwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzIyMy1wbV9leGl0OlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MzIyOD1zdGF0aWMgaW50IG1hY2JfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTMyNTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjMyNTU6XHRtYWNiX2ZyZWVfY29uc2lzdGVudChicCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTMyNTYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMTEKCQkJCQkJCW91dHB1dDogOTkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyB0aGUgU29sdXRpb24qKgoKQWxyaWdodCwgYWZ0ZXIgcmV2aWV3aW5nIHRoZSBzaXR1YXRpb24sIEkmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoaW5ncy4gVGhpcyBkZWZpbml0ZWx5IHNlZW1zIGFjaGlldmFibGUsIGFuZCBtb3Jlb3ZlciwgaXQmIzM5O3Mgb3BlcmF0aW5nIGFzIGludGVuZGVkLiBObyBtYWpvciByb2FkYmxvY2tzIG9yIGhpZGRlbiBpc3N1ZXMgSSBjYW4gc2VlIGF0IHRoaXMgcG9pbnQuIFRpbWUgdG8gbG9jayB0aGlzIGluLiBMZXQmIzM5O3MgZ2V0IHRoaXMgZmluYWxpemVkLiBJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gY2FsbCBpbiB0aGF0IGBzZXQtcmVzdWx0c2AgZnVuY3Rpb24gdG8gb2ZmaWNpYWxseSBpbXBsZW1lbnQgdGhlIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNCJiMzNDssCiAgICAmIzM0O01BQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjYl9mcmVlX2NvbnNpc3RlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIHRvIHVubWFwIGFuZCBkcm9wIHBlbmRpbmcgVFggc2ticyB3aGVuIGZyZWVpbmcgY29uc2lzdGVudCBtZW1vcnkuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIFBDSSB3cmFwcGVyIChtYWNiX3BjaSkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUNCJiMzNDssCiAgICAmIzM0O01BQ0JfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFjYl9mcmVlX2NvbnNpc3RlbnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIHRvIHVubWFwIGFuZCBkcm9wIHBlbmRpbmcgVFggc2ticyB3aGVuIGZyZWVpbmcgY29uc2lzdGVudCBtZW1vcnkuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIFBDSSB3cmFwcGVyIChtYWNiX3BjaSkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTA6MzkuMzgzNjAzNzQ3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA0NDE0MTQ4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDQlwiLFxuICAgIFwiTUFDQl9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWNiX2ZyZWVfY29uc2lzdGVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciB0byB1bm1hcCBhbmQgZHJvcCBwZW5kaW5nIFRYIHNrYnMgd2hlbiBmcmVlaW5nIGNvbnNpc3RlbnQgbWVtb3J5LiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgd3JhcHBlciAobWFjYl9wY2kpIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTA6MzkuMzgzNjIwMjM3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTQ0Nzc4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1YTJiMGFiNmIwNGFkMDI1MjI4MzA2OGFjN2QyYjA5ODhhYjRjZDMzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVsIDIgMTg6MTA6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG5pbmRleCBmZDI4MmExNzAwZmI5OC4uZDM5NGYxZjQzYjY4NWUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcXG5AQCAtMjY2OCw4ICsyNjY4LDI1IEBAIHN0YXRpYyB2b2lkIG1hY2JfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBtYWNiICpicClcXG4gXFx0ZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBicC1cXHUwMDNlcXVldWVzWzBdLnJ4X3JpbmcsIGJwLVxcdTAwM2VxdWV1ZXNbMF0ucnhfcmluZ19kbWEpO1xcbiBcXG4gXFx0Zm9yIChxID0gMCwgcXVldWUgPSBicC1cXHUwMDNlcXVldWVzOyBxIFxcdTAwM2MgYnAtXFx1MDAzZW51bV9xdWV1ZXM7ICsrcSwgKytxdWV1ZSkge1xcbi1cXHRcXHRrZnJlZShxdWV1ZS1cXHUwMDNldHhfc2tiKTtcXG4tXFx0XFx0cXVldWUtXFx1MDAzZXR4X3NrYiA9IE5VTEw7XFxuK1xcdFxcdGlmIChxdWV1ZS1cXHUwMDNldHhfc2tiKSB7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBkcm9wcGVkID0gMCwgdGFpbDtcXG4rXFxuK1xcdFxcdFxcdGZvciAodGFpbCA9IHF1ZXVlLVxcdTAwM2V0eF90YWlsOyB0YWlsICE9IHF1ZXVlLVxcdTAwM2V0eF9oZWFkO1xcbitcXHRcXHRcXHQgICAgIHRhaWwrKykge1xcbitcXHRcXHRcXHRcXHRpZiAobWFjYl90eF9za2IocXVldWUsIHRhaWwpLVxcdTAwM2Vza2IpXFxuK1xcdFxcdFxcdFxcdFxcdGRyb3BwZWQrKztcXG4rXFx0XFx0XFx0XFx0bWFjYl90eF91bm1hcChicCwgbWFjYl90eF9za2IocXVldWUsIHRhaWwpLCAwKTtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0cXVldWUtXFx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQgKz0gZHJvcHBlZDtcXG4rXFx0XFx0XFx0YnAtXFx1MDAzZWRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCArPSBkcm9wcGVkO1xcbitcXG4rXFx0XFx0XFx0a2ZyZWUocXVldWUtXFx1MDAzZXR4X3NrYik7XFxuK1xcdFxcdFxcdHF1ZXVlLVxcdTAwM2V0eF9za2IgPSBOVUxMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRxdWV1ZS1cXHUwMDNldHhfaGVhZCA9IDA7XFxuK1xcdFxcdHF1ZXVlLVxcdTAwM2V0eF90YWlsID0gMDtcXG4gXFx0XFx0cXVldWUtXFx1MDAzZXR4X3JpbmcgPSBOVUxMO1xcbiBcXHRcXHRxdWV1ZS1cXHUwMDNlcnhfcmluZyA9IE5VTEw7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTA6NDAuMjc5MjI3MDgyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTU0NTc3NjEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUNCXCIsXG4gICAgXCJNQUNCX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hY2JfZnJlZV9jb25zaXN0ZW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIHRvIHVubWFwIGFuZCBkcm9wIHBlbmRpbmcgVFggc2ticyB3aGVuIGZyZWVpbmcgY29uc2lzdGVudCBtZW1vcnkuIFRoaXMgaXMgZnVuY3Rpb25hbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgdGhlIFBDSSB3cmFwcGVyIChtYWNiX3BjaSkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVhMmIwYWI2YjA0YWQwMjUyMjgzMDY4YWM3ZDJiMDk4OGFiNGNkMzNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDE4OjEwOjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbmluZGV4IGZkMjgyYTE3MDBmYjk4Li5kMzk0ZjFmNDNiNjg1ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcbkBAIC0yNjY4LDggKzI2NjgsMjUgQEAgc3RhdGljIHZvaWQgbWFjYl9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IG1hY2IgKmJwKVxuIFx0ZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBicC1cdTAwM2VxdWV1ZXNbMF0ucnhfcmluZywgYnAtXHUwMDNlcXVldWVzWzBdLnJ4X3JpbmdfZG1hKTtcbiBcbiBcdGZvciAocSA9IDAsIHF1ZXVlID0gYnAtXHUwMDNlcXVldWVzOyBxIFx1MDAzYyBicC1cdTAwM2VudW1fcXVldWVzOyArK3EsICsrcXVldWUpIHtcbi1cdFx0a2ZyZWUocXVldWUtXHUwMDNldHhfc2tiKTtcbi1cdFx0cXVldWUtXHUwMDNldHhfc2tiID0gTlVMTDtcbitcdFx0aWYgKHF1ZXVlLVx1MDAzZXR4X3NrYikge1xuK1x0XHRcdHVuc2lnbmVkIGludCBkcm9wcGVkID0gMCwgdGFpbDtcbitcbitcdFx0XHRmb3IgKHRhaWwgPSBxdWV1ZS1cdTAwM2V0eF90YWlsOyB0YWlsICE9IHF1ZXVlLVx1MDAzZXR4X2hlYWQ7XG4rXHRcdFx0ICAgICB0YWlsKyspIHtcbitcdFx0XHRcdGlmIChtYWNiX3R4X3NrYihxdWV1ZSwgdGFpbCktXHUwMDNlc2tiKVxuK1x0XHRcdFx0XHRkcm9wcGVkKys7XG4rXHRcdFx0XHRtYWNiX3R4X3VubWFwKGJwLCBtYWNiX3R4X3NrYihxdWV1ZSwgdGFpbCksIDApO1xuK1x0XHRcdH1cbitcbitcdFx0XHRxdWV1ZS1cdTAwM2VzdGF0cy50eF9kcm9wcGVkICs9IGRyb3BwZWQ7XG4rXHRcdFx0YnAtXHUwMDNlZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQgKz0gZHJvcHBlZDtcbitcbitcdFx0XHRrZnJlZShxdWV1ZS1cdTAwM2V0eF9za2IpO1xuK1x0XHRcdHF1ZXVlLVx1MDAzZXR4X3NrYiA9IE5VTEw7XG4rXHRcdH1cbitcbitcdFx0cXVldWUtXHUwMDNldHhfaGVhZCA9IDA7XG4rXHRcdHF1ZXVlLVx1MDAzZXR4X3RhaWwgPSAwO1xuIFx0XHRxdWV1ZS1cdTAwM2V0eF9yaW5nID0gTlVMTDtcbiBcdFx0cXVldWUtXHUwMDNlcnhfcmluZyA9IE5VTEw7XG4gXHR9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo0MC4yNzkyMjkzNjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg2NTAwMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCBmb3IgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AuIEl0J3MgdGhlIGBtYWNiX2ZyZWVfY29uc2lzdGVudGAgZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgYWRkaW5nIHNvbWUgY2xlYW51cCBmb3IgdHJhbnNtaXQgc2tidWZmcyBiZWZvcmUgbWVtb3J5IGlzIGZyZWVkLiBUaGF0J3MgYSBnb29kIHByYWN0aWNlLCBlc3BlY2lhbGx5IGluIGVudmlyb25tZW50cyB3aGVyZSByZXNvdXJjZXMgbWlnaHQgYmUgdGlnaHRseSBtYW5hZ2VkLiBOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHdoZXRoZXIgdGhpcyBkcml2ZXIsIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyLCBpcyBldmVuIHJlbGV2YW50IGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlIHBhdGNoIHN1Z2dlc3RzIHRoYXQgdGhlcmUgbWlnaHQgYmUgc29tZSBraW5kIG9mIGludGVyYWN0aW9uIHdpdGggYSBob3N0IHN5c3RlbSB3aGljaCBtYXkgdXNlIHZpcnR1YWxpemF0aW9uLiBUaGlzIGlzIHdoZXJlIEkgaGF2ZSB0byBjb25maXJtIHRoZSB0eXBlIG9mIGRyaXZlciBpbiBxdWVzdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGhlYWQgYmFjayB0byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY2AgYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyBhIHBsYXRmb3JtIGRyaXZlciBvciBhIFBDSSBkcml2ZXIuIFRoYXQgd2lsbCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBpdCdzIGludGVncmF0ZWQgYW5kIHdoZXJlIGl0IG1pZ2h0IGJlIGV4cG9zZWQgdG8gdmlydHVhbGl6YXRpb24tcmVsYXRlZCBpc3N1ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYWJzdHJhY3Rpb24gaXMgY3J1Y2lhbCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTA6NDQuNDY1NzMyMjI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NzIwNDMxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNiX2ZyZWVfY29uc2lzdGVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MjY0ND1zdGF0aWMgdW5zaWduZWQgaW50IG1hY2JfcnhfcmluZ19zaXplX3Blcl9xdWV1ZShzdHJ1Y3QgbWFjYiAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTI2NDgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoyNjQ5OnN0YXRpYyB2b2lkIG1hY2JfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBtYWNiICpicClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTI2NTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0yNzMxPXN0YXRpYyBpbnQgbWFjYl9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBtYWNiICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMjc4OC1vdXRfZXJyOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6Mjc4OTpcXHRtYWNiX2ZyZWVfY29uc2lzdGVudChicCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0yNzkwLVxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0zMTYwPXN0YXRpYyBpbnQgbWFjYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTMyMjEtXFx0fVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MzIyMjpcXHRtYWNiX2ZyZWVfY29uc2lzdGVudChicCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0zMjIzLXBtX2V4aXQ6XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTMyMjg9c3RhdGljIGludCBtYWNiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTMyNTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzozMjU1OlxcdG1hY2JfZnJlZV9jb25zaXN0ZW50KGJwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTMyNTYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjEwOjQ0LjkxMjk0NTM1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0MjY5ODYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgRXRoZXJuZXQgRHJpdmVyIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGl0J3MgY2xlYXJseSBhbiBFdGhlcm5ldCBkcml2ZXIuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBob3cgaXQncyBiZWluZyByZWdpc3RlcmVkIHdpdGggdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHR5cGljYWwgcmVnaXN0cmF0aW9uIGZsb3c6IGlzIGl0IHVzaW5nIHRoZSBzdGFuZGFyZCBgbmV0X2RldmljZWAgc3RydWN0dXJlIGFuZCB0aGUgYHJlZ2lzdGVyX25ldGRldigpYCBjYWxsPyBPciwgYXJlIHRoZXkgZ29pbmcgd2l0aCBhIG1vcmUgbW9kZXJuIGFwcHJvYWNoLCBwZXJoYXBzIGEgcGxhdGZvcm0gZGV2aWNlIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXI/XG5cbkknbSBtZW50YWxseSBzY2FubmluZyBmb3IgdGhlIHJlbGV2YW50IG1hY3JvcyBhbmQgZnVuY3Rpb24gY2FsbHMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSByZWdpc3RyYXRpb24gbWV0aG9kIG9uIHRoaW5ncyBsaWtlIHByb2JlL3JlbW92ZSwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgZHJpdmVyIGluaXRpYWxpemF0aW9uLiBUaGUgcmVnaXN0cmF0aW9uIGlzIHRoZSBsaW5jaHBpbiwgYW5kIHRoZSB3YXkgaXQncyBkb25lIHdpbGwgaGVhdmlseSBpbmZsdWVuY2UgaG93IGV2ZXJ5dGhpbmcgZWxzZSB3b3Jrcy4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgcmVsYXRlZCB0byBzZXR0aW5nIHVwIHRoZSBuZXQgZGV2aWNlLCBpbml0aWFsaXppbmcgYW55IGhhcmR3YXJlLXNwZWNpZmljIGRhdGEsIGFuZCBsaW5raW5nIHRoZSBkcml2ZXIgdG8gdGhlIHJlbGV2YW50IG5ldHdvcmsgcHJvdG9jb2xzLiBMZXQncyBzZWUgaWYgdGhpcyBmb2xsb3dzIHRoZSBleHBlY3RlZCBwYXR0ZXJucyBvciBkZXZpYXRlcyBpbiBhbiBpbnRlcmVzdGluZyB3YXkuLi4gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBsaWtlbHkgcXVlc3Rpb25zIGluIG15IG1pbmQgYmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZSwgZXhwZWN0aW5nIHRvIHNlZSB3aGVyZSB0aGUgZHJpdmVyIHRvdWNoZXMgdGhlIGtlcm5lbCBuZXR3b3JrIHN0YWNrLCB0aGUgcmVsZXZhbnQgaW50ZXJydXB0IGhhbmRsZXJzIGFuZCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRpZmZlcmVudCBuZXR3b3JraW5nIHByb3RvY29scy4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIGNvbmZpcm1zIHdoYXQgSSBhbHJlYWR5IGtub3cgYWJvdXQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo0OC41NTU2NDY3NDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNDI4NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTYyNDY9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFjYl9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTYyNTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzo2MjU3Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobWFjYl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtNjI1OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTA6NDguNzA4MDg0ODc5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3ODUxMjY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnk6XG5cbioqRGlnZ2luZyBpbnRvIFRoaXMgRHJpdmVyKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBwbGF0Zm9ybSBkcml2ZXIgaGVyZSwgYW5kIHRoZSBmaXJzdCBxdWVzdGlvbiB0aGF0IGxlYXBzIHRvIG1pbmQsIGFzIGFsd2F5cywgaXMgd2hldGhlciBpdCdzIGdvdCBhIFBDSSBjb3VudGVycGFydC4gVGhhdCdzIHVzdWFsbHkgdGhlIGVhc2llc3Qgd2F5IHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCBlc3BlY2lhbGx5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbGlrZSBNQUNCLiBTbywgdGhlIG1lbnRhbCBjaGVja2xpc3Qga2lja3MgaW46IGxldCdzIHF1aWNrbHkgc2VlIGlmIHRoZXJlJ3MgYW4gYXNzb2NpYXRlZCBQQ0kgZHJpdmVyIGZvciBNQUNCLiBLbm93aW5nIHRoYXQgYXJjaGl0ZWN0dXJlIHdpbGwgc2lnbmlmaWNhbnRseSBzdHJlYW1saW5lIHRoZSBkZWJ1Z2dpbmcgcHJvY2VzcywgYW5kIGFsbG93IG1lIHRvIHF1aWNrbHkgZ2V0IGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGRldmljZS4gRnJvbSB0aGVyZSwgSSBjYW4gZ2V0IGFsbCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBsYXRmb3JtIGRyaXZlciBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjEwOjUxLjY4NjYwMDQ1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjA3NzIzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX3BjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jPTEyNT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbWFjYl9wY2lfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEzMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6MTMyOm1vZHVsZV9wY2lfZHJpdmVyKG1hY2JfcGNpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEzMy1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGV2X2lkX3RhYmxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTA6NTEuOTA3Mzc4MzA0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3OTQ1MjQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ29uZmlybWluZyBQQ0ktU3BlY2lmaWMgTUFDQiBJbnRlcmFjdGlvbnMqKlxuXG5ZZXMsIGNvbmZpcm1lZCwgYG1hY2JfcGNpLmNgIGlzIGRlZmluaXRlbHkgYSB0aGluZy4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIGBtYWNiX3BjaS5jYC4gVGhlIGNvcmUgcXVlc3Rpb24gSSBuZWVkIGFuc3dlcmVkIGlzIHdoZXRoZXIgdGhpcyBQQ0ktc3BlY2lmaWMgZHJpdmVyIGRpcmVjdGx5IGludGVncmF0ZXMgd2l0aCBvciB1dGlsaXplcyB0aGUgZnVuY3Rpb25hbGl0eSBkZWZpbmVkIGluIGBtYWNiX21haW4uY2AuIFVuZGVyc3RhbmRpbmcgdGhhdCByZWxhdGlvbnNoaXAgaXMgY3J1Y2lhbC4gSXMgaXQgYSBtb2R1bGFyIGFwcHJvYWNoLCB3aXRoIGBtYWNiX3BjaS5jYCBhY3RpbmcgYXMgYSB0aGluIFBDSSBnbHVlIGxheWVyIGNhbGxpbmcgZnVuY3Rpb25zIGluIGBtYWNiX21haW4uY2AsIG9yIGRvZXMgaXQgcmUtaW1wbGVtZW50IG9yIGhlYXZpbHkgb3ZlcnJpZGUgbG9naWM/IFRoZSBpbnRlcmFjdGlvbiBtb2RlbCBkaWN0YXRlcyBob3cgSSdkIGFwcHJvYWNoIGFueSBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIHRoZSBQQ0kgaW50ZXJmYWNlIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBNQUNCJ3Mgb3ZlcmFsbCBiZWhhdmlvci4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGBtYWNiX21haW4uY2AgaXMgdGhlIGNvcmUsIHNoYXJlZCBNQUNCIGltcGxlbWVudGF0aW9uIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4NzIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo1NC45ODY4MzQ4MjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjc5ODA3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWNiX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jOjI3OnN0YXRpYyBpbnQgbWFjYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuYy0yOC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM9MTI1PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtYWNiX3BjaV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmMtMTI3LVxcdC5pZF90YWJsZSA9IGRldl9pZF90YWJsZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfcGNpLmM6MTI4OlxcdC5wcm9iZSAgICA9IG1hY2JfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jLTEyOS1cXHQucmVtb3ZlXFx0ICA9IG1hY2JfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo1NS4xMTM2NDAxNjlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzNDUzMjE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYG1hY2JfcHJvYmVgIGluIHRoZSBDb250ZXh0IG9mIE1BQ0IgRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG1hY2JfcHJvYmVgIGluIGBtYWNiX3BjaS5jYCwgYW5kIG15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGNvbnRyb2wgZmxvdyBhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgYG1hY2JfcHJvYmVgICpkaXJlY3RseSoganVtcCBpbnRvIGBtYWNiX21haW4uY2AgdG8gaGFuZGxlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIG9yIGRvZXMgaXQgcHJpbWFyaWx5IGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZSAoYG5ldGRldmApIHdpdGggdGhlIGtlcm5lbCdzIG5ldHdvcmtpbmcgc3RhY2s/IEknbSBiZXR0aW5nIHRoYXQgaXQncyB0aGUgbGF0dGVyLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBxdWlja2x5LiBJIG5lZWQgdG8gYmUgYWJsZSB0byBqdW1wIHRvIHRoZSByaWdodCBmaWxlcyBhbmQgZnVuY3Rpb25zLCBkZXBlbmRpbmcgb24gdGhlIHJvdXRlIHRoYXQgaXQgdGFrZXMuIElzIHRoZXJlIHNvbWV0aGluZywgbGlrZSBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBpbiBgbWFjYl9tYWluLmNgIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0aGF0IEkgY2FuIHF1aWNrbHkgc3BvdD8gTGV0J3MgY2hlY2sgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo1OC4zNDgxNzU5NDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzQ2NzIyNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFjYl9jb25maWdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo1OC44OTE2NjM3ODhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU1MzU3OTgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgbWFjYl9wY2kuY2AgZmlsZTpcblxuKipBbmFseXppbmcgdGhlIE1BQ0IgUENJIERyaXZlciBDb2RlKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGBtYWNiX3BjaS5jYCBmaWxlLiBNeSBnb2FsIGlzIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIGVzc2VuY2Ugb2YgdGhpcyBkcml2ZXIuIEdpdmVuIG15IGV4cGVydGlzZSwgSSdtIG5vdCBsb29raW5nIGZvciBhIGxpbmUtYnktbGluZSB1bmRlcnN0YW5kaW5nLCBidXQgcmF0aGVyIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQga2V5IGludGVyYWN0aW9ucy4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIFBDSSBidXMsIGhvdyBpdCBoYW5kbGVzIGRldmljZSBpbml0aWFsaXphdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgdXNlZCB0byBtYW5hZ2UgdGhlIE1BQ0IgRXRoZXJuZXQgY29udHJvbGxlci4gSSdsbCBiZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBpZGVudGlmeWluZyBhbnkgYXJlYXMgd2hlcmUgdGhlIFBDSSBzcGVjaWZpYyBjb2RlIG1pZ2h0IGRldmlhdGUgZnJvbSBhIG1vcmUgZ2VuZXJpYyBNQUNCIGRyaXZlciwgYW5kIGhvdyBpdCBpcyBhZGFwdGVkIHRvIGludGVyYWN0IHdpdGggdGhlIFBDSSBidXMuIEFueSBjbGV2ZXIgdHJpY2tzIG9yIHVudXN1YWwgb3B0aW1pemF0aW9ucyB1c2VkIHdpbGwganVtcCBvdXQgYXQgbWUgcHJldHR5IHF1aWNrbHkuIEknbSBhbHNvIGdvaW5nIHRvIHNlZSBob3cgd2VsbCBpdCdzIHdyaXR0ZW4gYW5kIHN0cnVjdHVyZWQsIGxvb2tpbmcgZm9yIGdvb2QgY29kaW5nIHByYWN0aWNlcyBhbmQgYXJlYXMgdGhhdCBjb3VsZCBiZSBpbXByb3ZlZC4gSSB3aWxsIGxvb2sgZm9yIGFueSBzdWJ0bGUgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBPdmVyYWxsLCBJIHdhbnQgYSBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBQQ0ktc3BlY2lmaWMgcGFydHMgb2YgdGhpcyBkcml2ZXIgd29yayBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBNQUNCIHN1YnN5c3RlbSwgcmVsYXRpdmUgdG8gbXkgcHJpb3IgdW5kZXJzdGFuZGluZyBvZiB0aGUgdG9waWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3MTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMTowMi40NDUyNDcxMzJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogRE9DOiBDYWRlbmNlIEdFTSBQQ0kgd3JhcHBlci5cXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ2FkZW5jZSBEZXNpZ24gU3lzdGVtcyAtIGh0dHBzOi8vd3d3LmNhZGVuY2UuY29tXFxuICAgNjpcXHQgKlxcbiAgIDc6XFx0ICogQXV0aG9yczogUmFmYWwgT3ppZWJsbyBcXHUwMDNjcmFmYWxvQGNhZGVuY2UuY29tXFx1MDAzZVxcbiAgIDg6XFx0ICpcXHQgICAgQmFydG9zeiBGb2x0YSBcXHUwMDNjYmZvbHRhQGNhZGVuY2UuY29tXFx1MDAzZVxcbiAgIDk6XFx0ICovXFxuICAxMDpcXHRcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGsuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jbGstcHJvdmlkZXIuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbiAgMTc6XFx0I2luY2x1ZGUgXFxcIm1hY2IuaFxcXCJcXG4gIDE4OlxcdFxcbiAgMTk6XFx0I2RlZmluZSBQQ0lfRFJJVkVSX05BTUUgXFxcIm1hY2JfcGNpXFxcIlxcbiAgMjA6XFx0I2RlZmluZSBQTEFUX0RSSVZFUl9OQU1FIFxcXCJtYWNiXFxcIlxcbiAgMjE6XFx0XFxuICAyMjpcXHQjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0ROU19NQUNCIDB4ZTAwN1xcbiAgMjM6XFx0XFxuICAyNDpcXHQjZGVmaW5lIEdFTV9QQ0xLX1JBVEUgNTAwMDAwMDBcXG4gIDI1OlxcdCNkZWZpbmUgR0VNX0hDTEtfUkFURSA1MDAwMDAwMFxcbiAgMjY6XFx0XFxuICAyNzpcXHRzdGF0aWMgaW50IG1hY2JfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4gIDI4OlxcdHtcXG4gIDI5OlxcdFxcdGludCBlcnI7XFxuICAzMDpcXHRcXHRzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldjtcXG4gIDMxOlxcdFxcdHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBwbGF0X2luZm87XFxuICAzMjpcXHRcXHRzdHJ1Y3QgbWFjYl9wbGF0Zm9ybV9kYXRhIHBsYXRfZGF0YTtcXG4gIDMzOlxcdFxcdHN0cnVjdCByZXNvdXJjZSByZXNbMl07XFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdC8qIGVuYWJsZSBwY2kgZGV2aWNlICovXFxuICAzNjpcXHRcXHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7XFxuICAzNzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiAgMzg6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRW5hYmxpbmcgUENJIGRldmljZSBoYXMgZmFpbGVkOiAlZFxcXCIsIGVycik7XFxuICAzOTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAgNDA6XFx0XFx0fVxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHRwY2lfc2V0X21hc3RlcihwZGV2KTtcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0Lyogc2V0IHVwIHJlc291cmNlcyAqL1xcbiAgNDU6XFx0XFx0bWVtc2V0KHJlcywgMHgwMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBBUlJBWV9TSVpFKHJlcykpO1xcbiAgNDY6XFx0XFx0cmVzWzBdLnN0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApO1xcbiAgNDc6XFx0XFx0cmVzWzBdLmVuZCA9IHBjaV9yZXNvdXJjZV9lbmQocGRldiwgMCk7XFxuICA0ODpcXHRcXHRyZXNbMF0ubmFtZSA9IFBDSV9EUklWRVJfTkFNRTtcXG4gIDQ5OlxcdFxcdHJlc1swXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNO1xcbiAgNTA6XFx0XFx0cmVzWzFdLnN0YXJ0ID0gcGNpX2lycV92ZWN0b3IocGRldiwgMCk7XFxuICA1MTpcXHRcXHRyZXNbMV0ubmFtZSA9IFBDSV9EUklWRVJfTkFNRTtcXG4gIDUyOlxcdFxcdHJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiRU1BQyBwaHlzaWNhbCBiYXNlIGFkZHI6ICVwYVxcXFxuXFxcIixcXG4gIDU1OlxcdFxcdFxcdCBcXHUwMDI2cmVzWzBdLnN0YXJ0KTtcXG4gIDU2OlxcdFxcbiAgNTc6XFx0XFx0Lyogc2V0IHVwIG1hY2IgcGxhdGZvcm0gZGF0YSAqL1xcbiAgNTg6XFx0XFx0bWVtc2V0KFxcdTAwMjZwbGF0X2RhdGEsIDAsIHNpemVvZihwbGF0X2RhdGEpKTtcXG4gIDU5OlxcdFxcbiAgNjA6XFx0XFx0LyogaW5pdGlhbGl6ZSBjbG9ja3MgKi9cXG4gIDYxOlxcdFxcdHBsYXRfZGF0YS5wY2xrID0gY2xrX3JlZ2lzdGVyX2ZpeGVkX3JhdGUoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcInBjbGtcXFwiLCBOVUxMLCAwLFxcbiAgNjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IEdFTV9QQ0xLX1JBVEUpO1xcbiAgNjM6XFx0XFx0aWYgKElTX0VSUihwbGF0X2RhdGEucGNsaykpIHtcXG4gIDY0OlxcdFxcdFxcdGVyciA9IFBUUl9FUlIocGxhdF9kYXRhLnBjbGspO1xcbiAgNjU6XFx0XFx0XFx0Z290byBlcnJfcGNsa19yZWdpc3RlcjtcXG4gIDY2OlxcdFxcdH1cXG4gIDY3OlxcdFxcbiAgNjg6XFx0XFx0cGxhdF9kYXRhLmhjbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiaGNsa1xcXCIsIE5VTEwsIDAsXFxuICA2OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgR0VNX0hDTEtfUkFURSk7XFxuICA3MDpcXHRcXHRpZiAoSVNfRVJSKHBsYXRfZGF0YS5oY2xrKSkge1xcbiAgNzE6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihwbGF0X2RhdGEuaGNsayk7XFxuICA3MjpcXHRcXHRcXHRnb3RvIGVycl9oY2xrX3JlZ2lzdGVyO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0XFxuICA3NTpcXHRcXHQvKiBzZXQgdXAgcGxhdGZvcm0gZGV2aWNlIGluZm8gKi9cXG4gIDc2OlxcdFxcdG1lbXNldChcXHUwMDI2cGxhdF9pbmZvLCAwLCBzaXplb2YocGxhdF9pbmZvKSk7XFxuICA3NzpcXHRcXHRwbGF0X2luZm8ucGFyZW50ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4gIDc4OlxcdFxcdHBsYXRfaW5mby5md25vZGUgPSBwZGV2LVxcdTAwM2VkZXYuZndub2RlO1xcbiAgNzk6XFx0XFx0cGxhdF9pbmZvLm5hbWUgPSBQTEFUX0RSSVZFUl9OQU1FO1xcbiAgODA6XFx0XFx0cGxhdF9pbmZvLmlkID0gcGRldi1cXHUwMDNlZGV2Zm47XFxuICA4MTpcXHRcXHRwbGF0X2luZm8ucmVzID0gcmVzO1xcbiAgODI6XFx0XFx0cGxhdF9pbmZvLm51bV9yZXMgPSBBUlJBWV9TSVpFKHJlcyk7XFxuICA4MzpcXHRcXHRwbGF0X2luZm8uZGF0YSA9IFxcdTAwMjZwbGF0X2RhdGE7XFxuICA4NDpcXHRcXHRwbGF0X2luZm8uc2l6ZV9kYXRhID0gc2l6ZW9mKHBsYXRfZGF0YSk7XFxuICA4NTpcXHRcXHRwbGF0X2luZm8uZG1hX21hc2sgPSBwZGV2LVxcdTAwM2VkbWFfbWFzaztcXG4gIDg2OlxcdFxcbiAgODc6XFx0XFx0LyogcmVnaXN0ZXIgcGxhdGZvcm0gZGV2aWNlICovXFxuICA4ODpcXHRcXHRwbGF0X2RldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9mdWxsKFxcdTAwMjZwbGF0X2luZm8pO1xcbiAgODk6XFx0XFx0aWYgKElTX0VSUihwbGF0X2RldikpIHtcXG4gIDkwOlxcdFxcdFxcdGVyciA9IFBUUl9FUlIocGxhdF9kZXYpO1xcbiAgOTE6XFx0XFx0XFx0Z290byBlcnJfcGxhdF9kZXZfcmVnaXN0ZXI7XFxuICA5MjpcXHRcXHR9XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBwbGF0X2Rldik7XFxuICA5NTpcXHRcXG4gIDk2OlxcdFxcdHJldHVybiAwO1xcbiAgOTc6XFx0XFxuICA5ODpcXHRlcnJfcGxhdF9kZXZfcmVnaXN0ZXI6XFxuICA5OTpcXHRcXHRjbGtfdW5yZWdpc3Rlcl9maXhlZF9yYXRlKHBsYXRfZGF0YS5oY2xrKTtcXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMTowMi40NDUzOTY4NDJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1Mjc5NDY3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1BQ0IgUGxhdGZvcm0gRGV2aWNlKipcblxuT2theSwgc28gSSBzZWUgdGhlIHN5c3RlbSByZWdpc3RlcnMgYSBwbGF0Zm9ybSBkZXZpY2UsIHNwZWNpZmljYWxseSB0aGUgYG1hY2JgIGluc3RhbmNlLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGBtYWNiX21haW4uY2AgYXMgdGhlIGRyaXZlciB0aGF0J3MgZ29pbmcgdG8gZ2V0IHByb2JlZC4gVGhlIGZhY3QgdGhhdCBpdCdzIGEgcGxhdGZvcm0gZGV2aWNlIHN1Z2dlc3RzIGEgY2xvc2VyIHJlbGF0aW9uc2hpcCB0byB0aGUgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlIHRoYW4gc29tZSBvdGhlciBhcHByb2FjaGVzLiBBaCBoYSwgYW5kIEkgc2VlIG5vdyB0aGF0IGl0J3MgcmVhY2hhYmxlIHZpYSBQQ0khIFRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgc28gbGV0J3MganVtcCBpbnRvIHRoZSBLY29uZmlnIGZpbGUgZm9yIGBNQUNCYC4gVGltZSB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBpbnN0YW5jZSBpcyBlbmFibGVkIGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhhdCBtaWdodCBiZSBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTE6MDUuNDk4MTk0OTI2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA4NzI2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQ0JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZz0yMD1pZiBORVRfVkVORE9SX0NBREVOQ0VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjIyOmNvbmZpZyBNQUNCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTIzLVxcdHRyaXN0YXRlIFxcXCJDYWRlbmNlIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctMzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjM3OmNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTM4LVxcdGJvb2wgXFxcIlVzZSBJRUVFIDE1ODggaHdzdGFtcFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWc6NDU6Y29uZmlnIE1BQ0JfUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnLTQ2LVxcdHRyaXN0YXRlIFxcXCJDYWRlbmNlIFBDSSBNQUNCL0dFTSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMTowNS42MDkwNzY0OTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY1OTY4MjEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOlxuXG4qKkFuYWx5emluZyB0aGUgTUFDQiBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgTUFDQl9QQ0lgIGlzIGNsZWFybHkgdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhbGx5IGZvciB0aGUgUENJIHdyYXBwZXIsIGFuZCBgTUFDQmAgaXRzZWxmIGlzIHRoZSBoZWFydCBvZiB0aGUgZHJpdmVyLiBOb3csIGtub3dpbmcgdGhhdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgcmVsYXRlIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBgTUFDQl9QQ0lgIGhhcy4gVGltZSB0byBjaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMg4oCTIHRoYXQncyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyB1c3VhbGx5IGFyZS4gVW5kZXJzdGFuZGluZyBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgcHJvYmFibHkgcHJvdmlkZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBQQ0kgd3JhcHBlciBjb25maWcgaXMgaW50ZWdyYXRlZCB3aXRoIHRoZSBtYWluIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA1MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjExOjA4LjI2ODc2MTUyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MDIxMTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQUNCX1BDSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnPTM3PWNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWctNDQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9LY29uZmlnOjQ1OmNvbmZpZyBNQUNCX1BDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiQ2FkZW5jZSBQQ0kgTUFDQi9HRU0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTE6MDguMzk0Nzg4MzY5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTUxODUwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIENhZGVuY2UgRXRoZXJuZXQgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgQ2FkZW5jZSBFdGhlcm5ldCBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvS2NvbmZpZ2AgZmlsZSwgYXJvdW5kIGxpbmUgNDUuIEknbSBob3BpbmcgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIHNlbGVjdGlvbiBsb2dpYyBvciBkZXBlbmRlbnQgZmVhdHVyZXMgc3RhcnQgdG8gYmVjb21lIGFwcGFyZW50LiBMaW5lIDQ1Li4uIHRoYXQncyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGF2YWlsYWJsZSBmZWF0dXJlcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBkaWZmZXJlbnQgY2FwYWJpbGl0aWVzIGFyZSBlbmFibGVkLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM1NywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjExOjExLjU4OTk3NjUwNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzA6XFx0XFx0ICBBVDkxIHBhcnRzLiAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQ2FkZW5jZSBHRU0gKEdpZ2FiaXRcXG4gIDMxOlxcdFxcdCAgRXRoZXJuZXQgTUFDIGZvdW5kIGluIHNvbWUgQVJNIFNvQyBkZXZpY2VzKS4gIFNheSBZIHRvIGluY2x1ZGVcXG4gIDMyOlxcdFxcdCAgc3VwcG9ydCBmb3IgdGhlIE1BQ0IvR0VNIGNoaXAuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzU6XFx0XFx0ICB3aWxsIGJlIG1hY2IuXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBNQUNCX1VTRV9IV1NUQU1QXFxuICAzODpcXHRcXHRib29sIFxcXCJVc2UgSUVFRSAxNTg4IGh3c3RhbXBcXFwiXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIE1BQ0JcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcXG4gIDQxOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDI6XFx0XFx0aGVscFxcbiAgNDM6XFx0XFx0ICBFbmFibGUgSUVFRSAxNTg4IFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFApIHN1cHBvcnQgZm9yIE1BQ0IuXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBNQUNCX1BDSVxcbiAgNDY6XFx0XFx0dHJpc3RhdGUgXFxcIkNhZGVuY2UgUENJIE1BQ0IvR0VNIHN1cHBvcnRcXFwiXFxuICA0NzpcXHRcXHRkZXBlbmRzIG9uIE1BQ0IgXFx1MDAyNlxcdTAwMjYgUENJXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgaXMgUENJIHdyYXBwZXIgZm9yIE1BQ0IgZHJpdmVyLlxcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDUyOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgbWFjYl9wY2kuXFxuICA1MzpcXHRcXG4gIDU0OlxcdGVuZGlmICMgTkVUX1ZFTkRPUl9DQURFTkNFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjExOjExLjU5MDA2MTk5NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTYzMTkzMjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUFDQiBDb25zaXN0ZW50IE1lbW9yeSBQYXRjaCoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHRvdWNoaW5nIGBNQUNCYCBhbmQgYE1BQ0JfUENJYCwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZSBpcyB3aXRoaW4gYG1hY2JfZnJlZV9jb25zaXN0ZW50YCBpbiBgbWFjYl9tYWluLmNgLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGBtYWNiX2ZyZWVfY29uc2lzdGVudGAgaXMgY2FsbGVkIGZyb20gYSBmZXcga2V5IHBsYWNlczogdGhlIGVycm9yIGhhbmRsaW5nIGluIGBtYWNiX2FsbG9jX2NvbnNpc3RlbnRgLCB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYG1hY2Jfb3BlbmAsIGFuZCBkdXJpbmcgdGhlIGNsZWFudXAgaW4gYG1hY2JfY2xvc2VgLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIHRoZSBjb25zaXN0ZW50IG1lbW9yeSBhbmQgdW5tYXBwaW5nIHRoZSB0cmFuc21pdCBza2J1ZmZzLiBUaGUgcGF0Y2gsIHNwZWNpZmljYWxseSwgaXMgYWRkaW5nIGxvZ2ljIHRvIHVubWFwIGFuZCBkaXNjYXJkIGFueSB0cmFuc21pdCBza2J1ZmZzIHRoYXQgYXJlIHBlbmRpbmcgd2hlbiB0aGUgY29uc2lzdGVudCBtZW1vcnkgaXMgYmVpbmcgZnJlZWQuIFRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGxvZ2ljLCBhbmQgaXQncyByZWFjaGFibGUgdmlhIFBDSSwgbWVhbmluZyB3ZSBoYXZlIHRvIGNvbnNpZGVyIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgdGhlcmUuIEdpdmVuIHRoZSBjaGFuZ2VzIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwb3RlbnRpYWwgZm9yIGRyb3BwZWQgcGFja2V0cywgYFdvcnRoRnV6emluZz10cnVlYCBmZWVscyBsaWtlIGEgc29saWQgYXNzZXNzbWVudC5cblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBgbWFjYl9mcmVlX2NvbnNpc3RlbnRgLiBBIHF1aWNrIHJldmlldyBvZiB0aGUgZGlmZiBjb25maXJtcyB0aGF0LCBidXQgaXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaC5cblxuRmluYWxseSwgSSBuZWVkIHRvIHRob3JvdWdobHkgcmUtZXhhbWluZSBgbWFjYl9mcmVlX2NvbnNpc3RlbnRgIHdpdGhpbiBgbWFjYl9tYWluLmNgIGl0c2VsZi4gR290dGEgbWFrZSBzdXJlIG5vdGhpbmcgZWxzZSBzbGlwcGVkIGluIHRoZXJlIHVubm90aWNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkzNywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjExOjE2LjE1MzI1Nzk0N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwMjA1NTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hY2JfZnJlZV9jb25zaXN0ZW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0yNjQ0PXN0YXRpYyB1bnNpZ25lZCBpbnQgbWFjYl9yeF9yaW5nX3NpemVfcGVyX3F1ZXVlKHN0cnVjdCBtYWNiICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMjY0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjI2NDk6c3RhdGljIHZvaWQgbWFjYl9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IG1hY2IgKmJwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMjY1MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTI3MzE9c3RhdGljIGludCBtYWNiX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IG1hY2IgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0yNzg4LW91dF9lcnI6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzoyNzg5OlxcdG1hY2JfZnJlZV9jb25zaXN0ZW50KGJwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTI3OTAtXFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTMxNjA9c3RhdGljIGludCBtYWNiX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzIyMS1cXHR9XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYzozMjIyOlxcdG1hY2JfZnJlZV9jb25zaXN0ZW50KGJwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTMyMjMtcG1fZXhpdDpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM9MzIyOD1zdGF0aWMgaW50IG1hY2JfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzI1NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjMyNTU6XFx0bWFjYl9mcmVlX2NvbnNpc3RlbnQoYnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMzI1Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTE6MTYuNDEzNDcyMzgxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTk5OTM5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIHRoZSBTb2x1dGlvbioqXG5cbkFscmlnaHQsIGFmdGVyIHJldmlld2luZyB0aGUgc2l0dWF0aW9uLCBJJ3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoaW5ncy4gVGhpcyBkZWZpbml0ZWx5IHNlZW1zIGFjaGlldmFibGUsIGFuZCBtb3Jlb3ZlciwgaXQncyBvcGVyYXRpbmcgYXMgaW50ZW5kZWQuIE5vIG1ham9yIHJvYWRibG9ja3Mgb3IgaGlkZGVuIGlzc3VlcyBJIGNhbiBzZWUgYXQgdGhpcyBwb2ludC4gVGltZSB0byBsb2NrIHRoaXMgaW4uIExldCdzIGdldCB0aGlzIGZpbmFsaXplZC4gSSB0aGluayBpdCdzIHRpbWUgdG8gY2FsbCBpbiB0aGF0IGBzZXQtcmVzdWx0c2AgZnVuY3Rpb24gdG8gb2ZmaWNpYWxseSBpbXBsZW1lbnQgdGhlIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMTEsIk91dHB1dFRva2VucyI6OTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMToxOS42MTM0NjkwOTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE1MjUyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQ0JcIixcbiAgICBcIk1BQ0JfUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFjYl9mcmVlX2NvbnNpc3RlbnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ2FkZW5jZSBNQUNCL0dFTSBFdGhlcm5ldCBkcml2ZXIgdG8gdW5tYXAgYW5kIGRyb3AgcGVuZGluZyBUWCBza2JzIHdoZW4gZnJlZWluZyBjb25zaXN0ZW50IG1lbW9yeS4gVGhpcyBpcyBmdW5jdGlvbmFsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHdyYXBwZXIgKG1hY2JfcGNpKSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDQlwiLFxuICAgIFwiTUFDQl9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWNiX2ZyZWVfY29uc2lzdGVudFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDYWRlbmNlIE1BQ0IvR0VNIEV0aGVybmV0IGRyaXZlciB0byB1bm1hcCBhbmQgZHJvcCBwZW5kaW5nIFRYIHNrYnMgd2hlbiBmcmVlaW5nIGNvbnNpc3RlbnQgbWVtb3J5LiBUaGlzIGlzIGZ1bmN0aW9uYWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgd3JhcHBlciAobWFjYl9wY2kpIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkp4ms[1] Phase: Succeeded StartedAt: 2026-07-02 18:11:31 +0000 UTC FinishedAt: 2026-07-02 18:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 18:11:31 +0000 UTC FinishedAt: 2026-07-02 18:11:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2] Phase: Succeeded StartedAt: 2026-07-02 18:11:31 +0000 UTC FinishedAt: 2026-07-02 19:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 18:11:31 +0000 UTC FinishedAt: 2026-07-02 19:27:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 18:11:31 +0000 UTC FinishedAt: 2026-07-02 18:12:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 18:11:31 +0000 UTC FinishedAt: 2026-07-02 18:11:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowkp4ms/series-workflowkp4ms-convert-artifact-871226038/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 18:12:07 +0000 UTC FinishedAt: 2026-07-02 18:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 18:12:07 +0000 UTC FinishedAt: 2026-07-02 18:52:55 +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:*7f2cbbb7-4d08-493f-82c9-fffcd2db24df,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-workflowkp4ms/series-workflowkp4ms-convert-artifact-871226038/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": "3bfde57f-441f-4dfb-97bd-95d9f97583e4", "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-workflowkp4ms/series-workflowkp4ms-build-action-792658380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 18:12:07 +0000 UTC FinishedAt: 2026-07-02 18:51:12 +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:*7f2cbbb7-4d08-493f-82c9-fffcd2db24df,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-workflowkp4ms/series-workflowkp4ms-convert-artifact-871226038/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": "3bfde57f-441f-4dfb-97bd-95d9f97583e4", "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-workflowkp4ms/series-workflowkp4ms-build-action-792658380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 18:52:55 +0000 UTC FinishedAt: 2026-07-02 18:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 18:52:55 +0000 UTC FinishedAt: 2026-07-02 18:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 18:52:55 +0000 UTC FinishedAt: 2026-07-02 18:53:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 18:52:55 +0000 UTC FinishedAt: 2026-07-02 18:53:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowkp4ms/series-workflowkp4ms-convert-artifact-3468338761/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 18:53:27 +0000 UTC FinishedAt: 2026-07-02 18:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 18:53:27 +0000 UTC FinishedAt: 2026-07-02 18:55:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3bfde57f-441f-4dfb-97bd-95d9f97583e4,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-workflowkp4ms/series-workflowkp4ms-build-action-792658380/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-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 18:55:38 +0000 UTC FinishedAt: 2026-07-02 18:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 18:55:38 +0000 UTC FinishedAt: 2026-07-02 18:55:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 18:55:38 +0000 UTC FinishedAt: 2026-07-02 19:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 18:55:38 +0000 UTC FinishedAt: 2026-07-02 19:20:29 +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:*7f2cbbb7-4d08-493f-82c9-fffcd2db24df,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-workflowkp4ms/series-workflowkp4ms-convert-artifact-3468338761/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": "42a8edd7-842c-4641-a27c-0fe3aff4bdc8", "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-workflowkp4ms/series-workflowkp4ms-build-action-1086338341/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 18:55:38 +0000 UTC FinishedAt: 2026-07-02 19:19:18 +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:*7f2cbbb7-4d08-493f-82c9-fffcd2db24df,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-workflowkp4ms/series-workflowkp4ms-convert-artifact-3468338761/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": "42a8edd7-842c-4641-a27c-0fe3aff4bdc8", "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-workflowkp4ms/series-workflowkp4ms-build-action-1086338341/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 19:20:29 +0000 UTC FinishedAt: 2026-07-02 19:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 19:20:29 +0000 UTC FinishedAt: 2026-07-02 19:20:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 19:20:29 +0000 UTC FinishedAt: 2026-07-02 19:22:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 19:20:29 +0000 UTC FinishedAt: 2026-07-02 19:22:17 +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:*42a8edd7-842c-4641-a27c-0fe3aff4bdc8,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-workflowkp4ms/series-workflowkp4ms-build-action-1086338341/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-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 19:22:27 +0000 UTC FinishedAt: 2026-07-02 19:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 19:22:27 +0000 UTC FinishedAt: 2026-07-02 19:27:11 +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":["macb_free_consistent"],"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:*3bfde57f-441f-4dfb-97bd-95d9f97583e4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42a8edd7-842c-4641-a27c-0fe3aff4bdc8,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-workflowkp4ms/series-workflowkp4ms-build-action-792658380/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-workflowkp4ms/series-workflowkp4ms-build-action-1086338341/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 19:22:27 +0000 UTC FinishedAt: 2026-07-02 19:22:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 19:22:27 +0000 UTC FinishedAt: 2026-07-02 19:22:34 +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":["macb_free_consistent"],"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-workflowkp4ms/series-workflowkp4ms-convert-artifact-499667358/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 19:22:27 +0000 UTC FinishedAt: 2026-07-02 19:22:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 19:22:27 +0000 UTC FinishedAt: 2026-07-02 19:22:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 19:22:27 +0000 UTC FinishedAt: 2026-07-02 19:22:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 19:22:37 +0000 UTC FinishedAt: 2026-07-02 19:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkp4ms[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["macb_free_consistent"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d8e8b85a85fe21954d303db68034aac4639df88d","config_name":"upstream-apparmor-kasan.config","enable_configs":["MACB","MACB_PCI"],"series_id":"f271c85a-74b2-4f65-a78b-01ac1e63987f","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 19:22:37 +0000 UTC FinishedAt: 2026-07-02 19:26:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3bfde57f-441f-4dfb-97bd-95d9f97583e4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42a8edd7-842c-4641-a27c-0fe3aff4bdc8,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-workflowkp4ms/series-workflowkp4ms-build-action-792658380/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-workflowkp4ms/series-workflowkp4ms-build-action-1086338341/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-workflowkp4ms/series-workflowkp4ms-convert-artifact-499667358/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,}