Name: series-workflowjpqpx Phase: Succeeded StartedAt: 2026-09-08 08:56:33 +0000 UTC FinishedAt: 2026-09-08 13:09:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[0] Phase: Succeeded StartedAt: 2026-09-08 08:56:33 +0000 UTC FinishedAt: 2026-09-08 09:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 08:56:33 +0000 UTC FinishedAt: 2026-09-08 09:20:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "8d6cd188508513503805c156165de38e4e4a8615", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "8d6cd188508513503805c156165de38e4e4a8615", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP" ], "series_id": "54a96ed3-8405-4899-a9a0-896307bdfecc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pad_compress_skb", "ppp_ioctl", "ppp_prepare_tx_skb", "ppp_setup" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZF9jb21wcmVzc19za2ImIzM0OywKICAgICYjMzQ7cHBwX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcF9wcmVwYXJlX3R4X3NrYiYjMzQ7LAogICAgJiMzNDtwcHBfc2V0dXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG1pbmltdW0gYm91bmRzIGNoZWNrcyBmb3IgUFBQIE1SVSAodmlhIFBQUElPQ1NNUlUpIGFuZCBNVFUgKHNldHRpbmcgZGV2LVx1MDAzZW1pbl9tdHUpLCBhdm9pZGluZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlbHkgc21hbGwgTVRVIHZhbHVlcy4gSXQgYWxzbyBzbmFwc2hvdHMgZGV2LVx1MDAzZW10dSB1c2luZyBSRUFEX09OQ0UgaW4gcGFkX2NvbXByZXNzX3NrYigpIHRvIGF2b2lkIGluY29uc2lzdGVudCBNVFUgcmVhZHMgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBjb21wcmVzc2lvbiBzaXppbmcuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LWRlcGVuZGVudCBjb250cm9sIGZsb3cuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgc2l6aW5nIGlzc3VlcyByZWxhdGVkIHRvIE1UVS9NUlUgY2FsY3VsYXRpb25zIGFyZSBvdXQtb2YtYm91bmRzIG9yIGRhdGEgcmFjZSBpc3N1ZXMgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgS0NTQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgUFBQIG5ldHdvcmsgZGV2aWNlIGNvZGUgaW4gZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMuIEl0IGVuZm9yY2VzIG1pbmltdW0gYW5kIG1heGltdW0gYm91bmRzIGNoZWNrcyBvbiBNUlUgaW4gcHBwX2lvY3RsIChQUFBJT0NTTVJVKSwgc2V0cyBkZXYtXHUwMDNlbWluX210dSBpbiBwcHBfc2V0dXAsIGFuZCB1c2VzIFJFQURfT05DRSBmb3IgTVRVIHJlYWRpbmcgaW4gcGFkX2NvbXByZXNzX3NrYi4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMgb3IgZWRnZSBjYXNlcyBpbiBQUFAgTVRVL01SVSBuZWdvdGlhdGlvbiBhbmQgcGFja2V0IGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjQyNDVkYmU5OWMyYzA3NGJlN2UyMjllYmYxMDZiN2M3NTE2ODQyYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDk6MTk6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuaW5kZXggMWE2MTBhMTg4OTNiYS4uNDAyMjExNzY4Y2Y1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAXG4gXG4gI2RlZmluZSBQUFBfUFJPVE9fTEVOXHQyXG4gI2RlZmluZSBQUFBfTENQX0hEUkxFTlx0NFxuJiM0MzsjZGVmaW5lIFBQUF9NSU5fTVRVXHQxMjhcbiYjNDM7I2RlZmluZSBQUFBfTUlOX01SVVx0MTI4XG4gXG4gLyogVGhlIGZpbHRlciBpbnN0cnVjdGlvbnMgZ2VuZXJhdGVkIGJ5IGxpYnBjYXAgYXJlIGNvbnN0cnVjdGVkXG4gICogYXNzdW1pbmcgYSBmb3VyLWJ5dGUgUFBQIGhlYWRlciBvbiBlYWNoIHBhY2tldCwgd2hlcmUgdGhlIGxhc3RcbkBAIC04MDgsNiAmIzQzOzgxMCwxMCBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0Y2FzZSBQUFBJT0NTTVJVOlxuIFx0XHRpZiAoZ2V0X3VzZXIodmFsLCBwKSlcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDNjIFBQUF9NSU5fTVJVIHx8IHZhbCBcdTAwM2UgSU5UX01BWCAtIFBQUF9IRFJMRU4gLSAxKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuIFx0XHRwcHBfcmVjdl9sb2NrKHBwcCk7XG4gXHRcdHBwcC1cdTAwM2VtcnUgPSB2YWw7XG4gXHRcdHBwcF9yZWN2X3VubG9jayhwcHApO1xuQEAgLTE2MjgsNiAmIzQzOzE2MzQsNyBAQCBzdGF0aWMgdm9pZCBwcHBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBQUFBfSERSTEVOO1xuIFx0ZGV2LVx1MDAzZW10dSA9IFBQUF9NUlU7XG4mIzQzO1x0ZGV2LVx1MDAzZW1pbl9tdHUgPSBQUFBfTUlOX01UVTtcbiBcdGRldi1cdTAwM2VhZGRyX2xlbiA9IDA7XG4gXHRkZXYtXHUwMDNldHhfcXVldWVfbGVuID0gMztcbiBcdGRldi1cdTAwM2V0eXBlID0gQVJQSFJEX1BQUDtcbkBAIC0xNzE5LDEwICYjNDM7MTcyNiwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XG4mIzQzO1x0aW50IG10dSA9IFJFQURfT05DRShkZXYtXHUwMDNlbXR1KTtcbiBcdGludCBsZW47XG4tXHRpbnQgbmV3X3NrYl9zaXplID0gZGV2LVx1MDAzZW10dSAmIzQzO1xuJiM0MztcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgJiM0MztcbiBcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgJiM0MzsgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbi1cdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gZGV2LVx1MDAzZW10dSAmIzQzO1xuJiM0MztcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gbXR1ICYjNDM7XG4gXHRcdHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wX2V4dHJhICYjNDM7IFBQUF9IRFJMRU47XG4gXG4gXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZF9jb21wcmVzc19za2ImIzM0OywKICAgICYjMzQ7cHBwX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcF9wcmVwYXJlX3R4X3NrYiYjMzQ7LAogICAgJiMzNDtwcHBfc2V0dXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIFBQUCBuZXR3b3JrIGRldmljZSBjb2RlIGluIGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLiBJdCBlbmZvcmNlcyBtaW5pbXVtIGFuZCBtYXhpbXVtIGJvdW5kcyBjaGVja3Mgb24gTVJVIGluIHBwcF9pb2N0bCAoUFBQSU9DU01SVSksIHNldHMgZGV2LVx1MDAzZW1pbl9tdHUgaW4gcHBwX3NldHVwLCBhbmQgdXNlcyBSRUFEX09OQ0UgZm9yIE1UVSByZWFkaW5nIGluIHBhZF9jb21wcmVzc19za2IuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcgdG8gZGV0ZWN0IHJlZ3Jlc3Npb25zIG9yIGVkZ2UgY2FzZXMgaW4gUFBQIE1UVS9NUlUgbmVnb3RpYXRpb24gYW5kIHBhY2tldCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI0MjQ1ZGJlOTljMmMwNzRiZTdlMjI5ZWJmMTA2YjdjNzUxNjg0MmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDA5OjE5OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwppbmRleCAxYTYxMGExODg5M2JhLi40MDIyMTE3NjhjZjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwpAQCAtNzIsNiAmIzQzOzcyLDggQEAKIAogI2RlZmluZSBQUFBfUFJPVE9fTEVOCTIKICNkZWZpbmUgUFBQX0xDUF9IRFJMRU4JNAomIzQzOyNkZWZpbmUgUFBQX01JTl9NVFUJMTI4CiYjNDM7I2RlZmluZSBQUFBfTUlOX01SVQkxMjgKIAogLyogVGhlIGZpbHRlciBpbnN0cnVjdGlvbnMgZ2VuZXJhdGVkIGJ5IGxpYnBjYXAgYXJlIGNvbnN0cnVjdGVkCiAgKiBhc3N1bWluZyBhIGZvdXItYnl0ZSBQUFAgaGVhZGVyIG9uIGVhY2ggcGFja2V0LCB3aGVyZSB0aGUgbGFzdApAQCAtODA4LDYgJiM0Mzs4MTAsMTAgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIAljYXNlIFBQUElPQ1NNUlU6CiAJCWlmIChnZXRfdXNlcih2YWwsIHApKQogCQkJYnJlYWs7CiYjNDM7CQlpZiAodmFsICZsdDsgUFBQX01JTl9NUlUgfHwgdmFsICZndDsgSU5UX01BWCAtIFBQUF9IRFJMRU4gLSAxKSB7CiYjNDM7CQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAkJcHBwX3JlY3ZfbG9jayhwcHApOwogCQlwcHAtJmd0O21ydSA9IHZhbDsKIAkJcHBwX3JlY3ZfdW5sb2NrKHBwcCk7CkBAIC0xNjI4LDYgJiM0MzsxNjM0LDcgQEAgc3RhdGljIHZvaWQgcHBwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAlkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IFBQUF9IRFJMRU47CiAJZGV2LSZndDttdHUgPSBQUFBfTVJVOwomIzQzOwlkZXYtJmd0O21pbl9tdHUgPSBQUFBfTUlOX01UVTsKIAlkZXYtJmd0O2FkZHJfbGVuID0gMDsKIAlkZXYtJmd0O3R4X3F1ZXVlX2xlbiA9IDM7CiAJZGV2LSZndDt0eXBlID0gQVJQSFJEX1BQUDsKQEAgLTE3MTksMTAgJiM0MzsxNzI2LDExIEBAIHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7CiAJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CiYjNDM7CWludCBtdHUgPSBSRUFEX09OQ0UoZGV2LSZndDttdHUpOwogCWludCBsZW47Ci0JaW50IG5ld19za2Jfc2l6ZSA9IGRldi0mZ3Q7bXR1ICYjNDM7CiYjNDM7CWludCBuZXdfc2tiX3NpemUgPSBtdHUgJiM0MzsKIAkJcHBwLSZndDt4Y29tcC0mZ3Q7Y29tcF9leHRyYSAmIzQzOyBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbjsKLQlpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IGRldi0mZ3Q7bXR1ICYjNDM7CiYjNDM7CWludCBjb21wcmVzc29yX3NrYl9zaXplID0gbXR1ICYjNDM7CiAJCXBwcC0mZ3Q7eGNvbXAtJmd0O2NvbXBfZXh0cmEgJiM0MzsgUFBQX0hEUkxFTjsKIAogCWlmIChza2JfbGluZWFyaXplKHNrYikpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUFBQIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgYWN0aW9uIGlzIGhhcHBlbmluZyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSBob3cgaXQgYWZmZWN0cyBQUFAgZnVuY3Rpb25hbGl0eS4KCkZpcnN0IGdsYW5jZTogaXQmIzM5O3MgYWRkaW5nIGBQUFBfTUlOX01UVSAxMjhgIGFuZCBgUFBQX01JTl9NUlUgMTI4YC4gSG1tLCBlc3RhYmxpc2hpbmcgbWluaW11bXMgZm9yIE1UVSBhbmQgTVJVLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBzdWdnZXN0cyB0aGVyZSB3YXMgbm8gc3RyaWN0IGxvd2VyIGxpbWl0IGJlZm9yZS4KClRoZW4sIGRpdmluZyBpbnRvIGBwcHBfaW9jdGxgOiB1bmRlciBgUFBQSU9DU01SVWAsIHRoZXJlJiMzOTtzIG5vdyBhIGNoZWNrLiBJdCB2YWxpZGF0ZXMgdGhlIE1SVSB2YWx1ZTogYGlmICh2YWwgJmx0OyBQUFBfTUlOX01SVSB8fCB2YWwgJmd0OyBJTlRfTUFYIC0gUFBQX0hEUkxFTiAtIDEpYC4gU28gaXQmIzM5O3MgZW5zdXJpbmcgdGhhdCB0aGUgcmVxdWVzdGVkIE1SVSBtZWV0cyB0aGlzIG1pbmltdW0gYW5kIGRvZXNuJiMzOTt0IGV4Y2VlZCBhIHNhZmUgdXBwZXIgYm91bmQsIHRoZSBjaGVjayBmb3IgYW4gb3ZlcmZsb3cgb24gdGhlIGFkZGl0aW9uIG9mIGBQUFBfSERSTEVOYCBzdWdnZXN0cyBpdCYjMzk7cyB0byBwcmV2ZW50IGEgYnVmZmVyIG92ZXJmbG93LiBSZXR1cm5pbmcgYC1FSU5WQUxgIGlzIHN0YW5kYXJkIHByYWN0aWNlIHdoZW4gdGhlIE1SVSBpcyBpbnZhbGlkLiBTZW5zaWJsZS4KCk5leHQsIGBwcHBfc2V0dXBgIG5vdyBzZXRzIGBkZXYtJmd0O21pbl9tdHUgPSBQUFBfTUlOX01UVTtgLiBTbywgdGhpcyBgbWluX210dWAgbWVtYmVyIGlzIGJlaW5nIGluaXRpYWxpemVkIGFuZCBpdCYjMzk7cyBiZWluZyBzZXQgdG8gdGhlIG1pbmltdW0gdmFsdWUgd2UgcHJldmlvdXNseSBub3RlZC4gTWFrZXMgc2Vuc2UgZm9yIGVuZm9yY2luZyB0aGF0IG1pbmltdW0gYXQgc2V0dXAuCgpGaW5hbGx5LCBpbiBgcGFkX2NvbXByZXNzX3NrYmAsIHRoZXJlJiMzOTtzIGEgdXNlIG9mIGBSRUFEX09OQ0UoZGV2LSZndDttdHUpYCB3aGljaCBpcyBnb29kLiBUaGV5JiMzOTtyZSB1c2luZyBgUkVBRF9PTkNFYCB0byBlbnN1cmUgYXRvbWljaXR5IGFuZCBwcmV2ZW50IGRhdGEgcmFjZXMgd2hlbiByZWFkaW5nIHRoZSBNVFUgdmFsdWUuIFRoaXMgY29uZmlybXMgdGhlIHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUuIFNtYXJ0IG1vdmUuCgpOb3csIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8ga25vdyB0aGUgY29udGV4dDogd2hhdCBhcmUgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGZpbGU/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBpbXBhY3QgdGhpcyBjb2RlLiBJZiB0aGF0IGRvZXNuJiMzOTt0IHlpZWxkIHRoZSBhbnN3ZXIsIEkmIzM5O2xsIG1vdmUgb24gdG8gYGRyaXZlcnMvbmV0L0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gdGhlIE1ha2VmaWxlIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgZW5hYmxlZC4gR290dGEgY2hlY2sgdGhvc2UgcHJlcmVxdWlzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfZ2VuZXJpYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZz02PWNvbmZpZyBQUFBcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0zMi1cdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjMzOlx0ICBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBwcF9nZW5lcmljLlxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzQtXG4tLVxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUFBQKSAmIzQzOz0gcHBwX2dlbmVyaWMub1xuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1BQUF9BU1lOQykgJiM0Mzs9IHBwcF9hc3luYy5vXG4tLVxuZHJpdmVycy9uZXQvcHBwL2JzZF9jb21wLmM9MTg4PXN0YXRpYyBpbnRcdGJzZF9kZWNvbXByZXNzICh2b2lkICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGlzaXplLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9ic2RfY29tcC5jLTE5MC1cbmRyaXZlcnMvbmV0L3BwcC9ic2RfY29tcC5jOjE5MTovKiBUaGVzZSBhcmUgaW4gcHBwX2dlbmVyaWMuYyAqL1xuZHJpdmVycy9uZXQvcHBwL2JzZF9jb21wLmMtMTkyLWV4dGVybiBpbnQgIHBwcF9yZWdpc3Rlcl9jb21wcmVzc29yICAgKHN0cnVjdCBjb21wcmVzc29yICpjcCk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTMyND1wcHBfYXN5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNDEyLSAqIFRoaXMgaXMgY2FsbGVkIGF0IHNvZnRpcnEgbGV2ZWwgdG8gZGVsaXZlciByZWNlaXZlZCBwYWNrZXRzXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6NDEzOiAqIHRvIHRoZSBwcHBfZ2VuZXJpYyBjb2RlLCBhbmQgdG8gdGVsbCB0aGUgcHBwX2dlbmVyaWMgY29kZVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTQxNC0gKiBpZiB3ZSBjYW4gYWNjZXB0IG1vcmUgb3V0cHV0IG5vdy5cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYz01MTU9c3RhdGljIHZvaWQgel9pbmNvbXAodm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICppYnVmLCBpbnQgaWNudClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01NjItXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo1NjM6LyogVGhlc2UgYXJlIGluIHBwcF9nZW5lcmljLmMgKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTU2NC1leHRlcm4gaW50ICBwcHBfcmVnaXN0ZXJfY29tcHJlc3NvciAgIChzdHJ1Y3QgY29tcHJlc3NvciAqY3ApO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTMxNT1wcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQwMi0gKiBUaGlzIGlzIGNhbGxlZCBhdCBzb2Z0aXJxIGxldmVsIHRvIGRlbGl2ZXIgcmVjZWl2ZWQgcGFja2V0c1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NDAzOiAqIHRvIHRoZSBwcHBfZ2VuZXJpYyBjb2RlLCBhbmQgdG8gdGVsbCB0aGUgcHBwX2dlbmVyaWMgY29kZVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNDA0LSAqIGlmIHdlIGNhbiBhY2NlcHQgbW9yZSBvdXRwdXQgbm93LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgZnJhbWVkIGFzIHlvdXIgdGhvdWdodHM6CgoqKktjb25maWcgRGl2ZSBUaW1lISoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBQUFAgKFBvaW50LXRvLVBvaW50IFByb3RvY29sKSBuZXR3b3JrIGRyaXZlci4gU28sIG15IHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBkZWNpc2lvbnMgZm9yIHRoaXMgZHJpdmVyIGFyZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2U6CgoqICAgT3B0aW9ucyB0byBlbmFibGUvZGlzYWJsZSBQUFAgc3VwcG9ydCBvdmVyYWxsLgoqICAgQ2hvaWNlcyBmb3Igc3BlY2lmaWMgUFBQIHZhcmlhbnRzIChlLmcuLCBzeW5jaHJvbm91cywgYXN5bmNocm9ub3VzKS4KKiAgIENvbmZpZ3VyYXRpb24gb2YgY29tcHJlc3Npb24gcHJvdG9jb2xzLCBsaWtlIE1QUEUsIG9yIHBlcmhhcHMgb3B0aW9ucyByZWxhdGVkIHRvIENIQVAvUEFQIGF1dGhlbnRpY2F0aW9uLgoqICAgUGVyaGFwcyBzb21lIHNldHRpbmdzIGNvbmNlcm5pbmcgZGlmZmVyZW50IHNlcmlhbCBwb3J0IG1vZGVzLCBvciBsaW5rIGxheWVyIHByb3RvY29scy4KKiAgIElkZWFsbHksIEkmIzM5O2xsIGZpbmQgZG9jdW1lbnRhdGlvbiBvciBjb250ZXh0IGZvciBlYWNoIG9wdGlvbiwgdGhlIGRlcGVuZGVuY2llcyB0aGF0IGdvdmVybiBpdHMgYXZhaWxhYmlsaXR5LCBhbmQgYW55IHJlbGV2YW50IGRlZmF1bHQgc2V0dGluZ3MuCgpCYXNpY2FsbHksIHRoaXMgYEtjb25maWdgIGZpbGUgaXMgdGhlIGJsdWVwcmludCBJIG5lZWQgdG8gbmF2aWdhdGUgdG8gZ3Jhc3AgaG93IHRoaXMgUFBQIGRyaXZlciBpcyB3aXJlZCBhbmQgd2hhdCBrbm9icyBjYW4gYmUgdHVybmVkIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgUFBQXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgU0xIQ1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xuICAxMTpcdFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxuICAxMjpcdFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxuICAxMzpcdFx0ICBvdGhlcndpc2UgeW91IGNhbiYjMzk7dCB1c2UgaXQ7IG1vc3QgSW50ZXJuZXQgYWNjZXNzIHByb3ZpZGVycyB0aGVzZVxuICAxNDpcdFx0ICBkYXlzIHN1cHBvcnQgUFBQIHJhdGhlciB0aGFuIFNMSVAuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XG4gIDE3Olx0XHQgIFx1MDAzY2h0dHBzOi8vcHBwLnNhbWJhLm9yZ1x1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcbiAgMTg6XHRcdCAgcmVjb21tZW5kZWQgaW4gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcdTAwM2UuXG4gIDE5Olx0XHQgIFRoZSBQUFAgb3B0aW9uIGVubGFyZ2VzIHlvdXIga2VybmVsIGJ5IGFib3V0IDE2IEtCLlxuICAyMDpcdFxuICAyMTpcdFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcbiAgMjI6XHRcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcbiAgMjM6XHRcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxuICAyNDpcdFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXG4gIDI1Olx0XHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXG4gIDI2Olx0XHQgIHRoZSBuZXh0IG9wdGlvbiwgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0Oy4gIEZvciBQUFAgb3ZlclxuICAyNzpcdFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXCYjMzQ7U3VwcG9ydFxuICAyODpcdFx0ICBzeW5jaHJvbm91cyBQUFBcJiMzNDssIGJlbG93LlxuICAyOTpcdFxuICAzMDpcdFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFwmIzM0O1ZlcnNpb24gaW5mb3JtYXRpb24gb24gYWxsIHN5bWJvbHNcJiMzNDsgYWJvdmUsIHRoZW5cbiAgMzE6XHRcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcbiAgMzI6XHRcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cbiAgMzM6XHRcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cbiAgMzQ6XHRcbiAgMzU6XHRpZiBQUFBcbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgUFBQX0JTRENPTVBcbiAgMzg6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cJiMzNDtcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIFBQUCBHZW5lcmljIENvZGUqKgoKT2theSwgc28gd2UgbmVlZCB0byB6ZXJvIGluIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aG9zZSByZWNlbnRseSB0d2Vha2VkIGxpbmVzLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBUaGUgZ2VuZXJpYyBQUFAgY29kZSBpcyB0aGUgaGVhcnQgb2YgdGhlIHN0YWNrLCBhbmQgYW55IGNoYW5nZXMgdGhlcmUgYXJlIHBvdGVudGlhbGx5IGdvaW5nIHRvIGhhdmUgZmFyLXJlYWNoaW5nIGVmZmVjdHMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBtb2RpZmljYXRpb25zIHdlcmUgbWFkZSwgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlbSwgYW5kIHdoYXQgYXJlYXMgb2YgZnVuY3Rpb25hbGl0eSBtaWdodCBiZSB0b3VjaGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGNoYW5nZSBpbnRlcmFjdHMgd2l0aCB0aGUgY29yZSBQUFAgcHJvdG9jb2xzLCB0aGUgaGFuZGxpbmcgb2YgZGlmZmVyZW50IGxpbmsgbGF5ZXJzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb24gdGhpbmdzIGxpa2UgYXV0aGVudGljYXRpb24sIGNvbXByZXNzaW9uLCBvciBlcnJvciBoYW5kbGluZy4gVGltZSB0byBnZXQgbXkgaGVhZCBpbiB0aGF0IGNvZGUuLi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODAwOlx0XG4gODAxOlx0XHRpZiAocGYtXHUwMDNla2luZCAhPSBJTlRFUkZBQ0UpIHtcbiA4MDI6XHRcdFx0LyogY2FuJiMzOTt0IGhhcHBlbiAqL1xuIDgwMzpcdFx0XHRwcl9lcnIoXCYjMzQ7UFBQOiBub3QgaW50ZXJmYWNlIG9yIGNoYW5uZWw/P1xcblwmIzM0Oyk7XG4gODA0Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4gODA1Olx0XHRcdGdvdG8gb3V0O1xuIDgwNjpcdFx0fVxuIDgwNzpcdFxuIDgwODpcdFx0cHBwID0gUEZfVE9fUFBQKHBmKTtcbiA4MDk6XHRcdHN3aXRjaCAoY21kKSB7XG4gODEwOlx0XHRjYXNlIFBQUElPQ1NNUlU6XG4gODExOlx0XHRcdGlmIChnZXRfdXNlcih2YWwsIHApKVxuIDgxMjpcdFx0XHRcdGJyZWFrO1xuIDgxMzpcdFx0XHRpZiAodmFsIFx1MDAzYyBQUFBfTUlOX01SVSB8fCB2YWwgXHUwMDNlIElOVF9NQVggLSBQUFBfSERSTEVOIC0gMSkge1xuIDgxNDpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gODE1Olx0XHRcdFx0YnJlYWs7XG4gODE2Olx0XHRcdH1cbiA4MTc6XHRcdFx0cHBwX3JlY3ZfbG9jayhwcHApO1xuIDgxODpcdFx0XHRwcHAtXHUwMDNlbXJ1ID0gdmFsO1xuIDgxOTpcdFx0XHRwcHBfcmVjdl91bmxvY2socHBwKTtcbiA4MjA6XHRcdFx0ZXJyID0gMDtcbiA4MjE6XHRcdFx0YnJlYWs7XG4gODIyOlx0XG4gODIzOlx0XHRjYXNlIFBQUElPQ1NGTEFHUzpcbiA4MjQ6XHRcdFx0aWYgKGdldF91c2VyKHZhbCwgcCkpXG4gODI1Olx0XHRcdFx0YnJlYWs7XG4gODI2Olx0XHRcdHBwcF9sb2NrKHBwcCk7XG4gODI3Olx0XHRcdGNmbGFncyA9IHBwcC1cdTAwM2VmbGFncyBcdTAwMjYgfnZhbDtcbiA4Mjg6XHQjaWZkZWYgQ09ORklHX1BQUF9NVUxUSUxJTktcbiA4Mjk6XHRcdFx0aWYgKCEocHBwLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19NVUxUSUxJTkspIFx1MDAyNlx1MDAyNiAodmFsIFx1MDAyNiBTQ19NVUxUSUxJTkspKVxuIDgzMDpcdFx0XHRcdHBwcC1cdTAwM2VuZXh0c2VxID0gMDtcbiA4MzE6XHQjZW5kaWZcbiA4MzI6XHRcdFx0cHBwLVx1MDAzZWZsYWdzID0gdmFsIFx1MDAyNiBTQ19GTEFHX0JJVFM7XG4gODMzOlx0XHRcdHBwcF91bmxvY2socHBwKTtcbiA4MzQ6XHRcdFx0aWYgKGNmbGFncyBcdTAwMjYgU0NfQ0NQX09QRU4pXG4gODM1Olx0XHRcdFx0cHBwX2NjcF9jbG9zZWQocHBwKTtcbiA4MzY6XHRcdFx0ZXJyID0gMDtcbiA4Mzc6XHRcdFx0YnJlYWs7XG4gODM4Olx0XG4gODM5Olx0XHRjYXNlIFBQUElPQ0dGTEFHUzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDY4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIHRoZSB3ZWVkcyBvZiB0aGlzIHN5c3RlbToKCioqRm9jdXNpbmcgSW46IFBQUCBTZXR1cCBhbmQgU0tCIENvbXByZXNzaW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGxhc2VyLWZvY3VzZWQuIEJhc2VkIG9uIHRoZSBwcmV2aW91cyBhbmFseXNpcywgSSBuZWVkIHRvIHplcm8gaW4gb24gYSBjb3VwbGUgb2Ygc3BlY2lmaWMgYXJlYXMuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIHJldmlzaXQgdGhlIGBwcHBfc2V0dXBgIGFuZCBgcGFkX2NvbXByZXNzX3NrYmAgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXJvdW5kIGxpbmUgMTYyNSBhbmQgbGluZSAxNzIwIG9mIHRoZSByZWxldmFudCBjb2RlIGZpbGUuIEkgdGhpbmsgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIGltcG9ydGFudCBoYXBwZW5pbmcgdGhlcmUuIExldCBtZSBzdGFydCBieSBkb3VibGUtY2hlY2tpbmcgd2hhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGRvaW5nLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEkmIzM5O2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlaXIgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzLiBUaGlzIHNob3VsZCBiZSBhIGZhaXJseSB0YXJnZXRlZCBpbnZlc3RpZ2F0aW9uLCBJIGhvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MjU6XHRcdC5uYW1lID0gXCYjMzQ7cHBwXCYjMzQ7LFxuMTYyNjpcdH07XG4xNjI3Olx0XG4xNjI4Olx0c3RhdGljIHZvaWQgcHBwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4xNjI5Olx0e1xuMTYzMDpcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZwcHBfbmV0ZGV2X29wcztcbjE2MzE6XHRcdFNFVF9ORVRERVZfREVWVFlQRShkZXYsIFx1MDAyNnBwcF90eXBlKTtcbjE2MzI6XHRcbjE2MzM6XHRcdGRldi1cdTAwM2VsbHR4ID0gdHJ1ZTtcbjE2MzQ6XHRcbjE2MzU6XHRcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBQUFBfSERSTEVOO1xuMTYzNjpcdFx0ZGV2LVx1MDAzZW10dSA9IFBQUF9NUlU7XG4xNjM3Olx0XHRkZXYtXHUwMDNlbWluX210dSA9IFBQUF9NSU5fTVRVO1xuMTYzODpcdFx0ZGV2LVx1MDAzZWFkZHJfbGVuID0gMDtcbjE2Mzk6XHRcdGRldi1cdTAwM2V0eF9xdWV1ZV9sZW4gPSAzO1xuMTY0MDpcdFx0ZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfUFBQO1xuMTY0MTpcdFx0ZGV2LVx1MDAzZWZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQIHwgSUZGX01VTFRJQ0FTVDtcbjE2NDI6XHRcdGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3IgPSBwcHBfZGV2X3ByaXZfZGVzdHJ1Y3RvcjtcbjE2NDM6XHRcdGRldi1cdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfVFNUQVRTO1xuMTY0NDpcdFx0ZGV2LVx1MDAzZWZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1Q7XG4xNjQ1Olx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBkZXYtXHUwMDNlZmVhdHVyZXM7XG4xNjQ2Olx0XHRuZXRpZl9rZWVwX2RzdChkZXYpO1xuMTY0NzpcdH1cbjE2NDg6XHRcbjE2NDk6XHQvKlxuMTY1MDpcdCAqIFRyYW5zbWl0LXNpZGUgcm91dGluZXMuXG4xNjUxOlx0ICovXG4xNjUyOlx0XG4xNjUzOlx0LyogQ2FsbGVkIHRvIGRvIGFueSB3b3JrIHF1ZXVlZCB1cCBvbiB0aGUgdHJhbnNtaXQgc2lkZSB0aGF0IGNhbiBub3cgYmUgZG9uZSAqL1xuMTY1NDpcdHN0YXRpYyB2b2lkIHBwcF94bWl0X2ZsdXNoKHN0cnVjdCBwcHAgKnBwcClcbjE2NTU6XHR7XG4xNjU2Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTY1NzpcdFxuMTY1ODpcdFx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZwcHAtXHUwMDNlZmlsZS54cSkpKSB7XG4xNjU5Olx0XHRcdGlmICh1bmxpa2VseSghcHBwX3B1c2gocHBwLCBza2IpKSkge1xuMTY2MDpcdFx0XHRcdHNrYl9xdWV1ZV9oZWFkKFx1MDAyNnBwcC1cdTAwM2VmaWxlLnhxLCBza2IpO1xuMTY2MTpcdFx0XHRcdHJldHVybjtcbjE2NjI6XHRcdFx0fVxuMTY2MzpcdFx0fVxuMTY2NDpcdFx0LyogSWYgdGhlcmUmIzM5O3Mgbm8gd29yayBsZWZ0IHRvIGRvLCB0ZWxsIHRoZSBjb3JlIG5ldCBjb2RlIHRoYXQgd2UgY2FuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gaXQ6CgoqKkNvbnNpZGVyaW5nIGBwYWRfY29tcHJlc3Nfc2tiYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGFscmVhZHkgaW4gdGhpcyBrZXJuZWwgY29kZSBhbmQgSSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiBvcHRpbWl6aW5nIHRoaXMgcGFydGljdWxhciBhcmVhLiBJJiMzOTt2ZSBjb25zaWRlcmVkIHNldmVyYWwgZmFjdG9ycy4gTm93IEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBhbm90aGVyIGZ1bmN0aW9uLCBJIHNob3VsZCBhbHNvIGNoZWNrIGhvdyBgcGFkX2NvbXByZXNzX3NrYmAgaXMgYmVoYXZpbmcgaW4gdGhlIGN1cnJlbnQgc2NlbmFyaW8uIEl0JiMzOTtzIGltcG9ydGFudCB0byBiZSB0aG9yb3VnaC4gSSBkb24mIzM5O3Qgd2FudCB0byBtaXNzIGFueSBwb3NzaWJsZSBpbnRlcmFjdGlvbiBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBMZXQgbWUgZ28gc2VlIGhvdyB0aGF0IHBsYXlzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBtYXliZSBpdCBpcyBhIGNvbnRyaWJ1dGluZyBmYWN0b3IuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgb3RoZXIgZnVuY3Rpb25zIEkmIzM5O3ZlIGFscmVhZHkgZXhhbWluZWQuIFRoaXMgaXMgYWxsIHBhcnQgb2YgYSBsYXJnZXIgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcxMDpcdFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZwcHAtXHUwMDNleG1pdF9yZWN1cnNpb24tXHUwMDNlYmhfbG9jayk7XG4xNzExOlx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjE3MTI6XHRcbjE3MTM6XHRcdHJldHVybjtcbjE3MTQ6XHRcbjE3MTU6XHRlcnI6XG4xNzE2Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjE3MTc6XHRcbjE3MTg6XHRcdGtmcmVlX3NrYihza2IpO1xuMTcxOTpcdFxuMTcyMDpcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbjE3MjE6XHRcdFx0bmV0ZGV2X2VycihuZXRkZXZfZnJvbV9wcml2KHBwcCksIFwmIzM0O3JlY3Vyc2lvbiBkZXRlY3RlZFxcblwmIzM0Oyk7XG4xNzIyOlx0fVxuMTcyMzpcdFxuMTcyNDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxuMTcyNTpcdHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTcyNjpcdHtcbjE3Mjc6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4xNzI4Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcbjE3Mjk6XHRcdGludCBtdHUgPSBSRUFEX09OQ0UoZGV2LVx1MDAzZW10dSk7XG4xNzMwOlx0XHRpbnQgbGVuO1xuMTczMTpcdFx0aW50IG5ld19za2Jfc2l6ZSA9IG10dSAmIzQzO1xuMTczMjpcdFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSAmIzQzOyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuMTczMzpcdFx0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgJiM0MztcbjE3MzQ6XHRcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgJiM0MzsgUFBQX0hEUkxFTjtcbjE3MzU6XHRcbjE3MzY6XHRcdGlmIChza2JfbGluZWFyaXplKHNrYikpXG4xNzM3Olx0XHRcdHJldHVybiBOVUxMO1xuMTczODpcdFxuMTczOTpcdFx0bmV3X3NrYiA9IGFsbG9jX3NrYihuZXdfc2tiX3NpemUsIEdGUF9BVE9NSUMpO1xuMTc0MDpcdFx0aWYgKCFuZXdfc2tiKSB7XG4xNzQxOlx0XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4xNzQyOlx0XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O1BQUDogbm8gbWVtb3J5IChjb21wIHBrdClcXG5cJiMzNDspO1xuMTc0MzpcdFx0XHRyZXR1cm4gTlVMTDtcbjE3NDQ6XHRcdH1cbjE3NDU6XHRcdGlmIChkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIFx1MDAzZSBQUFBfSERSTEVOKVxuMTc0NjpcdFx0XHRza2JfcmVzZXJ2ZShuZXdfc2tiLCBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gUFBQX0hEUkxFTik7XG4xNzQ3Olx0XG4xNzQ4Olx0XHQvKiBjb21wcmVzc29yIHN0aWxsIGV4cGVjdHMgQS9DIGJ5dGVzIGluIGhkciAqL1xuMTc0OTpcdFx0bGVuID0gcHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXByZXNzKHBwcC1cdTAwM2V4Y19zdGF0ZSwgc2tiLVx1MDAzZWRhdGEgLSAyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjI4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBwYXRjaCBhZmZlY3RzIHJlYWNoYWJsZSBjb2RlLiBBaCwgeWVzLCBQUFAg4oCTIHBvaW50LXRvLXBvaW50IHByb3RvY29sLiBUaGF0JiMzOTtzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gU3l6a2FsbGVyIGlzIGFsbCBvdmVyIGAvZGV2L3BwcGAgYW5kIGFsbCB0aGUgYXNzb2NpYXRlZCBpb2N0bHMgbGlrZSBgUFBQSU9DU01SVWAg4oCTIGNsYXNzaWMgZnV6emluZyB0YXJnZXRzLiBTbywgY2hlY2ssIHRoZSBjb2RlIGlzIHJlYWNoYWJsZS4KCk5leHQsIGRvZXMgaXQgYWN0dWFsbHkgdG91Y2ggZXhlY3V0YWJsZSBjb2RlIHRoYXQmIzM5O3Mgd29ydGggb3VyIHRpbWU/IExvb2tzIGxpa2UgaXQgbW9kaWZpZXMgYHBwcF9pb2N0bGAgd2l0aCBhIG5ldyBib3VuZHMgY2hlY2sgb24gdGhlIE1SVSB2YWx1ZSBmb3IgYFBQUElPQ1NNUlVgLiBJdCBhbHNvIGFkanVzdHMgYGRldi0mZ3Q7bWluX210dWAgd2l0aGluIGBwcHBfc2V0dXBgLCBhbmQgaXQmIzM5O3MgbWFraW5nIGNoYW5nZXMgdG8gTVRVIHJlYWRpbmcgaW4gYHBhZF9jb21wcmVzc19za2JgIHVzaW5nIGBSRUFEX09OQ0VgLiBZZXMsIHRoaXMgaXMgZGVmaW5pdGVseSB0b3VjaGluZyBleGVjdXRhYmxlIGNvZGUsIGFuZCB3ZSBhcmUgc2V0dGluZyBXb3J0aEZ1enppbmcgdG8gVFJVRS4KCk5vdywgbGV0JiMzOTtzIGhvbmUgaW4gb24gdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgZm9yIG91ciBmb2N1cyBzeW1ib2xzLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgZnVuY3Rpb25zIGFyZToKCiogICBgcHBwX2lvY3RsYAoqICAgYHBwcF9zZXR1cGAKKiAgIGBwYWRfY29tcHJlc3Nfc2tiYAoKSW50ZXJlc3RpbmdseSwgYHBhZF9jb21wcmVzc19za2JgIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgaXQgaXMgYmVpbmcgdXNlZCB0byBmaW5kIHBvdGVudGlhbCBidWdzLiBUaGlzIGlzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiBvZiB0aGUgZm9ybSBgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqIHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIE5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHBhZF9jb21wcmVzc19za2JgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWRfY29tcHJlc3Nfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE3MjQ9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNzI1OnBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTcyNi17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTc4NT1wcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTg3OS1cdFx0fVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTg4MDpcdFx0bmV3X3NrYiA9IHBhZF9jb21wcmVzc19za2IocHBwLCBza2IpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTg4MS1cdFx0aWYgKCFuZXdfc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDgwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGF0YSBDb21wcmVzc2lvbiBpbiB0aGUgTmV0d29yayBTdGFjayoqCgpPa2F5LCBzbyBgcGFkX2NvbXByZXNzX3NrYmAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hlcmUmIzM5O3MgdGhhdCBiZWluZyB1c2VkPyBGcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCYjMzk7cyBjYWxsZWQgZGlyZWN0bHkgYnkgYHBwcF9wcmVwYXJlX3R4X3NrYmAsIG9yIGF0IGxlYXN0IGlubGluZWQgaW4gdGhlcmUuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlICpjYWxsZXJzKiBvZiBgcHBwX3ByZXBhcmVfdHhfc2tiYCBpdHNlbGYuIFRoYXQmIzM5O2xsIHNob3cgbWUgd2hlcmUgdGhlIGNvbXByZXNzaW9uLCBvciAqYXR0ZW1wdCogYXQgY29tcHJlc3Npb24sIGlzIGFjdHVhbGx5IGluaXRpYXRlZCB3aXRoaW4gdGhlIGRhdGEgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIEtub3dpbmcgdGhlIG9yaWdpbnMgb2YgdGhhdCBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBuZXR3b3JrIHN0YWNrLiBOZWVkIHRvIHNlZSB0aGUgY29udGV4dCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfcHJlcGFyZV90eF9za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MjY2PXN0YXRpYyB2b2lkIHBwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjI2NzpzdGF0aWMgaW50IHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yNjgtc3RhdGljIGludCBwcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE2NzA9c3RhdGljIHZvaWQgX19wcHBfeG1pdF9wcm9jZXNzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNjc2LVx0fVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTY3NzpcdGlmICh1bmxpa2VseShwcHBfcHJlcGFyZV90eF9za2IocHBwLCBcdTAwMjZza2IpKSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE2NzgtXHRcdGdvdG8gb3V0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE3ODQ9c3RhdGljIGludFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTc4NTpwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNzg2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY3NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIFBQUCBUcmFuc21pc3Npb24gUGF0aCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSB0cmFuc21pc3Npb24gcHJvY2VzcyBmb3IgUFBQLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjb3JlIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMuIEkmIzM5O2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYF9fcHBwX3htaXRfcHJvY2Vzc2AuIEl0JiMzOTtzIGEgZmFpcmx5IGNvbW1vbiBjb252ZW50aW9uIHRvIHVzZSBkb3VibGUgdW5kZXJzY29yZXMgZm9yIGludGVybmFsIGtlcm5lbCBmdW5jdGlvbnMsIHNvIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IHRvIGludmVzdGlnYXRlLiBJZiB0aGF0IGRvZXNuJiMzOTt0IGltbWVkaWF0ZWx5IHJldmVhbCB0aGUgbWFpbiB0cmFuc21pc3Npb24gZmxvdywgSSYjMzk7bGwgdGhlbiBjaGVjayBgcHBwX3htaXRfcHJvY2Vzc2AuIEl0JiMzOTtzIHBvc3NpYmxlIHRoZSBsZWFkaW5nIGRvdWJsZSB1bmRlcnNjb3JlIGRlbm90ZXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCB3aGlsZSB0aGUgc2luZ2xlIHVuZGVyc2NvcmVkIHZlcnNpb24gaXMgdGhlIHB1YmxpYyBBUEkuIEFuZCwgaWYgbmVpdGhlciBvZiB0aG9zZSBhcmUgcXVpdGUgd2hhdCBJJiMzOTttIHNlYXJjaGluZyBmb3IsIEkgd2lsbCBhbHNvIGNoZWNrIGBwcHBfc3RhcnRfeG1pdGAuIFRoYXQgbmFtZSBzdWdnZXN0cyBpdCBjb3VsZCBiZSB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyBvZmYgdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gc2VxdWVuY2UuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcXVldWluZyBwYWNrZXRzIGZvciBQUFAgdHJhbnNtaXNzaW9uIGFuZCBob3cgaXQgdGhlbiBoYW5kcyB0aGVtIG9mZiB0byB0aGUgbG93ZXIgbGF5ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfc3RhcnRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNDUzPXN0YXRpYyBuZXRkZXZfdHhfdFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTQ1NDpwcHBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTQ1NS17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTYxNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBwcF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE2MTctXHQubmRvX3VuaW5pdCAgICAgID0gcHBwX2Rldl91bmluaXQsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNjE4Olx0Lm5kb19zdGFydF94bWl0ICA9IHBwcF9zdGFydF94bWl0LFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTYxOS1cdC5uZG9fc2lvY2RldnByaXZhdGUgPSBwcHBfbmV0X3Npb2NkZXZwcml2YXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE5NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQUFAtUmVsYXRlZCBLZXJuZWwgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gbG9va2luZyBhdCBhIGZldyBpbnRlcmVzdGluZyBmdW5jdGlvbnMgaGVyZSDigJMgYHBwcF9pb2N0bGAsIGBwcHBfc2V0dXBgLCBgcGFkX2NvbXByZXNzX3NrYmAsIGFuZCBgcHBwX3ByZXBhcmVfdHhfc2tiYC4gVGhlc2UgYXJlIGFsbCBzb3VuZGluZyBsaWtlIGtleSBwbGF5ZXJzIGluIHRoZSBQUFAgKFBvaW50LXRvLVBvaW50IFByb3RvY29sKSBzdGFjaywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuCgpGaXJzdCwgSSBzZWUgdGhhdCB0aGUgYFBQUGAgY29uZmlnIG9wdGlvbiBkaXJlY3RseSBidWlsZHMgdGhlIGBwcHBfZ2VuZXJpYy5jYCBmaWxlLiBTaW1wbGUgZW5vdWdoLCBidXQgYXJlIHRoZXJlICphbnkqIG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMgbHVya2luZyBhcm91bmQ/IEFsd2F5cyBnb3R0YSBjaGVjayB0aGUgYnJvYWRlciBjb250ZXh0LgoKTG9va2luZyBhdCBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIHNwZWNpZmljYWxseSwgSSBzZWUgdGhlIGBQUFBgIGNvbmZpZyBvcHRpb24gaXMgdHJpc3RhdGUgYW5kIHNlbGVjdHMgYFNMSENgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgSSBuZWVkIHRvIGtlZXAgdGhhdCBgU0xIQ2AgZGVwZW5kZW5jeSBpbiBtaW5kLiBJdCYjMzk7cyBvZnRlbiB0aGUgY2FzZSB0aGF0IHNlZW1pbmdseSBpbmRlcGVuZGVudCBmZWF0dXJlcyBoYXZlIGludGVyZGVwZW5kZW5jaWVzLgoKTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIGl0JiMzOTtzIGdvb2QgcHJhY3RpY2UsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIHJ1biBhIHF1aWNrIGBncmVwYCBmb3IgdGhlIGBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7YCBsaW5lIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNydWNpYWwgZGVwZW5kZW5jaWVzIGRlZmluZWQgdXBzdHJlYW0uIE1ha2luZyBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgd2hvbGUgcGljdHVyZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NTI2PXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctNTI3LVxuZHJpdmVycy9uZXQvS2NvbmZpZzo1Mjg6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24gSXNzdWUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgYmVlbiBzZWVpbmcsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGEgc3BlY2lmaWMgbmV0d29yayBkcml2ZXIuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8ganVtcCBpbnRvIGBkcml2ZXJzL25ldC9LY29uZmlnYCDigJMgSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbiBsb2dpYyByZXNpZGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gc2NhbiBhcm91bmQgbGluZSA1MjguIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZ292ZXJucyB0aGUgZHJpdmVyJiMzOTtzIGluY2x1c2lvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZW5jbG9zaW5nIGBpZmAgc3RhdGVtZW50cywgb3IgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSBjb250cm9sbGluZyB3aGV0aGVyIHRoaXMgcGFydGljdWxhciBkcml2ZXIgaXMgY29tcGlsZWQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIHByb2JsZW1zIGFuZCBmb3IgZW5zdXJpbmcgdGhlIGRyaXZlciBpcyBwcm9wZXJseSBlbmFibGVkIGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBhbmQgaGFyZHdhcmUuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIChlLmcuLCBgQ09ORklHX0ZPT19EUklWRVJgLCBgQ09ORklHX0JBUl9IQVJEV0FSRWApIHRoYXQgbXVzdCBiZSBzZXQgaW4gb3JkZXIgZm9yIHRoaXMgZHJpdmVyIHRvIGJlIGJ1aWx0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXCYjMzQ7XG4gNTIxOlx0XG4gNTIyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wmIzM0O1xuIDUyMzpcdFxuIDUyNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1wmIzM0O1xuIDUyNTpcdFxuIDUyNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcJiMzNDtcbiA1Mjc6XHRcbiA1Mjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWdcJiMzNDtcbiA1Mjk6XHRcbiA1MzA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnXCYjMzQ7XG4gNTMxOlx0XG4gNTMyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ1wmIzM0O1xuIDUzMzpcdFxuIDUzNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wmIzM0O1xuIDUzNTpcdFxuIDUzNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnXCYjMzQ7XG4gNTM3Olx0XG4gNTM4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnXCYjMzQ7XG4gNTM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzI2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OgoKKipFeGFtaW5pbmcgTmV0d29yayBEZXZpY2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgbmV0d29yayBkZXZpY2VzIGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGlzIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBORVRERVZJQ0VTYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgaXMgYSB2ZXJ5IGNvbW1vbiB2YXJpYWJsZSBuYW1lIHVzZWQgaW4gdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBkZXZpY2UgZHJpdmVycy4gSXQmIzM5O3MgaGlnaGx5IHByb2JhYmxlIHRoaXMgaXMgZGVmaW5lZCBpbiB0aGUgbmV0d29ya2luZyBkcml2ZXIgc2VjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbmV0d29yayBkZXZpY2VzIHdpdGhpbiB0aGUgY3VycmVudCBidWlsZCBlbnZpcm9ubWVudC4gRnJvbSB0aGVyZSwgSSBjYW4gaW52ZXN0aWdhdGUgdGhlIHNwZWNpZmljIGRlcGVuZGVuY2llcyBvciBzdWItY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSB0b3AtbGV2ZWwgc3ltYm9sIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBuZXR3b3JrIGRldmljZSBzdXBwb3J0LCBhbmQgcG9zc2libHkgc29tZSBnZW5lcmFsIHNldHRpbmdzIHJlbGF0ZWQgdG8gdmFyaW91cyBuZXR3b3JrIGRldmljZSB0eXBlcy4gVGhpcyBpcyB0aGUgY29ycmVjdCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgbmV0d29ya2luZyBkZXZpY2UgY29uZmlndXJhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBOZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkVUREVWSUNFU1xuICAgNzpcdFx0ZGVmYXVsdCB5IGlmIFVNTFxuICAgODpcdFx0ZGVwZW5kcyBvbiBORVRcbiAgIDk6XHRcdGJvb2wgXCYjMzQ7TmV0d29yayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBZb3UgY2FuIHNheSBOIGhlcmUgaWYgeW91IGRvbiYjMzk7dCBpbnRlbmQgdG8gY29ubmVjdCB5b3VyIExpbnV4IGJveCB0b1xuICAxMjpcdFx0ICBhbnkgb3RoZXIgY29tcHV0ZXIgYXQgYWxsLlxuICAxMzpcdFxuICAxNDpcdFx0ICBZb3UmIzM5O2xsIGhhdmUgdG8gc2F5IFkgaWYgeW91ciBjb21wdXRlciBjb250YWlucyBhIG5ldHdvcmsgY2FyZCB0aGF0XG4gIDE1Olx0XHQgIHlvdSB3YW50IHRvIHVzZSB1bmRlciBMaW51eC4gSWYgeW91IGFyZSBnb2luZyB0byBydW4gU0xJUCBvciBQUFAgb3ZlclxuICAxNjpcdFx0ICB0ZWxlcGhvbmUgbGluZSBvciBudWxsIG1vZGVtIGNhYmxlIHlvdSBuZWVkIHNheSBZIGhlcmUuIENvbm5lY3RpbmdcbiAgMTc6XHRcdCAgdHdvIG1hY2hpbmVzIHdpdGggcGFyYWxsZWwgcG9ydHMgdXNpbmcgUExJUCBuZWVkcyB0aGlzLCBhcyB3ZWxsIGFzXG4gIDE4Olx0XHQgIEFYLjI1L0tJU1MgZm9yIHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIGFtYXRldXIgcmFkaW8gbGlua3MuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIFNlZSBhbHNvIFwmIzM0O1RoZSBMaW51eCBOZXR3b3JrIEFkbWluaXN0cmF0b3ImIzM5O3MgR3VpZGVcJiMzNDsgYnkgT2xhZiBLaXJjaCBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NjYKCQkJCQkJCW91dHB1dDogMTY1CgkJCQkJCQl0aG91Z2h0czogNDA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQUFAgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIGBDT05GSUdfUFBQYCwgYWxvbmcgd2l0aCBgQ09ORklHX05FVERFVklDRVNgIGFuZCBgQ09ORklHX05FVGAsIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gaGVyZS4gUmV0dXJuaW5nIGBbJiMzNDtQUFAmIzM0O11gIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoIHRvIHRoaXMgbW9kdWxlLiBNYWtlcyBwZXJmZWN0IHNlbnNlLgoKTGV0JiMzOTtzIGRpdmUgZGVlcGVyIGFuZCByZXZpZXcgdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmc6IGBwcHBfaW9jdGxgLCBgcHBwX3NldHVwYCwgYHBwcF9wcmVwYXJlX3R4X3NrYmAsIGFuZCBgcGFkX2NvbXByZXNzX3NrYmAuIFRob3NlIGFyZSB0aGUgbWFpbiBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgYWxsIHRoZSBzeW1ib2xzIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2guIEl0JiMzOTtzOiBgcHBwX2lvY3RsYCwgYHBwcF9zZXR1cGAsIGBwYWRfY29tcHJlc3Nfc2tiYCAod2hpY2gsIEkgc2VlLCBpcyBhIHN0YXRpYyBpbmxpbmUsIGdvb2QgdG8ga25vdyksIGFuZCBmaW5hbGx5LCBgcHBwX3ByZXBhcmVfdHhfc2tiYCAod2hpY2gsIG9mIGNvdXJzZSwgY2FsbHMgYHBhZF9jb21wcmVzc19za2JgKS4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgY2FsbGVycyBvciBmdW5jdGlvbnMgSSYjMzk7bSBtaXNzaW5nPyBJIHNob3VsZCByZWFsbHkgY2hlY2sgaWYgYFBQUF9NSU5fTVJVYCBvciBgUFBQX01JTl9NVFVgIGFyZSB1c2VkIGFueXdoZXJlIGVsc2UuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KCkNoZWNraW5nIHRoZSBwYXRjaCBpdHNlbGYsIEkgc2VlOiBgUFBQX01JTl9NVFVgIGlzIHVzZWQgaW4gYHBwcF9zZXR1cGAuIEFuZCBgUFBQX01JTl9NUlVgIGlzIHVzZWQgaW4gYHBwcF9pb2N0bGAuIEFoLCBhbmQgYGRldi0mZ3Q7bXR1YCBpcyBiZWluZyByZWFkIHNhZmVseSB1c2luZyBgUkVBRF9PTkNFYCB3aXRoaW4gYHBhZF9jb21wcmVzc19za2JgLiBFeGNlbGxlbnQsIGdvb2QgcHJhY3RpY2UuCgpBbHJpZ2h0LCBzYW5pdHkgY2hlY2sgdGltZS4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG1pbmltdW0gTVJVIGFuZCBNVFUgYm91bmRhcmllcyBmb3IgUFBQIGRldmljZXMuIFdlJiMzOTtyZSB2YWxpZGF0aW5nIHRoZSBNUlUgaW4gYHBwcF9pb2N0bChQUFBJT0NTTVJVKWAsIHNldHRpbmcgYGRldi0mZ3Q7bWluX210dWAgaW4gYHBwcF9zZXR1cCgpYCwgYW5kIHdlJiMzOTtyZSBzYWZlbHkgcmVhZGluZyBgZGV2LSZndDttdHVgIHVzaW5nIGBSRUFEX09OQ0VgIGluIGBwYWRfY29tcHJlc3Nfc2tiKClgLiBUaGUgY29kZSBwYXRoIGlzIGNvbXBsZXRlbHkgcmVhY2hhYmxlIHZpYSBQUFAgZGV2aWNlIGlvY3RscyBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbi4gU28sIHRoaXMgd2FycmFudHMgZnV6emluZyB0byB0ZXN0IGlucHV0IHZhbGlkYXRpb24gYW5kIGNoZWNrIGZvciBhbnkgcmVncmVzc2lvbnMgaW4gTVRVL01SVSBoYW5kbGluZyBvciBza2IgYWxsb2NhdGlvbi4KClllcCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBjYWxsIHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFBQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFkX2NvbXByZXNzX3NrYiYjMzQ7LAogICAgJiMzNDtwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX3ByZXBhcmVfdHhfc2tiJiMzNDssCiAgICAmIzM0O3BwcF9zZXR1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgUFBQIG5ldHdvcmsgZGV2aWNlIGNvZGUgaW4gZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMuIEl0IGVuZm9yY2VzIG1pbmltdW0gYW5kIG1heGltdW0gYm91bmRzIGNoZWNrcyBvbiBNUlUgaW4gcHBwX2lvY3RsIChQUFBJT0NTTVJVKSwgc2V0cyBkZXYtXHUwMDNlbWluX210dSBpbiBwcHBfc2V0dXAsIGFuZCB1c2VzIFJFQURfT05DRSBmb3IgTVRVIHJlYWRpbmcgaW4gcGFkX2NvbXByZXNzX3NrYi4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMgb3IgZWRnZSBjYXNlcyBpbiBQUFAgTVRVL01SVSBuZWdvdGlhdGlvbiBhbmQgcGFja2V0IGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWRfY29tcHJlc3Nfc2tiJiMzNDssCiAgICAmIzM0O3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBfcHJlcGFyZV90eF9za2ImIzM0OywKICAgICYjMzQ7cHBwX3NldHVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBQUFAgbmV0d29yayBkZXZpY2UgY29kZSBpbiBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy4gSXQgZW5mb3JjZXMgbWluaW11bSBhbmQgbWF4aW11bSBib3VuZHMgY2hlY2tzIG9uIE1SVSBpbiBwcHBfaW9jdGwgKFBQUElPQ1NNUlUpLCBzZXRzIGRldi1cdTAwM2VtaW5fbXR1IGluIHBwcF9zZXR1cCwgYW5kIHVzZXMgUkVBRF9PTkNFIGZvciBNVFUgcmVhZGluZyBpbiBwYWRfY29tcHJlc3Nfc2tiLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBvciBlZGdlIGNhc2VzIGluIFBQUCBNVFUvTVJVIG5lZ290aWF0aW9uIGFuZCBwYWNrZXQgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG1pbmltdW0gYm91bmRzIGNoZWNrcyBmb3IgUFBQIE1SVSAodmlhIFBQUElPQ1NNUlUpIGFuZCBNVFUgKHNldHRpbmcgZGV2LVx1MDAzZW1pbl9tdHUpLCBhdm9pZGluZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlbHkgc21hbGwgTVRVIHZhbHVlcy4gSXQgYWxzbyBzbmFwc2hvdHMgZGV2LVx1MDAzZW10dSB1c2luZyBSRUFEX09OQ0UgaW4gcGFkX2NvbXByZXNzX3NrYigpIHRvIGF2b2lkIGluY29uc2lzdGVudCBNVFUgcmVhZHMgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBjb21wcmVzc2lvbiBzaXppbmcuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LWRlcGVuZGVudCBjb250cm9sIGZsb3cuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgc2l6aW5nIGlzc3VlcyByZWxhdGVkIHRvIE1UVS9NUlUgY2FsY3VsYXRpb25zIGFyZSBvdXQtb2YtYm91bmRzIG9yIGRhdGEgcmFjZSBpc3N1ZXMgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgS0NTQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjQyNDVkYmU5OWMyYzA3NGJlN2UyMjllYmYxMDZiN2M3NTE2ODQyYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDk6MTk6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCmluZGV4IDFhNjEwYTE4ODkzYmEuLjQwMjIxMTc2OGNmNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCkBAIC03Miw2ICYjNDM7NzIsOCBAQAogCiAjZGVmaW5lIFBQUF9QUk9UT19MRU4JMgogI2RlZmluZSBQUFBfTENQX0hEUkxFTgk0CiYjNDM7I2RlZmluZSBQUFBfTUlOX01UVQkxMjgKJiM0MzsjZGVmaW5lIFBQUF9NSU5fTVJVCTEyOAogCiAvKiBUaGUgZmlsdGVyIGluc3RydWN0aW9ucyBnZW5lcmF0ZWQgYnkgbGlicGNhcCBhcmUgY29uc3RydWN0ZWQKICAqIGFzc3VtaW5nIGEgZm91ci1ieXRlIFBQUCBoZWFkZXIgb24gZWFjaCBwYWNrZXQsIHdoZXJlIHRoZSBsYXN0CkBAIC04MDgsNiAmIzQzOzgxMCwxMCBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCWNhc2UgUFBQSU9DU01SVToKIAkJaWYgKGdldF91c2VyKHZhbCwgcCkpCiAJCQlicmVhazsKJiM0MzsJCWlmICh2YWwgJmx0OyBQUFBfTUlOX01SVSB8fCB2YWwgJmd0OyBJTlRfTUFYIC0gUFBQX0hEUkxFTiAtIDEpIHsKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQogCQlwcHBfcmVjdl9sb2NrKHBwcCk7CiAJCXBwcC0mZ3Q7bXJ1ID0gdmFsOwogCQlwcHBfcmVjdl91bmxvY2socHBwKTsKQEAgLTE2MjgsNiAmIzQzOzE2MzQsNyBAQCBzdGF0aWMgdm9pZCBwcHBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCWRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gUFBQX0hEUkxFTjsKIAlkZXYtJmd0O210dSA9IFBQUF9NUlU7CiYjNDM7CWRldi0mZ3Q7bWluX210dSA9IFBQUF9NSU5fTVRVOwogCWRldi0mZ3Q7YWRkcl9sZW4gPSAwOwogCWRldi0mZ3Q7dHhfcXVldWVfbGVuID0gMzsKIAlkZXYtJmd0O3R5cGUgPSBBUlBIUkRfUFBQOwpAQCAtMTcxOSwxMCAmIzQzOzE3MjYsMTEgQEAgcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKJiM0MzsJaW50IG10dSA9IFJFQURfT05DRShkZXYtJmd0O210dSk7CiAJaW50IGxlbjsKLQlpbnQgbmV3X3NrYl9zaXplID0gZGV2LSZndDttdHUgJiM0MzsKJiM0MzsJaW50IG5ld19za2Jfc2l6ZSA9IG10dSAmIzQzOwogCQlwcHAtJmd0O3hjb21wLSZndDtjb21wX2V4dHJhICYjNDM7IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwotCWludCBjb21wcmVzc29yX3NrYl9zaXplID0gZGV2LSZndDttdHUgJiM0MzsKJiM0MzsJaW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgJiM0MzsKIAkJcHBwLSZndDt4Y29tcC0mZ3Q7Y29tcF9leHRyYSAmIzQzOyBQUFBfSERSTEVOOwogCiAJaWYgKHNrYl9saW5lYXJpemUoc2tiKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFAgR2VuZXJpYyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBzZXR0aW5nIGEgbWluaW11bSBNVFUgYW5kIE1SVSBmb3IgUFBQIGludGVyZmFjZXMsIGFsb25nIHdpdGggc29tZSByZWxhdGVkIHJlZmFjdG9yaW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBkZWZpbml0ZWx5IHJlbGV2YW50IHRvIHNlY3VyaXR5LCBlbnN1cmluZyBhbiBhYnNvbHV0ZSBtaW5pbXVtIGZyYW1lIHNpemUgZm9yIGNvcnJlY3QgcGFja2V0IHByb2Nlc3NpbmcuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2U6CgoxLiAgV2UmIzM5O3ZlIGdvdCBuZXcgYCNkZWZpbmVgIHN0YXRlbWVudHMgZm9yIGBQUFBfTUlOX01UVWAgYW5kIGBQUFBfTUlOX01SVWAsIGJvdGggc2V0IHRvIDEyOC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgbWluaW11bSwgZ2l2ZW4gdGhlIFBQUCBoZWFkZXIgb3ZlcmhlYWQgYW5kIGxpa2VseSBtaW5pbXVtIGRhdGEgcGF5bG9hZCBzaXplcyB3ZSYjMzk7ZCBleHBlY3QgaW4gbW9kZXJuIG5ldHdvcmtzLgoKMi4gIFRoZSBgcHBwX2lvY3RsYCBmdW5jdGlvbiBub3cgaGFzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiB0aGUgYFBQUElPQ1NNUlVgIGNhc2UuIFRoaXMgaXMgY3J1Y2lhbDsgaXQmIzM5O3MgcHJldmVudGluZyB0aGUgTVJVIGZyb20gYmVpbmcgc2V0IHRvIGFuIGFic3VyZGx5IGxvdyB2YWx1ZSwgb3IgcG90ZW50aWFsbHkgYSB2YWx1ZSB0aGF0IGNvdWxkIGxlYWQgdG8gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMsIGEgY29tbW9uIHNvdXJjZSBvZiB2dWxuZXJhYmlsaXR5LiBUaGUgY2hlY2sgYHZhbCAmbHQ7IFBQUF9NSU5fTVJVIHx8IHZhbCAmZ3Q7IElOVF9NQVggLSBQUFBfSERSTEVOIC0gMWAgc2VlbXMgcHJldHR5IHNvbGlkOyBpdCBjb3ZlcnMgdGhlIG1pbmltdW0gTVJVIGFuZCBhY2NvdW50cyBmb3IgdGhlIGhlYWRlciBsZW5ndGguCgozLiAgYHBwcF9zZXR1cGAgaXMgdXBkYXRpbmcgdGhlIG5ldHdvcmsgZGV2aWNlJiMzOTtzIGBtaW5fbXR1YCB0byB0aGUgZGVmaW5lZCBgUFBQX01JTl9NVFVgIHZhbHVlLCBhbHNvIDEyOC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGludGVyZmFjZSBpcyBwcm9wZXJseSBjb25maWd1cmVkIHdpdGggdGhlIG1pbmltdW0gTVRVIGF0IGluaXRpYWxpemF0aW9uLgoKNC4gIEZpbmFsbHksIGBwYWRfY29tcHJlc3Nfc2tiYCBpcyB3aGVyZSB0aGUgZGV2ZWxvcGVyIGFkZHJlc3NlZCBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBgZGV2LSZndDttdHVgIHZhbHVlLiBJbnN0ZWFkIG9mIHJlYWRpbmcgYGRldi0mZ3Q7bXR1YCBkaXJlY3RseSwgaXQmIzM5O3Mgbm93IHVzaW5nIGBSRUFEX09OQ0UoZGV2LSZndDttdHUpYCBhbmQgc3RvcmluZyBpdCBpbiBhIGxvY2FsIGBtdHVgIHZhcmlhYmxlLiBUaGlzIGF2b2lkcyBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgb2NjdXIgaWYgdGhlIE1UVSBpcyBjaGFuZ2VkIGNvbmN1cnJlbnRseS4gU21hcnQgbW92ZTsgdXNpbmcgYFJFQURfT05DRWAgaXMgdGhlIHJpZ2h0IHdheSB0byBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgYmVpbmcgcmVhZCBpcyBub3Qgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIuCgpJJiMzOTtsbCB3YW50IHRvIGluc3BlY3QgYGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jYCBpdHNlbGYgbm93LiBJJiMzOTtsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZXNlIGtleSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtaW5pbXVtIE1UVS9NUlUgb24gb3ZlcmFsbCBQUFAgcGVyZm9ybWFuY2UsIGFuZCBob3cgaXQgaW1wYWN0cyBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjay4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcGxhY2VzIHdoZXJlIHJhY2UgY29uZGl0aW9ucyBvbiBgZGV2LSZndDttdHVgIG1pZ2h0IGJlIHByZXNlbnQuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcbiA4MDE6XHRcdGlmIChwZi1cdTAwM2VraW5kICE9IElOVEVSRkFDRSkge1xuIDgwMjpcdFx0XHQvKiBjYW4mIzM5O3QgaGFwcGVuICovXG4gODAzOlx0XHRcdHByX2VycihcJiMzNDtQUFA6IG5vdCBpbnRlcmZhY2Ugb3IgY2hhbm5lbD8/XFxuXCYjMzQ7KTtcbiA4MDQ6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiA4MDU6XHRcdFx0Z290byBvdXQ7XG4gODA2Olx0XHR9XG4gODA3Olx0XG4gODA4Olx0XHRwcHAgPSBQRl9UT19QUFAocGYpO1xuIDgwOTpcdFx0c3dpdGNoIChjbWQpIHtcbiA4MTA6XHRcdGNhc2UgUFBQSU9DU01SVTpcbiA4MTE6XHRcdFx0aWYgKGdldF91c2VyKHZhbCwgcCkpXG4gODEyOlx0XHRcdFx0YnJlYWs7XG4gODEzOlx0XHRcdGlmICh2YWwgXHUwMDNjIFBQUF9NSU5fTVJVIHx8IHZhbCBcdTAwM2UgSU5UX01BWCAtIFBQUF9IRFJMRU4gLSAxKSB7XG4gODE0Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiA4MTU6XHRcdFx0XHRicmVhaztcbiA4MTY6XHRcdFx0fVxuIDgxNzpcdFx0XHRwcHBfcmVjdl9sb2NrKHBwcCk7XG4gODE4Olx0XHRcdHBwcC1cdTAwM2VtcnUgPSB2YWw7XG4gODE5Olx0XHRcdHBwcF9yZWN2X3VubG9jayhwcHApO1xuIDgyMDpcdFx0XHRlcnIgPSAwO1xuIDgyMTpcdFx0XHRicmVhaztcbiA4MjI6XHRcbiA4MjM6XHRcdGNhc2UgUFBQSU9DU0ZMQUdTOlxuIDgyNDpcdFx0XHRpZiAoZ2V0X3VzZXIodmFsLCBwKSlcbiA4MjU6XHRcdFx0XHRicmVhaztcbiA4MjY6XHRcdFx0cHBwX2xvY2socHBwKTtcbiA4Mjc6XHRcdFx0Y2ZsYWdzID0gcHBwLVx1MDAzZWZsYWdzIFx1MDAyNiB+dmFsO1xuIDgyODpcdCNpZmRlZiBDT05GSUdfUFBQX01VTFRJTElOS1xuIDgyOTpcdFx0XHRpZiAoIShwcHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX01VTFRJTElOSykgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDI2IFNDX01VTFRJTElOSykpXG4gODMwOlx0XHRcdFx0cHBwLVx1MDAzZW5leHRzZXEgPSAwO1xuIDgzMTpcdCNlbmRpZlxuIDgzMjpcdFx0XHRwcHAtXHUwMDNlZmxhZ3MgPSB2YWwgXHUwMDI2IFNDX0ZMQUdfQklUUztcbiA4MzM6XHRcdFx0cHBwX3VubG9jayhwcHApO1xuIDgzNDpcdFx0XHRpZiAoY2ZsYWdzIFx1MDAyNiBTQ19DQ1BfT1BFTilcbiA4MzU6XHRcdFx0XHRwcHBfY2NwX2Nsb3NlZChwcHApO1xuIDgzNjpcdFx0XHRlcnIgPSAwO1xuIDgzNzpcdFx0XHRicmVhaztcbiA4Mzg6XHRcbiA4Mzk6XHRcdGNhc2UgUFBQSU9DR0ZMQUdTOlxuIDg0MDpcdFx0XHRwcHBfbG9jayhwcHApO1xuIDg0MTpcdFx0XHR2YWwgPSBwcHAtXHUwMDNlZmxhZ3MgfCBwcHAtXHUwMDNleHN0YXRlIHwgcHBwLVx1MDAzZXJzdGF0ZTtcbiA4NDI6XHRcdFx0cHBwX3VubG9jayhwcHApO1xuIDg0MzpcdFx0XHRpZiAocHV0X3VzZXIodmFsLCBwKSlcbiA4NDQ6XHRcdFx0XHRicmVhaztcbiA4NDU6XHRcdFx0ZXJyID0gMDtcbiA4NDY6XHRcdFx0YnJlYWs7XG4gODQ3Olx0XG4gODQ4Olx0XHRjYXNlIFBQUElPQ1NDT01QUkVTUzpcbiA4NDk6XHRcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBwYWRfY29tcHJlc3Nfc2tiYCBGdW5jdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBgcGFkX2NvbXByZXNzX3NrYmAuIEJhc2VkIG9uIHRoZSBjb250ZXh0IGFuZCBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIHByb2JhYmx5IHJlbGF0ZXMgdG8gbmV0d29yayBidWZmZXIgKFNLQikgcGFkZGluZyBhbmQgY29tcHJlc3Npb24sIGxpa2VseSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIExpbmUgMTcxNSBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6ZSB0aGUgZnVuY3Rpb24uIEkmIzM5O2xsIGZvY3VzIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IGxpbmUg4oCTIGRhdGEgbWFuaXB1bGF0aW9uLCBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24sIGVycm9yIGhhbmRsaW5nLCBldGMuIFdoYXQgc3BlY2lmaWNhbGx5IGlzIGJlaW5nIGRvbmUgdG8gY29tcHJlc3MgdGhlIFNLQiBkYXRhPyBBbnkgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3M/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBpbmVmZmljaWVuY2llcyBpbiB0aGUgcGFkZGluZyBwcm9jZXNzPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIHVzZWQgYW5kIHBvdGVudGlhbCBnb3RjaGFzIHJlbGF0ZWQgdG8gaXRzIGltcGxlbWVudGF0aW9uLCBzbyBJIGNhbiBnaXZlIGl0IGEgcmVhbGx5IGNsb3NlIGxvb2suIExldOKAmXMgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MTU6XHRlcnI6XG4xNzE2Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjE3MTc6XHRcbjE3MTg6XHRcdGtmcmVlX3NrYihza2IpO1xuMTcxOTpcdFxuMTcyMDpcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbjE3MjE6XHRcdFx0bmV0ZGV2X2VycihuZXRkZXZfZnJvbV9wcml2KHBwcCksIFwmIzM0O3JlY3Vyc2lvbiBkZXRlY3RlZFxcblwmIzM0Oyk7XG4xNzIyOlx0fVxuMTcyMzpcdFxuMTcyNDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxuMTcyNTpcdHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTcyNjpcdHtcbjE3Mjc6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4xNzI4Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcbjE3Mjk6XHRcdGludCBtdHUgPSBSRUFEX09OQ0UoZGV2LVx1MDAzZW10dSk7XG4xNzMwOlx0XHRpbnQgbGVuO1xuMTczMTpcdFx0aW50IG5ld19za2Jfc2l6ZSA9IG10dSAmIzQzO1xuMTczMjpcdFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSAmIzQzOyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuMTczMzpcdFx0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgJiM0MztcbjE3MzQ6XHRcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgJiM0MzsgUFBQX0hEUkxFTjtcbjE3MzU6XHRcbjE3MzY6XHRcdGlmIChza2JfbGluZWFyaXplKHNrYikpXG4xNzM3Olx0XHRcdHJldHVybiBOVUxMO1xuMTczODpcdFxuMTczOTpcdFx0bmV3X3NrYiA9IGFsbG9jX3NrYihuZXdfc2tiX3NpemUsIEdGUF9BVE9NSUMpO1xuMTc0MDpcdFx0aWYgKCFuZXdfc2tiKSB7XG4xNzQxOlx0XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4xNzQyOlx0XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O1BQUDogbm8gbWVtb3J5IChjb21wIHBrdClcXG5cJiMzNDspO1xuMTc0MzpcdFx0XHRyZXR1cm4gTlVMTDtcbjE3NDQ6XHRcdH1cbjE3NDU6XHRcdGlmIChkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIFx1MDAzZSBQUFBfSERSTEVOKVxuMTc0NjpcdFx0XHRza2JfcmVzZXJ2ZShuZXdfc2tiLCBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gUFBQX0hEUkxFTik7XG4xNzQ3Olx0XG4xNzQ4Olx0XHQvKiBjb21wcmVzc29yIHN0aWxsIGV4cGVjdHMgQS9DIGJ5dGVzIGluIGhkciAqL1xuMTc0OTpcdFx0bGVuID0gcHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXByZXNzKHBwcC1cdTAwM2V4Y19zdGF0ZSwgc2tiLVx1MDAzZWRhdGEgLSAyLFxuMTc1MDpcdFx0XHRcdFx0ICAgbmV3X3NrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuICYjNDM7IDIsXG4xNzUxOlx0XHRcdFx0XHQgICBjb21wcmVzc29yX3NrYl9zaXplKTtcbjE3NTI6XHRcdGlmIChsZW4gXHUwMDNlIDAgXHUwMDI2XHUwMDI2IChwcHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NDUF9VUCkpIHtcbjE3NTM6XHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbjE3NTQ6XHRcdFx0c2tiID0gbmV3X3NrYjtcbjE3NTU6XHRcdFx0c2tiX3B1dChza2IsIGxlbik7XG4xNzU2Olx0XHRcdHNrYl9wdWxsKHNrYiwgMik7XHQvKiBwdWxsIG9mZiBBL0MgYnl0ZXMgKi9cbjE3NTc6XHRcdH0gZWxzZSBpZiAobGVuID09IDApIHtcbjE3NTg6XHRcdFx0LyogZGlkbiYjMzk7dCBjb21wcmVzcywgb3IgQ0NQIG5vdCB1cCB5ZXQgKi9cbjE3NTk6XHRcdFx0Y29uc3VtZV9za2IobmV3X3NrYik7XG4xNzYwOlx0XHRcdG5ld19za2IgPSBza2I7XG4xNzYxOlx0XHR9IGVsc2Uge1xuMTc2MjpcdFx0XHQvKlxuMTc2MzpcdFx0XHQgKiAobGVuIFx1MDAzYyAwKVxuMTc2NDpcdFx0XHQgKiBNUFBFIHJlcXVpcmVzIHRoYXQgd2UgZG8gbm90IHNlbmQgdW5lbmNyeXB0ZWRcbjE3NjU6XHRcdFx0ICogZnJhbWVzLiAgVGhlIGNvbXByZXNzb3Igd2lsbCByZXR1cm4gLTEgaWYgd2VcbjE3NjY6XHRcdFx0ICogc2hvdWxkIGRyb3AgdGhlIGZyYW1lLiAgV2UgY2Fubm90IHNpbXBseSB0ZXN0XG4xNzY3Olx0XHRcdCAqIHRoZSBjb21wcmVzc19wcm90byBiZWNhdXNlIE1QUEUgYW5kIE1QUEMgc2hhcmVcbjE3Njg6XHRcdFx0ICogdGhlIHNhbWUgbnVtYmVyLlxuMTc2OTpcdFx0XHQgKi9cbjE3NzA6XHRcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbjE3NzE6XHRcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7cHBwOiBjb21wcmVzc29yIGRyb3BwZWQgcGt0XFxuXCYjMzQ7KTtcbjE3NzI6XHRcdFx0Y29uc3VtZV9za2IobmV3X3NrYik7XG4xNzczOlx0XHRcdG5ld19za2IgPSBOVUxMO1xuMTc3NDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzI4CgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDUwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBDb25jZXJucyBIZXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgY29yZSBpc3N1ZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3Npbmc/IEJhc2VkIG9uIHRoZSBkZXRhaWxzLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBkYXRhIHJhY2VzLCBpbnRlZ2VyIG92ZXJmbG93cywgb3IgcG90ZW50aWFsIE1UVSBib3VuZGFyeSBwcm9ibGVtcy4KCk5vdywgbGV0JiMzOTtzIGdvIHN0ZXAtYnktc3RlcCB0aHJvdWdoIHRoZSBsb2dpYzoKCjEuICBUaGUgYG1pbl9tdHUgPSBQUFBfTUlOX01UVWAgYXNzaWdubWVudCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIHB1dHRpbmcgYSBmbG9vciBvbiB0aGUgTVRVLCBlbnN1cmluZyBpdCYjMzk7cyBub3Qgc2V0IHRvIHJpZGljdWxvdXNseSBsb3cgdmFsdWVzLCB3aGljaCB3b3VsZCBiZSBlaXRoZXIgemVybyBvciBsZXNzIHRoYW4gMTI4IHZpYSB0aGUgc3RhbmRhcmQgbmV0ZGV2aWNlIE1UVSBpbnRlcmZhY2UuIFRoaXMgaXMgZ29vZCBwcmFjdGljZS4KMi4gIFRoZSBgUFBQSU9DU01SVWAgYm91bmRzIGNoZWNrIGlzIGNyaXRpY2FsLiBJdCYjMzk7cyBwcmV2ZW50aW5nIHRoZSBgcHBwLSZndDttcnVgIGZyb20gYmVpbmcgc2V0IHRvIGVpdGhlciB0aW55IHZhbHVlcyB3aGljaCBjYW4gY2F1c2UgaW50ZWdlciBvdmVyZmxvdywgb3IgbWFzc2l2ZSB2YWx1ZXMsIGxlYWRpbmcgdG8gbWVtb3J5IHByb2JsZW1zLiBUaGUgcmFuZ2UgY2hlY2sgdXNpbmcgYFBQUF9NSU5fTVJVYCBhbmQgYElOVF9NQVggLSBQUFBfSERSTEVOIC0gMWAgY292ZXJzIGEgbG90IG9mIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBjYXNlcy4KMy4gIFRoZSBgUkVBRF9PTkNFKGRldi0mZ3Q7bXR1KWAgc25hcHNob3QgaW4gYHBhZF9jb21wcmVzc19za2JgIGlzIHdoYXQgcmVhbGx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGUgcG90ZW50aWFsIGRhdGEgcmFjZSB3aGVyZSBgZGV2LSZndDttdHVgIGNvdWxkIGJlIHJlYWQgY29uY3VycmVudGx5IGFuZCBjaGFuZ2UgbWlkLWNvbXB1dGF0aW9uIGlzIG5vdyBiZWluZyBhdm9pZGVkLiBUaGlzIHByZXZlbnRzIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIGBuZXdfc2tiX3NpemVgIGFuZCBgY29tcHJlc3Nvcl9za2Jfc2l6ZWAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIGNyYXNoZXMsIG9yIHRyaWdnZXIgS0NTQU4uCgpTbywgdGhlIG5leHQgcXVlc3Rpb246IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBMZXQmIzM5O3MgY2hlY2s6CgoxLiAgQXJlIHRoZXJlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbj8gTm8sIHRoYXQmIzM5O3Mgbm90IGEgZmFjdG9yIGhlcmUuCjIuICBJcyB0aGVyZSBhbnkgYnJhbmNoaW5nIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLgozLiAgQXJlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyBvciBidWZmZXJzIGJlaW5nIGFsbG9jYXRlZCBhbmQgdGhlbiByZWFkPyBOby4KNC4gIEZpbmFsbHksIGRvZXMgdGhpcyBwYXRjaCBtb2RpZnkgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgKmFsbG93cyogcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8gQWJzb2x1dGVseSBub3QuIEluIGZhY3QsIGl0JiMzOTtzIG1ha2luZyB0aGluZ3MgKm1vcmUqIHJvYnVzdCBieSByZXN0cmljdGluZyBNVFUvTVJVIHRvIGEgZGVmaW5lZCBhbmQgdmFsaWQgcmFuZ2UgKGF0IGxlYXN0IDEyOCkgYW5kIHByZXZlbnRpbmcgdGhvc2UgaW50ZWdlciBvdmVyZmxvd3MsIG9yIGluY29uc2lzdGVudCBzaXplIGNhbGN1bGF0aW9ucyBkdXJpbmcgcGFja2V0IGNvbXByZXNzaW9uLgoKR2l2ZW4gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBzdGFuZGFyZCBLQVNBTiwgS0NTQU4sIGFuZCBnZW5lcmFsIHRlc3Rpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3Vlcy4KCkluIHN1bW1hcnksIHRoZSBwYXRjaCBhZGRyZXNzZXMgc2V0dGluZyBzYWZlIG1pbmltdW0gTVRVL01SVSBib3VuZHMgYW5kIGludHJvZHVjZXMgYW4gTVRVIHNuYXBzaG90IHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgaW5jb25zaXN0ZW5jaWVzIGluIGJ1ZmZlciBzaXppbmcgZHVyaW5nIGNvbXByZXNzaW9uLiBUaGlzIGlzIGEgdmVyeSBnb29kIGNoYW5nZSwgYW5kIHRoZXJlIGFyZSBubyBhcHBhcmVudCByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGludHJvZHVjZWQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJiMzOTttIGhhcHB5IHdpdGggdGhpcyBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG1pbmltdW0gYm91bmRzIGNoZWNrcyBmb3IgUFBQIE1SVSAodmlhIFBQUElPQ1NNUlUpIGFuZCBNVFUgKHNldHRpbmcgZGV2LVx1MDAzZW1pbl9tdHUpLCBhdm9pZGluZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlbHkgc21hbGwgTVRVIHZhbHVlcy4gSXQgYWxzbyBzbmFwc2hvdHMgZGV2LVx1MDAzZW10dSB1c2luZyBSRUFEX09OQ0UgaW4gcGFkX2NvbXByZXNzX3NrYigpIHRvIGF2b2lkIGluY29uc2lzdGVudCBNVFUgcmVhZHMgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBjb21wcmVzc2lvbiBzaXppbmcuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LWRlcGVuZGVudCBjb250cm9sIGZsb3cuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgc2l6aW5nIGlzc3VlcyByZWxhdGVkIHRvIE1UVS9NUlUgY2FsY3VsYXRpb25zIGFyZSBvdXQtb2YtYm91bmRzIG9yIGRhdGEgcmFjZSBpc3N1ZXMgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgS0NTQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBtaW5pbXVtIGJvdW5kcyBjaGVja3MgZm9yIFBQUCBNUlUgKHZpYSBQUFBJT0NTTVJVKSBhbmQgTVRVIChzZXR0aW5nIGRldi1cdTAwM2VtaW5fbXR1KSwgYXZvaWRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIGV4Y2Vzc2l2ZWx5IHNtYWxsIE1UVSB2YWx1ZXMuIEl0IGFsc28gc25hcHNob3RzIGRldi1cdTAwM2VtdHUgdXNpbmcgUkVBRF9PTkNFIGluIHBhZF9jb21wcmVzc19za2IoKSB0byBhdm9pZCBpbmNvbnNpc3RlbnQgTVRVIHJlYWRzIGR1cmluZyBidWZmZXIgYWxsb2NhdGlvbiBhbmQgY29tcHJlc3Npb24gc2l6aW5nLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeS1kZXBlbmRlbnQgY29udHJvbCBmbG93LiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgYnVmZmVyIHNpemluZyBpc3N1ZXMgcmVsYXRlZCB0byBNVFUvTVJVIGNhbGN1bGF0aW9ucyBhcmUgb3V0LW9mLWJvdW5kcyBvciBkYXRhIHJhY2UgaXNzdWVzIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6MDMuNjM3MTI0MTk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3NjY3NTgwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFkX2NvbXByZXNzX3NrYlwiLFxuICAgIFwicHBwX2lvY3RsXCIsXG4gICAgXCJwcHBfcHJlcGFyZV90eF9za2JcIixcbiAgICBcInBwcF9zZXR1cFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBtaW5pbXVtIGJvdW5kcyBjaGVja3MgZm9yIFBQUCBNUlUgKHZpYSBQUFBJT0NTTVJVKSBhbmQgTVRVIChzZXR0aW5nIGRldi1cXHUwMDNlbWluX210dSksIGF2b2lkaW5nIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBvciBleGNlc3NpdmVseSBzbWFsbCBNVFUgdmFsdWVzLiBJdCBhbHNvIHNuYXBzaG90cyBkZXYtXFx1MDAzZW10dSB1c2luZyBSRUFEX09OQ0UgaW4gcGFkX2NvbXByZXNzX3NrYigpIHRvIGF2b2lkIGluY29uc2lzdGVudCBNVFUgcmVhZHMgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBjb21wcmVzc2lvbiBzaXppbmcuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnktZGVwZW5kZW50IGNvbnRyb2wgZmxvdy4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGJ1ZmZlciBzaXppbmcgaXNzdWVzIHJlbGF0ZWQgdG8gTVRVL01SVSBjYWxjdWxhdGlvbnMgYXJlIG91dC1vZi1ib3VuZHMgb3IgZGF0YSByYWNlIGlzc3VlcyBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIFBQUCBuZXR3b3JrIGRldmljZSBjb2RlIGluIGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLiBJdCBlbmZvcmNlcyBtaW5pbXVtIGFuZCBtYXhpbXVtIGJvdW5kcyBjaGVja3Mgb24gTVJVIGluIHBwcF9pb2N0bCAoUFBQSU9DU01SVSksIHNldHMgZGV2LVxcdTAwM2VtaW5fbXR1IGluIHBwcF9zZXR1cCwgYW5kIHVzZXMgUkVBRF9PTkNFIGZvciBNVFUgcmVhZGluZyBpbiBwYWRfY29tcHJlc3Nfc2tiLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBvciBlZGdlIGNhc2VzIGluIFBQUCBNVFUvTVJVIG5lZ290aWF0aW9uIGFuZCBwYWNrZXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjAzLjYzNzEzMDY3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcwMjAxNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjQyNDVkYmU5OWMyYzA3NGJlN2UyMjllYmYxMDZiN2M3NTE2ODQyYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDA5OjE5OjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5pbmRleCAxYTYxMGExODg5M2JhLi40MDIyMTE3NjhjZjVmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5AQCAtNzIsNiArNzIsOCBAQFxcbiBcXG4gI2RlZmluZSBQUFBfUFJPVE9fTEVOXFx0MlxcbiAjZGVmaW5lIFBQUF9MQ1BfSERSTEVOXFx0NFxcbisjZGVmaW5lIFBQUF9NSU5fTVRVXFx0MTI4XFxuKyNkZWZpbmUgUFBQX01JTl9NUlVcXHQxMjhcXG4gXFxuIC8qIFRoZSBmaWx0ZXIgaW5zdHJ1Y3Rpb25zIGdlbmVyYXRlZCBieSBsaWJwY2FwIGFyZSBjb25zdHJ1Y3RlZFxcbiAgKiBhc3N1bWluZyBhIGZvdXItYnl0ZSBQUFAgaGVhZGVyIG9uIGVhY2ggcGFja2V0LCB3aGVyZSB0aGUgbGFzdFxcbkBAIC04MDgsNiArODEwLDEwIEBAIHN0YXRpYyBsb25nIHBwcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdGNhc2UgUFBQSU9DU01SVTpcXG4gXFx0XFx0aWYgKGdldF91c2VyKHZhbCwgcCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAodmFsIFxcdTAwM2MgUFBQX01JTl9NUlUgfHwgdmFsIFxcdTAwM2UgSU5UX01BWCAtIFBQUF9IRFJMRU4gLSAxKSB7XFxuK1xcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuIFxcdFxcdHBwcF9yZWN2X2xvY2socHBwKTtcXG4gXFx0XFx0cHBwLVxcdTAwM2VtcnUgPSB2YWw7XFxuIFxcdFxcdHBwcF9yZWN2X3VubG9jayhwcHApO1xcbkBAIC0xNjI4LDYgKzE2MzQsNyBAQCBzdGF0aWMgdm9pZCBwcHBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gUFBQX0hEUkxFTjtcXG4gXFx0ZGV2LVxcdTAwM2VtdHUgPSBQUFBfTVJVO1xcbitcXHRkZXYtXFx1MDAzZW1pbl9tdHUgPSBQUFBfTUlOX01UVTtcXG4gXFx0ZGV2LVxcdTAwM2VhZGRyX2xlbiA9IDA7XFxuIFxcdGRldi1cXHUwMDNldHhfcXVldWVfbGVuID0gMztcXG4gXFx0ZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX1BQUDtcXG5AQCAtMTcxOSwxMCArMTcyNiwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcXG4rXFx0aW50IG10dSA9IFJFQURfT05DRShkZXYtXFx1MDAzZW10dSk7XFxuIFxcdGludCBsZW47XFxuLVxcdGludCBuZXdfc2tiX3NpemUgPSBkZXYtXFx1MDAzZW10dSArXFxuK1xcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgK1xcbiBcXHRcXHRwcHAtXFx1MDAzZXhjb21wLVxcdTAwM2Vjb21wX2V4dHJhICsgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuLVxcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gZGV2LVxcdTAwM2VtdHUgK1xcbitcXHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IG10dSArXFxuIFxcdFxcdHBwcC1cXHUwMDNleGNvbXAtXFx1MDAzZWNvbXBfZXh0cmEgKyBQUFBfSERSTEVOO1xcbiBcXG4gXFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6MDQuMzEwMDU3MTk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0Mjc0MzUxMjM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWRfY29tcHJlc3Nfc2tiXCIsXG4gICAgXCJwcHBfaW9jdGxcIixcbiAgICBcInBwcF9wcmVwYXJlX3R4X3NrYlwiLFxuICAgIFwicHBwX3NldHVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIFBQUCBuZXR3b3JrIGRldmljZSBjb2RlIGluIGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLiBJdCBlbmZvcmNlcyBtaW5pbXVtIGFuZCBtYXhpbXVtIGJvdW5kcyBjaGVja3Mgb24gTVJVIGluIHBwcF9pb2N0bCAoUFBQSU9DU01SVSksIHNldHMgZGV2LVxcdTAwM2VtaW5fbXR1IGluIHBwcF9zZXR1cCwgYW5kIHVzZXMgUkVBRF9PTkNFIGZvciBNVFUgcmVhZGluZyBpbiBwYWRfY29tcHJlc3Nfc2tiLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBvciBlZGdlIGNhc2VzIGluIFBQUCBNVFUvTVJVIG5lZ290aWF0aW9uIGFuZCBwYWNrZXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjQyNDVkYmU5OWMyYzA3NGJlN2UyMjllYmYxMDZiN2M3NTE2ODQyYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDk6MTk6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5pbmRleCAxYTYxMGExODg5M2JhLi40MDIyMTE3NjhjZjVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5AQCAtNzIsNiArNzIsOCBAQFxuIFxuICNkZWZpbmUgUFBQX1BST1RPX0xFTlx0MlxuICNkZWZpbmUgUFBQX0xDUF9IRFJMRU5cdDRcbisjZGVmaW5lIFBQUF9NSU5fTVRVXHQxMjhcbisjZGVmaW5lIFBQUF9NSU5fTVJVXHQxMjhcbiBcbiAvKiBUaGUgZmlsdGVyIGluc3RydWN0aW9ucyBnZW5lcmF0ZWQgYnkgbGlicGNhcCBhcmUgY29uc3RydWN0ZWRcbiAgKiBhc3N1bWluZyBhIGZvdXItYnl0ZSBQUFAgaGVhZGVyIG9uIGVhY2ggcGFja2V0LCB3aGVyZSB0aGUgbGFzdFxuQEAgLTgwOCw2ICs4MTAsMTAgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdGNhc2UgUFBQSU9DU01SVTpcbiBcdFx0aWYgKGdldF91c2VyKHZhbCwgcCkpXG4gXHRcdFx0YnJlYWs7XG4rXHRcdGlmICh2YWwgXHUwMDNjIFBQUF9NSU5fTVJVIHx8IHZhbCBcdTAwM2UgSU5UX01BWCAtIFBQUF9IRFJMRU4gLSAxKSB7XG4rXHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0XHRwcHBfcmVjdl9sb2NrKHBwcCk7XG4gXHRcdHBwcC1cdTAwM2VtcnUgPSB2YWw7XG4gXHRcdHBwcF9yZWN2X3VubG9jayhwcHApO1xuQEAgLTE2MjgsNiArMTYzNCw3IEBAIHN0YXRpYyB2b2lkIHBwcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IFBQUF9IRFJMRU47XG4gXHRkZXYtXHUwMDNlbXR1ID0gUFBQX01SVTtcbitcdGRldi1cdTAwM2VtaW5fbXR1ID0gUFBQX01JTl9NVFU7XG4gXHRkZXYtXHUwMDNlYWRkcl9sZW4gPSAwO1xuIFx0ZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiA9IDM7XG4gXHRkZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9QUFA7XG5AQCAtMTcxOSwxMCArMTcyNiwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XG4rXHRpbnQgbXR1ID0gUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpO1xuIFx0aW50IGxlbjtcbi1cdGludCBuZXdfc2tiX3NpemUgPSBkZXYtXHUwMDNlbXR1ICtcbitcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgK1xuIFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSArIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4tXHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IGRldi1cdTAwM2VtdHUgK1xuK1x0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgK1xuIFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSArIFBQUF9IRFJMRU47XG4gXG4gXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6MDQuMzEwMDU5Mjg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTMyNDQ2OTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQUFAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgYWN0aW9uIGlzIGhhcHBlbmluZyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSBob3cgaXQgYWZmZWN0cyBQUFAgZnVuY3Rpb25hbGl0eS5cblxuRmlyc3QgZ2xhbmNlOiBpdCdzIGFkZGluZyBgUFBQX01JTl9NVFUgMTI4YCBhbmQgYFBQUF9NSU5fTVJVIDEyOGAuIEhtbSwgZXN0YWJsaXNoaW5nIG1pbmltdW1zIGZvciBNVFUgYW5kIE1SVS4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBzdWdnZXN0cyB0aGVyZSB3YXMgbm8gc3RyaWN0IGxvd2VyIGxpbWl0IGJlZm9yZS5cblxuVGhlbiwgZGl2aW5nIGludG8gYHBwcF9pb2N0bGA6IHVuZGVyIGBQUFBJT0NTTVJVYCwgdGhlcmUncyBub3cgYSBjaGVjay4gSXQgdmFsaWRhdGVzIHRoZSBNUlUgdmFsdWU6IGBpZiAodmFsIFx1MDAzYyBQUFBfTUlOX01SVSB8fCB2YWwgXHUwMDNlIElOVF9NQVggLSBQUFBfSERSTEVOIC0gMSlgLiBTbyBpdCdzIGVuc3VyaW5nIHRoYXQgdGhlIHJlcXVlc3RlZCBNUlUgbWVldHMgdGhpcyBtaW5pbXVtIGFuZCBkb2Vzbid0IGV4Y2VlZCBhIHNhZmUgdXBwZXIgYm91bmQsIHRoZSBjaGVjayBmb3IgYW4gb3ZlcmZsb3cgb24gdGhlIGFkZGl0aW9uIG9mIGBQUFBfSERSTEVOYCBzdWdnZXN0cyBpdCdzIHRvIHByZXZlbnQgYSBidWZmZXIgb3ZlcmZsb3cuIFJldHVybmluZyBgLUVJTlZBTGAgaXMgc3RhbmRhcmQgcHJhY3RpY2Ugd2hlbiB0aGUgTVJVIGlzIGludmFsaWQuIFNlbnNpYmxlLlxuXG5OZXh0LCBgcHBwX3NldHVwYCBub3cgc2V0cyBgZGV2LVx1MDAzZW1pbl9tdHUgPSBQUFBfTUlOX01UVTtgLiBTbywgdGhpcyBgbWluX210dWAgbWVtYmVyIGlzIGJlaW5nIGluaXRpYWxpemVkIGFuZCBpdCdzIGJlaW5nIHNldCB0byB0aGUgbWluaW11bSB2YWx1ZSB3ZSBwcmV2aW91c2x5IG5vdGVkLiBNYWtlcyBzZW5zZSBmb3IgZW5mb3JjaW5nIHRoYXQgbWluaW11bSBhdCBzZXR1cC5cblxuRmluYWxseSwgaW4gYHBhZF9jb21wcmVzc19za2JgLCB0aGVyZSdzIGEgdXNlIG9mIGBSRUFEX09OQ0UoZGV2LVx1MDAzZW10dSlgIHdoaWNoIGlzIGdvb2QuIFRoZXkncmUgdXNpbmcgYFJFQURfT05DRWAgdG8gZW5zdXJlIGF0b21pY2l0eSBhbmQgcHJldmVudCBkYXRhIHJhY2VzIHdoZW4gcmVhZGluZyB0aGUgTVRVIHZhbHVlLiBUaGlzIGNvbmZpcm1zIHRoZSB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBhdCBydW50aW1lLiBTbWFydCBtb3ZlLlxuXG5Ob3csIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8ga25vdyB0aGUgY29udGV4dDogd2hhdCBhcmUgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGZpbGU/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCB0aGlzIGNvZGUuIElmIHRoYXQgZG9lc24ndCB5aWVsZCB0aGUgYW5zd2VyLCBJJ2xsIG1vdmUgb24gdG8gYGRyaXZlcnMvbmV0L0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gdGhlIE1ha2VmaWxlIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgZW5hYmxlZC4gR290dGEgY2hlY2sgdGhvc2UgcHJlcmVxdWlzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjA5LjYzNDUzMTU4M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI0MzgyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwX2dlbmVyaWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTY9Y29uZmlnIFBQUFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzItXFx0ICBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjMzOlxcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0zNC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZS01LVxcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19QUFApICs9IHBwcF9nZW5lcmljLm9cXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGUtNy1vYmotJChDT05GSUdfUFBQX0FTWU5DKSArPSBwcHBfYXN5bmMub1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL2JzZF9jb21wLmM9MTg4PXN0YXRpYyBpbnRcXHRic2RfZGVjb21wcmVzcyAodm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBpc2l6ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9ic2RfY29tcC5jLTE5MC1cXG5kcml2ZXJzL25ldC9wcHAvYnNkX2NvbXAuYzoxOTE6LyogVGhlc2UgYXJlIGluIHBwcF9nZW5lcmljLmMgKi9cXG5kcml2ZXJzL25ldC9wcHAvYnNkX2NvbXAuYy0xOTItZXh0ZXJuIGludCAgcHBwX3JlZ2lzdGVyX2NvbXByZXNzb3IgICAoc3RydWN0IGNvbXByZXNzb3IgKmNwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0zMjQ9cHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNDEyLSAqIFRoaXMgaXMgY2FsbGVkIGF0IHNvZnRpcnEgbGV2ZWwgdG8gZGVsaXZlciByZWNlaXZlZCBwYWNrZXRzXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjQxMzogKiB0byB0aGUgcHBwX2dlbmVyaWMgY29kZSwgYW5kIHRvIHRlbGwgdGhlIHBwcF9nZW5lcmljIGNvZGVcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNDE0LSAqIGlmIHdlIGNhbiBhY2NlcHQgbW9yZSBvdXRwdXQgbm93Llxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM9NTE1PXN0YXRpYyB2b2lkIHpfaW5jb21wKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGljbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01NjItXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NTYzOi8qIFRoZXNlIGFyZSBpbiBwcHBfZ2VuZXJpYy5jICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNTY0LWV4dGVybiBpbnQgIHBwcF9yZWdpc3Rlcl9jb21wcmVzc29yICAgKHN0cnVjdCBjb21wcmVzc29yICpjcCk7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0zMTU9cHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQwMi0gKiBUaGlzIGlzIGNhbGxlZCBhdCBzb2Z0aXJxIGxldmVsIHRvIGRlbGl2ZXIgcmVjZWl2ZWQgcGFja2V0c1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjQwMzogKiB0byB0aGUgcHBwX2dlbmVyaWMgY29kZSwgYW5kIHRvIHRlbGwgdGhlIHBwcF9nZW5lcmljIGNvZGVcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00MDQtICogaWYgd2UgY2FuIGFjY2VwdCBtb3JlIG91dHB1dCBub3cuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjA5Ljc1Njk3NzkxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjgwMDg4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB0aGUgc3VtbWFyeSwgZnJhbWVkIGFzIHlvdXIgdGhvdWdodHM6XG5cbioqS2NvbmZpZyBEaXZlIFRpbWUhKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBQUFAgKFBvaW50LXRvLVBvaW50IFByb3RvY29sKSBuZXR3b3JrIGRyaXZlci4gU28sIG15IHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBkZWNpc2lvbnMgZm9yIHRoaXMgZHJpdmVyIGFyZSBkZWZpbmVkLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZTpcblxuKiAgIE9wdGlvbnMgdG8gZW5hYmxlL2Rpc2FibGUgUFBQIHN1cHBvcnQgb3ZlcmFsbC5cbiogICBDaG9pY2VzIGZvciBzcGVjaWZpYyBQUFAgdmFyaWFudHMgKGUuZy4sIHN5bmNocm9ub3VzLCBhc3luY2hyb25vdXMpLlxuKiAgIENvbmZpZ3VyYXRpb24gb2YgY29tcHJlc3Npb24gcHJvdG9jb2xzLCBsaWtlIE1QUEUsIG9yIHBlcmhhcHMgb3B0aW9ucyByZWxhdGVkIHRvIENIQVAvUEFQIGF1dGhlbnRpY2F0aW9uLlxuKiAgIFBlcmhhcHMgc29tZSBzZXR0aW5ncyBjb25jZXJuaW5nIGRpZmZlcmVudCBzZXJpYWwgcG9ydCBtb2Rlcywgb3IgbGluayBsYXllciBwcm90b2NvbHMuXG4qICAgSWRlYWxseSwgSSdsbCBmaW5kIGRvY3VtZW50YXRpb24gb3IgY29udGV4dCBmb3IgZWFjaCBvcHRpb24sIHRoZSBkZXBlbmRlbmNpZXMgdGhhdCBnb3Zlcm4gaXRzIGF2YWlsYWJpbGl0eSwgYW5kIGFueSByZWxldmFudCBkZWZhdWx0IHNldHRpbmdzLlxuXG5CYXNpY2FsbHksIHRoaXMgYEtjb25maWdgIGZpbGUgaXMgdGhlIGJsdWVwcmludCBJIG5lZWQgdG8gbmF2aWdhdGUgdG8gZ3Jhc3AgaG93IHRoaXMgUFBQIGRyaXZlciBpcyB3aXJlZCBhbmQgd2hhdCBrbm9icyBjYW4gYmUgdHVybmVkIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6MTIuMDg0OTg5NzA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgUFBQXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBTTEhDXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGlzIGEgbmV3ZXIgYW5kIGJldHRlciBTTElQLiAgSXQgc2VydmVzXFxuICAxMTpcXHRcXHQgIHRoZSBzYW1lIHB1cnBvc2U6IHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIHRlbGVwaG9uZSAoYW5kIG90aGVyXFxuICAxMjpcXHRcXHQgIHNlcmlhbCkgbGluZXMuICBBc2sgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaWYgdGhleSBzdXBwb3J0IGl0LCBiZWNhdXNlXFxuICAxMzpcXHRcXHQgIG90aGVyd2lzZSB5b3UgY2FuJ3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcXG4gIDE0OlxcdFxcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XFxuICAxNzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcXHUwMDNlLiAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHZlcnNpb24gb2YgcHBwZFxcbiAgMTg6XFx0XFx0ICByZWNvbW1lbmRlZCBpbiBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcXHUwMDNlLlxcbiAgMTk6XFx0XFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcXG4gIDIyOlxcdFxcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcXG4gIDIzOlxcdFxcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxcbiAgMjQ6XFx0XFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXFxuICAyNTpcXHRcXHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXFxuICAyNjpcXHRcXHQgIHRoZSBuZXh0IG9wdGlvbiwgXFxcIlBQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcXFwiLiAgRm9yIFBQUCBvdmVyXFxuICAyNzpcXHRcXHQgIHN5bmNocm9ub3VzIGxpbmVzLCB5b3Ugc2hvdWxkIHNheSBZIChvciBNKSBoZXJlIGFuZCB0byBcXFwiU3VwcG9ydFxcbiAgMjg6XFx0XFx0ICBzeW5jaHJvbm91cyBQUFBcXFwiLCBiZWxvdy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFxcXCJWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXFxcIiBhYm92ZSwgdGhlblxcbiAgMzE6XFx0XFx0ICB5b3UgY2Fubm90IGNvbXBpbGUgdGhlIFBQUCBkcml2ZXIgaW50byB0aGUga2VybmVsOyB5b3UgY2FuIHRoZW4gb25seVxcbiAgMzI6XFx0XFx0ICBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTVxcbiAgMzM6XFx0XFx0ICBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBwcF9nZW5lcmljLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRpZiBQUFBcXG4gIDM2OlxcdFxcbiAgMzc6XFx0Y29uZmlnIFBQUF9CU0RDT01QXFxuICAzODpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvblxcXCJcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOToxMi4wODYyMDczODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjEzNDQxODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgUFBQIEdlbmVyaWMgQ29kZSoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gemVybyBpbiBvbiB3aGF0J3MgZ29pbmcgb24gaW4gdGhlIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aG9zZSByZWNlbnRseSB0d2Vha2VkIGxpbmVzLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIFRoZSBnZW5lcmljIFBQUCBjb2RlIGlzIHRoZSBoZWFydCBvZiB0aGUgc3RhY2ssIGFuZCBhbnkgY2hhbmdlcyB0aGVyZSBhcmUgcG90ZW50aWFsbHkgZ29pbmcgdG8gaGF2ZSBmYXItcmVhY2hpbmcgZWZmZWN0cy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IG1vZGlmaWNhdGlvbnMgd2VyZSBtYWRlLCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGVtLCBhbmQgd2hhdCBhcmVhcyBvZiBmdW5jdGlvbmFsaXR5IG1pZ2h0IGJlIHRvdWNoZWQuIEknbGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBjaGFuZ2UgaW50ZXJhY3RzIHdpdGggdGhlIGNvcmUgUFBQIHByb3RvY29scywgdGhlIGhhbmRsaW5nIG9mIGRpZmZlcmVudCBsaW5rIGxheWVycywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9uIHRoaW5ncyBsaWtlIGF1dGhlbnRpY2F0aW9uLCBjb21wcmVzc2lvbiwgb3IgZXJyb3IgaGFuZGxpbmcuIFRpbWUgdG8gZ2V0IG15IGhlYWQgaW4gdGhhdCBjb2RlLi4uIExldCdzIHNlZSB3aGF0IHdlIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjE0LjI5OTY1MjAwM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFxuIDgwMTpcXHRcXHRpZiAocGYtXFx1MDAzZWtpbmQgIT0gSU5URVJGQUNFKSB7XFxuIDgwMjpcXHRcXHRcXHQvKiBjYW4ndCBoYXBwZW4gKi9cXG4gODAzOlxcdFxcdFxcdHByX2VycihcXFwiUFBQOiBub3QgaW50ZXJmYWNlIG9yIGNoYW5uZWw/P1xcXFxuXFxcIik7XFxuIDgwNDpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiA4MDU6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDgwNjpcXHRcXHR9XFxuIDgwNzpcXHRcXG4gODA4OlxcdFxcdHBwcCA9IFBGX1RPX1BQUChwZik7XFxuIDgwOTpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbiA4MTA6XFx0XFx0Y2FzZSBQUFBJT0NTTVJVOlxcbiA4MTE6XFx0XFx0XFx0aWYgKGdldF91c2VyKHZhbCwgcCkpXFxuIDgxMjpcXHRcXHRcXHRcXHRicmVhaztcXG4gODEzOlxcdFxcdFxcdGlmICh2YWwgXFx1MDAzYyBQUFBfTUlOX01SVSB8fCB2YWwgXFx1MDAzZSBJTlRfTUFYIC0gUFBQX0hEUkxFTiAtIDEpIHtcXG4gODE0OlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDgxNTpcXHRcXHRcXHRcXHRicmVhaztcXG4gODE2OlxcdFxcdFxcdH1cXG4gODE3OlxcdFxcdFxcdHBwcF9yZWN2X2xvY2socHBwKTtcXG4gODE4OlxcdFxcdFxcdHBwcC1cXHUwMDNlbXJ1ID0gdmFsO1xcbiA4MTk6XFx0XFx0XFx0cHBwX3JlY3ZfdW5sb2NrKHBwcCk7XFxuIDgyMDpcXHRcXHRcXHRlcnIgPSAwO1xcbiA4MjE6XFx0XFx0XFx0YnJlYWs7XFxuIDgyMjpcXHRcXG4gODIzOlxcdFxcdGNhc2UgUFBQSU9DU0ZMQUdTOlxcbiA4MjQ6XFx0XFx0XFx0aWYgKGdldF91c2VyKHZhbCwgcCkpXFxuIDgyNTpcXHRcXHRcXHRcXHRicmVhaztcXG4gODI2OlxcdFxcdFxcdHBwcF9sb2NrKHBwcCk7XFxuIDgyNzpcXHRcXHRcXHRjZmxhZ3MgPSBwcHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgfnZhbDtcXG4gODI4OlxcdCNpZmRlZiBDT05GSUdfUFBQX01VTFRJTElOS1xcbiA4Mjk6XFx0XFx0XFx0aWYgKCEocHBwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX01VTFRJTElOSykgXFx1MDAyNlxcdTAwMjYgKHZhbCBcXHUwMDI2IFNDX01VTFRJTElOSykpXFxuIDgzMDpcXHRcXHRcXHRcXHRwcHAtXFx1MDAzZW5leHRzZXEgPSAwO1xcbiA4MzE6XFx0I2VuZGlmXFxuIDgzMjpcXHRcXHRcXHRwcHAtXFx1MDAzZWZsYWdzID0gdmFsIFxcdTAwMjYgU0NfRkxBR19CSVRTO1xcbiA4MzM6XFx0XFx0XFx0cHBwX3VubG9jayhwcHApO1xcbiA4MzQ6XFx0XFx0XFx0aWYgKGNmbGFncyBcXHUwMDI2IFNDX0NDUF9PUEVOKVxcbiA4MzU6XFx0XFx0XFx0XFx0cHBwX2NjcF9jbG9zZWQocHBwKTtcXG4gODM2OlxcdFxcdFxcdGVyciA9IDA7XFxuIDgzNzpcXHRcXHRcXHRicmVhaztcXG4gODM4OlxcdFxcbiA4Mzk6XFx0XFx0Y2FzZSBQUFBJT0NHRkxBR1M6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjE0LjI5OTg4MjAxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjQyODg0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgb2YgdGhpcyBzeXN0ZW06XG5cbioqRm9jdXNpbmcgSW46IFBQUCBTZXR1cCBhbmQgU0tCIENvbXByZXNzaW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbGFzZXItZm9jdXNlZC4gQmFzZWQgb24gdGhlIHByZXZpb3VzIGFuYWx5c2lzLCBJIG5lZWQgdG8gemVybyBpbiBvbiBhIGNvdXBsZSBvZiBzcGVjaWZpYyBhcmVhcy4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdG8gcmV2aXNpdCB0aGUgYHBwcF9zZXR1cGAgYW5kIGBwYWRfY29tcHJlc3Nfc2tiYCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgbG9va2luZyBhcm91bmQgbGluZSAxNjI1IGFuZCBsaW5lIDE3MjAgb2YgdGhlIHJlbGV2YW50IGNvZGUgZmlsZS4gSSB0aGluayB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW1wb3J0YW50IGhhcHBlbmluZyB0aGVyZS4gTGV0IG1lIHN0YXJ0IGJ5IGRvdWJsZS1jaGVja2luZyB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZG9pbmcsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gSSdsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZWlyIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcy4gVGhpcyBzaG91bGQgYmUgYSBmYWlybHkgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbiwgSSBob3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOToxNi42MjQxNzM1NDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MjU6XFx0XFx0Lm5hbWUgPSBcXFwicHBwXFxcIixcXG4xNjI2OlxcdH07XFxuMTYyNzpcXHRcXG4xNjI4OlxcdHN0YXRpYyB2b2lkIHBwcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbjE2Mjk6XFx0e1xcbjE2MzA6XFx0XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnBwcF9uZXRkZXZfb3BzO1xcbjE2MzE6XFx0XFx0U0VUX05FVERFVl9ERVZUWVBFKGRldiwgXFx1MDAyNnBwcF90eXBlKTtcXG4xNjMyOlxcdFxcbjE2MzM6XFx0XFx0ZGV2LVxcdTAwM2VsbHR4ID0gdHJ1ZTtcXG4xNjM0OlxcdFxcbjE2MzU6XFx0XFx0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBQUFBfSERSTEVOO1xcbjE2MzY6XFx0XFx0ZGV2LVxcdTAwM2VtdHUgPSBQUFBfTVJVO1xcbjE2Mzc6XFx0XFx0ZGV2LVxcdTAwM2VtaW5fbXR1ID0gUFBQX01JTl9NVFU7XFxuMTYzODpcXHRcXHRkZXYtXFx1MDAzZWFkZHJfbGVuID0gMDtcXG4xNjM5OlxcdFxcdGRldi1cXHUwMDNldHhfcXVldWVfbGVuID0gMztcXG4xNjQwOlxcdFxcdGRldi1cXHUwMDNldHlwZSA9IEFSUEhSRF9QUFA7XFxuMTY0MTpcXHRcXHRkZXYtXFx1MDAzZWZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQIHwgSUZGX01VTFRJQ0FTVDtcXG4xNjQyOlxcdFxcdGRldi1cXHUwMDNlcHJpdl9kZXN0cnVjdG9yID0gcHBwX2Rldl9wcml2X2Rlc3RydWN0b3I7XFxuMTY0MzpcXHRcXHRkZXYtXFx1MDAzZXBjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9UU1RBVFM7XFxuMTY0NDpcXHRcXHRkZXYtXFx1MDAzZWZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1Q7XFxuMTY0NTpcXHRcXHRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzID0gZGV2LVxcdTAwM2VmZWF0dXJlcztcXG4xNjQ2OlxcdFxcdG5ldGlmX2tlZXBfZHN0KGRldik7XFxuMTY0NzpcXHR9XFxuMTY0ODpcXHRcXG4xNjQ5OlxcdC8qXFxuMTY1MDpcXHQgKiBUcmFuc21pdC1zaWRlIHJvdXRpbmVzLlxcbjE2NTE6XFx0ICovXFxuMTY1MjpcXHRcXG4xNjUzOlxcdC8qIENhbGxlZCB0byBkbyBhbnkgd29yayBxdWV1ZWQgdXAgb24gdGhlIHRyYW5zbWl0IHNpZGUgdGhhdCBjYW4gbm93IGJlIGRvbmUgKi9cXG4xNjU0OlxcdHN0YXRpYyB2b2lkIHBwcF94bWl0X2ZsdXNoKHN0cnVjdCBwcHAgKnBwcClcXG4xNjU1OlxcdHtcXG4xNjU2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTY1NzpcXHRcXG4xNjU4OlxcdFxcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnBwcC1cXHUwMDNlZmlsZS54cSkpKSB7XFxuMTY1OTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXBwcF9wdXNoKHBwcCwgc2tiKSkpIHtcXG4xNjYwOlxcdFxcdFxcdFxcdHNrYl9xdWV1ZV9oZWFkKFxcdTAwMjZwcHAtXFx1MDAzZWZpbGUueHEsIHNrYik7XFxuMTY2MTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTY2MjpcXHRcXHRcXHR9XFxuMTY2MzpcXHRcXHR9XFxuMTY2NDpcXHRcXHQvKiBJZiB0aGVyZSdzIG5vIHdvcmsgbGVmdCB0byBkbywgdGVsbCB0aGUgY29yZSBuZXQgY29kZSB0aGF0IHdlIGNhblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOToxNi42MjQzOTc4MzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3NjUxMzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGl0OlxuXG4qKkNvbnNpZGVyaW5nIGBwYWRfY29tcHJlc3Nfc2tiYCoqXG5cbkFscmlnaHQsIEknbSBhbHJlYWR5IGluIHRoaXMga2VybmVsIGNvZGUgYW5kIEkndmUgYmVlbiBmb2N1c2luZyBvbiBvcHRpbWl6aW5nIHRoaXMgcGFydGljdWxhciBhcmVhLiBJJ3ZlIGNvbnNpZGVyZWQgc2V2ZXJhbCBmYWN0b3JzLiBOb3cgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGFub3RoZXIgZnVuY3Rpb24sIEkgc2hvdWxkIGFsc28gY2hlY2sgaG93IGBwYWRfY29tcHJlc3Nfc2tiYCBpcyBiZWhhdmluZyBpbiB0aGUgY3VycmVudCBzY2VuYXJpby4gSXQncyBpbXBvcnRhbnQgdG8gYmUgdGhvcm91Z2guIEkgZG9uJ3Qgd2FudCB0byBtaXNzIGFueSBwb3NzaWJsZSBpbnRlcmFjdGlvbiBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBMZXQgbWUgZ28gc2VlIGhvdyB0aGF0IHBsYXlzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBtYXliZSBpdCBpcyBhIGNvbnRyaWJ1dGluZyBmYWN0b3IuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQncyBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucyBJJ3ZlIGFscmVhZHkgZXhhbWluZWQuIFRoaXMgaXMgYWxsIHBhcnQgb2YgYSBsYXJnZXIgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM2NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6MTguNzAwOTE1NzA2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzEwOlxcdFxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNnBwcC1cXHUwMDNleG1pdF9yZWN1cnNpb24tXFx1MDAzZWJoX2xvY2spO1xcbjE3MTE6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuMTcxMjpcXHRcXG4xNzEzOlxcdFxcdHJldHVybjtcXG4xNzE0OlxcdFxcbjE3MTU6XFx0ZXJyOlxcbjE3MTY6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuMTcxNzpcXHRcXG4xNzE4OlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjE3MTk6XFx0XFxuMTcyMDpcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbjE3MjE6XFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXZfZnJvbV9wcml2KHBwcCksIFxcXCJyZWN1cnNpb24gZGV0ZWN0ZWRcXFxcblxcXCIpO1xcbjE3MjI6XFx0fVxcbjE3MjM6XFx0XFxuMTcyNDpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpcXG4xNzI1OlxcdHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjE3MjY6XFx0e1xcbjE3Mjc6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcXG4xNzI4OlxcdFxcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xcbjE3Mjk6XFx0XFx0aW50IG10dSA9IFJFQURfT05DRShkZXYtXFx1MDAzZW10dSk7XFxuMTczMDpcXHRcXHRpbnQgbGVuO1xcbjE3MzE6XFx0XFx0aW50IG5ld19za2Jfc2l6ZSA9IG10dSArXFxuMTczMjpcXHRcXHRcXHRwcHAtXFx1MDAzZXhjb21wLVxcdTAwM2Vjb21wX2V4dHJhICsgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuMTczMzpcXHRcXHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IG10dSArXFxuMTczNDpcXHRcXHRcXHRwcHAtXFx1MDAzZXhjb21wLVxcdTAwM2Vjb21wX2V4dHJhICsgUFBQX0hEUkxFTjtcXG4xNzM1OlxcdFxcbjE3MzY6XFx0XFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcXG4xNzM3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE3Mzg6XFx0XFxuMTczOTpcXHRcXHRuZXdfc2tiID0gYWxsb2Nfc2tiKG5ld19za2Jfc2l6ZSwgR0ZQX0FUT01JQyk7XFxuMTc0MDpcXHRcXHRpZiAoIW5ld19za2IpIHtcXG4xNzQxOlxcdFxcdFxcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXFxuMTc0MjpcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIlBQUDogbm8gbWVtb3J5IChjb21wIHBrdClcXFxcblxcXCIpO1xcbjE3NDM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTc0NDpcXHRcXHR9XFxuMTc0NTpcXHRcXHRpZiAoZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gXFx1MDAzZSBQUFBfSERSTEVOKVxcbjE3NDY6XFx0XFx0XFx0c2tiX3Jlc2VydmUobmV3X3NrYiwgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSBQUFBfSERSTEVOKTtcXG4xNzQ3OlxcdFxcbjE3NDg6XFx0XFx0LyogY29tcHJlc3NvciBzdGlsbCBleHBlY3RzIEEvQyBieXRlcyBpbiBoZHIgKi9cXG4xNzQ5OlxcdFxcdGxlbiA9IHBwcC1cXHUwMDNleGNvbXAtXFx1MDAzZWNvbXByZXNzKHBwcC1cXHUwMDNleGNfc3RhdGUsIHNrYi1cXHUwMDNlZGF0YSAtIDIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjE4LjcwMTE4ODk5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDg3OTcyNzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgcGF0Y2ggYWZmZWN0cyByZWFjaGFibGUgY29kZS4gQWgsIHllcywgUFBQIOKAkyBwb2ludC10by1wb2ludCBwcm90b2NvbC4gVGhhdCdzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gU3l6a2FsbGVyIGlzIGFsbCBvdmVyIGAvZGV2L3BwcGAgYW5kIGFsbCB0aGUgYXNzb2NpYXRlZCBpb2N0bHMgbGlrZSBgUFBQSU9DU01SVWAg4oCTIGNsYXNzaWMgZnV6emluZyB0YXJnZXRzLiBTbywgY2hlY2ssIHRoZSBjb2RlIGlzIHJlYWNoYWJsZS5cblxuTmV4dCwgZG9lcyBpdCBhY3R1YWxseSB0b3VjaCBleGVjdXRhYmxlIGNvZGUgdGhhdCdzIHdvcnRoIG91ciB0aW1lPyBMb29rcyBsaWtlIGl0IG1vZGlmaWVzIGBwcHBfaW9jdGxgIHdpdGggYSBuZXcgYm91bmRzIGNoZWNrIG9uIHRoZSBNUlUgdmFsdWUgZm9yIGBQUFBJT0NTTVJVYC4gSXQgYWxzbyBhZGp1c3RzIGBkZXYtXHUwMDNlbWluX210dWAgd2l0aGluIGBwcHBfc2V0dXBgLCBhbmQgaXQncyBtYWtpbmcgY2hhbmdlcyB0byBNVFUgcmVhZGluZyBpbiBgcGFkX2NvbXByZXNzX3NrYmAgdXNpbmcgYFJFQURfT05DRWAuIFllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGV4ZWN1dGFibGUgY29kZSwgYW5kIHdlIGFyZSBzZXR0aW5nIFdvcnRoRnV6emluZyB0byBUUlVFLlxuXG5Ob3csIGxldCdzIGhvbmUgaW4gb24gdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgZm9yIG91ciBmb2N1cyBzeW1ib2xzLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgZnVuY3Rpb25zIGFyZTpcblxuKiAgIGBwcHBfaW9jdGxgXG4qICAgYHBwcF9zZXR1cGBcbiogICBgcGFkX2NvbXByZXNzX3NrYmBcblxuSW50ZXJlc3RpbmdseSwgYHBhZF9jb21wcmVzc19za2JgIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgYnV0IGl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpcyBiZWluZyB1c2VkIHRvIGZpbmQgcG90ZW50aWFsIGJ1Z3MuIFRoaXMgaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIG9mIHRoZSBmb3JtIGBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICogcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpYC4gTm93IEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgcGFkX2NvbXByZXNzX3NrYmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMjgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOToyNC4xODkxNjYzMDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjY3MzQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWRfY29tcHJlc3Nfc2tiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNzI0PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE3MjU6cGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTcyNi17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNzg1PXBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE4NzktXFx0XFx0fVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE4ODA6XFx0XFx0bmV3X3NrYiA9IHBhZF9jb21wcmVzc19za2IocHBwLCBza2IpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE4ODEtXFx0XFx0aWYgKCFuZXdfc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOToyNC43NjU4NDQ4NzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4OTYzMDQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGF0YSBDb21wcmVzc2lvbiBpbiB0aGUgTmV0d29yayBTdGFjayoqXG5cbk9rYXksIHNvIGBwYWRfY29tcHJlc3Nfc2tiYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGVyZSdzIHRoYXQgYmVpbmcgdXNlZD8gRnJvbSB3aGF0IEkgY2FuIHNlZSwgaXQncyBjYWxsZWQgZGlyZWN0bHkgYnkgYHBwcF9wcmVwYXJlX3R4X3NrYmAsIG9yIGF0IGxlYXN0IGlubGluZWQgaW4gdGhlcmUuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlICpjYWxsZXJzKiBvZiBgcHBwX3ByZXBhcmVfdHhfc2tiYCBpdHNlbGYuIFRoYXQnbGwgc2hvdyBtZSB3aGVyZSB0aGUgY29tcHJlc3Npb24sIG9yICphdHRlbXB0KiBhdCBjb21wcmVzc2lvbiwgaXMgYWN0dWFsbHkgaW5pdGlhdGVkIHdpdGhpbiB0aGUgZGF0YSB0cmFuc21pc3Npb24gcHJvY2Vzcy4gS25vd2luZyB0aGUgb3JpZ2lucyBvZiB0aGF0IGZ1bmN0aW9uIHdpbGwgZ2l2ZSBtZSBhIG1vcmUgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIG5ldHdvcmsgc3RhY2suIE5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOToyNi45NTU0Nzg0NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDExNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcF9wcmVwYXJlX3R4X3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MjY2PXN0YXRpYyB2b2lkIHBwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoyNjc6c3RhdGljIGludCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTI2OC1zdGF0aWMgaW50IHBwcF9wdXNoKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNjcwPXN0YXRpYyB2b2lkIF9fcHBwX3htaXRfcHJvY2VzcyhzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNjc2LVxcdH1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNjc3OlxcdGlmICh1bmxpa2VseShwcHBfcHJlcGFyZV90eF9za2IocHBwLCBcXHUwMDI2c2tiKSkpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTY3OC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE3ODQ9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE3ODU6cHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE3ODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOToyNy4wNjE4OTQ5MzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU0MzU5NTY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgUFBQIFRyYW5zbWlzc2lvbiBQYXRoKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgdHJhbnNtaXNzaW9uIHByb2Nlc3MgZm9yIFBQUC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSB0cmFuc21pc3Npb24gZnVuY3Rpb25zLiBJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYF9fcHBwX3htaXRfcHJvY2Vzc2AuIEl0J3MgYSBmYWlybHkgY29tbW9uIGNvbnZlbnRpb24gdG8gdXNlIGRvdWJsZSB1bmRlcnNjb3JlcyBmb3IgaW50ZXJuYWwga2VybmVsIGZ1bmN0aW9ucywgc28gdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUuIElmIHRoYXQgZG9lc24ndCBpbW1lZGlhdGVseSByZXZlYWwgdGhlIG1haW4gdHJhbnNtaXNzaW9uIGZsb3csIEknbGwgdGhlbiBjaGVjayBgcHBwX3htaXRfcHJvY2Vzc2AuIEl0J3MgcG9zc2libGUgdGhlIGxlYWRpbmcgZG91YmxlIHVuZGVyc2NvcmUgZGVub3RlcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIHdoaWxlIHRoZSBzaW5nbGUgdW5kZXJzY29yZWQgdmVyc2lvbiBpcyB0aGUgcHVibGljIEFQSS4gQW5kLCBpZiBuZWl0aGVyIG9mIHRob3NlIGFyZSBxdWl0ZSB3aGF0IEknbSBzZWFyY2hpbmcgZm9yLCBJIHdpbGwgYWxzbyBjaGVjayBgcHBwX3N0YXJ0X3htaXRgLiBUaGF0IG5hbWUgc3VnZ2VzdHMgaXQgY291bGQgYmUgdGhlIGZ1bmN0aW9uIHRoYXQga2lja3Mgb2ZmIHRoZSBhY3R1YWwgdHJhbnNtaXNzaW9uIHNlcXVlbmNlLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHF1ZXVpbmcgcGFja2V0cyBmb3IgUFBQIHRyYW5zbWlzc2lvbiBhbmQgaG93IGl0IHRoZW4gaGFuZHMgdGhlbSBvZmYgdG8gdGhlIGxvd2VyIGxheWVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY3NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjMxLjYwNTQ5MzcxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTA1NjI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfc3RhcnRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTQ1Mz1zdGF0aWMgbmV0ZGV2X3R4X3RcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNDU0OnBwcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTQ1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNjE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHBwX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNjE3LVxcdC5uZG9fdW5pbml0ICAgICAgPSBwcHBfZGV2X3VuaW5pdCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNjE4OlxcdC5uZG9fc3RhcnRfeG1pdCAgPSBwcHBfc3RhcnRfeG1pdCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNjE5LVxcdC5uZG9fc2lvY2RldnByaXZhdGUgPSBwcHBfbmV0X3Npb2NkZXZwcml2YXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOTozMS42NzQ1NTkwMDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY4MTYxNjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQUFAtUmVsYXRlZCBLZXJuZWwgRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3Mgc2VlLiBJJ20gbG9va2luZyBhdCBhIGZldyBpbnRlcmVzdGluZyBmdW5jdGlvbnMgaGVyZSDigJMgYHBwcF9pb2N0bGAsIGBwcHBfc2V0dXBgLCBgcGFkX2NvbXByZXNzX3NrYmAsIGFuZCBgcHBwX3ByZXBhcmVfdHhfc2tiYC4gVGhlc2UgYXJlIGFsbCBzb3VuZGluZyBsaWtlIGtleSBwbGF5ZXJzIGluIHRoZSBQUFAgKFBvaW50LXRvLVBvaW50IFByb3RvY29sKSBzdGFjaywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cbkZpcnN0LCBJIHNlZSB0aGF0IHRoZSBgUFBQYCBjb25maWcgb3B0aW9uIGRpcmVjdGx5IGJ1aWxkcyB0aGUgYHBwcF9nZW5lcmljLmNgIGZpbGUuIFNpbXBsZSBlbm91Z2gsIGJ1dCBhcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcyBsdXJraW5nIGFyb3VuZD8gQWx3YXlzIGdvdHRhIGNoZWNrIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cbkxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBzcGVjaWZpY2FsbHksIEkgc2VlIHRoZSBgUFBQYCBjb25maWcgb3B0aW9uIGlzIHRyaXN0YXRlIGFuZCBzZWxlY3RzIGBTTEhDYC4gVGhhdCdzIGltcG9ydGFudDsgSSBuZWVkIHRvIGtlZXAgdGhhdCBgU0xIQ2AgZGVwZW5kZW5jeSBpbiBtaW5kLiBJdCdzIG9mdGVuIHRoZSBjYXNlIHRoYXQgc2VlbWluZ2x5IGluZGVwZW5kZW50IGZlYXR1cmVzIGhhdmUgaW50ZXJkZXBlbmRlbmNpZXMuXG5cbk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYmVjYXVzZSBpdCdzIGdvb2QgcHJhY3RpY2UsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8gcnVuIGEgcXVpY2sgYGdyZXBgIGZvciB0aGUgYHNvdXJjZSBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCJgIGxpbmUgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBjcnVjaWFsIGRlcGVuZGVuY2llcyBkZWZpbmVkIHVwc3RyZWFtLiBNYWtpbmcgc3VyZSBJJ3ZlIGdvdCB0aGUgd2hvbGUgcGljdHVyZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE5NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOTozNi4zNTYxNzgxNTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MjUxNDcxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTUyNj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BsaXAvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnLTUyNy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjUyODpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNTI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOTozNi42Mjg2OTgwMjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUzNjYzNzQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uIElzc3VlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gQmFzZWQgb24gd2hhdCBJJ3ZlIGJlZW4gc2VlaW5nLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBhIHNwZWNpZmljIG5ldHdvcmsgZHJpdmVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGp1bXAgaW50byBgZHJpdmVycy9uZXQvS2NvbmZpZ2Ag4oCTIEkga25vdyB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwncyBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uIGxvZ2ljIHJlc2lkZXMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHNjYW4gYXJvdW5kIGxpbmUgNTI4LiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGdvdmVybnMgdGhlIGRyaXZlcidzIGluY2x1c2lvbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBlbmNsb3NpbmcgYGlmYCBzdGF0ZW1lbnRzLCBvciBhbnkgZGlyZWN0IGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIGNvbnRyb2xsaW5nIHdoZXRoZXIgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBpcyBjb21waWxlZC4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGNvbmZpZ3VyYXRpb24gcHJvYmxlbXMgYW5kIGZvciBlbnN1cmluZyB0aGUgZHJpdmVyIGlzIHByb3Blcmx5IGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGFuZCBoYXJkd2FyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGUuZy4sIGBDT05GSUdfRk9PX0RSSVZFUmAsIGBDT05GSUdfQkFSX0hBUkRXQVJFYCkgdGhhdCBtdXN0IGJlIHNldCBpbiBvcmRlciBmb3IgdGhpcyBkcml2ZXIgdG8gYmUgYnVpbHQuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzY1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6MzkuMTY1MzM5MTc3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXFxcIlxcbiA1MjE6XFx0XFxuIDUyMjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xcXCJcXG4gNTIzOlxcdFxcbiA1MjQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1xcXCJcXG4gNTI1OlxcdFxcbiA1MjY6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcXFwiXFxuIDUyNzpcXHRcXG4gNTI4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcXFwiXFxuIDUyOTpcXHRcXG4gNTMwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnXFxcIlxcbiA1MzE6XFx0XFxuIDUzMjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ1xcXCJcXG4gNTMzOlxcdFxcbiA1MzQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1xcXCJcXG4gNTM1OlxcdFxcbiA1MzY6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnXFxcIlxcbiA1Mzc6XFx0XFxuIDUzODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dhbi9LY29uZmlnXFxcIlxcbiA1Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjM5LjE2NTQyMzQyN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ0MzQ2Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OlxuXG4qKkV4YW1pbmluZyBOZXR3b3JrIERldmljZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IG5ldHdvcmsgZGV2aWNlcyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBidWlsZCBzeXN0ZW0uIFRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBORVRERVZJQ0VTYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgaXMgYSB2ZXJ5IGNvbW1vbiB2YXJpYWJsZSBuYW1lIHVzZWQgaW4gdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBkZXZpY2UgZHJpdmVycy4gSXQncyBoaWdobHkgcHJvYmFibGUgdGhpcyBpcyBkZWZpbmVkIGluIHRoZSBuZXR3b3JraW5nIGRyaXZlciBzZWN0aW9uLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgYmFzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG5ldHdvcmsgZGV2aWNlcyB3aXRoaW4gdGhlIGN1cnJlbnQgYnVpbGQgZW52aXJvbm1lbnQuIEZyb20gdGhlcmUsIEkgY2FuIGludmVzdGlnYXRlIHRoZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgb3Igc3ViLWNvbmZpZ3VyYXRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSB0b3AtbGV2ZWwgc3ltYm9sIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBuZXR3b3JrIGRldmljZSBzdXBwb3J0LCBhbmQgcG9zc2libHkgc29tZSBnZW5lcmFsIHNldHRpbmdzIHJlbGF0ZWQgdG8gdmFyaW91cyBuZXR3b3JrIGRldmljZSB0eXBlcy4gVGhpcyBpcyB0aGUgY29ycmVjdCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgbmV0d29ya2luZyBkZXZpY2UgY29uZmlndXJhdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMyNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6NDEuMzA5NzczNjE2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBORVRERVZJQ0VTXFxuICAgNzpcXHRcXHRkZWZhdWx0IHkgaWYgVU1MXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgIDk6XFx0XFx0Ym9vbCBcXFwiTmV0d29yayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkb24ndCBpbnRlbmQgdG8gY29ubmVjdCB5b3VyIExpbnV4IGJveCB0b1xcbiAgMTI6XFx0XFx0ICBhbnkgb3RoZXIgY29tcHV0ZXIgYXQgYWxsLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFlvdSdsbCBoYXZlIHRvIHNheSBZIGlmIHlvdXIgY29tcHV0ZXIgY29udGFpbnMgYSBuZXR3b3JrIGNhcmQgdGhhdFxcbiAgMTU6XFx0XFx0ICB5b3Ugd2FudCB0byB1c2UgdW5kZXIgTGludXguIElmIHlvdSBhcmUgZ29pbmcgdG8gcnVuIFNMSVAgb3IgUFBQIG92ZXJcXG4gIDE2OlxcdFxcdCAgdGVsZXBob25lIGxpbmUgb3IgbnVsbCBtb2RlbSBjYWJsZSB5b3UgbmVlZCBzYXkgWSBoZXJlLiBDb25uZWN0aW5nXFxuICAxNzpcXHRcXHQgIHR3byBtYWNoaW5lcyB3aXRoIHBhcmFsbGVsIHBvcnRzIHVzaW5nIFBMSVAgbmVlZHMgdGhpcywgYXMgd2VsbCBhc1xcbiAgMTg6XFx0XFx0ICBBWC4yNS9LSVNTIGZvciBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciBhbWF0ZXVyIHJhZGlvIGxpbmtzLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIFNlZSBhbHNvIFxcXCJUaGUgTGludXggTmV0d29yayBBZG1pbmlzdHJhdG9yJ3MgR3VpZGVcXFwiIGJ5IE9sYWYgS2lyY2ggYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjQxLjMwOTg4OTk0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjA2OTI2NzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQUFAgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gYENPTkZJR19QUFBgLCBhbG9uZyB3aXRoIGBDT05GSUdfTkVUREVWSUNFU2AgYW5kIGBDT05GSUdfTkVUYCwgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBoZXJlLiBSZXR1cm5pbmcgYFtcIlBQUFwiXWAgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gdGhpcyBtb2R1bGUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuXG5cbkxldCdzIGRpdmUgZGVlcGVyIGFuZCByZXZpZXcgdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmc6IGBwcHBfaW9jdGxgLCBgcHBwX3NldHVwYCwgYHBwcF9wcmVwYXJlX3R4X3NrYmAsIGFuZCBgcGFkX2NvbXByZXNzX3NrYmAuIFRob3NlIGFyZSB0aGUgbWFpbiBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGFsbCB0aGUgc3ltYm9scyBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLiBJdCdzOiBgcHBwX2lvY3RsYCwgYHBwcF9zZXR1cGAsIGBwYWRfY29tcHJlc3Nfc2tiYCAod2hpY2gsIEkgc2VlLCBpcyBhIHN0YXRpYyBpbmxpbmUsIGdvb2QgdG8ga25vdyksIGFuZCBmaW5hbGx5LCBgcHBwX3ByZXBhcmVfdHhfc2tiYCAod2hpY2gsIG9mIGNvdXJzZSwgY2FsbHMgYHBhZF9jb21wcmVzc19za2JgKS5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBjYWxsZXJzIG9yIGZ1bmN0aW9ucyBJJ20gbWlzc2luZz8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIGlmIGBQUFBfTUlOX01SVWAgb3IgYFBQUF9NSU5fTVRVYCBhcmUgdXNlZCBhbnl3aGVyZSBlbHNlLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cbkNoZWNraW5nIHRoZSBwYXRjaCBpdHNlbGYsIEkgc2VlOiBgUFBQX01JTl9NVFVgIGlzIHVzZWQgaW4gYHBwcF9zZXR1cGAuIEFuZCBgUFBQX01JTl9NUlVgIGlzIHVzZWQgaW4gYHBwcF9pb2N0bGAuIEFoLCBhbmQgYGRldi1cdTAwM2VtdHVgIGlzIGJlaW5nIHJlYWQgc2FmZWx5IHVzaW5nIGBSRUFEX09OQ0VgIHdpdGhpbiBgcGFkX2NvbXByZXNzX3NrYmAuIEV4Y2VsbGVudCwgZ29vZCBwcmFjdGljZS5cblxuQWxyaWdodCwgc2FuaXR5IGNoZWNrIHRpbWUuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBtaW5pbXVtIE1SVSBhbmQgTVRVIGJvdW5kYXJpZXMgZm9yIFBQUCBkZXZpY2VzLiBXZSdyZSB2YWxpZGF0aW5nIHRoZSBNUlUgaW4gYHBwcF9pb2N0bChQUFBJT0NTTVJVKWAsIHNldHRpbmcgYGRldi1cdTAwM2VtaW5fbXR1YCBpbiBgcHBwX3NldHVwKClgLCBhbmQgd2UncmUgc2FmZWx5IHJlYWRpbmcgYGRldi1cdTAwM2VtdHVgIHVzaW5nIGBSRUFEX09OQ0VgIGluIGBwYWRfY29tcHJlc3Nfc2tiKClgLiBUaGUgY29kZSBwYXRoIGlzIGNvbXBsZXRlbHkgcmVhY2hhYmxlIHZpYSBQUFAgZGV2aWNlIGlvY3RscyBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbi4gU28sIHRoaXMgd2FycmFudHMgZnV6emluZyB0byB0ZXN0IGlucHV0IHZhbGlkYXRpb24gYW5kIGNoZWNrIGZvciBhbnkgcmVncmVzc2lvbnMgaW4gTVRVL01SVSBoYW5kbGluZyBvciBza2IgYWxsb2NhdGlvbi5cblxuWWVwLCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gY2FsbCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjYsIk91dHB1dFRva2VucyI6MTY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6NDYuOTE2ODIwMDIzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NzQ1OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWRfY29tcHJlc3Nfc2tiXCIsXG4gICAgXCJwcHBfaW9jdGxcIixcbiAgICBcInBwcF9wcmVwYXJlX3R4X3NrYlwiLFxuICAgIFwicHBwX3NldHVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIFBQUCBuZXR3b3JrIGRldmljZSBjb2RlIGluIGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLiBJdCBlbmZvcmNlcyBtaW5pbXVtIGFuZCBtYXhpbXVtIGJvdW5kcyBjaGVja3Mgb24gTVJVIGluIHBwcF9pb2N0bCAoUFBQSU9DU01SVSksIHNldHMgZGV2LVxcdTAwM2VtaW5fbXR1IGluIHBwcF9zZXR1cCwgYW5kIHVzZXMgUkVBRF9PTkNFIGZvciBNVFUgcmVhZGluZyBpbiBwYWRfY29tcHJlc3Nfc2tiLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBvciBlZGdlIGNhc2VzIGluIFBQUCBNVFUvTVJVIG5lZ290aWF0aW9uIGFuZCBwYWNrZXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFkX2NvbXByZXNzX3NrYlwiLFxuICAgIFwicHBwX2lvY3RsXCIsXG4gICAgXCJwcHBfcHJlcGFyZV90eF9za2JcIixcbiAgICBcInBwcF9zZXR1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBQUFAgbmV0d29yayBkZXZpY2UgY29kZSBpbiBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy4gSXQgZW5mb3JjZXMgbWluaW11bSBhbmQgbWF4aW11bSBib3VuZHMgY2hlY2tzIG9uIE1SVSBpbiBwcHBfaW9jdGwgKFBQUElPQ1NNUlUpLCBzZXRzIGRldi1cXHUwMDNlbWluX210dSBpbiBwcHBfc2V0dXAsIGFuZCB1c2VzIFJFQURfT05DRSBmb3IgTVRVIHJlYWRpbmcgaW4gcGFkX2NvbXByZXNzX3NrYi4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMgb3IgZWRnZSBjYXNlcyBpbiBQUFAgTVRVL01SVSBuZWdvdGlhdGlvbiBhbmQgcGFja2V0IGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOTo0Ny4wNTM1NzQwNjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzUwMjk1MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6NDcuMDU0MjQ2NTYxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTYzNDk2MTY1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbWluaW11bSBib3VuZHMgY2hlY2tzIGZvciBQUFAgTVJVICh2aWEgUFBQSU9DU01SVSkgYW5kIE1UVSAoc2V0dGluZyBkZXYtXFx1MDAzZW1pbl9tdHUpLCBhdm9pZGluZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlbHkgc21hbGwgTVRVIHZhbHVlcy4gSXQgYWxzbyBzbmFwc2hvdHMgZGV2LVxcdTAwM2VtdHUgdXNpbmcgUkVBRF9PTkNFIGluIHBhZF9jb21wcmVzc19za2IoKSB0byBhdm9pZCBpbmNvbnNpc3RlbnQgTVRVIHJlYWRzIGR1cmluZyBidWZmZXIgYWxsb2NhdGlvbiBhbmQgY29tcHJlc3Npb24gc2l6aW5nLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LWRlcGVuZGVudCBjb250cm9sIGZsb3cuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgc2l6aW5nIGlzc3VlcyByZWxhdGVkIHRvIE1UVS9NUlUgY2FsY3VsYXRpb25zIGFyZSBvdXQtb2YtYm91bmRzIG9yIGRhdGEgcmFjZSBpc3N1ZXMgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgS0NTQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI0MjQ1ZGJlOTljMmMwNzRiZTdlMjI5ZWJmMTA2YjdjNzUxNjg0MmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA5OjE5OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuaW5kZXggMWE2MTBhMTg4OTNiYS4uNDAyMjExNzY4Y2Y1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuQEAgLTcyLDYgKzcyLDggQEBcbiBcbiAjZGVmaW5lIFBQUF9QUk9UT19MRU5cdDJcbiAjZGVmaW5lIFBQUF9MQ1BfSERSTEVOXHQ0XG4rI2RlZmluZSBQUFBfTUlOX01UVVx0MTI4XG4rI2RlZmluZSBQUFBfTUlOX01SVVx0MTI4XG4gXG4gLyogVGhlIGZpbHRlciBpbnN0cnVjdGlvbnMgZ2VuZXJhdGVkIGJ5IGxpYnBjYXAgYXJlIGNvbnN0cnVjdGVkXG4gICogYXNzdW1pbmcgYSBmb3VyLWJ5dGUgUFBQIGhlYWRlciBvbiBlYWNoIHBhY2tldCwgd2hlcmUgdGhlIGxhc3RcbkBAIC04MDgsNiArODEwLDEwIEBAIHN0YXRpYyBsb25nIHBwcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRjYXNlIFBQUElPQ1NNUlU6XG4gXHRcdGlmIChnZXRfdXNlcih2YWwsIHApKVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRpZiAodmFsIFx1MDAzYyBQUFBfTUlOX01SVSB8fCB2YWwgXHUwMDNlIElOVF9NQVggLSBQUFBfSERSTEVOIC0gMSkge1xuK1x0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdFx0cHBwX3JlY3ZfbG9jayhwcHApO1xuIFx0XHRwcHAtXHUwMDNlbXJ1ID0gdmFsO1xuIFx0XHRwcHBfcmVjdl91bmxvY2socHBwKTtcbkBAIC0xNjI4LDYgKzE2MzQsNyBAQCBzdGF0aWMgdm9pZCBwcHBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBQUFBfSERSTEVOO1xuIFx0ZGV2LVx1MDAzZW10dSA9IFBQUF9NUlU7XG4rXHRkZXYtXHUwMDNlbWluX210dSA9IFBQUF9NSU5fTVRVO1xuIFx0ZGV2LVx1MDAzZWFkZHJfbGVuID0gMDtcbiBcdGRldi1cdTAwM2V0eF9xdWV1ZV9sZW4gPSAzO1xuIFx0ZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfUFBQO1xuQEAgLTE3MTksMTAgKzE3MjYsMTEgQEAgcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbiBcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xuK1x0aW50IG10dSA9IFJFQURfT05DRShkZXYtXHUwMDNlbXR1KTtcbiBcdGludCBsZW47XG4tXHRpbnQgbmV3X3NrYl9zaXplID0gZGV2LVx1MDAzZW10dSArXG4rXHRpbnQgbmV3X3NrYl9zaXplID0gbXR1ICtcbiBcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgKyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuLVx0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBkZXYtXHUwMDNlbXR1ICtcbitcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gbXR1ICtcbiBcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgKyBQUFBfSERSTEVOO1xuIFxuIFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjQ3LjA1NDI0OTI5MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTEwMzIzNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUFBQIEdlbmVyaWMgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AuIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHNldHRpbmcgYSBtaW5pbXVtIE1UVSBhbmQgTVJVIGZvciBQUFAgaW50ZXJmYWNlcywgYWxvbmcgd2l0aCBzb21lIHJlbGF0ZWQgcmVmYWN0b3JpbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSByZWxldmFudCB0byBzZWN1cml0eSwgZW5zdXJpbmcgYW4gYWJzb2x1dGUgbWluaW11bSBmcmFtZSBzaXplIGZvciBjb3JyZWN0IHBhY2tldCBwcm9jZXNzaW5nLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2U6XG5cbjEuICBXZSd2ZSBnb3QgbmV3IGAjZGVmaW5lYCBzdGF0ZW1lbnRzIGZvciBgUFBQX01JTl9NVFVgIGFuZCBgUFBQX01JTl9NUlVgLCBib3RoIHNldCB0byAxMjguIFRoYXQncyBhIHJlYXNvbmFibGUgbWluaW11bSwgZ2l2ZW4gdGhlIFBQUCBoZWFkZXIgb3ZlcmhlYWQgYW5kIGxpa2VseSBtaW5pbXVtIGRhdGEgcGF5bG9hZCBzaXplcyB3ZSdkIGV4cGVjdCBpbiBtb2Rlcm4gbmV0d29ya3MuXG5cbjIuICBUaGUgYHBwcF9pb2N0bGAgZnVuY3Rpb24gbm93IGhhcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gdGhlIGBQUFBJT0NTTVJVYCBjYXNlLiBUaGlzIGlzIGNydWNpYWw7IGl0J3MgcHJldmVudGluZyB0aGUgTVJVIGZyb20gYmVpbmcgc2V0IHRvIGFuIGFic3VyZGx5IGxvdyB2YWx1ZSwgb3IgcG90ZW50aWFsbHkgYSB2YWx1ZSB0aGF0IGNvdWxkIGxlYWQgdG8gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMsIGEgY29tbW9uIHNvdXJjZSBvZiB2dWxuZXJhYmlsaXR5LiBUaGUgY2hlY2sgYHZhbCBcdTAwM2MgUFBQX01JTl9NUlUgfHwgdmFsIFx1MDAzZSBJTlRfTUFYIC0gUFBQX0hEUkxFTiAtIDFgIHNlZW1zIHByZXR0eSBzb2xpZDsgaXQgY292ZXJzIHRoZSBtaW5pbXVtIE1SVSBhbmQgYWNjb3VudHMgZm9yIHRoZSBoZWFkZXIgbGVuZ3RoLlxuXG4zLiAgYHBwcF9zZXR1cGAgaXMgdXBkYXRpbmcgdGhlIG5ldHdvcmsgZGV2aWNlJ3MgYG1pbl9tdHVgIHRvIHRoZSBkZWZpbmVkIGBQUFBfTUlOX01UVWAgdmFsdWUsIGFsc28gMTI4LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgd2l0aCB0aGUgbWluaW11bSBNVFUgYXQgaW5pdGlhbGl6YXRpb24uXG5cbjQuICBGaW5hbGx5LCBgcGFkX2NvbXByZXNzX3NrYmAgaXMgd2hlcmUgdGhlIGRldmVsb3BlciBhZGRyZXNzZWQgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgYGRldi1cdTAwM2VtdHVgIHZhbHVlLiBJbnN0ZWFkIG9mIHJlYWRpbmcgYGRldi1cdTAwM2VtdHVgIGRpcmVjdGx5LCBpdCdzIG5vdyB1c2luZyBgUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpYCBhbmQgc3RvcmluZyBpdCBpbiBhIGxvY2FsIGBtdHVgIHZhcmlhYmxlLiBUaGlzIGF2b2lkcyBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgb2NjdXIgaWYgdGhlIE1UVSBpcyBjaGFuZ2VkIGNvbmN1cnJlbnRseS4gU21hcnQgbW92ZTsgdXNpbmcgYFJFQURfT05DRWAgaXMgdGhlIHJpZ2h0IHdheSB0byBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgYmVpbmcgcmVhZCBpcyBub3Qgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIuXG5cbkknbGwgd2FudCB0byBpbnNwZWN0IGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AgaXRzZWxmIG5vdy4gSSdsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZXNlIGtleSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtaW5pbXVtIE1UVS9NUlUgb24gb3ZlcmFsbCBQUFAgcGVyZm9ybWFuY2UsIGFuZCBob3cgaXQgaW1wYWN0cyBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjay4gSSdtIGFsc28gY3VyaW91cyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwbGFjZXMgd2hlcmUgcmFjZSBjb25kaXRpb25zIG9uIGBkZXYtXHUwMDNlbXR1YCBtaWdodCBiZSBwcmVzZW50LiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjUzLjk2NDU3NTQ2NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjc4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODAwOlxcdFxcbiA4MDE6XFx0XFx0aWYgKHBmLVxcdTAwM2VraW5kICE9IElOVEVSRkFDRSkge1xcbiA4MDI6XFx0XFx0XFx0LyogY2FuJ3QgaGFwcGVuICovXFxuIDgwMzpcXHRcXHRcXHRwcl9lcnIoXFxcIlBQUDogbm90IGludGVyZmFjZSBvciBjaGFubmVsPz9cXFxcblxcXCIpO1xcbiA4MDQ6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gODA1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA4MDY6XFx0XFx0fVxcbiA4MDc6XFx0XFxuIDgwODpcXHRcXHRwcHAgPSBQRl9UT19QUFAocGYpO1xcbiA4MDk6XFx0XFx0c3dpdGNoIChjbWQpIHtcXG4gODEwOlxcdFxcdGNhc2UgUFBQSU9DU01SVTpcXG4gODExOlxcdFxcdFxcdGlmIChnZXRfdXNlcih2YWwsIHApKVxcbiA4MTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgxMzpcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2MgUFBQX01JTl9NUlUgfHwgdmFsIFxcdTAwM2UgSU5UX01BWCAtIFBQUF9IRFJMRU4gLSAxKSB7XFxuIDgxNDpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiA4MTU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgxNjpcXHRcXHRcXHR9XFxuIDgxNzpcXHRcXHRcXHRwcHBfcmVjdl9sb2NrKHBwcCk7XFxuIDgxODpcXHRcXHRcXHRwcHAtXFx1MDAzZW1ydSA9IHZhbDtcXG4gODE5OlxcdFxcdFxcdHBwcF9yZWN2X3VubG9jayhwcHApO1xcbiA4MjA6XFx0XFx0XFx0ZXJyID0gMDtcXG4gODIxOlxcdFxcdFxcdGJyZWFrO1xcbiA4MjI6XFx0XFxuIDgyMzpcXHRcXHRjYXNlIFBQUElPQ1NGTEFHUzpcXG4gODI0OlxcdFxcdFxcdGlmIChnZXRfdXNlcih2YWwsIHApKVxcbiA4MjU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgyNjpcXHRcXHRcXHRwcHBfbG9jayhwcHApO1xcbiA4Mjc6XFx0XFx0XFx0Y2ZsYWdzID0gcHBwLVxcdTAwM2VmbGFncyBcXHUwMDI2IH52YWw7XFxuIDgyODpcXHQjaWZkZWYgQ09ORklHX1BQUF9NVUxUSUxJTktcXG4gODI5OlxcdFxcdFxcdGlmICghKHBwcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19NVUxUSUxJTkspIFxcdTAwMjZcXHUwMDI2ICh2YWwgXFx1MDAyNiBTQ19NVUxUSUxJTkspKVxcbiA4MzA6XFx0XFx0XFx0XFx0cHBwLVxcdTAwM2VuZXh0c2VxID0gMDtcXG4gODMxOlxcdCNlbmRpZlxcbiA4MzI6XFx0XFx0XFx0cHBwLVxcdTAwM2VmbGFncyA9IHZhbCBcXHUwMDI2IFNDX0ZMQUdfQklUUztcXG4gODMzOlxcdFxcdFxcdHBwcF91bmxvY2socHBwKTtcXG4gODM0OlxcdFxcdFxcdGlmIChjZmxhZ3MgXFx1MDAyNiBTQ19DQ1BfT1BFTilcXG4gODM1OlxcdFxcdFxcdFxcdHBwcF9jY3BfY2xvc2VkKHBwcCk7XFxuIDgzNjpcXHRcXHRcXHRlcnIgPSAwO1xcbiA4Mzc6XFx0XFx0XFx0YnJlYWs7XFxuIDgzODpcXHRcXG4gODM5OlxcdFxcdGNhc2UgUFBQSU9DR0ZMQUdTOlxcbiA4NDA6XFx0XFx0XFx0cHBwX2xvY2socHBwKTtcXG4gODQxOlxcdFxcdFxcdHZhbCA9IHBwcC1cXHUwMDNlZmxhZ3MgfCBwcHAtXFx1MDAzZXhzdGF0ZSB8IHBwcC1cXHUwMDNlcnN0YXRlO1xcbiA4NDI6XFx0XFx0XFx0cHBwX3VubG9jayhwcHApO1xcbiA4NDM6XFx0XFx0XFx0aWYgKHB1dF91c2VyKHZhbCwgcCkpXFxuIDg0NDpcXHRcXHRcXHRcXHRicmVhaztcXG4gODQ1OlxcdFxcdFxcdGVyciA9IDA7XFxuIDg0NjpcXHRcXHRcXHRicmVhaztcXG4gODQ3OlxcdFxcbiA4NDg6XFx0XFx0Y2FzZSBQUFBJT0NTQ09NUFJFU1M6XFxuIDg0OTpcXHRcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjUzLjk2NDkwNjkwNloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzAzOTYzODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgcGFkX2NvbXByZXNzX3NrYmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBgcGFkX2NvbXByZXNzX3NrYmAuIEJhc2VkIG9uIHRoZSBjb250ZXh0IGFuZCBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIHByb2JhYmx5IHJlbGF0ZXMgdG8gbmV0d29yayBidWZmZXIgKFNLQikgcGFkZGluZyBhbmQgY29tcHJlc3Npb24sIGxpa2VseSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIExpbmUgMTcxNSBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6ZSB0aGUgZnVuY3Rpb24uIEknbGwgZm9jdXMgb24gd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBsaW5lIOKAkyBkYXRhIG1hbmlwdWxhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgZXRjLiBXaGF0IHNwZWNpZmljYWxseSBpcyBiZWluZyBkb25lIHRvIGNvbXByZXNzIHRoZSBTS0IgZGF0YT8gQW55IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgaW5lZmZpY2llbmNpZXMgaW4gdGhlIHBhZGRpbmcgcHJvY2Vzcz8gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIHVzZWQgYW5kIHBvdGVudGlhbCBnb3RjaGFzIHJlbGF0ZWQgdG8gaXRzIGltcGxlbWVudGF0aW9uLCBzbyBJIGNhbiBnaXZlIGl0IGEgcmVhbGx5IGNsb3NlIGxvb2suIExldOKAmXMgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwOTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjU2LjY2ODg3MzEyNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTAxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcxNSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcxNTpcXHRlcnI6XFxuMTcxNjpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4xNzE3OlxcdFxcbjE3MTg6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTcxOTpcXHRcXG4xNzIwOlxcdFxcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXFxuMTcyMTpcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldl9mcm9tX3ByaXYocHBwKSwgXFxcInJlY3Vyc2lvbiBkZXRlY3RlZFxcXFxuXFxcIik7XFxuMTcyMjpcXHR9XFxuMTcyMzpcXHRcXG4xNzI0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxcbjE3MjU6XFx0cGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuMTcyNjpcXHR7XFxuMTcyNzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xcbjE3Mjg6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XFxuMTcyOTpcXHRcXHRpbnQgbXR1ID0gUkVBRF9PTkNFKGRldi1cXHUwMDNlbXR1KTtcXG4xNzMwOlxcdFxcdGludCBsZW47XFxuMTczMTpcXHRcXHRpbnQgbmV3X3NrYl9zaXplID0gbXR1ICtcXG4xNzMyOlxcdFxcdFxcdHBwcC1cXHUwMDNleGNvbXAtXFx1MDAzZWNvbXBfZXh0cmEgKyBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcXG4xNzMzOlxcdFxcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gbXR1ICtcXG4xNzM0OlxcdFxcdFxcdHBwcC1cXHUwMDNleGNvbXAtXFx1MDAzZWNvbXBfZXh0cmEgKyBQUFBfSERSTEVOO1xcbjE3MzU6XFx0XFxuMTczNjpcXHRcXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxcbjE3Mzc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTczODpcXHRcXG4xNzM5OlxcdFxcdG5ld19za2IgPSBhbGxvY19za2IobmV3X3NrYl9zaXplLCBHRlBfQVRPTUlDKTtcXG4xNzQwOlxcdFxcdGlmICghbmV3X3NrYikge1xcbjE3NDE6XFx0XFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4xNzQyOlxcdFxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiUFBQOiBubyBtZW1vcnkgKGNvbXAgcGt0KVxcXFxuXFxcIik7XFxuMTc0MzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNzQ0OlxcdFxcdH1cXG4xNzQ1OlxcdFxcdGlmIChkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiBcXHUwMDNlIFBQUF9IRFJMRU4pXFxuMTc0NjpcXHRcXHRcXHRza2JfcmVzZXJ2ZShuZXdfc2tiLCBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIFBQUF9IRFJMRU4pO1xcbjE3NDc6XFx0XFxuMTc0ODpcXHRcXHQvKiBjb21wcmVzc29yIHN0aWxsIGV4cGVjdHMgQS9DIGJ5dGVzIGluIGhkciAqL1xcbjE3NDk6XFx0XFx0bGVuID0gcHBwLVxcdTAwM2V4Y29tcC1cXHUwMDNlY29tcHJlc3MocHBwLVxcdTAwM2V4Y19zdGF0ZSwgc2tiLVxcdTAwM2VkYXRhIC0gMixcXG4xNzUwOlxcdFxcdFxcdFxcdFxcdCAgIG5ld19za2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuICsgMixcXG4xNzUxOlxcdFxcdFxcdFxcdFxcdCAgIGNvbXByZXNzb3Jfc2tiX3NpemUpO1xcbjE3NTI6XFx0XFx0aWYgKGxlbiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgKHBwcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DQ1BfVVApKSB7XFxuMTc1MzpcXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbjE3NTQ6XFx0XFx0XFx0c2tiID0gbmV3X3NrYjtcXG4xNzU1OlxcdFxcdFxcdHNrYl9wdXQoc2tiLCBsZW4pO1xcbjE3NTY6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCAyKTtcXHQvKiBwdWxsIG9mZiBBL0MgYnl0ZXMgKi9cXG4xNzU3OlxcdFxcdH0gZWxzZSBpZiAobGVuID09IDApIHtcXG4xNzU4OlxcdFxcdFxcdC8qIGRpZG4ndCBjb21wcmVzcywgb3IgQ0NQIG5vdCB1cCB5ZXQgKi9cXG4xNzU5OlxcdFxcdFxcdGNvbnN1bWVfc2tiKG5ld19za2IpO1xcbjE3NjA6XFx0XFx0XFx0bmV3X3NrYiA9IHNrYjtcXG4xNzYxOlxcdFxcdH0gZWxzZSB7XFxuMTc2MjpcXHRcXHRcXHQvKlxcbjE3NjM6XFx0XFx0XFx0ICogKGxlbiBcXHUwMDNjIDApXFxuMTc2NDpcXHRcXHRcXHQgKiBNUFBFIHJlcXVpcmVzIHRoYXQgd2UgZG8gbm90IHNlbmQgdW5lbmNyeXB0ZWRcXG4xNzY1OlxcdFxcdFxcdCAqIGZyYW1lcy4gIFRoZSBjb21wcmVzc29yIHdpbGwgcmV0dXJuIC0xIGlmIHdlXFxuMTc2NjpcXHRcXHRcXHQgKiBzaG91bGQgZHJvcCB0aGUgZnJhbWUuICBXZSBjYW5ub3Qgc2ltcGx5IHRlc3RcXG4xNzY3OlxcdFxcdFxcdCAqIHRoZSBjb21wcmVzc19wcm90byBiZWNhdXNlIE1QUEUgYW5kIE1QUEMgc2hhcmVcXG4xNzY4OlxcdFxcdFxcdCAqIHRoZSBzYW1lIG51bWJlci5cXG4xNzY5OlxcdFxcdFxcdCAqL1xcbjE3NzA6XFx0XFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4xNzcxOlxcdFxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwicHBwOiBjb21wcmVzc29yIGRyb3BwZWQgcGt0XFxcXG5cXFwiKTtcXG4xNzcyOlxcdFxcdFxcdGNvbnN1bWVfc2tiKG5ld19za2IpO1xcbjE3NzM6XFx0XFx0XFx0bmV3X3NrYiA9IE5VTEw7XFxuMTc3NDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjU2LjY2OTE4NjIwNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzM0NjQ1NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIENvbmNlcm5zIEhlcmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCdzIHRoZSBjb3JlIGlzc3VlIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZz8gQmFzZWQgb24gdGhlIGRldGFpbHMsIEknbSBsZWFuaW5nIHRvd2FyZHMgZGF0YSByYWNlcywgaW50ZWdlciBvdmVyZmxvd3MsIG9yIHBvdGVudGlhbCBNVFUgYm91bmRhcnkgcHJvYmxlbXMuXG5cbk5vdywgbGV0J3MgZ28gc3RlcC1ieS1zdGVwIHRocm91Z2ggdGhlIGxvZ2ljOlxuXG4xLiAgVGhlIGBtaW5fbXR1ID0gUFBQX01JTl9NVFVgIGFzc2lnbm1lbnQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIHB1dHRpbmcgYSBmbG9vciBvbiB0aGUgTVRVLCBlbnN1cmluZyBpdCdzIG5vdCBzZXQgdG8gcmlkaWN1bG91c2x5IGxvdyB2YWx1ZXMsIHdoaWNoIHdvdWxkIGJlIGVpdGhlciB6ZXJvIG9yIGxlc3MgdGhhbiAxMjggdmlhIHRoZSBzdGFuZGFyZCBuZXRkZXZpY2UgTVRVIGludGVyZmFjZS4gVGhpcyBpcyBnb29kIHByYWN0aWNlLlxuMi4gIFRoZSBgUFBQSU9DU01SVWAgYm91bmRzIGNoZWNrIGlzIGNyaXRpY2FsLiBJdCdzIHByZXZlbnRpbmcgdGhlIGBwcHAtXHUwMDNlbXJ1YCBmcm9tIGJlaW5nIHNldCB0byBlaXRoZXIgdGlueSB2YWx1ZXMgd2hpY2ggY2FuIGNhdXNlIGludGVnZXIgb3ZlcmZsb3csIG9yIG1hc3NpdmUgdmFsdWVzLCBsZWFkaW5nIHRvIG1lbW9yeSBwcm9ibGVtcy4gVGhlIHJhbmdlIGNoZWNrIHVzaW5nIGBQUFBfTUlOX01SVWAgYW5kIGBJTlRfTUFYIC0gUFBQX0hEUkxFTiAtIDFgIGNvdmVycyBhIGxvdCBvZiB0aGUgcG90ZW50aWFsIGZhaWx1cmUgY2FzZXMuXG4zLiAgVGhlIGBSRUFEX09OQ0UoZGV2LVx1MDAzZW10dSlgIHNuYXBzaG90IGluIGBwYWRfY29tcHJlc3Nfc2tiYCBpcyB3aGF0IHJlYWxseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gVGhlIHBvdGVudGlhbCBkYXRhIHJhY2Ugd2hlcmUgYGRldi1cdTAwM2VtdHVgIGNvdWxkIGJlIHJlYWQgY29uY3VycmVudGx5IGFuZCBjaGFuZ2UgbWlkLWNvbXB1dGF0aW9uIGlzIG5vdyBiZWluZyBhdm9pZGVkLiBUaGlzIHByZXZlbnRzIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIGBuZXdfc2tiX3NpemVgIGFuZCBgY29tcHJlc3Nvcl9za2Jfc2l6ZWAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIGNyYXNoZXMsIG9yIHRyaWdnZXIgS0NTQU4uXG5cblNvLCB0aGUgbmV4dCBxdWVzdGlvbjogZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IExldCdzIGNoZWNrOlxuXG4xLiAgQXJlIHRoZXJlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbj8gTm8sIHRoYXQncyBub3QgYSBmYWN0b3IgaGVyZS5cbjIuICBJcyB0aGVyZSBhbnkgYnJhbmNoaW5nIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLlxuMy4gIEFyZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBiZWluZyBhbGxvY2F0ZWQgYW5kIHRoZW4gcmVhZD8gTm8uXG40LiAgRmluYWxseSwgZG9lcyB0aGlzIHBhdGNoIG1vZGlmeSBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCAqYWxsb3dzKiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBBYnNvbHV0ZWx5IG5vdC4gSW4gZmFjdCwgaXQncyBtYWtpbmcgdGhpbmdzICptb3JlKiByb2J1c3QgYnkgcmVzdHJpY3RpbmcgTVRVL01SVSB0byBhIGRlZmluZWQgYW5kIHZhbGlkIHJhbmdlIChhdCBsZWFzdCAxMjgpIGFuZCBwcmV2ZW50aW5nIHRob3NlIGludGVnZXIgb3ZlcmZsb3dzLCBvciBpbmNvbnNpc3RlbnQgc2l6ZSBjYWxjdWxhdGlvbnMgZHVyaW5nIHBhY2tldCBjb21wcmVzc2lvbi5cblxuR2l2ZW4gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGF0IHN0YW5kYXJkIEtBU0FOLCBLQ1NBTiwgYW5kIGdlbmVyYWwgdGVzdGluZyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgaXNzdWVzLlxuXG5JbiBzdW1tYXJ5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIHNldHRpbmcgc2FmZSBtaW5pbXVtIE1UVS9NUlUgYm91bmRzIGFuZCBpbnRyb2R1Y2VzIGFuIE1UVSBzbmFwc2hvdCB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGluY29uc2lzdGVuY2llcyBpbiBidWZmZXIgc2l6aW5nIGR1cmluZyBjb21wcmVzc2lvbi4gVGhpcyBpcyBhIHZlcnkgZ29vZCBjaGFuZ2UsIGFuZCB0aGVyZSBhcmUgbm8gYXBwYXJlbnQgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBpbnRyb2R1Y2VkLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJ20gaGFwcHkgd2l0aCB0aGlzIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjgsIk91dHB1dFRva2VucyI6MTg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MjA6MDMuNDAzODM3MDQyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG1pbmltdW0gYm91bmRzIGNoZWNrcyBmb3IgUFBQIE1SVSAodmlhIFBQUElPQ1NNUlUpIGFuZCBNVFUgKHNldHRpbmcgZGV2LVxcdTAwM2VtaW5fbXR1KSwgYXZvaWRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIGV4Y2Vzc2l2ZWx5IHNtYWxsIE1UVSB2YWx1ZXMuIEl0IGFsc28gc25hcHNob3RzIGRldi1cXHUwMDNlbXR1IHVzaW5nIFJFQURfT05DRSBpbiBwYWRfY29tcHJlc3Nfc2tiKCkgdG8gYXZvaWQgaW5jb25zaXN0ZW50IE1UVSByZWFkcyBkdXJpbmcgYnVmZmVyIGFsbG9jYXRpb24gYW5kIGNvbXByZXNzaW9uIHNpemluZy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeS1kZXBlbmRlbnQgY29udHJvbCBmbG93LiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgYnVmZmVyIHNpemluZyBpc3N1ZXMgcmVsYXRlZCB0byBNVFUvTVJVIGNhbGN1bGF0aW9ucyBhcmUgb3V0LW9mLWJvdW5kcyBvciBkYXRhIHJhY2UgaXNzdWVzIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG1pbmltdW0gYm91bmRzIGNoZWNrcyBmb3IgUFBQIE1SVSAodmlhIFBQUElPQ1NNUlUpIGFuZCBNVFUgKHNldHRpbmcgZGV2LVxcdTAwM2VtaW5fbXR1KSwgYXZvaWRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIGV4Y2Vzc2l2ZWx5IHNtYWxsIE1UVSB2YWx1ZXMuIEl0IGFsc28gc25hcHNob3RzIGRldi1cXHUwMDNlbXR1IHVzaW5nIFJFQURfT05DRSBpbiBwYWRfY29tcHJlc3Nfc2tiKCkgdG8gYXZvaWQgaW5jb25zaXN0ZW50IE1UVSByZWFkcyBkdXJpbmcgYnVmZmVyIGFsbG9jYXRpb24gYW5kIGNvbXByZXNzaW9uIHNpemluZy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeS1kZXBlbmRlbnQgY29udHJvbCBmbG93LiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgYnVmZmVyIHNpemluZyBpc3N1ZXMgcmVsYXRlZCB0byBNVFUvTVJVIGNhbGN1bGF0aW9ucyBhcmUgb3V0LW9mLWJvdW5kcyBvciBkYXRhIHJhY2UgaXNzdWVzIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpqpx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 08:56:33 +0000 UTC FinishedAt: 2026-09-08 09:20:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "8d6cd188508513503805c156165de38e4e4a8615", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "8d6cd188508513503805c156165de38e4e4a8615", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP" ], "series_id": "54a96ed3-8405-4899-a9a0-896307bdfecc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "pad_compress_skb", "ppp_ioctl", "ppp_prepare_tx_skb", "ppp_setup" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZF9jb21wcmVzc19za2ImIzM0OywKICAgICYjMzQ7cHBwX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcF9wcmVwYXJlX3R4X3NrYiYjMzQ7LAogICAgJiMzNDtwcHBfc2V0dXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG1pbmltdW0gYm91bmRzIGNoZWNrcyBmb3IgUFBQIE1SVSAodmlhIFBQUElPQ1NNUlUpIGFuZCBNVFUgKHNldHRpbmcgZGV2LVx1MDAzZW1pbl9tdHUpLCBhdm9pZGluZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlbHkgc21hbGwgTVRVIHZhbHVlcy4gSXQgYWxzbyBzbmFwc2hvdHMgZGV2LVx1MDAzZW10dSB1c2luZyBSRUFEX09OQ0UgaW4gcGFkX2NvbXByZXNzX3NrYigpIHRvIGF2b2lkIGluY29uc2lzdGVudCBNVFUgcmVhZHMgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBjb21wcmVzc2lvbiBzaXppbmcuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LWRlcGVuZGVudCBjb250cm9sIGZsb3cuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgc2l6aW5nIGlzc3VlcyByZWxhdGVkIHRvIE1UVS9NUlUgY2FsY3VsYXRpb25zIGFyZSBvdXQtb2YtYm91bmRzIG9yIGRhdGEgcmFjZSBpc3N1ZXMgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgS0NTQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgUFBQIG5ldHdvcmsgZGV2aWNlIGNvZGUgaW4gZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMuIEl0IGVuZm9yY2VzIG1pbmltdW0gYW5kIG1heGltdW0gYm91bmRzIGNoZWNrcyBvbiBNUlUgaW4gcHBwX2lvY3RsIChQUFBJT0NTTVJVKSwgc2V0cyBkZXYtXHUwMDNlbWluX210dSBpbiBwcHBfc2V0dXAsIGFuZCB1c2VzIFJFQURfT05DRSBmb3IgTVRVIHJlYWRpbmcgaW4gcGFkX2NvbXByZXNzX3NrYi4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMgb3IgZWRnZSBjYXNlcyBpbiBQUFAgTVRVL01SVSBuZWdvdGlhdGlvbiBhbmQgcGFja2V0IGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjQyNDVkYmU5OWMyYzA3NGJlN2UyMjllYmYxMDZiN2M3NTE2ODQyYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDk6MTk6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuaW5kZXggMWE2MTBhMTg4OTNiYS4uNDAyMjExNzY4Y2Y1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuQEAgLTcyLDYgJiM0Mzs3Miw4IEBAXG4gXG4gI2RlZmluZSBQUFBfUFJPVE9fTEVOXHQyXG4gI2RlZmluZSBQUFBfTENQX0hEUkxFTlx0NFxuJiM0MzsjZGVmaW5lIFBQUF9NSU5fTVRVXHQxMjhcbiYjNDM7I2RlZmluZSBQUFBfTUlOX01SVVx0MTI4XG4gXG4gLyogVGhlIGZpbHRlciBpbnN0cnVjdGlvbnMgZ2VuZXJhdGVkIGJ5IGxpYnBjYXAgYXJlIGNvbnN0cnVjdGVkXG4gICogYXNzdW1pbmcgYSBmb3VyLWJ5dGUgUFBQIGhlYWRlciBvbiBlYWNoIHBhY2tldCwgd2hlcmUgdGhlIGxhc3RcbkBAIC04MDgsNiAmIzQzOzgxMCwxMCBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0Y2FzZSBQUFBJT0NTTVJVOlxuIFx0XHRpZiAoZ2V0X3VzZXIodmFsLCBwKSlcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDNjIFBQUF9NSU5fTVJVIHx8IHZhbCBcdTAwM2UgSU5UX01BWCAtIFBQUF9IRFJMRU4gLSAxKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuIFx0XHRwcHBfcmVjdl9sb2NrKHBwcCk7XG4gXHRcdHBwcC1cdTAwM2VtcnUgPSB2YWw7XG4gXHRcdHBwcF9yZWN2X3VubG9jayhwcHApO1xuQEAgLTE2MjgsNiAmIzQzOzE2MzQsNyBAQCBzdGF0aWMgdm9pZCBwcHBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBQUFBfSERSTEVOO1xuIFx0ZGV2LVx1MDAzZW10dSA9IFBQUF9NUlU7XG4mIzQzO1x0ZGV2LVx1MDAzZW1pbl9tdHUgPSBQUFBfTUlOX01UVTtcbiBcdGRldi1cdTAwM2VhZGRyX2xlbiA9IDA7XG4gXHRkZXYtXHUwMDNldHhfcXVldWVfbGVuID0gMztcbiBcdGRldi1cdTAwM2V0eXBlID0gQVJQSFJEX1BQUDtcbkBAIC0xNzE5LDEwICYjNDM7MTcyNiwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XG4mIzQzO1x0aW50IG10dSA9IFJFQURfT05DRShkZXYtXHUwMDNlbXR1KTtcbiBcdGludCBsZW47XG4tXHRpbnQgbmV3X3NrYl9zaXplID0gZGV2LVx1MDAzZW10dSAmIzQzO1xuJiM0MztcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgJiM0MztcbiBcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgJiM0MzsgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcbi1cdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gZGV2LVx1MDAzZW10dSAmIzQzO1xuJiM0MztcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gbXR1ICYjNDM7XG4gXHRcdHBwcC1cdTAwM2V4Y29tcC1cdTAwM2Vjb21wX2V4dHJhICYjNDM7IFBQUF9IRFJMRU47XG4gXG4gXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZF9jb21wcmVzc19za2ImIzM0OywKICAgICYjMzQ7cHBwX2lvY3RsJiMzNDssCiAgICAmIzM0O3BwcF9wcmVwYXJlX3R4X3NrYiYjMzQ7LAogICAgJiMzNDtwcHBfc2V0dXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIFBQUCBuZXR3b3JrIGRldmljZSBjb2RlIGluIGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLiBJdCBlbmZvcmNlcyBtaW5pbXVtIGFuZCBtYXhpbXVtIGJvdW5kcyBjaGVja3Mgb24gTVJVIGluIHBwcF9pb2N0bCAoUFBQSU9DU01SVSksIHNldHMgZGV2LVx1MDAzZW1pbl9tdHUgaW4gcHBwX3NldHVwLCBhbmQgdXNlcyBSRUFEX09OQ0UgZm9yIE1UVSByZWFkaW5nIGluIHBhZF9jb21wcmVzc19za2IuIFRoZXNlIHBhdGhzIGFyZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcgdG8gZGV0ZWN0IHJlZ3Jlc3Npb25zIG9yIGVkZ2UgY2FzZXMgaW4gUFBQIE1UVS9NUlUgbmVnb3RpYXRpb24gYW5kIHBhY2tldCBoYW5kbGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI0MjQ1ZGJlOTljMmMwNzRiZTdlMjI5ZWJmMTA2YjdjNzUxNjg0MmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDA5OjE5OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwppbmRleCAxYTYxMGExODg5M2JhLi40MDIyMTE3NjhjZjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYwpAQCAtNzIsNiAmIzQzOzcyLDggQEAKIAogI2RlZmluZSBQUFBfUFJPVE9fTEVOCTIKICNkZWZpbmUgUFBQX0xDUF9IRFJMRU4JNAomIzQzOyNkZWZpbmUgUFBQX01JTl9NVFUJMTI4CiYjNDM7I2RlZmluZSBQUFBfTUlOX01SVQkxMjgKIAogLyogVGhlIGZpbHRlciBpbnN0cnVjdGlvbnMgZ2VuZXJhdGVkIGJ5IGxpYnBjYXAgYXJlIGNvbnN0cnVjdGVkCiAgKiBhc3N1bWluZyBhIGZvdXItYnl0ZSBQUFAgaGVhZGVyIG9uIGVhY2ggcGFja2V0LCB3aGVyZSB0aGUgbGFzdApAQCAtODA4LDYgJiM0Mzs4MTAsMTAgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIAljYXNlIFBQUElPQ1NNUlU6CiAJCWlmIChnZXRfdXNlcih2YWwsIHApKQogCQkJYnJlYWs7CiYjNDM7CQlpZiAodmFsICZsdDsgUFBQX01JTl9NUlUgfHwgdmFsICZndDsgSU5UX01BWCAtIFBQUF9IRFJMRU4gLSAxKSB7CiYjNDM7CQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KIAkJcHBwX3JlY3ZfbG9jayhwcHApOwogCQlwcHAtJmd0O21ydSA9IHZhbDsKIAkJcHBwX3JlY3ZfdW5sb2NrKHBwcCk7CkBAIC0xNjI4LDYgJiM0MzsxNjM0LDcgQEAgc3RhdGljIHZvaWQgcHBwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAlkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbiA9IFBQUF9IRFJMRU47CiAJZGV2LSZndDttdHUgPSBQUFBfTVJVOwomIzQzOwlkZXYtJmd0O21pbl9tdHUgPSBQUFBfTUlOX01UVTsKIAlkZXYtJmd0O2FkZHJfbGVuID0gMDsKIAlkZXYtJmd0O3R4X3F1ZXVlX2xlbiA9IDM7CiAJZGV2LSZndDt0eXBlID0gQVJQSFJEX1BQUDsKQEAgLTE3MTksMTAgJiM0MzsxNzI2LDExIEBAIHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7CiAJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CiYjNDM7CWludCBtdHUgPSBSRUFEX09OQ0UoZGV2LSZndDttdHUpOwogCWludCBsZW47Ci0JaW50IG5ld19za2Jfc2l6ZSA9IGRldi0mZ3Q7bXR1ICYjNDM7CiYjNDM7CWludCBuZXdfc2tiX3NpemUgPSBtdHUgJiM0MzsKIAkJcHBwLSZndDt4Y29tcC0mZ3Q7Y29tcF9leHRyYSAmIzQzOyBkZXYtJmd0O2hhcmRfaGVhZGVyX2xlbjsKLQlpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IGRldi0mZ3Q7bXR1ICYjNDM7CiYjNDM7CWludCBjb21wcmVzc29yX3NrYl9zaXplID0gbXR1ICYjNDM7CiAJCXBwcC0mZ3Q7eGNvbXAtJmd0O2NvbXBfZXh0cmEgJiM0MzsgUFBQX0hEUkxFTjsKIAogCWlmIChza2JfbGluZWFyaXplKHNrYikpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUFBQIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgYWN0aW9uIGlzIGhhcHBlbmluZyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSBob3cgaXQgYWZmZWN0cyBQUFAgZnVuY3Rpb25hbGl0eS4KCkZpcnN0IGdsYW5jZTogaXQmIzM5O3MgYWRkaW5nIGBQUFBfTUlOX01UVSAxMjhgIGFuZCBgUFBQX01JTl9NUlUgMTI4YC4gSG1tLCBlc3RhYmxpc2hpbmcgbWluaW11bXMgZm9yIE1UVSBhbmQgTVJVLiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBzdWdnZXN0cyB0aGVyZSB3YXMgbm8gc3RyaWN0IGxvd2VyIGxpbWl0IGJlZm9yZS4KClRoZW4sIGRpdmluZyBpbnRvIGBwcHBfaW9jdGxgOiB1bmRlciBgUFBQSU9DU01SVWAsIHRoZXJlJiMzOTtzIG5vdyBhIGNoZWNrLiBJdCB2YWxpZGF0ZXMgdGhlIE1SVSB2YWx1ZTogYGlmICh2YWwgJmx0OyBQUFBfTUlOX01SVSB8fCB2YWwgJmd0OyBJTlRfTUFYIC0gUFBQX0hEUkxFTiAtIDEpYC4gU28gaXQmIzM5O3MgZW5zdXJpbmcgdGhhdCB0aGUgcmVxdWVzdGVkIE1SVSBtZWV0cyB0aGlzIG1pbmltdW0gYW5kIGRvZXNuJiMzOTt0IGV4Y2VlZCBhIHNhZmUgdXBwZXIgYm91bmQsIHRoZSBjaGVjayBmb3IgYW4gb3ZlcmZsb3cgb24gdGhlIGFkZGl0aW9uIG9mIGBQUFBfSERSTEVOYCBzdWdnZXN0cyBpdCYjMzk7cyB0byBwcmV2ZW50IGEgYnVmZmVyIG92ZXJmbG93LiBSZXR1cm5pbmcgYC1FSU5WQUxgIGlzIHN0YW5kYXJkIHByYWN0aWNlIHdoZW4gdGhlIE1SVSBpcyBpbnZhbGlkLiBTZW5zaWJsZS4KCk5leHQsIGBwcHBfc2V0dXBgIG5vdyBzZXRzIGBkZXYtJmd0O21pbl9tdHUgPSBQUFBfTUlOX01UVTtgLiBTbywgdGhpcyBgbWluX210dWAgbWVtYmVyIGlzIGJlaW5nIGluaXRpYWxpemVkIGFuZCBpdCYjMzk7cyBiZWluZyBzZXQgdG8gdGhlIG1pbmltdW0gdmFsdWUgd2UgcHJldmlvdXNseSBub3RlZC4gTWFrZXMgc2Vuc2UgZm9yIGVuZm9yY2luZyB0aGF0IG1pbmltdW0gYXQgc2V0dXAuCgpGaW5hbGx5LCBpbiBgcGFkX2NvbXByZXNzX3NrYmAsIHRoZXJlJiMzOTtzIGEgdXNlIG9mIGBSRUFEX09OQ0UoZGV2LSZndDttdHUpYCB3aGljaCBpcyBnb29kLiBUaGV5JiMzOTtyZSB1c2luZyBgUkVBRF9PTkNFYCB0byBlbnN1cmUgYXRvbWljaXR5IGFuZCBwcmV2ZW50IGRhdGEgcmFjZXMgd2hlbiByZWFkaW5nIHRoZSBNVFUgdmFsdWUuIFRoaXMgY29uZmlybXMgdGhlIHZhbHVlIGNhbiBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUuIFNtYXJ0IG1vdmUuCgpOb3csIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8ga25vdyB0aGUgY29udGV4dDogd2hhdCBhcmUgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGZpbGU/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb3IgY29uZmlndXJhdGlvbnMgdGhhdCBpbXBhY3QgdGhpcyBjb2RlLiBJZiB0aGF0IGRvZXNuJiMzOTt0IHlpZWxkIHRoZSBhbnN3ZXIsIEkmIzM5O2xsIG1vdmUgb24gdG8gYGRyaXZlcnMvbmV0L0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gdGhlIE1ha2VmaWxlIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgZW5hYmxlZC4gR290dGEgY2hlY2sgdGhvc2UgcHJlcmVxdWlzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfZ2VuZXJpYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZz02PWNvbmZpZyBQUFBcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0zMi1cdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjMzOlx0ICBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBwcF9nZW5lcmljLlxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzQtXG4tLVxuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTUtXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfUFBQKSAmIzQzOz0gcHBwX2dlbmVyaWMub1xuZHJpdmVycy9uZXQvcHBwL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1BQUF9BU1lOQykgJiM0Mzs9IHBwcF9hc3luYy5vXG4tLVxuZHJpdmVycy9uZXQvcHBwL2JzZF9jb21wLmM9MTg4PXN0YXRpYyBpbnRcdGJzZF9kZWNvbXByZXNzICh2b2lkICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGlzaXplLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9ic2RfY29tcC5jLTE5MC1cbmRyaXZlcnMvbmV0L3BwcC9ic2RfY29tcC5jOjE5MTovKiBUaGVzZSBhcmUgaW4gcHBwX2dlbmVyaWMuYyAqL1xuZHJpdmVycy9uZXQvcHBwL2JzZF9jb21wLmMtMTkyLWV4dGVybiBpbnQgIHBwcF9yZWdpc3Rlcl9jb21wcmVzc29yICAgKHN0cnVjdCBjb21wcmVzc29yICpjcCk7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jPTMyND1wcHBfYXN5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNDEyLSAqIFRoaXMgaXMgY2FsbGVkIGF0IHNvZnRpcnEgbGV2ZWwgdG8gZGVsaXZlciByZWNlaXZlZCBwYWNrZXRzXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmM6NDEzOiAqIHRvIHRoZSBwcHBfZ2VuZXJpYyBjb2RlLCBhbmQgdG8gdGVsbCB0aGUgcHBwX2dlbmVyaWMgY29kZVxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jLTQxNC0gKiBpZiB3ZSBjYW4gYWNjZXB0IG1vcmUgb3V0cHV0IG5vdy5cbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYz01MTU9c3RhdGljIHZvaWQgel9pbmNvbXAodm9pZCAqYXJnLCB1bnNpZ25lZCBjaGFyICppYnVmLCBpbnQgaWNudClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01NjItXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYzo1NjM6LyogVGhlc2UgYXJlIGluIHBwcF9nZW5lcmljLmMgKi9cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jLTU2NC1leHRlcm4gaW50ICBwcHBfcmVnaXN0ZXJfY29tcHJlc3NvciAgIChzdHJ1Y3QgY29tcHJlc3NvciAqY3ApO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTMxNT1wcHBfc3luY19pb2N0bChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQwMi0gKiBUaGlzIGlzIGNhbGxlZCBhdCBzb2Z0aXJxIGxldmVsIHRvIGRlbGl2ZXIgcmVjZWl2ZWQgcGFja2V0c1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NDAzOiAqIHRvIHRoZSBwcHBfZ2VuZXJpYyBjb2RlLCBhbmQgdG8gdGVsbCB0aGUgcHBwX2dlbmVyaWMgY29kZVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNDA0LSAqIGlmIHdlIGNhbiBhY2NlcHQgbW9yZSBvdXRwdXQgbm93LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NTYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgZnJhbWVkIGFzIHlvdXIgdGhvdWdodHM6CgoqKktjb25maWcgRGl2ZSBUaW1lISoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBQUFAgKFBvaW50LXRvLVBvaW50IFByb3RvY29sKSBuZXR3b3JrIGRyaXZlci4gU28sIG15IHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBkZWNpc2lvbnMgZm9yIHRoaXMgZHJpdmVyIGFyZSBkZWZpbmVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2U6CgoqICAgT3B0aW9ucyB0byBlbmFibGUvZGlzYWJsZSBQUFAgc3VwcG9ydCBvdmVyYWxsLgoqICAgQ2hvaWNlcyBmb3Igc3BlY2lmaWMgUFBQIHZhcmlhbnRzIChlLmcuLCBzeW5jaHJvbm91cywgYXN5bmNocm9ub3VzKS4KKiAgIENvbmZpZ3VyYXRpb24gb2YgY29tcHJlc3Npb24gcHJvdG9jb2xzLCBsaWtlIE1QUEUsIG9yIHBlcmhhcHMgb3B0aW9ucyByZWxhdGVkIHRvIENIQVAvUEFQIGF1dGhlbnRpY2F0aW9uLgoqICAgUGVyaGFwcyBzb21lIHNldHRpbmdzIGNvbmNlcm5pbmcgZGlmZmVyZW50IHNlcmlhbCBwb3J0IG1vZGVzLCBvciBsaW5rIGxheWVyIHByb3RvY29scy4KKiAgIElkZWFsbHksIEkmIzM5O2xsIGZpbmQgZG9jdW1lbnRhdGlvbiBvciBjb250ZXh0IGZvciBlYWNoIG9wdGlvbiwgdGhlIGRlcGVuZGVuY2llcyB0aGF0IGdvdmVybiBpdHMgYXZhaWxhYmlsaXR5LCBhbmQgYW55IHJlbGV2YW50IGRlZmF1bHQgc2V0dGluZ3MuCgpCYXNpY2FsbHksIHRoaXMgYEtjb25maWdgIGZpbGUgaXMgdGhlIGJsdWVwcmludCBJIG5lZWQgdG8gbmF2aWdhdGUgdG8gZ3Jhc3AgaG93IHRoaXMgUFBQIGRyaXZlciBpcyB3aXJlZCBhbmQgd2hhdCBrbm9icyBjYW4gYmUgdHVybmVkIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgUFBQXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgU0xIQ1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xuICAxMTpcdFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxuICAxMjpcdFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxuICAxMzpcdFx0ICBvdGhlcndpc2UgeW91IGNhbiYjMzk7dCB1c2UgaXQ7IG1vc3QgSW50ZXJuZXQgYWNjZXNzIHByb3ZpZGVycyB0aGVzZVxuICAxNDpcdFx0ICBkYXlzIHN1cHBvcnQgUFBQIHJhdGhlciB0aGFuIFNMSVAuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XG4gIDE3Olx0XHQgIFx1MDAzY2h0dHBzOi8vcHBwLnNhbWJhLm9yZ1x1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcbiAgMTg6XHRcdCAgcmVjb21tZW5kZWQgaW4gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcdTAwM2UuXG4gIDE5Olx0XHQgIFRoZSBQUFAgb3B0aW9uIGVubGFyZ2VzIHlvdXIga2VybmVsIGJ5IGFib3V0IDE2IEtCLlxuICAyMDpcdFxuICAyMTpcdFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcbiAgMjI6XHRcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcbiAgMjM6XHRcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxuICAyNDpcdFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXG4gIDI1Olx0XHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXG4gIDI2Olx0XHQgIHRoZSBuZXh0IG9wdGlvbiwgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0Oy4gIEZvciBQUFAgb3ZlclxuICAyNzpcdFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXCYjMzQ7U3VwcG9ydFxuICAyODpcdFx0ICBzeW5jaHJvbm91cyBQUFBcJiMzNDssIGJlbG93LlxuICAyOTpcdFxuICAzMDpcdFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFwmIzM0O1ZlcnNpb24gaW5mb3JtYXRpb24gb24gYWxsIHN5bWJvbHNcJiMzNDsgYWJvdmUsIHRoZW5cbiAgMzE6XHRcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcbiAgMzI6XHRcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cbiAgMzM6XHRcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cbiAgMzQ6XHRcbiAgMzU6XHRpZiBQUFBcbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgUFBQX0JTRENPTVBcbiAgMzg6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cJiMzNDtcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2NjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCBjb25zaWRlcmluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIFBQUCBHZW5lcmljIENvZGUqKgoKT2theSwgc28gd2UgbmVlZCB0byB6ZXJvIGluIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gaW4gdGhlIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aG9zZSByZWNlbnRseSB0d2Vha2VkIGxpbmVzLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBUaGUgZ2VuZXJpYyBQUFAgY29kZSBpcyB0aGUgaGVhcnQgb2YgdGhlIHN0YWNrLCBhbmQgYW55IGNoYW5nZXMgdGhlcmUgYXJlIHBvdGVudGlhbGx5IGdvaW5nIHRvIGhhdmUgZmFyLXJlYWNoaW5nIGVmZmVjdHMuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCBtb2RpZmljYXRpb25zIHdlcmUgbWFkZSwgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhlbSwgYW5kIHdoYXQgYXJlYXMgb2YgZnVuY3Rpb25hbGl0eSBtaWdodCBiZSB0b3VjaGVkLiBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGNoYW5nZSBpbnRlcmFjdHMgd2l0aCB0aGUgY29yZSBQUFAgcHJvdG9jb2xzLCB0aGUgaGFuZGxpbmcgb2YgZGlmZmVyZW50IGxpbmsgbGF5ZXJzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb24gdGhpbmdzIGxpa2UgYXV0aGVudGljYXRpb24sIGNvbXByZXNzaW9uLCBvciBlcnJvciBoYW5kbGluZy4gVGltZSB0byBnZXQgbXkgaGVhZCBpbiB0aGF0IGNvZGUuLi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODAwOlx0XG4gODAxOlx0XHRpZiAocGYtXHUwMDNla2luZCAhPSBJTlRFUkZBQ0UpIHtcbiA4MDI6XHRcdFx0LyogY2FuJiMzOTt0IGhhcHBlbiAqL1xuIDgwMzpcdFx0XHRwcl9lcnIoXCYjMzQ7UFBQOiBub3QgaW50ZXJmYWNlIG9yIGNoYW5uZWw/P1xcblwmIzM0Oyk7XG4gODA0Olx0XHRcdGVyciA9IC1FSU5WQUw7XG4gODA1Olx0XHRcdGdvdG8gb3V0O1xuIDgwNjpcdFx0fVxuIDgwNzpcdFxuIDgwODpcdFx0cHBwID0gUEZfVE9fUFBQKHBmKTtcbiA4MDk6XHRcdHN3aXRjaCAoY21kKSB7XG4gODEwOlx0XHRjYXNlIFBQUElPQ1NNUlU6XG4gODExOlx0XHRcdGlmIChnZXRfdXNlcih2YWwsIHApKVxuIDgxMjpcdFx0XHRcdGJyZWFrO1xuIDgxMzpcdFx0XHRpZiAodmFsIFx1MDAzYyBQUFBfTUlOX01SVSB8fCB2YWwgXHUwMDNlIElOVF9NQVggLSBQUFBfSERSTEVOIC0gMSkge1xuIDgxNDpcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gODE1Olx0XHRcdFx0YnJlYWs7XG4gODE2Olx0XHRcdH1cbiA4MTc6XHRcdFx0cHBwX3JlY3ZfbG9jayhwcHApO1xuIDgxODpcdFx0XHRwcHAtXHUwMDNlbXJ1ID0gdmFsO1xuIDgxOTpcdFx0XHRwcHBfcmVjdl91bmxvY2socHBwKTtcbiA4MjA6XHRcdFx0ZXJyID0gMDtcbiA4MjE6XHRcdFx0YnJlYWs7XG4gODIyOlx0XG4gODIzOlx0XHRjYXNlIFBQUElPQ1NGTEFHUzpcbiA4MjQ6XHRcdFx0aWYgKGdldF91c2VyKHZhbCwgcCkpXG4gODI1Olx0XHRcdFx0YnJlYWs7XG4gODI2Olx0XHRcdHBwcF9sb2NrKHBwcCk7XG4gODI3Olx0XHRcdGNmbGFncyA9IHBwcC1cdTAwM2VmbGFncyBcdTAwMjYgfnZhbDtcbiA4Mjg6XHQjaWZkZWYgQ09ORklHX1BQUF9NVUxUSUxJTktcbiA4Mjk6XHRcdFx0aWYgKCEocHBwLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19NVUxUSUxJTkspIFx1MDAyNlx1MDAyNiAodmFsIFx1MDAyNiBTQ19NVUxUSUxJTkspKVxuIDgzMDpcdFx0XHRcdHBwcC1cdTAwM2VuZXh0c2VxID0gMDtcbiA4MzE6XHQjZW5kaWZcbiA4MzI6XHRcdFx0cHBwLVx1MDAzZWZsYWdzID0gdmFsIFx1MDAyNiBTQ19GTEFHX0JJVFM7XG4gODMzOlx0XHRcdHBwcF91bmxvY2socHBwKTtcbiA4MzQ6XHRcdFx0aWYgKGNmbGFncyBcdTAwMjYgU0NfQ0NQX09QRU4pXG4gODM1Olx0XHRcdFx0cHBwX2NjcF9jbG9zZWQocHBwKTtcbiA4MzY6XHRcdFx0ZXJyID0gMDtcbiA4Mzc6XHRcdFx0YnJlYWs7XG4gODM4Olx0XG4gODM5Olx0XHRjYXNlIFBQUElPQ0dGTEFHUzpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDY4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIHRoZSB3ZWVkcyBvZiB0aGlzIHN5c3RlbToKCioqRm9jdXNpbmcgSW46IFBQUCBTZXR1cCBhbmQgU0tCIENvbXByZXNzaW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGxhc2VyLWZvY3VzZWQuIEJhc2VkIG9uIHRoZSBwcmV2aW91cyBhbmFseXNpcywgSSBuZWVkIHRvIHplcm8gaW4gb24gYSBjb3VwbGUgb2Ygc3BlY2lmaWMgYXJlYXMuIE15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRvIHJldmlzaXQgdGhlIGBwcHBfc2V0dXBgIGFuZCBgcGFkX2NvbXByZXNzX3NrYmAgZnVuY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXJvdW5kIGxpbmUgMTYyNSBhbmQgbGluZSAxNzIwIG9mIHRoZSByZWxldmFudCBjb2RlIGZpbGUuIEkgdGhpbmsgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIGltcG9ydGFudCBoYXBwZW5pbmcgdGhlcmUuIExldCBtZSBzdGFydCBieSBkb3VibGUtY2hlY2tpbmcgd2hhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGRvaW5nLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEkmIzM5O2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlaXIgYXJndW1lbnRzIGFuZCByZXR1cm4gdmFsdWVzLiBUaGlzIHNob3VsZCBiZSBhIGZhaXJseSB0YXJnZXRlZCBpbnZlc3RpZ2F0aW9uLCBJIGhvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNjI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE2MjU6XHRcdC5uYW1lID0gXCYjMzQ7cHBwXCYjMzQ7LFxuMTYyNjpcdH07XG4xNjI3Olx0XG4xNjI4Olx0c3RhdGljIHZvaWQgcHBwX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4xNjI5Olx0e1xuMTYzMDpcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZwcHBfbmV0ZGV2X29wcztcbjE2MzE6XHRcdFNFVF9ORVRERVZfREVWVFlQRShkZXYsIFx1MDAyNnBwcF90eXBlKTtcbjE2MzI6XHRcbjE2MzM6XHRcdGRldi1cdTAwM2VsbHR4ID0gdHJ1ZTtcbjE2MzQ6XHRcbjE2MzU6XHRcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBQUFBfSERSTEVOO1xuMTYzNjpcdFx0ZGV2LVx1MDAzZW10dSA9IFBQUF9NUlU7XG4xNjM3Olx0XHRkZXYtXHUwMDNlbWluX210dSA9IFBQUF9NSU5fTVRVO1xuMTYzODpcdFx0ZGV2LVx1MDAzZWFkZHJfbGVuID0gMDtcbjE2Mzk6XHRcdGRldi1cdTAwM2V0eF9xdWV1ZV9sZW4gPSAzO1xuMTY0MDpcdFx0ZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfUFBQO1xuMTY0MTpcdFx0ZGV2LVx1MDAzZWZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQIHwgSUZGX01VTFRJQ0FTVDtcbjE2NDI6XHRcdGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3IgPSBwcHBfZGV2X3ByaXZfZGVzdHJ1Y3RvcjtcbjE2NDM6XHRcdGRldi1cdTAwM2VwY3B1X3N0YXRfdHlwZSA9IE5FVERFVl9QQ1BVX1NUQVRfVFNUQVRTO1xuMTY0NDpcdFx0ZGV2LVx1MDAzZWZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1Q7XG4xNjQ1Olx0XHRkZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBkZXYtXHUwMDNlZmVhdHVyZXM7XG4xNjQ2Olx0XHRuZXRpZl9rZWVwX2RzdChkZXYpO1xuMTY0NzpcdH1cbjE2NDg6XHRcbjE2NDk6XHQvKlxuMTY1MDpcdCAqIFRyYW5zbWl0LXNpZGUgcm91dGluZXMuXG4xNjUxOlx0ICovXG4xNjUyOlx0XG4xNjUzOlx0LyogQ2FsbGVkIHRvIGRvIGFueSB3b3JrIHF1ZXVlZCB1cCBvbiB0aGUgdHJhbnNtaXQgc2lkZSB0aGF0IGNhbiBub3cgYmUgZG9uZSAqL1xuMTY1NDpcdHN0YXRpYyB2b2lkIHBwcF94bWl0X2ZsdXNoKHN0cnVjdCBwcHAgKnBwcClcbjE2NTU6XHR7XG4xNjU2Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuMTY1NzpcdFxuMTY1ODpcdFx0d2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZwcHAtXHUwMDNlZmlsZS54cSkpKSB7XG4xNjU5Olx0XHRcdGlmICh1bmxpa2VseSghcHBwX3B1c2gocHBwLCBza2IpKSkge1xuMTY2MDpcdFx0XHRcdHNrYl9xdWV1ZV9oZWFkKFx1MDAyNnBwcC1cdTAwM2VmaWxlLnhxLCBza2IpO1xuMTY2MTpcdFx0XHRcdHJldHVybjtcbjE2NjI6XHRcdFx0fVxuMTY2MzpcdFx0fVxuMTY2NDpcdFx0LyogSWYgdGhlcmUmIzM5O3Mgbm8gd29yayBsZWZ0IHRvIGRvLCB0ZWxsIHRoZSBjb3JlIG5ldCBjb2RlIHRoYXQgd2UgY2FuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gaXQ6CgoqKkNvbnNpZGVyaW5nIGBwYWRfY29tcHJlc3Nfc2tiYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGFscmVhZHkgaW4gdGhpcyBrZXJuZWwgY29kZSBhbmQgSSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiBvcHRpbWl6aW5nIHRoaXMgcGFydGljdWxhciBhcmVhLiBJJiMzOTt2ZSBjb25zaWRlcmVkIHNldmVyYWwgZmFjdG9ycy4gTm93IEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBhbm90aGVyIGZ1bmN0aW9uLCBJIHNob3VsZCBhbHNvIGNoZWNrIGhvdyBgcGFkX2NvbXByZXNzX3NrYmAgaXMgYmVoYXZpbmcgaW4gdGhlIGN1cnJlbnQgc2NlbmFyaW8uIEl0JiMzOTtzIGltcG9ydGFudCB0byBiZSB0aG9yb3VnaC4gSSBkb24mIzM5O3Qgd2FudCB0byBtaXNzIGFueSBwb3NzaWJsZSBpbnRlcmFjdGlvbiBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBMZXQgbWUgZ28gc2VlIGhvdyB0aGF0IHBsYXlzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBtYXliZSBpdCBpcyBhIGNvbnRyaWJ1dGluZyBmYWN0b3IuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgb3RoZXIgZnVuY3Rpb25zIEkmIzM5O3ZlIGFscmVhZHkgZXhhbWluZWQuIFRoaXMgaXMgYWxsIHBhcnQgb2YgYSBsYXJnZXIgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24gcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTcxMDpcdFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZwcHAtXHUwMDNleG1pdF9yZWN1cnNpb24tXHUwMDNlYmhfbG9jayk7XG4xNzExOlx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjE3MTI6XHRcbjE3MTM6XHRcdHJldHVybjtcbjE3MTQ6XHRcbjE3MTU6XHRlcnI6XG4xNzE2Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjE3MTc6XHRcbjE3MTg6XHRcdGtmcmVlX3NrYihza2IpO1xuMTcxOTpcdFxuMTcyMDpcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbjE3MjE6XHRcdFx0bmV0ZGV2X2VycihuZXRkZXZfZnJvbV9wcml2KHBwcCksIFwmIzM0O3JlY3Vyc2lvbiBkZXRlY3RlZFxcblwmIzM0Oyk7XG4xNzIyOlx0fVxuMTcyMzpcdFxuMTcyNDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxuMTcyNTpcdHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTcyNjpcdHtcbjE3Mjc6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4xNzI4Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcbjE3Mjk6XHRcdGludCBtdHUgPSBSRUFEX09OQ0UoZGV2LVx1MDAzZW10dSk7XG4xNzMwOlx0XHRpbnQgbGVuO1xuMTczMTpcdFx0aW50IG5ld19za2Jfc2l6ZSA9IG10dSAmIzQzO1xuMTczMjpcdFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSAmIzQzOyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuMTczMzpcdFx0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgJiM0MztcbjE3MzQ6XHRcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgJiM0MzsgUFBQX0hEUkxFTjtcbjE3MzU6XHRcbjE3MzY6XHRcdGlmIChza2JfbGluZWFyaXplKHNrYikpXG4xNzM3Olx0XHRcdHJldHVybiBOVUxMO1xuMTczODpcdFxuMTczOTpcdFx0bmV3X3NrYiA9IGFsbG9jX3NrYihuZXdfc2tiX3NpemUsIEdGUF9BVE9NSUMpO1xuMTc0MDpcdFx0aWYgKCFuZXdfc2tiKSB7XG4xNzQxOlx0XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4xNzQyOlx0XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O1BQUDogbm8gbWVtb3J5IChjb21wIHBrdClcXG5cJiMzNDspO1xuMTc0MzpcdFx0XHRyZXR1cm4gTlVMTDtcbjE3NDQ6XHRcdH1cbjE3NDU6XHRcdGlmIChkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIFx1MDAzZSBQUFBfSERSTEVOKVxuMTc0NjpcdFx0XHRza2JfcmVzZXJ2ZShuZXdfc2tiLCBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gUFBQX0hEUkxFTik7XG4xNzQ3Olx0XG4xNzQ4Olx0XHQvKiBjb21wcmVzc29yIHN0aWxsIGV4cGVjdHMgQS9DIGJ5dGVzIGluIGhkciAqL1xuMTc0OTpcdFx0bGVuID0gcHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXByZXNzKHBwcC1cdTAwM2V4Y19zdGF0ZSwgc2tiLVx1MDAzZWRhdGEgLSAyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjI4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhpcyBwYXRjaCBhZmZlY3RzIHJlYWNoYWJsZSBjb2RlLiBBaCwgeWVzLCBQUFAg4oCTIHBvaW50LXRvLXBvaW50IHByb3RvY29sLiBUaGF0JiMzOTtzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gU3l6a2FsbGVyIGlzIGFsbCBvdmVyIGAvZGV2L3BwcGAgYW5kIGFsbCB0aGUgYXNzb2NpYXRlZCBpb2N0bHMgbGlrZSBgUFBQSU9DU01SVWAg4oCTIGNsYXNzaWMgZnV6emluZyB0YXJnZXRzLiBTbywgY2hlY2ssIHRoZSBjb2RlIGlzIHJlYWNoYWJsZS4KCk5leHQsIGRvZXMgaXQgYWN0dWFsbHkgdG91Y2ggZXhlY3V0YWJsZSBjb2RlIHRoYXQmIzM5O3Mgd29ydGggb3VyIHRpbWU/IExvb2tzIGxpa2UgaXQgbW9kaWZpZXMgYHBwcF9pb2N0bGAgd2l0aCBhIG5ldyBib3VuZHMgY2hlY2sgb24gdGhlIE1SVSB2YWx1ZSBmb3IgYFBQUElPQ1NNUlVgLiBJdCBhbHNvIGFkanVzdHMgYGRldi0mZ3Q7bWluX210dWAgd2l0aGluIGBwcHBfc2V0dXBgLCBhbmQgaXQmIzM5O3MgbWFraW5nIGNoYW5nZXMgdG8gTVRVIHJlYWRpbmcgaW4gYHBhZF9jb21wcmVzc19za2JgIHVzaW5nIGBSRUFEX09OQ0VgLiBZZXMsIHRoaXMgaXMgZGVmaW5pdGVseSB0b3VjaGluZyBleGVjdXRhYmxlIGNvZGUsIGFuZCB3ZSBhcmUgc2V0dGluZyBXb3J0aEZ1enppbmcgdG8gVFJVRS4KCk5vdywgbGV0JiMzOTtzIGhvbmUgaW4gb24gdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgZm9yIG91ciBmb2N1cyBzeW1ib2xzLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgZnVuY3Rpb25zIGFyZToKCiogICBgcHBwX2lvY3RsYAoqICAgYHBwcF9zZXR1cGAKKiAgIGBwYWRfY29tcHJlc3Nfc2tiYAoKSW50ZXJlc3RpbmdseSwgYHBhZF9jb21wcmVzc19za2JgIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgYnV0IGl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgaXQgaXMgYmVpbmcgdXNlZCB0byBmaW5kIHBvdGVudGlhbCBidWdzLiBUaGlzIGlzIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiBvZiB0aGUgZm9ybSBgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqIHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIE5vdyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYHBhZF9jb21wcmVzc19za2JgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWRfY29tcHJlc3Nfc2tiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE3MjQ9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNzI1OnBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTcyNi17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTc4NT1wcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTg3OS1cdFx0fVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTg4MDpcdFx0bmV3X3NrYiA9IHBhZF9jb21wcmVzc19za2IocHBwLCBza2IpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTg4MS1cdFx0aWYgKCFuZXdfc2tiKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDgwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGF0YSBDb21wcmVzc2lvbiBpbiB0aGUgTmV0d29yayBTdGFjayoqCgpPa2F5LCBzbyBgcGFkX2NvbXByZXNzX3NrYmAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hlcmUmIzM5O3MgdGhhdCBiZWluZyB1c2VkPyBGcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCYjMzk7cyBjYWxsZWQgZGlyZWN0bHkgYnkgYHBwcF9wcmVwYXJlX3R4X3NrYmAsIG9yIGF0IGxlYXN0IGlubGluZWQgaW4gdGhlcmUuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlICpjYWxsZXJzKiBvZiBgcHBwX3ByZXBhcmVfdHhfc2tiYCBpdHNlbGYuIFRoYXQmIzM5O2xsIHNob3cgbWUgd2hlcmUgdGhlIGNvbXByZXNzaW9uLCBvciAqYXR0ZW1wdCogYXQgY29tcHJlc3Npb24sIGlzIGFjdHVhbGx5IGluaXRpYXRlZCB3aXRoaW4gdGhlIGRhdGEgdHJhbnNtaXNzaW9uIHByb2Nlc3MuIEtub3dpbmcgdGhlIG9yaWdpbnMgb2YgdGhhdCBmdW5jdGlvbiB3aWxsIGdpdmUgbWUgYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBuZXR3b3JrIHN0YWNrLiBOZWVkIHRvIHNlZSB0aGUgY29udGV4dCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfcHJlcGFyZV90eF9za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MjY2PXN0YXRpYyB2b2lkIHBwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjI2NzpzdGF0aWMgaW50IHBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0yNjgtc3RhdGljIGludCBwcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpO1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE2NzA9c3RhdGljIHZvaWQgX19wcHBfeG1pdF9wcm9jZXNzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNjc2LVx0fVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTY3NzpcdGlmICh1bmxpa2VseShwcHBfcHJlcGFyZV90eF9za2IocHBwLCBcdTAwMjZza2IpKSlcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE2NzgtXHRcdGdvdG8gb3V0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE3ODQ9c3RhdGljIGludFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTc4NTpwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNzg2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY3NAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIFBQUCBUcmFuc21pc3Npb24gUGF0aCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSB0cmFuc21pc3Npb24gcHJvY2VzcyBmb3IgUFBQLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBjb3JlIHRyYW5zbWlzc2lvbiBmdW5jdGlvbnMuIEkmIzM5O2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYF9fcHBwX3htaXRfcHJvY2Vzc2AuIEl0JiMzOTtzIGEgZmFpcmx5IGNvbW1vbiBjb252ZW50aW9uIHRvIHVzZSBkb3VibGUgdW5kZXJzY29yZXMgZm9yIGludGVybmFsIGtlcm5lbCBmdW5jdGlvbnMsIHNvIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IHRvIGludmVzdGlnYXRlLiBJZiB0aGF0IGRvZXNuJiMzOTt0IGltbWVkaWF0ZWx5IHJldmVhbCB0aGUgbWFpbiB0cmFuc21pc3Npb24gZmxvdywgSSYjMzk7bGwgdGhlbiBjaGVjayBgcHBwX3htaXRfcHJvY2Vzc2AuIEl0JiMzOTtzIHBvc3NpYmxlIHRoZSBsZWFkaW5nIGRvdWJsZSB1bmRlcnNjb3JlIGRlbm90ZXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCB3aGlsZSB0aGUgc2luZ2xlIHVuZGVyc2NvcmVkIHZlcnNpb24gaXMgdGhlIHB1YmxpYyBBUEkuIEFuZCwgaWYgbmVpdGhlciBvZiB0aG9zZSBhcmUgcXVpdGUgd2hhdCBJJiMzOTttIHNlYXJjaGluZyBmb3IsIEkgd2lsbCBhbHNvIGNoZWNrIGBwcHBfc3RhcnRfeG1pdGAuIFRoYXQgbmFtZSBzdWdnZXN0cyBpdCBjb3VsZCBiZSB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyBvZmYgdGhlIGFjdHVhbCB0cmFuc21pc3Npb24gc2VxdWVuY2UuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcXVldWluZyBwYWNrZXRzIGZvciBQUFAgdHJhbnNtaXNzaW9uIGFuZCBob3cgaXQgdGhlbiBoYW5kcyB0aGVtIG9mZiB0byB0aGUgbG93ZXIgbGF5ZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfc3RhcnRfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNDUzPXN0YXRpYyBuZXRkZXZfdHhfdFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM6MTQ1NDpwcHBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTQ1NS17XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTYxNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHBwcF9uZXRkZXZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE2MTctXHQubmRvX3VuaW5pdCAgICAgID0gcHBwX2Rldl91bmluaXQsXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNjE4Olx0Lm5kb19zdGFydF94bWl0ICA9IHBwcF9zdGFydF94bWl0LFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTYxOS1cdC5uZG9fc2lvY2RldnByaXZhdGUgPSBwcHBfbmV0X3Npb2NkZXZwcml2YXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE5NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQUFAtUmVsYXRlZCBLZXJuZWwgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBzZWUuIEkmIzM5O20gbG9va2luZyBhdCBhIGZldyBpbnRlcmVzdGluZyBmdW5jdGlvbnMgaGVyZSDigJMgYHBwcF9pb2N0bGAsIGBwcHBfc2V0dXBgLCBgcGFkX2NvbXByZXNzX3NrYmAsIGFuZCBgcHBwX3ByZXBhcmVfdHhfc2tiYC4gVGhlc2UgYXJlIGFsbCBzb3VuZGluZyBsaWtlIGtleSBwbGF5ZXJzIGluIHRoZSBQUFAgKFBvaW50LXRvLVBvaW50IFByb3RvY29sKSBzdGFjaywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuCgpGaXJzdCwgSSBzZWUgdGhhdCB0aGUgYFBQUGAgY29uZmlnIG9wdGlvbiBkaXJlY3RseSBidWlsZHMgdGhlIGBwcHBfZ2VuZXJpYy5jYCBmaWxlLiBTaW1wbGUgZW5vdWdoLCBidXQgYXJlIHRoZXJlICphbnkqIG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMgbHVya2luZyBhcm91bmQ/IEFsd2F5cyBnb3R0YSBjaGVjayB0aGUgYnJvYWRlciBjb250ZXh0LgoKTG9va2luZyBhdCBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIHNwZWNpZmljYWxseSwgSSBzZWUgdGhlIGBQUFBgIGNvbmZpZyBvcHRpb24gaXMgdHJpc3RhdGUgYW5kIHNlbGVjdHMgYFNMSENgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgSSBuZWVkIHRvIGtlZXAgdGhhdCBgU0xIQ2AgZGVwZW5kZW5jeSBpbiBtaW5kLiBJdCYjMzk7cyBvZnRlbiB0aGUgY2FzZSB0aGF0IHNlZW1pbmdseSBpbmRlcGVuZGVudCBmZWF0dXJlcyBoYXZlIGludGVyZGVwZW5kZW5jaWVzLgoKTm93LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBiZWNhdXNlIGl0JiMzOTtzIGdvb2QgcHJhY3RpY2UsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIHJ1biBhIHF1aWNrIGBncmVwYCBmb3IgdGhlIGBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7YCBsaW5lIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNydWNpYWwgZGVwZW5kZW5jaWVzIGRlZmluZWQgdXBzdHJlYW0uIE1ha2luZyBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgd2hvbGUgcGljdHVyZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9NTI2PXNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L0tjb25maWctNTI3LVxuZHJpdmVycy9uZXQvS2NvbmZpZzo1Mjg6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnLTUyOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NjUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIE5ldHdvcmsgRHJpdmVyIENvbmZpZ3VyYXRpb24gSXNzdWUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEJhc2VkIG9uIHdoYXQgSSYjMzk7dmUgYmVlbiBzZWVpbmcsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIGEgc3BlY2lmaWMgbmV0d29yayBkcml2ZXIuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8ganVtcCBpbnRvIGBkcml2ZXJzL25ldC9LY29uZmlnYCDigJMgSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgbmV0d29yayBkcml2ZXIgY29uZmlndXJhdGlvbiBsb2dpYyByZXNpZGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gc2NhbiBhcm91bmQgbGluZSA1MjguIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZ292ZXJucyB0aGUgZHJpdmVyJiMzOTtzIGluY2x1c2lvbi4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZW5jbG9zaW5nIGBpZmAgc3RhdGVtZW50cywgb3IgYW55IGRpcmVjdCBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSBjb250cm9sbGluZyB3aGV0aGVyIHRoaXMgcGFydGljdWxhciBkcml2ZXIgaXMgY29tcGlsZWQuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIHByb2JsZW1zIGFuZCBmb3IgZW5zdXJpbmcgdGhlIGRyaXZlciBpcyBwcm9wZXJseSBlbmFibGVkIGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBhbmQgaGFyZHdhcmUuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIChlLmcuLCBgQ09ORklHX0ZPT19EUklWRVJgLCBgQ09ORklHX0JBUl9IQVJEV0FSRWApIHRoYXQgbXVzdCBiZSBzZXQgaW4gb3JkZXIgZm9yIHRoaXMgZHJpdmVyIHRvIGJlIGJ1aWx0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MjA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXCYjMzQ7XG4gNTIxOlx0XG4gNTIyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1wmIzM0O1xuIDUyMzpcdFxuIDUyNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1wmIzM0O1xuIDUyNTpcdFxuIDUyNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcJiMzNDtcbiA1Mjc6XHRcbiA1Mjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWdcJiMzNDtcbiA1Mjk6XHRcbiA1MzA6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnXCYjMzQ7XG4gNTMxOlx0XG4gNTMyOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ1wmIzM0O1xuIDUzMzpcdFxuIDUzNDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wmIzM0O1xuIDUzNTpcdFxuIDUzNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnXCYjMzQ7XG4gNTM3Olx0XG4gNTM4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnXCYjMzQ7XG4gNTM5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzI2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OgoKKipFeGFtaW5pbmcgTmV0d29yayBEZXZpY2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgbmV0d29yayBkZXZpY2VzIGFyZSBjb25maWd1cmVkIHdpdGhpbiB0aGlzIGJ1aWxkIHN5c3RlbS4gVGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSwgaXMgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBORVRERVZJQ0VTYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgaXMgYSB2ZXJ5IGNvbW1vbiB2YXJpYWJsZSBuYW1lIHVzZWQgaW4gdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBkZXZpY2UgZHJpdmVycy4gSXQmIzM5O3MgaGlnaGx5IHByb2JhYmxlIHRoaXMgaXMgZGVmaW5lZCBpbiB0aGUgbmV0d29ya2luZyBkcml2ZXIgc2VjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbmV0d29yayBkZXZpY2VzIHdpdGhpbiB0aGUgY3VycmVudCBidWlsZCBlbnZpcm9ubWVudC4gRnJvbSB0aGVyZSwgSSBjYW4gaW52ZXN0aWdhdGUgdGhlIHNwZWNpZmljIGRlcGVuZGVuY2llcyBvciBzdWItY29uZmlndXJhdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSB0b3AtbGV2ZWwgc3ltYm9sIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBuZXR3b3JrIGRldmljZSBzdXBwb3J0LCBhbmQgcG9zc2libHkgc29tZSBnZW5lcmFsIHNldHRpbmdzIHJlbGF0ZWQgdG8gdmFyaW91cyBuZXR3b3JrIGRldmljZSB0eXBlcy4gVGhpcyBpcyB0aGUgY29ycmVjdCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgbmV0d29ya2luZyBkZXZpY2UgY29uZmlndXJhdGlvbiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBOZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkVUREVWSUNFU1xuICAgNzpcdFx0ZGVmYXVsdCB5IGlmIFVNTFxuICAgODpcdFx0ZGVwZW5kcyBvbiBORVRcbiAgIDk6XHRcdGJvb2wgXCYjMzQ7TmV0d29yayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBZb3UgY2FuIHNheSBOIGhlcmUgaWYgeW91IGRvbiYjMzk7dCBpbnRlbmQgdG8gY29ubmVjdCB5b3VyIExpbnV4IGJveCB0b1xuICAxMjpcdFx0ICBhbnkgb3RoZXIgY29tcHV0ZXIgYXQgYWxsLlxuICAxMzpcdFxuICAxNDpcdFx0ICBZb3UmIzM5O2xsIGhhdmUgdG8gc2F5IFkgaWYgeW91ciBjb21wdXRlciBjb250YWlucyBhIG5ldHdvcmsgY2FyZCB0aGF0XG4gIDE1Olx0XHQgIHlvdSB3YW50IHRvIHVzZSB1bmRlciBMaW51eC4gSWYgeW91IGFyZSBnb2luZyB0byBydW4gU0xJUCBvciBQUFAgb3ZlclxuICAxNjpcdFx0ICB0ZWxlcGhvbmUgbGluZSBvciBudWxsIG1vZGVtIGNhYmxlIHlvdSBuZWVkIHNheSBZIGhlcmUuIENvbm5lY3RpbmdcbiAgMTc6XHRcdCAgdHdvIG1hY2hpbmVzIHdpdGggcGFyYWxsZWwgcG9ydHMgdXNpbmcgUExJUCBuZWVkcyB0aGlzLCBhcyB3ZWxsIGFzXG4gIDE4Olx0XHQgIEFYLjI1L0tJU1MgZm9yIHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIGFtYXRldXIgcmFkaW8gbGlua3MuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIFNlZSBhbHNvIFwmIzM0O1RoZSBMaW51eCBOZXR3b3JrIEFkbWluaXN0cmF0b3ImIzM5O3MgR3VpZGVcJiMzNDsgYnkgT2xhZiBLaXJjaCBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NjYKCQkJCQkJCW91dHB1dDogMTY1CgkJCQkJCQl0aG91Z2h0czogNDA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQUFAgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIGBDT05GSUdfUFBQYCwgYWxvbmcgd2l0aCBgQ09ORklHX05FVERFVklDRVNgIGFuZCBgQ09ORklHX05FVGAsIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gaGVyZS4gUmV0dXJuaW5nIGBbJiMzNDtQUFAmIzM0O11gIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoIHRvIHRoaXMgbW9kdWxlLiBNYWtlcyBwZXJmZWN0IHNlbnNlLgoKTGV0JiMzOTtzIGRpdmUgZGVlcGVyIGFuZCByZXZpZXcgdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmc6IGBwcHBfaW9jdGxgLCBgcHBwX3NldHVwYCwgYHBwcF9wcmVwYXJlX3R4X3NrYmAsIGFuZCBgcGFkX2NvbXByZXNzX3NrYmAuIFRob3NlIGFyZSB0aGUgbWFpbiBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgYWxsIHRoZSBzeW1ib2xzIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2guIEl0JiMzOTtzOiBgcHBwX2lvY3RsYCwgYHBwcF9zZXR1cGAsIGBwYWRfY29tcHJlc3Nfc2tiYCAod2hpY2gsIEkgc2VlLCBpcyBhIHN0YXRpYyBpbmxpbmUsIGdvb2QgdG8ga25vdyksIGFuZCBmaW5hbGx5LCBgcHBwX3ByZXBhcmVfdHhfc2tiYCAod2hpY2gsIG9mIGNvdXJzZSwgY2FsbHMgYHBhZF9jb21wcmVzc19za2JgKS4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgY2FsbGVycyBvciBmdW5jdGlvbnMgSSYjMzk7bSBtaXNzaW5nPyBJIHNob3VsZCByZWFsbHkgY2hlY2sgaWYgYFBQUF9NSU5fTVJVYCBvciBgUFBQX01JTl9NVFVgIGFyZSB1c2VkIGFueXdoZXJlIGVsc2UuIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4KCkNoZWNraW5nIHRoZSBwYXRjaCBpdHNlbGYsIEkgc2VlOiBgUFBQX01JTl9NVFVgIGlzIHVzZWQgaW4gYHBwcF9zZXR1cGAuIEFuZCBgUFBQX01JTl9NUlVgIGlzIHVzZWQgaW4gYHBwcF9pb2N0bGAuIEFoLCBhbmQgYGRldi0mZ3Q7bXR1YCBpcyBiZWluZyByZWFkIHNhZmVseSB1c2luZyBgUkVBRF9PTkNFYCB3aXRoaW4gYHBhZF9jb21wcmVzc19za2JgLiBFeGNlbGxlbnQsIGdvb2QgcHJhY3RpY2UuCgpBbHJpZ2h0LCBzYW5pdHkgY2hlY2sgdGltZS4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG1pbmltdW0gTVJVIGFuZCBNVFUgYm91bmRhcmllcyBmb3IgUFBQIGRldmljZXMuIFdlJiMzOTtyZSB2YWxpZGF0aW5nIHRoZSBNUlUgaW4gYHBwcF9pb2N0bChQUFBJT0NTTVJVKWAsIHNldHRpbmcgYGRldi0mZ3Q7bWluX210dWAgaW4gYHBwcF9zZXR1cCgpYCwgYW5kIHdlJiMzOTtyZSBzYWZlbHkgcmVhZGluZyBgZGV2LSZndDttdHVgIHVzaW5nIGBSRUFEX09OQ0VgIGluIGBwYWRfY29tcHJlc3Nfc2tiKClgLiBUaGUgY29kZSBwYXRoIGlzIGNvbXBsZXRlbHkgcmVhY2hhYmxlIHZpYSBQUFAgZGV2aWNlIGlvY3RscyBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbi4gU28sIHRoaXMgd2FycmFudHMgZnV6emluZyB0byB0ZXN0IGlucHV0IHZhbGlkYXRpb24gYW5kIGNoZWNrIGZvciBhbnkgcmVncmVzc2lvbnMgaW4gTVRVL01SVSBoYW5kbGluZyBvciBza2IgYWxsb2NhdGlvbi4KClllcCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBJJiMzOTttIHNhdGlzZmllZC4gVGltZSB0byBjYWxsIHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFBQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFkX2NvbXByZXNzX3NrYiYjMzQ7LAogICAgJiMzNDtwcHBfaW9jdGwmIzM0OywKICAgICYjMzQ7cHBwX3ByZXBhcmVfdHhfc2tiJiMzNDssCiAgICAmIzM0O3BwcF9zZXR1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyByZWFjaGFibGUgUFBQIG5ldHdvcmsgZGV2aWNlIGNvZGUgaW4gZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMuIEl0IGVuZm9yY2VzIG1pbmltdW0gYW5kIG1heGltdW0gYm91bmRzIGNoZWNrcyBvbiBNUlUgaW4gcHBwX2lvY3RsIChQUFBJT0NTTVJVKSwgc2V0cyBkZXYtXHUwMDNlbWluX210dSBpbiBwcHBfc2V0dXAsIGFuZCB1c2VzIFJFQURfT05DRSBmb3IgTVRVIHJlYWRpbmcgaW4gcGFkX2NvbXByZXNzX3NrYi4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMgb3IgZWRnZSBjYXNlcyBpbiBQUFAgTVRVL01SVSBuZWdvdGlhdGlvbiBhbmQgcGFja2V0IGhhbmRsaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWRfY29tcHJlc3Nfc2tiJiMzNDssCiAgICAmIzM0O3BwcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtwcHBfcHJlcGFyZV90eF9za2ImIzM0OywKICAgICYjMzQ7cHBwX3NldHVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBQUFAgbmV0d29yayBkZXZpY2UgY29kZSBpbiBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy4gSXQgZW5mb3JjZXMgbWluaW11bSBhbmQgbWF4aW11bSBib3VuZHMgY2hlY2tzIG9uIE1SVSBpbiBwcHBfaW9jdGwgKFBQUElPQ1NNUlUpLCBzZXRzIGRldi1cdTAwM2VtaW5fbXR1IGluIHBwcF9zZXR1cCwgYW5kIHVzZXMgUkVBRF9PTkNFIGZvciBNVFUgcmVhZGluZyBpbiBwYWRfY29tcHJlc3Nfc2tiLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBvciBlZGdlIGNhc2VzIGluIFBQUCBNVFUvTVJVIG5lZ290aWF0aW9uIGFuZCBwYWNrZXQgaGFuZGxpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG1pbmltdW0gYm91bmRzIGNoZWNrcyBmb3IgUFBQIE1SVSAodmlhIFBQUElPQ1NNUlUpIGFuZCBNVFUgKHNldHRpbmcgZGV2LVx1MDAzZW1pbl9tdHUpLCBhdm9pZGluZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlbHkgc21hbGwgTVRVIHZhbHVlcy4gSXQgYWxzbyBzbmFwc2hvdHMgZGV2LVx1MDAzZW10dSB1c2luZyBSRUFEX09OQ0UgaW4gcGFkX2NvbXByZXNzX3NrYigpIHRvIGF2b2lkIGluY29uc2lzdGVudCBNVFUgcmVhZHMgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBjb21wcmVzc2lvbiBzaXppbmcuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LWRlcGVuZGVudCBjb250cm9sIGZsb3cuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgc2l6aW5nIGlzc3VlcyByZWxhdGVkIHRvIE1UVS9NUlUgY2FsY3VsYXRpb25zIGFyZSBvdXQtb2YtYm91bmRzIG9yIGRhdGEgcmFjZSBpc3N1ZXMgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgS0NTQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjQyNDVkYmU5OWMyYzA3NGJlN2UyMjllYmYxMDZiN2M3NTE2ODQyYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDk6MTk6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCmluZGV4IDFhNjEwYTE4ODkzYmEuLjQwMjIxMTc2OGNmNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jCkBAIC03Miw2ICYjNDM7NzIsOCBAQAogCiAjZGVmaW5lIFBQUF9QUk9UT19MRU4JMgogI2RlZmluZSBQUFBfTENQX0hEUkxFTgk0CiYjNDM7I2RlZmluZSBQUFBfTUlOX01UVQkxMjgKJiM0MzsjZGVmaW5lIFBQUF9NSU5fTVJVCTEyOAogCiAvKiBUaGUgZmlsdGVyIGluc3RydWN0aW9ucyBnZW5lcmF0ZWQgYnkgbGlicGNhcCBhcmUgY29uc3RydWN0ZWQKICAqIGFzc3VtaW5nIGEgZm91ci1ieXRlIFBQUCBoZWFkZXIgb24gZWFjaCBwYWNrZXQsIHdoZXJlIHRoZSBsYXN0CkBAIC04MDgsNiAmIzQzOzgxMCwxMCBAQCBzdGF0aWMgbG9uZyBwcHBfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogCWNhc2UgUFBQSU9DU01SVToKIAkJaWYgKGdldF91c2VyKHZhbCwgcCkpCiAJCQlicmVhazsKJiM0MzsJCWlmICh2YWwgJmx0OyBQUFBfTUlOX01SVSB8fCB2YWwgJmd0OyBJTlRfTUFYIC0gUFBQX0hEUkxFTiAtIDEpIHsKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQogCQlwcHBfcmVjdl9sb2NrKHBwcCk7CiAJCXBwcC0mZ3Q7bXJ1ID0gdmFsOwogCQlwcHBfcmVjdl91bmxvY2socHBwKTsKQEAgLTE2MjgsNiAmIzQzOzE2MzQsNyBAQCBzdGF0aWMgdm9pZCBwcHBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCWRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gUFBQX0hEUkxFTjsKIAlkZXYtJmd0O210dSA9IFBQUF9NUlU7CiYjNDM7CWRldi0mZ3Q7bWluX210dSA9IFBQUF9NSU5fTVRVOwogCWRldi0mZ3Q7YWRkcl9sZW4gPSAwOwogCWRldi0mZ3Q7dHhfcXVldWVfbGVuID0gMzsKIAlkZXYtJmd0O3R5cGUgPSBBUlBIUkRfUFBQOwpAQCAtMTcxOSwxMCAmIzQzOzE3MjYsMTEgQEAgcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKJiM0MzsJaW50IG10dSA9IFJFQURfT05DRShkZXYtJmd0O210dSk7CiAJaW50IGxlbjsKLQlpbnQgbmV3X3NrYl9zaXplID0gZGV2LSZndDttdHUgJiM0MzsKJiM0MzsJaW50IG5ld19za2Jfc2l6ZSA9IG10dSAmIzQzOwogCQlwcHAtJmd0O3hjb21wLSZndDtjb21wX2V4dHJhICYjNDM7IGRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuOwotCWludCBjb21wcmVzc29yX3NrYl9zaXplID0gZGV2LSZndDttdHUgJiM0MzsKJiM0MzsJaW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgJiM0MzsKIAkJcHBwLSZndDt4Y29tcC0mZ3Q7Y29tcF9leHRyYSAmIzQzOyBQUFBfSERSTEVOOwogCiAJaWYgKHNrYl9saW5lYXJpemUoc2tiKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFAgR2VuZXJpYyBEcml2ZXIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBzZXR0aW5nIGEgbWluaW11bSBNVFUgYW5kIE1SVSBmb3IgUFBQIGludGVyZmFjZXMsIGFsb25nIHdpdGggc29tZSByZWxhdGVkIHJlZmFjdG9yaW5nLgoKTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSBkZWZpbml0ZWx5IHJlbGV2YW50IHRvIHNlY3VyaXR5LCBlbnN1cmluZyBhbiBhYnNvbHV0ZSBtaW5pbXVtIGZyYW1lIHNpemUgZm9yIGNvcnJlY3QgcGFja2V0IHByb2Nlc3NpbmcuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2U6CgoxLiAgV2UmIzM5O3ZlIGdvdCBuZXcgYCNkZWZpbmVgIHN0YXRlbWVudHMgZm9yIGBQUFBfTUlOX01UVWAgYW5kIGBQUFBfTUlOX01SVWAsIGJvdGggc2V0IHRvIDEyOC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgbWluaW11bSwgZ2l2ZW4gdGhlIFBQUCBoZWFkZXIgb3ZlcmhlYWQgYW5kIGxpa2VseSBtaW5pbXVtIGRhdGEgcGF5bG9hZCBzaXplcyB3ZSYjMzk7ZCBleHBlY3QgaW4gbW9kZXJuIG5ldHdvcmtzLgoKMi4gIFRoZSBgcHBwX2lvY3RsYCBmdW5jdGlvbiBub3cgaGFzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiB0aGUgYFBQUElPQ1NNUlVgIGNhc2UuIFRoaXMgaXMgY3J1Y2lhbDsgaXQmIzM5O3MgcHJldmVudGluZyB0aGUgTVJVIGZyb20gYmVpbmcgc2V0IHRvIGFuIGFic3VyZGx5IGxvdyB2YWx1ZSwgb3IgcG90ZW50aWFsbHkgYSB2YWx1ZSB0aGF0IGNvdWxkIGxlYWQgdG8gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMsIGEgY29tbW9uIHNvdXJjZSBvZiB2dWxuZXJhYmlsaXR5LiBUaGUgY2hlY2sgYHZhbCAmbHQ7IFBQUF9NSU5fTVJVIHx8IHZhbCAmZ3Q7IElOVF9NQVggLSBQUFBfSERSTEVOIC0gMWAgc2VlbXMgcHJldHR5IHNvbGlkOyBpdCBjb3ZlcnMgdGhlIG1pbmltdW0gTVJVIGFuZCBhY2NvdW50cyBmb3IgdGhlIGhlYWRlciBsZW5ndGguCgozLiAgYHBwcF9zZXR1cGAgaXMgdXBkYXRpbmcgdGhlIG5ldHdvcmsgZGV2aWNlJiMzOTtzIGBtaW5fbXR1YCB0byB0aGUgZGVmaW5lZCBgUFBQX01JTl9NVFVgIHZhbHVlLCBhbHNvIDEyOC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGludGVyZmFjZSBpcyBwcm9wZXJseSBjb25maWd1cmVkIHdpdGggdGhlIG1pbmltdW0gTVRVIGF0IGluaXRpYWxpemF0aW9uLgoKNC4gIEZpbmFsbHksIGBwYWRfY29tcHJlc3Nfc2tiYCBpcyB3aGVyZSB0aGUgZGV2ZWxvcGVyIGFkZHJlc3NlZCBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIGNvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZSBgZGV2LSZndDttdHVgIHZhbHVlLiBJbnN0ZWFkIG9mIHJlYWRpbmcgYGRldi0mZ3Q7bXR1YCBkaXJlY3RseSwgaXQmIzM5O3Mgbm93IHVzaW5nIGBSRUFEX09OQ0UoZGV2LSZndDttdHUpYCBhbmQgc3RvcmluZyBpdCBpbiBhIGxvY2FsIGBtdHVgIHZhcmlhYmxlLiBUaGlzIGF2b2lkcyBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgb2NjdXIgaWYgdGhlIE1UVSBpcyBjaGFuZ2VkIGNvbmN1cnJlbnRseS4gU21hcnQgbW92ZTsgdXNpbmcgYFJFQURfT05DRWAgaXMgdGhlIHJpZ2h0IHdheSB0byBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgYmVpbmcgcmVhZCBpcyBub3Qgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIuCgpJJiMzOTtsbCB3YW50IHRvIGluc3BlY3QgYGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jYCBpdHNlbGYgbm93LiBJJiMzOTtsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZXNlIGtleSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtaW5pbXVtIE1UVS9NUlUgb24gb3ZlcmFsbCBQUFAgcGVyZm9ybWFuY2UsIGFuZCBob3cgaXQgaW1wYWN0cyBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjay4gSSYjMzk7bSBhbHNvIGN1cmlvdXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcGxhY2VzIHdoZXJlIHJhY2UgY29uZGl0aW9ucyBvbiBgZGV2LSZndDttdHVgIG1pZ2h0IGJlIHByZXNlbnQuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcbiA4MDE6XHRcdGlmIChwZi1cdTAwM2VraW5kICE9IElOVEVSRkFDRSkge1xuIDgwMjpcdFx0XHQvKiBjYW4mIzM5O3QgaGFwcGVuICovXG4gODAzOlx0XHRcdHByX2VycihcJiMzNDtQUFA6IG5vdCBpbnRlcmZhY2Ugb3IgY2hhbm5lbD8/XFxuXCYjMzQ7KTtcbiA4MDQ6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiA4MDU6XHRcdFx0Z290byBvdXQ7XG4gODA2Olx0XHR9XG4gODA3Olx0XG4gODA4Olx0XHRwcHAgPSBQRl9UT19QUFAocGYpO1xuIDgwOTpcdFx0c3dpdGNoIChjbWQpIHtcbiA4MTA6XHRcdGNhc2UgUFBQSU9DU01SVTpcbiA4MTE6XHRcdFx0aWYgKGdldF91c2VyKHZhbCwgcCkpXG4gODEyOlx0XHRcdFx0YnJlYWs7XG4gODEzOlx0XHRcdGlmICh2YWwgXHUwMDNjIFBQUF9NSU5fTVJVIHx8IHZhbCBcdTAwM2UgSU5UX01BWCAtIFBQUF9IRFJMRU4gLSAxKSB7XG4gODE0Olx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiA4MTU6XHRcdFx0XHRicmVhaztcbiA4MTY6XHRcdFx0fVxuIDgxNzpcdFx0XHRwcHBfcmVjdl9sb2NrKHBwcCk7XG4gODE4Olx0XHRcdHBwcC1cdTAwM2VtcnUgPSB2YWw7XG4gODE5Olx0XHRcdHBwcF9yZWN2X3VubG9jayhwcHApO1xuIDgyMDpcdFx0XHRlcnIgPSAwO1xuIDgyMTpcdFx0XHRicmVhaztcbiA4MjI6XHRcbiA4MjM6XHRcdGNhc2UgUFBQSU9DU0ZMQUdTOlxuIDgyNDpcdFx0XHRpZiAoZ2V0X3VzZXIodmFsLCBwKSlcbiA4MjU6XHRcdFx0XHRicmVhaztcbiA4MjY6XHRcdFx0cHBwX2xvY2socHBwKTtcbiA4Mjc6XHRcdFx0Y2ZsYWdzID0gcHBwLVx1MDAzZWZsYWdzIFx1MDAyNiB+dmFsO1xuIDgyODpcdCNpZmRlZiBDT05GSUdfUFBQX01VTFRJTElOS1xuIDgyOTpcdFx0XHRpZiAoIShwcHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX01VTFRJTElOSykgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDI2IFNDX01VTFRJTElOSykpXG4gODMwOlx0XHRcdFx0cHBwLVx1MDAzZW5leHRzZXEgPSAwO1xuIDgzMTpcdCNlbmRpZlxuIDgzMjpcdFx0XHRwcHAtXHUwMDNlZmxhZ3MgPSB2YWwgXHUwMDI2IFNDX0ZMQUdfQklUUztcbiA4MzM6XHRcdFx0cHBwX3VubG9jayhwcHApO1xuIDgzNDpcdFx0XHRpZiAoY2ZsYWdzIFx1MDAyNiBTQ19DQ1BfT1BFTilcbiA4MzU6XHRcdFx0XHRwcHBfY2NwX2Nsb3NlZChwcHApO1xuIDgzNjpcdFx0XHRlcnIgPSAwO1xuIDgzNzpcdFx0XHRicmVhaztcbiA4Mzg6XHRcbiA4Mzk6XHRcdGNhc2UgUFBQSU9DR0ZMQUdTOlxuIDg0MDpcdFx0XHRwcHBfbG9jayhwcHApO1xuIDg0MTpcdFx0XHR2YWwgPSBwcHAtXHUwMDNlZmxhZ3MgfCBwcHAtXHUwMDNleHN0YXRlIHwgcHBwLVx1MDAzZXJzdGF0ZTtcbiA4NDI6XHRcdFx0cHBwX3VubG9jayhwcHApO1xuIDg0MzpcdFx0XHRpZiAocHV0X3VzZXIodmFsLCBwKSlcbiA4NDQ6XHRcdFx0XHRicmVhaztcbiA4NDU6XHRcdFx0ZXJyID0gMDtcbiA4NDY6XHRcdFx0YnJlYWs7XG4gODQ3Olx0XG4gODQ4Olx0XHRjYXNlIFBQUElPQ1NDT01QUkVTUzpcbiA4NDk6XHRcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBwYWRfY29tcHJlc3Nfc2tiYCBGdW5jdGlvbioqCgpPa2F5LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBgcGFkX2NvbXByZXNzX3NrYmAuIEJhc2VkIG9uIHRoZSBjb250ZXh0IGFuZCBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIHByb2JhYmx5IHJlbGF0ZXMgdG8gbmV0d29yayBidWZmZXIgKFNLQikgcGFkZGluZyBhbmQgY29tcHJlc3Npb24sIGxpa2VseSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIExpbmUgMTcxNSBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6ZSB0aGUgZnVuY3Rpb24uIEkmIzM5O2xsIGZvY3VzIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCB0aGF0IGxpbmUg4oCTIGRhdGEgbWFuaXB1bGF0aW9uLCBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24sIGVycm9yIGhhbmRsaW5nLCBldGMuIFdoYXQgc3BlY2lmaWNhbGx5IGlzIGJlaW5nIGRvbmUgdG8gY29tcHJlc3MgdGhlIFNLQiBkYXRhPyBBbnkgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3M/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBpbmVmZmljaWVuY2llcyBpbiB0aGUgcGFkZGluZyBwcm9jZXNzPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIHVzZWQgYW5kIHBvdGVudGlhbCBnb3RjaGFzIHJlbGF0ZWQgdG8gaXRzIGltcGxlbWVudGF0aW9uLCBzbyBJIGNhbiBnaXZlIGl0IGEgcmVhbGx5IGNsb3NlIGxvb2suIExldOKAmXMgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA5OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MTU6XHRlcnI6XG4xNzE2Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjE3MTc6XHRcbjE3MTg6XHRcdGtmcmVlX3NrYihza2IpO1xuMTcxOTpcdFxuMTcyMDpcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbjE3MjE6XHRcdFx0bmV0ZGV2X2VycihuZXRkZXZfZnJvbV9wcml2KHBwcCksIFwmIzM0O3JlY3Vyc2lvbiBkZXRlY3RlZFxcblwmIzM0Oyk7XG4xNzIyOlx0fVxuMTcyMzpcdFxuMTcyNDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxuMTcyNTpcdHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuMTcyNjpcdHtcbjE3Mjc6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfZnJvbV9wcml2KHBwcCk7XG4xNzI4Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcbjE3Mjk6XHRcdGludCBtdHUgPSBSRUFEX09OQ0UoZGV2LVx1MDAzZW10dSk7XG4xNzMwOlx0XHRpbnQgbGVuO1xuMTczMTpcdFx0aW50IG5ld19za2Jfc2l6ZSA9IG10dSAmIzQzO1xuMTczMjpcdFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSAmIzQzOyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuMTczMzpcdFx0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgJiM0MztcbjE3MzQ6XHRcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgJiM0MzsgUFBQX0hEUkxFTjtcbjE3MzU6XHRcbjE3MzY6XHRcdGlmIChza2JfbGluZWFyaXplKHNrYikpXG4xNzM3Olx0XHRcdHJldHVybiBOVUxMO1xuMTczODpcdFxuMTczOTpcdFx0bmV3X3NrYiA9IGFsbG9jX3NrYihuZXdfc2tiX3NpemUsIEdGUF9BVE9NSUMpO1xuMTc0MDpcdFx0aWYgKCFuZXdfc2tiKSB7XG4xNzQxOlx0XHRcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXG4xNzQyOlx0XHRcdFx0bmV0ZGV2X2VycihkZXYsIFwmIzM0O1BQUDogbm8gbWVtb3J5IChjb21wIHBrdClcXG5cJiMzNDspO1xuMTc0MzpcdFx0XHRyZXR1cm4gTlVMTDtcbjE3NDQ6XHRcdH1cbjE3NDU6XHRcdGlmIChkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIFx1MDAzZSBQUFBfSERSTEVOKVxuMTc0NjpcdFx0XHRza2JfcmVzZXJ2ZShuZXdfc2tiLCBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuIC0gUFBQX0hEUkxFTik7XG4xNzQ3Olx0XG4xNzQ4Olx0XHQvKiBjb21wcmVzc29yIHN0aWxsIGV4cGVjdHMgQS9DIGJ5dGVzIGluIGhkciAqL1xuMTc0OTpcdFx0bGVuID0gcHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXByZXNzKHBwcC1cdTAwM2V4Y19zdGF0ZSwgc2tiLVx1MDAzZWRhdGEgLSAyLFxuMTc1MDpcdFx0XHRcdFx0ICAgbmV3X3NrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuICYjNDM7IDIsXG4xNzUxOlx0XHRcdFx0XHQgICBjb21wcmVzc29yX3NrYl9zaXplKTtcbjE3NTI6XHRcdGlmIChsZW4gXHUwMDNlIDAgXHUwMDI2XHUwMDI2IChwcHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NDUF9VUCkpIHtcbjE3NTM6XHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbjE3NTQ6XHRcdFx0c2tiID0gbmV3X3NrYjtcbjE3NTU6XHRcdFx0c2tiX3B1dChza2IsIGxlbik7XG4xNzU2Olx0XHRcdHNrYl9wdWxsKHNrYiwgMik7XHQvKiBwdWxsIG9mZiBBL0MgYnl0ZXMgKi9cbjE3NTc6XHRcdH0gZWxzZSBpZiAobGVuID09IDApIHtcbjE3NTg6XHRcdFx0LyogZGlkbiYjMzk7dCBjb21wcmVzcywgb3IgQ0NQIG5vdCB1cCB5ZXQgKi9cbjE3NTk6XHRcdFx0Y29uc3VtZV9za2IobmV3X3NrYik7XG4xNzYwOlx0XHRcdG5ld19za2IgPSBza2I7XG4xNzYxOlx0XHR9IGVsc2Uge1xuMTc2MjpcdFx0XHQvKlxuMTc2MzpcdFx0XHQgKiAobGVuIFx1MDAzYyAwKVxuMTc2NDpcdFx0XHQgKiBNUFBFIHJlcXVpcmVzIHRoYXQgd2UgZG8gbm90IHNlbmQgdW5lbmNyeXB0ZWRcbjE3NjU6XHRcdFx0ICogZnJhbWVzLiAgVGhlIGNvbXByZXNzb3Igd2lsbCByZXR1cm4gLTEgaWYgd2VcbjE3NjY6XHRcdFx0ICogc2hvdWxkIGRyb3AgdGhlIGZyYW1lLiAgV2UgY2Fubm90IHNpbXBseSB0ZXN0XG4xNzY3Olx0XHRcdCAqIHRoZSBjb21wcmVzc19wcm90byBiZWNhdXNlIE1QUEUgYW5kIE1QUEMgc2hhcmVcbjE3Njg6XHRcdFx0ICogdGhlIHNhbWUgbnVtYmVyLlxuMTc2OTpcdFx0XHQgKi9cbjE3NzA6XHRcdFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcbjE3NzE6XHRcdFx0XHRuZXRkZXZfZXJyKGRldiwgXCYjMzQ7cHBwOiBjb21wcmVzc29yIGRyb3BwZWQgcGt0XFxuXCYjMzQ7KTtcbjE3NzI6XHRcdFx0Y29uc3VtZV9za2IobmV3X3NrYik7XG4xNzczOlx0XHRcdG5ld19za2IgPSBOVUxMO1xuMTc3NDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzI4CgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDUwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBDb25jZXJucyBIZXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgY29yZSBpc3N1ZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3Npbmc/IEJhc2VkIG9uIHRoZSBkZXRhaWxzLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBkYXRhIHJhY2VzLCBpbnRlZ2VyIG92ZXJmbG93cywgb3IgcG90ZW50aWFsIE1UVSBib3VuZGFyeSBwcm9ibGVtcy4KCk5vdywgbGV0JiMzOTtzIGdvIHN0ZXAtYnktc3RlcCB0aHJvdWdoIHRoZSBsb2dpYzoKCjEuICBUaGUgYG1pbl9tdHUgPSBQUFBfTUlOX01UVWAgYXNzaWdubWVudCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIEl0JiMzOTtzIHB1dHRpbmcgYSBmbG9vciBvbiB0aGUgTVRVLCBlbnN1cmluZyBpdCYjMzk7cyBub3Qgc2V0IHRvIHJpZGljdWxvdXNseSBsb3cgdmFsdWVzLCB3aGljaCB3b3VsZCBiZSBlaXRoZXIgemVybyBvciBsZXNzIHRoYW4gMTI4IHZpYSB0aGUgc3RhbmRhcmQgbmV0ZGV2aWNlIE1UVSBpbnRlcmZhY2UuIFRoaXMgaXMgZ29vZCBwcmFjdGljZS4KMi4gIFRoZSBgUFBQSU9DU01SVWAgYm91bmRzIGNoZWNrIGlzIGNyaXRpY2FsLiBJdCYjMzk7cyBwcmV2ZW50aW5nIHRoZSBgcHBwLSZndDttcnVgIGZyb20gYmVpbmcgc2V0IHRvIGVpdGhlciB0aW55IHZhbHVlcyB3aGljaCBjYW4gY2F1c2UgaW50ZWdlciBvdmVyZmxvdywgb3IgbWFzc2l2ZSB2YWx1ZXMsIGxlYWRpbmcgdG8gbWVtb3J5IHByb2JsZW1zLiBUaGUgcmFuZ2UgY2hlY2sgdXNpbmcgYFBQUF9NSU5fTVJVYCBhbmQgYElOVF9NQVggLSBQUFBfSERSTEVOIC0gMWAgY292ZXJzIGEgbG90IG9mIHRoZSBwb3RlbnRpYWwgZmFpbHVyZSBjYXNlcy4KMy4gIFRoZSBgUkVBRF9PTkNFKGRldi0mZ3Q7bXR1KWAgc25hcHNob3QgaW4gYHBhZF9jb21wcmVzc19za2JgIGlzIHdoYXQgcmVhbGx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGUgcG90ZW50aWFsIGRhdGEgcmFjZSB3aGVyZSBgZGV2LSZndDttdHVgIGNvdWxkIGJlIHJlYWQgY29uY3VycmVudGx5IGFuZCBjaGFuZ2UgbWlkLWNvbXB1dGF0aW9uIGlzIG5vdyBiZWluZyBhdm9pZGVkLiBUaGlzIHByZXZlbnRzIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIGBuZXdfc2tiX3NpemVgIGFuZCBgY29tcHJlc3Nvcl9za2Jfc2l6ZWAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIGNyYXNoZXMsIG9yIHRyaWdnZXIgS0NTQU4uCgpTbywgdGhlIG5leHQgcXVlc3Rpb246IGRvZXMgdGhpcyBwYXRjaCBpbnRyb2R1Y2UgYW55IG5ldyByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBMZXQmIzM5O3MgY2hlY2s6CgoxLiAgQXJlIHRoZXJlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbj8gTm8sIHRoYXQmIzM5O3Mgbm90IGEgZmFjdG9yIGhlcmUuCjIuICBJcyB0aGVyZSBhbnkgYnJhbmNoaW5nIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLgozLiAgQXJlIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlcyBvciBidWZmZXJzIGJlaW5nIGFsbG9jYXRlZCBhbmQgdGhlbiByZWFkPyBOby4KNC4gIEZpbmFsbHksIGRvZXMgdGhpcyBwYXRjaCBtb2RpZnkgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgKmFsbG93cyogcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeT8gQWJzb2x1dGVseSBub3QuIEluIGZhY3QsIGl0JiMzOTtzIG1ha2luZyB0aGluZ3MgKm1vcmUqIHJvYnVzdCBieSByZXN0cmljdGluZyBNVFUvTVJVIHRvIGEgZGVmaW5lZCBhbmQgdmFsaWQgcmFuZ2UgKGF0IGxlYXN0IDEyOCkgYW5kIHByZXZlbnRpbmcgdGhvc2UgaW50ZWdlciBvdmVyZmxvd3MsIG9yIGluY29uc2lzdGVudCBzaXplIGNhbGN1bGF0aW9ucyBkdXJpbmcgcGFja2V0IGNvbXByZXNzaW9uLgoKR2l2ZW4gdGhpcyBhbmFseXNpcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBzdGFuZGFyZCBLQVNBTiwgS0NTQU4sIGFuZCBnZW5lcmFsIHRlc3Rpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3Vlcy4KCkluIHN1bW1hcnksIHRoZSBwYXRjaCBhZGRyZXNzZXMgc2V0dGluZyBzYWZlIG1pbmltdW0gTVRVL01SVSBib3VuZHMgYW5kIGludHJvZHVjZXMgYW4gTVRVIHNuYXBzaG90IHRvIHByZXZlbnQgZGF0YSByYWNlcyBhbmQgaW5jb25zaXN0ZW5jaWVzIGluIGJ1ZmZlciBzaXppbmcgZHVyaW5nIGNvbXByZXNzaW9uLiBUaGlzIGlzIGEgdmVyeSBnb29kIGNoYW5nZSwgYW5kIHRoZXJlIGFyZSBubyBhcHBhcmVudCByaXNrcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGludHJvZHVjZWQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJiMzOTttIGhhcHB5IHdpdGggdGhpcyBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG1pbmltdW0gYm91bmRzIGNoZWNrcyBmb3IgUFBQIE1SVSAodmlhIFBQUElPQ1NNUlUpIGFuZCBNVFUgKHNldHRpbmcgZGV2LVx1MDAzZW1pbl9tdHUpLCBhdm9pZGluZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlbHkgc21hbGwgTVRVIHZhbHVlcy4gSXQgYWxzbyBzbmFwc2hvdHMgZGV2LVx1MDAzZW10dSB1c2luZyBSRUFEX09OQ0UgaW4gcGFkX2NvbXByZXNzX3NrYigpIHRvIGF2b2lkIGluY29uc2lzdGVudCBNVFUgcmVhZHMgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBjb21wcmVzc2lvbiBzaXppbmcuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LWRlcGVuZGVudCBjb250cm9sIGZsb3cuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgc2l6aW5nIGlzc3VlcyByZWxhdGVkIHRvIE1UVS9NUlUgY2FsY3VsYXRpb25zIGFyZSBvdXQtb2YtYm91bmRzIG9yIGRhdGEgcmFjZSBpc3N1ZXMgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgS0NTQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBtaW5pbXVtIGJvdW5kcyBjaGVja3MgZm9yIFBQUCBNUlUgKHZpYSBQUFBJT0NTTVJVKSBhbmQgTVRVIChzZXR0aW5nIGRldi1cdTAwM2VtaW5fbXR1KSwgYXZvaWRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIGV4Y2Vzc2l2ZWx5IHNtYWxsIE1UVSB2YWx1ZXMuIEl0IGFsc28gc25hcHNob3RzIGRldi1cdTAwM2VtdHUgdXNpbmcgUkVBRF9PTkNFIGluIHBhZF9jb21wcmVzc19za2IoKSB0byBhdm9pZCBpbmNvbnNpc3RlbnQgTVRVIHJlYWRzIGR1cmluZyBidWZmZXIgYWxsb2NhdGlvbiBhbmQgY29tcHJlc3Npb24gc2l6aW5nLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeS1kZXBlbmRlbnQgY29udHJvbCBmbG93LiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgYnVmZmVyIHNpemluZyBpc3N1ZXMgcmVsYXRlZCB0byBNVFUvTVJVIGNhbGN1bGF0aW9ucyBhcmUgb3V0LW9mLWJvdW5kcyBvciBkYXRhIHJhY2UgaXNzdWVzIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6MDMuNjM3MTI0MTk0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3NjY3NTgwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFkX2NvbXByZXNzX3NrYlwiLFxuICAgIFwicHBwX2lvY3RsXCIsXG4gICAgXCJwcHBfcHJlcGFyZV90eF9za2JcIixcbiAgICBcInBwcF9zZXR1cFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBtaW5pbXVtIGJvdW5kcyBjaGVja3MgZm9yIFBQUCBNUlUgKHZpYSBQUFBJT0NTTVJVKSBhbmQgTVRVIChzZXR0aW5nIGRldi1cXHUwMDNlbWluX210dSksIGF2b2lkaW5nIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93cyBvciBleGNlc3NpdmVseSBzbWFsbCBNVFUgdmFsdWVzLiBJdCBhbHNvIHNuYXBzaG90cyBkZXYtXFx1MDAzZW10dSB1c2luZyBSRUFEX09OQ0UgaW4gcGFkX2NvbXByZXNzX3NrYigpIHRvIGF2b2lkIGluY29uc2lzdGVudCBNVFUgcmVhZHMgZHVyaW5nIGJ1ZmZlciBhbGxvY2F0aW9uIGFuZCBjb21wcmVzc2lvbiBzaXppbmcuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nLCBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBtZW1vcnktZGVwZW5kZW50IGNvbnRyb2wgZmxvdy4gQW55IG1lbW9yeSBjb3JydXB0aW9uIG9yIGJ1ZmZlciBzaXppbmcgaXNzdWVzIHJlbGF0ZWQgdG8gTVRVL01SVSBjYWxjdWxhdGlvbnMgYXJlIG91dC1vZi1ib3VuZHMgb3IgZGF0YSByYWNlIGlzc3VlcyBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBLQ1NBTi4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIFBQUCBuZXR3b3JrIGRldmljZSBjb2RlIGluIGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLiBJdCBlbmZvcmNlcyBtaW5pbXVtIGFuZCBtYXhpbXVtIGJvdW5kcyBjaGVja3Mgb24gTVJVIGluIHBwcF9pb2N0bCAoUFBQSU9DU01SVSksIHNldHMgZGV2LVxcdTAwM2VtaW5fbXR1IGluIHBwcF9zZXR1cCwgYW5kIHVzZXMgUkVBRF9PTkNFIGZvciBNVFUgcmVhZGluZyBpbiBwYWRfY29tcHJlc3Nfc2tiLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBvciBlZGdlIGNhc2VzIGluIFBQUCBNVFUvTVJVIG5lZ290aWF0aW9uIGFuZCBwYWNrZXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjAzLjYzNzEzMDY3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcwMjAxNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjQyNDVkYmU5OWMyYzA3NGJlN2UyMjllYmYxMDZiN2M3NTE2ODQyYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDA5OjE5OjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5pbmRleCAxYTYxMGExODg5M2JhLi40MDIyMTE3NjhjZjVmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcXG5AQCAtNzIsNiArNzIsOCBAQFxcbiBcXG4gI2RlZmluZSBQUFBfUFJPVE9fTEVOXFx0MlxcbiAjZGVmaW5lIFBQUF9MQ1BfSERSTEVOXFx0NFxcbisjZGVmaW5lIFBQUF9NSU5fTVRVXFx0MTI4XFxuKyNkZWZpbmUgUFBQX01JTl9NUlVcXHQxMjhcXG4gXFxuIC8qIFRoZSBmaWx0ZXIgaW5zdHJ1Y3Rpb25zIGdlbmVyYXRlZCBieSBsaWJwY2FwIGFyZSBjb25zdHJ1Y3RlZFxcbiAgKiBhc3N1bWluZyBhIGZvdXItYnl0ZSBQUFAgaGVhZGVyIG9uIGVhY2ggcGFja2V0LCB3aGVyZSB0aGUgbGFzdFxcbkBAIC04MDgsNiArODEwLDEwIEBAIHN0YXRpYyBsb25nIHBwcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdGNhc2UgUFBQSU9DU01SVTpcXG4gXFx0XFx0aWYgKGdldF91c2VyKHZhbCwgcCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRpZiAodmFsIFxcdTAwM2MgUFBQX01JTl9NUlUgfHwgdmFsIFxcdTAwM2UgSU5UX01BWCAtIFBQUF9IRFJMRU4gLSAxKSB7XFxuK1xcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuIFxcdFxcdHBwcF9yZWN2X2xvY2socHBwKTtcXG4gXFx0XFx0cHBwLVxcdTAwM2VtcnUgPSB2YWw7XFxuIFxcdFxcdHBwcF9yZWN2X3VubG9jayhwcHApO1xcbkBAIC0xNjI4LDYgKzE2MzQsNyBAQCBzdGF0aWMgdm9pZCBwcHBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gUFBQX0hEUkxFTjtcXG4gXFx0ZGV2LVxcdTAwM2VtdHUgPSBQUFBfTVJVO1xcbitcXHRkZXYtXFx1MDAzZW1pbl9tdHUgPSBQUFBfTUlOX01UVTtcXG4gXFx0ZGV2LVxcdTAwM2VhZGRyX2xlbiA9IDA7XFxuIFxcdGRldi1cXHUwMDNldHhfcXVldWVfbGVuID0gMztcXG4gXFx0ZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX1BQUDtcXG5AQCAtMTcxOSwxMCArMTcyNiwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjtcXG4rXFx0aW50IG10dSA9IFJFQURfT05DRShkZXYtXFx1MDAzZW10dSk7XFxuIFxcdGludCBsZW47XFxuLVxcdGludCBuZXdfc2tiX3NpemUgPSBkZXYtXFx1MDAzZW10dSArXFxuK1xcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgK1xcbiBcXHRcXHRwcHAtXFx1MDAzZXhjb21wLVxcdTAwM2Vjb21wX2V4dHJhICsgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuLVxcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gZGV2LVxcdTAwM2VtdHUgK1xcbitcXHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IG10dSArXFxuIFxcdFxcdHBwcC1cXHUwMDNleGNvbXAtXFx1MDAzZWNvbXBfZXh0cmEgKyBQUFBfSERSTEVOO1xcbiBcXG4gXFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6MDQuMzEwMDU3MTk0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0Mjc0MzUxMjM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWRfY29tcHJlc3Nfc2tiXCIsXG4gICAgXCJwcHBfaW9jdGxcIixcbiAgICBcInBwcF9wcmVwYXJlX3R4X3NrYlwiLFxuICAgIFwicHBwX3NldHVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIFBQUCBuZXR3b3JrIGRldmljZSBjb2RlIGluIGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLiBJdCBlbmZvcmNlcyBtaW5pbXVtIGFuZCBtYXhpbXVtIGJvdW5kcyBjaGVja3Mgb24gTVJVIGluIHBwcF9pb2N0bCAoUFBQSU9DU01SVSksIHNldHMgZGV2LVxcdTAwM2VtaW5fbXR1IGluIHBwcF9zZXR1cCwgYW5kIHVzZXMgUkVBRF9PTkNFIGZvciBNVFUgcmVhZGluZyBpbiBwYWRfY29tcHJlc3Nfc2tiLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBvciBlZGdlIGNhc2VzIGluIFBQUCBNVFUvTVJVIG5lZ290aWF0aW9uIGFuZCBwYWNrZXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjQyNDVkYmU5OWMyYzA3NGJlN2UyMjllYmYxMDZiN2M3NTE2ODQyYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDk6MTk6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5pbmRleCAxYTYxMGExODg5M2JhLi40MDIyMTE3NjhjZjVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG5AQCAtNzIsNiArNzIsOCBAQFxuIFxuICNkZWZpbmUgUFBQX1BST1RPX0xFTlx0MlxuICNkZWZpbmUgUFBQX0xDUF9IRFJMRU5cdDRcbisjZGVmaW5lIFBQUF9NSU5fTVRVXHQxMjhcbisjZGVmaW5lIFBQUF9NSU5fTVJVXHQxMjhcbiBcbiAvKiBUaGUgZmlsdGVyIGluc3RydWN0aW9ucyBnZW5lcmF0ZWQgYnkgbGlicGNhcCBhcmUgY29uc3RydWN0ZWRcbiAgKiBhc3N1bWluZyBhIGZvdXItYnl0ZSBQUFAgaGVhZGVyIG9uIGVhY2ggcGFja2V0LCB3aGVyZSB0aGUgbGFzdFxuQEAgLTgwOCw2ICs4MTAsMTAgQEAgc3RhdGljIGxvbmcgcHBwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdGNhc2UgUFBQSU9DU01SVTpcbiBcdFx0aWYgKGdldF91c2VyKHZhbCwgcCkpXG4gXHRcdFx0YnJlYWs7XG4rXHRcdGlmICh2YWwgXHUwMDNjIFBQUF9NSU5fTVJVIHx8IHZhbCBcdTAwM2UgSU5UX01BWCAtIFBQUF9IRFJMRU4gLSAxKSB7XG4rXHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuIFx0XHRwcHBfcmVjdl9sb2NrKHBwcCk7XG4gXHRcdHBwcC1cdTAwM2VtcnUgPSB2YWw7XG4gXHRcdHBwcF9yZWN2X3VubG9jayhwcHApO1xuQEAgLTE2MjgsNiArMTYzNCw3IEBAIHN0YXRpYyB2b2lkIHBwcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IFBQUF9IRFJMRU47XG4gXHRkZXYtXHUwMDNlbXR1ID0gUFBQX01SVTtcbitcdGRldi1cdTAwM2VtaW5fbXR1ID0gUFBQX01JTl9NVFU7XG4gXHRkZXYtXHUwMDNlYWRkcl9sZW4gPSAwO1xuIFx0ZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiA9IDM7XG4gXHRkZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9QUFA7XG5AQCAtMTcxOSwxMCArMTcyNiwxMSBAQCBwYWRfY29tcHJlc3Nfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xuIFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XG4rXHRpbnQgbXR1ID0gUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpO1xuIFx0aW50IGxlbjtcbi1cdGludCBuZXdfc2tiX3NpemUgPSBkZXYtXHUwMDNlbXR1ICtcbitcdGludCBuZXdfc2tiX3NpemUgPSBtdHUgK1xuIFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSArIGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW47XG4tXHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IGRldi1cdTAwM2VtdHUgK1xuK1x0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBtdHUgK1xuIFx0XHRwcHAtXHUwMDNleGNvbXAtXHUwMDNlY29tcF9leHRyYSArIFBQUF9IRFJMRU47XG4gXG4gXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6MDQuMzEwMDU5Mjg0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTMyNDQ2OTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQUFAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSB0aGUgYWN0aW9uIGlzIGhhcHBlbmluZyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMsIHBhcnRpY3VsYXJseSBob3cgaXQgYWZmZWN0cyBQUFAgZnVuY3Rpb25hbGl0eS5cblxuRmlyc3QgZ2xhbmNlOiBpdCdzIGFkZGluZyBgUFBQX01JTl9NVFUgMTI4YCBhbmQgYFBQUF9NSU5fTVJVIDEyOGAuIEhtbSwgZXN0YWJsaXNoaW5nIG1pbmltdW1zIGZvciBNVFUgYW5kIE1SVS4gVGhhdCdzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nLCBzdWdnZXN0cyB0aGVyZSB3YXMgbm8gc3RyaWN0IGxvd2VyIGxpbWl0IGJlZm9yZS5cblxuVGhlbiwgZGl2aW5nIGludG8gYHBwcF9pb2N0bGA6IHVuZGVyIGBQUFBJT0NTTVJVYCwgdGhlcmUncyBub3cgYSBjaGVjay4gSXQgdmFsaWRhdGVzIHRoZSBNUlUgdmFsdWU6IGBpZiAodmFsIFx1MDAzYyBQUFBfTUlOX01SVSB8fCB2YWwgXHUwMDNlIElOVF9NQVggLSBQUFBfSERSTEVOIC0gMSlgLiBTbyBpdCdzIGVuc3VyaW5nIHRoYXQgdGhlIHJlcXVlc3RlZCBNUlUgbWVldHMgdGhpcyBtaW5pbXVtIGFuZCBkb2Vzbid0IGV4Y2VlZCBhIHNhZmUgdXBwZXIgYm91bmQsIHRoZSBjaGVjayBmb3IgYW4gb3ZlcmZsb3cgb24gdGhlIGFkZGl0aW9uIG9mIGBQUFBfSERSTEVOYCBzdWdnZXN0cyBpdCdzIHRvIHByZXZlbnQgYSBidWZmZXIgb3ZlcmZsb3cuIFJldHVybmluZyBgLUVJTlZBTGAgaXMgc3RhbmRhcmQgcHJhY3RpY2Ugd2hlbiB0aGUgTVJVIGlzIGludmFsaWQuIFNlbnNpYmxlLlxuXG5OZXh0LCBgcHBwX3NldHVwYCBub3cgc2V0cyBgZGV2LVx1MDAzZW1pbl9tdHUgPSBQUFBfTUlOX01UVTtgLiBTbywgdGhpcyBgbWluX210dWAgbWVtYmVyIGlzIGJlaW5nIGluaXRpYWxpemVkIGFuZCBpdCdzIGJlaW5nIHNldCB0byB0aGUgbWluaW11bSB2YWx1ZSB3ZSBwcmV2aW91c2x5IG5vdGVkLiBNYWtlcyBzZW5zZSBmb3IgZW5mb3JjaW5nIHRoYXQgbWluaW11bSBhdCBzZXR1cC5cblxuRmluYWxseSwgaW4gYHBhZF9jb21wcmVzc19za2JgLCB0aGVyZSdzIGEgdXNlIG9mIGBSRUFEX09OQ0UoZGV2LVx1MDAzZW10dSlgIHdoaWNoIGlzIGdvb2QuIFRoZXkncmUgdXNpbmcgYFJFQURfT05DRWAgdG8gZW5zdXJlIGF0b21pY2l0eSBhbmQgcHJldmVudCBkYXRhIHJhY2VzIHdoZW4gcmVhZGluZyB0aGUgTVRVIHZhbHVlLiBUaGlzIGNvbmZpcm1zIHRoZSB2YWx1ZSBjYW4gYmUgY2hhbmdlZCBhdCBydW50aW1lLiBTbWFydCBtb3ZlLlxuXG5Ob3csIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8ga25vdyB0aGUgY29udGV4dDogd2hhdCBhcmUgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGZpbGU/IEknbGwgcHJvYmFibHkgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IGltcGFjdCB0aGlzIGNvZGUuIElmIHRoYXQgZG9lc24ndCB5aWVsZCB0aGUgYW5zd2VyLCBJJ2xsIG1vdmUgb24gdG8gYGRyaXZlcnMvbmV0L0tjb25maWdgIG9yIHBvc3NpYmx5IGV2ZW4gdGhlIE1ha2VmaWxlIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgZW5hYmxlZC4gR290dGEgY2hlY2sgdGhvc2UgcHJlcmVxdWlzaXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjA5LjYzNDUzMTU4M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI0MzgyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwX2dlbmVyaWNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTY9Y29uZmlnIFBQUFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzItXFx0ICBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjMzOlxcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0zNC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZS01LVxcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19QUFApICs9IHBwcF9nZW5lcmljLm9cXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGUtNy1vYmotJChDT05GSUdfUFBQX0FTWU5DKSArPSBwcHBfYXN5bmMub1xcbi0tXFxuZHJpdmVycy9uZXQvcHBwL2JzZF9jb21wLmM9MTg4PXN0YXRpYyBpbnRcXHRic2RfZGVjb21wcmVzcyAodm9pZCAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmlidWYsIGludCBpc2l6ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9ic2RfY29tcC5jLTE5MC1cXG5kcml2ZXJzL25ldC9wcHAvYnNkX2NvbXAuYzoxOTE6LyogVGhlc2UgYXJlIGluIHBwcF9nZW5lcmljLmMgKi9cXG5kcml2ZXJzL25ldC9wcHAvYnNkX2NvbXAuYy0xOTItZXh0ZXJuIGludCAgcHBwX3JlZ2lzdGVyX2NvbXByZXNzb3IgICAoc3RydWN0IGNvbXByZXNzb3IgKmNwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfYXN5bmMuYz0zMjQ9cHBwX2FzeW5jX2lvY3RsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNDEyLSAqIFRoaXMgaXMgY2FsbGVkIGF0IHNvZnRpcnEgbGV2ZWwgdG8gZGVsaXZlciByZWNlaXZlZCBwYWNrZXRzXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9hc3luYy5jOjQxMzogKiB0byB0aGUgcHBwX2dlbmVyaWMgY29kZSwgYW5kIHRvIHRlbGwgdGhlIHBwcF9nZW5lcmljIGNvZGVcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2FzeW5jLmMtNDE0LSAqIGlmIHdlIGNhbiBhY2NlcHQgbW9yZSBvdXRwdXQgbm93Llxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM9NTE1PXN0YXRpYyB2b2lkIHpfaW5jb21wKHZvaWQgKmFyZywgdW5zaWduZWQgY2hhciAqaWJ1ZiwgaW50IGljbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYy01NjItXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmM6NTYzOi8qIFRoZXNlIGFyZSBpbiBwcHBfZ2VuZXJpYy5jICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9kZWZsYXRlLmMtNTY0LWV4dGVybiBpbnQgIHBwcF9yZWdpc3Rlcl9jb21wcmVzc29yICAgKHN0cnVjdCBjb21wcmVzc29yICpjcCk7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0zMTU9cHBwX3N5bmNfaW9jdGwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQwMi0gKiBUaGlzIGlzIGNhbGxlZCBhdCBzb2Z0aXJxIGxldmVsIHRvIGRlbGl2ZXIgcmVjZWl2ZWQgcGFja2V0c1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjQwMzogKiB0byB0aGUgcHBwX2dlbmVyaWMgY29kZSwgYW5kIHRvIHRlbGwgdGhlIHBwcF9nZW5lcmljIGNvZGVcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00MDQtICogaWYgd2UgY2FuIGFjY2VwdCBtb3JlIG91dHB1dCBub3cuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjA5Ljc1Njk3NzkxMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjgwMDg4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB0aGUgc3VtbWFyeSwgZnJhbWVkIGFzIHlvdXIgdGhvdWdodHM6XG5cbioqS2NvbmZpZyBEaXZlIFRpbWUhKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBQUFAgKFBvaW50LXRvLVBvaW50IFByb3RvY29sKSBuZXR3b3JrIGRyaXZlci4gU28sIG15IHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBkZWNpc2lvbnMgZm9yIHRoaXMgZHJpdmVyIGFyZSBkZWZpbmVkLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZTpcblxuKiAgIE9wdGlvbnMgdG8gZW5hYmxlL2Rpc2FibGUgUFBQIHN1cHBvcnQgb3ZlcmFsbC5cbiogICBDaG9pY2VzIGZvciBzcGVjaWZpYyBQUFAgdmFyaWFudHMgKGUuZy4sIHN5bmNocm9ub3VzLCBhc3luY2hyb25vdXMpLlxuKiAgIENvbmZpZ3VyYXRpb24gb2YgY29tcHJlc3Npb24gcHJvdG9jb2xzLCBsaWtlIE1QUEUsIG9yIHBlcmhhcHMgb3B0aW9ucyByZWxhdGVkIHRvIENIQVAvUEFQIGF1dGhlbnRpY2F0aW9uLlxuKiAgIFBlcmhhcHMgc29tZSBzZXR0aW5ncyBjb25jZXJuaW5nIGRpZmZlcmVudCBzZXJpYWwgcG9ydCBtb2Rlcywgb3IgbGluayBsYXllciBwcm90b2NvbHMuXG4qICAgSWRlYWxseSwgSSdsbCBmaW5kIGRvY3VtZW50YXRpb24gb3IgY29udGV4dCBmb3IgZWFjaCBvcHRpb24sIHRoZSBkZXBlbmRlbmNpZXMgdGhhdCBnb3Zlcm4gaXRzIGF2YWlsYWJpbGl0eSwgYW5kIGFueSByZWxldmFudCBkZWZhdWx0IHNldHRpbmdzLlxuXG5CYXNpY2FsbHksIHRoaXMgYEtjb25maWdgIGZpbGUgaXMgdGhlIGJsdWVwcmludCBJIG5lZWQgdG8gbmF2aWdhdGUgdG8gZ3Jhc3AgaG93IHRoaXMgUFBQIGRyaXZlciBpcyB3aXJlZCBhbmQgd2hhdCBrbm9icyBjYW4gYmUgdHVybmVkIGR1cmluZyB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzU2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6MTIuMDg0OTg5NzA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMjMyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgUFBQXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdHNlbGVjdCBTTEhDXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGlzIGEgbmV3ZXIgYW5kIGJldHRlciBTTElQLiAgSXQgc2VydmVzXFxuICAxMTpcXHRcXHQgIHRoZSBzYW1lIHB1cnBvc2U6IHNlbmRpbmcgSW50ZXJuZXQgdHJhZmZpYyBvdmVyIHRlbGVwaG9uZSAoYW5kIG90aGVyXFxuICAxMjpcXHRcXHQgIHNlcmlhbCkgbGluZXMuICBBc2sgeW91ciBhY2Nlc3MgcHJvdmlkZXIgaWYgdGhleSBzdXBwb3J0IGl0LCBiZWNhdXNlXFxuICAxMzpcXHRcXHQgIG90aGVyd2lzZSB5b3UgY2FuJ3QgdXNlIGl0OyBtb3N0IEludGVybmV0IGFjY2VzcyBwcm92aWRlcnMgdGhlc2VcXG4gIDE0OlxcdFxcdCAgZGF5cyBzdXBwb3J0IFBQUCByYXRoZXIgdGhhbiBTTElQLlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XFxuICAxNzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3BwcC5zYW1iYS5vcmdcXHUwMDNlLiAgTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIHZlcnNpb24gb2YgcHBwZFxcbiAgMTg6XFx0XFx0ICByZWNvbW1lbmRlZCBpbiBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcXHUwMDNlLlxcbiAgMTk6XFx0XFx0ICBUaGUgUFBQIG9wdGlvbiBlbmxhcmdlcyB5b3VyIGtlcm5lbCBieSBhYm91dCAxNiBLQi5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcXG4gIDIyOlxcdFxcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcXG4gIDIzOlxcdFxcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxcbiAgMjQ6XFx0XFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXFxuICAyNTpcXHRcXHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXFxuICAyNjpcXHRcXHQgIHRoZSBuZXh0IG9wdGlvbiwgXFxcIlBQUCBzdXBwb3J0IGZvciBhc3luYyBzZXJpYWwgcG9ydHNcXFwiLiAgRm9yIFBQUCBvdmVyXFxuICAyNzpcXHRcXHQgIHN5bmNocm9ub3VzIGxpbmVzLCB5b3Ugc2hvdWxkIHNheSBZIChvciBNKSBoZXJlIGFuZCB0byBcXFwiU3VwcG9ydFxcbiAgMjg6XFx0XFx0ICBzeW5jaHJvbm91cyBQUFBcXFwiLCBiZWxvdy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFxcXCJWZXJzaW9uIGluZm9ybWF0aW9uIG9uIGFsbCBzeW1ib2xzXFxcIiBhYm92ZSwgdGhlblxcbiAgMzE6XFx0XFx0ICB5b3UgY2Fubm90IGNvbXBpbGUgdGhlIFBQUCBkcml2ZXIgaW50byB0aGUga2VybmVsOyB5b3UgY2FuIHRoZW4gb25seVxcbiAgMzI6XFx0XFx0ICBjb21waWxlIGl0IGFzIGEgbW9kdWxlLiBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTVxcbiAgMzM6XFx0XFx0ICBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBwcF9nZW5lcmljLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRpZiBQUFBcXG4gIDM2OlxcdFxcbiAgMzc6XFx0Y29uZmlnIFBQUF9CU0RDT01QXFxuICAzODpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvblxcXCJcXG4gIDM5OlxcdFxcdGhlbHBcXG4gIDQwOlxcdFxcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOToxMi4wODYyMDczODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjEzNDQxODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgY29uc2lkZXJpbmcgSSdtIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgUFBQIEdlbmVyaWMgQ29kZSoqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gemVybyBpbiBvbiB3aGF0J3MgZ29pbmcgb24gaW4gdGhlIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aG9zZSByZWNlbnRseSB0d2Vha2VkIGxpbmVzLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIFRoZSBnZW5lcmljIFBQUCBjb2RlIGlzIHRoZSBoZWFydCBvZiB0aGUgc3RhY2ssIGFuZCBhbnkgY2hhbmdlcyB0aGVyZSBhcmUgcG90ZW50aWFsbHkgZ29pbmcgdG8gaGF2ZSBmYXItcmVhY2hpbmcgZWZmZWN0cy4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IG1vZGlmaWNhdGlvbnMgd2VyZSBtYWRlLCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGVtLCBhbmQgd2hhdCBhcmVhcyBvZiBmdW5jdGlvbmFsaXR5IG1pZ2h0IGJlIHRvdWNoZWQuIEknbGwgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBjaGFuZ2UgaW50ZXJhY3RzIHdpdGggdGhlIGNvcmUgUFBQIHByb3RvY29scywgdGhlIGhhbmRsaW5nIG9mIGRpZmZlcmVudCBsaW5rIGxheWVycywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9uIHRoaW5ncyBsaWtlIGF1dGhlbnRpY2F0aW9uLCBjb21wcmVzc2lvbiwgb3IgZXJyb3IgaGFuZGxpbmcuIFRpbWUgdG8gZ2V0IG15IGhlYWQgaW4gdGhhdCBjb2RlLi4uIExldCdzIHNlZSB3aGF0IHdlIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjE0LjI5OTY1MjAwM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNjk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MDA6XFx0XFxuIDgwMTpcXHRcXHRpZiAocGYtXFx1MDAzZWtpbmQgIT0gSU5URVJGQUNFKSB7XFxuIDgwMjpcXHRcXHRcXHQvKiBjYW4ndCBoYXBwZW4gKi9cXG4gODAzOlxcdFxcdFxcdHByX2VycihcXFwiUFBQOiBub3QgaW50ZXJmYWNlIG9yIGNoYW5uZWw/P1xcXFxuXFxcIik7XFxuIDgwNDpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiA4MDU6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDgwNjpcXHRcXHR9XFxuIDgwNzpcXHRcXG4gODA4OlxcdFxcdHBwcCA9IFBGX1RPX1BQUChwZik7XFxuIDgwOTpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbiA4MTA6XFx0XFx0Y2FzZSBQUFBJT0NTTVJVOlxcbiA4MTE6XFx0XFx0XFx0aWYgKGdldF91c2VyKHZhbCwgcCkpXFxuIDgxMjpcXHRcXHRcXHRcXHRicmVhaztcXG4gODEzOlxcdFxcdFxcdGlmICh2YWwgXFx1MDAzYyBQUFBfTUlOX01SVSB8fCB2YWwgXFx1MDAzZSBJTlRfTUFYIC0gUFBQX0hEUkxFTiAtIDEpIHtcXG4gODE0OlxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuIDgxNTpcXHRcXHRcXHRcXHRicmVhaztcXG4gODE2OlxcdFxcdFxcdH1cXG4gODE3OlxcdFxcdFxcdHBwcF9yZWN2X2xvY2socHBwKTtcXG4gODE4OlxcdFxcdFxcdHBwcC1cXHUwMDNlbXJ1ID0gdmFsO1xcbiA4MTk6XFx0XFx0XFx0cHBwX3JlY3ZfdW5sb2NrKHBwcCk7XFxuIDgyMDpcXHRcXHRcXHRlcnIgPSAwO1xcbiA4MjE6XFx0XFx0XFx0YnJlYWs7XFxuIDgyMjpcXHRcXG4gODIzOlxcdFxcdGNhc2UgUFBQSU9DU0ZMQUdTOlxcbiA4MjQ6XFx0XFx0XFx0aWYgKGdldF91c2VyKHZhbCwgcCkpXFxuIDgyNTpcXHRcXHRcXHRcXHRicmVhaztcXG4gODI2OlxcdFxcdFxcdHBwcF9sb2NrKHBwcCk7XFxuIDgyNzpcXHRcXHRcXHRjZmxhZ3MgPSBwcHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgfnZhbDtcXG4gODI4OlxcdCNpZmRlZiBDT05GSUdfUFBQX01VTFRJTElOS1xcbiA4Mjk6XFx0XFx0XFx0aWYgKCEocHBwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX01VTFRJTElOSykgXFx1MDAyNlxcdTAwMjYgKHZhbCBcXHUwMDI2IFNDX01VTFRJTElOSykpXFxuIDgzMDpcXHRcXHRcXHRcXHRwcHAtXFx1MDAzZW5leHRzZXEgPSAwO1xcbiA4MzE6XFx0I2VuZGlmXFxuIDgzMjpcXHRcXHRcXHRwcHAtXFx1MDAzZWZsYWdzID0gdmFsIFxcdTAwMjYgU0NfRkxBR19CSVRTO1xcbiA4MzM6XFx0XFx0XFx0cHBwX3VubG9jayhwcHApO1xcbiA4MzQ6XFx0XFx0XFx0aWYgKGNmbGFncyBcXHUwMDI2IFNDX0NDUF9PUEVOKVxcbiA4MzU6XFx0XFx0XFx0XFx0cHBwX2NjcF9jbG9zZWQocHBwKTtcXG4gODM2OlxcdFxcdFxcdGVyciA9IDA7XFxuIDgzNzpcXHRcXHRcXHRicmVhaztcXG4gODM4OlxcdFxcbiA4Mzk6XFx0XFx0Y2FzZSBQUFBJT0NHRkxBR1M6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjE0LjI5OTg4MjAxMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMjQyODg0ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgZGVlcCBpbiB0aGUgd2VlZHMgb2YgdGhpcyBzeXN0ZW06XG5cbioqRm9jdXNpbmcgSW46IFBQUCBTZXR1cCBhbmQgU0tCIENvbXByZXNzaW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbGFzZXItZm9jdXNlZC4gQmFzZWQgb24gdGhlIHByZXZpb3VzIGFuYWx5c2lzLCBJIG5lZWQgdG8gemVybyBpbiBvbiBhIGNvdXBsZSBvZiBzcGVjaWZpYyBhcmVhcy4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdG8gcmV2aXNpdCB0aGUgYHBwcF9zZXR1cGAgYW5kIGBwYWRfY29tcHJlc3Nfc2tiYCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgbG9va2luZyBhcm91bmQgbGluZSAxNjI1IGFuZCBsaW5lIDE3MjAgb2YgdGhlIHJlbGV2YW50IGNvZGUgZmlsZS4gSSB0aGluayB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW1wb3J0YW50IGhhcHBlbmluZyB0aGVyZS4gTGV0IG1lIHN0YXJ0IGJ5IGRvdWJsZS1jaGVja2luZyB3aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZG9pbmcsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gSSdsbCBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZWlyIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlcy4gVGhpcyBzaG91bGQgYmUgYSBmYWlybHkgdGFyZ2V0ZWQgaW52ZXN0aWdhdGlvbiwgSSBob3BlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOToxNi42MjQxNzM1NDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4ODQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MjU6XFx0XFx0Lm5hbWUgPSBcXFwicHBwXFxcIixcXG4xNjI2OlxcdH07XFxuMTYyNzpcXHRcXG4xNjI4OlxcdHN0YXRpYyB2b2lkIHBwcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbjE2Mjk6XFx0e1xcbjE2MzA6XFx0XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnBwcF9uZXRkZXZfb3BzO1xcbjE2MzE6XFx0XFx0U0VUX05FVERFVl9ERVZUWVBFKGRldiwgXFx1MDAyNnBwcF90eXBlKTtcXG4xNjMyOlxcdFxcbjE2MzM6XFx0XFx0ZGV2LVxcdTAwM2VsbHR4ID0gdHJ1ZTtcXG4xNjM0OlxcdFxcbjE2MzU6XFx0XFx0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBQUFBfSERSTEVOO1xcbjE2MzY6XFx0XFx0ZGV2LVxcdTAwM2VtdHUgPSBQUFBfTVJVO1xcbjE2Mzc6XFx0XFx0ZGV2LVxcdTAwM2VtaW5fbXR1ID0gUFBQX01JTl9NVFU7XFxuMTYzODpcXHRcXHRkZXYtXFx1MDAzZWFkZHJfbGVuID0gMDtcXG4xNjM5OlxcdFxcdGRldi1cXHUwMDNldHhfcXVldWVfbGVuID0gMztcXG4xNjQwOlxcdFxcdGRldi1cXHUwMDNldHlwZSA9IEFSUEhSRF9QUFA7XFxuMTY0MTpcXHRcXHRkZXYtXFx1MDAzZWZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQIHwgSUZGX01VTFRJQ0FTVDtcXG4xNjQyOlxcdFxcdGRldi1cXHUwMDNlcHJpdl9kZXN0cnVjdG9yID0gcHBwX2Rldl9wcml2X2Rlc3RydWN0b3I7XFxuMTY0MzpcXHRcXHRkZXYtXFx1MDAzZXBjcHVfc3RhdF90eXBlID0gTkVUREVWX1BDUFVfU1RBVF9UU1RBVFM7XFxuMTY0NDpcXHRcXHRkZXYtXFx1MDAzZWZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1Q7XFxuMTY0NTpcXHRcXHRkZXYtXFx1MDAzZWh3X2ZlYXR1cmVzID0gZGV2LVxcdTAwM2VmZWF0dXJlcztcXG4xNjQ2OlxcdFxcdG5ldGlmX2tlZXBfZHN0KGRldik7XFxuMTY0NzpcXHR9XFxuMTY0ODpcXHRcXG4xNjQ5OlxcdC8qXFxuMTY1MDpcXHQgKiBUcmFuc21pdC1zaWRlIHJvdXRpbmVzLlxcbjE2NTE6XFx0ICovXFxuMTY1MjpcXHRcXG4xNjUzOlxcdC8qIENhbGxlZCB0byBkbyBhbnkgd29yayBxdWV1ZWQgdXAgb24gdGhlIHRyYW5zbWl0IHNpZGUgdGhhdCBjYW4gbm93IGJlIGRvbmUgKi9cXG4xNjU0OlxcdHN0YXRpYyB2b2lkIHBwcF94bWl0X2ZsdXNoKHN0cnVjdCBwcHAgKnBwcClcXG4xNjU1OlxcdHtcXG4xNjU2OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuMTY1NzpcXHRcXG4xNjU4OlxcdFxcdHdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnBwcC1cXHUwMDNlZmlsZS54cSkpKSB7XFxuMTY1OTpcXHRcXHRcXHRpZiAodW5saWtlbHkoIXBwcF9wdXNoKHBwcCwgc2tiKSkpIHtcXG4xNjYwOlxcdFxcdFxcdFxcdHNrYl9xdWV1ZV9oZWFkKFxcdTAwMjZwcHAtXFx1MDAzZWZpbGUueHEsIHNrYik7XFxuMTY2MTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMTY2MjpcXHRcXHRcXHR9XFxuMTY2MzpcXHRcXHR9XFxuMTY2NDpcXHRcXHQvKiBJZiB0aGVyZSdzIG5vIHdvcmsgbGVmdCB0byBkbywgdGVsbCB0aGUgY29yZSBuZXQgY29kZSB0aGF0IHdlIGNhblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOToxNi42MjQzOTc4MzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA3NjUxMzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGl0OlxuXG4qKkNvbnNpZGVyaW5nIGBwYWRfY29tcHJlc3Nfc2tiYCoqXG5cbkFscmlnaHQsIEknbSBhbHJlYWR5IGluIHRoaXMga2VybmVsIGNvZGUgYW5kIEkndmUgYmVlbiBmb2N1c2luZyBvbiBvcHRpbWl6aW5nIHRoaXMgcGFydGljdWxhciBhcmVhLiBJJ3ZlIGNvbnNpZGVyZWQgc2V2ZXJhbCBmYWN0b3JzLiBOb3cgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGFub3RoZXIgZnVuY3Rpb24sIEkgc2hvdWxkIGFsc28gY2hlY2sgaG93IGBwYWRfY29tcHJlc3Nfc2tiYCBpcyBiZWhhdmluZyBpbiB0aGUgY3VycmVudCBzY2VuYXJpby4gSXQncyBpbXBvcnRhbnQgdG8gYmUgdGhvcm91Z2guIEkgZG9uJ3Qgd2FudCB0byBtaXNzIGFueSBwb3NzaWJsZSBpbnRlcmFjdGlvbiBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBMZXQgbWUgZ28gc2VlIGhvdyB0aGF0IHBsYXlzIGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLCBtYXliZSBpdCBpcyBhIGNvbnRyaWJ1dGluZyBmYWN0b3IuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBob3cgaXQncyBiZWluZyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucyBJJ3ZlIGFscmVhZHkgZXhhbWluZWQuIFRoaXMgaXMgYWxsIHBhcnQgb2YgYSBsYXJnZXIgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24gcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM2NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6MTguNzAwOTE1NzA2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzEwOlxcdFxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNnBwcC1cXHUwMDNleG1pdF9yZWN1cnNpb24tXFx1MDAzZWJoX2xvY2spO1xcbjE3MTE6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuMTcxMjpcXHRcXG4xNzEzOlxcdFxcdHJldHVybjtcXG4xNzE0OlxcdFxcbjE3MTU6XFx0ZXJyOlxcbjE3MTY6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuMTcxNzpcXHRcXG4xNzE4OlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbjE3MTk6XFx0XFxuMTcyMDpcXHRcXHRpZiAobmV0X3JhdGVsaW1pdCgpKVxcbjE3MjE6XFx0XFx0XFx0bmV0ZGV2X2VycihuZXRkZXZfZnJvbV9wcml2KHBwcCksIFxcXCJyZWN1cnNpb24gZGV0ZWN0ZWRcXFxcblxcXCIpO1xcbjE3MjI6XFx0fVxcbjE3MjM6XFx0XFxuMTcyNDpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpcXG4xNzI1OlxcdHBhZF9jb21wcmVzc19za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbjE3MjY6XFx0e1xcbjE3Mjc6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcXG4xNzI4OlxcdFxcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xcbjE3Mjk6XFx0XFx0aW50IG10dSA9IFJFQURfT05DRShkZXYtXFx1MDAzZW10dSk7XFxuMTczMDpcXHRcXHRpbnQgbGVuO1xcbjE3MzE6XFx0XFx0aW50IG5ld19za2Jfc2l6ZSA9IG10dSArXFxuMTczMjpcXHRcXHRcXHRwcHAtXFx1MDAzZXhjb21wLVxcdTAwM2Vjb21wX2V4dHJhICsgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW47XFxuMTczMzpcXHRcXHRpbnQgY29tcHJlc3Nvcl9za2Jfc2l6ZSA9IG10dSArXFxuMTczNDpcXHRcXHRcXHRwcHAtXFx1MDAzZXhjb21wLVxcdTAwM2Vjb21wX2V4dHJhICsgUFBQX0hEUkxFTjtcXG4xNzM1OlxcdFxcbjE3MzY6XFx0XFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcXG4xNzM3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjE3Mzg6XFx0XFxuMTczOTpcXHRcXHRuZXdfc2tiID0gYWxsb2Nfc2tiKG5ld19za2Jfc2l6ZSwgR0ZQX0FUT01JQyk7XFxuMTc0MDpcXHRcXHRpZiAoIW5ld19za2IpIHtcXG4xNzQxOlxcdFxcdFxcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXFxuMTc0MjpcXHRcXHRcXHRcXHRuZXRkZXZfZXJyKGRldiwgXFxcIlBQUDogbm8gbWVtb3J5IChjb21wIHBrdClcXFxcblxcXCIpO1xcbjE3NDM6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTc0NDpcXHRcXHR9XFxuMTc0NTpcXHRcXHRpZiAoZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gXFx1MDAzZSBQUFBfSERSTEVOKVxcbjE3NDY6XFx0XFx0XFx0c2tiX3Jlc2VydmUobmV3X3NrYiwgZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gLSBQUFBfSERSTEVOKTtcXG4xNzQ3OlxcdFxcbjE3NDg6XFx0XFx0LyogY29tcHJlc3NvciBzdGlsbCBleHBlY3RzIEEvQyBieXRlcyBpbiBoZHIgKi9cXG4xNzQ5OlxcdFxcdGxlbiA9IHBwcC1cXHUwMDNleGNvbXAtXFx1MDAzZWNvbXByZXNzKHBwcC1cXHUwMDNleGNfc3RhdGUsIHNrYi1cXHUwMDNlZGF0YSAtIDIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjE4LjcwMTE4ODk5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDg3OTcyNzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgcGF0Y2ggYWZmZWN0cyByZWFjaGFibGUgY29kZS4gQWgsIHllcywgUFBQIOKAkyBwb2ludC10by1wb2ludCBwcm90b2NvbC4gVGhhdCdzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZS4gU3l6a2FsbGVyIGlzIGFsbCBvdmVyIGAvZGV2L3BwcGAgYW5kIGFsbCB0aGUgYXNzb2NpYXRlZCBpb2N0bHMgbGlrZSBgUFBQSU9DU01SVWAg4oCTIGNsYXNzaWMgZnV6emluZyB0YXJnZXRzLiBTbywgY2hlY2ssIHRoZSBjb2RlIGlzIHJlYWNoYWJsZS5cblxuTmV4dCwgZG9lcyBpdCBhY3R1YWxseSB0b3VjaCBleGVjdXRhYmxlIGNvZGUgdGhhdCdzIHdvcnRoIG91ciB0aW1lPyBMb29rcyBsaWtlIGl0IG1vZGlmaWVzIGBwcHBfaW9jdGxgIHdpdGggYSBuZXcgYm91bmRzIGNoZWNrIG9uIHRoZSBNUlUgdmFsdWUgZm9yIGBQUFBJT0NTTVJVYC4gSXQgYWxzbyBhZGp1c3RzIGBkZXYtXHUwMDNlbWluX210dWAgd2l0aGluIGBwcHBfc2V0dXBgLCBhbmQgaXQncyBtYWtpbmcgY2hhbmdlcyB0byBNVFUgcmVhZGluZyBpbiBgcGFkX2NvbXByZXNzX3NrYmAgdXNpbmcgYFJFQURfT05DRWAuIFllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHRvdWNoaW5nIGV4ZWN1dGFibGUgY29kZSwgYW5kIHdlIGFyZSBzZXR0aW5nIFdvcnRoRnV6emluZyB0byBUUlVFLlxuXG5Ob3csIGxldCdzIGhvbmUgaW4gb24gdGhlIGltcG9ydGFudCBmdW5jdGlvbnMgZm9yIG91ciBmb2N1cyBzeW1ib2xzLiBJdCBsb29rcyBsaWtlIHRoZSBrZXkgZnVuY3Rpb25zIGFyZTpcblxuKiAgIGBwcHBfaW9jdGxgXG4qICAgYHBwcF9zZXR1cGBcbiogICBgcGFkX2NvbXByZXNzX3NrYmBcblxuSW50ZXJlc3RpbmdseSwgYHBhZF9jb21wcmVzc19za2JgIGlzIGFuIGlubGluZSBmdW5jdGlvbiwgYnV0IGl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpcyBiZWluZyB1c2VkIHRvIGZpbmQgcG90ZW50aWFsIGJ1Z3MuIFRoaXMgaXMgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIG9mIHRoZSBmb3JtIGBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICogcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpYC4gTm93IEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgcGFkX2NvbXByZXNzX3NrYmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyMjgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOToyNC4xODkxNjYzMDNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NjY3MzQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWRfY29tcHJlc3Nfc2tiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNzI0PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE3MjU6cGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTcyNi17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNzg1PXBwcF9wcmVwYXJlX3R4X3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE4NzktXFx0XFx0fVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE4ODA6XFx0XFx0bmV3X3NrYiA9IHBhZF9jb21wcmVzc19za2IocHBwLCBza2IpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE4ODEtXFx0XFx0aWYgKCFuZXdfc2tiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOToyNC43NjU4NDQ4NzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE4OTYzMDQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGF0YSBDb21wcmVzc2lvbiBpbiB0aGUgTmV0d29yayBTdGFjayoqXG5cbk9rYXksIHNvIGBwYWRfY29tcHJlc3Nfc2tiYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGVyZSdzIHRoYXQgYmVpbmcgdXNlZD8gRnJvbSB3aGF0IEkgY2FuIHNlZSwgaXQncyBjYWxsZWQgZGlyZWN0bHkgYnkgYHBwcF9wcmVwYXJlX3R4X3NrYmAsIG9yIGF0IGxlYXN0IGlubGluZWQgaW4gdGhlcmUuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlICpjYWxsZXJzKiBvZiBgcHBwX3ByZXBhcmVfdHhfc2tiYCBpdHNlbGYuIFRoYXQnbGwgc2hvdyBtZSB3aGVyZSB0aGUgY29tcHJlc3Npb24sIG9yICphdHRlbXB0KiBhdCBjb21wcmVzc2lvbiwgaXMgYWN0dWFsbHkgaW5pdGlhdGVkIHdpdGhpbiB0aGUgZGF0YSB0cmFuc21pc3Npb24gcHJvY2Vzcy4gS25vd2luZyB0aGUgb3JpZ2lucyBvZiB0aGF0IGZ1bmN0aW9uIHdpbGwgZ2l2ZSBtZSBhIG1vcmUgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIG5ldHdvcmsgc3RhY2suIE5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwODAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOToyNi45NTU0Nzg0NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NDExNjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwcF9wcmVwYXJlX3R4X3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MjY2PXN0YXRpYyB2b2lkIHBwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoyNjc6c3RhdGljIGludCBwcHBfcHJlcGFyZV90eF9za2Ioc3RydWN0IHBwcCAqcHBwLCBzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTI2OC1zdGF0aWMgaW50IHBwcF9wdXNoKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNjcwPXN0YXRpYyB2b2lkIF9fcHBwX3htaXRfcHJvY2VzcyhzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNjc2LVxcdH1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNjc3OlxcdGlmICh1bmxpa2VseShwcHBfcHJlcGFyZV90eF9za2IocHBwLCBcXHUwMDI2c2tiKSkpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTY3OC1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jPTE3ODQ9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jOjE3ODU6cHBwX3ByZXBhcmVfdHhfc2tiKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKipwc2tiKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLTE3ODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOToyNy4wNjE4OTQ5MzlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDU0MzU5NTY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgUFBQIFRyYW5zbWlzc2lvbiBQYXRoKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgdHJhbnNtaXNzaW9uIHByb2Nlc3MgZm9yIFBQUC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29yZSB0cmFuc21pc3Npb24gZnVuY3Rpb25zLiBJJ2xsIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYF9fcHBwX3htaXRfcHJvY2Vzc2AuIEl0J3MgYSBmYWlybHkgY29tbW9uIGNvbnZlbnRpb24gdG8gdXNlIGRvdWJsZSB1bmRlcnNjb3JlcyBmb3IgaW50ZXJuYWwga2VybmVsIGZ1bmN0aW9ucywgc28gdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgdG8gaW52ZXN0aWdhdGUuIElmIHRoYXQgZG9lc24ndCBpbW1lZGlhdGVseSByZXZlYWwgdGhlIG1haW4gdHJhbnNtaXNzaW9uIGZsb3csIEknbGwgdGhlbiBjaGVjayBgcHBwX3htaXRfcHJvY2Vzc2AuIEl0J3MgcG9zc2libGUgdGhlIGxlYWRpbmcgZG91YmxlIHVuZGVyc2NvcmUgZGVub3RlcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIHdoaWxlIHRoZSBzaW5nbGUgdW5kZXJzY29yZWQgdmVyc2lvbiBpcyB0aGUgcHVibGljIEFQSS4gQW5kLCBpZiBuZWl0aGVyIG9mIHRob3NlIGFyZSBxdWl0ZSB3aGF0IEknbSBzZWFyY2hpbmcgZm9yLCBJIHdpbGwgYWxzbyBjaGVjayBgcHBwX3N0YXJ0X3htaXRgLiBUaGF0IG5hbWUgc3VnZ2VzdHMgaXQgY291bGQgYmUgdGhlIGZ1bmN0aW9uIHRoYXQga2lja3Mgb2ZmIHRoZSBhY3R1YWwgdHJhbnNtaXNzaW9uIHNlcXVlbmNlLiBFc3NlbnRpYWxseSwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHF1ZXVpbmcgcGFja2V0cyBmb3IgUFBQIHRyYW5zbWlzc2lvbiBhbmQgaG93IGl0IHRoZW4gaGFuZHMgdGhlbSBvZmYgdG8gdGhlIGxvd2VyIGxheWVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY3NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjMxLjYwNTQ5MzcxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTA1NjI1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfc3RhcnRfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmM9MTQ1Mz1zdGF0aWMgbmV0ZGV2X3R4X3RcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNDU0OnBwcF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMtMTQ1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYz0xNjE1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcHBwX25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNjE3LVxcdC5uZG9fdW5pbml0ICAgICAgPSBwcHBfZGV2X3VuaW5pdCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYzoxNjE4OlxcdC5uZG9fc3RhcnRfeG1pdCAgPSBwcHBfc3RhcnRfeG1pdCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy0xNjE5LVxcdC5uZG9fc2lvY2RldnByaXZhdGUgPSBwcHBfbmV0X3Npb2NkZXZwcml2YXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOTozMS42NzQ1NTkwMDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY4MTYxNjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQUFAtUmVsYXRlZCBLZXJuZWwgRnVuY3Rpb25zKipcblxuT2theSwgbGV0J3Mgc2VlLiBJJ20gbG9va2luZyBhdCBhIGZldyBpbnRlcmVzdGluZyBmdW5jdGlvbnMgaGVyZSDigJMgYHBwcF9pb2N0bGAsIGBwcHBfc2V0dXBgLCBgcGFkX2NvbXByZXNzX3NrYmAsIGFuZCBgcHBwX3ByZXBhcmVfdHhfc2tiYC4gVGhlc2UgYXJlIGFsbCBzb3VuZGluZyBsaWtlIGtleSBwbGF5ZXJzIGluIHRoZSBQUFAgKFBvaW50LXRvLVBvaW50IFByb3RvY29sKSBzdGFjaywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cbkZpcnN0LCBJIHNlZSB0aGF0IHRoZSBgUFBQYCBjb25maWcgb3B0aW9uIGRpcmVjdGx5IGJ1aWxkcyB0aGUgYHBwcF9nZW5lcmljLmNgIGZpbGUuIFNpbXBsZSBlbm91Z2gsIGJ1dCBhcmUgdGhlcmUgKmFueSogb3RoZXIgY29uZmlnIGRlcGVuZGVuY2llcyBsdXJraW5nIGFyb3VuZD8gQWx3YXlzIGdvdHRhIGNoZWNrIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cbkxvb2tpbmcgYXQgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBzcGVjaWZpY2FsbHksIEkgc2VlIHRoZSBgUFBQYCBjb25maWcgb3B0aW9uIGlzIHRyaXN0YXRlIGFuZCBzZWxlY3RzIGBTTEhDYC4gVGhhdCdzIGltcG9ydGFudDsgSSBuZWVkIHRvIGtlZXAgdGhhdCBgU0xIQ2AgZGVwZW5kZW5jeSBpbiBtaW5kLiBJdCdzIG9mdGVuIHRoZSBjYXNlIHRoYXQgc2VlbWluZ2x5IGluZGVwZW5kZW50IGZlYXR1cmVzIGhhdmUgaW50ZXJkZXBlbmRlbmNpZXMuXG5cbk5vdywganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYmVjYXVzZSBpdCdzIGdvb2QgcHJhY3RpY2UsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBmaWxlLiBJJ2xsIG5lZWQgdG8gcnVuIGEgcXVpY2sgYGdyZXBgIGZvciB0aGUgYHNvdXJjZSBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCJgIGxpbmUgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhlcmUgYXJlbid0IGFueSBvdGhlciBjcnVjaWFsIGRlcGVuZGVuY2llcyBkZWZpbmVkIHVwc3RyZWFtLiBNYWtpbmcgc3VyZSBJJ3ZlIGdvdCB0aGUgd2hvbGUgcGljdHVyZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE5NiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOTozNi4zNTYxNzgxNTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MjUxNDcxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTUyNj1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BsaXAvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9LY29uZmlnLTUyNy1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjUyODpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L0tjb25maWctNTI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOTozNi42Mjg2OTgwMjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjUzNjYzNzQwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uIElzc3VlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gQmFzZWQgb24gd2hhdCBJJ3ZlIGJlZW4gc2VlaW5nLCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBhIHNwZWNpZmljIG5ldHdvcmsgZHJpdmVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGp1bXAgaW50byBgZHJpdmVycy9uZXQvS2NvbmZpZ2Ag4oCTIEkga25vdyB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwncyBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uIGxvZ2ljIHJlc2lkZXMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHNjYW4gYXJvdW5kIGxpbmUgNTI4LiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGdvdmVybnMgdGhlIGRyaXZlcidzIGluY2x1c2lvbi4gSSdtIGxvb2tpbmcgZm9yIHRoZSBlbmNsb3NpbmcgYGlmYCBzdGF0ZW1lbnRzLCBvciBhbnkgZGlyZWN0IGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIGNvbnRyb2xsaW5nIHdoZXRoZXIgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBpcyBjb21waWxlZC4gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGNvbmZpZ3VyYXRpb24gcHJvYmxlbXMgYW5kIGZvciBlbnN1cmluZyB0aGUgZHJpdmVyIGlzIHByb3Blcmx5IGVuYWJsZWQgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGFuZCBoYXJkd2FyZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGUuZy4sIGBDT05GSUdfRk9PX0RSSVZFUmAsIGBDT05GSUdfQkFSX0hBUkRXQVJFYCkgdGhhdCBtdXN0IGJlIHNldCBpbiBvcmRlciBmb3IgdGhpcyBkcml2ZXIgdG8gYmUgYnVpbHQuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzY1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6MzkuMTY1MzM5MTc3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvbWN0cC9LY29uZmlnXFxcIlxcbiA1MjE6XFx0XFxuIDUyMjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZ1xcXCJcXG4gNTIzOlxcdFxcbiA1MjQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9wY3MvS2NvbmZpZ1xcXCJcXG4gNTI1OlxcdFxcbiA1MjY6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC9wbGlwL0tjb25maWdcXFwiXFxuIDUyNzpcXHRcXG4gNTI4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcXFwiXFxuIDUyOTpcXHRcXG4gNTMwOlxcdHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvc2xpcC9LY29uZmlnXFxcIlxcbiA1MzE6XFx0XFxuIDUzMjpcXHRzb3VyY2UgXFxcImRyaXZlcnMvczM5MC9uZXQvS2NvbmZpZ1xcXCJcXG4gNTMzOlxcdFxcbiA1MzQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1xcXCJcXG4gNTM1OlxcdFxcbiA1MzY6XFx0c291cmNlIFxcXCJkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnXFxcIlxcbiA1Mzc6XFx0XFxuIDUzODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvbmV0L3dhbi9LY29uZmlnXFxcIlxcbiA1Mzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjM5LjE2NTQyMzQyN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ0MzQ2Njk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OlxuXG4qKkV4YW1pbmluZyBOZXR3b3JrIERldmljZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IG5ldHdvcmsgZGV2aWNlcyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBidWlsZCBzeXN0ZW0uIFRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGNoZWNraW5nIGBORVRERVZJQ0VTYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IHRoaXMgaXMgYSB2ZXJ5IGNvbW1vbiB2YXJpYWJsZSBuYW1lIHVzZWQgaW4gdGhlIEtjb25maWcgZmlsZXMgcmVsYXRlZCB0byBkZXZpY2UgZHJpdmVycy4gSXQncyBoaWdobHkgcHJvYmFibGUgdGhpcyBpcyBkZWZpbmVkIGluIHRoZSBuZXR3b3JraW5nIGRyaXZlciBzZWN0aW9uLiBJJ2xsIG5lZWQgdG8gbG9jYXRlIGBkcml2ZXJzL25ldC9LY29uZmlnYCBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgYmFzZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG5ldHdvcmsgZGV2aWNlcyB3aXRoaW4gdGhlIGN1cnJlbnQgYnVpbGQgZW52aXJvbm1lbnQuIEZyb20gdGhlcmUsIEkgY2FuIGludmVzdGlnYXRlIHRoZSBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgb3Igc3ViLWNvbmZpZ3VyYXRpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYSB0b3AtbGV2ZWwgc3ltYm9sIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBuZXR3b3JrIGRldmljZSBzdXBwb3J0LCBhbmQgcG9zc2libHkgc29tZSBnZW5lcmFsIHNldHRpbmdzIHJlbGF0ZWQgdG8gdmFyaW91cyBuZXR3b3JrIGRldmljZSB0eXBlcy4gVGhpcyBpcyB0aGUgY29ycmVjdCBzdGFydGluZyBwb2ludCB0byB0cmFjZSB0aGUgbmV0d29ya2luZyBkZXZpY2UgY29uZmlndXJhdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMyNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6NDEuMzA5NzczNjE2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBORVRERVZJQ0VTXFxuICAgNzpcXHRcXHRkZWZhdWx0IHkgaWYgVU1MXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIE5FVFxcbiAgIDk6XFx0XFx0Ym9vbCBcXFwiTmV0d29yayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgWW91IGNhbiBzYXkgTiBoZXJlIGlmIHlvdSBkb24ndCBpbnRlbmQgdG8gY29ubmVjdCB5b3VyIExpbnV4IGJveCB0b1xcbiAgMTI6XFx0XFx0ICBhbnkgb3RoZXIgY29tcHV0ZXIgYXQgYWxsLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIFlvdSdsbCBoYXZlIHRvIHNheSBZIGlmIHlvdXIgY29tcHV0ZXIgY29udGFpbnMgYSBuZXR3b3JrIGNhcmQgdGhhdFxcbiAgMTU6XFx0XFx0ICB5b3Ugd2FudCB0byB1c2UgdW5kZXIgTGludXguIElmIHlvdSBhcmUgZ29pbmcgdG8gcnVuIFNMSVAgb3IgUFBQIG92ZXJcXG4gIDE2OlxcdFxcdCAgdGVsZXBob25lIGxpbmUgb3IgbnVsbCBtb2RlbSBjYWJsZSB5b3UgbmVlZCBzYXkgWSBoZXJlLiBDb25uZWN0aW5nXFxuICAxNzpcXHRcXHQgIHR3byBtYWNoaW5lcyB3aXRoIHBhcmFsbGVsIHBvcnRzIHVzaW5nIFBMSVAgbmVlZHMgdGhpcywgYXMgd2VsbCBhc1xcbiAgMTg6XFx0XFx0ICBBWC4yNS9LSVNTIGZvciBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciBhbWF0ZXVyIHJhZGlvIGxpbmtzLlxcbiAgMTk6XFx0XFxuICAyMDpcXHRcXHQgIFNlZSBhbHNvIFxcXCJUaGUgTGludXggTmV0d29yayBBZG1pbmlzdHJhdG9yJ3MgR3VpZGVcXFwiIGJ5IE9sYWYgS2lyY2ggYW5kXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjQxLjMwOTg4OTk0NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjA2OTI2NzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQUFAgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gYENPTkZJR19QUFBgLCBhbG9uZyB3aXRoIGBDT05GSUdfTkVUREVWSUNFU2AgYW5kIGBDT05GSUdfTkVUYCwgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBoZXJlLiBSZXR1cm5pbmcgYFtcIlBQUFwiXWAgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gdGhpcyBtb2R1bGUuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuXG5cbkxldCdzIGRpdmUgZGVlcGVyIGFuZCByZXZpZXcgdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmc6IGBwcHBfaW9jdGxgLCBgcHBwX3NldHVwYCwgYHBwcF9wcmVwYXJlX3R4X3NrYmAsIGFuZCBgcGFkX2NvbXByZXNzX3NrYmAuIFRob3NlIGFyZSB0aGUgbWFpbiBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IGFsbCB0aGUgc3ltYm9scyBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLiBJdCdzOiBgcHBwX2lvY3RsYCwgYHBwcF9zZXR1cGAsIGBwYWRfY29tcHJlc3Nfc2tiYCAod2hpY2gsIEkgc2VlLCBpcyBhIHN0YXRpYyBpbmxpbmUsIGdvb2QgdG8ga25vdyksIGFuZCBmaW5hbGx5LCBgcHBwX3ByZXBhcmVfdHhfc2tiYCAod2hpY2gsIG9mIGNvdXJzZSwgY2FsbHMgYHBhZF9jb21wcmVzc19za2JgKS5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBjYWxsZXJzIG9yIGZ1bmN0aW9ucyBJJ20gbWlzc2luZz8gSSBzaG91bGQgcmVhbGx5IGNoZWNrIGlmIGBQUFBfTUlOX01SVWAgb3IgYFBQUF9NSU5fTVRVYCBhcmUgdXNlZCBhbnl3aGVyZSBlbHNlLiBJIG5lZWQgdG8gYmUgdGhvcm91Z2guXG5cbkNoZWNraW5nIHRoZSBwYXRjaCBpdHNlbGYsIEkgc2VlOiBgUFBQX01JTl9NVFVgIGlzIHVzZWQgaW4gYHBwcF9zZXR1cGAuIEFuZCBgUFBQX01JTl9NUlVgIGlzIHVzZWQgaW4gYHBwcF9pb2N0bGAuIEFoLCBhbmQgYGRldi1cdTAwM2VtdHVgIGlzIGJlaW5nIHJlYWQgc2FmZWx5IHVzaW5nIGBSRUFEX09OQ0VgIHdpdGhpbiBgcGFkX2NvbXByZXNzX3NrYmAuIEV4Y2VsbGVudCwgZ29vZCBwcmFjdGljZS5cblxuQWxyaWdodCwgc2FuaXR5IGNoZWNrIHRpbWUuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBtaW5pbXVtIE1SVSBhbmQgTVRVIGJvdW5kYXJpZXMgZm9yIFBQUCBkZXZpY2VzLiBXZSdyZSB2YWxpZGF0aW5nIHRoZSBNUlUgaW4gYHBwcF9pb2N0bChQUFBJT0NTTVJVKWAsIHNldHRpbmcgYGRldi1cdTAwM2VtaW5fbXR1YCBpbiBgcHBwX3NldHVwKClgLCBhbmQgd2UncmUgc2FmZWx5IHJlYWRpbmcgYGRldi1cdTAwM2VtdHVgIHVzaW5nIGBSRUFEX09OQ0VgIGluIGBwYWRfY29tcHJlc3Nfc2tiKClgLiBUaGUgY29kZSBwYXRoIGlzIGNvbXBsZXRlbHkgcmVhY2hhYmxlIHZpYSBQUFAgZGV2aWNlIGlvY3RscyBhbmQgcGFja2V0IHRyYW5zbWlzc2lvbi4gU28sIHRoaXMgd2FycmFudHMgZnV6emluZyB0byB0ZXN0IGlucHV0IHZhbGlkYXRpb24gYW5kIGNoZWNrIGZvciBhbnkgcmVncmVzc2lvbnMgaW4gTVRVL01SVSBoYW5kbGluZyBvciBza2IgYWxsb2NhdGlvbi5cblxuWWVwLCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIEknbSBzYXRpc2ZpZWQuIFRpbWUgdG8gY2FsbCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjYsIk91dHB1dFRva2VucyI6MTY1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6NDYuOTE2ODIwMDIzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NzQ1OTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWRfY29tcHJlc3Nfc2tiXCIsXG4gICAgXCJwcHBfaW9jdGxcIixcbiAgICBcInBwcF9wcmVwYXJlX3R4X3NrYlwiLFxuICAgIFwicHBwX3NldHVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIFBQUCBuZXR3b3JrIGRldmljZSBjb2RlIGluIGRyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jLiBJdCBlbmZvcmNlcyBtaW5pbXVtIGFuZCBtYXhpbXVtIGJvdW5kcyBjaGVja3Mgb24gTVJVIGluIHBwcF9pb2N0bCAoUFBQSU9DU01SVSksIHNldHMgZGV2LVxcdTAwM2VtaW5fbXR1IGluIHBwcF9zZXR1cCwgYW5kIHVzZXMgUkVBRF9PTkNFIGZvciBNVFUgcmVhZGluZyBpbiBwYWRfY29tcHJlc3Nfc2tiLiBUaGVzZSBwYXRocyBhcmUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHRvIGRldGVjdCByZWdyZXNzaW9ucyBvciBlZGdlIGNhc2VzIGluIFBQUCBNVFUvTVJVIG5lZ290aWF0aW9uIGFuZCBwYWNrZXQgaGFuZGxpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFkX2NvbXByZXNzX3NrYlwiLFxuICAgIFwicHBwX2lvY3RsXCIsXG4gICAgXCJwcHBfcHJlcGFyZV90eF9za2JcIixcbiAgICBcInBwcF9zZXR1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBQUFAgbmV0d29yayBkZXZpY2UgY29kZSBpbiBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuYy4gSXQgZW5mb3JjZXMgbWluaW11bSBhbmQgbWF4aW11bSBib3VuZHMgY2hlY2tzIG9uIE1SVSBpbiBwcHBfaW9jdGwgKFBQUElPQ1NNUlUpLCBzZXRzIGRldi1cXHUwMDNlbWluX210dSBpbiBwcHBfc2V0dXAsIGFuZCB1c2VzIFJFQURfT05DRSBmb3IgTVRVIHJlYWRpbmcgaW4gcGFkX2NvbXByZXNzX3NrYi4gVGhlc2UgcGF0aHMgYXJlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZyB0byBkZXRlY3QgcmVncmVzc2lvbnMgb3IgZWRnZSBjYXNlcyBpbiBQUFAgTVRVL01SVSBuZWdvdGlhdGlvbiBhbmQgcGFja2V0IGhhbmRsaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwOToxOTo0Ny4wNTM1NzQwNjFaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzUwMjk1MTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MTk6NDcuMDU0MjQ2NTYxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTYzNDk2MTY1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbWluaW11bSBib3VuZHMgY2hlY2tzIGZvciBQUFAgTVJVICh2aWEgUFBQSU9DU01SVSkgYW5kIE1UVSAoc2V0dGluZyBkZXYtXFx1MDAzZW1pbl9tdHUpLCBhdm9pZGluZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgb3IgZXhjZXNzaXZlbHkgc21hbGwgTVRVIHZhbHVlcy4gSXQgYWxzbyBzbmFwc2hvdHMgZGV2LVxcdTAwM2VtdHUgdXNpbmcgUkVBRF9PTkNFIGluIHBhZF9jb21wcmVzc19za2IoKSB0byBhdm9pZCBpbmNvbnNpc3RlbnQgTVRVIHJlYWRzIGR1cmluZyBidWZmZXIgYWxsb2NhdGlvbiBhbmQgY29tcHJlc3Npb24gc2l6aW5nLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZywgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LWRlcGVuZGVudCBjb250cm9sIGZsb3cuIEFueSBtZW1vcnkgY29ycnVwdGlvbiBvciBidWZmZXIgc2l6aW5nIGlzc3VlcyByZWxhdGVkIHRvIE1UVS9NUlUgY2FsY3VsYXRpb25zIGFyZSBvdXQtb2YtYm91bmRzIG9yIGRhdGEgcmFjZSBpc3N1ZXMgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgS0NTQU4uIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI0MjQ1ZGJlOTljMmMwNzRiZTdlMjI5ZWJmMTA2YjdjNzUxNjg0MmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDA5OjE5OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuaW5kZXggMWE2MTBhMTg4OTNiYS4uNDAyMjExNzY4Y2Y1ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY1xuQEAgLTcyLDYgKzcyLDggQEBcbiBcbiAjZGVmaW5lIFBQUF9QUk9UT19MRU5cdDJcbiAjZGVmaW5lIFBQUF9MQ1BfSERSTEVOXHQ0XG4rI2RlZmluZSBQUFBfTUlOX01UVVx0MTI4XG4rI2RlZmluZSBQUFBfTUlOX01SVVx0MTI4XG4gXG4gLyogVGhlIGZpbHRlciBpbnN0cnVjdGlvbnMgZ2VuZXJhdGVkIGJ5IGxpYnBjYXAgYXJlIGNvbnN0cnVjdGVkXG4gICogYXNzdW1pbmcgYSBmb3VyLWJ5dGUgUFBQIGhlYWRlciBvbiBlYWNoIHBhY2tldCwgd2hlcmUgdGhlIGxhc3RcbkBAIC04MDgsNiArODEwLDEwIEBAIHN0YXRpYyBsb25nIHBwcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRjYXNlIFBQUElPQ1NNUlU6XG4gXHRcdGlmIChnZXRfdXNlcih2YWwsIHApKVxuIFx0XHRcdGJyZWFrO1xuK1x0XHRpZiAodmFsIFx1MDAzYyBQUFBfTUlOX01SVSB8fCB2YWwgXHUwMDNlIElOVF9NQVggLSBQUFBfSERSTEVOIC0gMSkge1xuK1x0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbiBcdFx0cHBwX3JlY3ZfbG9jayhwcHApO1xuIFx0XHRwcHAtXHUwMDNlbXJ1ID0gdmFsO1xuIFx0XHRwcHBfcmVjdl91bmxvY2socHBwKTtcbkBAIC0xNjI4LDYgKzE2MzQsNyBAQCBzdGF0aWMgdm9pZCBwcHBfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSBQUFBfSERSTEVOO1xuIFx0ZGV2LVx1MDAzZW10dSA9IFBQUF9NUlU7XG4rXHRkZXYtXHUwMDNlbWluX210dSA9IFBQUF9NSU5fTVRVO1xuIFx0ZGV2LVx1MDAzZWFkZHJfbGVuID0gMDtcbiBcdGRldi1cdTAwM2V0eF9xdWV1ZV9sZW4gPSAzO1xuIFx0ZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfUFBQO1xuQEAgLTE3MTksMTAgKzE3MjYsMTEgQEAgcGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9mcm9tX3ByaXYocHBwKTtcbiBcdHN0cnVjdCBza19idWZmICpuZXdfc2tiO1xuK1x0aW50IG10dSA9IFJFQURfT05DRShkZXYtXHUwMDNlbXR1KTtcbiBcdGludCBsZW47XG4tXHRpbnQgbmV3X3NrYl9zaXplID0gZGV2LVx1MDAzZW10dSArXG4rXHRpbnQgbmV3X3NrYl9zaXplID0gbXR1ICtcbiBcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgKyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuO1xuLVx0aW50IGNvbXByZXNzb3Jfc2tiX3NpemUgPSBkZXYtXHUwMDNlbXR1ICtcbitcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gbXR1ICtcbiBcdFx0cHBwLVx1MDAzZXhjb21wLVx1MDAzZWNvbXBfZXh0cmEgKyBQUFBfSERSTEVOO1xuIFxuIFx0aWYgKHNrYl9saW5lYXJpemUoc2tiKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjQ3LjA1NDI0OTI5MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTEwMzIzNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUFBQIEdlbmVyaWMgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AuIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHNldHRpbmcgYSBtaW5pbXVtIE1UVSBhbmQgTVJVIGZvciBQUFAgaW50ZXJmYWNlcywgYWxvbmcgd2l0aCBzb21lIHJlbGF0ZWQgcmVmYWN0b3JpbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodHMgYXJlIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgZGVmaW5pdGVseSByZWxldmFudCB0byBzZWN1cml0eSwgZW5zdXJpbmcgYW4gYWJzb2x1dGUgbWluaW11bSBmcmFtZSBzaXplIGZvciBjb3JyZWN0IHBhY2tldCBwcm9jZXNzaW5nLlxuXG5TcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2U6XG5cbjEuICBXZSd2ZSBnb3QgbmV3IGAjZGVmaW5lYCBzdGF0ZW1lbnRzIGZvciBgUFBQX01JTl9NVFVgIGFuZCBgUFBQX01JTl9NUlVgLCBib3RoIHNldCB0byAxMjguIFRoYXQncyBhIHJlYXNvbmFibGUgbWluaW11bSwgZ2l2ZW4gdGhlIFBQUCBoZWFkZXIgb3ZlcmhlYWQgYW5kIGxpa2VseSBtaW5pbXVtIGRhdGEgcGF5bG9hZCBzaXplcyB3ZSdkIGV4cGVjdCBpbiBtb2Rlcm4gbmV0d29ya3MuXG5cbjIuICBUaGUgYHBwcF9pb2N0bGAgZnVuY3Rpb24gbm93IGhhcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gdGhlIGBQUFBJT0NTTVJVYCBjYXNlLiBUaGlzIGlzIGNydWNpYWw7IGl0J3MgcHJldmVudGluZyB0aGUgTVJVIGZyb20gYmVpbmcgc2V0IHRvIGFuIGFic3VyZGx5IGxvdyB2YWx1ZSwgb3IgcG90ZW50aWFsbHkgYSB2YWx1ZSB0aGF0IGNvdWxkIGxlYWQgdG8gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMsIGEgY29tbW9uIHNvdXJjZSBvZiB2dWxuZXJhYmlsaXR5LiBUaGUgY2hlY2sgYHZhbCBcdTAwM2MgUFBQX01JTl9NUlUgfHwgdmFsIFx1MDAzZSBJTlRfTUFYIC0gUFBQX0hEUkxFTiAtIDFgIHNlZW1zIHByZXR0eSBzb2xpZDsgaXQgY292ZXJzIHRoZSBtaW5pbXVtIE1SVSBhbmQgYWNjb3VudHMgZm9yIHRoZSBoZWFkZXIgbGVuZ3RoLlxuXG4zLiAgYHBwcF9zZXR1cGAgaXMgdXBkYXRpbmcgdGhlIG5ldHdvcmsgZGV2aWNlJ3MgYG1pbl9tdHVgIHRvIHRoZSBkZWZpbmVkIGBQUFBfTUlOX01UVWAgdmFsdWUsIGFsc28gMTI4LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgaW50ZXJmYWNlIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQgd2l0aCB0aGUgbWluaW11bSBNVFUgYXQgaW5pdGlhbGl6YXRpb24uXG5cbjQuICBGaW5hbGx5LCBgcGFkX2NvbXByZXNzX3NrYmAgaXMgd2hlcmUgdGhlIGRldmVsb3BlciBhZGRyZXNzZWQgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgYGRldi1cdTAwM2VtdHVgIHZhbHVlLiBJbnN0ZWFkIG9mIHJlYWRpbmcgYGRldi1cdTAwM2VtdHVgIGRpcmVjdGx5LCBpdCdzIG5vdyB1c2luZyBgUkVBRF9PTkNFKGRldi1cdTAwM2VtdHUpYCBhbmQgc3RvcmluZyBpdCBpbiBhIGxvY2FsIGBtdHVgIHZhcmlhYmxlLiBUaGlzIGF2b2lkcyBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgb2NjdXIgaWYgdGhlIE1UVSBpcyBjaGFuZ2VkIGNvbmN1cnJlbnRseS4gU21hcnQgbW92ZTsgdXNpbmcgYFJFQURfT05DRWAgaXMgdGhlIHJpZ2h0IHdheSB0byBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgYmVpbmcgcmVhZCBpcyBub3Qgb3B0aW1pemVkIG91dCBieSB0aGUgY29tcGlsZXIuXG5cbkknbGwgd2FudCB0byBpbnNwZWN0IGBkcml2ZXJzL25ldC9wcHAvcHBwX2dlbmVyaWMuY2AgaXRzZWxmIG5vdy4gSSdsbCBwcm9iYWJseSB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZXNlIGtleSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtaW5pbXVtIE1UVS9NUlUgb24gb3ZlcmFsbCBQUFAgcGVyZm9ybWFuY2UsIGFuZCBob3cgaXQgaW1wYWN0cyBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjay4gSSdtIGFsc28gY3VyaW91cyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBwbGFjZXMgd2hlcmUgcmFjZSBjb25kaXRpb25zIG9uIGBkZXYtXHUwMDNlbXR1YCBtaWdodCBiZSBwcmVzZW50LiBUaGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYSBkZWVwZXIgZGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjUzLjk2NDU3NTQ2NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjc4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODAwOlxcdFxcbiA4MDE6XFx0XFx0aWYgKHBmLVxcdTAwM2VraW5kICE9IElOVEVSRkFDRSkge1xcbiA4MDI6XFx0XFx0XFx0LyogY2FuJ3QgaGFwcGVuICovXFxuIDgwMzpcXHRcXHRcXHRwcl9lcnIoXFxcIlBQUDogbm90IGludGVyZmFjZSBvciBjaGFubmVsPz9cXFxcblxcXCIpO1xcbiA4MDQ6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gODA1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA4MDY6XFx0XFx0fVxcbiA4MDc6XFx0XFxuIDgwODpcXHRcXHRwcHAgPSBQRl9UT19QUFAocGYpO1xcbiA4MDk6XFx0XFx0c3dpdGNoIChjbWQpIHtcXG4gODEwOlxcdFxcdGNhc2UgUFBQSU9DU01SVTpcXG4gODExOlxcdFxcdFxcdGlmIChnZXRfdXNlcih2YWwsIHApKVxcbiA4MTI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgxMzpcXHRcXHRcXHRpZiAodmFsIFxcdTAwM2MgUFBQX01JTl9NUlUgfHwgdmFsIFxcdTAwM2UgSU5UX01BWCAtIFBQUF9IRFJMRU4gLSAxKSB7XFxuIDgxNDpcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiA4MTU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgxNjpcXHRcXHRcXHR9XFxuIDgxNzpcXHRcXHRcXHRwcHBfcmVjdl9sb2NrKHBwcCk7XFxuIDgxODpcXHRcXHRcXHRwcHAtXFx1MDAzZW1ydSA9IHZhbDtcXG4gODE5OlxcdFxcdFxcdHBwcF9yZWN2X3VubG9jayhwcHApO1xcbiA4MjA6XFx0XFx0XFx0ZXJyID0gMDtcXG4gODIxOlxcdFxcdFxcdGJyZWFrO1xcbiA4MjI6XFx0XFxuIDgyMzpcXHRcXHRjYXNlIFBQUElPQ1NGTEFHUzpcXG4gODI0OlxcdFxcdFxcdGlmIChnZXRfdXNlcih2YWwsIHApKVxcbiA4MjU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDgyNjpcXHRcXHRcXHRwcHBfbG9jayhwcHApO1xcbiA4Mjc6XFx0XFx0XFx0Y2ZsYWdzID0gcHBwLVxcdTAwM2VmbGFncyBcXHUwMDI2IH52YWw7XFxuIDgyODpcXHQjaWZkZWYgQ09ORklHX1BQUF9NVUxUSUxJTktcXG4gODI5OlxcdFxcdFxcdGlmICghKHBwcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19NVUxUSUxJTkspIFxcdTAwMjZcXHUwMDI2ICh2YWwgXFx1MDAyNiBTQ19NVUxUSUxJTkspKVxcbiA4MzA6XFx0XFx0XFx0XFx0cHBwLVxcdTAwM2VuZXh0c2VxID0gMDtcXG4gODMxOlxcdCNlbmRpZlxcbiA4MzI6XFx0XFx0XFx0cHBwLVxcdTAwM2VmbGFncyA9IHZhbCBcXHUwMDI2IFNDX0ZMQUdfQklUUztcXG4gODMzOlxcdFxcdFxcdHBwcF91bmxvY2socHBwKTtcXG4gODM0OlxcdFxcdFxcdGlmIChjZmxhZ3MgXFx1MDAyNiBTQ19DQ1BfT1BFTilcXG4gODM1OlxcdFxcdFxcdFxcdHBwcF9jY3BfY2xvc2VkKHBwcCk7XFxuIDgzNjpcXHRcXHRcXHRlcnIgPSAwO1xcbiA4Mzc6XFx0XFx0XFx0YnJlYWs7XFxuIDgzODpcXHRcXG4gODM5OlxcdFxcdGNhc2UgUFBQSU9DR0ZMQUdTOlxcbiA4NDA6XFx0XFx0XFx0cHBwX2xvY2socHBwKTtcXG4gODQxOlxcdFxcdFxcdHZhbCA9IHBwcC1cXHUwMDNlZmxhZ3MgfCBwcHAtXFx1MDAzZXhzdGF0ZSB8IHBwcC1cXHUwMDNlcnN0YXRlO1xcbiA4NDI6XFx0XFx0XFx0cHBwX3VubG9jayhwcHApO1xcbiA4NDM6XFx0XFx0XFx0aWYgKHB1dF91c2VyKHZhbCwgcCkpXFxuIDg0NDpcXHRcXHRcXHRcXHRicmVhaztcXG4gODQ1OlxcdFxcdFxcdGVyciA9IDA7XFxuIDg0NjpcXHRcXHRcXHRicmVhaztcXG4gODQ3OlxcdFxcbiA4NDg6XFx0XFx0Y2FzZSBQUFBJT0NTQ09NUFJFU1M6XFxuIDg0OTpcXHRcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjUzLjk2NDkwNjkwNloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzAzOTYzODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgcGFkX2NvbXByZXNzX3NrYmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBgcGFkX2NvbXByZXNzX3NrYmAuIEJhc2VkIG9uIHRoZSBjb250ZXh0IGFuZCBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIHByb2JhYmx5IHJlbGF0ZXMgdG8gbmV0d29yayBidWZmZXIgKFNLQikgcGFkZGluZyBhbmQgY29tcHJlc3Npb24sIGxpa2VseSB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIExpbmUgMTcxNSBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6ZSB0aGUgZnVuY3Rpb24uIEknbGwgZm9jdXMgb24gd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhhdCBsaW5lIOKAkyBkYXRhIG1hbmlwdWxhdGlvbiwgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uLCBlcnJvciBoYW5kbGluZywgZXRjLiBXaGF0IHNwZWNpZmljYWxseSBpcyBiZWluZyBkb25lIHRvIGNvbXByZXNzIHRoZSBTS0IgZGF0YT8gQW55IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgaW5lZmZpY2llbmNpZXMgaW4gdGhlIHBhZGRpbmcgcHJvY2Vzcz8gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIHVzZWQgYW5kIHBvdGVudGlhbCBnb3RjaGFzIHJlbGF0ZWQgdG8gaXRzIGltcGxlbWVudGF0aW9uLCBzbyBJIGNhbiBnaXZlIGl0IGEgcmVhbGx5IGNsb3NlIGxvb2suIExldOKAmXMgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwOTYsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjU2LjY2ODg3MzEyNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTAxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcxNSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcxNTpcXHRlcnI6XFxuMTcxNjpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4xNzE3OlxcdFxcbjE3MTg6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuMTcxOTpcXHRcXG4xNzIwOlxcdFxcdGlmIChuZXRfcmF0ZWxpbWl0KCkpXFxuMTcyMTpcXHRcXHRcXHRuZXRkZXZfZXJyKG5ldGRldl9mcm9tX3ByaXYocHBwKSwgXFxcInJlY3Vyc2lvbiBkZXRlY3RlZFxcXFxuXFxcIik7XFxuMTcyMjpcXHR9XFxuMTcyMzpcXHRcXG4xNzI0OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKlxcbjE3MjU6XFx0cGFkX2NvbXByZXNzX3NrYihzdHJ1Y3QgcHBwICpwcHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuMTcyNjpcXHR7XFxuMTcyNzpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihwcHApO1xcbjE3Mjg6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKm5ld19za2I7XFxuMTcyOTpcXHRcXHRpbnQgbXR1ID0gUkVBRF9PTkNFKGRldi1cXHUwMDNlbXR1KTtcXG4xNzMwOlxcdFxcdGludCBsZW47XFxuMTczMTpcXHRcXHRpbnQgbmV3X3NrYl9zaXplID0gbXR1ICtcXG4xNzMyOlxcdFxcdFxcdHBwcC1cXHUwMDNleGNvbXAtXFx1MDAzZWNvbXBfZXh0cmEgKyBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbjtcXG4xNzMzOlxcdFxcdGludCBjb21wcmVzc29yX3NrYl9zaXplID0gbXR1ICtcXG4xNzM0OlxcdFxcdFxcdHBwcC1cXHUwMDNleGNvbXAtXFx1MDAzZWNvbXBfZXh0cmEgKyBQUFBfSERSTEVOO1xcbjE3MzU6XFx0XFxuMTczNjpcXHRcXHRpZiAoc2tiX2xpbmVhcml6ZShza2IpKVxcbjE3Mzc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTczODpcXHRcXG4xNzM5OlxcdFxcdG5ld19za2IgPSBhbGxvY19za2IobmV3X3NrYl9zaXplLCBHRlBfQVRPTUlDKTtcXG4xNzQwOlxcdFxcdGlmICghbmV3X3NrYikge1xcbjE3NDE6XFx0XFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4xNzQyOlxcdFxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwiUFBQOiBubyBtZW1vcnkgKGNvbXAgcGt0KVxcXFxuXFxcIik7XFxuMTc0MzpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNzQ0OlxcdFxcdH1cXG4xNzQ1OlxcdFxcdGlmIChkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiBcXHUwMDNlIFBQUF9IRFJMRU4pXFxuMTc0NjpcXHRcXHRcXHRza2JfcmVzZXJ2ZShuZXdfc2tiLCBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiAtIFBQUF9IRFJMRU4pO1xcbjE3NDc6XFx0XFxuMTc0ODpcXHRcXHQvKiBjb21wcmVzc29yIHN0aWxsIGV4cGVjdHMgQS9DIGJ5dGVzIGluIGhkciAqL1xcbjE3NDk6XFx0XFx0bGVuID0gcHBwLVxcdTAwM2V4Y29tcC1cXHUwMDNlY29tcHJlc3MocHBwLVxcdTAwM2V4Y19zdGF0ZSwgc2tiLVxcdTAwM2VkYXRhIC0gMixcXG4xNzUwOlxcdFxcdFxcdFxcdFxcdCAgIG5ld19za2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuICsgMixcXG4xNzUxOlxcdFxcdFxcdFxcdFxcdCAgIGNvbXByZXNzb3Jfc2tiX3NpemUpO1xcbjE3NTI6XFx0XFx0aWYgKGxlbiBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgKHBwcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DQ1BfVVApKSB7XFxuMTc1MzpcXHRcXHRcXHRjb25zdW1lX3NrYihza2IpO1xcbjE3NTQ6XFx0XFx0XFx0c2tiID0gbmV3X3NrYjtcXG4xNzU1OlxcdFxcdFxcdHNrYl9wdXQoc2tiLCBsZW4pO1xcbjE3NTY6XFx0XFx0XFx0c2tiX3B1bGwoc2tiLCAyKTtcXHQvKiBwdWxsIG9mZiBBL0MgYnl0ZXMgKi9cXG4xNzU3OlxcdFxcdH0gZWxzZSBpZiAobGVuID09IDApIHtcXG4xNzU4OlxcdFxcdFxcdC8qIGRpZG4ndCBjb21wcmVzcywgb3IgQ0NQIG5vdCB1cCB5ZXQgKi9cXG4xNzU5OlxcdFxcdFxcdGNvbnN1bWVfc2tiKG5ld19za2IpO1xcbjE3NjA6XFx0XFx0XFx0bmV3X3NrYiA9IHNrYjtcXG4xNzYxOlxcdFxcdH0gZWxzZSB7XFxuMTc2MjpcXHRcXHRcXHQvKlxcbjE3NjM6XFx0XFx0XFx0ICogKGxlbiBcXHUwMDNjIDApXFxuMTc2NDpcXHRcXHRcXHQgKiBNUFBFIHJlcXVpcmVzIHRoYXQgd2UgZG8gbm90IHNlbmQgdW5lbmNyeXB0ZWRcXG4xNzY1OlxcdFxcdFxcdCAqIGZyYW1lcy4gIFRoZSBjb21wcmVzc29yIHdpbGwgcmV0dXJuIC0xIGlmIHdlXFxuMTc2NjpcXHRcXHRcXHQgKiBzaG91bGQgZHJvcCB0aGUgZnJhbWUuICBXZSBjYW5ub3Qgc2ltcGx5IHRlc3RcXG4xNzY3OlxcdFxcdFxcdCAqIHRoZSBjb21wcmVzc19wcm90byBiZWNhdXNlIE1QUEUgYW5kIE1QUEMgc2hhcmVcXG4xNzY4OlxcdFxcdFxcdCAqIHRoZSBzYW1lIG51bWJlci5cXG4xNzY5OlxcdFxcdFxcdCAqL1xcbjE3NzA6XFx0XFx0XFx0aWYgKG5ldF9yYXRlbGltaXQoKSlcXG4xNzcxOlxcdFxcdFxcdFxcdG5ldGRldl9lcnIoZGV2LCBcXFwicHBwOiBjb21wcmVzc29yIGRyb3BwZWQgcGt0XFxcXG5cXFwiKTtcXG4xNzcyOlxcdFxcdFxcdGNvbnN1bWVfc2tiKG5ld19za2IpO1xcbjE3NzM6XFx0XFx0XFx0bmV3X3NrYiA9IE5VTEw7XFxuMTc3NDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA5OjE5OjU2LjY2OTE4NjIwNVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NzM0NjQ1NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIENvbmNlcm5zIEhlcmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCdzIHRoZSBjb3JlIGlzc3VlIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZz8gQmFzZWQgb24gdGhlIGRldGFpbHMsIEknbSBsZWFuaW5nIHRvd2FyZHMgZGF0YSByYWNlcywgaW50ZWdlciBvdmVyZmxvd3MsIG9yIHBvdGVudGlhbCBNVFUgYm91bmRhcnkgcHJvYmxlbXMuXG5cbk5vdywgbGV0J3MgZ28gc3RlcC1ieS1zdGVwIHRocm91Z2ggdGhlIGxvZ2ljOlxuXG4xLiAgVGhlIGBtaW5fbXR1ID0gUFBQX01JTl9NVFVgIGFzc2lnbm1lbnQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBJdCdzIHB1dHRpbmcgYSBmbG9vciBvbiB0aGUgTVRVLCBlbnN1cmluZyBpdCdzIG5vdCBzZXQgdG8gcmlkaWN1bG91c2x5IGxvdyB2YWx1ZXMsIHdoaWNoIHdvdWxkIGJlIGVpdGhlciB6ZXJvIG9yIGxlc3MgdGhhbiAxMjggdmlhIHRoZSBzdGFuZGFyZCBuZXRkZXZpY2UgTVRVIGludGVyZmFjZS4gVGhpcyBpcyBnb29kIHByYWN0aWNlLlxuMi4gIFRoZSBgUFBQSU9DU01SVWAgYm91bmRzIGNoZWNrIGlzIGNyaXRpY2FsLiBJdCdzIHByZXZlbnRpbmcgdGhlIGBwcHAtXHUwMDNlbXJ1YCBmcm9tIGJlaW5nIHNldCB0byBlaXRoZXIgdGlueSB2YWx1ZXMgd2hpY2ggY2FuIGNhdXNlIGludGVnZXIgb3ZlcmZsb3csIG9yIG1hc3NpdmUgdmFsdWVzLCBsZWFkaW5nIHRvIG1lbW9yeSBwcm9ibGVtcy4gVGhlIHJhbmdlIGNoZWNrIHVzaW5nIGBQUFBfTUlOX01SVWAgYW5kIGBJTlRfTUFYIC0gUFBQX0hEUkxFTiAtIDFgIGNvdmVycyBhIGxvdCBvZiB0aGUgcG90ZW50aWFsIGZhaWx1cmUgY2FzZXMuXG4zLiAgVGhlIGBSRUFEX09OQ0UoZGV2LVx1MDAzZW10dSlgIHNuYXBzaG90IGluIGBwYWRfY29tcHJlc3Nfc2tiYCBpcyB3aGF0IHJlYWxseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gVGhlIHBvdGVudGlhbCBkYXRhIHJhY2Ugd2hlcmUgYGRldi1cdTAwM2VtdHVgIGNvdWxkIGJlIHJlYWQgY29uY3VycmVudGx5IGFuZCBjaGFuZ2UgbWlkLWNvbXB1dGF0aW9uIGlzIG5vdyBiZWluZyBhdm9pZGVkLiBUaGlzIHByZXZlbnRzIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIGBuZXdfc2tiX3NpemVgIGFuZCBgY29tcHJlc3Nvcl9za2Jfc2l6ZWAsIHdoaWNoIGNvdWxkIGxlYWQgdG8gZGF0YSBjb3JydXB0aW9uIG9yIGNyYXNoZXMsIG9yIHRyaWdnZXIgS0NTQU4uXG5cblNvLCB0aGUgbmV4dCBxdWVzdGlvbjogZG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnk/IExldCdzIGNoZWNrOlxuXG4xLiAgQXJlIHRoZXJlIGFueSBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSB3aXRob3V0IHByb3BlciBpbml0aWFsaXphdGlvbj8gTm8sIHRoYXQncyBub3QgYSBmYWN0b3IgaGVyZS5cbjIuICBJcyB0aGVyZSBhbnkgYnJhbmNoaW5nIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLlxuMy4gIEFyZSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBiZWluZyBhbGxvY2F0ZWQgYW5kIHRoZW4gcmVhZD8gTm8uXG40LiAgRmluYWxseSwgZG9lcyB0aGlzIHBhdGNoIG1vZGlmeSBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCAqYWxsb3dzKiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBBYnNvbHV0ZWx5IG5vdC4gSW4gZmFjdCwgaXQncyBtYWtpbmcgdGhpbmdzICptb3JlKiByb2J1c3QgYnkgcmVzdHJpY3RpbmcgTVRVL01SVSB0byBhIGRlZmluZWQgYW5kIHZhbGlkIHJhbmdlIChhdCBsZWFzdCAxMjgpIGFuZCBwcmV2ZW50aW5nIHRob3NlIGludGVnZXIgb3ZlcmZsb3dzLCBvciBpbmNvbnNpc3RlbnQgc2l6ZSBjYWxjdWxhdGlvbnMgZHVyaW5nIHBhY2tldCBjb21wcmVzc2lvbi5cblxuR2l2ZW4gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGF0IHN0YW5kYXJkIEtBU0FOLCBLQ1NBTiwgYW5kIGdlbmVyYWwgdGVzdGluZyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgaXNzdWVzLlxuXG5JbiBzdW1tYXJ5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIHNldHRpbmcgc2FmZSBtaW5pbXVtIE1UVS9NUlUgYm91bmRzIGFuZCBpbnRyb2R1Y2VzIGFuIE1UVSBzbmFwc2hvdCB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGluY29uc2lzdGVuY2llcyBpbiBidWZmZXIgc2l6aW5nIGR1cmluZyBjb21wcmVzc2lvbi4gVGhpcyBpcyBhIHZlcnkgZ29vZCBjaGFuZ2UsIGFuZCB0aGVyZSBhcmUgbm8gYXBwYXJlbnQgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBpbnRyb2R1Y2VkLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJJ20gaGFwcHkgd2l0aCB0aGlzIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjgsIk91dHB1dFRva2VucyI6MTg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDk6MjA6MDMuNDAzODM3MDQyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG1pbmltdW0gYm91bmRzIGNoZWNrcyBmb3IgUFBQIE1SVSAodmlhIFBQUElPQ1NNUlUpIGFuZCBNVFUgKHNldHRpbmcgZGV2LVxcdTAwM2VtaW5fbXR1KSwgYXZvaWRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIGV4Y2Vzc2l2ZWx5IHNtYWxsIE1UVSB2YWx1ZXMuIEl0IGFsc28gc25hcHNob3RzIGRldi1cXHUwMDNlbXR1IHVzaW5nIFJFQURfT05DRSBpbiBwYWRfY29tcHJlc3Nfc2tiKCkgdG8gYXZvaWQgaW5jb25zaXN0ZW50IE1UVSByZWFkcyBkdXJpbmcgYnVmZmVyIGFsbG9jYXRpb24gYW5kIGNvbXByZXNzaW9uIHNpemluZy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeS1kZXBlbmRlbnQgY29udHJvbCBmbG93LiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgYnVmZmVyIHNpemluZyBpc3N1ZXMgcmVsYXRlZCB0byBNVFUvTVJVIGNhbGN1bGF0aW9ucyBhcmUgb3V0LW9mLWJvdW5kcyBvciBkYXRhIHJhY2UgaXNzdWVzIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG1pbmltdW0gYm91bmRzIGNoZWNrcyBmb3IgUFBQIE1SVSAodmlhIFBQUElPQ1NNUlUpIGFuZCBNVFUgKHNldHRpbmcgZGV2LVxcdTAwM2VtaW5fbXR1KSwgYXZvaWRpbmcgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3dzIG9yIGV4Y2Vzc2l2ZWx5IHNtYWxsIE1UVSB2YWx1ZXMuIEl0IGFsc28gc25hcHNob3RzIGRldi1cXHUwMDNlbXR1IHVzaW5nIFJFQURfT05DRSBpbiBwYWRfY29tcHJlc3Nfc2tiKCkgdG8gYXZvaWQgaW5jb25zaXN0ZW50IE1UVSByZWFkcyBkdXJpbmcgYnVmZmVyIGFsbG9jYXRpb24gYW5kIGNvbXByZXNzaW9uIHNpemluZy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgc3RydWN0dXJlIHBhZGRpbmcsIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeS1kZXBlbmRlbnQgY29udHJvbCBmbG93LiBBbnkgbWVtb3J5IGNvcnJ1cHRpb24gb3IgYnVmZmVyIHNpemluZyBpc3N1ZXMgcmVsYXRlZCB0byBNVFUvTVJVIGNhbGN1bGF0aW9ucyBhcmUgb3V0LW9mLWJvdW5kcyBvciBkYXRhIHJhY2UgaXNzdWVzIGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIEtDU0FOLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpqpx[1] Phase: Succeeded StartedAt: 2026-09-08 09:20:15 +0000 UTC FinishedAt: 2026-09-08 09:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 09:20:15 +0000 UTC FinishedAt: 2026-09-08 09:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2] Phase: Succeeded StartedAt: 2026-09-08 09:20:15 +0000 UTC FinishedAt: 2026-09-08 13:09:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 09:20:15 +0000 UTC FinishedAt: 2026-09-08 13:09:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 09:20:15 +0000 UTC FinishedAt: 2026-09-08 09:20:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 09:20:15 +0000 UTC FinishedAt: 2026-09-08 09:20:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowjpqpx/series-workflowjpqpx-convert-artifact-2853656122/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 09:20:25 +0000 UTC FinishedAt: 2026-09-08 09:40:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 09:20:25 +0000 UTC FinishedAt: 2026-09-08 09:40:29 +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:*3182fcd9-141a-4d7f-b04b-cc0652bb6fc1,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-workflowjpqpx/series-workflowjpqpx-convert-artifact-2853656122/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": "0e69e87c-3627-4b10-b7b2-20178098815d", "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-workflowjpqpx/series-workflowjpqpx-build-action-3830746088/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 09:20:25 +0000 UTC FinishedAt: 2026-09-08 09:40:19 +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:*3182fcd9-141a-4d7f-b04b-cc0652bb6fc1,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-workflowjpqpx/series-workflowjpqpx-convert-artifact-2853656122/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": "0e69e87c-3627-4b10-b7b2-20178098815d", "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-workflowjpqpx/series-workflowjpqpx-build-action-3830746088/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 09:40:29 +0000 UTC FinishedAt: 2026-09-08 09:40:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 09:40:29 +0000 UTC FinishedAt: 2026-09-08 09:40:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 09:40:29 +0000 UTC FinishedAt: 2026-09-08 09:40:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 09:40:29 +0000 UTC FinishedAt: 2026-09-08 09:40:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowjpqpx/series-workflowjpqpx-convert-artifact-1598153877/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 09:40:50 +0000 UTC FinishedAt: 2026-09-08 09:43:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 09:40:50 +0000 UTC FinishedAt: 2026-09-08 09:42:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0e69e87c-3627-4b10-b7b2-20178098815d,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-workflowjpqpx/series-workflowjpqpx-build-action-3830746088/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-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 09:43:04 +0000 UTC FinishedAt: 2026-09-08 09:43:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 09:43:04 +0000 UTC FinishedAt: 2026-09-08 09:43:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 09:43:04 +0000 UTC FinishedAt: 2026-09-08 10:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 09:43:04 +0000 UTC FinishedAt: 2026-09-08 10:04:06 +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:*3182fcd9-141a-4d7f-b04b-cc0652bb6fc1,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-workflowjpqpx/series-workflowjpqpx-convert-artifact-1598153877/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": "d600e34c-9888-42fc-bd3d-1fa9efaddcfd", "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-workflowjpqpx/series-workflowjpqpx-build-action-1712360225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 09:43:04 +0000 UTC FinishedAt: 2026-09-08 10:03:56 +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:*3182fcd9-141a-4d7f-b04b-cc0652bb6fc1,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-workflowjpqpx/series-workflowjpqpx-convert-artifact-1598153877/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": "d600e34c-9888-42fc-bd3d-1fa9efaddcfd", "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-workflowjpqpx/series-workflowjpqpx-build-action-1712360225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 10:04:06 +0000 UTC FinishedAt: 2026-09-08 10:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 10:04:06 +0000 UTC FinishedAt: 2026-09-08 10:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 10:04:06 +0000 UTC FinishedAt: 2026-09-08 10:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 10:04:06 +0000 UTC FinishedAt: 2026-09-08 10:06:16 +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:*d600e34c-9888-42fc-bd3d-1fa9efaddcfd,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-workflowjpqpx/series-workflowjpqpx-build-action-1712360225/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-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 10:06:26 +0000 UTC FinishedAt: 2026-09-08 13:09:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 10:06:26 +0000 UTC FinishedAt: 2026-09-08 13:09:07 +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":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"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:*0e69e87c-3627-4b10-b7b2-20178098815d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d600e34c-9888-42fc-bd3d-1fa9efaddcfd,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-workflowjpqpx/series-workflowjpqpx-build-action-3830746088/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-workflowjpqpx/series-workflowjpqpx-build-action-1712360225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 10:06:26 +0000 UTC FinishedAt: 2026-09-08 10:06:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 10:06:26 +0000 UTC FinishedAt: 2026-09-08 10:06:30 +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":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"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-workflowjpqpx/series-workflowjpqpx-convert-artifact-2169044858/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 10:06:26 +0000 UTC FinishedAt: 2026-09-08 10:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 10:06:26 +0000 UTC FinishedAt: 2026-09-08 10:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 10:06:26 +0000 UTC FinishedAt: 2026-09-08 10:06:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 10:06:36 +0000 UTC FinishedAt: 2026-09-08 13:09:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjpqpx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["pad_compress_skb","ppp_ioctl","ppp_prepare_tx_skb","ppp_setup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d6cd188508513503805c156165de38e4e4a8615","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP"],"series_id":"54a96ed3-8405-4899-a9a0-896307bdfecc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 10:06:36 +0000 UTC FinishedAt: 2026-09-08 13:08:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0e69e87c-3627-4b10-b7b2-20178098815d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d600e34c-9888-42fc-bd3d-1fa9efaddcfd,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-workflowjpqpx/series-workflowjpqpx-build-action-3830746088/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-workflowjpqpx/series-workflowjpqpx-build-action-1712360225/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-workflowjpqpx/series-workflowjpqpx-convert-artifact-2169044858/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,}