Name: series-workflowjntwz Phase: Succeeded StartedAt: 2026-07-31 23:34:47 +0000 UTC FinishedAt: 2026-08-01 03:48:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[0] Phase: Succeeded StartedAt: 2026-07-31 23:34:47 +0000 UTC FinishedAt: 2026-07-31 23:53:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 23:34:47 +0000 UTC FinishedAt: 2026-07-31 23:53:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "2fbade66245059c78daeaccfce13ecf499fffb51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "2fbade66245059c78daeaccfce13ecf499fffb51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER" ], "series_id": "75468e90-af4d-4760-9ccf-00ddf46da748" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_dev_state_flush", "__xfrm_state_destroy" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZsdXNoJiMzNDssCiAgICAmIzM0O19feGZybV9zdGF0ZV9kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYHhmcm1fc3RhdGVfZ2NfbXV0ZXhgIHRvIHN5bmNocm9uaXplIFhGUk0gc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIChgeGZybV9zdGF0ZV9nY190YXNrYCkgYW5kIGRldmljZSBzdGF0ZSBmbHVzaGluZyAoYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgY29yZSBYRlJNIHN1YnN5c3RlbS4gSXQgaXMgcmVhY2hhYmxlIGJ5IGNyZWF0aW5nIFhGUk0gc3RhdGVzIGFuZCB1bnJlZ2lzdGVyaW5nIG5ldHdvcmsgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEzOGQ1MjYzYmZmMDk4ZWRlMjQzMmUwNmMxN2JjODRkM2YyZjkzMjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAyMzo1MDoyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbmluZGV4IDM2YTRmNjc5M2VkZWYuLmRlMDk3YmJhODAzYjcgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuQEAgLTIyNiw2ICYjNDM7MjI2LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyBfX3JjdSAqeGZybV9zdGF0ZV9hZmluZm9bTlBST1RPXTtcbiBcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmcm1fc3RhdGVfZ2NfbG9jayk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyh4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiYjNDM7c3RhdGljIERFRklORV9NVVRFWCh4ZnJtX3N0YXRlX2djX211dGV4KTtcbiBcbiBpbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7XG4gXG5AQCAtNjMyLDggJiM0Mzs2MzMsMTAgQEAgc3RhdGljIHZvaWQgeGZybV9zdGF0ZV9nY190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXHUwMDI2Z2NfbGlzdCwgZ2NsaXN0KVxuIFx0XHR4ZnJtX3N0YXRlX2djX2Rlc3Ryb3koeCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIH1cbiBcbiBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgeGZybV90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICptZSlcbkBAIC0xMDAwLDYgJiM0MzsxMDAzLDcgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlcbiBvdXQ6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4gcmVzdGFydF9nYzpcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCBcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19saXN0LCBkZXZfZ2NsaXN0KSB7XG5AQCAtMTAxNCw2ICYjNDM7MTAxOCw3IEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpXG4gXG4gXHR9XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXG4gXHR4ZnJtX2ZsdXNoX2djKCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZsdXNoJiMzNDssCiAgICAmIzM0O19feGZybV9zdGF0ZV9kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYHhmcm1fc3RhdGVfZ2NfbXV0ZXhgIHRvIHN5bmNocm9uaXplIFhGUk0gc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIChgeGZybV9zdGF0ZV9nY190YXNrYCkgYW5kIGRldmljZSBzdGF0ZSBmbHVzaGluZyAoYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgY29yZSBYRlJNIHN1YnN5c3RlbS4gSXQgaXMgcmVhY2hhYmxlIGJ5IGNyZWF0aW5nIFhGUk0gc3RhdGVzIGFuZCB1bnJlZ2lzdGVyaW5nIG5ldHdvcmsgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEzOGQ1MjYzYmZmMDk4ZWRlMjQzMmUwNmMxN2JjODRkM2YyZjkzMjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAyMzo1MDoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCAzNmE0ZjY3OTNlZGVmLi5kZTA5N2JiYTgwM2I3IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC0yMjYsNiAmIzQzOzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gX19yY3UgKnhmcm1fc3RhdGVfYWZpbmZvW05QUk9UT107CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9nY19sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7CiYjNDM7c3RhdGljIERFRklORV9NVVRFWCh4ZnJtX3N0YXRlX2djX211dGV4KTsKIAogaW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpOwogCkBAIC02MzIsOCAmIzQzOzYzMywxMCBAQCBzdGF0aWMgdm9pZCB4ZnJtX3N0YXRlX2djX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJc3luY2hyb25pemVfcmN1KCk7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3hmcm1fc3RhdGVfZ2NfbXV0ZXgpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCAmYW1wO2djX2xpc3QsIGdjbGlzdCkKIAkJeGZybV9zdGF0ZV9nY19kZXN0cm95KHgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt4ZnJtX3N0YXRlX2djX211dGV4KTsKIH0KIAogc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhmcm1fdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqbWUpCkBAIC0xMDAwLDYgJiM0MzsxMDAzLDcgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGkKIG91dDoKIAlzcGluX3VubG9ja19iaCgmYW1wO25ldC0mZ3Q7eGZybS54ZnJtX3N0YXRlX2xvY2spOwogCiYjNDM7CW11dGV4X2xvY2soJmFtcDt4ZnJtX3N0YXRlX2djX211dGV4KTsKIAlzcGluX2xvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIHJlc3RhcnRfZ2M6CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4LCB0bXAsICZhbXA7eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCwgZGV2X2djbGlzdCkgewpAQCAtMTAxNCw2ICYjNDM7MTAxOCw3IEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpCiAKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7eGZybV9zdGF0ZV9nY19tdXRleCk7CiAKIAl4ZnJtX2ZsdXNoX2djKCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIFhGUk0gU3RhdGUgR2FyYmFnZSBDb2xsZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBzZWVtcyBsaWtlIGl04oCZcyB0d2Vha2luZyBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgbmV3IG11dGV4LCBgeGZybV9zdGF0ZV9nY19tdXRleGAuIFRoYXQganVtcHMgb3V0IOKAkyBhIG11dGV4IHVzdWFsbHkgbWVhbnMgdGhleSYjMzk7cmUgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIG9yIHNvbWUgc3luY2hyb25pemF0aW9uIGlzc3VlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbi4gTWFrZXMgc2Vuc2U7IGZ1bmN0aW9uYWwgY29kZSBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gbGlrZSB0aGlzIG9mdGVuIG5lZWRzIGNhcmVmdWwgc3luY2hyb25pemF0aW9uLgoKTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzOiB3aGF0IGFyZSB0aGUgbXV0ZXgmIzM5O3MgdXNhZ2VzPyBMZXQmIzM5O3MgY2hlY2sgYHhmcm1fc3RhdGVfZ2NfdGFza2AgYW5kIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuIEFoLCBgeGZybV9zdGF0ZV9nY190YXNrYCBpcyBhIHdvcmtxdWV1ZSB0YXNrLiBTdGFuZGFyZCBzdHVmZi4gQW5kIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuLi4gdGhhdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGRldmljZSBmbHVzaGVzLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBkZXZpY2UgZmx1c2hlcyBjYW4gYmUgdHJpY2t5LgoKV2FpdCBhIHNlY29uZOKApiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgICphY3F1aXJlcyogYHhmcm1fc3RhdGVfZ2NfbXV0ZXhgLCBhbmQgKnRoZW4qIGB4ZnJtX3N0YXRlX2Rldl9nY19sb2NrYC4gQW5kIGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGFsc28gdXNlcyBgeGZybV9zdGF0ZV9nY19tdXRleGAuIE9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgbG9jayBoaWVyYXJjaHkgaGVyZS4gVGhleSYjMzk7cmUgdHJ5aW5nIHRvIGNhcmVmdWxseSBzZXF1ZW5jZSB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGFuZCBkZXZpY2UgZmx1c2ggb3BlcmF0aW9ucyB0byBhdm9pZCBjb250ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGhpZXJhcmNoeSBmdWxseS4gVGhpcyBtaWdodCBiZSBhIHN1YnRsZSBidXQgY3JpdGljYWwgZml4LgoKTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBYRlJNIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX1hGUk1gIGlzIHRoZSBjb3JlLCByaWdodD8gVGltZSB0byB1c2UgYGdpdCBncmVwYCBhbmQgbG9vayBmb3IgYWxsIHRoZSBjYWxscyB0byBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBzZWUgd2hhdCBjb25maWcgZGVwZW5kZW5jaWVzIGl0IGhhcy4gVW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB3aWxsIGNsYXJpZnkgdGhlIG5lY2Vzc2l0eSBvZiB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kZXZfc3RhdGVfZmx1c2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0zOTE5PXN0YXRpYyBpbnQgYm9uZF9tYXN0ZXJfbmV0ZGV2X2V2ZW50KHVuc2lnbmVkIGxvbmcgZXZlbnQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zOTMxLSNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjM5MzI6XHRcdHhmcm1fZGV2X3N0YXRlX2ZsdXNoKGRldl9uZXQoYm9uZF9kZXYpLCBib25kX2RldiwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM5MzMtI2VuZGlmIC8qIENPTkZJR19YRlJNX09GRkxPQUQgKi9cbi0tXG5pbmNsdWRlL25ldC94ZnJtLmg9MTc4Nz1pbnQgeGZybV9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHByb3RvLCBib29sIHRhc2tfdmFsaWQpO1xuaW5jbHVkZS9uZXQveGZybS5oOjE3ODg6aW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlkKTtcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNzg5LWludCB4ZnJtX2Rldl9wb2xpY3lfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTQ2PXN0YXRpYyBpbnQgeGZybV9kZXZfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTQ4LVx0aWYgKGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19FU1ApIHtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTQ5Olx0XHR4ZnJtX2Rldl9zdGF0ZV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1MC1cdFx0eGZybV9kZXZfcG9saWN5X2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU1Nj1zdGF0aWMgaW50IHhmcm1fZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTU3LXtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTU4Olx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NTktXHR4ZnJtX2Rldl9wb2xpY3lfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz04ODg9c3RhdGljIGlubGluZSBpbnRcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo4ODk6eGZybV9kZXZfc3RhdGVfZmx1c2hfc2VjY3R4X2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlkKVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTg5MC17XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTkxNz1zdGF0aWMgaW5saW5lIGludFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjkxODp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTE5LXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTYyPUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9mbHVzaCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTYzLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjk2NDppbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTY1LXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTcxLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTcyOlx0ZXJyID0geGZybV9kZXZfc3RhdGVfZmx1c2hfc2VjY3R4X2NoZWNrKG5ldCwgZGV2LCB0YXNrX3ZhbGlkKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NzMtXHRpZiAoZXJyKVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMDI2LX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMDI3OkVYUE9SVF9TWU1CT0woeGZybV9kZXZfc3RhdGVfZmx1c2gpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEyMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhGUk0gU3RhdGUgR2FyYmFnZSBDb2xsZWN0aW9uIGFuZCBEZXZpY2UgRmx1c2ggTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGFuZCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBSaWdodCBhd2F5LCBteSBicmFpbiB0ZWxscyBtZSBgeGZybV9zdGF0ZV9nY190YXNrYCBpcyB0cmlnZ2VyZWQgdGhyb3VnaCBhIHdvcmtxdWV1ZSwgc28gaXQmIzM5O3MgbGlrZWx5IHJ1bm5pbmcgYXN5bmNocm9ub3VzbHksIHdoaWNoIGlzIHR5cGljYWwgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbi4gVGhlbiwgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBnZXRzIGNhbGxlZCBmcm9tIGB4ZnJtX2Rldl9kb3duYCBhbmQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIHdpdGhpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgZm9yIGNsZWFuaW5nIHVwIHN0YXRlIHdoZW4gYSBkZXZpY2UgZ29lcyBkb3duIG9yIGlzIHVucmVnaXN0ZXJlZCwgbWFrZXMgcGVyZmVjdCBzZW5zZS4gV2hhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsIGlzIHRoZSBjYWxsIGZyb20gYGJvbmRfbWFzdGVyX25ldGRldl9ldmVudGAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIOKAkyB0aGF0JiMzOTtzIGJvbmQgc3BlY2lmaWMgYW5kIG1lYW5zIHRoYXQgYm9uZGluZyBjb25maWd1cmF0aW9ucyBtYXkgcmVxdWlyZSB0aGlzIHN0YXRlIGZsdXNoaW5nLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtzIG9idmlvdXNseSBgQ09ORklHX1hGUk1gLCBidXQgdGhlIG5vdGUgYWJvdXQgbmVlZGluZyBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgZm9yIHRoZSBib25kaW5nIGNhbGwgb2YgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBpbXBvcnRhbnQuIEhvd2V2ZXIsIGB4ZnJtX2Rldl9kb3duYCBhbmQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIGJlaW5nIGluIGBuZXQveGZybS94ZnJtX2RldmljZS5jYCBzdWdnZXN0cyB0aGF0IHRoZSBtb2R1bGUgaXRzZWxmIGlzIGJ1aWx0IHdoZW4gYENPTkZJR19YRlJNX09GRkxPQURgIGlzIGVuYWJsZWQuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIGBuZXQveGZybS9NYWtlZmlsZWAgdG8gdmVyaWZ5IHVuZGVyIHdoYXQgY29uZGl0aW9ucyBgeGZybV9kZXZpY2UuY2AgaXMgYWN0dWFsbHkgY29tcGlsZWQsIHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyB0aG9yb3VnaGx5IGJlZm9yZSBJIGNhbiBmdWxseSBhc3Nlc3MgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kZXZpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfWEZSTSkgOj0geGZybV9wb2xpY3kubyB4ZnJtX3N0YXRlLm8geGZybV9oYXNoLm8gXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE1LVx0XHQgICAgICB4ZnJtX2lucHV0Lm8geGZybV9vdXRwdXQubyBcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTY6XHRcdCAgICAgIHhmcm1fc3lzY3RsLm8geGZybV9yZXBsYXkubyB4ZnJtX2RldmljZS5vIFxcXG5uZXQveGZybS9NYWtlZmlsZS0xNy1cdFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODg5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBLZXJuZWwgTW9kdWxlIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIGB4ZnJtX2RldmljZS5vYCBpcyBkZWZpbml0ZWx5IGNvbXBpbGVkIHdoZW4gdGhlIGBDT05GSUdfWEZSTWAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IEkgbmVlZCB0byBkaXZlIGRlZXBlci4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaWYgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhhdCBvYmplY3QgZmlsZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGFzIHdlbGwuIFRoZSBxdWVzdGlvbiB0aGF0JiMzOTtzIGRyaXZpbmcgbWUgbm93IGlzOiBJcyB0aGUgY29kZSBpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2Agd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrPyBJZiBzbywgdGhhdCB3b3VsZCBpbmRpY2F0ZSBhIG11Y2ggbW9yZSBncmFudWxhciBjb250cm9sIG92ZXIgaXRzIGluY2x1c2lvbiwgcHJvYmFibHkgcmVsYXRlZCB0byBoYXJkd2FyZSBvZmZsb2FkaW5nIHN1cHBvcnQuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSBhbmQgY29uZmlybS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19YRlJNX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjEtXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjIyOiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTIzLXN0YXRpYyB2b2lkIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTUyNj1zdGF0aWMgaW50IHhmcm1fYXBpX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyNy17XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjUyODojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01MjktXHRpZiAoKGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19FU1BfVFhfQ1NVTSkgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM1NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgWEZSTSBEZXZpY2UgQ2xlYW51cCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHNvbWUgeGZybSBkZXZpY2UgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXZpY2UgdGVhcmRvd24gcHJvY2Vzcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAgd2l0aGluIGBuZXQveGZybS94ZnJtX2RldmljZS5jYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkZXZpY2VzIGFyZSBicm91Z2h0IGRvd24gYW5kIHVucmVnaXN0ZXJlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciByZXNvdXJjZSBsZWFrcy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhvc2UgdHdvIGZ1bmN0aW9ucyBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQgaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoZSB4ZnJtIGluZnJhc3RydWN0dXJlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiBhbnkgb3RoZXIgc3Vic3lzdGVtcyBkZXBlbmQgb24gdGhpcyBwcm9jZXNzLiBUaGlzIHdpbGwgaGVscCB3aXRoIGEgdGFzayBhdCBoYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2Rldl9kb3duJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2RldmljZS5jPTUyNj1zdGF0aWMgaW50IHhmcm1fYXBpX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NDUtXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU0NjpzdGF0aWMgaW50IHhmcm1fZGV2X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTQ3LXtcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU2ND1zdGF0aWMgaW50IHhmcm1fZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTc1LVx0Y2FzZSBORVRERVZfRE9XTjpcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTc2Olx0XHRyZXR1cm4geGZybV9kZXZfZG93bihkZXYpO1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFhGUk0gRGV2aWNlIERvd24gUHJvY2VkdXJlKioKCk9rYXksIHNvIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHhmcm1fZGV2X2Rvd25gIGlzIHRyaWdnZXJlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgZXhwZXJpZW5jZXMgYSBgTkVUREVWX0RPV05gIGV2ZW50LiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhpcywgaW4gdHVybiwgbGVhZHMgdG8gdGhlIGV4ZWN1dGlvbiBvZiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBOb3csIHRoZXJlIGFyZSBhIGZldyBzY2VuYXJpb3MgdGhhdCB0cmlnZ2VyIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGA6IGEgZGV2aWNlIGdvaW5nIGRvd24sIGJlaW5nIHVucmVnaXN0ZXJlZCwgb3IgaW4gY2FzZXMgd2hlcmUgdGhlIGBkZXYtJmd0O2ZlYXR1cmVzYCBpbmNsdWRlcyB0aGUgYE5FVElGX0ZfSFdfRVNQYCBmbGFnLiBXYWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgeGZybV9kZXZfdW5yZWdpc3RlcmAgKmFsd2F5cyogY2FsbHMgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCwgcmVnYXJkbGVzcyBvZiB0aGUgZmxhZy4gVGhpcyBzZWVtcyBsaWtlIGFuIGltcG9ydGFudCBkaXN0aW5jdGlvbiB0byBjbGFyaWZ5LgoKRnVydGhlcm1vcmUsIEkga25vdyBgeGZybV9zdGF0ZV9nY190YXNrYCBpcyBpbnZvbHZlZCwgYW5kIGl0IHJ1bnMgdGhyb3VnaCB0aGUgYHhmcm1fc3RhdGVfZ2Nfd29ya2Agd29ya3F1ZXVlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGRlZXBlciBpbnRvIHdoZXJlIGB4ZnJtX3N0YXRlX2djX3dvcmtgIGlzIGFjdHVhbGx5IGJlaW5nIHNjaGVkdWxlZDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgbGlmZWN5Y2xlIGFuZCB0aW1pbmcgb2YgdGhpcyBwcm9jZXNzIHRvIGVuc3VyZSBpdCYjMzk7cyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zdGF0ZV9nY193b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYz01MD1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnhmcm1fc3RhdGVfY2FjaGUgX19yb19hZnRlcl9pbml0O1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTUxLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjUyOnN0YXRpYyBERUNMQVJFX1dPUksoeGZybV9zdGF0ZV9nY193b3JrLCB4ZnJtX3N0YXRlX2djX3Rhc2spO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTUzLXN0YXRpYyBITElTVF9IRUFEKHhmcm1fc3RhdGVfZ2NfbGlzdCk7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTgwMz12b2lkIF9feGZybV9zdGF0ZV9kZXN0cm95KHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MDktXHRzcGluX3VubG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2djX2xvY2spO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjgxMDpcdHNjaGVkdWxlX3dvcmsoXHUwMDI2eGZybV9zdGF0ZV9nY193b3JrKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MTEtfVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0zMTQ4PXZvaWQgeGZybV9mbHVzaF9nYyh2b2lkKVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMxNDkte1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjMxNTA6XHRmbHVzaF93b3JrKFx1MDAyNnhmcm1fc3RhdGVfZ2Nfd29yayk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMzE1MS19XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTMzOTA9dm9pZCB4ZnJtX3N0YXRlX2Zpbmkoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0zMzk2LVx0eGZybV9zdGF0ZV9mbHVzaChuZXQsIDAsIGZhbHNlKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzozMzk3Olx0Zmx1c2hfd29yayhcdTAwMjZ4ZnJtX3N0YXRlX2djX3dvcmspO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMzOTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MjMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmFjZSBDb25kaXRpb24gaW4gdGhlIFhGUk0gU3Vic3lzdGVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBhIHJhY2UgY29uZGl0aW9uLiBJdCBzZWVtcyB0aGUgYHhmcm1fc3RhdGVfZ2Nfd29ya2AgaXMgYmVpbmcgc2NoZWR1bGVkIHdpdGhpbiBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgLiBUaGUgY29yZSBvZiB0aGlzIGlzc3VlIGFwcGVhcnMgdG8gYmUgYSBjb25mbGljdCBiZXR3ZWVuIGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGFuZCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgdHdvIGZ1bmN0aW9ucywgYW5kIGFsc28gcmVtZW1iZXIgdGhhdCBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgIGlzIHRoZSBvbmUgdGhhdCBzY2hlZHVsZXMgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiB0YXNrLiBNeSBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgWEZSTWAgYXMgZXhwZWN0ZWQuCgpgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIHRyaWdnZXJlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkIG9yIGJyb3VnaHQgZG93bi4gYHhmcm1fc3RhdGVfZ2NfdGFza2AsIG9uIHRoZSBvdGhlciBoYW5kLCBvcGVyYXRlcyB3aXRoaW4gYSB3b3JrcXVldWUuIEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgLgoKTGV0IG1lIHRoaW5rLi4uIGNhbiBJIHJlbGlhYmx5IHRyaWdnZXIgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYD8gWWVzLCBjcmVhdGluZyBhbiBYRlJNIHN0YXRlIGFuZCB0aGVuIHRha2luZyBhIG5ldHdvcmsgZGV2aWNlIGRvd24sIG9yIHVucmVnaXN0ZXJpbmcgaXQsIHNob3VsZCBkbyB0aGUgdHJpY2suIFdhaXQsIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgaXMgY2FsbGVkIHVuY29uZGl0aW9uYWxseSB3aXRoaW4gYHhmcm1fZGV2X3VucmVnaXN0ZXJgLiBJIHNob3VsZCB2ZXJpZnkgdGhhdC4gTGV0IG1lIGNoZWNrIHRoZSBgeGZybV9kZXZfdW5yZWdpc3RlcmAgZnVuY3Rpb24gaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fZGV2X3VucmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTQ2PXN0YXRpYyBpbnQgeGZybV9kZXZfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTU1LVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NTY6c3RhdGljIGludCB4ZnJtX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1Ny17XG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01NjQ9c3RhdGljIGludCB4ZnJtX2Rldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU3OC1cdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU3OTpcdFx0cmV0dXJuIHhmcm1fZGV2X3VucmVnaXN0ZXIoZGV2KTtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTgwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGxvZ2ljYWxseToKCioqUmVhY2hpbmcgYW5kIFRlc3RpbmcgWEZSTSBTdGF0ZSBEZXN0cnVjdGlvbioqCgpSaWdodCwgc28sIGFzIEkgdW5kZXJzdGFuZCBpdCwgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIGlzIGRlZmluaXRlbHkgdGhlIHRyaWdnZXIgaGVyZS4gSXQmIzM5O3MgY2FsbGVkIHNwZWNpZmljYWxseSBvbiB0aGUgYE5FVERFVl9VTlJFR0lTVEVSYCBldmVudC4gVGhhdCBtZWFucyBhbnkgdGltZSBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZCwgd2UmIzM5O3JlIGd1YXJhbnRlZWQgdG8gc2VlIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgY2FsbGVkLiBBbmQgZ2l2ZW4gdGhhdCwgd2Uga25vdyB0aGF0IGBfX3hmcm1fc3RhdGVfZGVzdHJveWAgZ2V0cyBpbnZva2VkIHdoZW4gYW4gWEZSTSBzdGF0ZSBpdHNlbGYgaXMgZGVzdHJveWVkLiBUaGF0IGFsbCBzb3VuZHMgcGVyZmVjdGx5IHJlYWNoYWJsZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp0ZXN0YWJsZSouIEkgY2FuIGNsZWFybHkgc2VlIGEgcGF0aCB0byByZXByb2R1Y2luZyB0aGlzIGJlaGF2aW9yLiBJdCBzZWVtcyBxdWl0ZSBzdHJhaWdodGZvcndhcmQuCgpOb3csIEkgbmVlZCB0byBjb25zaWRlciB0aGUgZGVwZW5kZW5jaWVzLiBXZSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIFhGUk0gc3RhdGUgYXMgdGhlIGtleSBhY3Rpb24uIEkmIzM5O20gd29uZGVyaW5nIGlmIFhGUk0gaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gbmVjZXNzYXJ5IGZvciB0aGlzIHRlc3QsIG9yIGlmIHRoZXJlIGFyZSBvdGhlcnMgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgb3IgY29uZmlndXJlIGluIG9yZGVyIHRvIGZ1bGx5IHJlcGxpY2F0ZSB0aGUgc2NlbmFyaW8uIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSB0aGF0IGZ1cnRoZXIgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWctNC0jXG5uZXQveGZybS9LY29uZmlnOjU6Y29uZmlnIFhGUk1cbm5ldC94ZnJtL0tjb25maWctNi1cdGJvb2xcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwLVxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXG5uZXQveGZybS9LY29uZmlnLTEyLVx0Ym9vbFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cbm5ldC94ZnJtL0tjb25maWc6MTQ6Y29uZmlnIFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy0xNS1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcbm5ldC94ZnJtL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0zMS1cbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbm5ldC94ZnJtL0tjb25maWctMzMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wYXRpYmxlIEFCSSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy00Mi1cbm5ldC94ZnJtL0tjb25maWc6NDM6Y29uZmlnIFhGUk1fSU5URVJGQUNFXG5uZXQveGZybS9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTUwLVxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy03MS1cbm5ldC94ZnJtL0tjb25maWc6NzI6Y29uZmlnIFhGUk1fU1RBVElTVElDU1xubmV0L3hmcm0vS2NvbmZpZy03My1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1wmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctODMtIyBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxubmV0L3hmcm0vS2NvbmZpZy04NS1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZy05Mi0jIGFsZ29yaXRobXMgdGhhdCBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxubmV0L3hmcm0vS2NvbmZpZzo5Mzpjb25maWcgWEZSTV9FU1Bcbm5ldC94ZnJtL0tjb25maWctOTQtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTA1LVxubmV0L3hmcm0vS2NvbmZpZzoxMDY6Y29uZmlnIFhGUk1fSVBDT01QXG5uZXQveGZybS9LY29uZmlnLTEwNy1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTQwLVxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcbm5ldC94ZnJtL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTE1Ni1cbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXG5uZXQveGZybS9LY29uZmlnLTE1OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcxMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqWEZSTSBVc2VyIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBYRlJNX1VTRVJgIOKAkyB0aGF0JiMzOTtzIHRoZSB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0uIENsZWFybHksIHRoYXQmIzM5O3Mgd2hhdCB3ZSB3YW50IGVuYWJsZWQgdG8gZ2l2ZSB0aGUgdXNlciBjb250cm9sLiBBbmQgaXQgbG9va3MgbGlrZSB0aGUgZGVzaWduIHRpZXMgdGhpcyB0byBgWEZSTWAgaXRzZWxmOyB0aGF0JiMzOTtzIHRoZSBjb3JlIGJvb2wsIHRoZSBhY3R1YWwgZmVhdHVyZSBnYXRlIHdoaWNoIGdldHMgc2VsZWN0ZWQgYnkgYWxsIHRoZSB2YXJpb3VzIElQc2VjIHByb3RvY29scywgbGlrZSBgSU5FVF9BSGAgYW5kIGBJTkVUX0VTUGAsIHdoZW4gdGhvc2Ugb3B0aW9ucyBhcmUgY29uZmlndXJlZC4gIFNvLCBubyBzdXJwcmlzZXMgdGhlcmUsIHRoYXQmIzM5O3MgZXhwZWN0ZWQuCgpHaXZlbiB0aGF0JiMzOTtzIHRoZSBjZW50cmFsIGludGVyZmFjZSBmb3IgY29udHJvbCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHdlIHNob3VsZCBlbmFibGUgYFhGUk1fVVNFUmAuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMsIGhvd2V2ZXIuIEkgd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnkgc3VidGxlIGNvbmZsaWN0cyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGJ5IGZsaXBwaW5nIHRoaXMgc3dpdGNoLiBOZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgc3VwcG9ydHMgaXQsIGFuZCB0aGF0IGFueSByZXF1aXJlZCBzdXBwb3J0aW5nIG1vZHVsZXMgYXJlIGFsc28gZW5hYmxlZCBvciBjb3JyZWN0bHkgY29uZmlndXJlZC4gTm90aGluZyB3b3JzZSB0aGFuIGEgcGFydGlhbGx5IGZ1bmN0aW9uYWwgZmVhdHVyZSBiZWNhdXNlIG9mIGEgbWlzc2VkIGRlcGVuZGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX1VTRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTc4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBNb2R1bGUgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGVzZSBrZXJuZWwgbW9kdWxlcy4gSXQgbG9va3MgbGlrZSBgWEZSTV9VU0VSYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBJTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O2xsIG5lZWQgdG8gZW5zdXJlIGJvdGggYElORVRgIGFuZCBgWEZSTV9VU0VSYCBhcmUgZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSB1bmxvYWRzLgoKSGFuZyBvbiwgSSByZW1lbWJlciBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGRlZmluZWQgaW4gYHhmcm1fc3RhdGUuY2AuIEFuZCAqdGhhdCogZmlsZSBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfWEZSTWAgaXMgZW5hYmxlZC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0IG1lIGNoZWNrLi4uIGB4ZnJtX2RldmljZS5jYCBpcyBhbHNvIGNvbXBpbGVkIHdoZW4gYENPTkZJR19YRlJNYCBpcyBlbmFibGVkLiBHb29kLgoKQWhhISBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGNhbGxlZCBieSBgeGZybV9kZXZfdW5yZWdpc3RlcmAgd2hpY2ggaXMgYWN0dWFsbHkgZGVmaW5lZCBpbiBgeGZybV9kZXZpY2UuY2AuIEJ1dCBpcyBgeGZybV9kZXZpY2UuY2AgKmFsd2F5cyogY29tcGlsZWQgd2hlbiBgQ09ORklHX1hGUk1gIGlzIG9uPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnLiBZZXAsIHRoZSBgb2JqLSQoQ09ORklHX1hGUk0pIDo9IC4uLiB4ZnJtX2RldmljZS5vIC4uLmAgbGluZSBjb25maXJtcyB0aGF0LgoKTm93LCBzaG91bGQgSSBjaGVjayBpZiBgWEZSTV9PRkZMT0FEYCBpcyBuZWVkZWQgdG8gY29ycmVjdGx5IHVubG9hZD8gSSBzZWUgYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAgYXJlIGJvdGggaW4gYHhmcm1fZGV2aWNlLmNgLiBCdXQgYXJlIHRoZXkgd3JhcHBlZCBpbnNpZGUgYW4gYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYCBibG9jaz8gTGV0IG1lIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2Rldl91bnJlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2RldmljZS5jPTU0Nj1zdGF0aWMgaW50IHhmcm1fZGV2X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1NS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTU2OnN0YXRpYyBpbnQgeGZybV9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NTcte1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTY0PXN0YXRpYyBpbnQgeGZybV9kZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NzgtXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1Nzk6XHRcdHJldHVybiB4ZnJtX2Rldl91bnJlZ2lzdGVyKGRldik7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU4MC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSBwcm9jZXNzaW5nIHRoaXMgdGFzazoKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gRGV2aWNlIENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgIOKAkyBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDU1Ni4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVuaW5nIHRoZXJlIHJlbGF0ZWQgdG8gWEZSTSBkZXZpY2VzLiBHaXZlbiB0aGUgY29udGV4dCwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGRlYWwgd2l0aCBlaXRoZXIgZGV2aWNlIGluaXRpYWxpemF0aW9uLCBkZS1yZWdpc3RyYXRpb24sIG9yIHBvc3NpYmx5IHNvbWUga2V5IGludGVyYWN0aW9uIHdpdGhpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhcyB3ZWxsIHRvIGdldCBhIGZ1bGwgdW5kZXJzdGFuZGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQwOlx0XHRcdHJldHVybiBOT1RJRllfQkFEO1xuIDU0MTpcdCNlbmRpZlxuIDU0MjpcdFxuIDU0MzpcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuIDU0NDpcdH1cbiA1NDU6XHRcbiA1NDY6XHRzdGF0aWMgaW50IHhmcm1fZGV2X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA1NDc6XHR7XG4gNTQ4Olx0XHRpZiAoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0VTUCkge1xuIDU0OTpcdFx0XHR4ZnJtX2Rldl9zdGF0ZV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XG4gNTUwOlx0XHRcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XG4gNTUxOlx0XHR9XG4gNTUyOlx0XG4gNTUzOlx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gNTU0Olx0fVxuIDU1NTpcdFxuIDU1NjpcdHN0YXRpYyBpbnQgeGZybV9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDU1NzpcdHtcbiA1NTg6XHRcdHhmcm1fZGV2X3N0YXRlX2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcbiA1NTk6XHRcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XG4gNTYwOlx0XG4gNTYxOlx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gNTYyOlx0fVxuIDU2MzpcdFxuIDU2NDpcdHN0YXRpYyBpbnQgeGZybV9kZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4gNTY1Olx0e1xuIDU2NjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIDU2NzpcdFxuIDU2ODpcdFx0c3dpdGNoIChldmVudCkge1xuIDU2OTpcdFx0Y2FzZSBORVRERVZfUkVHSVNURVI6XG4gNTcwOlx0XHRcdHJldHVybiB4ZnJtX2FwaV9jaGVjayhkZXYpO1xuIDU3MTpcdFxuIDU3MjpcdFx0Y2FzZSBORVRERVZfRkVBVF9DSEFOR0U6XG4gNTczOlx0XHRcdHJldHVybiB4ZnJtX2FwaV9jaGVjayhkZXYpO1xuIDU3NDpcdFxuIDU3NTpcdFx0Y2FzZSBORVRERVZfRE9XTjpcbiA1NzY6XHRcdFx0cmV0dXJuIHhmcm1fZGV2X2Rvd24oZGV2KTtcbiA1Nzc6XHRcbiA1Nzg6XHRcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XG4gNTc5Olx0XHRcdHJldHVybiB4ZnJtX2Rldl91bnJlZ2lzdGVyKGRldik7XG4gNTgwOlx0XHR9XG4gNTgxOlx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gNTgyOlx0fVxuIDU4MzpcdFxuIDU4NDpcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgeGZybV9kZXZfbm90aWZpZXIgPSB7XG4gNTg1Olx0XHQubm90aWZpZXJfY2FsbFx0PSB4ZnJtX2Rldl9ldmVudCxcbiA1ODY6XHR9O1xuIDU4NzpcdFxuIDU4ODpcdHZvaWQgX19pbml0IHhmcm1fZGV2X2luaXQodm9pZClcbiA1ODk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTE2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBYRlJNIE9mZmxvYWQgSW5pdGlhbGl6YXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoZSBpc3N1ZSBpc24mIzM5O3Qgd2l0aGluIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgZmlyc3QgY2hlY2suIE9rYXksIHRoYXQmIzM5O3Mgbm90IGl0LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIGRpdmluZyBkZWVwZXIsIGlzIHRvIGNvbmZpcm0gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgeGZybV9kZXZgIHN0cnVjdHVyZS4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaG93IHRoaXMgaW5pdGlhbGl6YXRpb24gaXMgYWN0dWFsbHkgdHJpZ2dlcmVkLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogd2hlcmUgaXMgYHhmcm1fZGV2X2luaXRgIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggdG8gdW5kZXJzdGFuZCB0aGUgcG9pbnQgb2YgZW50cnkgYW5kIHRoZSByZWxldmFudCBjb250ZXh0LiBHb3R0YSBmaWd1cmUgb3V0IHRoZSBkcml2ZXIgb3IgbW9kdWxlIHRoYXQmIzM5O3MgcmVzcG9uc2libGUuIExldCYjMzk7cyBzZWUgaWYgdGhlIGNvZGUgdGVsbHMgbWUgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kZXZfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZnJtLmg9MjExMD1zdGF0aWMgaW5saW5lIHZvaWQgeGZybV9zdGF0ZXNfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICoqc3RhdGVzLCBpbnQgbilcbi0tXG5pbmNsdWRlL25ldC94ZnJtLmgtMjExNy1cbmluY2x1ZGUvbmV0L3hmcm0uaDoyMTE4OnZvaWQgX19pbml0IHhmcm1fZGV2X2luaXQodm9pZCk7XG5pbmNsdWRlL25ldC94ZnJtLmgtMjExOS1cbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU4ND1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHhmcm1fZGV2X25vdGlmaWVyID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTg3LVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1ODg6dm9pZCBfX2luaXQgeGZybV9kZXZfaW5pdCh2b2lkKVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01ODkte1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDQwND12b2lkIF9faW5pdCB4ZnJtX2luaXQodm9pZClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MTAtXHRyZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNnhmcm1fbmV0X29wcyk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ0MTE6XHR4ZnJtX2Rldl9pbml0KCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MTItXHR4ZnJtX2lucHV0X2luaXQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYRlJNIFN0YXRlIENsZWFudXAgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgWEZSTSBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgdGhleSYjMzk7dmUgYWRkcmVzc2VkIHRoaXMgcmFjZSBjb25kaXRpb24uIEkgc2VlIGB4ZnJtX2Rldl9pbml0YCBpcyBjYWxsZWQgZnJvbSBgeGZybV9pbml0YCwgd2hpY2ggc2V0cyB1cCBgeGZybV9kZXZfbm90aWZpZXJgIGlmIHRoZSBgQ09ORklHX1hGUk1gIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgcmVnaXN0ZXJpbmcgYSBub3RpZmllciwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYCBpcyBnb2luZyB0byBiZSBjYWxsZWQgb24gZXZlcnkgYE5FVERFVl9VTlJFR0lTVEVSYCBldmVudC4KClRoZXJlZm9yZSwgZm9yIGV2ZXJ5IGRldmljZSB1bnJlZ2lzdHJhdGlvbiwgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBiZWluZyBjYWxsZWQgaWYgYENPTkZJR19YRlJNYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LiBBbHNvLCBJJiMzOTttIG5vdGluZyB0aGF0IGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGdldHMgY2FsbGVkIHZpYSBhIHdvcmtxdWV1ZSB3aGVuIGFuIFhGUk0gc3RhdGUgaXMgZGVzdHJveWVkLiBUaGlzIHN1Z2dlc3RzIGEgZGVzaWduIHRvIGhhbmRsZSB0aGUgY2xlYW51cCBhc3luY2hyb25vdXNseSwgd2hpY2ggaXMgbGlrZWx5IHRoZSBmaXggZm9yIHRoZSByYWNlLgoKR2l2ZW4gdGhpcywgSSBzaG91bGQgZm9jdXMgb24gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24uIEFoYSwgYHhmcm1fc3RhdGVfZ2NfdGFza2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGFsc28gY29uc2lkZXIgd2hhdCBjYWxscyBpdC4gTGV0IG1lIGxvb2sgYXQgYF9feGZybV9zdGF0ZV9kZXN0cm95YCBzaW5jZSB0aGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHNjaGVkdWxlcyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHRhc2suIEkgYWxzbyB3YW50IHRvIGZvbGxvdyB0aGUgY2FsbCBjaGFpbiBpbnRvIGB4ZnJtX3N0YXRlX2ZsdXNoYCBhbmQgYHhmcm1fZmx1c2hfZ2NgLiBJJiMzOTtsbCBkb3VibGUgY2hlY2sgYHhmcm1fc3RhdGVfZ2NfdGFza2AgaXMgaW5kZWVkIHN0YXRpYy4gWWVwLCBpdCBpcy4gU28sIGxldCYjMzk7cyBsb29rIGNsb3NlbHkgYXQgYF9feGZybV9zdGF0ZV9kZXN0cm95YCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSBzdGF0ZXMgYXJlIGRlc3Ryb3llZCBhbmQgZmx1c2hlZC4KTGV0IG1lIGRvdWJsZSBjaGVjayBob3cgYF9feGZybV9zdGF0ZV9kZXN0cm95YCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X194ZnJtX3N0YXRlX2Rlc3Ryb3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jPTc4Mz12b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTgwMi1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo4MDM6dm9pZCBfX3hmcm1fc3RhdGVfZGVzdHJveShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MDQte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MTEtfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjgxMjpFWFBPUlRfU1lNQk9MKF9feGZybV9zdGF0ZV9kZXN0cm95KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDIxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGEgcGFydGljdWxhciBzZXQgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIFhGUk0gc3Vic3lzdGVtLiBJIHNlZSB0aGF0IGBfX3hmcm1fc3RhdGVfZGVzdHJveWAgYW5kIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgYXJlIGluZGVlZCBleHBvcnRlZCBzeW1ib2xzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7SXMgYFhGUk1fVVNFUmAgZW5vdWdoIHRvIHJlYWNoIGFsbCB0aGUgbmVjZXNzYXJ5IGNvZGUgcGF0aHM/JiMzNDsgUXVpY2tseSBjaGVja2luZywgSSBzZWUgdGhhdCBgWEZSTV9VU0VSYCBkZXBlbmRzIG9uIGBJTkVUYC4gIEFoLCByaWdodCwgbmV0d29ya2luZyBiYXNpY3MuIFRoYXQgbWVhbnMgSSB0aGVvcmV0aWNhbGx5IG5lZWQgYm90aCBgSU5FVGAgYW5kIGBYRlJNX1VTRVJgLiBCdXQgaG9sZCBvbi4uLiBgSU5FVGAgaXMgZXNzZW50aWFsbHkgYSBnaXZlbiBpbiBhIHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQsIHRob3VnaCBJIGNvdWxkIGxpc3QgaXQgaWYgcmVxdWlyZWQuIEFjdHVhbGx5LCBvbiBzZWNvbmQgdGhvdWdodCwgYFhGUk1fVVNFUmAgYWxvbmUgc2hvdWxkIHN1ZmZpY2UgaW4gbW9zdCBjb21tb24gY2FzZXMuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkbyBJIG5lZWQgYFhGUk1fT0ZGTE9BRGA/IFRoZSBmdW5jdGlvbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIHVuY29uZGl0aW9uYWxseSBjYWxsZWQgd2l0aGluIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYC4gVGhhdCAqc3VnZ2VzdHMqIGBYRlJNX09GRkxPQURgIGlzbiYjMzk7dCBzdHJpY3RseSBuZWNlc3NhcnkgdG8gaGl0IHRoYXQgcGFydGljdWxhciBjb2RlIHBhdGguIEhvd2V2ZXIsIGBYRlJNX09GRkxPQURgIGNvdWxkIGNlcnRhaW5seSBlbmFibGUgbW9yZSwgcG90ZW50aWFsbHkgcmVsZXZhbnQsIG9mZmxvYWQtcmVsYXRlZCBwYXRocy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZGlnIGRlZXBlciBhbmQgaW52ZXN0aWdhdGUgdGhlIGV4YWN0IGRlcGVuZGVuY2llcyBvZiBgWEZSTV9PRkZMT0FEYCBpdHNlbGYsIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyByZXF1aXJlcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTAtXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcbm5ldC94ZnJtL0tjb25maWctMTItXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDQ4CgkJCQkJCQlvdXRwdXQ6IDEzOQoJCQkJCQkJdGhvdWdodHM6IDYwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhGUk0gQ29uZmlndXJhdGlvbiBhbmQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgWEZSTSBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O3ZlIGdvdCB0byB1bmRlcnN0YW5kIGlzIGhvdyBpdCYjMzk7cyBjb25maWd1cmVkLiBgWEZSTV9PRkZMT0FEYCBpcyB0aGUgdHJpY2t5IG9uZSDigJMgaXQmIzM5O3MgYSBoaWRkZW4gYm9vbCwgc28gSSBjYW4mIzM5O3QgZGlyZWN0bHkgZW5hYmxlIGl0LiBUaGUgZHJpdmVycyB0aGF0IHN1cHBvcnQgaXQgc2VsZWN0IGl0LCBzbyBJJiMzOTttIGVzc2VudGlhbGx5IGF0IHRoZWlyIG1lcmN5IGZvciB0aGF0IHBhcnRpY3VsYXIgZmVhdHVyZS4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IG90aGVyIGNvbmZpZ3MgYXJlIHJlbGV2YW50IGhlcmUuIGBYRlJNX0FMR09gIGlzIHNlbGVjdGVkIGJ5IGBYRlJNX1VTRVJgLiBBaGEsIGBYRlJNX1VTRVJgIGlzIHRoZSBrZXkhIFRoYXQmIzM5O3MgdGhlIG1haW4gY29uZmlnIHRvIGVuYWJsZSB0aGUgWEZSTSB1c2VyIGludGVyZmFjZS4gKlRoYXQqIGlzIHdoYXQgYWxsb3dzIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciB0byBjb21lIGluIGFuZCBjcmVhdGUgWEZSTSBzdGF0ZXMgYW5kIHRyaWdnZXIgdGhlIHJhY2UgY29uZGl0aW9uLiBTbywgaXQmIzM5O3MgYFhGUk1fVVNFUmAgdGhhdCBJIG5lZWQgdG8gZm9jdXMgb24uCgpUaGUgY3JpdGljYWwgc3ltYm9scyBJJiMzOTttIHdhdGNoaW5nIGFyZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgLgoKTGV0JiMzOTtzIGdvIGJhY2sgYW5kIGNhcmVmdWxseSByZXZpZXcgdGhpcyBwYXRjaCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3luY2hyb25pemF0aW9uLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgeGZybV9zdGF0ZV9nY19tdXRleGAgdG8gc3luY2hyb25pemUgYHhmcm1fc3RhdGVfZ2NfdGFza2AgYW5kIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBtZWFudCB0byBhZGRyZXNzIGEgY29uY3VycmVuY3kgaXNzdWUsIHByb2JhYmx5IGludm9sdmluZyBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgWEZSTSBzdGF0ZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gaXMgc3BlY2lmaWNhbGx5IGludGVuZGVkIHRvIHByb3RlY3QgdGhlIGBnY19saXN0YCBhbmQgYHhmcm1fc3RhdGVfZGV2X2djX2xpc3RgIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBjaGFuZ2Ugc2hvdWxkIHJlc29sdmUgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uCgpJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGtlZXAgdGhpcyBpbiBtaW5kLiBJJiMzOTtsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byByZXBvcnQgbXkgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2Rldl9zdGF0ZV9mbHVzaCYjMzQ7LAogICAgJiMzNDtfX3hmcm1fc3RhdGVfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGB4ZnJtX3N0YXRlX2djX211dGV4YCB0byBzeW5jaHJvbml6ZSBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbiAoYHhmcm1fc3RhdGVfZ2NfdGFza2ApIGFuZCBkZXZpY2Ugc3RhdGUgZmx1c2hpbmcgKGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIGNvcmUgWEZSTSBzdWJzeXN0ZW0uIEl0IGlzIHJlYWNoYWJsZSBieSBjcmVhdGluZyBYRlJNIHN0YXRlcyBhbmQgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZsdXNoJiMzNDssCiAgICAmIzM0O19feGZybV9zdGF0ZV9kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYHhmcm1fc3RhdGVfZ2NfbXV0ZXhgIHRvIHN5bmNocm9uaXplIFhGUk0gc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIChgeGZybV9zdGF0ZV9nY190YXNrYCkgYW5kIGRldmljZSBzdGF0ZSBmbHVzaGluZyAoYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgY29yZSBYRlJNIHN1YnN5c3RlbS4gSXQgaXMgcmVhY2hhYmxlIGJ5IGNyZWF0aW5nIFhGUk0gc3RhdGVzIGFuZCB1bnJlZ2lzdGVyaW5nIG5ldHdvcmsgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUwOjI2LjEwNjE2NzI2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDIwODk5OTM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICAgIFwiX194ZnJtX3N0YXRlX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGB4ZnJtX3N0YXRlX2djX211dGV4YCB0byBzeW5jaHJvbml6ZSBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbiAoYHhmcm1fc3RhdGVfZ2NfdGFza2ApIGFuZCBkZXZpY2Ugc3RhdGUgZmx1c2hpbmcgKGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIGNvcmUgWEZSTSBzdWJzeXN0ZW0uIEl0IGlzIHJlYWNoYWJsZSBieSBjcmVhdGluZyBYRlJNIHN0YXRlcyBhbmQgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUwOjI2LjEwNjE3MzQ4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5Mjg0NDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTM4ZDUyNjNiZmYwOThlZGUyNDMyZTA2YzE3YmM4NGQzZjJmOTMyMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAyMzo1MDoyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcXG5pbmRleCAzNmE0ZjY3OTNlZGVmLi5kZTA5N2JiYTgwM2I3IDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xcbkBAIC0yMjYsNiArMjI2LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyBfX3JjdSAqeGZybV9zdGF0ZV9hZmluZm9bTlBST1RPXTtcXG4gXFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9nY19sb2NrKTtcXG4gc3RhdGljIERFRklORV9TUElOTE9DSyh4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4rc3RhdGljIERFRklORV9NVVRFWCh4ZnJtX3N0YXRlX2djX211dGV4KTtcXG4gXFxuIGludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcXG4gXFxuQEAgLTYzMiw4ICs2MzMsMTAgQEAgc3RhdGljIHZvaWQgeGZybV9zdGF0ZV9nY190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XFxuIFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCBcXHUwMDI2Z2NfbGlzdCwgZ2NsaXN0KVxcbiBcXHRcXHR4ZnJtX3N0YXRlX2djX2Rlc3Ryb3koeCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZnJtX3RpbWVyX2hhbmRsZXIoc3RydWN0IGhydGltZXIgKm1lKVxcbkBAIC0xMDAwLDYgKzEwMDMsNyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaVxcbiBvdXQ6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbiByZXN0YXJ0X2djOlxcbiBcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xpc3QsIGRldl9nY2xpc3QpIHtcXG5AQCAtMTAxNCw2ICsxMDE4LDcgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlcXG4gXFxuIFxcdH1cXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xcbiBcXG4gXFx0eGZybV9mbHVzaF9nYygpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTA6MjYuNTg2MzE1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0MzcyODgzOTE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICAgIFwiX194ZnJtX3N0YXRlX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGB4ZnJtX3N0YXRlX2djX211dGV4YCB0byBzeW5jaHJvbml6ZSBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbiAoYHhmcm1fc3RhdGVfZ2NfdGFza2ApIGFuZCBkZXZpY2Ugc3RhdGUgZmx1c2hpbmcgKGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIGNvcmUgWEZSTSBzdWJzeXN0ZW0uIEl0IGlzIHJlYWNoYWJsZSBieSBjcmVhdGluZyBYRlJNIHN0YXRlcyBhbmQgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEzOGQ1MjYzYmZmMDk4ZWRlMjQzMmUwNmMxN2JjODRkM2YyZjkzMjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAyMzo1MDoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuaW5kZXggMzZhNGY2NzkzZWRlZi4uZGUwOTdiYmE4MDNiNyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5AQCAtMjI2LDYgKzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gX19yY3UgKnhmcm1fc3RhdGVfYWZpbmZvW05QUk9UT107XG4gXG4gc3RhdGljIERFRklORV9TUElOTE9DSyh4ZnJtX3N0YXRlX2djX2xvY2spO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4rc3RhdGljIERFRklORV9NVVRFWCh4ZnJtX3N0YXRlX2djX211dGV4KTtcbiBcbiBpbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7XG4gXG5AQCAtNjMyLDggKzYzMywxMCBAQCBzdGF0aWMgdm9pZCB4ZnJtX3N0YXRlX2djX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4LCB0bXAsIFx1MDAyNmdjX2xpc3QsIGdjbGlzdClcbiBcdFx0eGZybV9zdGF0ZV9nY19kZXN0cm95KHgpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIH1cbiBcbiBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgeGZybV90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICptZSlcbkBAIC0xMDAwLDYgKzEwMDMsNyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaVxuIG91dDpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIHJlc3RhcnRfZ2M6XG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCwgZGV2X2djbGlzdCkge1xuQEAgLTEwMTQsNiArMTAxOCw3IEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpXG4gXG4gXHR9XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZ4ZnJtX3N0YXRlX2djX211dGV4KTtcbiBcbiBcdHhmcm1fZmx1c2hfZ2MoKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUwOjI2LjU4NjMxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NDUzODM3ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBmb3IgWEZSTSBTdGF0ZSBHYXJiYWdlIENvbGxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBzZWVtcyBsaWtlIGl04oCZcyB0d2Vha2luZyBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgbmV3IG11dGV4LCBgeGZybV9zdGF0ZV9nY19tdXRleGAuIFRoYXQganVtcHMgb3V0IOKAkyBhIG11dGV4IHVzdWFsbHkgbWVhbnMgdGhleSdyZSBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gb3Igc29tZSBzeW5jaHJvbml6YXRpb24gaXNzdWUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIFhGUk0gc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uLiBNYWtlcyBzZW5zZTsgZnVuY3Rpb25hbCBjb2RlIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBsaWtlIHRoaXMgb2Z0ZW4gbmVlZHMgY2FyZWZ1bCBzeW5jaHJvbml6YXRpb24uXG5cbk15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgZGV0YWlsczogd2hhdCBhcmUgdGhlIG11dGV4J3MgdXNhZ2VzPyBMZXQncyBjaGVjayBgeGZybV9zdGF0ZV9nY190YXNrYCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4gQWgsIGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGlzIGEgd29ya3F1ZXVlIHRhc2suIFN0YW5kYXJkIHN0dWZmLiBBbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4uLiB0aGF0J3MgY2FsbGVkIGR1cmluZyBkZXZpY2UgZmx1c2hlcy4gVGhhdCdzIGludGVyZXN0aW5nLCBkZXZpY2UgZmx1c2hlcyBjYW4gYmUgdHJpY2t5LlxuXG5XYWl0IGEgc2Vjb25k4oCmIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgKmFjcXVpcmVzKiBgeGZybV9zdGF0ZV9nY19tdXRleGAsIGFuZCAqdGhlbiogYHhmcm1fc3RhdGVfZGV2X2djX2xvY2tgLiBBbmQgYHhmcm1fc3RhdGVfZ2NfdGFza2AgYWxzbyB1c2VzIGB4ZnJtX3N0YXRlX2djX211dGV4YC4gT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIGxvY2sgaGllcmFyY2h5IGhlcmUuIFRoZXkncmUgdHJ5aW5nIHRvIGNhcmVmdWxseSBzZXF1ZW5jZSB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGFuZCBkZXZpY2UgZmx1c2ggb3BlcmF0aW9ucyB0byBhdm9pZCBjb250ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGhpZXJhcmNoeSBmdWxseS4gVGhpcyBtaWdodCBiZSBhIHN1YnRsZSBidXQgY3JpdGljYWwgZml4LlxuXG5MZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFhGUk0gY29uZmlndXJhdGlvbnMuIGBDT05GSUdfWEZSTWAgaXMgdGhlIGNvcmUsIHJpZ2h0PyBUaW1lIHRvIHVzZSBgZ2l0IGdyZXBgIGFuZCBsb29rIGZvciBhbGwgdGhlIGNhbGxzIHRvIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgYW5kIHNlZSB3aGF0IGNvbmZpZyBkZXBlbmRlbmNpZXMgaXQgaGFzLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgY2xhcmlmeSB0aGUgbmVjZXNzaXR5IG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUxOjMyLjA0MDE1NzM5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTk0MzIzMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fZGV2X3N0YXRlX2ZsdXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTM5MTk9c3RhdGljIGludCBib25kX21hc3Rlcl9uZXRkZXZfZXZlbnQodW5zaWduZWQgbG9uZyBldmVudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzkzMS0jaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzkzMjpcXHRcXHR4ZnJtX2Rldl9zdGF0ZV9mbHVzaChkZXZfbmV0KGJvbmRfZGV2KSwgYm9uZF9kZXYsIHRydWUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzkzMy0jZW5kaWYgLyogQ09ORklHX1hGUk1fT0ZGTE9BRCAqL1xcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTE3ODc9aW50IHhmcm1fc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCB1OCBwcm90bywgYm9vbCB0YXNrX3ZhbGlkKTtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MTc4ODppbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNzg5LWludCB4ZnJtX2Rldl9wb2xpY3lfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01NDY9c3RhdGljIGludCB4ZnJtX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0OC1cXHRpZiAoZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfRVNQKSB7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NDk6XFx0XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTUwLVxcdFxcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU1Nj1zdGF0aWMgaW50IHhmcm1fZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1Ny17XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NTg6XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTU5LVxcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9ODg4PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjg4OTp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTg5MC17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTE3PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjkxODp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTkxOS17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTYyPUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9mbHVzaCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk2My1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTY0OmludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTY1LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NzEtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTcyOlxcdGVyciA9IHhmcm1fZGV2X3N0YXRlX2ZsdXNoX3NlY2N0eF9jaGVjayhuZXQsIGRldiwgdGFza192YWxpZCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk3My1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMjYtfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMDI3OkVYUE9SVF9TWU1CT0woeGZybV9kZXZfc3RhdGVfZmx1c2gpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMDI4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MTozNS42MzQ0ODg2NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MjcwMDM4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIFN0YXRlIEdhcmJhZ2UgQ29sbGVjdGlvbiBhbmQgRGV2aWNlIEZsdXNoIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgYHhmcm1fc3RhdGVfZ2NfdGFza2AgYW5kIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuIFJpZ2h0IGF3YXksIG15IGJyYWluIHRlbGxzIG1lIGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGlzIHRyaWdnZXJlZCB0aHJvdWdoIGEgd29ya3F1ZXVlLCBzbyBpdCdzIGxpa2VseSBydW5uaW5nIGFzeW5jaHJvbm91c2x5LCB3aGljaCBpcyB0eXBpY2FsIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZW4sIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgZ2V0cyBjYWxsZWQgZnJvbSBgeGZybV9kZXZfZG93bmAgYW5kIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYCB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLiBUaGF0J3Mgc3RhbmRhcmQgZm9yIGNsZWFuaW5nIHVwIHN0YXRlIHdoZW4gYSBkZXZpY2UgZ29lcyBkb3duIG9yIGlzIHVucmVnaXN0ZXJlZCwgbWFrZXMgcGVyZmVjdCBzZW5zZS4gV2hhdCdzIGEgbGl0dGxlIHVudXN1YWwgaXMgdGhlIGNhbGwgZnJvbSBgYm9uZF9tYXN0ZXJfbmV0ZGV2X2V2ZW50YCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2Ag4oCTIHRoYXQncyBib25kIHNwZWNpZmljIGFuZCBtZWFucyB0aGF0IGJvbmRpbmcgY29uZmlndXJhdGlvbnMgbWF5IHJlcXVpcmUgdGhpcyBzdGF0ZSBmbHVzaGluZy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0J3Mgb2J2aW91c2x5IGBDT05GSUdfWEZSTWAsIGJ1dCB0aGUgbm90ZSBhYm91dCBuZWVkaW5nIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBmb3IgdGhlIGJvbmRpbmcgY2FsbCBvZiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGltcG9ydGFudC4gSG93ZXZlciwgYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAgYmVpbmcgaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgIHN1Z2dlc3RzIHRoYXQgdGhlIG1vZHVsZSBpdHNlbGYgaXMgYnVpbHQgd2hlbiBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaXMgZW5hYmxlZC4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBgbmV0L3hmcm0vTWFrZWZpbGVgIHRvIHZlcmlmeSB1bmRlciB3aGF0IGNvbmRpdGlvbnMgYHhmcm1fZGV2aWNlLmNgIGlzIGFjdHVhbGx5IGNvbXBpbGVkLCB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyB0aG9yb3VnaGx5IGJlZm9yZSBJIGNhbiBmdWxseSBhc3Nlc3MgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTE6NDEuMDYxNDk1MjExWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjk2NDIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfWEZSTSkgOj0geGZybV9wb2xpY3kubyB4ZnJtX3N0YXRlLm8geGZybV9oYXNoLm8gXFxcXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE1LVxcdFxcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXFxcXG5uZXQveGZybS9NYWtlZmlsZToxNjpcXHRcXHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGUtMTctXFx0XFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTE6NDEuMTc0NDY1NTM5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyNDkxODE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBNb2R1bGUgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBgeGZybV9kZXZpY2Uub2AgaXMgZGVmaW5pdGVseSBjb21waWxlZCB3aGVuIHRoZSBgQ09ORklHX1hGUk1gIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIuIEkgd2FudCB0byB1bmRlcnN0YW5kIGlmIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoYXQgb2JqZWN0IGZpbGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBhcyB3ZWxsLiBUaGUgcXVlc3Rpb24gdGhhdCdzIGRyaXZpbmcgbWUgbm93IGlzOiBJcyB0aGUgY29kZSBpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2Agd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrPyBJZiBzbywgdGhhdCB3b3VsZCBpbmRpY2F0ZSBhIG11Y2ggbW9yZSBncmFudWxhciBjb250cm9sIG92ZXIgaXRzIGluY2x1c2lvbiwgcHJvYmFibHkgcmVsYXRlZCB0byBoYXJkd2FyZSBvZmZsb2FkaW5nIHN1cHBvcnQuIEl0J3MgdGltZSB0byBjaGVjayB0aGUgc291cmNlIGFuZCBjb25maXJtLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUxOjQ0Ljk5OTM4NjYyM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAzODY3NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1hGUk1fT0ZGTE9BRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjEtXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyMjojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjMtc3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01MjY9c3RhdGljIGludCB4ZnJtX2FwaV9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTI3LXtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjUyODojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTI5LVxcdGlmICgoZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfRVNQX1RYX0NTVU0pIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUxOjQ1LjEyOTc4MTczMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTMxOTkyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgWEZSTSBEZXZpY2UgQ2xlYW51cCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gc29tZSB4ZnJtIGRldmljZSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldmljZSB0ZWFyZG93biBwcm9jZXNzLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGB4ZnJtX2Rldl9kb3duYCBhbmQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIHdpdGhpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGV2aWNlcyBhcmUgYnJvdWdodCBkb3duIGFuZCB1bnJlZ2lzdGVyZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbGVha3MuIEknbGwgZm9jdXMgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhvc2UgdHdvIGZ1bmN0aW9ucyBhbmQgaG93IHRoZXkncmUgdXNlZCBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhlIHhmcm0gaW5mcmFzdHJ1Y3R1cmUuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IGlmIGFueSBvdGhlciBzdWJzeXN0ZW1zIGRlcGVuZCBvbiB0aGlzIHByb2Nlc3MuIFRoaXMgd2lsbCBoZWxwIHdpdGggYSB0YXNrIGF0IGhhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MTo1MC4zNDI5ODQwNjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjM0Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fZGV2X2Rvd25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jPTUyNj1zdGF0aWMgaW50IHhmcm1fYXBpX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0NS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU0NjpzdGF0aWMgaW50IHhmcm1fZGV2X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0Ny17XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU2ND1zdGF0aWMgaW50IHhmcm1fZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NzUtXFx0Y2FzZSBORVRERVZfRE9XTjpcXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU3NjpcXHRcXHRyZXR1cm4geGZybV9kZXZfZG93bihkZXYpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTc3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MTo1MC40MjY2MjYyNjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1MjIwMjE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgWEZSTSBEZXZpY2UgRG93biBQcm9jZWR1cmUqKlxuXG5Pa2F5LCBzbyBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYHhmcm1fZGV2X2Rvd25gIGlzIHRyaWdnZXJlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgZXhwZXJpZW5jZXMgYSBgTkVUREVWX0RPV05gIGV2ZW50LiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGlzLCBpbiB0dXJuLCBsZWFkcyB0byB0aGUgZXhlY3V0aW9uIG9mIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuIE5vdywgdGhlcmUgYXJlIGEgZmV3IHNjZW5hcmlvcyB0aGF0IHRyaWdnZXIgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYDogYSBkZXZpY2UgZ29pbmcgZG93biwgYmVpbmcgdW5yZWdpc3RlcmVkLCBvciBpbiBjYXNlcyB3aGVyZSB0aGUgYGRldi1cdTAwM2VmZWF0dXJlc2AgaW5jbHVkZXMgdGhlIGBORVRJRl9GX0hXX0VTUGAgZmxhZy4gV2FpdCwgaG9sZCBvbiBhIHNlY29uZC4uLiBteSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgICphbHdheXMqIGNhbGxzIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAsIHJlZ2FyZGxlc3Mgb2YgdGhlIGZsYWcuIFRoaXMgc2VlbXMgbGlrZSBhbiBpbXBvcnRhbnQgZGlzdGluY3Rpb24gdG8gY2xhcmlmeS5cblxuRnVydGhlcm1vcmUsIEkga25vdyBgeGZybV9zdGF0ZV9nY190YXNrYCBpcyBpbnZvbHZlZCwgYW5kIGl0IHJ1bnMgdGhyb3VnaCB0aGUgYHhmcm1fc3RhdGVfZ2Nfd29ya2Agd29ya3F1ZXVlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGRlZXBlciBpbnRvIHdoZXJlIGB4ZnJtX3N0YXRlX2djX3dvcmtgIGlzIGFjdHVhbGx5IGJlaW5nIHNjaGVkdWxlZDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgbGlmZWN5Y2xlIGFuZCB0aW1pbmcgb2YgdGhpcyBwcm9jZXNzIHRvIGVuc3VyZSBpdCdzIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODEyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUxOjU0LjM3ODgzMzI3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MTkxNDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc3RhdGVfZ2Nfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jPTUwPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqeGZybV9zdGF0ZV9jYWNoZSBfX3JvX2FmdGVyX2luaXQ7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTUxLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo1MjpzdGF0aWMgREVDTEFSRV9XT1JLKHhmcm1fc3RhdGVfZ2Nfd29yaywgeGZybV9zdGF0ZV9nY190YXNrKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNTMtc3RhdGljIEhMSVNUX0hFQUQoeGZybV9zdGF0ZV9nY19saXN0KTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz04MDM9dm9pZCBfX3hmcm1fc3RhdGVfZGVzdHJveShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MDktXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZ2NfbG9jayk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjgxMDpcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZ4ZnJtX3N0YXRlX2djX3dvcmspO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MTEtfVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTMxNDg9dm9pZCB4ZnJtX2ZsdXNoX2djKHZvaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMxNDkte1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzozMTUwOlxcdGZsdXNoX3dvcmsoXFx1MDAyNnhmcm1fc3RhdGVfZ2Nfd29yayk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMxNTEtfVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTMzOTA9dm9pZCB4ZnJtX3N0YXRlX2Zpbmkoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMzOTYtXFx0eGZybV9zdGF0ZV9mbHVzaChuZXQsIDAsIGZhbHNlKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MzM5NzpcXHRmbHVzaF93b3JrKFxcdTAwMjZ4ZnJtX3N0YXRlX2djX3dvcmspO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0zMzk4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MTo1NC41NjUwMzA3NjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2NTc2NzM4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmFjZSBDb25kaXRpb24gaW4gdGhlIFhGUk0gU3Vic3lzdGVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gYSByYWNlIGNvbmRpdGlvbi4gSXQgc2VlbXMgdGhlIGB4ZnJtX3N0YXRlX2djX3dvcmtgIGlzIGJlaW5nIHNjaGVkdWxlZCB3aXRoaW4gYF9feGZybV9zdGF0ZV9kZXN0cm95YC4gVGhlIGNvcmUgb2YgdGhpcyBpc3N1ZSBhcHBlYXJzIHRvIGJlIGEgY29uZmxpY3QgYmV0d2VlbiBgeGZybV9zdGF0ZV9nY190YXNrYCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHR3byBmdW5jdGlvbnMsIGFuZCBhbHNvIHJlbWVtYmVyIHRoYXQgYF9feGZybV9zdGF0ZV9kZXN0cm95YCBpcyB0aGUgb25lIHRoYXQgc2NoZWR1bGVzIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gdGFzay4gTXkgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gYFhGUk1gIGFzIGV4cGVjdGVkLlxuXG5geGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIHRyaWdnZXJlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkIG9yIGJyb3VnaHQgZG93bi4gYHhmcm1fc3RhdGVfZ2NfdGFza2AsIG9uIHRoZSBvdGhlciBoYW5kLCBvcGVyYXRlcyB3aXRoaW4gYSB3b3JrcXVldWUuIEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgLlxuXG5MZXQgbWUgdGhpbmsuLi4gY2FuIEkgcmVsaWFibHkgdHJpZ2dlciBgeGZybV9kZXZfc3RhdGVfZmx1c2hgPyBZZXMsIGNyZWF0aW5nIGFuIFhGUk0gc3RhdGUgYW5kIHRoZW4gdGFraW5nIGEgbmV0d29yayBkZXZpY2UgZG93biwgb3IgdW5yZWdpc3RlcmluZyBpdCwgc2hvdWxkIGRvIHRoZSB0cmljay4gV2FpdCwgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IHdpdGhpbiBgeGZybV9kZXZfdW5yZWdpc3RlcmAuIEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBMZXQgbWUgY2hlY2sgdGhlIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYCBmdW5jdGlvbiBpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MjowNi4yMjI3MDgzMDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTc3NDc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2Rldl91bnJlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuYz01NDY9c3RhdGljIGludCB4ZnJtX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1NS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU1NjpzdGF0aWMgaW50IHhmcm1fZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1Ny17XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU2ND1zdGF0aWMgaW50IHhmcm1fZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NzgtXFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU3OTpcXHRcXHRyZXR1cm4geGZybV9kZXZfdW5yZWdpc3RlcihkZXYpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTgwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6MDYuMzI4NDg5MjMxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODY3Mzg2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCB0aGlua2luZyB0aHJvdWdoIHRoaXMgbG9naWNhbGx5OlxuXG4qKlJlYWNoaW5nIGFuZCBUZXN0aW5nIFhGUk0gU3RhdGUgRGVzdHJ1Y3Rpb24qKlxuXG5SaWdodCwgc28sIGFzIEkgdW5kZXJzdGFuZCBpdCwgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIGlzIGRlZmluaXRlbHkgdGhlIHRyaWdnZXIgaGVyZS4gSXQncyBjYWxsZWQgc3BlY2lmaWNhbGx5IG9uIHRoZSBgTkVUREVWX1VOUkVHSVNURVJgIGV2ZW50LiBUaGF0IG1lYW5zIGFueSB0aW1lIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLCB3ZSdyZSBndWFyYW50ZWVkIHRvIHNlZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGNhbGxlZC4gQW5kIGdpdmVuIHRoYXQsIHdlIGtub3cgdGhhdCBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgIGdldHMgaW52b2tlZCB3aGVuIGFuIFhGUk0gc3RhdGUgaXRzZWxmIGlzIGRlc3Ryb3llZC4gVGhhdCBhbGwgc291bmRzIHBlcmZlY3RseSByZWFjaGFibGUgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqdGVzdGFibGUqLiBJIGNhbiBjbGVhcmx5IHNlZSBhIHBhdGggdG8gcmVwcm9kdWNpbmcgdGhpcyBiZWhhdmlvci4gSXQgc2VlbXMgcXVpdGUgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciB0aGUgZGVwZW5kZW5jaWVzLiBXZSd2ZSBpZGVudGlmaWVkIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgWEZSTSBzdGF0ZSBhcyB0aGUga2V5IGFjdGlvbi4gSSdtIHdvbmRlcmluZyBpZiBYRlJNIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIG5lY2Vzc2FyeSBmb3IgdGhpcyB0ZXN0LCBvciBpZiB0aGVyZSBhcmUgb3RoZXJzIEknbGwgbmVlZCB0byBlbmFibGUgb3IgY29uZmlndXJlIGluIG9yZGVyIHRvIGZ1bGx5IHJlcGxpY2F0ZSB0aGUgc2NlbmFyaW8uIEknbGwgbmVlZCB0byBleHBsb3JlIHRoYXQgZnVydGhlciB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTcwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6MTAuMzE1MjMxMTYzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTM0NTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNDItXFxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNTAtXFxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0vS2NvbmZpZy01Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNzEtXFxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxubmV0L3hmcm0vS2NvbmZpZy03My1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxcbm5ldC94ZnJtL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTA1LVxcbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE0MC1cXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xcbm5ldC94ZnJtL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTU2LVxcbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MjoxMC4zODY1ODE5NDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2ODQ3Nzg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipYRlJNIFVzZXIgQ29uZmlndXJhdGlvbjogQSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBYRlJNX1VTRVJgIOKAkyB0aGF0J3MgdGhlIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIHRoZSBYRlJNIHN1YnN5c3RlbS4gQ2xlYXJseSwgdGhhdCdzIHdoYXQgd2Ugd2FudCBlbmFibGVkIHRvIGdpdmUgdGhlIHVzZXIgY29udHJvbC4gQW5kIGl0IGxvb2tzIGxpa2UgdGhlIGRlc2lnbiB0aWVzIHRoaXMgdG8gYFhGUk1gIGl0c2VsZjsgdGhhdCdzIHRoZSBjb3JlIGJvb2wsIHRoZSBhY3R1YWwgZmVhdHVyZSBnYXRlIHdoaWNoIGdldHMgc2VsZWN0ZWQgYnkgYWxsIHRoZSB2YXJpb3VzIElQc2VjIHByb3RvY29scywgbGlrZSBgSU5FVF9BSGAgYW5kIGBJTkVUX0VTUGAsIHdoZW4gdGhvc2Ugb3B0aW9ucyBhcmUgY29uZmlndXJlZC4gIFNvLCBubyBzdXJwcmlzZXMgdGhlcmUsIHRoYXQncyBleHBlY3RlZC5cblxuR2l2ZW4gdGhhdCdzIHRoZSBjZW50cmFsIGludGVyZmFjZSBmb3IgY29udHJvbCwgaXQncyBwcmV0dHkgY2xlYXIgd2Ugc2hvdWxkIGVuYWJsZSBgWEZSTV9VU0VSYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzLCBob3dldmVyLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGFyZW4ndCBpbnRyb2R1Y2luZyBhbnkgc3VidGxlIGNvbmZsaWN0cyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGJ5IGZsaXBwaW5nIHRoaXMgc3dpdGNoLiBOZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgc3VwcG9ydHMgaXQsIGFuZCB0aGF0IGFueSByZXF1aXJlZCBzdXBwb3J0aW5nIG1vZHVsZXMgYXJlIGFsc28gZW5hYmxlZCBvciBjb3JyZWN0bHkgY29uZmlndXJlZC4gTm90aGluZyB3b3JzZSB0aGFuIGEgcGFydGlhbGx5IGZ1bmN0aW9uYWwgZmVhdHVyZSBiZWNhdXNlIG9mIGEgbWlzc2VkIGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MjoxNC40NTUwNjMxOTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NjgxNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX1VTRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6MTQuNTMyNzUxNzMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMzIwNDY2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIE1vZHVsZSBEZXBlbmRlbmN5IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBrZXJuZWwgbW9kdWxlcy4gSXQgbG9va3MgbGlrZSBgWEZSTV9VU0VSYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBJTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbGwgbmVlZCB0byBlbnN1cmUgYm90aCBgSU5FVGAgYW5kIGBYRlJNX1VTRVJgIGFyZSBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIHVubG9hZHMuXG5cbkhhbmcgb24sIEkgcmVtZW1iZXIgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBkZWZpbmVkIGluIGB4ZnJtX3N0YXRlLmNgLiBBbmQgKnRoYXQqIGZpbGUgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuIExldCBtZSBjaGVjay4uLiBgeGZybV9kZXZpY2UuY2AgaXMgYWxzbyBjb21waWxlZCB3aGVuIGBDT05GSUdfWEZSTWAgaXMgZW5hYmxlZC4gR29vZC5cblxuQWhhISBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGNhbGxlZCBieSBgeGZybV9kZXZfdW5yZWdpc3RlcmAgd2hpY2ggaXMgYWN0dWFsbHkgZGVmaW5lZCBpbiBgeGZybV9kZXZpY2UuY2AuIEJ1dCBpcyBgeGZybV9kZXZpY2UuY2AgKmFsd2F5cyogY29tcGlsZWQgd2hlbiBgQ09ORklHX1hGUk1gIGlzIG9uPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnLiBZZXAsIHRoZSBgb2JqLSQoQ09ORklHX1hGUk0pIDo9IC4uLiB4ZnJtX2RldmljZS5vIC4uLmAgbGluZSBjb25maXJtcyB0aGF0LlxuXG5Ob3csIHNob3VsZCBJIGNoZWNrIGlmIGBYRlJNX09GRkxPQURgIGlzIG5lZWRlZCB0byBjb3JyZWN0bHkgdW5sb2FkPyBJIHNlZSBgeGZybV9kZXZfZG93bmAgYW5kIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYCBhcmUgYm90aCBpbiBgeGZybV9kZXZpY2UuY2AuIEJ1dCBhcmUgdGhleSB3cmFwcGVkIGluc2lkZSBhbiBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrPyBMZXQgbWUgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6MTkuNzY0ODAxNjY1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2NzEyMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9kZXZfdW5yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTQ2PXN0YXRpYyBpbnQgeGZybV9kZXZfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NTUtXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NTY6c3RhdGljIGludCB4ZnJtX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NTcte1xcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01NjQ9c3RhdGljIGludCB4ZnJtX2Rldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTc4LVxcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1Nzk6XFx0XFx0cmV0dXJuIHhmcm1fZGV2X3VucmVnaXN0ZXIoZGV2KTtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU4MC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUyOjE5Ljg5MTQ3ODgxM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMyNTk1MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSBwcm9jZXNzaW5nIHRoaXMgdGFzazpcblxuKipEaXZpbmcgaW50byB0aGUgWEZSTSBEZXZpY2UgQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2Ag4oCTIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGNvZGUgYXJvdW5kIGxpbmUgNTU2LiBJJ20gYXNzdW1pbmcgdGhlcmUncyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVuaW5nIHRoZXJlIHJlbGF0ZWQgdG8gWEZSTSBkZXZpY2VzLiBHaXZlbiB0aGUgY29udGV4dCwgSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gZGVhbCB3aXRoIGVpdGhlciBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIGRlLXJlZ2lzdHJhdGlvbiwgb3IgcG9zc2libHkgc29tZSBrZXkgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYXMgd2VsbCB0byBnZXQgYSBmdWxsIHVuZGVyc3RhbmRpbmcuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MjoyMy4yMjQwNzY5NzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQwOlxcdFxcdFxcdHJldHVybiBOT1RJRllfQkFEO1xcbiA1NDE6XFx0I2VuZGlmXFxuIDU0MjpcXHRcXG4gNTQzOlxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gNTQ0OlxcdH1cXG4gNTQ1OlxcdFxcbiA1NDY6XFx0c3RhdGljIGludCB4ZnJtX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDU0NzpcXHR7XFxuIDU0ODpcXHRcXHRpZiAoZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfRVNQKSB7XFxuIDU0OTpcXHRcXHRcXHR4ZnJtX2Rldl9zdGF0ZV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuIDU1MDpcXHRcXHRcXHR4ZnJtX2Rldl9wb2xpY3lfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbiA1NTE6XFx0XFx0fVxcbiA1NTI6XFx0XFxuIDU1MzpcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIDU1NDpcXHR9XFxuIDU1NTpcXHRcXG4gNTU2OlxcdHN0YXRpYyBpbnQgeGZybV9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA1NTc6XFx0e1xcbiA1NTg6XFx0XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbiA1NTk6XFx0XFx0eGZybV9kZXZfcG9saWN5X2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbiA1NjI6XFx0fVxcbiA1NjM6XFx0XFxuIDU2NDpcXHRzdGF0aWMgaW50IHhmcm1fZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbiA1NjU6XFx0e1xcbiA1NjY6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHRzd2l0Y2ggKGV2ZW50KSB7XFxuIDU2OTpcXHRcXHRjYXNlIE5FVERFVl9SRUdJU1RFUjpcXG4gNTcwOlxcdFxcdFxcdHJldHVybiB4ZnJtX2FwaV9jaGVjayhkZXYpO1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRjYXNlIE5FVERFVl9GRUFUX0NIQU5HRTpcXG4gNTczOlxcdFxcdFxcdHJldHVybiB4ZnJtX2FwaV9jaGVjayhkZXYpO1xcbiA1NzQ6XFx0XFxuIDU3NTpcXHRcXHRjYXNlIE5FVERFVl9ET1dOOlxcbiA1NzY6XFx0XFx0XFx0cmV0dXJuIHhmcm1fZGV2X2Rvd24oZGV2KTtcXG4gNTc3OlxcdFxcbiA1Nzg6XFx0XFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcXG4gNTc5OlxcdFxcdFxcdHJldHVybiB4ZnJtX2Rldl91bnJlZ2lzdGVyKGRldik7XFxuIDU4MDpcXHRcXHR9XFxuIDU4MTpcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIDU4MjpcXHR9XFxuIDU4MzpcXHRcXG4gNTg0OlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgeGZybV9kZXZfbm90aWZpZXIgPSB7XFxuIDU4NTpcXHRcXHQubm90aWZpZXJfY2FsbFxcdD0geGZybV9kZXZfZXZlbnQsXFxuIDU4NjpcXHR9O1xcbiA1ODc6XFx0XFxuIDU4ODpcXHR2b2lkIF9faW5pdCB4ZnJtX2Rldl9pbml0KHZvaWQpXFxuIDU4OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUyOjIzLjIyNDE5NzM4NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcyNjk5OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFhGUk0gT2ZmbG9hZCBJbml0aWFsaXphdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzZWUsIHRoZSBpc3N1ZSBpc24ndCB3aXRoaW4gYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYC4gVGhhdCdzIHRoZSBvYnZpb3VzIGZpcnN0IGNoZWNrLiBPa2F5LCB0aGF0J3Mgbm90IGl0LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIGRpdmluZyBkZWVwZXIsIGlzIHRvIGNvbmZpcm0gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgeGZybV9kZXZgIHN0cnVjdHVyZS4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaG93IHRoaXMgaW5pdGlhbGl6YXRpb24gaXMgYWN0dWFsbHkgdHJpZ2dlcmVkLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogd2hlcmUgaXMgYHhmcm1fZGV2X2luaXRgIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggdG8gdW5kZXJzdGFuZCB0aGUgcG9pbnQgb2YgZW50cnkgYW5kIHRoZSByZWxldmFudCBjb250ZXh0LiBHb3R0YSBmaWd1cmUgb3V0IHRoZSBkcml2ZXIgb3IgbW9kdWxlIHRoYXQncyByZXNwb25zaWJsZS4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIHRlbGxzIG1lIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTE2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MjoyNi42OTY5MDIzNDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NDY5NDQ2MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9kZXZfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQveGZybS5oPTIxMTA9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fc3RhdGVzX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqKnN0YXRlcywgaW50IG4pXFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmgtMjExNy1cXG5pbmNsdWRlL25ldC94ZnJtLmg6MjExODp2b2lkIF9faW5pdCB4ZnJtX2Rldl9pbml0KHZvaWQpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMTE5LVxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01ODQ9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4ZnJtX2Rldl9ub3RpZmllciA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTg3LVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTg4OnZvaWQgX19pbml0IHhmcm1fZGV2X2luaXQodm9pZClcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU4OS17XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0MDQ9dm9pZCBfX2luaXQgeGZybV9pbml0KHZvaWQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MTAtXFx0cmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2eGZybV9uZXRfb3BzKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ0MTE6XFx0eGZybV9kZXZfaW5pdCgpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQxMi1cXHR4ZnJtX2lucHV0X2luaXQoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6MzAuNTQzODUzMDk3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjkyNDkyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIFN0YXRlIENsZWFudXAgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIFhGUk0gY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoZXkndmUgYWRkcmVzc2VkIHRoaXMgcmFjZSBjb25kaXRpb24uIEkgc2VlIGB4ZnJtX2Rldl9pbml0YCBpcyBjYWxsZWQgZnJvbSBgeGZybV9pbml0YCwgd2hpY2ggc2V0cyB1cCBgeGZybV9kZXZfbm90aWZpZXJgIGlmIHRoZSBgQ09ORklHX1hGUk1gIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZC4gVGhhdCBtZWFucyB3ZSdyZSByZWdpc3RlcmluZyBhIG5vdGlmaWVyLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIGlzIGdvaW5nIHRvIGJlIGNhbGxlZCBvbiBldmVyeSBgTkVUREVWX1VOUkVHSVNURVJgIGV2ZW50LlxuXG5UaGVyZWZvcmUsIGZvciBldmVyeSBkZXZpY2UgdW5yZWdpc3RyYXRpb24sIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgaXMgYmVpbmcgY2FsbGVkIGlmIGBDT05GSUdfWEZSTWAgaXMgZW5hYmxlZC4gVGhhdCdzIGEga2V5IHBvaW50LiBBbHNvLCBJJ20gbm90aW5nIHRoYXQgYHhmcm1fc3RhdGVfZ2NfdGFza2AgZ2V0cyBjYWxsZWQgdmlhIGEgd29ya3F1ZXVlIHdoZW4gYW4gWEZSTSBzdGF0ZSBpcyBkZXN0cm95ZWQuIFRoaXMgc3VnZ2VzdHMgYSBkZXNpZ24gdG8gaGFuZGxlIHRoZSBjbGVhbnVwIGFzeW5jaHJvbm91c2x5LCB3aGljaCBpcyBsaWtlbHkgdGhlIGZpeCBmb3IgdGhlIHJhY2UuXG5cbkdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG9uIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uLiBBaGEsIGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBhbHNvIGNvbnNpZGVyIHdoYXQgY2FsbHMgaXQuIExldCBtZSBsb29rIGF0IGBfX3hmcm1fc3RhdGVfZGVzdHJveWAgc2luY2UgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBzY2hlZHVsZXMgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiB0YXNrLiBJIGFsc28gd2FudCB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gaW50byBgeGZybV9zdGF0ZV9mbHVzaGAgYW5kIGB4ZnJtX2ZsdXNoX2djYC4gSSdsbCBkb3VibGUgY2hlY2sgYHhmcm1fc3RhdGVfZ2NfdGFza2AgaXMgaW5kZWVkIHN0YXRpYy4gWWVwLCBpdCBpcy4gU28sIGxldCdzIGxvb2sgY2xvc2VseSBhdCBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgIGFuZCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIHN0YXRlcyBhcmUgZGVzdHJveWVkIGFuZCBmbHVzaGVkLlxuTGV0IG1lIGRvdWJsZSBjaGVjayBob3cgYF9feGZybV9zdGF0ZV9kZXN0cm95YCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6MzYuNjczMTA1NTU3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjA1NzcyNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX194ZnJtX3N0YXRlX2Rlc3Ryb3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuYz03ODM9dm9pZCB4ZnJtX2Rldl9zdGF0ZV9mcmVlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTgwMi1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6ODAzOnZvaWQgX194ZnJtX3N0YXRlX2Rlc3Ryb3koc3RydWN0IHhmcm1fc3RhdGUgKngpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTgwNC17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtODExLX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6ODEyOkVYUE9SVF9TWU1CT0woX194ZnJtX3N0YXRlX2Rlc3Ryb3kpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUyOjM3LjE5MzY5MzU2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDQ3MTIwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGEgcGFydGljdWxhciBzZXQgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsJ3MgWEZSTSBzdWJzeXN0ZW0uIEkgc2VlIHRoYXQgYF9feGZybV9zdGF0ZV9kZXN0cm95YCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBhcmUgaW5kZWVkIGV4cG9ydGVkIHN5bWJvbHMuIFRoYXQncyBhIGdvb2Qgc3RhcnQuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiSXMgYFhGUk1fVVNFUmAgZW5vdWdoIHRvIHJlYWNoIGFsbCB0aGUgbmVjZXNzYXJ5IGNvZGUgcGF0aHM/XCIgUXVpY2tseSBjaGVja2luZywgSSBzZWUgdGhhdCBgWEZSTV9VU0VSYCBkZXBlbmRzIG9uIGBJTkVUYC4gIEFoLCByaWdodCwgbmV0d29ya2luZyBiYXNpY3MuIFRoYXQgbWVhbnMgSSB0aGVvcmV0aWNhbGx5IG5lZWQgYm90aCBgSU5FVGAgYW5kIGBYRlJNX1VTRVJgLiBCdXQgaG9sZCBvbi4uLiBgSU5FVGAgaXMgZXNzZW50aWFsbHkgYSBnaXZlbiBpbiBhIHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJdCdzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCwgdGhvdWdoIEkgY291bGQgbGlzdCBpdCBpZiByZXF1aXJlZC4gQWN0dWFsbHksIG9uIHNlY29uZCB0aG91Z2h0LCBgWEZSTV9VU0VSYCBhbG9uZSBzaG91bGQgc3VmZmljZSBpbiBtb3N0IGNvbW1vbiBjYXNlcy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG8gSSBuZWVkIGBYRlJNX09GRkxPQURgPyBUaGUgZnVuY3Rpb24gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyB1bmNvbmRpdGlvbmFsbHkgY2FsbGVkIHdpdGhpbiBgeGZybV9kZXZfdW5yZWdpc3RlcmAuIFRoYXQgKnN1Z2dlc3RzKiBgWEZSTV9PRkZMT0FEYCBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgdG8gaGl0IHRoYXQgcGFydGljdWxhciBjb2RlIHBhdGguIEhvd2V2ZXIsIGBYRlJNX09GRkxPQURgIGNvdWxkIGNlcnRhaW5seSBlbmFibGUgbW9yZSwgcG90ZW50aWFsbHkgcmVsZXZhbnQsIG9mZmxvYWQtcmVsYXRlZCBwYXRocy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZGlnIGRlZXBlciBhbmQgaW52ZXN0aWdhdGUgdGhlIGV4YWN0IGRlcGVuZGVuY2llcyBvZiBgWEZSTV9PRkZMT0FEYCBpdHNlbGYsIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyByZXF1aXJlcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDIxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUyOjQyLjE5ODQwODQ1N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzMzY5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fT0ZGTE9BRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMC1cXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcXG5uZXQveGZybS9LY29uZmlnLTEyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6NDIuMjcwNzUwNzE2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4ODg0NDI2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24gYW5kIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBYRlJNIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSd2ZSBnb3QgdG8gdW5kZXJzdGFuZCBpcyBob3cgaXQncyBjb25maWd1cmVkLiBgWEZSTV9PRkZMT0FEYCBpcyB0aGUgdHJpY2t5IG9uZSDigJMgaXQncyBhIGhpZGRlbiBib29sLCBzbyBJIGNhbid0IGRpcmVjdGx5IGVuYWJsZSBpdC4gVGhlIGRyaXZlcnMgdGhhdCBzdXBwb3J0IGl0IHNlbGVjdCBpdCwgc28gSSdtIGVzc2VudGlhbGx5IGF0IHRoZWlyIG1lcmN5IGZvciB0aGF0IHBhcnRpY3VsYXIgZmVhdHVyZS5cblxuTm93LCBsZXQncyBzZWUgd2hhdCBvdGhlciBjb25maWdzIGFyZSByZWxldmFudCBoZXJlLiBgWEZSTV9BTEdPYCBpcyBzZWxlY3RlZCBieSBgWEZSTV9VU0VSYC4gQWhhLCBgWEZSTV9VU0VSYCBpcyB0aGUga2V5ISBUaGF0J3MgdGhlIG1haW4gY29uZmlnIHRvIGVuYWJsZSB0aGUgWEZSTSB1c2VyIGludGVyZmFjZS4gKlRoYXQqIGlzIHdoYXQgYWxsb3dzIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciB0byBjb21lIGluIGFuZCBjcmVhdGUgWEZSTSBzdGF0ZXMgYW5kIHRyaWdnZXIgdGhlIHJhY2UgY29uZGl0aW9uLiBTbywgaXQncyBgWEZSTV9VU0VSYCB0aGF0IEkgbmVlZCB0byBmb2N1cyBvbi5cblxuVGhlIGNyaXRpY2FsIHN5bWJvbHMgSSdtIHdhdGNoaW5nIGFyZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgLlxuXG5MZXQncyBnbyBiYWNrIGFuZCBjYXJlZnVsbHkgcmV2aWV3IHRoaXMgcGF0Y2gsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN5bmNocm9uaXphdGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYHhmcm1fc3RhdGVfZ2NfbXV0ZXhgIHRvIHN5bmNocm9uaXplIGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGFuZCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgbWVhbnQgdG8gYWRkcmVzcyBhIGNvbmN1cnJlbmN5IGlzc3VlLCBwcm9iYWJseSBpbnZvbHZpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIG9mIFhGUk0gc3RhdGVzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gaXMgc3BlY2lmaWNhbGx5IGludGVuZGVkIHRvIHByb3RlY3QgdGhlIGBnY19saXN0YCBhbmQgYHhmcm1fc3RhdGVfZGV2X2djX2xpc3RgIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBjaGFuZ2Ugc2hvdWxkIHJlc29sdmUgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgdG8ga2VlcCB0aGlzIGluIG1pbmQuIEknbGwgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gcmVwb3J0IG15IGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA0OCwiT3V0cHV0VG9rZW5zIjoxMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6NTAuMTU5MTk3ODJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5NTIzNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZGV2X3N0YXRlX2ZsdXNoXCIsXG4gICAgXCJfX3hmcm1fc3RhdGVfZGVzdHJveVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYHhmcm1fc3RhdGVfZ2NfbXV0ZXhgIHRvIHN5bmNocm9uaXplIFhGUk0gc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIChgeGZybV9zdGF0ZV9nY190YXNrYCkgYW5kIGRldmljZSBzdGF0ZSBmbHVzaGluZyAoYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgY29yZSBYRlJNIHN1YnN5c3RlbS4gSXQgaXMgcmVhY2hhYmxlIGJ5IGNyZWF0aW5nIFhGUk0gc3RhdGVzIGFuZCB1bnJlZ2lzdGVyaW5nIG5ldHdvcmsgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICAgIFwiX194ZnJtX3N0YXRlX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGB4ZnJtX3N0YXRlX2djX211dGV4YCB0byBzeW5jaHJvbml6ZSBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbiAoYHhmcm1fc3RhdGVfZ2NfdGFza2ApIGFuZCBkZXZpY2Ugc3RhdGUgZmx1c2hpbmcgKGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIGNvcmUgWEZSTSBzdWJzeXN0ZW0uIEl0IGlzIHJlYWNoYWJsZSBieSBjcmVhdGluZyBYRlJNIHN0YXRlcyBhbmQgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjntwz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 23:34:47 +0000 UTC FinishedAt: 2026-07-31 23:52:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "2fbade66245059c78daeaccfce13ecf499fffb51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "2fbade66245059c78daeaccfce13ecf499fffb51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_USER" ], "series_id": "75468e90-af4d-4760-9ccf-00ddf46da748" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "xfrm_dev_state_flush", "__xfrm_state_destroy" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZsdXNoJiMzNDssCiAgICAmIzM0O19feGZybV9zdGF0ZV9kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYHhmcm1fc3RhdGVfZ2NfbXV0ZXhgIHRvIHN5bmNocm9uaXplIFhGUk0gc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIChgeGZybV9zdGF0ZV9nY190YXNrYCkgYW5kIGRldmljZSBzdGF0ZSBmbHVzaGluZyAoYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgY29yZSBYRlJNIHN1YnN5c3RlbS4gSXQgaXMgcmVhY2hhYmxlIGJ5IGNyZWF0aW5nIFhGUk0gc3RhdGVzIGFuZCB1bnJlZ2lzdGVyaW5nIG5ldHdvcmsgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEzOGQ1MjYzYmZmMDk4ZWRlMjQzMmUwNmMxN2JjODRkM2YyZjkzMjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAyMzo1MDoyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcbmluZGV4IDM2YTRmNjc5M2VkZWYuLmRlMDk3YmJhODAzYjcgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuQEAgLTIyNiw2ICYjNDM7MjI2LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyBfX3JjdSAqeGZybV9zdGF0ZV9hZmluZm9bTlBST1RPXTtcbiBcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmcm1fc3RhdGVfZ2NfbG9jayk7XG4gc3RhdGljIERFRklORV9TUElOTE9DSyh4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiYjNDM7c3RhdGljIERFRklORV9NVVRFWCh4ZnJtX3N0YXRlX2djX211dGV4KTtcbiBcbiBpbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7XG4gXG5AQCAtNjMyLDggJiM0Mzs2MzMsMTAgQEAgc3RhdGljIHZvaWQgeGZybV9zdGF0ZV9nY190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXHUwMDI2Z2NfbGlzdCwgZ2NsaXN0KVxuIFx0XHR4ZnJtX3N0YXRlX2djX2Rlc3Ryb3koeCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIH1cbiBcbiBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgeGZybV90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICptZSlcbkBAIC0xMDAwLDYgJiM0MzsxMDAzLDcgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlcbiBvdXQ6XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZuZXQtXHUwMDNleGZybS54ZnJtX3N0YXRlX2xvY2spO1xuIFxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4gcmVzdGFydF9nYzpcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCBcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19saXN0LCBkZXZfZ2NsaXN0KSB7XG5AQCAtMTAxNCw2ICYjNDM7MTAxOCw3IEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpXG4gXG4gXHR9XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XG4gXG4gXHR4ZnJtX2ZsdXNoX2djKCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZsdXNoJiMzNDssCiAgICAmIzM0O19feGZybV9zdGF0ZV9kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYHhmcm1fc3RhdGVfZ2NfbXV0ZXhgIHRvIHN5bmNocm9uaXplIFhGUk0gc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIChgeGZybV9zdGF0ZV9nY190YXNrYCkgYW5kIGRldmljZSBzdGF0ZSBmbHVzaGluZyAoYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgY29yZSBYRlJNIHN1YnN5c3RlbS4gSXQgaXMgcmVhY2hhYmxlIGJ5IGNyZWF0aW5nIFhGUk0gc3RhdGVzIGFuZCB1bnJlZ2lzdGVyaW5nIG5ldHdvcmsgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGEzOGQ1MjYzYmZmMDk4ZWRlMjQzMmUwNmMxN2JjODRkM2YyZjkzMjAKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAyMzo1MDoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwppbmRleCAzNmE0ZjY3OTNlZGVmLi5kZTA5N2JiYTgwM2I3IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCkBAIC0yMjYsNiAmIzQzOzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gX19yY3UgKnhmcm1fc3RhdGVfYWZpbmZvW05QUk9UT107CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9nY19sb2NrKTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7CiYjNDM7c3RhdGljIERFRklORV9NVVRFWCh4ZnJtX3N0YXRlX2djX211dGV4KTsKIAogaW50IF9feGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpOwogCkBAIC02MzIsOCAmIzQzOzYzMywxMCBAQCBzdGF0aWMgdm9pZCB4ZnJtX3N0YXRlX2djX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCiAJc3luY2hyb25pemVfcmN1KCk7CiAKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3hmcm1fc3RhdGVfZ2NfbXV0ZXgpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCAmYW1wO2djX2xpc3QsIGdjbGlzdCkKIAkJeGZybV9zdGF0ZV9nY19kZXN0cm95KHgpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDt4ZnJtX3N0YXRlX2djX211dGV4KTsKIH0KIAogc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHhmcm1fdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqbWUpCkBAIC0xMDAwLDYgJiM0MzsxMDAzLDcgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGkKIG91dDoKIAlzcGluX3VubG9ja19iaCgmYW1wO25ldC0mZ3Q7eGZybS54ZnJtX3N0YXRlX2xvY2spOwogCiYjNDM7CW11dGV4X2xvY2soJmFtcDt4ZnJtX3N0YXRlX2djX211dGV4KTsKIAlzcGluX2xvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKIHJlc3RhcnRfZ2M6CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4LCB0bXAsICZhbXA7eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCwgZGV2X2djbGlzdCkgewpAQCAtMTAxNCw2ICYjNDM7MTAxOCw3IEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpCiAKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7eGZybV9zdGF0ZV9nY19tdXRleCk7CiAKIAl4ZnJtX2ZsdXNoX2djKCk7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggZm9yIFhGUk0gU3RhdGUgR2FyYmFnZSBDb2xsZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBzZWVtcyBsaWtlIGl04oCZcyB0d2Vha2luZyBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgbmV3IG11dGV4LCBgeGZybV9zdGF0ZV9nY19tdXRleGAuIFRoYXQganVtcHMgb3V0IOKAkyBhIG11dGV4IHVzdWFsbHkgbWVhbnMgdGhleSYjMzk7cmUgYWRkcmVzc2luZyBhIHJhY2UgY29uZGl0aW9uIG9yIHNvbWUgc3luY2hyb25pemF0aW9uIGlzc3VlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbi4gTWFrZXMgc2Vuc2U7IGZ1bmN0aW9uYWwgY29kZSBpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gbGlrZSB0aGlzIG9mdGVuIG5lZWRzIGNhcmVmdWwgc3luY2hyb25pemF0aW9uLgoKTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzOiB3aGF0IGFyZSB0aGUgbXV0ZXgmIzM5O3MgdXNhZ2VzPyBMZXQmIzM5O3MgY2hlY2sgYHhmcm1fc3RhdGVfZ2NfdGFza2AgYW5kIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuIEFoLCBgeGZybV9zdGF0ZV9nY190YXNrYCBpcyBhIHdvcmtxdWV1ZSB0YXNrLiBTdGFuZGFyZCBzdHVmZi4gQW5kIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuLi4gdGhhdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGRldmljZSBmbHVzaGVzLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBkZXZpY2UgZmx1c2hlcyBjYW4gYmUgdHJpY2t5LgoKV2FpdCBhIHNlY29uZOKApiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgICphY3F1aXJlcyogYHhmcm1fc3RhdGVfZ2NfbXV0ZXhgLCBhbmQgKnRoZW4qIGB4ZnJtX3N0YXRlX2Rldl9nY19sb2NrYC4gQW5kIGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGFsc28gdXNlcyBgeGZybV9zdGF0ZV9nY19tdXRleGAuIE9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgbG9jayBoaWVyYXJjaHkgaGVyZS4gVGhleSYjMzk7cmUgdHJ5aW5nIHRvIGNhcmVmdWxseSBzZXF1ZW5jZSB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGFuZCBkZXZpY2UgZmx1c2ggb3BlcmF0aW9ucyB0byBhdm9pZCBjb250ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGhpZXJhcmNoeSBmdWxseS4gVGhpcyBtaWdodCBiZSBhIHN1YnRsZSBidXQgY3JpdGljYWwgZml4LgoKTGV0IG1lIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBYRlJNIGNvbmZpZ3VyYXRpb25zLiBgQ09ORklHX1hGUk1gIGlzIHRoZSBjb3JlLCByaWdodD8gVGltZSB0byB1c2UgYGdpdCBncmVwYCBhbmQgbG9vayBmb3IgYWxsIHRoZSBjYWxscyB0byBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBzZWUgd2hhdCBjb25maWcgZGVwZW5kZW5jaWVzIGl0IGhhcy4gVW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29udGV4dCB3aWxsIGNsYXJpZnkgdGhlIG5lY2Vzc2l0eSBvZiB0aGUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kZXZfc3RhdGVfZmx1c2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz0zOTE5PXN0YXRpYyBpbnQgYm9uZF9tYXN0ZXJfbmV0ZGV2X2V2ZW50KHVuc2lnbmVkIGxvbmcgZXZlbnQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy0zOTMxLSNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjM5MzI6XHRcdHhmcm1fZGV2X3N0YXRlX2ZsdXNoKGRldl9uZXQoYm9uZF9kZXYpLCBib25kX2RldiwgdHJ1ZSk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTM5MzMtI2VuZGlmIC8qIENPTkZJR19YRlJNX09GRkxPQUQgKi9cbi0tXG5pbmNsdWRlL25ldC94ZnJtLmg9MTc4Nz1pbnQgeGZybV9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHByb3RvLCBib29sIHRhc2tfdmFsaWQpO1xuaW5jbHVkZS9uZXQveGZybS5oOjE3ODg6aW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlkKTtcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNzg5LWludCB4ZnJtX2Rldl9wb2xpY3lfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTQ2PXN0YXRpYyBpbnQgeGZybV9kZXZfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTQ4LVx0aWYgKGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19FU1ApIHtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTQ5Olx0XHR4ZnJtX2Rldl9zdGF0ZV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1MC1cdFx0eGZybV9kZXZfcG9saWN5X2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU1Nj1zdGF0aWMgaW50IHhmcm1fZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTU3LXtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTU4Olx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NTktXHR4ZnJtX2Rldl9wb2xpY3lfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz04ODg9c3RhdGljIGlubGluZSBpbnRcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo4ODk6eGZybV9kZXZfc3RhdGVfZmx1c2hfc2VjY3R4X2NoZWNrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlkKVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTg5MC17XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTkxNz1zdGF0aWMgaW5saW5lIGludFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjkxODp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTE5LXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTYyPUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9mbHVzaCk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTYzLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjk2NDppbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTY1LXtcbi0tXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTcxLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTcyOlx0ZXJyID0geGZybV9kZXZfc3RhdGVfZmx1c2hfc2VjY3R4X2NoZWNrKG5ldCwgZGV2LCB0YXNrX3ZhbGlkKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NzMtXHRpZiAoZXJyKVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMDI2LX1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMDI3OkVYUE9SVF9TWU1CT0woeGZybV9kZXZfc3RhdGVfZmx1c2gpO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEyMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhGUk0gU3RhdGUgR2FyYmFnZSBDb2xsZWN0aW9uIGFuZCBEZXZpY2UgRmx1c2ggTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgY2hhbmdlcyBhcmUgY2VudGVyZWQgYXJvdW5kIGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGFuZCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBSaWdodCBhd2F5LCBteSBicmFpbiB0ZWxscyBtZSBgeGZybV9zdGF0ZV9nY190YXNrYCBpcyB0cmlnZ2VyZWQgdGhyb3VnaCBhIHdvcmtxdWV1ZSwgc28gaXQmIzM5O3MgbGlrZWx5IHJ1bm5pbmcgYXN5bmNocm9ub3VzbHksIHdoaWNoIGlzIHR5cGljYWwgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbi4gVGhlbiwgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBnZXRzIGNhbGxlZCBmcm9tIGB4ZnJtX2Rldl9kb3duYCBhbmQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIHdpdGhpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AuIFRoYXQmIzM5O3Mgc3RhbmRhcmQgZm9yIGNsZWFuaW5nIHVwIHN0YXRlIHdoZW4gYSBkZXZpY2UgZ29lcyBkb3duIG9yIGlzIHVucmVnaXN0ZXJlZCwgbWFrZXMgcGVyZmVjdCBzZW5zZS4gV2hhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsIGlzIHRoZSBjYWxsIGZyb20gYGJvbmRfbWFzdGVyX25ldGRldl9ldmVudGAgaW4gYGRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmNgIOKAkyB0aGF0JiMzOTtzIGJvbmQgc3BlY2lmaWMgYW5kIG1lYW5zIHRoYXQgYm9uZGluZyBjb25maWd1cmF0aW9ucyBtYXkgcmVxdWlyZSB0aGlzIHN0YXRlIGZsdXNoaW5nLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0JiMzOTtzIG9idmlvdXNseSBgQ09ORklHX1hGUk1gLCBidXQgdGhlIG5vdGUgYWJvdXQgbmVlZGluZyBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgZm9yIHRoZSBib25kaW5nIGNhbGwgb2YgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBpbXBvcnRhbnQuIEhvd2V2ZXIsIGB4ZnJtX2Rldl9kb3duYCBhbmQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIGJlaW5nIGluIGBuZXQveGZybS94ZnJtX2RldmljZS5jYCBzdWdnZXN0cyB0aGF0IHRoZSBtb2R1bGUgaXRzZWxmIGlzIGJ1aWx0IHdoZW4gYENPTkZJR19YRlJNX09GRkxPQURgIGlzIGVuYWJsZWQuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIGBuZXQveGZybS9NYWtlZmlsZWAgdG8gdmVyaWZ5IHVuZGVyIHdoYXQgY29uZGl0aW9ucyBgeGZybV9kZXZpY2UuY2AgaXMgYWN0dWFsbHkgY29tcGlsZWQsIHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyB0aG9yb3VnaGx5IGJlZm9yZSBJIGNhbiBmdWxseSBhc3Nlc3MgdGhpcyBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kZXZpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfWEZSTSkgOj0geGZybV9wb2xpY3kubyB4ZnJtX3N0YXRlLm8geGZybV9oYXNoLm8gXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE1LVx0XHQgICAgICB4ZnJtX2lucHV0Lm8geGZybV9vdXRwdXQubyBcXFxubmV0L3hmcm0vTWFrZWZpbGU6MTY6XHRcdCAgICAgIHhmcm1fc3lzY3RsLm8geGZybV9yZXBsYXkubyB4ZnJtX2RldmljZS5vIFxcXG5uZXQveGZybS9NYWtlZmlsZS0xNy1cdFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODg5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBLZXJuZWwgTW9kdWxlIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIGB4ZnJtX2RldmljZS5vYCBpcyBkZWZpbml0ZWx5IGNvbXBpbGVkIHdoZW4gdGhlIGBDT05GSUdfWEZSTWAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGVuYWJsZWQuIFRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IEkgbmVlZCB0byBkaXZlIGRlZXBlci4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaWYgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhhdCBvYmplY3QgZmlsZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGFzIHdlbGwuIFRoZSBxdWVzdGlvbiB0aGF0JiMzOTtzIGRyaXZpbmcgbWUgbm93IGlzOiBJcyB0aGUgY29kZSBpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2Agd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrPyBJZiBzbywgdGhhdCB3b3VsZCBpbmRpY2F0ZSBhIG11Y2ggbW9yZSBncmFudWxhciBjb250cm9sIG92ZXIgaXRzIGluY2x1c2lvbiwgcHJvYmFibHkgcmVsYXRlZCB0byBoYXJkd2FyZSBvZmZsb2FkaW5nIHN1cHBvcnQuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIHNvdXJjZSBhbmQgY29uZmlybS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19YRlJNX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjEtXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjIyOiNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTIzLXN0YXRpYyB2b2lkIF9feGZybV90cmFuc3BvcnRfcHJlcChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTUyNj1zdGF0aWMgaW50IHhmcm1fYXBpX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTUyNy17XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjUyODojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01MjktXHRpZiAoKGRldi1cdTAwM2VmZWF0dXJlcyBcdTAwMjYgTkVUSUZfRl9IV19FU1BfVFhfQ1NVTSkgXHUwMDI2XHUwMDI2XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM1NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgWEZSTSBEZXZpY2UgQ2xlYW51cCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHNvbWUgeGZybSBkZXZpY2UgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXZpY2UgdGVhcmRvd24gcHJvY2Vzcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAgd2l0aGluIGBuZXQveGZybS94ZnJtX2RldmljZS5jYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkZXZpY2VzIGFyZSBicm91Z2h0IGRvd24gYW5kIHVucmVnaXN0ZXJlZCwgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciByZXNvdXJjZSBsZWFrcy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhvc2UgdHdvIGZ1bmN0aW9ucyBhbmQgaG93IHRoZXkmIzM5O3JlIHVzZWQgaW4gdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoZSB4ZnJtIGluZnJhc3RydWN0dXJlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiBhbnkgb3RoZXIgc3Vic3lzdGVtcyBkZXBlbmQgb24gdGhpcyBwcm9jZXNzLiBUaGlzIHdpbGwgaGVscCB3aXRoIGEgdGFzayBhdCBoYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2Rldl9kb3duJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2RldmljZS5jPTUyNj1zdGF0aWMgaW50IHhmcm1fYXBpX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NDUtXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU0NjpzdGF0aWMgaW50IHhmcm1fZGV2X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTQ3LXtcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU2ND1zdGF0aWMgaW50IHhmcm1fZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTc1LVx0Y2FzZSBORVRERVZfRE9XTjpcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTc2Olx0XHRyZXR1cm4geGZybV9kZXZfZG93bihkZXYpO1xubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFhGUk0gRGV2aWNlIERvd24gUHJvY2VkdXJlKioKCk9rYXksIHNvIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHhmcm1fZGV2X2Rvd25gIGlzIHRyaWdnZXJlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgZXhwZXJpZW5jZXMgYSBgTkVUREVWX0RPV05gIGV2ZW50LiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhpcywgaW4gdHVybiwgbGVhZHMgdG8gdGhlIGV4ZWN1dGlvbiBvZiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBOb3csIHRoZXJlIGFyZSBhIGZldyBzY2VuYXJpb3MgdGhhdCB0cmlnZ2VyIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGA6IGEgZGV2aWNlIGdvaW5nIGRvd24sIGJlaW5nIHVucmVnaXN0ZXJlZCwgb3IgaW4gY2FzZXMgd2hlcmUgdGhlIGBkZXYtJmd0O2ZlYXR1cmVzYCBpbmNsdWRlcyB0aGUgYE5FVElGX0ZfSFdfRVNQYCBmbGFnLiBXYWl0LCBob2xkIG9uIGEgc2Vjb25kLi4uIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgeGZybV9kZXZfdW5yZWdpc3RlcmAgKmFsd2F5cyogY2FsbHMgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCwgcmVnYXJkbGVzcyBvZiB0aGUgZmxhZy4gVGhpcyBzZWVtcyBsaWtlIGFuIGltcG9ydGFudCBkaXN0aW5jdGlvbiB0byBjbGFyaWZ5LgoKRnVydGhlcm1vcmUsIEkga25vdyBgeGZybV9zdGF0ZV9nY190YXNrYCBpcyBpbnZvbHZlZCwgYW5kIGl0IHJ1bnMgdGhyb3VnaCB0aGUgYHhmcm1fc3RhdGVfZ2Nfd29ya2Agd29ya3F1ZXVlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGRlZXBlciBpbnRvIHdoZXJlIGB4ZnJtX3N0YXRlX2djX3dvcmtgIGlzIGFjdHVhbGx5IGJlaW5nIHNjaGVkdWxlZDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgbGlmZWN5Y2xlIGFuZCB0aW1pbmcgb2YgdGhpcyBwcm9jZXNzIHRvIGVuc3VyZSBpdCYjMzk7cyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9zdGF0ZV9nY193b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fc3RhdGUuYz01MD1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnhmcm1fc3RhdGVfY2FjaGUgX19yb19hZnRlcl9pbml0O1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTUxLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjUyOnN0YXRpYyBERUNMQVJFX1dPUksoeGZybV9zdGF0ZV9nY193b3JrLCB4ZnJtX3N0YXRlX2djX3Rhc2spO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTUzLXN0YXRpYyBITElTVF9IRUFEKHhmcm1fc3RhdGVfZ2NfbGlzdCk7XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTgwMz12b2lkIF9feGZybV9zdGF0ZV9kZXN0cm95KHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MDktXHRzcGluX3VubG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2djX2xvY2spO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjgxMDpcdHNjaGVkdWxlX3dvcmsoXHUwMDI2eGZybV9zdGF0ZV9nY193b3JrKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MTEtfVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz0zMTQ4PXZvaWQgeGZybV9mbHVzaF9nYyh2b2lkKVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMxNDkte1xubmV0L3hmcm0veGZybV9zdGF0ZS5jOjMxNTA6XHRmbHVzaF93b3JrKFx1MDAyNnhmcm1fc3RhdGVfZ2Nfd29yayk7XG5uZXQveGZybS94ZnJtX3N0YXRlLmMtMzE1MS19XG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTMzOTA9dm9pZCB4ZnJtX3N0YXRlX2Zpbmkoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0zMzk2LVx0eGZybV9zdGF0ZV9mbHVzaChuZXQsIDAsIGZhbHNlKTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzozMzk3Olx0Zmx1c2hfd29yayhcdTAwMjZ4ZnJtX3N0YXRlX2djX3dvcmspO1xubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMzOTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MjMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmFjZSBDb25kaXRpb24gaW4gdGhlIFhGUk0gU3Vic3lzdGVtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBhIHJhY2UgY29uZGl0aW9uLiBJdCBzZWVtcyB0aGUgYHhmcm1fc3RhdGVfZ2Nfd29ya2AgaXMgYmVpbmcgc2NoZWR1bGVkIHdpdGhpbiBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgLiBUaGUgY29yZSBvZiB0aGlzIGlzc3VlIGFwcGVhcnMgdG8gYmUgYSBjb25mbGljdCBiZXR3ZWVuIGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGFuZCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgdHdvIGZ1bmN0aW9ucywgYW5kIGFsc28gcmVtZW1iZXIgdGhhdCBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgIGlzIHRoZSBvbmUgdGhhdCBzY2hlZHVsZXMgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiB0YXNrLiBNeSBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgWEZSTWAgYXMgZXhwZWN0ZWQuCgpgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIHRyaWdnZXJlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkIG9yIGJyb3VnaHQgZG93bi4gYHhmcm1fc3RhdGVfZ2NfdGFza2AsIG9uIHRoZSBvdGhlciBoYW5kLCBvcGVyYXRlcyB3aXRoaW4gYSB3b3JrcXVldWUuIEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgLgoKTGV0IG1lIHRoaW5rLi4uIGNhbiBJIHJlbGlhYmx5IHRyaWdnZXIgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYD8gWWVzLCBjcmVhdGluZyBhbiBYRlJNIHN0YXRlIGFuZCB0aGVuIHRha2luZyBhIG5ldHdvcmsgZGV2aWNlIGRvd24sIG9yIHVucmVnaXN0ZXJpbmcgaXQsIHNob3VsZCBkbyB0aGUgdHJpY2suIFdhaXQsIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgaXMgY2FsbGVkIHVuY29uZGl0aW9uYWxseSB3aXRoaW4gYHhmcm1fZGV2X3VucmVnaXN0ZXJgLiBJIHNob3VsZCB2ZXJpZnkgdGhhdC4gTGV0IG1lIGNoZWNrIHRoZSBgeGZybV9kZXZfdW5yZWdpc3RlcmAgZnVuY3Rpb24gaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hmcm1fZGV2X3VucmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTQ2PXN0YXRpYyBpbnQgeGZybV9kZXZfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTU1LVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NTY6c3RhdGljIGludCB4ZnJtX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1Ny17XG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01NjQ9c3RhdGljIGludCB4ZnJtX2Rldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU3OC1cdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU3OTpcdFx0cmV0dXJuIHhmcm1fZGV2X3VucmVnaXN0ZXIoZGV2KTtcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTgwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGxvZ2ljYWxseToKCioqUmVhY2hpbmcgYW5kIFRlc3RpbmcgWEZSTSBTdGF0ZSBEZXN0cnVjdGlvbioqCgpSaWdodCwgc28sIGFzIEkgdW5kZXJzdGFuZCBpdCwgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIGlzIGRlZmluaXRlbHkgdGhlIHRyaWdnZXIgaGVyZS4gSXQmIzM5O3MgY2FsbGVkIHNwZWNpZmljYWxseSBvbiB0aGUgYE5FVERFVl9VTlJFR0lTVEVSYCBldmVudC4gVGhhdCBtZWFucyBhbnkgdGltZSBhIG5ldHdvcmsgZGV2aWNlIGlzIHVucmVnaXN0ZXJlZCwgd2UmIzM5O3JlIGd1YXJhbnRlZWQgdG8gc2VlIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgY2FsbGVkLiBBbmQgZ2l2ZW4gdGhhdCwgd2Uga25vdyB0aGF0IGBfX3hmcm1fc3RhdGVfZGVzdHJveWAgZ2V0cyBpbnZva2VkIHdoZW4gYW4gWEZSTSBzdGF0ZSBpdHNlbGYgaXMgZGVzdHJveWVkLiBUaGF0IGFsbCBzb3VuZHMgcGVyZmVjdGx5IHJlYWNoYWJsZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp0ZXN0YWJsZSouIEkgY2FuIGNsZWFybHkgc2VlIGEgcGF0aCB0byByZXByb2R1Y2luZyB0aGlzIGJlaGF2aW9yLiBJdCBzZWVtcyBxdWl0ZSBzdHJhaWdodGZvcndhcmQuCgpOb3csIEkgbmVlZCB0byBjb25zaWRlciB0aGUgZGVwZW5kZW5jaWVzLiBXZSYjMzk7dmUgaWRlbnRpZmllZCB0aGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIFhGUk0gc3RhdGUgYXMgdGhlIGtleSBhY3Rpb24uIEkmIzM5O20gd29uZGVyaW5nIGlmIFhGUk0gaXMgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBvcHRpb24gbmVjZXNzYXJ5IGZvciB0aGlzIHRlc3QsIG9yIGlmIHRoZXJlIGFyZSBvdGhlcnMgSSYjMzk7bGwgbmVlZCB0byBlbmFibGUgb3IgY29uZmlndXJlIGluIG9yZGVyIHRvIGZ1bGx5IHJlcGxpY2F0ZSB0aGUgc2NlbmFyaW8uIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSB0aGF0IGZ1cnRoZXIgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFhGUk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWctNC0jXG5uZXQveGZybS9LY29uZmlnOjU6Y29uZmlnIFhGUk1cbm5ldC94ZnJtL0tjb25maWctNi1cdGJvb2xcbi0tXG5uZXQveGZybS9LY29uZmlnLTEwLVxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXG5uZXQveGZybS9LY29uZmlnLTEyLVx0Ym9vbFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cbm5ldC94ZnJtL0tjb25maWc6MTQ6Y29uZmlnIFhGUk1fQUxHT1xubmV0L3hmcm0vS2NvbmZpZy0xNS1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0yMj1pZiBJTkVUXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcbm5ldC94ZnJtL0tjb25maWctMjQtXHR0cmlzdGF0ZSBcJiMzNDtUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy0zMS1cbm5ldC94ZnJtL0tjb25maWc6MzI6Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbm5ldC94ZnJtL0tjb25maWctMzMtXHR0cmlzdGF0ZSBcJiMzNDtDb21wYXRpYmxlIEFCSSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy00Mi1cbm5ldC94ZnJtL0tjb25maWc6NDM6Y29uZmlnIFhGUk1fSU5URVJGQUNFXG5uZXQveGZybS9LY29uZmlnLTQ0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdmlydHVhbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTUwLVxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXG5uZXQveGZybS9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTYwLVxubmV0L3hmcm0vS2NvbmZpZzo2MTpjb25maWcgWEZSTV9NSUdSQVRFXG5uZXQveGZybS9LY29uZmlnLTYyLVx0Ym9vbCBcJiMzNDtUcmFuc2Zvcm1hdGlvbiBtaWdyYXRlIGRhdGFiYXNlXCYjMzQ7XG4tLVxubmV0L3hmcm0vS2NvbmZpZy03MS1cbm5ldC94ZnJtL0tjb25maWc6NzI6Y29uZmlnIFhGUk1fU1RBVElTVElDU1xubmV0L3hmcm0vS2NvbmZpZy03My1cdGJvb2wgXCYjMzQ7VHJhbnNmb3JtYXRpb24gc3RhdGlzdGljc1wmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctODMtIyBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxubmV0L3hmcm0vS2NvbmZpZy04NS1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZy05Mi0jIGFsZ29yaXRobXMgdGhhdCBSRkMgODIyMSBsaXN0cyBhcyBNVVNUIGJlIGltcGxlbWVudGVkLlxubmV0L3hmcm0vS2NvbmZpZzo5Mzpjb25maWcgWEZSTV9FU1Bcbm5ldC94ZnJtL0tjb25maWctOTQtXHR0cmlzdGF0ZVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTA1LVxubmV0L3hmcm0vS2NvbmZpZzoxMDY6Y29uZmlnIFhGUk1fSVBDT01QXG5uZXQveGZybS9LY29uZmlnLTEwNy1cdHRyaXN0YXRlXG4tLVxubmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTQwLVxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcbm5ldC94ZnJtL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQveGZybS9LY29uZmlnLTE1Ni1cbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXG5uZXQveGZybS9LY29uZmlnLTE1OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODcxMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqWEZSTSBVc2VyIENvbmZpZ3VyYXRpb246IEEgUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBYRlJNX1VTRVJgIOKAkyB0aGF0JiMzOTtzIHRoZSB1c2VyLXNwYWNlIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0uIENsZWFybHksIHRoYXQmIzM5O3Mgd2hhdCB3ZSB3YW50IGVuYWJsZWQgdG8gZ2l2ZSB0aGUgdXNlciBjb250cm9sLiBBbmQgaXQgbG9va3MgbGlrZSB0aGUgZGVzaWduIHRpZXMgdGhpcyB0byBgWEZSTWAgaXRzZWxmOyB0aGF0JiMzOTtzIHRoZSBjb3JlIGJvb2wsIHRoZSBhY3R1YWwgZmVhdHVyZSBnYXRlIHdoaWNoIGdldHMgc2VsZWN0ZWQgYnkgYWxsIHRoZSB2YXJpb3VzIElQc2VjIHByb3RvY29scywgbGlrZSBgSU5FVF9BSGAgYW5kIGBJTkVUX0VTUGAsIHdoZW4gdGhvc2Ugb3B0aW9ucyBhcmUgY29uZmlndXJlZC4gIFNvLCBubyBzdXJwcmlzZXMgdGhlcmUsIHRoYXQmIzM5O3MgZXhwZWN0ZWQuCgpHaXZlbiB0aGF0JiMzOTtzIHRoZSBjZW50cmFsIGludGVyZmFjZSBmb3IgY29udHJvbCwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHdlIHNob3VsZCBlbmFibGUgYFhGUk1fVVNFUmAuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMsIGhvd2V2ZXIuIEkgd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlbiYjMzk7dCBpbnRyb2R1Y2luZyBhbnkgc3VidGxlIGNvbmZsaWN0cyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGJ5IGZsaXBwaW5nIHRoaXMgc3dpdGNoLiBOZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgc3VwcG9ydHMgaXQsIGFuZCB0aGF0IGFueSByZXF1aXJlZCBzdXBwb3J0aW5nIG1vZHVsZXMgYXJlIGFsc28gZW5hYmxlZCBvciBjb3JyZWN0bHkgY29uZmlndXJlZC4gTm90aGluZyB3b3JzZSB0aGFuIGEgcGFydGlhbGx5IGZ1bmN0aW9uYWwgZmVhdHVyZSBiZWNhdXNlIG9mIGEgbWlzc2VkIGRlcGVuZGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX1VTRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9MjI9aWYgSU5FVFxubmV0L3hmcm0vS2NvbmZpZzoyMzpjb25maWcgWEZSTV9VU0VSXG5uZXQveGZybS9LY29uZmlnLTI0LVx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC94ZnJtL0tjb25maWctMzEtXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXG5uZXQveGZybS9LY29uZmlnLTMzLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcGF0aWJsZSBBQkkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTc4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBNb2R1bGUgRGVwZW5kZW5jeSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGVzZSBrZXJuZWwgbW9kdWxlcy4gSXQgbG9va3MgbGlrZSBgWEZSTV9VU0VSYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBJTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O2xsIG5lZWQgdG8gZW5zdXJlIGJvdGggYElORVRgIGFuZCBgWEZSTV9VU0VSYCBhcmUgZW5hYmxlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSB1bmxvYWRzLgoKSGFuZyBvbiwgSSByZW1lbWJlciBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGRlZmluZWQgaW4gYHhmcm1fc3RhdGUuY2AuIEFuZCAqdGhhdCogZmlsZSBpcyBvbmx5IGNvbXBpbGVkIGlmIGBDT05GSUdfWEZSTWAgaXMgZW5hYmxlZC4gT2theSwgdGhhdCBtYWtlcyBzZW5zZS4gTGV0IG1lIGNoZWNrLi4uIGB4ZnJtX2RldmljZS5jYCBpcyBhbHNvIGNvbXBpbGVkIHdoZW4gYENPTkZJR19YRlJNYCBpcyBlbmFibGVkLiBHb29kLgoKQWhhISBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGNhbGxlZCBieSBgeGZybV9kZXZfdW5yZWdpc3RlcmAgd2hpY2ggaXMgYWN0dWFsbHkgZGVmaW5lZCBpbiBgeGZybV9kZXZpY2UuY2AuIEJ1dCBpcyBgeGZybV9kZXZpY2UuY2AgKmFsd2F5cyogY29tcGlsZWQgd2hlbiBgQ09ORklHX1hGUk1gIGlzIG9uPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnLiBZZXAsIHRoZSBgb2JqLSQoQ09ORklHX1hGUk0pIDo9IC4uLiB4ZnJtX2RldmljZS5vIC4uLmAgbGluZSBjb25maXJtcyB0aGF0LgoKTm93LCBzaG91bGQgSSBjaGVjayBpZiBgWEZSTV9PRkZMT0FEYCBpcyBuZWVkZWQgdG8gY29ycmVjdGx5IHVubG9hZD8gSSBzZWUgYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAgYXJlIGJvdGggaW4gYHhmcm1fZGV2aWNlLmNgLiBCdXQgYXJlIHRoZXkgd3JhcHBlZCBpbnNpZGUgYW4gYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYCBibG9jaz8gTGV0IG1lIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAyMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt4ZnJtX2Rldl91bnJlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2RldmljZS5jPTU0Nj1zdGF0aWMgaW50IHhmcm1fZGV2X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1NS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTU2OnN0YXRpYyBpbnQgeGZybV9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NTcte1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTY0PXN0YXRpYyBpbnQgeGZybV9kZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NzgtXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1Nzk6XHRcdHJldHVybiB4ZnJtX2Rldl91bnJlZ2lzdGVyKGRldik7XG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU4MC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSBwcm9jZXNzaW5nIHRoaXMgdGFzazoKCioqRGl2aW5nIGludG8gdGhlIFhGUk0gRGV2aWNlIENvZGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgIOKAkyBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDU1Ni4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVuaW5nIHRoZXJlIHJlbGF0ZWQgdG8gWEZSTSBkZXZpY2VzLiBHaXZlbiB0aGUgY29udGV4dCwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIGRlYWwgd2l0aCBlaXRoZXIgZGV2aWNlIGluaXRpYWxpemF0aW9uLCBkZS1yZWdpc3RyYXRpb24sIG9yIHBvc3NpYmx5IHNvbWUga2V5IGludGVyYWN0aW9uIHdpdGhpbiB0aGUgWEZSTSBzdWJzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhcyB3ZWxsIHRvIGdldCBhIGZ1bGwgdW5kZXJzdGFuZGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQwOlx0XHRcdHJldHVybiBOT1RJRllfQkFEO1xuIDU0MTpcdCNlbmRpZlxuIDU0MjpcdFxuIDU0MzpcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuIDU0NDpcdH1cbiA1NDU6XHRcbiA1NDY6XHRzdGF0aWMgaW50IHhmcm1fZGV2X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA1NDc6XHR7XG4gNTQ4Olx0XHRpZiAoZGV2LVx1MDAzZWZlYXR1cmVzIFx1MDAyNiBORVRJRl9GX0hXX0VTUCkge1xuIDU0OTpcdFx0XHR4ZnJtX2Rldl9zdGF0ZV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XG4gNTUwOlx0XHRcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XG4gNTUxOlx0XHR9XG4gNTUyOlx0XG4gNTUzOlx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gNTU0Olx0fVxuIDU1NTpcdFxuIDU1NjpcdHN0YXRpYyBpbnQgeGZybV9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDU1NzpcdHtcbiA1NTg6XHRcdHhmcm1fZGV2X3N0YXRlX2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcbiA1NTk6XHRcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XG4gNTYwOlx0XG4gNTYxOlx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gNTYyOlx0fVxuIDU2MzpcdFxuIDU2NDpcdHN0YXRpYyBpbnQgeGZybV9kZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4gNTY1Olx0e1xuIDU2NjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xuIDU2NzpcdFxuIDU2ODpcdFx0c3dpdGNoIChldmVudCkge1xuIDU2OTpcdFx0Y2FzZSBORVRERVZfUkVHSVNURVI6XG4gNTcwOlx0XHRcdHJldHVybiB4ZnJtX2FwaV9jaGVjayhkZXYpO1xuIDU3MTpcdFxuIDU3MjpcdFx0Y2FzZSBORVRERVZfRkVBVF9DSEFOR0U6XG4gNTczOlx0XHRcdHJldHVybiB4ZnJtX2FwaV9jaGVjayhkZXYpO1xuIDU3NDpcdFxuIDU3NTpcdFx0Y2FzZSBORVRERVZfRE9XTjpcbiA1NzY6XHRcdFx0cmV0dXJuIHhmcm1fZGV2X2Rvd24oZGV2KTtcbiA1Nzc6XHRcbiA1Nzg6XHRcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XG4gNTc5Olx0XHRcdHJldHVybiB4ZnJtX2Rldl91bnJlZ2lzdGVyKGRldik7XG4gNTgwOlx0XHR9XG4gNTgxOlx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gNTgyOlx0fVxuIDU4MzpcdFxuIDU4NDpcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgeGZybV9kZXZfbm90aWZpZXIgPSB7XG4gNTg1Olx0XHQubm90aWZpZXJfY2FsbFx0PSB4ZnJtX2Rldl9ldmVudCxcbiA1ODY6XHR9O1xuIDU4NzpcdFxuIDU4ODpcdHZvaWQgX19pbml0IHhmcm1fZGV2X2luaXQodm9pZClcbiA1ODk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTE2CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBYRlJNIE9mZmxvYWQgSW5pdGlhbGl6YXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBzZWUsIHRoZSBpc3N1ZSBpc24mIzM5O3Qgd2l0aGluIGAjaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRGAuIFRoYXQmIzM5O3MgdGhlIG9idmlvdXMgZmlyc3QgY2hlY2suIE9rYXksIHRoYXQmIzM5O3Mgbm90IGl0LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIGRpdmluZyBkZWVwZXIsIGlzIHRvIGNvbmZpcm0gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgeGZybV9kZXZgIHN0cnVjdHVyZS4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaG93IHRoaXMgaW5pdGlhbGl6YXRpb24gaXMgYWN0dWFsbHkgdHJpZ2dlcmVkLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogd2hlcmUgaXMgYHhmcm1fZGV2X2luaXRgIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggdG8gdW5kZXJzdGFuZCB0aGUgcG9pbnQgb2YgZW50cnkgYW5kIHRoZSByZWxldmFudCBjb250ZXh0LiBHb3R0YSBmaWd1cmUgb3V0IHRoZSBkcml2ZXIgb3IgbW9kdWxlIHRoYXQmIzM5O3MgcmVzcG9uc2libGUuIExldCYjMzk7cyBzZWUgaWYgdGhlIGNvZGUgdGVsbHMgbWUgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9kZXZfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC94ZnJtLmg9MjExMD1zdGF0aWMgaW5saW5lIHZvaWQgeGZybV9zdGF0ZXNfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICoqc3RhdGVzLCBpbnQgbilcbi0tXG5pbmNsdWRlL25ldC94ZnJtLmgtMjExNy1cbmluY2x1ZGUvbmV0L3hmcm0uaDoyMTE4OnZvaWQgX19pbml0IHhmcm1fZGV2X2luaXQodm9pZCk7XG5pbmNsdWRlL25ldC94ZnJtLmgtMjExOS1cbi0tXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU4ND1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHhmcm1fZGV2X25vdGlmaWVyID0ge1xuLS1cbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTg3LVxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1ODg6dm9pZCBfX2luaXQgeGZybV9kZXZfaW5pdCh2b2lkKVxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01ODkte1xuLS1cbm5ldC94ZnJtL3hmcm1fcG9saWN5LmM9NDQwND12b2lkIF9faW5pdCB4ZnJtX2luaXQodm9pZClcbi0tXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MTAtXHRyZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNnhmcm1fbmV0X29wcyk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ0MTE6XHR4ZnJtX2Rldl9pbml0KCk7XG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MTItXHR4ZnJtX2lucHV0X2luaXQoKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYRlJNIFN0YXRlIENsZWFudXAgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgWEZSTSBjb2RlLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgdGhleSYjMzk7dmUgYWRkcmVzc2VkIHRoaXMgcmFjZSBjb25kaXRpb24uIEkgc2VlIGB4ZnJtX2Rldl9pbml0YCBpcyBjYWxsZWQgZnJvbSBgeGZybV9pbml0YCwgd2hpY2ggc2V0cyB1cCBgeGZybV9kZXZfbm90aWZpZXJgIGlmIHRoZSBgQ09ORklHX1hGUk1gIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgcmVnaXN0ZXJpbmcgYSBub3RpZmllciwgYW5kIG1vcmUgaW1wb3J0YW50bHksIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYCBpcyBnb2luZyB0byBiZSBjYWxsZWQgb24gZXZlcnkgYE5FVERFVl9VTlJFR0lTVEVSYCBldmVudC4KClRoZXJlZm9yZSwgZm9yIGV2ZXJ5IGRldmljZSB1bnJlZ2lzdHJhdGlvbiwgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBiZWluZyBjYWxsZWQgaWYgYENPTkZJR19YRlJNYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEga2V5IHBvaW50LiBBbHNvLCBJJiMzOTttIG5vdGluZyB0aGF0IGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGdldHMgY2FsbGVkIHZpYSBhIHdvcmtxdWV1ZSB3aGVuIGFuIFhGUk0gc3RhdGUgaXMgZGVzdHJveWVkLiBUaGlzIHN1Z2dlc3RzIGEgZGVzaWduIHRvIGhhbmRsZSB0aGUgY2xlYW51cCBhc3luY2hyb25vdXNseSwgd2hpY2ggaXMgbGlrZWx5IHRoZSBmaXggZm9yIHRoZSByYWNlLgoKR2l2ZW4gdGhpcywgSSBzaG91bGQgZm9jdXMgb24gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24uIEFoYSwgYHhmcm1fc3RhdGVfZ2NfdGFza2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGFsc28gY29uc2lkZXIgd2hhdCBjYWxscyBpdC4gTGV0IG1lIGxvb2sgYXQgYF9feGZybV9zdGF0ZV9kZXN0cm95YCBzaW5jZSB0aGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHNjaGVkdWxlcyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIHRhc2suIEkgYWxzbyB3YW50IHRvIGZvbGxvdyB0aGUgY2FsbCBjaGFpbiBpbnRvIGB4ZnJtX3N0YXRlX2ZsdXNoYCBhbmQgYHhmcm1fZmx1c2hfZ2NgLiBJJiMzOTtsbCBkb3VibGUgY2hlY2sgYHhmcm1fc3RhdGVfZ2NfdGFza2AgaXMgaW5kZWVkIHN0YXRpYy4gWWVwLCBpdCBpcy4gU28sIGxldCYjMzk7cyBsb29rIGNsb3NlbHkgYXQgYF9feGZybV9zdGF0ZV9kZXN0cm95YCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IHRoZSBzdGF0ZXMgYXJlIGRlc3Ryb3llZCBhbmQgZmx1c2hlZC4KTGV0IG1lIGRvdWJsZSBjaGVjayBob3cgYF9feGZybV9zdGF0ZV9kZXN0cm95YCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMjM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X194ZnJtX3N0YXRlX2Rlc3Ryb3kmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX3N0YXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9zdGF0ZS5jPTc4Mz12b2lkIHhmcm1fZGV2X3N0YXRlX2ZyZWUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG4tLVxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTgwMi1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo4MDM6dm9pZCBfX3hmcm1fc3RhdGVfZGVzdHJveShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MDQte1xuLS1cbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MTEtfVxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjgxMjpFWFBPUlRfU1lNQk9MKF9feGZybV9zdGF0ZV9kZXN0cm95KTtcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDIxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGEgcGFydGljdWxhciBzZXQgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIFhGUk0gc3Vic3lzdGVtLiBJIHNlZSB0aGF0IGBfX3hmcm1fc3RhdGVfZGVzdHJveWAgYW5kIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgYXJlIGluZGVlZCBleHBvcnRlZCBzeW1ib2xzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydC4KCk15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7SXMgYFhGUk1fVVNFUmAgZW5vdWdoIHRvIHJlYWNoIGFsbCB0aGUgbmVjZXNzYXJ5IGNvZGUgcGF0aHM/JiMzNDsgUXVpY2tseSBjaGVja2luZywgSSBzZWUgdGhhdCBgWEZSTV9VU0VSYCBkZXBlbmRzIG9uIGBJTkVUYC4gIEFoLCByaWdodCwgbmV0d29ya2luZyBiYXNpY3MuIFRoYXQgbWVhbnMgSSB0aGVvcmV0aWNhbGx5IG5lZWQgYm90aCBgSU5FVGAgYW5kIGBYRlJNX1VTRVJgLiBCdXQgaG9sZCBvbi4uLiBgSU5FVGAgaXMgZXNzZW50aWFsbHkgYSBnaXZlbiBpbiBhIHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQsIHRob3VnaCBJIGNvdWxkIGxpc3QgaXQgaWYgcmVxdWlyZWQuIEFjdHVhbGx5LCBvbiBzZWNvbmQgdGhvdWdodCwgYFhGUk1fVVNFUmAgYWxvbmUgc2hvdWxkIHN1ZmZpY2UgaW4gbW9zdCBjb21tb24gY2FzZXMuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkbyBJIG5lZWQgYFhGUk1fT0ZGTE9BRGA/IFRoZSBmdW5jdGlvbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIHVuY29uZGl0aW9uYWxseSBjYWxsZWQgd2l0aGluIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYC4gVGhhdCAqc3VnZ2VzdHMqIGBYRlJNX09GRkxPQURgIGlzbiYjMzk7dCBzdHJpY3RseSBuZWNlc3NhcnkgdG8gaGl0IHRoYXQgcGFydGljdWxhciBjb2RlIHBhdGguIEhvd2V2ZXIsIGBYRlJNX09GRkxPQURgIGNvdWxkIGNlcnRhaW5seSBlbmFibGUgbW9yZSwgcG90ZW50aWFsbHkgcmVsZXZhbnQsIG9mZmxvYWQtcmVsYXRlZCBwYXRocy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZGlnIGRlZXBlciBhbmQgaW52ZXN0aWdhdGUgdGhlIGV4YWN0IGRlcGVuZGVuY2llcyBvZiBgWEZSTV9PRkZMT0FEYCBpdHNlbGYsIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyByZXF1aXJlcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTAtXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcbm5ldC94ZnJtL0tjb25maWctMTItXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDQ4CgkJCQkJCQlvdXRwdXQ6IDEzOQoJCQkJCQkJdGhvdWdodHM6IDYwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhGUk0gQ29uZmlndXJhdGlvbiBhbmQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgWEZSTSBjb2RlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O3ZlIGdvdCB0byB1bmRlcnN0YW5kIGlzIGhvdyBpdCYjMzk7cyBjb25maWd1cmVkLiBgWEZSTV9PRkZMT0FEYCBpcyB0aGUgdHJpY2t5IG9uZSDigJMgaXQmIzM5O3MgYSBoaWRkZW4gYm9vbCwgc28gSSBjYW4mIzM5O3QgZGlyZWN0bHkgZW5hYmxlIGl0LiBUaGUgZHJpdmVycyB0aGF0IHN1cHBvcnQgaXQgc2VsZWN0IGl0LCBzbyBJJiMzOTttIGVzc2VudGlhbGx5IGF0IHRoZWlyIG1lcmN5IGZvciB0aGF0IHBhcnRpY3VsYXIgZmVhdHVyZS4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGF0IG90aGVyIGNvbmZpZ3MgYXJlIHJlbGV2YW50IGhlcmUuIGBYRlJNX0FMR09gIGlzIHNlbGVjdGVkIGJ5IGBYRlJNX1VTRVJgLiBBaGEsIGBYRlJNX1VTRVJgIGlzIHRoZSBrZXkhIFRoYXQmIzM5O3MgdGhlIG1haW4gY29uZmlnIHRvIGVuYWJsZSB0aGUgWEZSTSB1c2VyIGludGVyZmFjZS4gKlRoYXQqIGlzIHdoYXQgYWxsb3dzIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciB0byBjb21lIGluIGFuZCBjcmVhdGUgWEZSTSBzdGF0ZXMgYW5kIHRyaWdnZXIgdGhlIHJhY2UgY29uZGl0aW9uLiBTbywgaXQmIzM5O3MgYFhGUk1fVVNFUmAgdGhhdCBJIG5lZWQgdG8gZm9jdXMgb24uCgpUaGUgY3JpdGljYWwgc3ltYm9scyBJJiMzOTttIHdhdGNoaW5nIGFyZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgLgoKTGV0JiMzOTtzIGdvIGJhY2sgYW5kIGNhcmVmdWxseSByZXZpZXcgdGhpcyBwYXRjaCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3luY2hyb25pemF0aW9uLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgeGZybV9zdGF0ZV9nY19tdXRleGAgdG8gc3luY2hyb25pemUgYHhmcm1fc3RhdGVfZ2NfdGFza2AgYW5kIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBtZWFudCB0byBhZGRyZXNzIGEgY29uY3VycmVuY3kgaXNzdWUsIHByb2JhYmx5IGludm9sdmluZyBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgWEZSTSBzdGF0ZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gaXMgc3BlY2lmaWNhbGx5IGludGVuZGVkIHRvIHByb3RlY3QgdGhlIGBnY19saXN0YCBhbmQgYHhmcm1fc3RhdGVfZGV2X2djX2xpc3RgIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBjaGFuZ2Ugc2hvdWxkIHJlc29sdmUgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uCgpJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGtlZXAgdGhpcyBpbiBtaW5kLiBJJiMzOTtsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byByZXBvcnQgbXkgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDIzOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX1VTRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnJtX2Rldl9zdGF0ZV9mbHVzaCYjMzQ7LAogICAgJiMzNDtfX3hmcm1fc3RhdGVfZGVzdHJveSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGB4ZnJtX3N0YXRlX2djX211dGV4YCB0byBzeW5jaHJvbml6ZSBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbiAoYHhmcm1fc3RhdGVfZ2NfdGFza2ApIGFuZCBkZXZpY2Ugc3RhdGUgZmx1c2hpbmcgKGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIGNvcmUgWEZSTSBzdWJzeXN0ZW0uIEl0IGlzIHJlYWNoYWJsZSBieSBjcmVhdGluZyBYRlJNIHN0YXRlcyBhbmQgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmcm1fZGV2X3N0YXRlX2ZsdXNoJiMzNDssCiAgICAmIzM0O19feGZybV9zdGF0ZV9kZXN0cm95JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYHhmcm1fc3RhdGVfZ2NfbXV0ZXhgIHRvIHN5bmNocm9uaXplIFhGUk0gc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIChgeGZybV9zdGF0ZV9nY190YXNrYCkgYW5kIGRldmljZSBzdGF0ZSBmbHVzaGluZyAoYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgY29yZSBYRlJNIHN1YnN5c3RlbS4gSXQgaXMgcmVhY2hhYmxlIGJ5IGNyZWF0aW5nIFhGUk0gc3RhdGVzIGFuZCB1bnJlZ2lzdGVyaW5nIG5ldHdvcmsgZGV2aWNlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUwOjI2LjEwNjE2NzI2N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDIwODk5OTM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICAgIFwiX194ZnJtX3N0YXRlX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGB4ZnJtX3N0YXRlX2djX211dGV4YCB0byBzeW5jaHJvbml6ZSBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbiAoYHhmcm1fc3RhdGVfZ2NfdGFza2ApIGFuZCBkZXZpY2Ugc3RhdGUgZmx1c2hpbmcgKGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIGNvcmUgWEZSTSBzdWJzeXN0ZW0uIEl0IGlzIHJlYWNoYWJsZSBieSBjcmVhdGluZyBYRlJNIHN0YXRlcyBhbmQgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUwOjI2LjEwNjE3MzQ4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5Mjg0NDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTM4ZDUyNjNiZmYwOThlZGUyNDMyZTA2YzE3YmM4NGQzZjJmOTMyMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAzMSAyMzo1MDoyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmNcXG5pbmRleCAzNmE0ZjY3OTNlZGVmLi5kZTA5N2JiYTgwM2I3IDEwMDY0NFxcbi0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xcbisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xcbkBAIC0yMjYsNiArMjI2LDcgQEAgc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyBfX3JjdSAqeGZybV9zdGF0ZV9hZmluZm9bTlBST1RPXTtcXG4gXFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9nY19sb2NrKTtcXG4gc3RhdGljIERFRklORV9TUElOTE9DSyh4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcXG4rc3RhdGljIERFRklORV9NVVRFWCh4ZnJtX3N0YXRlX2djX211dGV4KTtcXG4gXFxuIGludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTtcXG4gXFxuQEAgLTYzMiw4ICs2MzMsMTAgQEAgc3RhdGljIHZvaWQgeGZybV9zdGF0ZV9nY190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XFxuIFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeCwgdG1wLCBcXHUwMDI2Z2NfbGlzdCwgZ2NsaXN0KVxcbiBcXHRcXHR4ZnJtX3N0YXRlX2djX2Rlc3Ryb3koeCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2eGZybV9zdGF0ZV9nY19tdXRleCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCB4ZnJtX3RpbWVyX2hhbmRsZXIoc3RydWN0IGhydGltZXIgKm1lKVxcbkBAIC0xMDAwLDYgKzEwMDMsNyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaVxcbiBvdXQ6XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcXG4gXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbiByZXN0YXJ0X2djOlxcbiBcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xpc3QsIGRldl9nY2xpc3QpIHtcXG5AQCAtMTAxNCw2ICsxMDE4LDcgQEAgaW50IHhmcm1fZGV2X3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB0YXNrX3ZhbGlcXG4gXFxuIFxcdH1cXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xcbiBcXG4gXFx0eGZybV9mbHVzaF9nYygpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTA6MjYuNTg2MzE1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0MzcyODgzOTE4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICAgIFwiX194ZnJtX3N0YXRlX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGB4ZnJtX3N0YXRlX2djX211dGV4YCB0byBzeW5jaHJvbml6ZSBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbiAoYHhmcm1fc3RhdGVfZ2NfdGFza2ApIGFuZCBkZXZpY2Ugc3RhdGUgZmx1c2hpbmcgKGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIGNvcmUgWEZSTSBzdWJzeXN0ZW0uIEl0IGlzIHJlYWNoYWJsZSBieSBjcmVhdGluZyBYRlJNIHN0YXRlcyBhbmQgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGEzOGQ1MjYzYmZmMDk4ZWRlMjQzMmUwNmMxN2JjODRkM2YyZjkzMjBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAyMzo1MDoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuaW5kZXggMzZhNGY2NzkzZWRlZi4uZGUwOTdiYmE4MDNiNyAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuY1xuKysrIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jXG5AQCAtMjI2LDYgKzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gX19yY3UgKnhmcm1fc3RhdGVfYWZpbmZvW05QUk9UT107XG4gXG4gc3RhdGljIERFRklORV9TUElOTE9DSyh4ZnJtX3N0YXRlX2djX2xvY2spO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soeGZybV9zdGF0ZV9kZXZfZ2NfbG9jayk7XG4rc3RhdGljIERFRklORV9NVVRFWCh4ZnJtX3N0YXRlX2djX211dGV4KTtcbiBcbiBpbnQgX194ZnJtX3N0YXRlX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7XG4gXG5AQCAtNjMyLDggKzYzMywxMCBAQCBzdGF0aWMgdm9pZCB4ZnJtX3N0YXRlX2djX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4LCB0bXAsIFx1MDAyNmdjX2xpc3QsIGdjbGlzdClcbiBcdFx0eGZybV9zdGF0ZV9nY19kZXN0cm95KHgpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIH1cbiBcbiBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgeGZybV90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICptZSlcbkBAIC0xMDAwLDYgKzEwMDMsNyBAQCBpbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaVxuIG91dDpcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5ldC1cdTAwM2V4ZnJtLnhmcm1fc3RhdGVfbG9jayk7XG4gXG4rXHRtdXRleF9sb2NrKFx1MDAyNnhmcm1fc3RhdGVfZ2NfbXV0ZXgpO1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnhmcm1fc3RhdGVfZGV2X2djX2xvY2spO1xuIHJlc3RhcnRfZ2M6XG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHgsIHRtcCwgXHUwMDI2eGZybV9zdGF0ZV9kZXZfZ2NfbGlzdCwgZGV2X2djbGlzdCkge1xuQEAgLTEwMTQsNiArMTAxOCw3IEBAIGludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpXG4gXG4gXHR9XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZ4ZnJtX3N0YXRlX2Rldl9nY19sb2NrKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZ4ZnJtX3N0YXRlX2djX211dGV4KTtcbiBcbiBcdHhmcm1fZmx1c2hfZ2MoKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUwOjI2LjU4NjMxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NDUzODM3ODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBmb3IgWEZSTSBTdGF0ZSBHYXJiYWdlIENvbGxlY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBzZWVtcyBsaWtlIGl04oCZcyB0d2Vha2luZyBgbmV0L3hmcm0veGZybV9zdGF0ZS5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgbmV3IG11dGV4LCBgeGZybV9zdGF0ZV9nY19tdXRleGAuIFRoYXQganVtcHMgb3V0IOKAkyBhIG11dGV4IHVzdWFsbHkgbWVhbnMgdGhleSdyZSBhZGRyZXNzaW5nIGEgcmFjZSBjb25kaXRpb24gb3Igc29tZSBzeW5jaHJvbml6YXRpb24gaXNzdWUsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIFhGUk0gc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uLiBNYWtlcyBzZW5zZTsgZnVuY3Rpb25hbCBjb2RlIGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBsaWtlIHRoaXMgb2Z0ZW4gbmVlZHMgY2FyZWZ1bCBzeW5jaHJvbml6YXRpb24uXG5cbk15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgZGV0YWlsczogd2hhdCBhcmUgdGhlIG11dGV4J3MgdXNhZ2VzPyBMZXQncyBjaGVjayBgeGZybV9zdGF0ZV9nY190YXNrYCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4gQWgsIGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGlzIGEgd29ya3F1ZXVlIHRhc2suIFN0YW5kYXJkIHN0dWZmLiBBbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4uLiB0aGF0J3MgY2FsbGVkIGR1cmluZyBkZXZpY2UgZmx1c2hlcy4gVGhhdCdzIGludGVyZXN0aW5nLCBkZXZpY2UgZmx1c2hlcyBjYW4gYmUgdHJpY2t5LlxuXG5XYWl0IGEgc2Vjb25k4oCmIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgKmFjcXVpcmVzKiBgeGZybV9zdGF0ZV9nY19tdXRleGAsIGFuZCAqdGhlbiogYHhmcm1fc3RhdGVfZGV2X2djX2xvY2tgLiBBbmQgYHhmcm1fc3RhdGVfZ2NfdGFza2AgYWxzbyB1c2VzIGB4ZnJtX3N0YXRlX2djX211dGV4YC4gT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIGxvY2sgaGllcmFyY2h5IGhlcmUuIFRoZXkncmUgdHJ5aW5nIHRvIGNhcmVmdWxseSBzZXF1ZW5jZSB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGFuZCBkZXZpY2UgZmx1c2ggb3BlcmF0aW9ucyB0byBhdm9pZCBjb250ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGhpZXJhcmNoeSBmdWxseS4gVGhpcyBtaWdodCBiZSBhIHN1YnRsZSBidXQgY3JpdGljYWwgZml4LlxuXG5MZXQgbWUgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFhGUk0gY29uZmlndXJhdGlvbnMuIGBDT05GSUdfWEZSTWAgaXMgdGhlIGNvcmUsIHJpZ2h0PyBUaW1lIHRvIHVzZSBgZ2l0IGdyZXBgIGFuZCBsb29rIGZvciBhbGwgdGhlIGNhbGxzIHRvIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgYW5kIHNlZSB3aGF0IGNvbmZpZyBkZXBlbmRlbmNpZXMgaXQgaGFzLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpbGwgY2xhcmlmeSB0aGUgbmVjZXNzaXR5IG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUxOjMyLjA0MDE1NzM5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTk0MzIzMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fZGV2X3N0YXRlX2ZsdXNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTM5MTk9c3RhdGljIGludCBib25kX21hc3Rlcl9uZXRkZXZfZXZlbnQodW5zaWduZWQgbG9uZyBldmVudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzkzMS0jaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6MzkzMjpcXHRcXHR4ZnJtX2Rldl9zdGF0ZV9mbHVzaChkZXZfbmV0KGJvbmRfZGV2KSwgYm9uZF9kZXYsIHRydWUpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtMzkzMy0jZW5kaWYgLyogQ09ORklHX1hGUk1fT0ZGTE9BRCAqL1xcbi0tXFxuaW5jbHVkZS9uZXQveGZybS5oPTE3ODc9aW50IHhmcm1fc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCB1OCBwcm90bywgYm9vbCB0YXNrX3ZhbGlkKTtcXG5pbmNsdWRlL25ldC94ZnJtLmg6MTc4ODppbnQgeGZybV9kZXZfc3RhdGVfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaC0xNzg5LWludCB4ZnJtX2Rldl9wb2xpY3lfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01NDY9c3RhdGljIGludCB4ZnJtX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0OC1cXHRpZiAoZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfRVNQKSB7XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NDk6XFx0XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTUwLVxcdFxcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU1Nj1zdGF0aWMgaW50IHhmcm1fZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1Ny17XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NTg6XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTU5LVxcdHhmcm1fZGV2X3BvbGljeV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9ODg4PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjg4OTp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTg5MC17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTE3PXN0YXRpYyBpbmxpbmUgaW50XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjkxODp4ZnJtX2Rldl9zdGF0ZV9mbHVzaF9zZWNjdHhfY2hlY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHRhc2tfdmFsaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTkxOS17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM9OTYyPUVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9mbHVzaCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk2My1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTY0OmludCB4ZnJtX2Rldl9zdGF0ZV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdGFza192YWxpZClcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtOTY1LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy05NzEtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZXQtXFx1MDAzZXhmcm0ueGZybV9zdGF0ZV9sb2NrKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6OTcyOlxcdGVyciA9IHhmcm1fZGV2X3N0YXRlX2ZsdXNoX3NlY2N0eF9jaGVjayhuZXQsIGRldiwgdGFza192YWxpZCk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTk3My1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTEwMjYtfVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzoxMDI3OkVYUE9SVF9TWU1CT0woeGZybV9kZXZfc3RhdGVfZmx1c2gpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0xMDI4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MTozNS42MzQ0ODg2NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MjcwMDM4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIFN0YXRlIEdhcmJhZ2UgQ29sbGVjdGlvbiBhbmQgRGV2aWNlIEZsdXNoIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgYHhmcm1fc3RhdGVfZ2NfdGFza2AgYW5kIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuIFJpZ2h0IGF3YXksIG15IGJyYWluIHRlbGxzIG1lIGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGlzIHRyaWdnZXJlZCB0aHJvdWdoIGEgd29ya3F1ZXVlLCBzbyBpdCdzIGxpa2VseSBydW5uaW5nIGFzeW5jaHJvbm91c2x5LCB3aGljaCBpcyB0eXBpY2FsIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZW4sIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgZ2V0cyBjYWxsZWQgZnJvbSBgeGZybV9kZXZfZG93bmAgYW5kIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYCB3aXRoaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgLiBUaGF0J3Mgc3RhbmRhcmQgZm9yIGNsZWFuaW5nIHVwIHN0YXRlIHdoZW4gYSBkZXZpY2UgZ29lcyBkb3duIG9yIGlzIHVucmVnaXN0ZXJlZCwgbWFrZXMgcGVyZmVjdCBzZW5zZS4gV2hhdCdzIGEgbGl0dGxlIHVudXN1YWwgaXMgdGhlIGNhbGwgZnJvbSBgYm9uZF9tYXN0ZXJfbmV0ZGV2X2V2ZW50YCBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uY2Ag4oCTIHRoYXQncyBib25kIHNwZWNpZmljIGFuZCBtZWFucyB0aGF0IGJvbmRpbmcgY29uZmlndXJhdGlvbnMgbWF5IHJlcXVpcmUgdGhpcyBzdGF0ZSBmbHVzaGluZy5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEl0J3Mgb2J2aW91c2x5IGBDT05GSUdfWEZSTWAsIGJ1dCB0aGUgbm90ZSBhYm91dCBuZWVkaW5nIGBDT05GSUdfWEZSTV9PRkZMT0FEYCBmb3IgdGhlIGJvbmRpbmcgY2FsbCBvZiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGltcG9ydGFudC4gSG93ZXZlciwgYHhmcm1fZGV2X2Rvd25gIGFuZCBgeGZybV9kZXZfdW5yZWdpc3RlcmAgYmVpbmcgaW4gYG5ldC94ZnJtL3hmcm1fZGV2aWNlLmNgIHN1Z2dlc3RzIHRoYXQgdGhlIG1vZHVsZSBpdHNlbGYgaXMgYnVpbHQgd2hlbiBgQ09ORklHX1hGUk1fT0ZGTE9BRGAgaXMgZW5hYmxlZC4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBgbmV0L3hmcm0vTWFrZWZpbGVgIHRvIHZlcmlmeSB1bmRlciB3aGF0IGNvbmRpdGlvbnMgYHhmcm1fZGV2aWNlLmNgIGlzIGFjdHVhbGx5IGNvbXBpbGVkLCB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyB0aG9yb3VnaGx5IGJlZm9yZSBJIGNhbiBmdWxseSBhc3Nlc3MgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxMjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTE6NDEuMDYxNDk1MjExWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjk2NDIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2RldmljZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfWEZSTSkgOj0geGZybV9wb2xpY3kubyB4ZnJtX3N0YXRlLm8geGZybV9oYXNoLm8gXFxcXFxcbm5ldC94ZnJtL01ha2VmaWxlLTE1LVxcdFxcdCAgICAgIHhmcm1faW5wdXQubyB4ZnJtX291dHB1dC5vIFxcXFxcXG5uZXQveGZybS9NYWtlZmlsZToxNjpcXHRcXHQgICAgICB4ZnJtX3N5c2N0bC5vIHhmcm1fcmVwbGF5Lm8geGZybV9kZXZpY2UubyBcXFxcXFxubmV0L3hmcm0vTWFrZWZpbGUtMTctXFx0XFx0ICAgICAgeGZybV9uYXRfa2VlcGFsaXZlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTE6NDEuMTc0NDY1NTM5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyNDkxODE0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgdGhlIEtlcm5lbCBNb2R1bGUgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBgeGZybV9kZXZpY2Uub2AgaXMgZGVmaW5pdGVseSBjb21waWxlZCB3aGVuIHRoZSBgQ09ORklHX1hGUk1gIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBlbmFibGVkLiBUaGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIuIEkgd2FudCB0byB1bmRlcnN0YW5kIGlmIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoYXQgb2JqZWN0IGZpbGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCBhcyB3ZWxsLiBUaGUgcXVlc3Rpb24gdGhhdCdzIGRyaXZpbmcgbWUgbm93IGlzOiBJcyB0aGUgY29kZSBpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2Agd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrPyBJZiBzbywgdGhhdCB3b3VsZCBpbmRpY2F0ZSBhIG11Y2ggbW9yZSBncmFudWxhciBjb250cm9sIG92ZXIgaXRzIGluY2x1c2lvbiwgcHJvYmFibHkgcmVsYXRlZCB0byBoYXJkd2FyZSBvZmZsb2FkaW5nIHN1cHBvcnQuIEl0J3MgdGltZSB0byBjaGVjayB0aGUgc291cmNlIGFuZCBjb25maXJtLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUxOjQ0Ljk5OTM4NjYyM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAzODY3NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1hGUk1fT0ZGTE9BRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjEtXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzoyMjojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtMjMtc3RhdGljIHZvaWQgX194ZnJtX3RyYW5zcG9ydF9wcmVwKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01MjY9c3RhdGljIGludCB4ZnJtX2FwaV9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTI3LXtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjUyODojaWZkZWYgQ09ORklHX1hGUk1fT0ZGTE9BRFxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTI5LVxcdGlmICgoZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfRVNQX1RYX0NTVU0pIFxcdTAwMjZcXHUwMDI2XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUxOjQ1LjEyOTc4MTczMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTMxOTkyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgWEZSTSBEZXZpY2UgQ2xlYW51cCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gc29tZSB4ZnJtIGRldmljZSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldmljZSB0ZWFyZG93biBwcm9jZXNzLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGB4ZnJtX2Rldl9kb3duYCBhbmQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIHdpdGhpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGV2aWNlcyBhcmUgYnJvdWdodCBkb3duIGFuZCB1bnJlZ2lzdGVyZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgcmVzb3VyY2UgbGVha3MuIEknbGwgZm9jdXMgb24gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhvc2UgdHdvIGZ1bmN0aW9ucyBhbmQgaG93IHRoZXkncmUgdXNlZCBpbiB0aGUgbGFyZ2VyIGNvbnRleHQgb2YgdGhlIHhmcm0gaW5mcmFzdHJ1Y3R1cmUuIEl0IGlzIGltcG9ydGFudCB0byBrbm93IGlmIGFueSBvdGhlciBzdWJzeXN0ZW1zIGRlcGVuZCBvbiB0aGlzIHByb2Nlc3MuIFRoaXMgd2lsbCBoZWxwIHdpdGggYSB0YXNrIGF0IGhhbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MTo1MC4zNDI5ODQwNjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNjM0Nzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fZGV2X2Rvd25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jPTUyNj1zdGF0aWMgaW50IHhmcm1fYXBpX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0NS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU0NjpzdGF0aWMgaW50IHhmcm1fZGV2X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU0Ny17XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU2ND1zdGF0aWMgaW50IHhmcm1fZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NzUtXFx0Y2FzZSBORVRERVZfRE9XTjpcXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU3NjpcXHRcXHRyZXR1cm4geGZybV9kZXZfZG93bihkZXYpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTc3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MTo1MC40MjY2MjYyNjRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1MjIwMjE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgWEZSTSBEZXZpY2UgRG93biBQcm9jZWR1cmUqKlxuXG5Pa2F5LCBzbyBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYHhmcm1fZGV2X2Rvd25gIGlzIHRyaWdnZXJlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgZXhwZXJpZW5jZXMgYSBgTkVUREVWX0RPV05gIGV2ZW50LiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGlzLCBpbiB0dXJuLCBsZWFkcyB0byB0aGUgZXhlY3V0aW9uIG9mIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAuIE5vdywgdGhlcmUgYXJlIGEgZmV3IHNjZW5hcmlvcyB0aGF0IHRyaWdnZXIgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYDogYSBkZXZpY2UgZ29pbmcgZG93biwgYmVpbmcgdW5yZWdpc3RlcmVkLCBvciBpbiBjYXNlcyB3aGVyZSB0aGUgYGRldi1cdTAwM2VmZWF0dXJlc2AgaW5jbHVkZXMgdGhlIGBORVRJRl9GX0hXX0VTUGAgZmxhZy4gV2FpdCwgaG9sZCBvbiBhIHNlY29uZC4uLiBteSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHhmcm1fZGV2X3VucmVnaXN0ZXJgICphbHdheXMqIGNhbGxzIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAsIHJlZ2FyZGxlc3Mgb2YgdGhlIGZsYWcuIFRoaXMgc2VlbXMgbGlrZSBhbiBpbXBvcnRhbnQgZGlzdGluY3Rpb24gdG8gY2xhcmlmeS5cblxuRnVydGhlcm1vcmUsIEkga25vdyBgeGZybV9zdGF0ZV9nY190YXNrYCBpcyBpbnZvbHZlZCwgYW5kIGl0IHJ1bnMgdGhyb3VnaCB0aGUgYHhmcm1fc3RhdGVfZ2Nfd29ya2Agd29ya3F1ZXVlLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGRlZXBlciBpbnRvIHdoZXJlIGB4ZnJtX3N0YXRlX2djX3dvcmtgIGlzIGFjdHVhbGx5IGJlaW5nIHNjaGVkdWxlZDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgbGlmZWN5Y2xlIGFuZCB0aW1pbmcgb2YgdGhpcyBwcm9jZXNzIHRvIGVuc3VyZSBpdCdzIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODEyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUxOjU0LjM3ODgzMzI3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MTkxNDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhmcm1fc3RhdGVfZ2Nfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jPTUwPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqeGZybV9zdGF0ZV9jYWNoZSBfX3JvX2FmdGVyX2luaXQ7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTUxLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzo1MjpzdGF0aWMgREVDTEFSRV9XT1JLKHhmcm1fc3RhdGVfZ2Nfd29yaywgeGZybV9zdGF0ZV9nY190YXNrKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtNTMtc3RhdGljIEhMSVNUX0hFQUQoeGZybV9zdGF0ZV9nY19saXN0KTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYz04MDM9dm9pZCBfX3hmcm1fc3RhdGVfZGVzdHJveShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG4tLVxcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MDktXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnhmcm1fc3RhdGVfZ2NfbG9jayk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jOjgxMDpcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZ4ZnJtX3N0YXRlX2djX3dvcmspO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MTEtfVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTMxNDg9dm9pZCB4ZnJtX2ZsdXNoX2djKHZvaWQpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMxNDkte1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYzozMTUwOlxcdGZsdXNoX3dvcmsoXFx1MDAyNnhmcm1fc3RhdGVfZ2Nfd29yayk7XFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMxNTEtfVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jPTMzOTA9dm9pZCB4ZnJtX3N0YXRlX2Zpbmkoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTMzOTYtXFx0eGZybV9zdGF0ZV9mbHVzaChuZXQsIDAsIGZhbHNlKTtcXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6MzM5NzpcXHRmbHVzaF93b3JrKFxcdTAwMjZ4ZnJtX3N0YXRlX2djX3dvcmspO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy0zMzk4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MTo1NC41NjUwMzA3NjNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2NTc2NzM4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmFjZSBDb25kaXRpb24gaW4gdGhlIFhGUk0gU3Vic3lzdGVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gYSByYWNlIGNvbmRpdGlvbi4gSXQgc2VlbXMgdGhlIGB4ZnJtX3N0YXRlX2djX3dvcmtgIGlzIGJlaW5nIHNjaGVkdWxlZCB3aXRoaW4gYF9feGZybV9zdGF0ZV9kZXN0cm95YC4gVGhlIGNvcmUgb2YgdGhpcyBpc3N1ZSBhcHBlYXJzIHRvIGJlIGEgY29uZmxpY3QgYmV0d2VlbiBgeGZybV9zdGF0ZV9nY190YXNrYCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYC4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHR3byBmdW5jdGlvbnMsIGFuZCBhbHNvIHJlbWVtYmVyIHRoYXQgYF9feGZybV9zdGF0ZV9kZXN0cm95YCBpcyB0aGUgb25lIHRoYXQgc2NoZWR1bGVzIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gdGFzay4gTXkgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gYFhGUk1gIGFzIGV4cGVjdGVkLlxuXG5geGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIHRyaWdnZXJlZCB3aGVuIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkIG9yIGJyb3VnaHQgZG93bi4gYHhmcm1fc3RhdGVfZ2NfdGFza2AsIG9uIHRoZSBvdGhlciBoYW5kLCBvcGVyYXRlcyB3aXRoaW4gYSB3b3JrcXVldWUuIEkgcmVhbGx5IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgLlxuXG5MZXQgbWUgdGhpbmsuLi4gY2FuIEkgcmVsaWFibHkgdHJpZ2dlciBgeGZybV9kZXZfc3RhdGVfZmx1c2hgPyBZZXMsIGNyZWF0aW5nIGFuIFhGUk0gc3RhdGUgYW5kIHRoZW4gdGFraW5nIGEgbmV0d29yayBkZXZpY2UgZG93biwgb3IgdW5yZWdpc3RlcmluZyBpdCwgc2hvdWxkIGRvIHRoZSB0cmljay4gV2FpdCwgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBjYWxsZWQgdW5jb25kaXRpb25hbGx5IHdpdGhpbiBgeGZybV9kZXZfdW5yZWdpc3RlcmAuIEkgc2hvdWxkIHZlcmlmeSB0aGF0LiBMZXQgbWUgY2hlY2sgdGhlIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYCBmdW5jdGlvbiBpbiBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2AgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MjowNi4yMjI3MDgzMDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTc3NDc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2Rldl91bnJlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtL3hmcm1fZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0veGZybV9kZXZpY2UuYz01NDY9c3RhdGljIGludCB4ZnJtX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1NS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU1NjpzdGF0aWMgaW50IHhmcm1fZGV2X3VucmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU1Ny17XFxuLS1cXG5uZXQveGZybS94ZnJtX2RldmljZS5jPTU2ND1zdGF0aWMgaW50IHhmcm1fZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NzgtXFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcXG5uZXQveGZybS94ZnJtX2RldmljZS5jOjU3OTpcXHRcXHRyZXR1cm4geGZybV9kZXZfdW5yZWdpc3RlcihkZXYpO1xcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTgwLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6MDYuMzI4NDg5MjMxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODY3Mzg2NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCB0aGlua2luZyB0aHJvdWdoIHRoaXMgbG9naWNhbGx5OlxuXG4qKlJlYWNoaW5nIGFuZCBUZXN0aW5nIFhGUk0gU3RhdGUgRGVzdHJ1Y3Rpb24qKlxuXG5SaWdodCwgc28sIGFzIEkgdW5kZXJzdGFuZCBpdCwgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIGlzIGRlZmluaXRlbHkgdGhlIHRyaWdnZXIgaGVyZS4gSXQncyBjYWxsZWQgc3BlY2lmaWNhbGx5IG9uIHRoZSBgTkVUREVWX1VOUkVHSVNURVJgIGV2ZW50LiBUaGF0IG1lYW5zIGFueSB0aW1lIGEgbmV0d29yayBkZXZpY2UgaXMgdW5yZWdpc3RlcmVkLCB3ZSdyZSBndWFyYW50ZWVkIHRvIHNlZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGNhbGxlZC4gQW5kIGdpdmVuIHRoYXQsIHdlIGtub3cgdGhhdCBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgIGdldHMgaW52b2tlZCB3aGVuIGFuIFhGUk0gc3RhdGUgaXRzZWxmIGlzIGRlc3Ryb3llZC4gVGhhdCBhbGwgc291bmRzIHBlcmZlY3RseSByZWFjaGFibGUgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqdGVzdGFibGUqLiBJIGNhbiBjbGVhcmx5IHNlZSBhIHBhdGggdG8gcmVwcm9kdWNpbmcgdGhpcyBiZWhhdmlvci4gSXQgc2VlbXMgcXVpdGUgc3RyYWlnaHRmb3J3YXJkLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciB0aGUgZGVwZW5kZW5jaWVzLiBXZSd2ZSBpZGVudGlmaWVkIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUgWEZSTSBzdGF0ZSBhcyB0aGUga2V5IGFjdGlvbi4gSSdtIHdvbmRlcmluZyBpZiBYRlJNIGlzIHRoZSBvbmx5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIG5lY2Vzc2FyeSBmb3IgdGhpcyB0ZXN0LCBvciBpZiB0aGVyZSBhcmUgb3RoZXJzIEknbGwgbmVlZCB0byBlbmFibGUgb3IgY29uZmlndXJlIGluIG9yZGVyIHRvIGZ1bGx5IHJlcGxpY2F0ZSB0aGUgc2NlbmFyaW8uIEknbGwgbmVlZCB0byBleHBsb3JlIHRoYXQgZnVydGhlciB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTcwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6MTAuMzE1MjMxMTYzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTM0NTkzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWctNC0jXFxubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXFxubmV0L3hmcm0vS2NvbmZpZy02LVxcdGJvb2xcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTAtXFxubmV0L3hmcm0vS2NvbmZpZzoxMTpjb25maWcgWEZSTV9PRkZMT0FEXFxubmV0L3hmcm0vS2NvbmZpZy0xMi1cXHRib29sXFxubmV0L3hmcm0vS2NvbmZpZy0xMy1cXG5uZXQveGZybS9LY29uZmlnOjE0OmNvbmZpZyBYRlJNX0FMR09cXG5uZXQveGZybS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNDItXFxubmV0L3hmcm0vS2NvbmZpZzo0Mzpjb25maWcgWEZSTV9JTlRFUkZBQ0VcXG5uZXQveGZybS9LY29uZmlnLTQ0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB2aXJ0dWFsIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNTAtXFxubmV0L3hmcm0vS2NvbmZpZzo1MTpjb25maWcgWEZSTV9TVUJfUE9MSUNZXFxubmV0L3hmcm0vS2NvbmZpZy01Mi1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdWIgcG9saWN5IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTYwLVxcbm5ldC94ZnJtL0tjb25maWc6NjE6Y29uZmlnIFhGUk1fTUlHUkFURVxcbm5ldC94ZnJtL0tjb25maWctNjItXFx0Ym9vbCBcXFwiVHJhbnNmb3JtYXRpb24gbWlncmF0ZSBkYXRhYmFzZVxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctNzEtXFxubmV0L3hmcm0vS2NvbmZpZzo3Mjpjb25maWcgWEZSTV9TVEFUSVNUSUNTXFxubmV0L3hmcm0vS2NvbmZpZy03My1cXHRib29sIFxcXCJUcmFuc2Zvcm1hdGlvbiBzdGF0aXN0aWNzXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy04My0jIFJGQyA4MjIxIGxpc3RzIGFzIE1VU1QgYmUgaW1wbGVtZW50ZWQuXFxubmV0L3hmcm0vS2NvbmZpZzo4NDpjb25maWcgWEZSTV9BSFxcbm5ldC94ZnJtL0tjb25maWctODUtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctOTItIyBhbGdvcml0aG1zIHRoYXQgUkZDIDgyMjEgbGlzdHMgYXMgTVVTVCBiZSBpbXBsZW1lbnRlZC5cXG5uZXQveGZybS9LY29uZmlnOjkzOmNvbmZpZyBYRlJNX0VTUFxcbm5ldC94ZnJtL0tjb25maWctOTQtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTA1LVxcbm5ldC94ZnJtL0tjb25maWc6MTA2OmNvbmZpZyBYRlJNX0lQQ09NUFxcbm5ldC94ZnJtL0tjb25maWctMTA3LVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQveGZybS9LY29uZmlnPTEyNT1jb25maWcgTkVUX0tFWV9NSUdSQVRFXFxuLS1cXG5uZXQveGZybS9LY29uZmlnLTE0MC1cXG5uZXQveGZybS9LY29uZmlnOjE0MTpjb25maWcgWEZSTV9JUFRGU1xcbm5ldC94ZnJtL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC94ZnJtL0tjb25maWctMTU2LVxcbm5ldC94ZnJtL0tjb25maWc6MTU3OmNvbmZpZyBYRlJNX0VTUElOVENQXFxubmV0L3hmcm0vS2NvbmZpZy0xNTgtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MjoxMC4zODY1ODE5NDJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2ODQ3Nzg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipYRlJNIFVzZXIgQ29uZmlndXJhdGlvbjogQSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGBYRlJNX1VTRVJgIOKAkyB0aGF0J3MgdGhlIHVzZXItc3BhY2UgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIHRoZSBYRlJNIHN1YnN5c3RlbS4gQ2xlYXJseSwgdGhhdCdzIHdoYXQgd2Ugd2FudCBlbmFibGVkIHRvIGdpdmUgdGhlIHVzZXIgY29udHJvbC4gQW5kIGl0IGxvb2tzIGxpa2UgdGhlIGRlc2lnbiB0aWVzIHRoaXMgdG8gYFhGUk1gIGl0c2VsZjsgdGhhdCdzIHRoZSBjb3JlIGJvb2wsIHRoZSBhY3R1YWwgZmVhdHVyZSBnYXRlIHdoaWNoIGdldHMgc2VsZWN0ZWQgYnkgYWxsIHRoZSB2YXJpb3VzIElQc2VjIHByb3RvY29scywgbGlrZSBgSU5FVF9BSGAgYW5kIGBJTkVUX0VTUGAsIHdoZW4gdGhvc2Ugb3B0aW9ucyBhcmUgY29uZmlndXJlZC4gIFNvLCBubyBzdXJwcmlzZXMgdGhlcmUsIHRoYXQncyBleHBlY3RlZC5cblxuR2l2ZW4gdGhhdCdzIHRoZSBjZW50cmFsIGludGVyZmFjZSBmb3IgY29udHJvbCwgaXQncyBwcmV0dHkgY2xlYXIgd2Ugc2hvdWxkIGVuYWJsZSBgWEZSTV9VU0VSYC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzLCBob3dldmVyLiBJIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGFyZW4ndCBpbnRyb2R1Y2luZyBhbnkgc3VidGxlIGNvbmZsaWN0cyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGJ5IGZsaXBwaW5nIHRoaXMgc3dpdGNoLiBOZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgc3VwcG9ydHMgaXQsIGFuZCB0aGF0IGFueSByZXF1aXJlZCBzdXBwb3J0aW5nIG1vZHVsZXMgYXJlIGFsc28gZW5hYmxlZCBvciBjb3JyZWN0bHkgY29uZmlndXJlZC4gTm90aGluZyB3b3JzZSB0aGFuIGEgcGFydGlhbGx5IGZ1bmN0aW9uYWwgZmVhdHVyZSBiZWNhdXNlIG9mIGEgbWlzc2VkIGRlcGVuZGVuY3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MjoxNC40NTUwNjMxOTJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NjgxNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBYRlJNX1VTRVJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnPTIyPWlmIElORVRcXG5uZXQveGZybS9LY29uZmlnOjIzOmNvbmZpZyBYRlJNX1VTRVJcXG5uZXQveGZybS9LY29uZmlnLTI0LVxcdHRyaXN0YXRlIFxcXCJUcmFuc2Zvcm1hdGlvbiB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0zMS1cXG5uZXQveGZybS9LY29uZmlnOjMyOmNvbmZpZyBYRlJNX1VTRVJfQ09NUEFUXFxubmV0L3hmcm0vS2NvbmZpZy0zMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcGF0aWJsZSBBQkkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6MTQuNTMyNzUxNzMxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMzIwNDY2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIE1vZHVsZSBEZXBlbmRlbmN5IEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBrZXJuZWwgbW9kdWxlcy4gSXQgbG9va3MgbGlrZSBgWEZSTV9VU0VSYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBJTkVUYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbGwgbmVlZCB0byBlbnN1cmUgYm90aCBgSU5FVGAgYW5kIGBYRlJNX1VTRVJgIGFyZSBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9uLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIHVubG9hZHMuXG5cbkhhbmcgb24sIEkgcmVtZW1iZXIgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyBkZWZpbmVkIGluIGB4ZnJtX3N0YXRlLmNgLiBBbmQgKnRoYXQqIGZpbGUgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX1hGUk1gIGlzIGVuYWJsZWQuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2UuIExldCBtZSBjaGVjay4uLiBgeGZybV9kZXZpY2UuY2AgaXMgYWxzbyBjb21waWxlZCB3aGVuIGBDT05GSUdfWEZSTWAgaXMgZW5hYmxlZC4gR29vZC5cblxuQWhhISBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGlzIGNhbGxlZCBieSBgeGZybV9kZXZfdW5yZWdpc3RlcmAgd2hpY2ggaXMgYWN0dWFsbHkgZGVmaW5lZCBpbiBgeGZybV9kZXZpY2UuY2AuIEJ1dCBpcyBgeGZybV9kZXZpY2UuY2AgKmFsd2F5cyogY29tcGlsZWQgd2hlbiBgQ09ORklHX1hGUk1gIGlzIG9uPyBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnLiBZZXAsIHRoZSBgb2JqLSQoQ09ORklHX1hGUk0pIDo9IC4uLiB4ZnJtX2RldmljZS5vIC4uLmAgbGluZSBjb25maXJtcyB0aGF0LlxuXG5Ob3csIHNob3VsZCBJIGNoZWNrIGlmIGBYRlJNX09GRkxPQURgIGlzIG5lZWRlZCB0byBjb3JyZWN0bHkgdW5sb2FkPyBJIHNlZSBgeGZybV9kZXZfZG93bmAgYW5kIGB4ZnJtX2Rldl91bnJlZ2lzdGVyYCBhcmUgYm90aCBpbiBgeGZybV9kZXZpY2UuY2AuIEJ1dCBhcmUgdGhleSB3cmFwcGVkIGluc2lkZSBhbiBgI2lmZGVmIENPTkZJR19YRlJNX09GRkxPQURgIGJsb2NrPyBMZXQgbWUgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6MTkuNzY0ODAxNjY1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2NzEyMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9kZXZfdW5yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS94ZnJtX2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM9NTQ2PXN0YXRpYyBpbnQgeGZybV9kZXZfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NTUtXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1NTY6c3RhdGljIGludCB4ZnJtX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYy01NTcte1xcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01NjQ9c3RhdGljIGludCB4ZnJtX2Rldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4tLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTc4LVxcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XFxubmV0L3hmcm0veGZybV9kZXZpY2UuYzo1Nzk6XFx0XFx0cmV0dXJuIHhmcm1fZGV2X3VucmVnaXN0ZXIoZGV2KTtcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU4MC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUyOjE5Ljg5MTQ3ODgxM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzMyNTk1MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSBwcm9jZXNzaW5nIHRoaXMgdGFzazpcblxuKipEaXZpbmcgaW50byB0aGUgWEZSTSBEZXZpY2UgQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgbmV0L3hmcm0veGZybV9kZXZpY2UuY2Ag4oCTIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGNvZGUgYXJvdW5kIGxpbmUgNTU2LiBJJ20gYXNzdW1pbmcgdGhlcmUncyBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVuaW5nIHRoZXJlIHJlbGF0ZWQgdG8gWEZSTSBkZXZpY2VzLiBHaXZlbiB0aGUgY29udGV4dCwgSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gZGVhbCB3aXRoIGVpdGhlciBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIGRlLXJlZ2lzdHJhdGlvbiwgb3IgcG9zc2libHkgc29tZSBrZXkgaW50ZXJhY3Rpb24gd2l0aGluIHRoZSBYRlJNIHN1YnN5c3RlbS4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYXMgd2VsbCB0byBnZXQgYSBmdWxsIHVuZGVyc3RhbmRpbmcuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MjoyMy4yMjQwNzY5NzRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1fZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQwOlxcdFxcdFxcdHJldHVybiBOT1RJRllfQkFEO1xcbiA1NDE6XFx0I2VuZGlmXFxuIDU0MjpcXHRcXG4gNTQzOlxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gNTQ0OlxcdH1cXG4gNTQ1OlxcdFxcbiA1NDY6XFx0c3RhdGljIGludCB4ZnJtX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDU0NzpcXHR7XFxuIDU0ODpcXHRcXHRpZiAoZGV2LVxcdTAwM2VmZWF0dXJlcyBcXHUwMDI2IE5FVElGX0ZfSFdfRVNQKSB7XFxuIDU0OTpcXHRcXHRcXHR4ZnJtX2Rldl9zdGF0ZV9mbHVzaChkZXZfbmV0KGRldiksIGRldiwgdHJ1ZSk7XFxuIDU1MDpcXHRcXHRcXHR4ZnJtX2Rldl9wb2xpY3lfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbiA1NTE6XFx0XFx0fVxcbiA1NTI6XFx0XFxuIDU1MzpcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIDU1NDpcXHR9XFxuIDU1NTpcXHRcXG4gNTU2OlxcdHN0YXRpYyBpbnQgeGZybV9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA1NTc6XFx0e1xcbiA1NTg6XFx0XFx0eGZybV9kZXZfc3RhdGVfZmx1c2goZGV2X25ldChkZXYpLCBkZXYsIHRydWUpO1xcbiA1NTk6XFx0XFx0eGZybV9kZXZfcG9saWN5X2ZsdXNoKGRldl9uZXQoZGV2KSwgZGV2LCB0cnVlKTtcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbiA1NjI6XFx0fVxcbiA1NjM6XFx0XFxuIDU2NDpcXHRzdGF0aWMgaW50IHhmcm1fZGV2X2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbiA1NjU6XFx0e1xcbiA1NjY6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHRzd2l0Y2ggKGV2ZW50KSB7XFxuIDU2OTpcXHRcXHRjYXNlIE5FVERFVl9SRUdJU1RFUjpcXG4gNTcwOlxcdFxcdFxcdHJldHVybiB4ZnJtX2FwaV9jaGVjayhkZXYpO1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRjYXNlIE5FVERFVl9GRUFUX0NIQU5HRTpcXG4gNTczOlxcdFxcdFxcdHJldHVybiB4ZnJtX2FwaV9jaGVjayhkZXYpO1xcbiA1NzQ6XFx0XFxuIDU3NTpcXHRcXHRjYXNlIE5FVERFVl9ET1dOOlxcbiA1NzY6XFx0XFx0XFx0cmV0dXJuIHhmcm1fZGV2X2Rvd24oZGV2KTtcXG4gNTc3OlxcdFxcbiA1Nzg6XFx0XFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcXG4gNTc5OlxcdFxcdFxcdHJldHVybiB4ZnJtX2Rldl91bnJlZ2lzdGVyKGRldik7XFxuIDU4MDpcXHRcXHR9XFxuIDU4MTpcXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuIDU4MjpcXHR9XFxuIDU4MzpcXHRcXG4gNTg0OlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgeGZybV9kZXZfbm90aWZpZXIgPSB7XFxuIDU4NTpcXHRcXHQubm90aWZpZXJfY2FsbFxcdD0geGZybV9kZXZfZXZlbnQsXFxuIDU4NjpcXHR9O1xcbiA1ODc6XFx0XFxuIDU4ODpcXHR2b2lkIF9faW5pdCB4ZnJtX2Rldl9pbml0KHZvaWQpXFxuIDU4OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUyOjIzLjIyNDE5NzM4NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDcyNjk5OTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFhGUk0gT2ZmbG9hZCBJbml0aWFsaXphdGlvbioqXG5cblJpZ2h0LCBsZXQncyBzZWUsIHRoZSBpc3N1ZSBpc24ndCB3aXRoaW4gYCNpZmRlZiBDT05GSUdfWEZSTV9PRkZMT0FEYC4gVGhhdCdzIHRoZSBvYnZpb3VzIGZpcnN0IGNoZWNrLiBPa2F5LCB0aGF0J3Mgbm90IGl0LiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIGRpdmluZyBkZWVwZXIsIGlzIHRvIGNvbmZpcm0gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgeGZybV9kZXZgIHN0cnVjdHVyZS4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaG93IHRoaXMgaW5pdGlhbGl6YXRpb24gaXMgYWN0dWFsbHkgdHJpZ2dlcmVkLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogd2hlcmUgaXMgYHhmcm1fZGV2X2luaXRgIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggdG8gdW5kZXJzdGFuZCB0aGUgcG9pbnQgb2YgZW50cnkgYW5kIHRoZSByZWxldmFudCBjb250ZXh0LiBHb3R0YSBmaWd1cmUgb3V0IHRoZSBkcml2ZXIgb3IgbW9kdWxlIHRoYXQncyByZXNwb25zaWJsZS4gTGV0J3Mgc2VlIGlmIHRoZSBjb2RlIHRlbGxzIG1lIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTE2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQyMzo1MjoyNi42OTY5MDIzNDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NDY5NDQ2MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGZybV9kZXZfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQveGZybS5oPTIxMTA9c3RhdGljIGlubGluZSB2b2lkIHhmcm1fc3RhdGVzX2RlbGV0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqKnN0YXRlcywgaW50IG4pXFxuLS1cXG5pbmNsdWRlL25ldC94ZnJtLmgtMjExNy1cXG5pbmNsdWRlL25ldC94ZnJtLmg6MjExODp2b2lkIF9faW5pdCB4ZnJtX2Rldl9pbml0KHZvaWQpO1xcbmluY2x1ZGUvbmV0L3hmcm0uaC0yMTE5LVxcbi0tXFxubmV0L3hmcm0veGZybV9kZXZpY2UuYz01ODQ9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4ZnJtX2Rldl9ub3RpZmllciA9IHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmMtNTg3LVxcbm5ldC94ZnJtL3hmcm1fZGV2aWNlLmM6NTg4OnZvaWQgX19pbml0IHhmcm1fZGV2X2luaXQodm9pZClcXG5uZXQveGZybS94ZnJtX2RldmljZS5jLTU4OS17XFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jPTQ0MDQ9dm9pZCBfX2luaXQgeGZybV9pbml0KHZvaWQpXFxuLS1cXG5uZXQveGZybS94ZnJtX3BvbGljeS5jLTQ0MTAtXFx0cmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2eGZybV9uZXRfb3BzKTtcXG5uZXQveGZybS94ZnJtX3BvbGljeS5jOjQ0MTE6XFx0eGZybV9kZXZfaW5pdCgpO1xcbm5ldC94ZnJtL3hmcm1fcG9saWN5LmMtNDQxMi1cXHR4ZnJtX2lucHV0X2luaXQoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6MzAuNTQzODUzMDk3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjkyNDkyNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIFN0YXRlIENsZWFudXAgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIFhGUk0gY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoZXkndmUgYWRkcmVzc2VkIHRoaXMgcmFjZSBjb25kaXRpb24uIEkgc2VlIGB4ZnJtX2Rldl9pbml0YCBpcyBjYWxsZWQgZnJvbSBgeGZybV9pbml0YCwgd2hpY2ggc2V0cyB1cCBgeGZybV9kZXZfbm90aWZpZXJgIGlmIHRoZSBgQ09ORklHX1hGUk1gIGNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZC4gVGhhdCBtZWFucyB3ZSdyZSByZWdpc3RlcmluZyBhIG5vdGlmaWVyLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgYHhmcm1fZGV2X3VucmVnaXN0ZXJgIGlzIGdvaW5nIHRvIGJlIGNhbGxlZCBvbiBldmVyeSBgTkVUREVWX1VOUkVHSVNURVJgIGV2ZW50LlxuXG5UaGVyZWZvcmUsIGZvciBldmVyeSBkZXZpY2UgdW5yZWdpc3RyYXRpb24sIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgaXMgYmVpbmcgY2FsbGVkIGlmIGBDT05GSUdfWEZSTWAgaXMgZW5hYmxlZC4gVGhhdCdzIGEga2V5IHBvaW50LiBBbHNvLCBJJ20gbm90aW5nIHRoYXQgYHhmcm1fc3RhdGVfZ2NfdGFza2AgZ2V0cyBjYWxsZWQgdmlhIGEgd29ya3F1ZXVlIHdoZW4gYW4gWEZSTSBzdGF0ZSBpcyBkZXN0cm95ZWQuIFRoaXMgc3VnZ2VzdHMgYSBkZXNpZ24gdG8gaGFuZGxlIHRoZSBjbGVhbnVwIGFzeW5jaHJvbm91c2x5LCB3aGljaCBpcyBsaWtlbHkgdGhlIGZpeCBmb3IgdGhlIHJhY2UuXG5cbkdpdmVuIHRoaXMsIEkgc2hvdWxkIGZvY3VzIG9uIGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGAgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uLiBBaGEsIGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBhbHNvIGNvbnNpZGVyIHdoYXQgY2FsbHMgaXQuIExldCBtZSBsb29rIGF0IGBfX3hmcm1fc3RhdGVfZGVzdHJveWAgc2luY2UgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBzY2hlZHVsZXMgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiB0YXNrLiBJIGFsc28gd2FudCB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gaW50byBgeGZybV9zdGF0ZV9mbHVzaGAgYW5kIGB4ZnJtX2ZsdXNoX2djYC4gSSdsbCBkb3VibGUgY2hlY2sgYHhmcm1fc3RhdGVfZ2NfdGFza2AgaXMgaW5kZWVkIHN0YXRpYy4gWWVwLCBpdCBpcy4gU28sIGxldCdzIGxvb2sgY2xvc2VseSBhdCBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgIGFuZCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIHN0YXRlcyBhcmUgZGVzdHJveWVkIGFuZCBmbHVzaGVkLlxuTGV0IG1lIGRvdWJsZSBjaGVjayBob3cgYF9feGZybV9zdGF0ZV9kZXN0cm95YCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0NjUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6MzYuNjczMTA1NTU3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjA1NzcyNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX194ZnJtX3N0YXRlX2Rlc3Ryb3lcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0veGZybV9zdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1fc3RhdGUuYz03ODM9dm9pZCB4ZnJtX2Rldl9zdGF0ZV9mcmVlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KVxcbi0tXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTgwMi1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6ODAzOnZvaWQgX194ZnJtX3N0YXRlX2Rlc3Ryb3koc3RydWN0IHhmcm1fc3RhdGUgKngpXFxubmV0L3hmcm0veGZybV9zdGF0ZS5jLTgwNC17XFxuLS1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmMtODExLX1cXG5uZXQveGZybS94ZnJtX3N0YXRlLmM6ODEyOkVYUE9SVF9TWU1CT0woX194ZnJtX3N0YXRlX2Rlc3Ryb3kpO1xcbm5ldC94ZnJtL3hmcm1fc3RhdGUuYy04MTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUyOjM3LjE5MzY5MzU2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDQ3MTIwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGEgcGFydGljdWxhciBzZXQgb2YgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsJ3MgWEZSTSBzdWJzeXN0ZW0uIEkgc2VlIHRoYXQgYF9feGZybV9zdGF0ZV9kZXN0cm95YCBhbmQgYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBhcmUgaW5kZWVkIGV4cG9ydGVkIHN5bWJvbHMuIFRoYXQncyBhIGdvb2Qgc3RhcnQuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMsIFwiSXMgYFhGUk1fVVNFUmAgZW5vdWdoIHRvIHJlYWNoIGFsbCB0aGUgbmVjZXNzYXJ5IGNvZGUgcGF0aHM/XCIgUXVpY2tseSBjaGVja2luZywgSSBzZWUgdGhhdCBgWEZSTV9VU0VSYCBkZXBlbmRzIG9uIGBJTkVUYC4gIEFoLCByaWdodCwgbmV0d29ya2luZyBiYXNpY3MuIFRoYXQgbWVhbnMgSSB0aGVvcmV0aWNhbGx5IG5lZWQgYm90aCBgSU5FVGAgYW5kIGBYRlJNX1VTRVJgLiBCdXQgaG9sZCBvbi4uLiBgSU5FVGAgaXMgZXNzZW50aWFsbHkgYSBnaXZlbiBpbiBhIHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJdCdzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCwgdGhvdWdoIEkgY291bGQgbGlzdCBpdCBpZiByZXF1aXJlZC4gQWN0dWFsbHksIG9uIHNlY29uZCB0aG91Z2h0LCBgWEZSTV9VU0VSYCBhbG9uZSBzaG91bGQgc3VmZmljZSBpbiBtb3N0IGNvbW1vbiBjYXNlcy5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG8gSSBuZWVkIGBYRlJNX09GRkxPQURgPyBUaGUgZnVuY3Rpb24gYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCBpcyB1bmNvbmRpdGlvbmFsbHkgY2FsbGVkIHdpdGhpbiBgeGZybV9kZXZfdW5yZWdpc3RlcmAuIFRoYXQgKnN1Z2dlc3RzKiBgWEZSTV9PRkZMT0FEYCBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgdG8gaGl0IHRoYXQgcGFydGljdWxhciBjb2RlIHBhdGguIEhvd2V2ZXIsIGBYRlJNX09GRkxPQURgIGNvdWxkIGNlcnRhaW5seSBlbmFibGUgbW9yZSwgcG90ZW50aWFsbHkgcmVsZXZhbnQsIG9mZmxvYWQtcmVsYXRlZCBwYXRocy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZGlnIGRlZXBlciBhbmQgaW52ZXN0aWdhdGUgdGhlIGV4YWN0IGRlcGVuZGVuY2llcyBvZiBgWEZSTV9PRkZMT0FEYCBpdHNlbGYsIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gVGhpcyByZXF1aXJlcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDIxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDIzOjUyOjQyLjE5ODQwODQ1N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIzMzY5MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fT0ZGTE9BRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xMC1cXG5uZXQveGZybS9LY29uZmlnOjExOmNvbmZpZyBYRlJNX09GRkxPQURcXG5uZXQveGZybS9LY29uZmlnLTEyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6NDIuMjcwNzUwNzE2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4ODg0NDI2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRlJNIENvbmZpZ3VyYXRpb24gYW5kIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBYRlJNIGNvZGUsIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSd2ZSBnb3QgdG8gdW5kZXJzdGFuZCBpcyBob3cgaXQncyBjb25maWd1cmVkLiBgWEZSTV9PRkZMT0FEYCBpcyB0aGUgdHJpY2t5IG9uZSDigJMgaXQncyBhIGhpZGRlbiBib29sLCBzbyBJIGNhbid0IGRpcmVjdGx5IGVuYWJsZSBpdC4gVGhlIGRyaXZlcnMgdGhhdCBzdXBwb3J0IGl0IHNlbGVjdCBpdCwgc28gSSdtIGVzc2VudGlhbGx5IGF0IHRoZWlyIG1lcmN5IGZvciB0aGF0IHBhcnRpY3VsYXIgZmVhdHVyZS5cblxuTm93LCBsZXQncyBzZWUgd2hhdCBvdGhlciBjb25maWdzIGFyZSByZWxldmFudCBoZXJlLiBgWEZSTV9BTEdPYCBpcyBzZWxlY3RlZCBieSBgWEZSTV9VU0VSYC4gQWhhLCBgWEZSTV9VU0VSYCBpcyB0aGUga2V5ISBUaGF0J3MgdGhlIG1haW4gY29uZmlnIHRvIGVuYWJsZSB0aGUgWEZSTSB1c2VyIGludGVyZmFjZS4gKlRoYXQqIGlzIHdoYXQgYWxsb3dzIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciB0byBjb21lIGluIGFuZCBjcmVhdGUgWEZSTSBzdGF0ZXMgYW5kIHRyaWdnZXIgdGhlIHJhY2UgY29uZGl0aW9uLiBTbywgaXQncyBgWEZSTV9VU0VSYCB0aGF0IEkgbmVlZCB0byBmb2N1cyBvbi5cblxuVGhlIGNyaXRpY2FsIHN5bWJvbHMgSSdtIHdhdGNoaW5nIGFyZSBgeGZybV9kZXZfc3RhdGVfZmx1c2hgIGFuZCBgX194ZnJtX3N0YXRlX2Rlc3Ryb3lgLlxuXG5MZXQncyBnbyBiYWNrIGFuZCBjYXJlZnVsbHkgcmV2aWV3IHRoaXMgcGF0Y2gsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHN5bmNocm9uaXphdGlvbi4gVGhlIHBhdGNoIGludHJvZHVjZXMgYHhmcm1fc3RhdGVfZ2NfbXV0ZXhgIHRvIHN5bmNocm9uaXplIGB4ZnJtX3N0YXRlX2djX3Rhc2tgIGFuZCBgeGZybV9kZXZfc3RhdGVfZmx1c2hgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgbWVhbnQgdG8gYWRkcmVzcyBhIGNvbmN1cnJlbmN5IGlzc3VlLCBwcm9iYWJseSBpbnZvbHZpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIG9mIFhGUk0gc3RhdGVzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gaXMgc3BlY2lmaWNhbGx5IGludGVuZGVkIHRvIHByb3RlY3QgdGhlIGBnY19saXN0YCBhbmQgYHhmcm1fc3RhdGVfZGV2X2djX2xpc3RgIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBjaGFuZ2Ugc2hvdWxkIHJlc29sdmUgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24uXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgdG8ga2VlcCB0aGlzIGluIG1pbmQuIEknbGwgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gcmVwb3J0IG15IGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA0OCwiT3V0cHV0VG9rZW5zIjoxMzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMjM6NTI6NTAuMTU5MTk3ODJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5NTIzNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fVVNFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhmcm1fZGV2X3N0YXRlX2ZsdXNoXCIsXG4gICAgXCJfX3hmcm1fc3RhdGVfZGVzdHJveVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbXV0ZXggYHhmcm1fc3RhdGVfZ2NfbXV0ZXhgIHRvIHN5bmNocm9uaXplIFhGUk0gc3RhdGUgZ2FyYmFnZSBjb2xsZWN0aW9uIChgeGZybV9zdGF0ZV9nY190YXNrYCkgYW5kIGRldmljZSBzdGF0ZSBmbHVzaGluZyAoYHhmcm1fZGV2X3N0YXRlX2ZsdXNoYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgY29yZSBYRlJNIHN1YnN5c3RlbS4gSXQgaXMgcmVhY2hhYmxlIGJ5IGNyZWF0aW5nIFhGUk0gc3RhdGVzIGFuZCB1bnJlZ2lzdGVyaW5nIG5ldHdvcmsgZGV2aWNlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX1VTRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnJtX2Rldl9zdGF0ZV9mbHVzaFwiLFxuICAgIFwiX194ZnJtX3N0YXRlX2Rlc3Ryb3lcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG11dGV4IGB4ZnJtX3N0YXRlX2djX211dGV4YCB0byBzeW5jaHJvbml6ZSBYRlJNIHN0YXRlIGdhcmJhZ2UgY29sbGVjdGlvbiAoYHhmcm1fc3RhdGVfZ2NfdGFza2ApIGFuZCBkZXZpY2Ugc3RhdGUgZmx1c2hpbmcgKGB4ZnJtX2Rldl9zdGF0ZV9mbHVzaGApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIGNvcmUgWEZSTSBzdWJzeXN0ZW0uIEl0IGlzIHJlYWNoYWJsZSBieSBjcmVhdGluZyBYRlJNIHN0YXRlcyBhbmQgdW5yZWdpc3RlcmluZyBuZXR3b3JrIGRldmljZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjntwz[1] Phase: Succeeded StartedAt: 2026-07-31 23:53:02 +0000 UTC FinishedAt: 2026-07-31 23:53:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 23:53:02 +0000 UTC FinishedAt: 2026-07-31 23:53:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2] Phase: Succeeded StartedAt: 2026-07-31 23:53:02 +0000 UTC FinishedAt: 2026-08-01 03:48:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 23:53:02 +0000 UTC FinishedAt: 2026-08-01 03:48:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 23:53:02 +0000 UTC FinishedAt: 2026-07-31 23:53:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 23:53:02 +0000 UTC FinishedAt: 2026-07-31 23:53:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjntwz/series-workflowjntwz-convert-artifact-3132433301/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 23:53:37 +0000 UTC FinishedAt: 2026-08-01 00:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 23:53:37 +0000 UTC FinishedAt: 2026-08-01 00:14:25 +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:*49c56691-bfa1-4d54-b1a6-d28abc184aba,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-workflowjntwz/series-workflowjntwz-convert-artifact-3132433301/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": "8f7b41df-0a7b-4145-bee2-917080861369", "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-workflowjntwz/series-workflowjntwz-build-action-4084562939/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 23:53:37 +0000 UTC FinishedAt: 2026-08-01 00:14:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*49c56691-bfa1-4d54-b1a6-d28abc184aba,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-workflowjntwz/series-workflowjntwz-convert-artifact-3132433301/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": "8f7b41df-0a7b-4145-bee2-917080861369", "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-workflowjntwz/series-workflowjntwz-build-action-4084562939/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 00:14:25 +0000 UTC FinishedAt: 2026-08-01 00:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 00:14:25 +0000 UTC FinishedAt: 2026-08-01 00:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 00:14:25 +0000 UTC FinishedAt: 2026-08-01 00:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 00:14:25 +0000 UTC FinishedAt: 2026-08-01 00:14:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjntwz/series-workflowjntwz-convert-artifact-2222274416/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 00:14:35 +0000 UTC FinishedAt: 2026-08-01 00:16:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 00:14:35 +0000 UTC FinishedAt: 2026-08-01 00:16:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8f7b41df-0a7b-4145-bee2-917080861369,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-workflowjntwz/series-workflowjntwz-build-action-4084562939/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-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 00:16:25 +0000 UTC FinishedAt: 2026-08-01 00:16:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 00:16:25 +0000 UTC FinishedAt: 2026-08-01 00:16:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 00:16:25 +0000 UTC FinishedAt: 2026-08-01 00:42:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 00:16:25 +0000 UTC FinishedAt: 2026-08-01 00:42:27 +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:*49c56691-bfa1-4d54-b1a6-d28abc184aba,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-workflowjntwz/series-workflowjntwz-convert-artifact-2222274416/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": "fa7dcb9d-9819-4573-9116-92dcd867d048", "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-workflowjntwz/series-workflowjntwz-build-action-352295020/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 00:16:25 +0000 UTC FinishedAt: 2026-08-01 00:42:17 +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:*49c56691-bfa1-4d54-b1a6-d28abc184aba,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-workflowjntwz/series-workflowjntwz-convert-artifact-2222274416/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": "fa7dcb9d-9819-4573-9116-92dcd867d048", "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-workflowjntwz/series-workflowjntwz-build-action-352295020/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 00:42:27 +0000 UTC FinishedAt: 2026-08-01 00:42:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 00:42:27 +0000 UTC FinishedAt: 2026-08-01 00:42:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 00:42:27 +0000 UTC FinishedAt: 2026-08-01 00:44:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 00:42:27 +0000 UTC FinishedAt: 2026-08-01 00:44:37 +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:*fa7dcb9d-9819-4573-9116-92dcd867d048,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-workflowjntwz/series-workflowjntwz-build-action-352295020/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-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 00:44:47 +0000 UTC FinishedAt: 2026-08-01 03:48:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 00:44:47 +0000 UTC FinishedAt: 2026-08-01 03:48:04 +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":["xfrm_dev_state_flush","__xfrm_state_destroy"],"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:*8f7b41df-0a7b-4145-bee2-917080861369,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fa7dcb9d-9819-4573-9116-92dcd867d048,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-workflowjntwz/series-workflowjntwz-build-action-4084562939/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-workflowjntwz/series-workflowjntwz-build-action-352295020/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 00:44:47 +0000 UTC FinishedAt: 2026-08-01 00:45:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 00:44:47 +0000 UTC FinishedAt: 2026-08-01 00:45:15 +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":["xfrm_dev_state_flush","__xfrm_state_destroy"],"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-workflowjntwz/series-workflowjntwz-convert-artifact-684372201/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 00:44:47 +0000 UTC FinishedAt: 2026-08-01 00:44:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 00:44:47 +0000 UTC FinishedAt: 2026-08-01 00:44:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 00:44:48 +0000 UTC FinishedAt: 2026-08-01 00:44:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 00:45:29 +0000 UTC FinishedAt: 2026-08-01 03:48:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjntwz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["xfrm_dev_state_flush","__xfrm_state_destroy"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2fbade66245059c78daeaccfce13ecf499fffb51","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_USER"],"series_id":"75468e90-af4d-4760-9ccf-00ddf46da748","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 00:45:29 +0000 UTC FinishedAt: 2026-08-01 03:47:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8f7b41df-0a7b-4145-bee2-917080861369,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fa7dcb9d-9819-4573-9116-92dcd867d048,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-workflowjntwz/series-workflowjntwz-build-action-4084562939/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-workflowjntwz/series-workflowjntwz-build-action-352295020/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-workflowjntwz/series-workflowjntwz-convert-artifact-684372201/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,}