Name: series-workflowswzs4 Phase: Succeeded StartedAt: 2026-08-31 22:11:28 +0000 UTC FinishedAt: 2026-09-01 02:20:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[0] Phase: Succeeded StartedAt: 2026-08-31 22:11:28 +0000 UTC FinishedAt: 2026-08-31 22:34:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 22:11:28 +0000 UTC FinishedAt: 2026-08-31 22:34:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE_NETFILTER", "BRIDGE", "NETFILTER", "USER_NS", "NET_NS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE_NETFILTER", "BRIDGE", "NETFILTER", "USER_NS", "NET_NS" ], "series_id": "e2dec9ae-e149-462d-8d80-1ee46fb10c7e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "brnf_device_event", "brnf_init_net", "brnf_exit_net", "br_nf_hook_thresh" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRV9ORVRGSUxURVImIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtVU0VSX05TJiMzNDssCiAgICAmIzM0O05FVF9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JybmZfZGV2aWNlX2V2ZW50JiMzNDssCiAgICAmIzM0O2JybmZfaW5pdF9uZXQmIzM0OywKICAgICYjMzQ7YnJuZl9leGl0X25ldCYjMzQ7LAogICAgJiMzNDticl9uZl9ob29rX3RocmVzaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RyaWN0cyB0aGUgbGVnYWN5IGJyX25ldGZpbHRlciBtb2R1bGUgaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzIGJ5IHNldHRpbmcgYSBuZXcgYm9vbGVhbiBmbGFnIChgaW5fdXNlcm5zYCksIGF2b2lkaW5nIHN5c2N0bCByZWdpc3RyYXRpb24sIGFuZCBza2lwcGluZyBuZXRmaWx0ZXIgaG9vayByZWdpc3RyYXRpb24gb24gZGV2aWNlIGV2ZW50cy5cblxuLSBNZW1vcnkgQWxsb2NhdGlvbiBcdTAwMjYgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgYnJuZl9uZXRgIGlzIGFsbG9jYXRlZCBhcyBwZXItbmV0bnMgc3RvcmFnZSBieSB0aGUgcGVybmV0IHN1YnN5c3RlbSB1c2luZyB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeSAoYGt6YWxsb2NgKS4gVGhlIGFkZGVkIGBpbl91c2VybnNgIGJvb2xlYW4gYW5kIGV4aXN0aW5nIGZpZWxkcyBhcmUgc2FmZWx5IHplcm8taW5pdGlhbGl6ZWQgb24gYWxsb2NhdGlvbi5cbi0gTm8gSW5mbyBMZWFrcyBvciBVbmluaXRpYWxpemVkIFJlYWRzOiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgYWxzbyBndWFyZHMgc3lzY3RsIGNsZWFudXAgYWdhaW5zdCBOVUxMIHBvaW50ZXJzIChgY3RsX2hkcmApIHdoZW4gc3lzY3RsIHJlZ2lzdHJhdGlvbiB3YXMgc2tpcHBlZC5cbi0gU3RhbmRhcmQgU2FuaXRpemVyIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBsaWZlY3ljbGUsIG51bGwgZGVyZWZlcmVuY2VzLCBvciBuZXRucyBkZXN0cnVjdGlvbiBhcmUgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgYnJpZGdlIG5ldGZpbHRlciBpbml0aWFsaXphdGlvbiBhbmQgZGV2aWNlIGV2ZW50IGhhbmRsaW5nIHRvIGRpc2FibGUgYnJfbmV0ZmlsdGVyIGFuZCBpdHMgc3lzY3RsIHJlZ2lzdHJhdGlvbiB3aXRoaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzLiBUaGlzIGFsdGVycyBjb3JlIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBicmlkZ2UgZGV2aWNlIHNldHVwL3RlYXJkb3duIGV4ZWN1dGlvbiBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNDY3MzUxMGEyYTk2YjIxNTY1YjhjZDEwNGFjODMwMGRmZTUyYmIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjI6MzI6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdFxuaW5kZXggYzFlNmVhNTJjOWU1OS4uZGRlZDFhNmVkZDYwNiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdFxuQEAgLTI3Nyw4ICYjNDM7Mjc3LDkgQEAgTmV0ZmlsdGVyXG4gPT09PT09PT09XG4gXG4gVGhlIGJyaWRnZSBuZXRmaWx0ZXIgbW9kdWxlIGlzIGEgbGVnYWN5IGZlYXR1cmUgdGhhdCBhbGxvd3MgdG8gZmlsdGVyIGJyaWRnZWRcbi1wYWNrZXRzIHdpdGggaXB0YWJsZXMgYW5kIGlwNnRhYmxlcy4gSXRzIHVzZSBpcyBkaXNjb3VyYWdlZC4gVXNlcnMgc2hvdWxkXG4tY29uc2lkZXIgdXNpbmcgbmZ0YWJsZXMgZm9yIHBhY2tldCBmaWx0ZXJpbmcuXG4mIzQzO3BhY2tldHMgd2l0aCBpcHRhYmxlcyBhbmQgaXA2dGFibGVzLiBUaGlzIGZlYXR1cmUgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsIGFuZFxuJiM0Mztub3QgYXZhaWxhYmxlIGluIHVzZXIgbmFtZXNwYWNlcy4gQ29uc2lkZXIgdXNpbmcgbmZ0YWJsZXMgZm9yIHBhY2tldCBmaWx0ZXJpbmdcbiYjNDM7aW5zdGVhZC5cbiBcbiBUaGUgb2xkZXIgZWJ0YWJsZXMgdG9vbCBpcyBtb3JlIGZlYXR1cmUtbGltaXRlZCBjb21wYXJlZCB0byBuZnRhYmxlcywgYnV0XG4ganVzdCBsaWtlIG5mdGFibGVzIGl0IGRvZXNuJiMzOTt0IG5lZWQgdGhpcyBtb2R1bGUgZWl0aGVyIHRvIGZ1bmN0aW9uLlxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXG5pbmRleCAwYTM5NGU1ZjQzOTE2Li5lMTUzNTVmZjIxNWE3IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY1xuQEAgLTU0LDYgJiM0Mzs1NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgYnJuZl9uZXRfaWQgX19yZWFkX21vc3RseTtcbiBcbiBzdHJ1Y3QgYnJuZl9uZXQge1xuIFx0Ym9vbCBlbmFibGVkO1xuJiM0MztcdGJvb2wgaW5fdXNlcm5zO1xuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqY3RsX2hkcjtcbkBAIC0xMTAwLDcgJiM0MzsxMTAxLDcgQEAgc3RhdGljIGludCBicm5mX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCxcbiBcbiBcdG5ldCA9IGRldl9uZXQoZGV2KTtcbiBcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG4tXHRpZiAoYnJuZXQtXHUwMDNlZW5hYmxlZClcbiYjNDM7XHRpZiAoYnJuZXQtXHUwMDNlZW5hYmxlZCB8fCBicm5ldC1cdTAwM2Vpbl91c2VybnMpXG4gXHRcdHJldHVybiBOT1RJRllfT0s7XG4gXG4gXHRyZXQgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBicl9uZl9vcHMsIEFSUkFZX1NJWkUoYnJfbmZfb3BzKSk7XG5AQCAtMTIyOSw5ICYjNDM7MTIzMCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9kZWZhdWx0KHN0cnVjdCBicm5mX25ldCAqYnJuZilcbiBcdGJybmYtXHUwMDNlZmlsdGVyX3BwcG9lX3RhZ2dlZCA9IDA7XG4gXHRicm5mLVx1MDAzZXBhc3Nfdmxhbl9pbmRldiA9IDA7XG4gfVxuJiM0MzsjZW5kaWZcbiBcbiBzdGF0aWMgaW50IGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIHtcbiYjNDM7I2lmZGVmIENPTkZJR19TWVNDVExcbiBcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlID0gYnJuZl90YWJsZTtcbiBcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQ7XG4gXG5AQCAtMTI1OSwyNSAmIzQzOzEyNjIsMzkgQEAgc3RhdGljIGludCBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4tXG4mIzQzOyNlbmRpZlxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgc3RydWN0IGJybmZfbmV0ICpicm5ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSA9IGJybmV0LVx1MDAzZWN0bF9oZHItXHUwMDNlY3RsX3RhYmxlX2FyZztcbiYjNDM7I2lmZGVmIENPTkZJR19TWVNDVExcbiYjNDM7XHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyID0gYnJuZXQtXHUwMDNlY3RsX2hkcjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcbi1cdHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShicm5ldC1cdTAwM2VjdGxfaGRyKTtcbiYjNDM7XHRpZiAoIWhlYWRlcilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dGFibGUgPSBoZWFkZXItXHUwMDNlY3RsX3RhYmxlX2FyZztcbiYjNDM7XHR1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoaGVhZGVyKTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKVxuIFx0XHRrZnJlZSh0YWJsZSk7XG4mIzQzOyNlbmRpZlxuIH1cbiBcbiBzdGF0aWMgaW50IF9fbmV0X2luaXQgYnJuZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuJiM0MztcdGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpIHtcbiYjNDM7XHRcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcbiYjNDM7XG4mIzQzO1x0XHRicm5ldC1cdTAwM2Vpbl91c2VybnMgPSB0cnVlO1xuJiM0MztcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O2JyX25ldGZpbHRlciBubyBsb25nZXIgc3VwcG9ydGVkIGluIHVzZXIgbmFtZXNwYWNlc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQobmV0KTtcbiB9XG4tI2VuZGlmXG4gXG4gc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiB7XG5AQCAtMTI4OSwxNSAmIzQzOzEzMDYsMTEgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0YnJuZXQtXHUwMDNlZW5hYmxlZCA9IGZhbHNlO1xuIFx0fVxuIFxuLSNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gXHRicl9uZXRmaWx0ZXJfc3lzY3RsX2V4aXRfbmV0KG5ldCwgYnJuZXQpO1xuLSNlbmRpZlxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGJybmZfbmV0X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLSNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gXHQuaW5pdCA9IGJybmZfaW5pdF9uZXQsXG4tI2VuZGlmXG4gXHQuZXhpdCA9IGJybmZfZXhpdF9uZXQsXG4gXHQuaWQgICA9IFx1MDAyNmJybmZfbmV0X2lkLFxuIFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGJybmZfbmV0KSxcbkBAIC0xMzE4LDcgJiM0MzsxMzMxLDcgQEAgc3RhdGljIGludCBfX2luaXQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZClcbiBcdH1cbiBcbiBcdFJDVV9JTklUX1BPSU5URVIobmZfYnJfb3BzLCBcdTAwMjZicl9vcHMpO1xuLVx0cHJpbnRrKEtFUk5fTk9USUNFIFwmIzM0O0JyaWRnZSBmaXJld2FsbGluZyByZWdpc3RlcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcl93YXJuKFwmIzM0O2JyX25ldGZpbHRlciBpcyBzbGF0ZWQgZm9yIHJlbW92YWwgaW4gMjAyNy5cXG5cJiMzNDspO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRV9ORVRGSUxURVImIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtVU0VSX05TJiMzNDssCiAgICAmIzM0O05FVF9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JybmZfZGV2aWNlX2V2ZW50JiMzNDssCiAgICAmIzM0O2JybmZfaW5pdF9uZXQmIzM0OywKICAgICYjMzQ7YnJuZl9leGl0X25ldCYjMzQ7LAogICAgJiMzNDticl9uZl9ob29rX3RocmVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGJyaWRnZSBuZXRmaWx0ZXIgaW5pdGlhbGl6YXRpb24gYW5kIGRldmljZSBldmVudCBoYW5kbGluZyB0byBkaXNhYmxlIGJyX25ldGZpbHRlciBhbmQgaXRzIHN5c2N0bCByZWdpc3RyYXRpb24gd2l0aGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcy4gVGhpcyBhbHRlcnMgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgYnJpZGdlIGRldmljZSBzZXR1cC90ZWFyZG93biBleGVjdXRpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTQ2NzM1MTBhMmE5NmIyMTU2NWI4Y2QxMDRhYzgzMDBkZmU1MmJiMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIyOjMyOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdAppbmRleCBjMWU2ZWE1MmM5ZTU5Li5kZGVkMWE2ZWRkNjA2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdApAQCAtMjc3LDggJiM0MzsyNzcsOSBAQCBOZXRmaWx0ZXIKID09PT09PT09PQogCiBUaGUgYnJpZGdlIG5ldGZpbHRlciBtb2R1bGUgaXMgYSBsZWdhY3kgZmVhdHVyZSB0aGF0IGFsbG93cyB0byBmaWx0ZXIgYnJpZGdlZAotcGFja2V0cyB3aXRoIGlwdGFibGVzIGFuZCBpcDZ0YWJsZXMuIEl0cyB1c2UgaXMgZGlzY291cmFnZWQuIFVzZXJzIHNob3VsZAotY29uc2lkZXIgdXNpbmcgbmZ0YWJsZXMgZm9yIHBhY2tldCBmaWx0ZXJpbmcuCiYjNDM7cGFja2V0cyB3aXRoIGlwdGFibGVzIGFuZCBpcDZ0YWJsZXMuIFRoaXMgZmVhdHVyZSBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwgYW5kCiYjNDM7bm90IGF2YWlsYWJsZSBpbiB1c2VyIG5hbWVzcGFjZXMuIENvbnNpZGVyIHVzaW5nIG5mdGFibGVzIGZvciBwYWNrZXQgZmlsdGVyaW5nCiYjNDM7aW5zdGVhZC4KIAogVGhlIG9sZGVyIGVidGFibGVzIHRvb2wgaXMgbW9yZSBmZWF0dXJlLWxpbWl0ZWQgY29tcGFyZWQgdG8gbmZ0YWJsZXMsIGJ1dAoganVzdCBsaWtlIG5mdGFibGVzIGl0IGRvZXNuJiMzOTt0IG5lZWQgdGhpcyBtb2R1bGUgZWl0aGVyIHRvIGZ1bmN0aW9uLgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMKaW5kZXggMGEzOTRlNWY0MzkxNi4uZTE1MzU1ZmYyMTVhNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jCkBAIC01NCw2ICYjNDM7NTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGJybmZfbmV0X2lkIF9fcmVhZF9tb3N0bHk7CiAKIHN0cnVjdCBicm5mX25ldCB7CiAJYm9vbCBlbmFibGVkOwomIzQzOwlib29sIGluX3VzZXJuczsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKIAlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqY3RsX2hkcjsKQEAgLTExMDAsNyAmIzQzOzExMDEsNyBAQCBzdGF0aWMgaW50IGJybmZfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LAogCiAJbmV0ID0gZGV2X25ldChkZXYpOwogCWJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7Ci0JaWYgKGJybmV0LSZndDtlbmFibGVkKQomIzQzOwlpZiAoYnJuZXQtJmd0O2VuYWJsZWQgfHwgYnJuZXQtJmd0O2luX3VzZXJucykKIAkJcmV0dXJuIE5PVElGWV9PSzsKIAogCXJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGJyX25mX29wcywgQVJSQVlfU0laRShicl9uZl9vcHMpKTsKQEAgLTEyMjksOSAmIzQzOzEyMzAsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChzdHJ1Y3QgYnJuZl9uZXQgKmJybmYpCiAJYnJuZi0mZ3Q7ZmlsdGVyX3BwcG9lX3RhZ2dlZCA9IDA7CiAJYnJuZi0mZ3Q7cGFzc192bGFuX2luZGV2ID0gMDsKIH0KJiM0MzsjZW5kaWYKIAogc3RhdGljIGludCBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKJiM0MzsjaWZkZWYgQ09ORklHX1NZU0NUTAogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlID0gYnJuZl90YWJsZTsKIAlzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0OwogCkBAIC0xMjU5LDI1ICYjNDM7MTI2MiwzOSBAQCBzdGF0aWMgaW50IGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogCiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQomIzQzOyNlbmRpZgogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBicl9uZXRmaWx0ZXJfc3lzY3RsX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJIHN0cnVjdCBicm5mX25ldCAqYnJuZXQpCiB7Ci0JY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUgPSBicm5ldC0mZ3Q7Y3RsX2hkci0mZ3Q7Y3RsX3RhYmxlX2FyZzsKJiM0MzsjaWZkZWYgQ09ORklHX1NZU0NUTAomIzQzOwlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyID0gYnJuZXQtJmd0O2N0bF9oZHI7CiYjNDM7CWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCi0JdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKGJybmV0LSZndDtjdGxfaGRyKTsKJiM0MzsJaWYgKCFoZWFkZXIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXRhYmxlID0gaGVhZGVyLSZndDtjdGxfdGFibGVfYXJnOwomIzQzOwl1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoaGVhZGVyKTsKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKQogCQlrZnJlZSh0YWJsZSk7CiYjNDM7I2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBicm5mX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKJiM0MzsJaWYgKG5ldC0mZ3Q7dXNlcl9ucyAhPSAmYW1wO2luaXRfdXNlcl9ucykgewomIzQzOwkJc3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpOwomIzQzOwomIzQzOwkJYnJuZXQtJmd0O2luX3VzZXJucyA9IHRydWU7CiYjNDM7CQlwcl93YXJuX29uY2UoJiMzNDticl9uZXRmaWx0ZXIgbm8gbG9uZ2VyIHN1cHBvcnRlZCBpbiB1c2VyIG5hbWVzcGFjZXNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQobmV0KTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJybmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewpAQCAtMTI4OSwxNSAmIzQzOzEzMDYsMTEgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAkJYnJuZXQtJmd0O2VuYWJsZWQgPSBmYWxzZTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCiAJYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChuZXQsIGJybmV0KTsKLSNlbmRpZgogfQogCiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGJybmZfbmV0X29wcyBfX3JlYWRfbW9zdGx5ID0gewotI2lmZGVmIENPTkZJR19TWVNDVEwKIAkuaW5pdCA9IGJybmZfaW5pdF9uZXQsCi0jZW5kaWYKIAkuZXhpdCA9IGJybmZfZXhpdF9uZXQsCiAJLmlkICAgPSAmYW1wO2JybmZfbmV0X2lkLAogCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBicm5mX25ldCksCkBAIC0xMzE4LDcgJiM0MzsxMzMxLDcgQEAgc3RhdGljIGludCBfX2luaXQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZCkKIAl9CiAKIAlSQ1VfSU5JVF9QT0lOVEVSKG5mX2JyX29wcywgJmFtcDticl9vcHMpOwotCXByaW50ayhLRVJOX05PVElDRSAmIzM0O0JyaWRnZSBmaXJld2FsbGluZyByZWdpc3RlcmVkXG4mIzM0Oyk7CiYjNDM7CXByX3dhcm4oJiMzNDticl9uZXRmaWx0ZXIgaXMgc2xhdGVkIGZvciByZW1vdmFsIGluIDIwMjcuXG4mIzM0Oyk7CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzNQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgTmV0d29yayBCcmlkZ2UgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCBwcmltYXJpbHkgaW1wYWN0cyBob3cgdGhlIGJyaWRnZSBuZXRmaWx0ZXIgaG9va3MgYmVoYXZlIHdpdGhpbiB1c2VyIG5hbWVzcGFjZXMuIEkgc2VlIHRoYXQgaXQgbW9kaWZpZXMgYm90aCBgbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY2AgYW5kIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdGAsIHNvIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYm90aCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLgoKTG9va2luZyBhdCBgYnJfbmV0ZmlsdGVyX2hvb2tzLmNgLCB0aGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgYWRkaXRpb24gb2YgYSBgYm9vbCBpbl91c2VybnM7YCBmaWVsZCB3aXRoaW4gdGhlIGBzdHJ1Y3QgYnJuZl9uZXRgLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gVGhlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyBpbiBgYnJuZl9kZXZpY2VfZXZlbnRgIGFyZSB0ZWxsaW5nLiBJdCBub3cgY2hlY2tzIGZvciBlaXRoZXIgYGJybmV0LSZndDtlbmFibGVkYCAqb3IqIGBicm5ldC0mZ3Q7aW5fdXNlcm5zYC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIHByZXZpb3VzbHkgaXQgb25seSBjaGVja2VkIGBicm5ldC0mZ3Q7ZW5hYmxlZGAuIFRoaXMgY2hhbmdlIGltcGxpZXMgdGhhdCB3aXRoaW4gYSB1c2VyIG5hbWVzcGFjZSAoZGVmaW5lZCBhcyBgbmV0LSZndDt1c2VyX25zICE9ICZhbXA7aW5pdF91c2VyX25zYCksIHRoZSBgYnJfbmZfb3BzYCBhcmUgKm5vdCogcmVnaXN0ZXJlZCB3aGVuIGEgYnJpZGdlIGRldmljZSBpcyBjcmVhdGVkIG9yIHJlZ2lzdGVyZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBkaWZmZXJlbmNlLgoKRnVydGhlcm1vcmUsIGBicm5mX2luaXRfbmV0YCBpcyBub3cgYWx3YXlzIGNhbGxlZCwgcmVnYXJkbGVzcyBvZiB0aGUgYENPTkZJR19TWVNDVExgIG9wdGlvbiwgd2hpY2ggaXMgYSBkZXBhcnR1cmUgZnJvbSBwcmV2aW91cyBiZWhhdmlvci4gSSYjMzk7bSBub3RpbmcgdGhhdCBpbiBgYnJuZl9pbml0X25ldGAsIGlmIHRoZSBjb2RlIGRldGVjdHMgdGhhdCB3ZSYjMzk7cmUgd2l0aGluIGEgdXNlciBuYW1lc3BhY2UsIGl0IHNldHMgYGJybmV0LSZndDtpbl91c2VybnMgPSB0cnVlO2AgYW5kIGlzc3VlcyBhIHdhcm5pbmcuIEl0IGFsc28gc2tpcHMgdGhlIGNhbGwgdG8gYGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQobmV0KWAuIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHBhdGNoIGFpbXMgdG8gaXNvbGF0ZSBvciBjb250cm9sIHRoZSBzeXNjdGwgc2V0dGluZ3MgcmVsYXRlZCB0byBuZXRmaWx0ZXIgd2l0aGluIHVzZXIgbmFtZXNwYWNlcy4KClRoZSBjaGFuZ2VzIGluIGBicl9uZXRmaWx0ZXJfc3lzY3RsX2V4aXRfbmV0YCB3aXRoIHRoZSBgaWYgKCFoZWFkZXIpIHJldHVybjtgIGNoZWNrIGFyZSBpbXBvcnRhbnQsIGJ1dCBub3QgaW1tZWRpYXRlbHkgb2J2aW91cy4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgYG5ldC9icmlkZ2UvS2NvbmZpZ2AsIGBuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnYCwgb3IgYG5ldC9LY29uZmlnYCBtaWdodCBjb250YWluIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGRldGFpbHMgZm9yIGBicl9uZXRmaWx0ZXJgLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUklER0VfTkVURklMVEVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc9MTQ3PUNPTkZJR19ORVRGSUxURVI9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoxNDg6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0xNDktQ09ORklHX05GX0NPTk5UUkFDSz1tXG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0xNjM9Q09ORklHX05FVEZJTFRFUj15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjE2NDpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTE2NS1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW1cbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTE3OT1DT05GSUdfTkVURklMVEVSPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6MTgwOkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMTgxLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWc9NzU9Q09ORklHX0JSSURHRT15XG5hcmNoL21pcHMvY29uZmlncy9ibWlwc19zdGJfZGVmY29uZmlnOjc2OkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWctNzctQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tXG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvbG9vbmdzb24zX2RlZmNvbmZpZz02MT1DT05GSUdfTkVURklMVEVSPXlcbmFyY2gvbWlwcy9jb25maWdzL2xvb25nc29uM19kZWZjb25maWc6NjI6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxuYXJjaC9taXBzL2NvbmZpZ3MvbG9vbmdzb24zX2RlZmNvbmZpZy02My1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWc9NDc9Q09ORklHX05FVEZJTFRFUj15XG5hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWc6NDg6IyBDT05GSUdfQlJJREdFX05FVEZJTFRFUiBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWctNDktQ09ORklHX05GX0NPTk5UUkFDSz15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZz00ND1DT05GSUdfTkVURklMVEVSPXlcbmFyY2gvbWlwcy9jb25maWdzL3J0MzA1eF9kZWZjb25maWc6NDU6IyBDT05GSUdfQlJJREdFX05FVEZJTFRFUiBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnLTQ2LUNPTkZJR19ORl9DT05OVFJBQ0s9bVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL3h3YXlfZGVmY29uZmlnPTQ2PUNPTkZJR19ORVRGSUxURVI9eVxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc6NDc6IyBDT05GSUdfQlJJREdFX05FVEZJTFRFUiBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZy00OC1DT05GSUdfTkZfQ09OTlRSQUNLPW1cbi0tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTY2PUNPTkZJR19ORVRGSUxURVI9eVxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZzo2NzpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnLTY4LUNPTkZJR19ORl9DT05OVFJBQ0s9bVxuLS1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz0xODA9Q09ORklHX05FVEZJTFRFUj15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTgxOkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xODItQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0s9bVxuLS1cbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz0xNzE9Q09ORklHX05FVEZJTFRFUj15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MTcyOkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy0xNzMtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0s9bVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjI6I2lmbmRlZiBfX0xJTlVYX0JSSURHRV9ORVRGSUxURVJfSFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MzojZGVmaW5lIF9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9IXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC00LVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPTg9c3RydWN0IG5mX2JyaWRnZV9mcmFnX2RhdGEge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTE0LVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0xNi1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD04Mj1zdGF0aWMgaW5saW5lIGJvb2wgbmZfYnJpZGdlX2luX3ByZXJvdXRpbmcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC04NS19XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDo4NjojZW5kaWYgLyogQ09ORklHX0JSSURHRV9ORVRGSUxURVIgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTg3LVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9Mjg1PXN0cnVjdCB0c19jb25maWc7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI4Ni1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6Mjg3OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yODgtc3RydWN0IG5mX2JyaWRnZV9pbmZvIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwMzg9ZW51bSBza2JfZXh0X2lkIHtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTAzOTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA0MC1cdFNLQl9FWFRfQlJJREdFX05GLFxuLS1cbmluY2x1ZGUvbmV0L25laWdoYm91ci5oPTQ4ND1zdGF0aWMgaW5saW5lIGludCBuZWlnaF9ldmVudF9zZW5kKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L25laWdoYm91ci5oLTQ4OC1cbmluY2x1ZGUvbmV0L25laWdoYm91ci5oOjQ4OTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbmluY2x1ZGUvbmV0L25laWdoYm91ci5oLTQ5MC1zdGF0aWMgaW5saW5lIGludCBuZWlnaF9oaF9icmlkZ2Uoc3RydWN0IGhoX2NhY2hlICpoaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg9OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtMTAte1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oOjExOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTEyLVx0c3RydWN0IG5mX2JyaWRnZV9pbmZvICpiID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX0JSSURHRV9ORik7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oPTQzPXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0YWJsZSAqYnJpZGdlX3BhcmVudF9ydGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaC00NC17XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg6NDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtNDYtXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0O1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5oPTEzPXN0cnVjdCBuZl9xdWV1ZV9lbnRyeSB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmgtMTktXHR1bnNpZ25lZCBpbnRcdFx0aG9va19pbmRleDtcdC8qIGluZGV4IGluIGhvb2tfZW50cmllcy1cdTAwM2Vob29rW10gKi9cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5oOjIwOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmgtMjEtXHRzdHJ1Y3QgbmV0X2RldmljZVx0KmJyaWRnZV9kZXY7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjI6I2lmbmRlZiBfVUFQSV9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9IXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjM6I2RlZmluZSBfVUFQSV9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9IXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTQtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD0zND1lbnVtIG5mX2JyX2hvb2tfcHJpb3JpdGllcyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC00NC1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6NDU6I2VuZGlmIC8qIF9VQVBJX19MSU5VWF9CUklER0VfTkVURklMVEVSX0ggKi9cbi0tXG5uZXQvS2NvbmZpZz0yMjA9Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxuLS1cbm5ldC9LY29uZmlnLTIzMC1cbm5ldC9LY29uZmlnOjIzMTpjb25maWcgQlJJREdFX05FVEZJTFRFUlxubmV0L0tjb25maWctMjMyLVx0dHJpc3RhdGUgXCYjMzQ7QnJpZGdlZCBJUC9BUlAgcGFja2V0cyBmaWx0ZXJpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL01ha2VmaWxlPTEzPWJyaWRnZS0kKENPTkZJR19TWVNGUykgJiM0Mzs9IGJyX3N5c2ZzX2lmLm8gYnJfc3lzZnNfYnIub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0xNC1cbm5ldC9icmlkZ2UvTWFrZWZpbGU6MTU6YnJpZGdlLSQoc3Vic3QgbSx5LCQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpKSAmIzQzOz0gYnJfbmZfY29yZS5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTE2LVxuLS1cbm5ldC9icmlkZ2UvTWFrZWZpbGU9MTg9YnJfbmV0ZmlsdGVyLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSAmIzQzOz0gYnJfbmV0ZmlsdGVyX2lwdjYub1xubmV0L2JyaWRnZS9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikgJiM0Mzs9IGJyX25ldGZpbHRlci5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTIwLVxuLS1cbm5ldC9icmlkZ2UvYnIuYz00MjU9c3RhdGljIGludCBfX2luaXQgYnJfaW5pdCh2b2lkKVxuLS1cbm5ldC9icmlkZ2UvYnIuYy00NjYtXG5uZXQvYnJpZGdlL2JyLmM6NDY3OiNpZiBJU19NT0RVTEUoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvYnJpZGdlL2JyLmMtNDY4LVx0cHJfaW5mbyhcJiMzNDticmlkZ2U6IGZpbHRlcmluZyB2aWEgYXJwL2lwL2lwNnRhYmxlcyBpcyBubyBsb25nZXIgYXZhaWxhYmxlIFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MjA0PXN0YXRpYyBpbnQgYnJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTIxMS1cdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01UVV9TRVRfQllfVVNFUiwgdHJ1ZSk7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjIxMjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMjEzLVx0LyogcmVtZW1iZXIgdGhlIE1UVSBpbiB0aGUgcnRhYmxlIGZvciBQTVRVICovXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTI5NT1zdGF0aWMgaW50IGJyX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1NTQtI2VuZGlmXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNTU1OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTU1Ni1cdGlmIChkYXRhW0lGTEFfQlJfTkZfQ0FMTF9JUFRBQkxFU10pIHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xNjE5PXN0YXRpYyBzaXplX3QgYnJfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2NjctI2VuZGlmXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNjY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTY2OS1cdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSAmIzQzOyAgICAgLyogSUZMQV9CUl9ORl9DQUxMX0lQVEFCTEVTICovXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTY3OD1zdGF0aWMgaW50IGJyX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc5MS0jZW5kaWZcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE3OTI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzkzLVx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX05GX0NBTExfSVBUQUJMRVMsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTAwPXN0cnVjdCBuZXRfYnJpZGdlIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01MTQtXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdHBvcnRfbGlzdDtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjUxNTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUxNi1cdHVuaW9uIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0yMDIzPWV4dGVybiBjb25zdCBzdHJ1Y3QgbmZfYnJfb3BzIF9fcmN1ICpuZl9icl9vcHM7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjAyNS0vKiBicl9uZXRmaWx0ZXIuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjAyNjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIwMjctaW50IGJyX25mX2NvcmVfaW5pdCh2b2lkKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9NzcxPXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhtdWx0aWNhc3RfbWxkX3ZlcnNpb24pO1xuLS1cbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy03NzMtI2VuZGlmXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM6Nzc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTc3NS1zdGF0aWMgc3NpemVfdCBuZl9jYWxsX2lwdGFibGVzX3Nob3coXG4tLVxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jPTkzNT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYnJpZGdlX2F0dHJzW10gPSB7XG4tLVxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTk3Ni0jZW5kaWZcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYzo5Nzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtOTc4LVx0XHUwMDI2ZGV2X2F0dHJfbmZfY2FsbF9pcHRhYmxlcy5hdHRyLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTUxNTA9c3RhdGljIGNvbnN0IHU4IHNrYl9leHRfdHlwZV9sZW5bXSA9IHtcbm5ldC9jb3JlL3NrYnVmZi5jOjUxNTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvY29yZS9za2J1ZmYuYy01MTUyLVx0W1NLQl9FWFRfQlJJREdFX05GXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG5mX2JyaWRnZV9pbmZvKSxcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jLTE5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9SRUpFQ1QuaFx1MDAzZVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYzoyMDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMtMjEtI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXHUwMDNlXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MjczPXZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zMTMtXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzozMTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zMTUtXHQvKiBJZiB3ZSB1c2UgaXBfbG9jYWxfb3V0IGZvciBicmlkZ2VkIHRyYWZmaWMsIHRoZSBNQUMgc291cmNlIG9uXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmM9MzEzPXZvaWQgbmZfc2VuZF9yZXNldDYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvbGRza2IsXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtMzgyLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmM6MzgzOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtMzg0LVx0LyogSWYgd2UgdXNlIGlwNl9sb2NhbF9vdXQgZm9yIGJyaWRnZWQgdHJhZmZpYywgdGhlIE1BQyBzb3VyY2Ugb25cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTQ4NT1jb25maWcgTkVURklMVEVSX1hUX01BVENIX1BIWVNERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDg2LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtwaHlzZGV2XCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODc6XHRkZXBlbmRzIG9uIEJSSURHRSBcdTAwMjZcdTAwMjYgQlJJREdFX05FVEZJTFRFUlxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0ODgtXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xMjg9aGFzaF9uZXRpZmFjZTRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xMzgtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MTM5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTE0MC1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X3BoeXNpbmRldl9uYW1lKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTU2PWhhc2hfbmV0aWZhY2U0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xNzctXHRpZiAob3B0LVx1MDAzZWNtZGZsYWdzIFx1MDAyNiBJUFNFVF9GTEFHX1BIWVNERVYpIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoxNzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTc5LVx0XHRjb25zdCBjaGFyICplaWZhY2UgPSBTUkNESVIgPyBnZXRfcGh5c2luZGV2X25hbWUoc2tiLCB4dF9uZXQocGFyKSkgOlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNzc9aGFzaF9uZXRpZmFjZTZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM5NS1cdGlmIChvcHQtXHUwMDNlY21kZmxhZ3MgXHUwMDI2IElQU0VUX0ZMQUdfUEhZU0RFVikge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zOTctXHRcdGNvbnN0IGNoYXIgKmVpZmFjZSA9IFNSQ0RJUiA/IGdldF9waHlzaW5kZXZfbmFtZShza2IsIHh0X25ldChwYXIpKSA6XG4tLVxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmM9MTEzPW5mX2xvZ19kdW1wX3BhY2tldF9jb21tb24oc3RydWN0IG5mX2xvZ19idWYgKm0sIHU4IHBmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jLTEyNi1cdFx0XHRvdXQgPyBvdXQtXHUwMDNlbmFtZSA6IFwmIzM0O1wmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2xvZ19zeXNsb2cuYzoxMjc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mX2xvZ19zeXNsb2cuYy0xMjgtXHRwaHlzaW5kZXYgPSBuZl9icmlkZ2VfZ2V0X3BoeXNpbmRldihza2IsIG5ldCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jPTU5PXN0YXRpYyB2b2lkIG5mX3F1ZXVlX2VudHJ5X3JlbGVhc2VfcmVmcyhzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy02OS1cbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYzo3MDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy03MS1cdGRldl9wdXQoZW50cnktXHUwMDNlYnJpZGdlX2Rldik7XG4tLVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jPTg0PXN0YXRpYyB2b2lkIF9fbmZfcXVldWVfZW50cnlfaW5pdF9waHlzZGV2cyhzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jLTg1LXtcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYzo4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy04Ny1cdGNvbnN0IHN0cnVjdCBza19idWZmICpza2IgPSBlbnRyeS1cdTAwM2Vza2I7XG4tLVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jPTExMj1ib29sIG5mX3F1ZXVlX2VudHJ5X2dldF9yZWZzKHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXG4tLVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jLTEyMi1cbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYzoxMjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtMTI0LVx0ZGV2X2hvbGQoZW50cnktXHUwMDNlYnJpZGdlX2Rldik7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNDEtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYzo0MjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQzLSNpbmNsdWRlIFwmIzM0Oy4uL2JyaWRnZS9icl9wcml2YXRlLmhcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYz00MjI9c3RhdGljIGludCBuZnVsbmxfcHV0X2JyaWRnZShzdHJ1Y3QgbmZ1bG5sX2luc3RhbmNlICppbnN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQ1My1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjQ1NDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQ1NS1zdGF0aWMgaW50IG5mbG9nX3B1dF9tYXN0ZXJfaWZpbmRleChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsIGludCBhdHRyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jPTQ3ND1fX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZm5sX2xvZ19uZXQgKmxvZyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01MDktXHRpZiAoaW5kZXYpIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjUxMDojaWYgIUlTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01MTEtXHRcdGlmIChubGFfcHV0X2JlMzIoaW5zdC1cdTAwM2Vza2IsIE5GVUxBX0lGSU5ERVhfSU5ERVYsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNTQ1LVx0aWYgKG91dGRldikge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NTQ2OiNpZiAhSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTU0Ny1cdFx0aWYgKG5sYV9wdXRfYmUzMihpbnN0LVx1MDAzZXNrYiwgTkZVTEFfSUZJTkRFWF9PVVRERVYsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM9NzE4PW5mdWxubF9sb2dfcGFja2V0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy03NTYtXHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1X2ludDMyX3QpKVx0LyogaWZpbmRleCAqL1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NzU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNzU4LVx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodV9pbnQzMl90KSlcdC8qIGlmaW5kZXggKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTQ5LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo1MDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNTEtI2luY2x1ZGUgXCYjMzQ7Li4vYnJpZGdlL2JyX3ByaXZhdGUuaFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NDY3PXN0YXRpYyBib29sIG5mX2JyaWRnZV9wb3J0c192YWxpZChjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy00Njgte1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo0Njk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTQ3MC1cdGlmICghbmZfYnJpZGdlX3BvcnRfdmFsaWQoZW50cnktXHUwMDNlcGh5c2luKSB8fFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9Njc1PXN0YXRpYyBpbnQgbmZfcXVldWVfY2hlY2tzdW1faGVscChzdHJ1Y3Qgc2tfYnVmZiAqZW50c2tiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNjgyLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo2ODM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTY4NC1zdGF0aWMgaW50IG5mcW5sX3B1dF9tYXN0ZXJfaWZpbmRleChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsIGludCBhdHRyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzEyPW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTczNy1cdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHVfaW50MzJfdCkpXHQvKiBpZmluZGV4ICovXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjczODojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzM5LVx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodV9pbnQzMl90KSlcdC8qIGlmaW5kZXggKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgzMi1cdGlmIChpbmRldikge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MzM6I2lmICFJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MzQtXHRcdGlmIChubGFfcHV0X2JlMzIoc2tiLCBORlFBX0lGSU5ERVhfSU5ERVYsIGh0b25sKGluZGV2LVx1MDAzZWlmaW5kZXgpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTg2My1cdGlmIChvdXRkZXYpIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6ODY0OiNpZiAhSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODY1LVx0XHRpZiAobmxhX3B1dF9iZTMyKHNrYiwgTkZRQV9JRklOREVYX09VVERFViwgaHRvbmwob3V0ZGV2LVx1MDAzZWlmaW5kZXgpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTEwNDg9bmZfcXVldWVfZW50cnlfZHVwKHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwNjEtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwNjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwNjMtLyogV2hlbiBjYWxsZWQgZnJvbSBicmlkZ2UgbmV0ZmlsdGVyLCBza2ItXHUwMDNlZGF0YSBtdXN0IHBvaW50IHRvIE1BQyBoZWFkZXJcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE0OTk9ZGV2X2NtcChzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBsb25nIGlmaW5kZXgpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE1MDAte1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNTAxOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNTAyLVx0aW50IHBoeXNpbmlmLCBwaHlzb3V0aWY7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWc9Nz1DT05GSUdfQlJJREdFX0VCVF9UX0ZJTFRFUj1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZzo4OkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnLTktQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGJyX25ldGZpbHRlcl9ob29rcy5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBjaGFuZ2VzIGFyZSBpbXBhY3RpbmcgdGhlIGJyaWRnZSBuZXRmaWx0ZXIgaG9va3MuIFRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCBob3cgdGhlIGhvb2tzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuIEnigJltIHRoaW5raW5nIEkgd2lsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgbmV0ZmlsdGVyIGZyYW1ld29yayB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbnRleHQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBiZS4gTGV04oCZcyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODU6XHRcdFx0LnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVCxcbjEwODY6XHRcdH0sXG4xMDg3Olx0fTtcbjEwODg6XHRcbjEwODk6XHRzdGF0aWMgaW50IGJybmZfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxuMTA5MDpcdFx0XHRcdCAgICAgdm9pZCAqcHRyKVxuMTA5MTpcdHtcbjEwOTI6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbjEwOTM6XHRcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQ7XG4xMDk0Olx0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4xMDk1Olx0XHRpbnQgcmV0O1xuMTA5NjpcdFxuMTA5NzpcdFx0aWYgKGV2ZW50ICE9IE5FVERFVl9SRUdJU1RFUiB8fCAhbmV0aWZfaXNfYnJpZGdlX21hc3RlcihkZXYpKVxuMTA5ODpcdFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4xMDk5Olx0XG4xMTAwOlx0XHRBU1NFUlRfUlROTCgpO1xuMTEwMTpcdFxuMTEwMjpcdFx0bmV0ID0gZGV2X25ldChkZXYpO1xuMTEwMzpcdFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcbjExMDQ6XHRcdGlmIChicm5ldC1cdTAwM2VlbmFibGVkIHx8IGJybmV0LVx1MDAzZWluX3VzZXJucylcbjExMDU6XHRcdFx0cmV0dXJuIE5PVElGWV9PSztcbjExMDY6XHRcbjExMDc6XHRcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGJyX25mX29wcywgQVJSQVlfU0laRShicl9uZl9vcHMpKTtcbjExMDg6XHRcdGlmIChyZXQpXG4xMTA5Olx0XHRcdHJldHVybiBOT1RJRllfQkFEO1xuMTExMDpcdFxuMTExMTpcdFx0YnJuZXQtXHUwMDNlZW5hYmxlZCA9IHRydWU7XG4xMTEyOlx0XHRyZXR1cm4gTk9USUZZX09LO1xuMTExMzpcdH1cbjExMTQ6XHRcbjExMTU6XHRzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGJybmZfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHtcbjExMTY6XHRcdC5ub3RpZmllcl9jYWxsID0gYnJuZl9kZXZpY2VfZXZlbnQsXG4xMTE3Olx0fTtcbjExMTg6XHRcbjExMTk6XHQvKiByZWN1cnNpdmVseSBpbnZva2VzIG5mX2hvb2tfc2xvdyAoYWdhaW4pLCBza2lwcGluZyBhbHJlYWR5LWNhbGxlZFxuMTEyMDpcdCAqIGhvb2tzIChcdTAwM2MgTkZfQlJfUFJJX0JSTkYpLlxuMTEyMTpcdCAqXG4xMTIyOlx0ICogQ2FsbGVkIHdpdGggcmN1IHJlYWQgbG9jayBoZWxkLlxuMTEyMzpcdCAqL1xuMTEyNDpcdGludCBicl9uZl9ob29rX3RocmVzaCh1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LFxuMTEyNTpcdFx0XHQgICAgICBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4xMTI2Olx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICppbmRldixcbjExMjc6XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm91dGRldixcbjExMjg6XHRcdFx0ICAgICAgaW50ICgqb2tmbikoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxuMTEyOTpcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqKSlcbjExMzA6XHR7XG4xMTMxOlx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplO1xuMTEzMjpcdFx0c3RydWN0IG5mX2hvb2tfc3RhdGUgc3RhdGU7XG4xMTMzOlx0XHRzdHJ1Y3QgbmZfaG9va19vcHMgKipvcHM7XG4xMTM0Olx0XHR1bnNpZ25lZCBpbnQgaTtcbjExMzU6XHRcdGludCByZXQ7XG4xMTM2Olx0XG4xMTM3Olx0XHRlID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cdTAwM2VuZi5ob29rc19icmlkZ2VbaG9va10pO1xuMTEzODpcdFx0aWYgKCFlKVxuMTEzOTpcdFx0XHRyZXR1cm4gb2tmbihuZXQsIHNrLCBza2IpO1xuMTE0MDpcdFxuMTE0MTpcdFx0b3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbjExNDI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbjExNDM6XHRcdFx0LyogVGhlc2UgaG9va3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkICovXG4xMTQ0Olx0XHRcdGlmIChvcHNbaV0tXHUwMDNlcHJpb3JpdHkgXHUwMDNjIE5GX0JSX1BSSV9CUk5GKVxuMTE0NTpcdFx0XHRcdGNvbnRpbnVlO1xuMTE0NjpcdFxuMTE0NzpcdFx0XHQvKiBUaGVzZSBob29rcyBoYXZlIG5vdCBiZWVuIGNhbGxlZCB5ZXQsIHJ1biB0aGVtLiAqL1xuMTE0ODpcdFx0XHRpZiAob3BzW2ldLVx1MDAzZXByaW9yaXR5IFx1MDAzZSBORl9CUl9QUklfQlJORilcbjExNDk6XHRcdFx0XHRicmVhaztcbjExNTA6XHRcbjExNTE6XHRcdFx0LyogdGFrZSBhIGNsb3NlciBsb29rIGF0IE5GX0JSX1BSSV9CUk5GLiAqL1xuMTE1MjpcdFx0XHRpZiAob3BzW2ldLVx1MDAzZWhvb2sgPT0gYnJfbmZfcHJlX3JvdXRpbmcpIHtcbjExNTM6XHRcdFx0XHQvKiBUaGlzIGhvb2sgZGl2ZXJ0ZWQgdGhlIHNrYiB0byB0aGlzIGZ1bmN0aW9uLFxuMTE1NDpcdFx0XHRcdCAqIGhvb2tzIGFmdGVyIHRoaXMgaGF2ZSBub3QgYmVlbiBydW4geWV0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTgxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJJiMzOTtkIGJlIHRoaW5raW5nIGFzIEkgZXhhbWluZSB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgYW5kIGFzc3VtaW5nIG15IGV4cGVydGlzZToKCioqRGl2aW5nIERlZXAgaW50byBgYnJfbmV0ZmlsdGVyX2hvb2tzLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIGJyaWRnaW5nIG5ldGZpbHRlciBob29rcy4gSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgMTIyMCB0byAxMzQwIG9mIGBicl9uZXRmaWx0ZXJfaG9va3MuY2AuIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiBkZWFscyB3aXRoIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyB0aGUgYnJpZGdlIGludGVyYWN0cyB3aXRoIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLCBwcm9iYWJseSBmaWx0ZXJpbmcgb3IgbWFuaXB1bGF0aW5nIHBhY2tldHMgYXMgdGhleSB0cmF2ZXJzZSB0aGUgYnJpZGdlLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFudGljaXBhdGluZyB0aGlzIGFyZWEgY29udGFpbnMgdGhlIGNydWNpYWwgcmVnaXN0cmF0aW9uIG9yIHVucmVnaXN0cmF0aW9uIGxvZ2ljIGZvciBzcGVjaWZpYyBuZXRmaWx0ZXIgaG9va3MgdXNlZCB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbnRleHQuIFBlcmhhcHMgaXQgZGVmaW5lcyB0aGUgcHJpb3JpdGllcyBvZiB0aG9zZSBob29rcyByZWxhdGl2ZSB0byBvdGhlciBuZXRmaWx0ZXIgY29tcG9uZW50czsgb3IgdGhlIGFjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRob3NlIG5ldGZpbHRlciBydWxlcy4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiBpdCBtYWtlcyB1c2Ugb2Ygc3BlY2lmaWMgbmV0ZmlsdGVyIG1vZHVsZXMgb3IgZXh0ZW5zaW9ucyB0aGF0IGFyZSBicmlkZ2Utc3BlY2lmaWMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHBhY2tldCBtYW5nbGluZywgTkFULCBvciBjb25uZWN0aW9uIHRyYWNraW5nIGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIGJyaWRnZSYjMzk7cyBvcGVyYXRpb24g4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBrZXkgYXJlYSBmb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgc3RhdGVtZW50cy4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgcGFydHMgb2YgdGhpcyBzZWN0aW9uIGhhbmRsZSBkaWZmZXJlbnQgYnJpZGdlIG1vZGVzIG9yIGNvbmZpZ3VyYXRpb25zIChlLmcuLCBzcGFubmluZy10cmVlLCBtdWx0aWNhc3Qgc25vb3BpbmcsIG9yIFZMQU4gaGFuZGxpbmcpLiBJJiMzOTtsbCB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXRmaWx0ZXIgaG9va3MgYXJlIGFkYXB0ZWQgYmFzZWQgb24gdGhlIGJyaWRnZSYjMzk7cyBjdXJyZW50IG9wZXJhdGlvbmFsIHN0YXRlLiBJJiMzOTtsbCBhbHNvIGxvb2sgZm9yIGhvdyB0aGVzZSBob29rcyByZWxhdGUgdG8gaW5ncmVzcyBhbmQgZWdyZXNzIHBhY2tldCBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgYnJpZGdlLiBEb2VzIGl0IGZvbGxvdyBhIGNsZWFyLCB3ZWxsLWRlZmluZWQgcGF0aCwgb3IgaXMgaXQgYSBiaXQgbWVzc3k/CgpGaW5hbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gbmV0ZmlsdGVyIGZ1bmN0aW9ucyBsaWtlIGBuZl9ob29rX29wc2AsIGBuZl9yZWdpc3Rlcl9ob29rYCwgb3IgYG5mX3VucmVnaXN0ZXJfaG9va2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZWlyIGFyZ3VtZW50cyBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgYnJpZGdlIGFuZCBuZXRmaWx0ZXIuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGF0YSBzdHJ1Y3R1cmVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgcGFja2V0IGluZm9ybWF0aW9uIGlzIGV4cG9zZWQgKG9yIGhpZGRlbikgdG8gdGhlIGhvb2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjA6XHRcdFx0LnByb2NfaGFuZGxlclx0PSBicm5mX3N5c2N0bF9jYWxsX3RhYmxlcyxcbjEyMjE6XHRcdH0sXG4xMjIyOlx0fTtcbjEyMjM6XHRcbjEyMjQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9kZWZhdWx0KHN0cnVjdCBicm5mX25ldCAqYnJuZilcbjEyMjU6XHR7XG4xMjI2Olx0XHRicm5mLVx1MDAzZWNhbGxfaXB0YWJsZXMgPSAxO1xuMTIyNzpcdFx0YnJuZi1cdTAwM2VjYWxsX2lwNnRhYmxlcyA9IDE7XG4xMjI4Olx0XHRicm5mLVx1MDAzZWNhbGxfYXJwdGFibGVzID0gMTtcbjEyMjk6XHRcdGJybmYtXHUwMDNlZmlsdGVyX3ZsYW5fdGFnZ2VkID0gMDtcbjEyMzA6XHRcdGJybmYtXHUwMDNlZmlsdGVyX3BwcG9lX3RhZ2dlZCA9IDA7XG4xMjMxOlx0XHRicm5mLVx1MDAzZXBhc3Nfdmxhbl9pbmRldiA9IDA7XG4xMjMyOlx0fVxuMTIzMzpcdCNlbmRpZlxuMTIzNDpcdFxuMTIzNTpcdHN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4xMjM2Olx0e1xuMTIzNzpcdCNpZmRlZiBDT05GSUdfU1lTQ1RMXG4xMjM4Olx0XHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSA9IGJybmZfdGFibGU7XG4xMjM5Olx0XHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xuMTI0MDpcdFxuMTI0MTpcdFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbjEyNDI6XHRcdFx0dGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoYnJuZl90YWJsZSksIEdGUF9LRVJORUwpO1xuMTI0MzpcdFx0XHRpZiAoIXRhYmxlKVxuMTI0NDpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTI0NTpcdFx0fVxuMTI0NjpcdFxuMTI0NzpcdFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcbjEyNDg6XHRcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZicm5ldC1cdTAwM2VjYWxsX2FycHRhYmxlcztcbjEyNDk6XHRcdHRhYmxlWzFdLmRhdGEgPSBcdTAwMjZicm5ldC1cdTAwM2VjYWxsX2lwdGFibGVzO1xuMTI1MDpcdFx0dGFibGVbMl0uZGF0YSA9IFx1MDAyNmJybmV0LVx1MDAzZWNhbGxfaXA2dGFibGVzO1xuMTI1MTpcdFx0dGFibGVbM10uZGF0YSA9IFx1MDAyNmJybmV0LVx1MDAzZWZpbHRlcl92bGFuX3RhZ2dlZDtcbjEyNTI6XHRcdHRhYmxlWzRdLmRhdGEgPSBcdTAwMjZicm5ldC1cdTAwM2VmaWx0ZXJfcHBwb2VfdGFnZ2VkO1xuMTI1MzpcdFx0dGFibGVbNV0uZGF0YSA9IFx1MDAyNmJybmV0LVx1MDAzZXBhc3Nfdmxhbl9pbmRldjtcbjEyNTQ6XHRcbjEyNTU6XHRcdGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChicm5ldCk7XG4xMjU2Olx0XG4xMjU3Olx0XHRicm5ldC1cdTAwM2VjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC9icmlkZ2VcJiMzNDssIHRhYmxlLFxuMTI1ODpcdFx0XHRcdFx0XHRcdEFSUkFZX1NJWkUoYnJuZl90YWJsZSkpO1xuMTI1OTpcdFx0aWYgKCFicm5ldC1cdTAwM2VjdGxfaGRyKSB7XG4xMjYwOlx0XHRcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKVxuMTI2MTpcdFx0XHRcdGtmcmVlKHRhYmxlKTtcbjEyNjI6XHRcbjEyNjM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMjY0Olx0XHR9XG4xMjY1Olx0I2VuZGlmXG4xMjY2Olx0XHRyZXR1cm4gMDtcbjEyNjc6XHR9XG4xMjY4Olx0XG4xMjY5Olx0c3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsXG4xMjcwOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxuMTI3MTpcdHtcbjEyNzI6XHQjaWZkZWYgQ09ORklHX1NZU0NUTFxuMTI3MzpcdFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWRlciA9IGJybmV0LVx1MDAzZWN0bF9oZHI7XG4xMjc0Olx0XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbjEyNzU6XHRcbjEyNzY6XHRcdGlmICghaGVhZGVyKVxuMTI3NzpcdFx0XHRyZXR1cm47XG4xMjc4Olx0XG4xMjc5Olx0XHR0YWJsZSA9IGhlYWRlci1cdTAwM2VjdGxfdGFibGVfYXJnO1xuMTI4MDpcdFx0dW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKGhlYWRlcik7XG4xMjgxOlx0XHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSlcbjEyODI6XHRcdFx0a2ZyZWUodGFibGUpO1xuMTI4MzpcdCNlbmRpZlxuMTI4NDpcdH1cbjEyODU6XHRcbjEyODY6XHRzdGF0aWMgaW50IF9fbmV0X2luaXQgYnJuZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4xMjg3Olx0e1xuMTI4ODpcdFx0aWYgKG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucykge1xuMTI4OTpcdFx0XHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG4xMjkwOlx0XG4xMjkxOlx0XHRcdGJybmV0LVx1MDAzZWluX3VzZXJucyA9IHRydWU7XG4xMjkyOlx0XHRcdHByX3dhcm5fb25jZShcJiMzNDticl9uZXRmaWx0ZXIgbm8gbG9uZ2VyIHN1cHBvcnRlZCBpbiB1c2VyIG5hbWVzcGFjZXNcXG5cJiMzNDspO1xuMTI5MzpcdFx0XHRyZXR1cm4gMDtcbjEyOTQ6XHRcdH1cbjEyOTU6XHRcbjEyOTY6XHRcdHJldHVybiBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KG5ldCk7XG4xMjk3Olx0fVxuMTI5ODpcdFxuMTI5OTpcdHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYnJuZl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4xMzAwOlx0e1xuMTMwMTpcdFx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcbjEzMDI6XHRcbjEzMDM6XHRcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG4xMzA0Olx0XHRpZiAoYnJuZXQtXHUwMDNlZW5hYmxlZCkge1xuMTMwNTpcdFx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGJyX25mX29wcywgQVJSQVlfU0laRShicl9uZl9vcHMpKTtcbjEzMDY6XHRcdFx0YnJuZXQtXHUwMDNlZW5hYmxlZCA9IGZhbHNlO1xuMTMwNzpcdFx0fVxuMTMwODpcdFxuMTMwOTpcdFx0YnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChuZXQsIGJybmV0KTtcbjEzMTA6XHR9XG4xMzExOlx0XG4xMzEyOlx0c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBicm5mX25ldF9vcHMgX19yZWFkX21vc3RseSA9IHtcbjEzMTM6XHRcdC5pbml0ID0gYnJuZl9pbml0X25ldCxcbjEzMTQ6XHRcdC5leGl0ID0gYnJuZl9leGl0X25ldCxcbjEzMTU6XHRcdC5pZCAgID0gXHUwMDI2YnJuZl9uZXRfaWQsXG4xMzE2Olx0XHQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnJuZl9uZXQpLFxuMTMxNzpcdH07XG4xMzE4Olx0XG4xMzE5Olx0c3RhdGljIGludCBfX2luaXQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAxNAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDYxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIC0gQnJpZGdlIE5ldGZpbHRlciBpbiBVc2VyIE5hbWVzcGFjZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBjb21taXQgZGlzYWJsZXMgYnJpZGdlIG5ldGZpbHRlciB3aGVuIHdlJiMzOTtyZSBpbnNpZGUgYSBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAoYG5ldC0mZ3Q7dXNlcl9ucyAhPSAmYW1wO2luaXRfdXNlcl9uc2ApLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBrZXkgaXMgaG93IGl0JiMzOTtzIGhhbmRsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBkZXZpY2UgcmVnaXN0cmF0aW9uLiBXaGVuIGBicm5mX2luaXRfbmV0YCBpcyBjYWxsZWQgd2l0aGluIGEgdXNlciBuYW1lc3BhY2UsIGl0IHNldHMgYGJybmV0LSZndDtpbl91c2VybnMgPSB0cnVlYC4gIFRoZW4sIHdoZW4gYSBicmlkZ2UgaXMgcmVnaXN0ZXJlZCwgYGJybmZfZGV2aWNlX2V2ZW50YCBjaGVja3MgYGJybmV0LSZndDtlbmFibGVkIHx8IGJybmV0LSZndDtpbl91c2VybnNgLiBCZWNhdXNlIGBicm5mLSZndDtpbl91c2VybnNgIGlzIG5vdyB0cnVlLCBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tzYCBpcyBuZXZlciBjYWxsZWQuIEFsc28sIGJlY2F1c2UgYGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXRgIGlzIG5vdCBjYWxsZWQsIGBicm5ldC0mZ3Q7Y3RsX2hkcmAgcmVtYWlucyBOVUxMLiBTdWJzZXF1ZW50bHksIG9uIGV4aXQgdmlhIGBicm5mX2V4aXRfbmV0YCwgYGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXRgIGNoZWNrcyBmb3IgYSBOVUxMIGhlYWRlciBhbmQgcmV0dXJucy4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZ1enphYmxlPyBUaW1lIHRvIGNoZWNrIHRoZSBydWxlcy4gVGhlIGd1aWRlbGluZXMgc2F5IG5vIGlmIGl0JiMzOTtzIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBkZWNvcmF0aW9uLCBjb25zdGFudHMsIG9yIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAgQWxzbywgY2VydGFpbiB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBhcmUgZXhjbHVkZWQsIGFzIGFyZSBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzLiBCdXQgdGhpcyBsb29rcyBkaWZmZXJlbnQuCgpUaGlzICpkZWZpbml0ZWx5KiB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiBwZXJuZXQgaW5pdGlhbGl6YXRpb24sIGhvdyBkZXZpY2UgZXZlbnRzIGFyZSBoYW5kbGVkIGZvciBicmlkZ2UgbmV0ZmlsdGVyLCBzeXNjdGwgcmVnaXN0cmF0aW9uIGFuZCBleGl0LCBhbmQgdGhlIGRpc2FibGluZyBvZiBgYnJfbmV0ZmlsdGVyYCBpbiBub24taW5pdCB1c2VyIG5hbWVzcGFjZXMuIEl0JiMzOTtzIHBsYXlpbmcgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZSBjcmVhdGlvbi9kZXN0cnVjdGlvbiBhbmQgYnJpZGdlIGNyZWF0aW9uIHdpdGhpbiB1c2VyIG5hbWVzcGFjZXMuIFRoaXMgaXMgKnRleHRib29rKiBzeXprYWxsZXIgbWF0ZXJpYWwuIENyZWF0aW5nIHVzZXIgbmFtZXNwYWNlcywgbmV0IG5hbWVzcGFjZXMgaW5zaWRlIHRob3NlLCBzZXR0aW5nIHVwIGJyaWRnZSBkZXZpY2VzLCByZWdpc3RlcmluZy91bnJlZ2lzdGVyaW5nIHN5c2N0bCwgYW5kIHRlYXJpbmcgZG93biB0aGUgbmFtZXNwYWNlc+KApiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBzeXprYWxsZXIgZXhjZWxzIGF0LCBhbmQgSSBjYW4gYmUgc3VyZSBpdCB3aWxsIGJlIHRlc3RpbmcgdGhpcyBjb2RlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBgQ09ORklHX0JSSURHRV9ORVRGSUxURVJgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGEgcXVpY2sgY2hlY2sgaW4gYG5ldC9LY29uZmlnYC4gWWVzLCB0aGlzIGlzIHdvcnRoIGZ1enppbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0VfTkVURklMVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yMjA9Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxuLS1cbm5ldC9LY29uZmlnLTIzMC1cbm5ldC9LY29uZmlnOjIzMTpjb25maWcgQlJJREdFX05FVEZJTFRFUlxubmV0L0tjb25maWctMjMyLVx0dHJpc3RhdGUgXCYjMzQ7QnJpZGdlZCBJUC9BUlAgcGFja2V0cyBmaWx0ZXJpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBuZXQvS2NvbmZpZ2AgZm9yIERlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMgb2YgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmtpbmcgbW9kdWxlLiBUaGUgbW9zdCBkaXJlY3QgcGF0aCwgYXMgYWx3YXlzLCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbmF2aWdhdGluZyB0byB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBleGFtaW5pbmcgYXJvdW5kIGxpbmUgMjMxLCBhcyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHlvdSBmaW5kIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBicmFuY2hpbmcgbG9naWMgZm9yIGEgZmVhdHVyZS4gQnkgZXhhbWluaW5nIHRoZSBpZmRlZnMgYW5kIGRlcGVuZGVuY2llcyBkZWNsYXJlZCBhcm91bmQgdGhhdCBwb2ludCwgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBwcmV0dHkgY2xlYXIgcGljdHVyZSBvZiB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgY29uZmlndXJlZCB0byBnZXQgdGhpcyB0aGluZyB3b3JraW5nLCBhbmQgYWxzbyB3aGF0IG90aGVyIGZ1bmN0aW9uYWxpdGllcyBkZXBlbmQgb24gaXQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBleHBsb3JhdGlvbiwgc2luY2UgdGhlc2UgdHlwZXMgb2YgZmlsZXMgdXN1YWxseSBoYXZlIGEgZ29vZCBvdmVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI1Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlIHlvdSBjYW4gc2VsZWN0IGJldHdlZW4gYWxsIHRoZSBuZXRmaWx0ZXIgbW9kdWxlcy5cbiAyMjY6XHRcdCAgSWYgeW91IHNheSBOIHRoZSBtb3JlIHVudXN1YWwgb25lcyB3aWxsIG5vdCBiZSBzaG93biBhbmQgdGhlXG4gMjI3Olx0XHQgIGJhc2ljIG9uZXMgbmVlZGVkIGJ5IG1vc3QgcGVvcGxlIHdpbGwgZGVmYXVsdCB0byAmIzM5O00mIzM5Oy5cbiAyMjg6XHRcbiAyMjk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAyMzA6XHRcbiAyMzE6XHRjb25maWcgQlJJREdFX05FVEZJTFRFUlxuIDIzMjpcdFx0dHJpc3RhdGUgXCYjMzQ7QnJpZGdlZCBJUC9BUlAgcGFja2V0cyBmaWx0ZXJpbmdcJiMzNDtcbiAyMzM6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gMjM0Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUiBcdTAwMjZcdTAwMjYgSU5FVFxuIDIzNTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAyMzY6XHRcdHNlbGVjdCBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxuIDIzNzpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gMjM4Olx0XHRoZWxwXG4gMjM5Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgbGV0IGFycHRhYmxlcyByZXNwLiBpcHRhYmxlcyBzZWUgYnJpZGdlZFxuIDI0MDpcdFx0ICBBUlAgcmVzcC4gSVAgdHJhZmZpYy4gSWYgeW91IHdhbnQgYSBicmlkZ2luZyBmaXJld2FsbCwgeW91IHByb2JhYmx5XG4gMjQxOlx0XHQgIHdhbnQgdGhpcyBvcHRpb24gZW5hYmxlZC5cbiAyNDI6XHRcdCAgRW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGRvZXNuJiMzOTt0IGVuYWJsZSBvciBkaXNhYmxlXG4gMjQzOlx0XHQgIGVidGFibGVzLlxuIDI0NDpcdFxuIDI0NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI0NjpcdFxuIDI0NzpcdHNvdXJjZSBcJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbiAyNDg6XHRzb3VyY2UgXCYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbiAyNDk6XHRzb3VyY2UgXCYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbiAyNTA6XHRzb3VyY2UgXCYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI1MTpcdFxuIDI1MjpcdGVuZGlmICMgaWYgTkVURklMVEVSXG4gMjUzOlx0XG4gMjU0Olx0c291cmNlIFwmIzM0O25ldC9zY3RwL0tjb25maWdcJiMzNDtcbiAyNTU6XHRzb3VyY2UgXCYjMzQ7bmV0L3Jkcy9LY29uZmlnXCYjMzQ7XG4gMjU2Olx0c291cmNlIFwmIzM0O25ldC90aXBjL0tjb25maWdcJiMzNDtcbiAyNTc6XHRzb3VyY2UgXCYjMzQ7bmV0L2F0bS9LY29uZmlnXCYjMzQ7XG4gMjU4Olx0c291cmNlIFwmIzM0O25ldC9sMnRwL0tjb25maWdcJiMzNDtcbiAyNTk6XHRzb3VyY2UgXCYjMzQ7bmV0LzgwMi9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTc0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIE5hbWVzcGFjZSBDb25maWd1cmF0aW9uIFJlbGV2YW5jZSoqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBmZWF0dXJlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudCB0byBteSB0ZXN0aW5nLiBGaXJzdCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYENPTkZJR19VU0VSX05TYCBhbmQgYENPTkZJR19ORVRfTlNgLiBNYWtlcyBzZW5zZTsgdGhvc2UgYXJlIHRoZSBuYW1lc3BhY2VzIEkmIzM5O20gbW9zdCBsaWtlbHkgdG8gcnVuIGludG8gaW4gdGhlIGNvbnRleHQgb2Ygd2hhdGV2ZXIgdGhpcyBmZWF0dXJlIGRvZXMuIEFyZSBgVVNFUl9OU2Agb3IgYE5FVF9OU2AgaW1wb3J0YW50IGZvciB0ZXN0aW5nPyBJIG5lZWQgdG8ga25vdyBpZiB0aGV5JiMzOTtyZSBldmVuIGZhY3RvcnMuIFRoZW4sIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIsIEkmIzM5O2xsIHRyYWNrIGRvd24gd2hlcmUgYFVTRVJfTlNgIGlzIGFjdHVhbGx5IGRlZmluZWQuIEkgd2FudCBhIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0VSX05TJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE0Mzg9Y29uZmlnIElQQ19OU1xuLS1cbmluaXQvS2NvbmZpZy0xNDQ1LVxuaW5pdC9LY29uZmlnOjE0NDY6Y29uZmlnIFVTRVJfTlNcbmluaXQvS2NvbmZpZy0xNDQ3LVx0Ym9vbCBcJiMzNDtVc2VyIG5hbWVzcGFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI4OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcga2V5IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBDT05GSUdfQlJJREdFYCwgYENPTkZJR19CUklER0VfTkVURklMVEVSYCwgYENPTkZJR19VU0VSX05TYCwgYW5kIGBDT05GSUdfTkVUX05TYC4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGJyaWRnaW5nIGFuZCBjb250YWluZXJpemF0aW9uLCBzbyB0aGVpciBzdGF0dXMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IHNldHVwLiBOb3csIHRvIGdldCB0aGUgc3BlY2lmaWNzIG9uIGhvdyB0aGlzIG5ldHdvcmsgYnJpZGdpbmcgaXMgaW1wbGVtZW50ZWQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBuZXQvYnJpZGdlL01ha2VmaWxlYC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGxvd2Rvd24gb24gdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGRlcGVuZGVuY2llcyBmb3IgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgSUVFRSA4MDIuMWQgZXRoZXJuZXQgYnJpZGdpbmcgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19CUklER0UpICYjNDM7PSBicmlkZ2Uub1xuICAgNzpcdFxuICAgODpcdGJyaWRnZS15XHQ6PSBici5vIGJyX2RldmljZS5vIGJyX2ZkYi5vIGJyX2ZvcndhcmQubyBicl9pZi5vIGJyX2lucHV0Lm8gXFxcbiAgIDk6XHRcdFx0XHRicl9pb2N0bC5vIGJyX3N0cC5vIGJyX3N0cF9icGR1Lm8gXFxcbiAgMTA6XHRcdFx0XHRicl9zdHBfaWYubyBicl9zdHBfdGltZXIubyBicl9uZXRsaW5rLm8gXFxcbiAgMTE6XHRcdFx0XHRicl9uZXRsaW5rX3R1bm5lbC5vIGJyX2FycF9uZF9wcm94eS5vXG4gIDEyOlx0XG4gIDEzOlx0YnJpZGdlLSQoQ09ORklHX1NZU0ZTKSAmIzQzOz0gYnJfc3lzZnNfaWYubyBicl9zeXNmc19ici5vXG4gIDE0Olx0XG4gIDE1Olx0YnJpZGdlLSQoc3Vic3QgbSx5LCQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpKSAmIzQzOz0gYnJfbmZfY29yZS5vXG4gIDE2Olx0XG4gIDE3Olx0YnJfbmV0ZmlsdGVyLXkgOj0gYnJfbmV0ZmlsdGVyX2hvb2tzLm9cbiAgMTg6XHRicl9uZXRmaWx0ZXItJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICYjNDM7PSBicl9uZXRmaWx0ZXJfaXB2Ni5vXG4gIDE5Olx0b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICYjNDM7PSBicl9uZXRmaWx0ZXIub1xuICAyMDpcdFxuICAyMTpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgJiM0Mzs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xuICAyMjpcdFxuICAyMzpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICYjNDM7PSBicl92bGFuLm8gYnJfdmxhbl90dW5uZWwubyBicl92bGFuX29wdGlvbnMubyBicl9tc3Qub1xuICAyNDpcdFxuICAyNTpcdGJyaWRnZS0kKENPTkZJR19ORVRfU1dJVENIREVWKSAmIzQzOz0gYnJfc3dpdGNoZGV2Lm9cbiAgMjY6XHRcbiAgMjc6XHRvYmotJChDT05GSUdfTkVURklMVEVSKSAmIzQzOz0gbmV0ZmlsdGVyL1xuICAyODpcdFxuICAyOTpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfTVJQKVx0JiM0Mzs9IGJyX21ycF9zd2l0Y2hkZXYubyBicl9tcnAubyBicl9tcnBfbmV0bGluay5vXG4gIDMwOlx0XG4gIDMxOlx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9DRk0pXHQmIzQzOz0gYnJfY2ZtLm8gYnJfY2ZtX25ldGxpbmsub1xuICAzMjpcdFxuICAzMzpcdGlmZGVmIENPTkZJR19HQ09WX1BST0ZJTEVfTkVURklMVEVSXG4gIDM0Olx0R0NPVl9QUk9GSUxFX2JyX25mX2NvcmUubyA6PSB5XG4gIDM1Olx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9ob29rcy5vIDo9IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNTYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQnJpZGdlIE5ldGZpbHRlciBIb29rcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgZm9jdXMgaXMgdGhlIGBuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGltcGxlbWVudGVkIGluIHRoZXJlLCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gaXQuIEkgY291bGQgdXNlIGBncmVwYCB0byBwdWxsIHRoZW0gb3V0LCB0aGF0JiMzOTtzIGdlbmVyYWxseSBhIHByZXR0eSBmYXN0IGFwcHJvYWNoLCBvciBJIGNhbiBqdXN0IHNjYW4gdGhlIGZpbGUgZGlyZWN0bHkuIEVpdGhlciB3YXksIEkgbmVlZCBhIHJhcGlkIG92ZXJ2aWV3IG9mIHRoZSBmdW5jdGlvbiBzZXQgdG8gdW5kZXJzdGFuZCB0aGUgbmV0ZmlsdGVyIGhvb2tzIHJlbGF0ZWQgdG8gdGhlIGJyaWRnaW5nIHN1YnN5c3RlbS4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGdyYXNwIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgaG93IHBhY2tldHMgYXJlIHByb2Nlc3NlZCBpbiB0aGF0IHBhcnQgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTU1PXN0cnVjdCBicm5mX25ldCB7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04Mi1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6ODM6c3RhdGljIGlubGluZSBfX2JlMTYgdmxhbl9wcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04NC17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05Mi1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6OTM6c3RhdGljIGlubGluZSBib29sIGlzX3ZsYW5faXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NC17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05OS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTAwOnN0YXRpYyBpbmxpbmUgYm9vbCBpc192bGFuX2lwdjYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAxLVx0XHRcdFx0Y29uc3Qgc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTA4LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDk6c3RhdGljIGlubGluZSBib29sIGlzX3ZsYW5fYXJwKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTEwLXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExNS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTE2OnN0YXRpYyBpbmxpbmUgX19iZTE2IHBwcG9lX3Byb3RvKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExNy17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjEtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyMjpzdGF0aWMgaW5saW5lIGJvb2wgaXNfcHBwb2VfaXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjMte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI5LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzA6c3RhdGljIGlubGluZSBib29sIGlzX3BwcG9lX2lwdjYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMxLVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTE0Mz1zdHJ1Y3QgYnJuZl9mcmFnX2RhdGEge1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTUxLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNTI6c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBicm5mX2ZyYWdfZGF0YSwgYnJuZl9mcmFnX2RhdGFfc3RvcmFnZSkgPSB7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE1My1cdC5iaF9sb2NrID0gSU5JVF9MT0NBTF9MT0NLKGJoX2xvY2spLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTU1LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNTY6c3RhdGljIHZvaWQgbmZfYnJpZGdlX2luZm9fZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xNTcte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTYwLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNjE6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqYnJpZGdlX3BhcmVudChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xNjIte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTY4LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZV91bnNoYXJlKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE3MC17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xNzMtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjE3NDp1bnNpZ25lZCBpbnQgbmZfYnJpZGdlX2VuY2FwX2hlYWRlcl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTc1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE4NS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTg2OnN0YXRpYyBpbmxpbmUgdm9pZCBuZl9icmlkZ2VfcHVsbF9lbmNhcF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTg3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE5My1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTk0OnN0YXRpYyBpbmxpbmUgdm9pZCBuZl9icmlkZ2VfcHVsbF9lbmNhcF9oZWFkZXJfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTk1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTIwNi1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MjA3OnN0YXRpYyBpbnQgYnJfdmFsaWRhdGVfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTIwOC17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNTUtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjI1Njp2b2lkIG5mX2JyaWRnZV91cGRhdGVfcHJvdG9jb2woc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMjU3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTI3Ni0gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Mjc3OmludCBicl9uZl9wcmVfcm91dGluZ19maW5pc2hfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNzgte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MzMxPXN0YXRpYyBpbmxpbmUgYm9vbFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzozMzI6YnJfbmZfaXB2NF9kYWRkcl93YXNfY2hhbmdlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zMzMtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZSlcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM3Ni0gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Mzc3OnN0YXRpYyBpbnQgYnJfbmZfcHJlX3JvdXRpbmdfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zNzgte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDM1LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0MzY6c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicm5mX2dldF9sb2dpY2FsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00MzctXHRcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDU0LS8qIFNvbWUgY29tbW9uIGNvZGUgZm9yIElQdjQvSVB2NiAqL1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0NTU6c3RydWN0IG5ldF9kZXZpY2UgKnNldHVwX3ByZV9yb3V0aW5nKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDU2LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ4My0gKiBhZGRyZXNzIHRvIGJlIGFibGUgdG8gZGV0ZWN0IEROQVQgYWZ0ZXJ3YXJkcy4gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NDg0OnN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcHJlX3JvdXRpbmcodm9pZCAqcHJpdixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDg1LVx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTU4NS0gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NTg2OnN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfbG9jYWxfaW4odm9pZCAqcHJpdixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTg3LVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTYzOS0vKiBQRl9CUklER0UvRk9SV0FSRCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo2NDA6c3RhdGljIGludCBicl9uZl9mb3J3YXJkX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNjQxLXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTY3My1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Njc0OnN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfZm9yd2FyZF9pcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02NzUtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTcyOC1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzI5OnN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfZm9yd2FyZF9hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzMwLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzY5LSAqL1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo3NzA6c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9mb3J3YXJkKHZvaWQgKnByaXYsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTc3MS1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTc4NS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Nzg2OnN0YXRpYyBpbnQgYnJfbmZfcHVzaF9mcmFnX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTc4Ny17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz04MDk9c3RhdGljIGludFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo4MTA6YnJfbmZfaXBfZnJhZ21lbnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTgxMS1cdFx0ICBpbnQgKCpvdXRwdXQpKHN0cnVjdCBuZXQgKiwgc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKikpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04MjYtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjgyNzpzdGF0aWMgdW5zaWduZWQgaW50IG5mX2JyaWRnZV9tdHVfcmVkdWN0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTgyOC17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04MzUtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjgzNjpzdGF0aWMgaW50IGJyX25mX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04Mzcte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtOTI1LS8qIFBGX0JSSURHRS9QT1NUX1JPVVRJTkcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjkyNjpzdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX3Bvc3Rfcm91dGluZyh2b2lkICpwcml2LFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05MjctXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk3NC0gKiBmb3IgdGhlIHNlY29uZCB0aW1lLiAqL1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo5NzU6c3RhdGljIHVuc2lnbmVkIGludCBpcF9zYWJvdGFnZV9pbih2b2lkICpwcml2LFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NzYtXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAwNS0gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTAwNjpzdGF0aWMgdm9pZCBicl9uZl9wcmVfcm91dGluZ19maW5pc2hfYnJpZGdlX3Nsb3coc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAwNy17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDMwLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDMxOnN0YXRpYyBpbnQgYnJfbmZfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAzMi17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMDQ4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgYnJfbmZfb3BzW10gPSB7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDg4LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDg5OnN0YXRpYyBpbnQgYnJuZl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwOTAtXHRcdFx0ICAgICB2b2lkICpwdHIpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMTE1PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYnJuZl9ub3RpZmllciBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTEyMy0gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTEyNDppbnQgYnJfbmZfaG9va190aHJlc2godW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTEyNS1cdFx0ICAgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTE3Mj1zdGF0aWNcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTE3MzppbnQgYnJuZl9zeXNjdGxfY2FsbF90YWJsZXMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExNzQtXHRcdFx0ICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMTg1PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGJybmZfdGFibGVbXSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMjMtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyMjQ6c3RhdGljIGlubGluZSB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChzdHJ1Y3QgYnJuZl9uZXQgKmJybmYpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMjUte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTIzNC1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTIzNTpzdGF0aWMgaW50IGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjM2LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyNjgtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyNjk6c3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyNzAtXHRcdFx0XHRcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI4NS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTI4NjpzdGF0aWMgaW50IF9fbmV0X2luaXQgYnJuZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyODcte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI5OC1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTI5OTpzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJybmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzAwLXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEzMTI9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBicm5mX25ldF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMTgtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMTk6c3RhdGljIGludCBfX2luaXQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZClcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMyMC17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzM3LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzM4OnN0YXRpYyB2b2lkIF9fZXhpdCBicl9uZXRmaWx0ZXJfZmluaSh2b2lkKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzM5LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzNDQtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzNDU6bW9kdWxlX2luaXQoYnJfbmV0ZmlsdGVyX2luaXQpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzQ2Om1vZHVsZV9leGl0KGJyX25ldGZpbHRlcl9maW5pKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTM0Ny1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTM0ODpNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzQ5Ok1PRFVMRV9BVVRIT1IoXCYjMzQ7TGVubmVydCBCdXl0ZW5oZWsgXHUwMDNjYnV5dGVuaEBnbnUub3JnXHUwMDNlXCYjMzQ7KTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTM1MDpNT0RVTEVfQVVUSE9SKFwmIzM0O0JhcnQgRGUgU2NodXltZXIgXHUwMDNjYmRzY2h1eW1AcGFuZG9yYS5iZVx1MDAzZVwmIzM0Oyk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzNTE6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0xpbnV4IGV0aGVybmV0IG5ldGZpbHRlciBmaXJld2FsbCBicmlkZ2VcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYxOQoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiA2NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBicl9uZXRmaWx0ZXJgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBrZXJuZWwgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiAgSSYjMzk7dmUgYWxyZWFkeSBwaWNrZWQgb3V0IGBicm5mX2RldmljZV9ldmVudGAsIGBicm5mX2luaXRfbmV0YCwgYW5kIGBicm5mX2V4aXRfbmV0YCBhcyBjcml0aWNhbCwgYWxvbmcgd2l0aCBgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldGAgYW5kIGBicl9uZXRmaWx0ZXJfc3lzY3RsX2V4aXRfbmV0YCBhbmQgYGJyX25mX2hvb2tfdGhyZXNoYCAodGhvdWdoIHRoYXQgbGFzdCBvbmUgbWlnaHQgYmUgbW9yZSBvZiBhIHRocmVzaG9sZCB2YWx1ZSwgSSYjMzk7bGwga2VlcCBpdCBvbiB0aGUgcmFkYXIgZm9yIG5vdykuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgZW50cnkgcG9pbnRzIHJlbGF0ZWQgdG8gdGhlIGNoYW5nZXMgaW4gdGhlIGBicl9uZXRmaWx0ZXJgIG1vZHVsZS4KCk5leHQsIEkgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBgQ09ORklHX2Agb3B0aW9ucy4gSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBoZWF2aWx5IGNvbmRpdGlvbmFsLiAgSSYjMzk7dmUgY3Jvc3MtcmVmZXJlbmNlZCB3aXRoIHRoZSBLY29uZmlnIGZpbGVzLCBhbmQgaXQgbG9va3MgbGlrZSBgQlJJREdFX05FVEZJTFRFUmAsIGBCUklER0VgLCBgTkVURklMVEVSYCwgYFVTRVJfTlNgLCBhbmQgYE5FVF9OU2AgYXJlIHRoZSBrZXkgZW5hYmxpbmcgY29uZmlncy4gTm90YWJseSwgYEJSSURHRV9ORVRGSUxURVJgIGhhcyBkZXBlbmRlbmNpZXMgb24gYm90aCBgQlJJREdFYCBhbmQgYE5FVEZJTFRFUmAsIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgd2hpY2ggSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGluY2x1ZGUuIGBVU0VSX05TYCBhbmQgYE5FVF9OU2AgYXJlIGFsc28gZXhwbGljaXRseSByZXF1aXJlZC4gIEl0JiMzOTtzIGNyaXRpY2FsIHRoYXQgSSBkb24mIzM5O3Qgb3Zlcmxvb2sgdGhlc2UgZGVwZW5kZW5jaWVzOyBvdGhlcndpc2UsIHRoZSBjb2RlIHdvbiYjMzk7dCBldmVuIGNvbXBpbGUgaW50byB0aGUga2VybmVsLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVhc29uaW5nIGJlaGluZCBhbGwgdGhpcy4gVGhlIHBhdGNoIGlzIGFib3V0IHJlc3RyaWN0aW5nIHRoZSBob29rcyBhbmQgc3lzY3RsIHJlZ2lzdHJhdGlvbiBvZiBgYnJfbmV0ZmlsdGVyYCB3aXRoaW4gdXNlciBuYW1lc3BhY2VzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgcGF0aHMgb2YgdGhpcyBtb2R1bGUsIGluY2x1ZGluZyBgYnJuZl9pbml0X25ldGAsIGBicm5mX2RldmljZV9ldmVudGAgYW5kIHN5c2N0bCBjbGVhbnVwIGxvZ2ljLCB0byBhdm9pZCBydW5uaW5nIGluIHVzZXIgbmFtZXNwYWNlcy4gIFRoaXMgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBuYW1lc3BhY2UgYW5kIGJyaWRnZSBkZXZpY2UgYmVoYXZpb3IgaW4gbm9uLXJvb3QgdXNlciBuYW1lc3BhY2VzLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGRlZmluaXRlbHkgdGVzdGFibGUgYW5kIHJlbGV2YW50IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgZ29vZC4gIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgdGVzdHMgY292ZXIgdGhpcyBhbHRlcmVkIGxvZ2ljLCBlc3BlY2lhbGx5IGFyb3VuZCBpbml0aWFsaXphdGlvbiwgZGVpbml0aWFsaXphdGlvbiwgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBzeXNjdGxzIHdoZW4gZGVhbGluZyB3aXRoIHVzZXIgbmFtZXNwYWNlcy4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoZXNlIGZpbmRpbmdzLiBJJiMzOTttIHJlYWR5IHRvICYjMzQ7c2V0LXJlc3VsdHMmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRV9ORVRGSUxURVImIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtVU0VSX05TJiMzNDssCiAgICAmIzM0O05FVF9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JybmZfZGV2aWNlX2V2ZW50JiMzNDssCiAgICAmIzM0O2JybmZfaW5pdF9uZXQmIzM0OywKICAgICYjMzQ7YnJuZl9leGl0X25ldCYjMzQ7LAogICAgJiMzNDticl9uZl9ob29rX3RocmVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGJyaWRnZSBuZXRmaWx0ZXIgaW5pdGlhbGl6YXRpb24gYW5kIGRldmljZSBldmVudCBoYW5kbGluZyB0byBkaXNhYmxlIGJyX25ldGZpbHRlciBhbmQgaXRzIHN5c2N0bCByZWdpc3RyYXRpb24gd2l0aGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcy4gVGhpcyBhbHRlcnMgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgYnJpZGdlIGRldmljZSBzZXR1cC90ZWFyZG93biBleGVjdXRpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0VfTkVURklMVEVSJiMzNDssCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7LAogICAgJiMzNDtORVRfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticm5mX2RldmljZV9ldmVudCYjMzQ7LAogICAgJiMzNDticm5mX2luaXRfbmV0JiMzNDssCiAgICAmIzM0O2JybmZfZXhpdF9uZXQmIzM0OywKICAgICYjMzQ7YnJfbmZfaG9va190aHJlc2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBicmlkZ2UgbmV0ZmlsdGVyIGluaXRpYWxpemF0aW9uIGFuZCBkZXZpY2UgZXZlbnQgaGFuZGxpbmcgdG8gZGlzYWJsZSBicl9uZXRmaWx0ZXIgYW5kIGl0cyBzeXNjdGwgcmVnaXN0cmF0aW9uIHdpdGhpbiBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZXMuIFRoaXMgYWx0ZXJzIGNvcmUgbmV0d29yayBuYW1lc3BhY2UgYW5kIGJyaWRnZSBkZXZpY2Ugc2V0dXAvdGVhcmRvd24gZXhlY3V0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RyaWN0cyB0aGUgbGVnYWN5IGJyX25ldGZpbHRlciBtb2R1bGUgaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzIGJ5IHNldHRpbmcgYSBuZXcgYm9vbGVhbiBmbGFnIChgaW5fdXNlcm5zYCksIGF2b2lkaW5nIHN5c2N0bCByZWdpc3RyYXRpb24sIGFuZCBza2lwcGluZyBuZXRmaWx0ZXIgaG9vayByZWdpc3RyYXRpb24gb24gZGV2aWNlIGV2ZW50cy5cblxuLSBNZW1vcnkgQWxsb2NhdGlvbiBcdTAwMjYgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgYnJuZl9uZXRgIGlzIGFsbG9jYXRlZCBhcyBwZXItbmV0bnMgc3RvcmFnZSBieSB0aGUgcGVybmV0IHN1YnN5c3RlbSB1c2luZyB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeSAoYGt6YWxsb2NgKS4gVGhlIGFkZGVkIGBpbl91c2VybnNgIGJvb2xlYW4gYW5kIGV4aXN0aW5nIGZpZWxkcyBhcmUgc2FmZWx5IHplcm8taW5pdGlhbGl6ZWQgb24gYWxsb2NhdGlvbi5cbi0gTm8gSW5mbyBMZWFrcyBvciBVbmluaXRpYWxpemVkIFJlYWRzOiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgYWxzbyBndWFyZHMgc3lzY3RsIGNsZWFudXAgYWdhaW5zdCBOVUxMIHBvaW50ZXJzIChgY3RsX2hkcmApIHdoZW4gc3lzY3RsIHJlZ2lzdHJhdGlvbiB3YXMgc2tpcHBlZC5cbi0gU3RhbmRhcmQgU2FuaXRpemVyIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBsaWZlY3ljbGUsIG51bGwgZGVyZWZlcmVuY2VzLCBvciBuZXRucyBkZXN0cnVjdGlvbiBhcmUgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE0NjczNTEwYTJhOTZiMjE1NjViOGNkMTA0YWM4MzAwZGZlNTJiYjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAyMjozMjo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3QKaW5kZXggYzFlNmVhNTJjOWU1OS4uZGRlZDFhNmVkZDYwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3QKQEAgLTI3Nyw4ICYjNDM7Mjc3LDkgQEAgTmV0ZmlsdGVyCiA9PT09PT09PT0KIAogVGhlIGJyaWRnZSBuZXRmaWx0ZXIgbW9kdWxlIGlzIGEgbGVnYWN5IGZlYXR1cmUgdGhhdCBhbGxvd3MgdG8gZmlsdGVyIGJyaWRnZWQKLXBhY2tldHMgd2l0aCBpcHRhYmxlcyBhbmQgaXA2dGFibGVzLiBJdHMgdXNlIGlzIGRpc2NvdXJhZ2VkLiBVc2VycyBzaG91bGQKLWNvbnNpZGVyIHVzaW5nIG5mdGFibGVzIGZvciBwYWNrZXQgZmlsdGVyaW5nLgomIzQzO3BhY2tldHMgd2l0aCBpcHRhYmxlcyBhbmQgaXA2dGFibGVzLiBUaGlzIGZlYXR1cmUgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsIGFuZAomIzQzO25vdCBhdmFpbGFibGUgaW4gdXNlciBuYW1lc3BhY2VzLiBDb25zaWRlciB1c2luZyBuZnRhYmxlcyBmb3IgcGFja2V0IGZpbHRlcmluZwomIzQzO2luc3RlYWQuCiAKIFRoZSBvbGRlciBlYnRhYmxlcyB0b29sIGlzIG1vcmUgZmVhdHVyZS1saW1pdGVkIGNvbXBhcmVkIHRvIG5mdGFibGVzLCBidXQKIGp1c3QgbGlrZSBuZnRhYmxlcyBpdCBkb2VzbiYjMzk7dCBuZWVkIHRoaXMgbW9kdWxlIGVpdGhlciB0byBmdW5jdGlvbi4KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jCmluZGV4IDBhMzk0ZTVmNDM5MTYuLmUxNTM1NWZmMjE1YTcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYwpAQCAtNTQsNiAmIzQzOzU0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBicm5mX25ldF9pZCBfX3JlYWRfbW9zdGx5OwogCiBzdHJ1Y3QgYnJuZl9uZXQgewogCWJvb2wgZW5hYmxlZDsKJiM0MzsJYm9vbCBpbl91c2VybnM7CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmN0bF9oZHI7CkBAIC0xMTAwLDcgJiM0MzsxMTAxLDcgQEAgc3RhdGljIGludCBicm5mX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCwKIAogCW5ldCA9IGRldl9uZXQoZGV2KTsKIAlicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpOwotCWlmIChicm5ldC0mZ3Q7ZW5hYmxlZCkKJiM0MzsJaWYgKGJybmV0LSZndDtlbmFibGVkIHx8IGJybmV0LSZndDtpbl91c2VybnMpCiAJCXJldHVybiBOT1RJRllfT0s7CiAKIAlyZXQgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBicl9uZl9vcHMsIEFSUkFZX1NJWkUoYnJfbmZfb3BzKSk7CkBAIC0xMjI5LDkgJiM0MzsxMjMwLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRmaWx0ZXJfc3lzY3RsX2RlZmF1bHQoc3RydWN0IGJybmZfbmV0ICpicm5mKQogCWJybmYtJmd0O2ZpbHRlcl9wcHBvZV90YWdnZWQgPSAwOwogCWJybmYtJmd0O3Bhc3Nfdmxhbl9pbmRldiA9IDA7CiB9CiYjNDM7I2VuZGlmCiAKIHN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiYjNDM7I2lmZGVmIENPTkZJR19TWVNDVEwKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSA9IGJybmZfdGFibGU7CiAJc3RydWN0IGJybmZfbmV0ICpicm5ldDsKIApAQCAtMTI1OSwyNSAmIzQzOzEyNjIsMzkgQEAgc3RhdGljIGludCBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0KJiM0MzsjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KQogewotCWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlID0gYnJuZXQtJmd0O2N0bF9oZHItJmd0O2N0bF90YWJsZV9hcmc7CiYjNDM7I2lmZGVmIENPTkZJR19TWVNDVEwKJiM0MzsJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWRlciA9IGJybmV0LSZndDtjdGxfaGRyOwomIzQzOwljb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIAotCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShicm5ldC0mZ3Q7Y3RsX2hkcik7CiYjNDM7CWlmICghaGVhZGVyKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0YWJsZSA9IGhlYWRlci0mZ3Q7Y3RsX3RhYmxlX2FyZzsKJiM0MzsJdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKGhlYWRlcik7CiAJaWYgKCFuZXRfZXEobmV0LCAmYW1wO2luaXRfbmV0KSkKIAkJa2ZyZWUodGFibGUpOwomIzQzOyNlbmRpZgogfQogCiBzdGF0aWMgaW50IF9fbmV0X2luaXQgYnJuZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiYjNDM7CWlmIChuZXQtJmd0O3VzZXJfbnMgIT0gJmFtcDtpbml0X3VzZXJfbnMpIHsKJiM0MzsJCXN0cnVjdCBicm5mX25ldCAqYnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTsKJiM0MzsKJiM0MzsJCWJybmV0LSZndDtpbl91c2VybnMgPSB0cnVlOwomIzQzOwkJcHJfd2Fybl9vbmNlKCYjMzQ7YnJfbmV0ZmlsdGVyIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gdXNlciBuYW1lc3BhY2VzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCXJldHVybiBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KG5ldCk7CiB9Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKQEAgLTEyODksMTUgJiM0MzsxMzA2LDExIEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYnJuZl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiAJCWJybmV0LSZndDtlbmFibGVkID0gZmFsc2U7CiAJfQogCi0jaWZkZWYgQ09ORklHX1NZU0NUTAogCWJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXQobmV0LCBicm5ldCk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBicm5mX25ldF9vcHMgX19yZWFkX21vc3RseSA9IHsKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCiAJLmluaXQgPSBicm5mX2luaXRfbmV0LAotI2VuZGlmCiAJLmV4aXQgPSBicm5mX2V4aXRfbmV0LAogCS5pZCAgID0gJmFtcDticm5mX25ldF9pZCwKIAkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnJuZl9uZXQpLApAQCAtMTMxOCw3ICYjNDM7MTMzMSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJyX25ldGZpbHRlcl9pbml0KHZvaWQpCiAJfQogCiAJUkNVX0lOSVRfUE9JTlRFUihuZl9icl9vcHMsICZhbXA7YnJfb3BzKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgJiMzNDtCcmlkZ2UgZmlyZXdhbGxpbmcgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwlwcl93YXJuKCYjMzQ7YnJfbmV0ZmlsdGVyIGlzIHNsYXRlZCBmb3IgcmVtb3ZhbCBpbiAyMDI3LlxuJiMzNDspOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjMyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gTGV0JiMzOTtzIHNlZS4uLgoKMS4gICoqRG9jdW1lbnRhdGlvbiBVcGRhdGU6KiogQSBkb2N1bWVudGF0aW9uIHVwZGF0ZSB0byBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RgLiBUaGF0JiMzOTtzIG5vdCBsaWtlbHkgdG8gYmUgYSBmdXp6ZXIgdGFyZ2V0IGRpcmVjdGx5LCBpdCYjMzk7cyBpbmZvcm1hdGlvbmFsLgoyLiAgKipgbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY2AgQ2hhbmdlczoqKiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIHByb2JhYmx5IGFyZS4gTGV0JiMzOTtzIHNlZS4uLgoKICAgICogICBBIG5ldyBib29sZWFuIGBpbl91c2VybnNgIGlzIGFkZGVkIHRvIHRoZSBgc3RydWN0IGJybmZfbmV0YC4gT2theSwgdGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gaG93IHVzZXIgbmFtZXNwYWNlcyBhcmUgaGFuZGxlZC4KICAgICogICBUaGUgYGJybmZfZGV2aWNlX2V2ZW50YCBmdW5jdGlvbiBub3cgY2hlY2tzIGBicm5ldC0mZ3Q7ZW5hYmxlZCB8fCBicm5ldC0mZ3Q7aW5fdXNlcm5zYC4gVGhlIGFkZGl0aW9uIG9mIGBpbl91c2VybnNgIHRvIHRoZSBjb25kaXRpb24gaXMgZGVmaW5pdGVseSB3b3J0aCBpbnZlc3RpZ2F0aW5nLgogICAgKiAgIFN5c2N0bCBjb25maWd1cmF0aW9uIGlzIGJlaW5nIHJlZmFjdG9yZWQuIFRoZSBgI2lmZGVmIENPTkZJR19TWVNDVExgIGd1YXJkcyBhcmUgYmVpbmcgcmVtb3ZlZC4gVGhpcyBwb2ludHMgdG8gYSBjaGFuZ2UgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHN5c2N0bCBzZXR0aW5ncyB3aXRoaW4gdGhlIGBicl9uZXRmaWx0ZXJgIG1vZHVsZS4gSXQmIzM5O3MgcG9zc2libGUgdGhhdCBjb25maWd1cmF0aW9uIGNoYW5nZXMgbWF5IGludGVyYWN0IHdpdGggdGhlIG5ldHdvcmsgYnJpZGdlIGluIHVuZXhwZWN0ZWQgd2F5cy4KICAgICogICBOb3csIGluIGBicm5mX2luaXRfbmV0YCwgdGhlIGNvcmUgbG9naWMgbG9va3MgbGlrZSBpdCYjMzk7cyBoYW5kbGluZyB1c2VyIG5hbWVzcGFjZSBzY2VuYXJpb3MuIEl0IGFwcGVhcnMgdGhlcmUmIzM5O3MgbmV3IGxvZ2ljIHRvIGRpc2FibGUgY2VydGFpbiBmdW5jdGlvbmFsaXR5IGluIHVzZXIgbmFtZXNwYWNlcywgd2l0aCBhIHdhcm5pbmcuIENydWNpYWxseSwgdGhlIGNvZGUgbm93IHNldHMgYGJybmV0LSZndDtpbl91c2VybnMgPSB0cnVlYCBpZiB0aGUgbmV0d29yayBuYW1lc3BhY2UgaXMgKm5vdCogdGhlIGluaXRpYWwgb25lLiBUaGlzIGltcGxpZXMgYSBwb3RlbnRpYWxseSBkaWZmZXJlbnQgY29kZSBwYXRoIGFuZCBiZWhhdmlvciB3aGVuIHJ1bm5pbmcgd2l0aGluIGEgdXNlciBuYW1lc3BhY2UuCiAgICAqICAgYC5pbml0ID0gYnJuZl9pbml0X25ldGAgaXMgbm93IGFsd2F5cyBzZXQgaW4gYGJybmZfbmV0X29wc2AuIFRoZSBndWFyZCBpcyBnb25lLiBUaGlzIGxpa2VseSBtZWFucyBpbml0aWFsaXphdGlvbiBoYXBwZW5zIHVuY29uZGl0aW9uYWxseSBub3cuCiAgICAqICAgVGhlIHBlcm5ldCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYGJybmZfbmV0X29wc2AgaXMgdXNpbmcgYC5zaXplID0gc2l6ZW9mKHN0cnVjdCBicm5mX25ldClgLiBQZXJuZXRzIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgYnkgdGhlIG5ldCBuYW1lc3BhY2UgaW5mcmFzdHJ1Y3R1cmUuIE9rYXksIEkgd2FudCB0byBkcmlsbCBkb3duIGludG8gdGhlIHBlcm5ldCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBiZWNhdXNlIGl0IGNvdWxkIGJlIGEgc291cmNlIG9mIG1lbW9yeSBjb3JydXB0aW9uIGlmIGhhbmRsZWQgaW5jb3JyZWN0bHkuCgpUbyBnZXQgYSBiZXR0ZXIgcGljdHVyZSwgSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jYCB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHBlcm5ldCBzdHJ1Y3R1cmUgaXMgdXNlZCwgaG93IHRoZSBgaW5fdXNlcm5zYCBmbGFnIGlzIHVzZWQsIGFuZCBob3cgdGhlc2Ugc3lzY3RsIGNoYW5nZXMgYW5kIHVzZXIgbmFtZXNwYWNlIGhhbmRsaW5nIGludGVyYWN0LiBHaXZlbiB0aGUgdXNlciBuYW1lc3BhY2UgaW50ZXJhY3Rpb24gYW5kIHRoZSByZWZhY3RvcmluZywgdGhpcyBwYXRjaCBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIEtNU0FOIGZ1enppbmcsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGJyaWRnZSBhbmQgdXNlciBuYW1lc3BhY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticm5mX25ldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTItXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUzOnN0YXRpYyB1bnNpZ25lZCBpbnQgYnJuZl9uZXRfaWQgX19yZWFkX21vc3RseTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTQtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjU1OnN0cnVjdCBicm5mX25ldCB7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTU2LVx0Ym9vbCBlbmFibGVkO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9OTM9c3RhdGljIGlubGluZSBib29sIGlzX3ZsYW5faXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NC17XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjk1Olx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05Ni1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEwMD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmxhbl9pcHY2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDIte1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDM6XHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwNC1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEwOT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmxhbl9hcnAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMTAte1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMTE6XHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExMi1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEyMj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcHBwb2VfaXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjMte1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMjQ6XHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyNS1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEzMD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcHBwb2VfaXB2Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMyLXtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTMzOlx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzQtXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz00MzY9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicm5mX2dldF9sb2dpY2FsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDQwLVx0c3RydWN0IG5ldF9kZXZpY2UgKnZsYW4sICpicjtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NDQxOlx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00NDItXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz00ODQ9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZyh2b2lkICpwcml2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDkxLVx0X191MzIgbGVuID0gbmZfYnJpZGdlX2VuY2FwX2hlYWRlcl9sZW4oc2tiKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NDkyOlx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDkzLVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTAxLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1MDI6XHRicm5ldCA9IG5ldF9nZW5lcmljKHN0YXRlLVx1MDAzZW5ldCwgYnJuZl9uZXRfaWQpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MDMtXHRpZiAoSVNfSVBWNihza2IpIHx8IGlzX3ZsYW5faXB2Nihza2IsIHN0YXRlLVx1MDAzZW5ldCkgfHxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTcyOT1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfYXJwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03MzQtXHRzdHJ1Y3QgbmV0X2RldmljZSAqKmQgPSAoc3RydWN0IG5ldF9kZXZpY2UgKiopKHNrYi1cdTAwM2VjYik7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjczNTpcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQ7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTczNi1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTc0MS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzQyOlx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhzdGF0ZS1cdTAwM2VuZXQsIGJybmZfbmV0X2lkKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzQzLVx0aWYgKCFicm5ldC1cdTAwM2VjYWxsX2FycHRhYmxlcyBcdTAwMjZcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfQVJQVEFCTEVTKSlcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEwODk9c3RhdGljIGludCBicm5mX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwOTItXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEwOTM6XHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDk0LVx0c3RydWN0IG5ldCAqbmV0O1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTEwMi1cdG5ldCA9IGRldl9uZXQoZGV2KTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTEwMzpcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExMDQtXHRpZiAoYnJuZXQtXHUwMDNlZW5hYmxlZCB8fCBicm5ldC1cdTAwM2Vpbl91c2VybnMpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMTg1PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGJybmZfdGFibGVbXSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMjMtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyMjQ6c3RhdGljIGlubGluZSB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChzdHJ1Y3QgYnJuZl9uZXQgKmJybmYpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMjUte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTIzNT1zdGF0aWMgaW50IGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTIzOC1cdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlID0gYnJuZl90YWJsZTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTIzOTpcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQ7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyNDAtXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjQ2LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMjQ3Olx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI0OC1cdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZicm5ldC1cdTAwM2VjYWxsX2FycHRhYmxlcztcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEyNjk9c3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyNzA6XHRcdFx0XHRcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjcxLXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEyODY9c3RhdGljIGludCBfX25ldF9pbml0IGJybmZfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI4OC1cdGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpIHtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTI4OTpcdFx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjkwLVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTI5OT1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGJybmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzAwLXtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTMwMTpcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQ7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMDItXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMDM6XHRicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzA0LVx0aWYgKGJybmV0LVx1MDAzZWVuYWJsZWQpIHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMTEtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMTI6c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBicm5mX25ldF9vcHMgX19yZWFkX21vc3RseSA9IHtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMxMy1cdC5pbml0ID0gYnJuZl9pbml0X25ldCxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMxNC1cdC5leGl0ID0gYnJuZl9leGl0X25ldCxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTMxNTpcdC5pZCAgID0gXHUwMDI2YnJuZl9uZXRfaWQsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMTY6XHQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnJuZl9uZXQpLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzE3LX07XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMzE5PXN0YXRpYyBpbnQgX19pbml0IGJyX25ldGZpbHRlcl9pbml0KHZvaWQpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzIyLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzIzOlx0cmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZicm5mX25ldF9vcHMpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzI0LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMjgtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMjk6XHRcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZicm5mX25ldF9vcHMpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzMwLVx0XHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTMzOD1zdGF0aWMgdm9pZCBfX2V4aXQgYnJfbmV0ZmlsdGVyX2Zpbmkodm9pZClcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzNDEtXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZicm5mX25vdGlmaWVyKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTM0MjpcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZicm5mX25ldF9vcHMpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzQzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEwNwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipEZWVwIERpdmUgaW50byBicl9uZXRmaWx0ZXJfaG9va3MuYyBmb3IgU3lzY3RsIGFuZCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBiZWZvcmUgd2UgZ2V0IHN0YXJ0ZWQsIEkgd2FudCB0byB0YWtlIGEgbWV0aG9kaWNhbCBhcHByb2FjaCB0byB0aGlzLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGhvdyB0aGUgYnJpZGdpbmcgbmV0ZmlsdGVyIGhvb2tzIGFyZSBzZXQgdXAsIG1hbmFnZWQsIGFuZCB0b3JuIGRvd24sIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gc3lzY3RsIGNvbmZpZ3VyYXRpb25zLiBUaGlzIG1lYW5zIGEgY2FyZWZ1bCBpbnNwZWN0aW9uIG9mIHRoZSBgbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY2AgZmlsZSBpcyBpbiBvcmRlci4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlbnRpcmUgZmlsZSwgb3IgYXQgbGVhc3QgdGhlIGNyaXRpY2FsIHNlZ21lbnRzIGRlYWxpbmcgd2l0aCBzeXN0ZW0gY29udHJvbHMgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZXhpdCByb3V0aW5lcy4KCkZpcnN0LCBJJiMzOTttIHRoaW5raW5nLCBJIHNob3VsZCBzdGFydCBieSBwaW5wb2ludGluZyB0aG9zZSBzZWN0aW9ucyBkaXJlY3RseSByZWxhdGVkIHRvIHN5c2N0bCB2YXJpYWJsZXMuIFdoYXQgYXJlIHRoZSBjb25maWd1cmFibGUgcGFyYW1ldGVycz8gSG93IGFyZSB0aGV5IHJlZ2lzdGVyZWQ/IFdoZXJlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgZGVmaW5lZD8gV2hhdCBmdW5jdGlvbnMgaGFuZGxlIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb24gdGhlc2Ugc3lzY3RsIGVudHJpZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzeXNjdGwgY29udHJvbHMgYW5kIHRoZSBhY3R1YWwgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eSwgYW5kIHdoZXRoZXIgdGhlIGJyaWRnZSBuZXRmaWx0ZXIgaG9va3MgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZXNlIHBhcmFtZXRlcnMuCgpUaGVuLCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgc2VxdWVuY2VzIGRlbWFuZCBjYXJlZnVsIHNjcnV0aW55LiBXaGVyZSBhcmUgdGhlIGhvb2tzIHJlZ2lzdGVyZWQ/IEhvdyBhcmUgdGhleSB1bnJlZ2lzdGVyZWQ/IFdoYXQmIzM5O3MgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnM/IEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gY29uY2VybnM/IEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgY3JvcCB1cCBkdXJpbmcgbW9kdWxlIGxvYWRpbmcgb3IgdW5sb2FkaW5nPyBBcmUgdGhlcmUgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgbW9kdWxlcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBob29rIG9yZGVyaW5nLCBkZXBlbmRlbmNpZXMsIG9yIGNsZWFudXAsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLgpUaGUgZ29hbCBpcyBhIHZlcnkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBzeXNjdGwgY29uZmlndXJhdGlvbiwgaG9vayByZWdpc3RyYXRpb24sIGhvb2sgdW5yZWdpc3RyYXRpb24sIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG5ldGZpbHRlciBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjIwOlx0XHRcdC5wcm9jX2hhbmRsZXJcdD0gYnJuZl9zeXNjdGxfY2FsbF90YWJsZXMsXG4xMjIxOlx0XHR9LFxuMTIyMjpcdH07XG4xMjIzOlx0XG4xMjI0Olx0c3RhdGljIGlubGluZSB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChzdHJ1Y3QgYnJuZl9uZXQgKmJybmYpXG4xMjI1Olx0e1xuMTIyNjpcdFx0YnJuZi1cdTAwM2VjYWxsX2lwdGFibGVzID0gMTtcbjEyMjc6XHRcdGJybmYtXHUwMDNlY2FsbF9pcDZ0YWJsZXMgPSAxO1xuMTIyODpcdFx0YnJuZi1cdTAwM2VjYWxsX2FycHRhYmxlcyA9IDE7XG4xMjI5Olx0XHRicm5mLVx1MDAzZWZpbHRlcl92bGFuX3RhZ2dlZCA9IDA7XG4xMjMwOlx0XHRicm5mLVx1MDAzZWZpbHRlcl9wcHBvZV90YWdnZWQgPSAwO1xuMTIzMTpcdFx0YnJuZi1cdTAwM2VwYXNzX3ZsYW5faW5kZXYgPSAwO1xuMTIzMjpcdH1cbjEyMzM6XHQjZW5kaWZcbjEyMzQ6XHRcbjEyMzU6XHRzdGF0aWMgaW50IGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuMTIzNjpcdHtcbjEyMzc6XHQjaWZkZWYgQ09ORklHX1NZU0NUTFxuMTIzODpcdFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGUgPSBicm5mX3RhYmxlO1xuMTIzOTpcdFx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcbjEyNDA6XHRcbjEyNDE6XHRcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4xMjQyOlx0XHRcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKGJybmZfdGFibGUpLCBHRlBfS0VSTkVMKTtcbjEyNDM6XHRcdFx0aWYgKCF0YWJsZSlcbjEyNDQ6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEyNDU6XHRcdH1cbjEyNDY6XHRcbjEyNDc6XHRcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG4xMjQ4Olx0XHR0YWJsZVswXS5kYXRhID0gXHUwMDI2YnJuZXQtXHUwMDNlY2FsbF9hcnB0YWJsZXM7XG4xMjQ5Olx0XHR0YWJsZVsxXS5kYXRhID0gXHUwMDI2YnJuZXQtXHUwMDNlY2FsbF9pcHRhYmxlcztcbjEyNTA6XHRcdHRhYmxlWzJdLmRhdGEgPSBcdTAwMjZicm5ldC1cdTAwM2VjYWxsX2lwNnRhYmxlcztcbjEyNTE6XHRcdHRhYmxlWzNdLmRhdGEgPSBcdTAwMjZicm5ldC1cdTAwM2VmaWx0ZXJfdmxhbl90YWdnZWQ7XG4xMjUyOlx0XHR0YWJsZVs0XS5kYXRhID0gXHUwMDI2YnJuZXQtXHUwMDNlZmlsdGVyX3BwcG9lX3RhZ2dlZDtcbjEyNTM6XHRcdHRhYmxlWzVdLmRhdGEgPSBcdTAwMjZicm5ldC1cdTAwM2VwYXNzX3ZsYW5faW5kZXY7XG4xMjU0Olx0XG4xMjU1Olx0XHRicl9uZXRmaWx0ZXJfc3lzY3RsX2RlZmF1bHQoYnJuZXQpO1xuMTI1NjpcdFxuMTI1NzpcdFx0YnJuZXQtXHUwMDNlY3RsX2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcJiMzNDtuZXQvYnJpZGdlXCYjMzQ7LCB0YWJsZSxcbjEyNTg6XHRcdFx0XHRcdFx0XHRBUlJBWV9TSVpFKGJybmZfdGFibGUpKTtcbjEyNTk6XHRcdGlmICghYnJuZXQtXHUwMDNlY3RsX2hkcikge1xuMTI2MDpcdFx0XHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSlcbjEyNjE6XHRcdFx0XHRrZnJlZSh0YWJsZSk7XG4xMjYyOlx0XG4xMjYzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTI2NDpcdFx0fVxuMTI2NTpcdCNlbmRpZlxuMTI2NjpcdFx0cmV0dXJuIDA7XG4xMjY3Olx0fVxuMTI2ODpcdFxuMTI2OTpcdHN0YXRpYyB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0LFxuMTI3MDpcdFx0XHRcdFx0XHQgc3RydWN0IGJybmZfbmV0ICpicm5ldClcbjEyNzE6XHR7XG4xMjcyOlx0I2lmZGVmIENPTkZJR19TWVNDVExcbjEyNzM6XHRcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXIgPSBicm5ldC1cdTAwM2VjdGxfaGRyO1xuMTI3NDpcdFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4xMjc1Olx0XG4xMjc2Olx0XHRpZiAoIWhlYWRlcilcbjEyNzc6XHRcdFx0cmV0dXJuO1xuMTI3ODpcdFxuMTI3OTpcdFx0dGFibGUgPSBoZWFkZXItXHUwMDNlY3RsX3RhYmxlX2FyZztcbjEyODA6XHRcdHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShoZWFkZXIpO1xuMTI4MTpcdFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpXG4xMjgyOlx0XHRcdGtmcmVlKHRhYmxlKTtcbjEyODM6XHQjZW5kaWZcbjEyODQ6XHR9XG4xMjg1Olx0XG4xMjg2Olx0c3RhdGljIGludCBfX25ldF9pbml0IGJybmZfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuMTI4NzpcdHtcbjEyODg6XHRcdGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpIHtcbjEyODk6XHRcdFx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xuMTI5MDpcdFxuMTI5MTpcdFx0XHRicm5ldC1cdTAwM2Vpbl91c2VybnMgPSB0cnVlO1xuMTI5MjpcdFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7YnJfbmV0ZmlsdGVyIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gdXNlciBuYW1lc3BhY2VzXFxuXCYjMzQ7KTtcbjEyOTM6XHRcdFx0cmV0dXJuIDA7XG4xMjk0Olx0XHR9XG4xMjk1Olx0XG4xMjk2Olx0XHRyZXR1cm4gYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChuZXQpO1xuMTI5NzpcdH1cbjEyOTg6XHRcbjEyOTk6XHRzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJybmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuMTMwMDpcdHtcbjEzMDE6XHRcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQ7XG4xMzAyOlx0XG4xMzAzOlx0XHRicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xuMTMwNDpcdFx0aWYgKGJybmV0LVx1MDAzZWVuYWJsZWQpIHtcbjEzMDU6XHRcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBicl9uZl9vcHMsIEFSUkFZX1NJWkUoYnJfbmZfb3BzKSk7XG4xMzA2Olx0XHRcdGJybmV0LVx1MDAzZWVuYWJsZWQgPSBmYWxzZTtcbjEzMDc6XHRcdH1cbjEzMDg6XHRcbjEzMDk6XHRcdGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXQobmV0LCBicm5ldCk7XG4xMzEwOlx0fVxuMTMxMTpcdFxuMTMxMjpcdHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgYnJuZl9uZXRfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4xMzEzOlx0XHQuaW5pdCA9IGJybmZfaW5pdF9uZXQsXG4xMzE0Olx0XHQuZXhpdCA9IGJybmZfZXhpdF9uZXQsXG4xMzE1Olx0XHQuaWQgICA9IFx1MDAyNmJybmZfbmV0X2lkLFxuMTMxNjpcdFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGJybmZfbmV0KSxcbjEzMTc6XHR9O1xuMTMxODpcdFxuMTMxOTpcdHN0YXRpYyBpbnQgX19pbml0IGJyX25ldGZpbHRlcl9pbml0KHZvaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwODAKCQkJCQkJCW91dHB1dDogMjMwCgkJCQkJCQl0aG91Z2h0czogODE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEJyaWRnZSBOZXRmaWx0ZXIgQmVoYXZpb3IgaW4gTm9uLUluaXRpYWwgVXNlciBOYW1lc3BhY2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZSBicmlkZ2UgbmV0ZmlsdGVyIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgaXQgYmVoYXZlcyB3aXRoaW4gdXNlciBuYW1lc3BhY2VzIHRoYXQgKmFyZW4mIzM5O3QqIHRoZSBpbml0aWFsIG9uZS4gVGhlIG1haW4gY29uY2VybiBoZXJlIHNlZW1zIHRvIGJlIGFib3V0IHNlY3VyaXR5IGFuZCBwb3RlbnRpYWxseSBleHBvc2luZyBsZWdhY3kgZmVhdHVyZXMgaW4gYSB3YXkgdGhhdCYjMzk7cyB1bmludGVuZGVkIG9yIGV4cGxvaXRhYmxlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBzZWUgd2hhdCBoYXBwZW5zIHdoZW4gYG5ldC0mZ3Q7dXNlcl9uc2AgaXNuJiMzOTt0IHRoZSBpbml0aWFsIG5hbWVzcGFjZS4gVGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlZCBpcyB0aGF0IGBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KG5ldClgIGlzbiYjMzk7dCBjYWxsZWQsIHdoaWNoIG1ha2VzIHNlbnNlIGluIHRoaXMgY29udGV4dC4gQmVjYXVzZSBvZiB0aGlzLCBgYnJuZXQtJmd0O2luX3VzZXJuc2AgaXMgc2V0IHRvIGB0cnVlYC4gVGhpcyBgYnJuZXRgIHN0cnVjdHVyZSwgdGhlIHBlci1uZXQgaW5mb3JtYXRpb24sIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCB3aGVuIHRoZSBgbmV0YCBpcyBjcmVhdGVkLiBUaGlzIG1lYW5zIGV2ZXJ5dGhpbmcgc3RhcnRzIGF0IHplcm86IHRoZSBgY3RsX2hkcmAsIHRoZSBob29rIHBvaW50ZXJzLCB0aGUgYGVuYWJsZWRgIGZsYWcsICpldmVyeXRoaW5nKi4KCk5vdywgd2hlbiBhIG5ldCBkZXZpY2UgZXZlbnQgY29tZXMgaW4gdmlhIGBicm5mX2RldmljZV9ldmVudGAsIHRoZSBjb25kaXRpb25hbCBjaGVjayBzaG93cyBpdCYjMzk7cyBvbmx5IGVuYWJsZWQgaWYgZWl0aGVyIGBicm5ldC0mZ3Q7ZW5hYmxlZGAgaXMgdHJ1ZSwgb3IgYGJybmV0LSZndDtpbl91c2VybnNgIGlzIHRydWUuICpCdXQqIHNpbmNlIGBicm5ldC0mZ3Q7aW5fdXNlcm5zYCBpcyBhbHdheXMgdHJ1ZSwgdGhlIGhvb2tzIHdpbGwgbmV2ZXIgYmUgcmVnaXN0ZXJlZCwgbWVhbmluZyB0aGF0IGxlZ2FjeSBicmlkZ2UgbmV0ZmlsdGVyIGZ1bmN0aW9uYWxpdHkgc2ltcGx5IHdvbiYjMzk7dCBydW4gd2l0aGluIHRoaXMgbmFtZXNwYWNlLgoKTG9va2luZyBhdCB0aGUgZXhpdCBwYXRoLCBgYnJuZl9leGl0X25ldGAsIGNvbmZpcm1zIHRoaXMuIEJlY2F1c2UgYGJybmV0LSZndDtlbmFibGVkYCBpcyBmYWxzZSwgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzYCBpcyBza2lwcGVkLiBUaGVuLCBgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChuZXQsIGJybmV0KWAgY2hlY2tzIGZvciBhIE5VTEwgYGhlYWRlcmAuIEJlY2F1c2Ugb2YgdGhlIGluaXRpYWwgemVyb2luZyBmcm9tIGBremFsbG9jYCwgdGhpcyBpcyB0cnVlLCBzbyBpdCBleGl0cyBjbGVhbmx5LgoKTm93LCBJIGNoZWNrZWQgaWYgYW55IG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIGFjdHVhbGx5ICp1c2UqIHRoZSBgYnJuZXRgIHN0cnVjdHVyZS4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgc3R1ZmYgbGlrZSBgaXNfdmxhbl9pcGAsIGBicl9uZl9wcmVfcm91dGluZ2AsIGV0Yy4sIGFyZSBvbmx5IGNhbGxlZCBmcm9tIHRoZSBicmlkZ2UgbmV0ZmlsdGVyIGhvb2tzIHRoZW1zZWx2ZXMgd2hpY2ggYXJlIG5ldmVyIHJlZ2lzdGVyZWQgaW4gdGhpcyBwYXRoLiBUaGUgcGVybmV0IG1lbW9yeSAqaXMqIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBremFsbG9jYCwgYW5kIHRoZSBgYnJuZXQtJmd0O2luX3VzZXJuc2AgdmFyaWFibGUgaXMgYSBzaW1wbGUgYm9vbGVhbiB3aXRoaW4gYHN0cnVjdCBicm5mX25ldGAuCgpTbyB0aGUgYmlnIHF1ZXN0aW9uOiBBcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRvIHVzZXJzcGFjZT8gVGhlIGFuc3dlciwgYXQgbGVhc3QgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGlzIG5vLiBXZSYjMzk7cmUgbm90IHNlbmRpbmcgYW55dGhpbmcgdW5pbml0aWFsaXplZCB0byB1c2VyIHNwYWNlLCB0aGVyZSBhcmUgbm8gYGNvcHlfdG9fdXNlcmAgb3IgYHB1dF91c2VyYCBjYWxscywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgcmVhZC4gVGhlIHBlcm5ldCBtZW1vcnkgaXMgcmVsaWFibHkgemVyby1pbml0aWFsaXplZCBieSB0aGUga2VybmVsIGluZnJhc3RydWN0dXJlIGl0c2VsZi4KCkZpbmFsbHksIEkgcmFuIGEgY2hlY2sgYWdhaW5zdCB0aGUgS01TQU4gcmVxdWlyZW1lbnRzLiBSZW1lbWJlciwgd2Ugb25seSBuZWVkIGl0IGlmIHdlJiMzOTtyZSB0b3VjaGluZyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBpZiB3ZSBoYXZlIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEuIFdlJiMzOTtyZSBub3QgZG9pbmcgYW55IG9mIHRoYXQgaGVyZS4gVGhpcyBwYXRjaCBpcyBqdXN0ICpkaXNhYmxpbmcqIGJyaWRnZSBuZXRmaWx0ZXIgZnVuY3Rpb25hbGl0eSBpbiB1bnByaXZpbGVnZWQgbmFtZXNwYWNlcyB0byBwcmV2ZW50IHBvdGVudGlhbGx5IGRhbmdlcm91cyBsZWdhY3kgY29kZSBmcm9tIHJ1bm5pbmcuIFRoZSBvbmx5IGZpZWxkcyB3ZSBtb2RpZnkgYXJlIHdpdGhpbiB0aGUgemVyby1pbml0aWFsaXplZCBgc3RydWN0IGJybmZfbmV0YC4gVGhlIHN5c2N0bCB0ZWFyZG93biBpcyBub3cgc2FmZWx5IGhhbmRsZWQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBtZW1vcnkgbGVhayB2ZWN0b3JzIGludHJvZHVjZWQuCgpUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGFuZCBzeXprYWxsZXIgY292ZXJhZ2Ugc2hvdWxkIGJlIGFkZXF1YXRlLiBObyBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyByZXF1aXJlZC4gSSBjYW4gY29uZmlkZW50bHkgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhpcyByZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RyaWN0cyB0aGUgbGVnYWN5IGJyX25ldGZpbHRlciBtb2R1bGUgaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzIGJ5IHNldHRpbmcgYSBuZXcgYm9vbGVhbiBmbGFnIChgaW5fdXNlcm5zYCksIGF2b2lkaW5nIHN5c2N0bCByZWdpc3RyYXRpb24sIGFuZCBza2lwcGluZyBuZXRmaWx0ZXIgaG9vayByZWdpc3RyYXRpb24gb24gZGV2aWNlIGV2ZW50cy5cblxuLSBNZW1vcnkgQWxsb2NhdGlvbiBcdTAwMjYgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgYnJuZl9uZXRgIGlzIGFsbG9jYXRlZCBhcyBwZXItbmV0bnMgc3RvcmFnZSBieSB0aGUgcGVybmV0IHN1YnN5c3RlbSB1c2luZyB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeSAoYGt6YWxsb2NgKS4gVGhlIGFkZGVkIGBpbl91c2VybnNgIGJvb2xlYW4gYW5kIGV4aXN0aW5nIGZpZWxkcyBhcmUgc2FmZWx5IHplcm8taW5pdGlhbGl6ZWQgb24gYWxsb2NhdGlvbi5cbi0gTm8gSW5mbyBMZWFrcyBvciBVbmluaXRpYWxpemVkIFJlYWRzOiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgYWxzbyBndWFyZHMgc3lzY3RsIGNsZWFudXAgYWdhaW5zdCBOVUxMIHBvaW50ZXJzIChgY3RsX2hkcmApIHdoZW4gc3lzY3RsIHJlZ2lzdHJhdGlvbiB3YXMgc2tpcHBlZC5cbi0gU3RhbmRhcmQgU2FuaXRpemVyIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBsaWZlY3ljbGUsIG51bGwgZGVyZWZlcmVuY2VzLCBvciBuZXRucyBkZXN0cnVjdGlvbiBhcmUgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXN0cmljdHMgdGhlIGxlZ2FjeSBicl9uZXRmaWx0ZXIgbW9kdWxlIGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcyBieSBzZXR0aW5nIGEgbmV3IGJvb2xlYW4gZmxhZyAoYGluX3VzZXJuc2ApLCBhdm9pZGluZyBzeXNjdGwgcmVnaXN0cmF0aW9uLCBhbmQgc2tpcHBpbmcgbmV0ZmlsdGVyIGhvb2sgcmVnaXN0cmF0aW9uIG9uIGRldmljZSBldmVudHMuXG5cbi0gTWVtb3J5IEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOiBgc3RydWN0IGJybmZfbmV0YCBpcyBhbGxvY2F0ZWQgYXMgcGVyLW5ldG5zIHN0b3JhZ2UgYnkgdGhlIHBlcm5ldCBzdWJzeXN0ZW0gdXNpbmcgemVyby1pbml0aWFsaXplZCBtZW1vcnkgKGBremFsbG9jYCkuIFRoZSBhZGRlZCBgaW5fdXNlcm5zYCBib29sZWFuIGFuZCBleGlzdGluZyBmaWVsZHMgYXJlIHNhZmVseSB6ZXJvLWluaXRpYWxpemVkIG9uIGFsbG9jYXRpb24uXG4tIE5vIEluZm8gTGVha3Mgb3IgVW5pbml0aWFsaXplZCBSZWFkczogVGhlIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGFsc28gZ3VhcmRzIHN5c2N0bCBjbGVhbnVwIGFnYWluc3QgTlVMTCBwb2ludGVycyAoYGN0bF9oZHJgKSB3aGVuIHN5c2N0bCByZWdpc3RyYXRpb24gd2FzIHNraXBwZWQuXG4tIFN0YW5kYXJkIFNhbml0aXplciBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcm91bmQgbGlmZWN5Y2xlLCBudWxsIGRlcmVmZXJlbmNlcywgb3IgbmV0bnMgZGVzdHJ1Y3Rpb24gYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMjo0Ny45Nzk5NDE2MzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjg5NDU3ODQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VfTkVURklMVEVSXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiVVNFUl9OU1wiLFxuICAgIFwiTkVUX05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJuZl9kZXZpY2VfZXZlbnRcIixcbiAgICBcImJybmZfaW5pdF9uZXRcIixcbiAgICBcImJybmZfZXhpdF9uZXRcIixcbiAgICBcImJyX25mX2hvb2tfdGhyZXNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cmljdHMgdGhlIGxlZ2FjeSBicl9uZXRmaWx0ZXIgbW9kdWxlIGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcyBieSBzZXR0aW5nIGEgbmV3IGJvb2xlYW4gZmxhZyAoYGluX3VzZXJuc2ApLCBhdm9pZGluZyBzeXNjdGwgcmVnaXN0cmF0aW9uLCBhbmQgc2tpcHBpbmcgbmV0ZmlsdGVyIGhvb2sgcmVnaXN0cmF0aW9uIG9uIGRldmljZSBldmVudHMuXFxuXFxuLSBNZW1vcnkgQWxsb2NhdGlvbiBcXHUwMDI2IEluaXRpYWxpemF0aW9uOiBgc3RydWN0IGJybmZfbmV0YCBpcyBhbGxvY2F0ZWQgYXMgcGVyLW5ldG5zIHN0b3JhZ2UgYnkgdGhlIHBlcm5ldCBzdWJzeXN0ZW0gdXNpbmcgemVyby1pbml0aWFsaXplZCBtZW1vcnkgKGBremFsbG9jYCkuIFRoZSBhZGRlZCBgaW5fdXNlcm5zYCBib29sZWFuIGFuZCBleGlzdGluZyBmaWVsZHMgYXJlIHNhZmVseSB6ZXJvLWluaXRpYWxpemVkIG9uIGFsbG9jYXRpb24uXFxuLSBObyBJbmZvIExlYWtzIG9yIFVuaW5pdGlhbGl6ZWQgUmVhZHM6IFRoZSBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBhbHNvIGd1YXJkcyBzeXNjdGwgY2xlYW51cCBhZ2FpbnN0IE5VTEwgcG9pbnRlcnMgKGBjdGxfaGRyYCkgd2hlbiBzeXNjdGwgcmVnaXN0cmF0aW9uIHdhcyBza2lwcGVkLlxcbi0gU3RhbmRhcmQgU2FuaXRpemVyIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBsaWZlY3ljbGUsIG51bGwgZGVyZWZlcmVuY2VzLCBvciBuZXRucyBkZXN0cnVjdGlvbiBhcmUgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBicmlkZ2UgbmV0ZmlsdGVyIGluaXRpYWxpemF0aW9uIGFuZCBkZXZpY2UgZXZlbnQgaGFuZGxpbmcgdG8gZGlzYWJsZSBicl9uZXRmaWx0ZXIgYW5kIGl0cyBzeXNjdGwgcmVnaXN0cmF0aW9uIHdpdGhpbiBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZXMuIFRoaXMgYWx0ZXJzIGNvcmUgbmV0d29yayBuYW1lc3BhY2UgYW5kIGJyaWRnZSBkZXZpY2Ugc2V0dXAvdGVhcmRvd24gZXhlY3V0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzI6NDcuOTc5OTQ2MjQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTkxMDA0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhNDY3MzUxMGEyYTk2YjIxNTY1YjhjZDEwNGFjODMwMGRmZTUyYmIxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDIyOjMyOjQ3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcXG5pbmRleCBjMWU2ZWE1MmM5ZTU5Li5kZGVkMWE2ZWRkNjA2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcXG5AQCAtMjc3LDggKzI3Nyw5IEBAIE5ldGZpbHRlclxcbiA9PT09PT09PT1cXG4gXFxuIFRoZSBicmlkZ2UgbmV0ZmlsdGVyIG1vZHVsZSBpcyBhIGxlZ2FjeSBmZWF0dXJlIHRoYXQgYWxsb3dzIHRvIGZpbHRlciBicmlkZ2VkXFxuLXBhY2tldHMgd2l0aCBpcHRhYmxlcyBhbmQgaXA2dGFibGVzLiBJdHMgdXNlIGlzIGRpc2NvdXJhZ2VkLiBVc2VycyBzaG91bGRcXG4tY29uc2lkZXIgdXNpbmcgbmZ0YWJsZXMgZm9yIHBhY2tldCBmaWx0ZXJpbmcuXFxuK3BhY2tldHMgd2l0aCBpcHRhYmxlcyBhbmQgaXA2dGFibGVzLiBUaGlzIGZlYXR1cmUgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsIGFuZFxcbitub3QgYXZhaWxhYmxlIGluIHVzZXIgbmFtZXNwYWNlcy4gQ29uc2lkZXIgdXNpbmcgbmZ0YWJsZXMgZm9yIHBhY2tldCBmaWx0ZXJpbmdcXG4raW5zdGVhZC5cXG4gXFxuIFRoZSBvbGRlciBlYnRhYmxlcyB0b29sIGlzIG1vcmUgZmVhdHVyZS1saW1pdGVkIGNvbXBhcmVkIHRvIG5mdGFibGVzLCBidXRcXG4ganVzdCBsaWtlIG5mdGFibGVzIGl0IGRvZXNuJ3QgbmVlZCB0aGlzIG1vZHVsZSBlaXRoZXIgdG8gZnVuY3Rpb24uXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXFxuaW5kZXggMGEzOTRlNWY0MzkxNi4uZTE1MzU1ZmYyMTVhNyAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY1xcbkBAIC01NCw2ICs1NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgYnJuZl9uZXRfaWQgX19yZWFkX21vc3RseTtcXG4gXFxuIHN0cnVjdCBicm5mX25ldCB7XFxuIFxcdGJvb2wgZW5hYmxlZDtcXG4rXFx0Ym9vbCBpbl91c2VybnM7XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxcbiBcXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqY3RsX2hkcjtcXG5AQCAtMTEwMCw3ICsxMTAxLDcgQEAgc3RhdGljIGludCBicm5mX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCxcXG4gXFxuIFxcdG5ldCA9IGRldl9uZXQoZGV2KTtcXG4gXFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcXG4tXFx0aWYgKGJybmV0LVxcdTAwM2VlbmFibGVkKVxcbitcXHRpZiAoYnJuZXQtXFx1MDAzZWVuYWJsZWQgfHwgYnJuZXQtXFx1MDAzZWluX3VzZXJucylcXG4gXFx0XFx0cmV0dXJuIE5PVElGWV9PSztcXG4gXFxuIFxcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGJyX25mX29wcywgQVJSQVlfU0laRShicl9uZl9vcHMpKTtcXG5AQCAtMTIyOSw5ICsxMjMwLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRmaWx0ZXJfc3lzY3RsX2RlZmF1bHQoc3RydWN0IGJybmZfbmV0ICpicm5mKVxcbiBcXHRicm5mLVxcdTAwM2VmaWx0ZXJfcHBwb2VfdGFnZ2VkID0gMDtcXG4gXFx0YnJuZi1cXHUwMDNlcGFzc192bGFuX2luZGV2ID0gMDtcXG4gfVxcbisjZW5kaWZcXG4gXFxuIHN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuIHtcXG4rI2lmZGVmIENPTkZJR19TWVNDVExcXG4gXFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGUgPSBicm5mX3RhYmxlO1xcbiBcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xcbiBcXG5AQCAtMTI1OSwyNSArMTI2MiwzOSBAQCBzdGF0aWMgaW50IGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4tXFxuKyNlbmRpZlxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxcbiB7XFxuLVxcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlID0gYnJuZXQtXFx1MDAzZWN0bF9oZHItXFx1MDAzZWN0bF90YWJsZV9hcmc7XFxuKyNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuK1xcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXIgPSBicm5ldC1cXHUwMDNlY3RsX2hkcjtcXG4rXFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuIFxcbi1cXHR1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoYnJuZXQtXFx1MDAzZWN0bF9oZHIpO1xcbitcXHRpZiAoIWhlYWRlcilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dGFibGUgPSBoZWFkZXItXFx1MDAzZWN0bF90YWJsZV9hcmc7XFxuK1xcdHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShoZWFkZXIpO1xcbiBcXHRpZiAoIW5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpXFxuIFxcdFxcdGtmcmVlKHRhYmxlKTtcXG4rI2VuZGlmXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBicm5mX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4ge1xcbitcXHRpZiAobmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpIHtcXG4rXFx0XFx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xcbitcXG4rXFx0XFx0YnJuZXQtXFx1MDAzZWluX3VzZXJucyA9IHRydWU7XFxuK1xcdFxcdHByX3dhcm5fb25jZShcXFwiYnJfbmV0ZmlsdGVyIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gdXNlciBuYW1lc3BhY2VzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KG5ldCk7XFxuIH1cXG4tI2VuZGlmXFxuIFxcbiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJybmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuQEAgLTEyODksMTUgKzEzMDYsMTEgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0XFx0YnJuZXQtXFx1MDAzZWVuYWJsZWQgPSBmYWxzZTtcXG4gXFx0fVxcbiBcXG4tI2lmZGVmIENPTkZJR19TWVNDVExcXG4gXFx0YnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChuZXQsIGJybmV0KTtcXG4tI2VuZGlmXFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgYnJuZl9uZXRfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLSNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuIFxcdC5pbml0ID0gYnJuZl9pbml0X25ldCxcXG4tI2VuZGlmXFxuIFxcdC5leGl0ID0gYnJuZl9leGl0X25ldCxcXG4gXFx0LmlkICAgPSBcXHUwMDI2YnJuZl9uZXRfaWQsXFxuIFxcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBicm5mX25ldCksXFxuQEAgLTEzMTgsNyArMTMzMSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJyX25ldGZpbHRlcl9pbml0KHZvaWQpXFxuIFxcdH1cXG4gXFxuIFxcdFJDVV9JTklUX1BPSU5URVIobmZfYnJfb3BzLCBcXHUwMDI2YnJfb3BzKTtcXG4tXFx0cHJpbnRrKEtFUk5fTk9USUNFIFxcXCJCcmlkZ2UgZmlyZXdhbGxpbmcgcmVnaXN0ZXJlZFxcXFxuXFxcIik7XFxuK1xcdHByX3dhcm4oXFxcImJyX25ldGZpbHRlciBpcyBzbGF0ZWQgZm9yIHJlbW92YWwgaW4gMjAyNy5cXFxcblxcXCIpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzI6NDguNTc5NjU1MDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxNDUzOTY3MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRV9ORVRGSUxURVJcIixcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJVU0VSX05TXCIsXG4gICAgXCJORVRfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicm5mX2RldmljZV9ldmVudFwiLFxuICAgIFwiYnJuZl9pbml0X25ldFwiLFxuICAgIFwiYnJuZl9leGl0X25ldFwiLFxuICAgIFwiYnJfbmZfaG9va190aHJlc2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGJyaWRnZSBuZXRmaWx0ZXIgaW5pdGlhbGl6YXRpb24gYW5kIGRldmljZSBldmVudCBoYW5kbGluZyB0byBkaXNhYmxlIGJyX25ldGZpbHRlciBhbmQgaXRzIHN5c2N0bCByZWdpc3RyYXRpb24gd2l0aGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcy4gVGhpcyBhbHRlcnMgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgYnJpZGdlIGRldmljZSBzZXR1cC90ZWFyZG93biBleGVjdXRpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNDY3MzUxMGEyYTk2YjIxNTY1YjhjZDEwNGFjODMwMGRmZTUyYmIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjI6MzI6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XG5pbmRleCBjMWU2ZWE1MmM5ZTU5Li5kZGVkMWE2ZWRkNjA2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XG5AQCAtMjc3LDggKzI3Nyw5IEBAIE5ldGZpbHRlclxuID09PT09PT09PVxuIFxuIFRoZSBicmlkZ2UgbmV0ZmlsdGVyIG1vZHVsZSBpcyBhIGxlZ2FjeSBmZWF0dXJlIHRoYXQgYWxsb3dzIHRvIGZpbHRlciBicmlkZ2VkXG4tcGFja2V0cyB3aXRoIGlwdGFibGVzIGFuZCBpcDZ0YWJsZXMuIEl0cyB1c2UgaXMgZGlzY291cmFnZWQuIFVzZXJzIHNob3VsZFxuLWNvbnNpZGVyIHVzaW5nIG5mdGFibGVzIGZvciBwYWNrZXQgZmlsdGVyaW5nLlxuK3BhY2tldHMgd2l0aCBpcHRhYmxlcyBhbmQgaXA2dGFibGVzLiBUaGlzIGZlYXR1cmUgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsIGFuZFxuK25vdCBhdmFpbGFibGUgaW4gdXNlciBuYW1lc3BhY2VzLiBDb25zaWRlciB1c2luZyBuZnRhYmxlcyBmb3IgcGFja2V0IGZpbHRlcmluZ1xuK2luc3RlYWQuXG4gXG4gVGhlIG9sZGVyIGVidGFibGVzIHRvb2wgaXMgbW9yZSBmZWF0dXJlLWxpbWl0ZWQgY29tcGFyZWQgdG8gbmZ0YWJsZXMsIGJ1dFxuIGp1c3QgbGlrZSBuZnRhYmxlcyBpdCBkb2Vzbid0IG5lZWQgdGhpcyBtb2R1bGUgZWl0aGVyIHRvIGZ1bmN0aW9uLlxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXG5pbmRleCAwYTM5NGU1ZjQzOTE2Li5lMTUzNTVmZjIxNWE3IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY1xuQEAgLTU0LDYgKzU0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBicm5mX25ldF9pZCBfX3JlYWRfbW9zdGx5O1xuIFxuIHN0cnVjdCBicm5mX25ldCB7XG4gXHRib29sIGVuYWJsZWQ7XG4rXHRib29sIGluX3VzZXJucztcbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuIFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmN0bF9oZHI7XG5AQCAtMTEwMCw3ICsxMTAxLDcgQEAgc3RhdGljIGludCBicm5mX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCxcbiBcbiBcdG5ldCA9IGRldl9uZXQoZGV2KTtcbiBcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG4tXHRpZiAoYnJuZXQtXHUwMDNlZW5hYmxlZClcbitcdGlmIChicm5ldC1cdTAwM2VlbmFibGVkIHx8IGJybmV0LVx1MDAzZWluX3VzZXJucylcbiBcdFx0cmV0dXJuIE5PVElGWV9PSztcbiBcbiBcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGJyX25mX29wcywgQVJSQVlfU0laRShicl9uZl9vcHMpKTtcbkBAIC0xMjI5LDkgKzEyMzAsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChzdHJ1Y3QgYnJuZl9uZXQgKmJybmYpXG4gXHRicm5mLVx1MDAzZWZpbHRlcl9wcHBvZV90YWdnZWQgPSAwO1xuIFx0YnJuZi1cdTAwM2VwYXNzX3ZsYW5faW5kZXYgPSAwO1xuIH1cbisjZW5kaWZcbiBcbiBzdGF0aWMgaW50IGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIHtcbisjaWZkZWYgQ09ORklHX1NZU0NUTFxuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGUgPSBicm5mX3RhYmxlO1xuIFx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcbiBcbkBAIC0xMjU5LDI1ICsxMjYyLDM5IEBAIHN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuLVxuKyNlbmRpZlxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgc3RydWN0IGJybmZfbmV0ICpicm5ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSA9IGJybmV0LVx1MDAzZWN0bF9oZHItXHUwMDNlY3RsX3RhYmxlX2FyZztcbisjaWZkZWYgQ09ORklHX1NZU0NUTFxuK1x0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWRlciA9IGJybmV0LVx1MDAzZWN0bF9oZHI7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcbi1cdHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShicm5ldC1cdTAwM2VjdGxfaGRyKTtcbitcdGlmICghaGVhZGVyKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR0YWJsZSA9IGhlYWRlci1cdTAwM2VjdGxfdGFibGVfYXJnO1xuK1x0dW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKGhlYWRlcik7XG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSlcbiBcdFx0a2ZyZWUodGFibGUpO1xuKyNlbmRpZlxuIH1cbiBcbiBzdGF0aWMgaW50IF9fbmV0X2luaXQgYnJuZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuK1x0aWYgKG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucykge1xuK1x0XHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG4rXG4rXHRcdGJybmV0LVx1MDAzZWluX3VzZXJucyA9IHRydWU7XG4rXHRcdHByX3dhcm5fb25jZShcImJyX25ldGZpbHRlciBubyBsb25nZXIgc3VwcG9ydGVkIGluIHVzZXIgbmFtZXNwYWNlc1xcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4gXHRyZXR1cm4gYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChuZXQpO1xuIH1cbi0jZW5kaWZcbiBcbiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJybmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIHtcbkBAIC0xMjg5LDE1ICsxMzA2LDExIEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYnJuZl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdGJybmV0LVx1MDAzZWVuYWJsZWQgPSBmYWxzZTtcbiBcdH1cbiBcbi0jaWZkZWYgQ09ORklHX1NZU0NUTFxuIFx0YnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChuZXQsIGJybmV0KTtcbi0jZW5kaWZcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBicm5mX25ldF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0jaWZkZWYgQ09ORklHX1NZU0NUTFxuIFx0LmluaXQgPSBicm5mX2luaXRfbmV0LFxuLSNlbmRpZlxuIFx0LmV4aXQgPSBicm5mX2V4aXRfbmV0LFxuIFx0LmlkICAgPSBcdTAwMjZicm5mX25ldF9pZCxcbiBcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBicm5mX25ldCksXG5AQCAtMTMxOCw3ICsxMzMxLDcgQEAgc3RhdGljIGludCBfX2luaXQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZClcbiBcdH1cbiBcbiBcdFJDVV9JTklUX1BPSU5URVIobmZfYnJfb3BzLCBcdTAwMjZicl9vcHMpO1xuLVx0cHJpbnRrKEtFUk5fTk9USUNFIFwiQnJpZGdlIGZpcmV3YWxsaW5nIHJlZ2lzdGVyZWRcXG5cIik7XG4rXHRwcl93YXJuKFwiYnJfbmV0ZmlsdGVyIGlzIHNsYXRlZCBmb3IgcmVtb3ZhbCBpbiAyMDI3LlxcblwiKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMyOjQ4LjU3OTY1NjI4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg4MjU4MjIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgTmV0d29yayBCcmlkZ2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQgcHJpbWFyaWx5IGltcGFjdHMgaG93IHRoZSBicmlkZ2UgbmV0ZmlsdGVyIGhvb2tzIGJlaGF2ZSB3aXRoaW4gdXNlciBuYW1lc3BhY2VzLiBJIHNlZSB0aGF0IGl0IG1vZGlmaWVzIGJvdGggYG5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmNgIGFuZCBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RgLCBzbyBpdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYm90aCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLlxuXG5Mb29raW5nIGF0IGBicl9uZXRmaWx0ZXJfaG9va3MuY2AsIHRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBhIGBib29sIGluX3VzZXJucztgIGZpZWxkIHdpdGhpbiB0aGUgYHN0cnVjdCBicm5mX25ldGAuIFRoaXMgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBUaGUgc3Vic2VxdWVudCBtb2RpZmljYXRpb25zIGluIGBicm5mX2RldmljZV9ldmVudGAgYXJlIHRlbGxpbmcuIEl0IG5vdyBjaGVja3MgZm9yIGVpdGhlciBgYnJuZXQtXHUwMDNlZW5hYmxlZGAgKm9yKiBgYnJuZXQtXHUwMDNlaW5fdXNlcm5zYC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIHByZXZpb3VzbHkgaXQgb25seSBjaGVja2VkIGBicm5ldC1cdTAwM2VlbmFibGVkYC4gVGhpcyBjaGFuZ2UgaW1wbGllcyB0aGF0IHdpdGhpbiBhIHVzZXIgbmFtZXNwYWNlIChkZWZpbmVkIGFzIGBuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnNgKSwgdGhlIGBicl9uZl9vcHNgIGFyZSAqbm90KiByZWdpc3RlcmVkIHdoZW4gYSBicmlkZ2UgZGV2aWNlIGlzIGNyZWF0ZWQgb3IgcmVnaXN0ZXJlZC4gVGhhdCdzIGEgY3JpdGljYWwgZGlmZmVyZW5jZS5cblxuRnVydGhlcm1vcmUsIGBicm5mX2luaXRfbmV0YCBpcyBub3cgYWx3YXlzIGNhbGxlZCwgcmVnYXJkbGVzcyBvZiB0aGUgYENPTkZJR19TWVNDVExgIG9wdGlvbiwgd2hpY2ggaXMgYSBkZXBhcnR1cmUgZnJvbSBwcmV2aW91cyBiZWhhdmlvci4gSSdtIG5vdGluZyB0aGF0IGluIGBicm5mX2luaXRfbmV0YCwgaWYgdGhlIGNvZGUgZGV0ZWN0cyB0aGF0IHdlJ3JlIHdpdGhpbiBhIHVzZXIgbmFtZXNwYWNlLCBpdCBzZXRzIGBicm5ldC1cdTAwM2Vpbl91c2VybnMgPSB0cnVlO2AgYW5kIGlzc3VlcyBhIHdhcm5pbmcuIEl0IGFsc28gc2tpcHMgdGhlIGNhbGwgdG8gYGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQobmV0KWAuIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHBhdGNoIGFpbXMgdG8gaXNvbGF0ZSBvciBjb250cm9sIHRoZSBzeXNjdGwgc2V0dGluZ3MgcmVsYXRlZCB0byBuZXRmaWx0ZXIgd2l0aGluIHVzZXIgbmFtZXNwYWNlcy5cblxuVGhlIGNoYW5nZXMgaW4gYGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXRgIHdpdGggdGhlIGBpZiAoIWhlYWRlcikgcmV0dXJuO2AgY2hlY2sgYXJlIGltcG9ydGFudCwgYnV0IG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgYG5ldC9icmlkZ2UvS2NvbmZpZ2AsIGBuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnYCwgb3IgYG5ldC9LY29uZmlnYCBtaWdodCBjb250YWluIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGRldGFpbHMgZm9yIGBicl9uZXRmaWx0ZXJgLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzI6NTQuNDYyMjQyMzgyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDMwODAxMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlJJREdFX05FVEZJTFRFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTE0Nz1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjE0ODpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0xNDktQ09ORklHX05GX0NPTk5UUkFDSz1tXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTE2Mz1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjE2NDpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0xNjUtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTE3OT1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjE4MDpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xODEtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9ibWlwc19zdGJfZGVmY29uZmlnPTc1PUNPTkZJR19CUklER0U9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWc6NzY6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWctNzctQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnPTYxPUNPTkZJR19ORVRGSUxURVI9eVxcbmFyY2gvbWlwcy9jb25maWdzL2xvb25nc29uM19kZWZjb25maWc6NjI6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvbWlwcy9jb25maWdzL2xvb25nc29uM19kZWZjb25maWctNjMtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWc9NDc9Q09ORklHX05FVEZJTFRFUj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcmI1MzJfZGVmY29uZmlnOjQ4OiMgQ09ORklHX0JSSURHRV9ORVRGSUxURVIgaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZy00OS1DT05GSUdfTkZfQ09OTlRSQUNLPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL3J0MzA1eF9kZWZjb25maWc9NDQ9Q09ORklHX05FVEZJTFRFUj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZzo0NTojIENPTkZJR19CUklER0VfTkVURklMVEVSIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnLTQ2LUNPTkZJR19ORl9DT05OVFJBQ0s9bVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc9NDY9Q09ORklHX05FVEZJTFRFUj15XFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc6NDc6IyBDT05GSUdfQlJJREdFX05FVEZJTFRFUiBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWctNDgtQ09ORklHX05GX0NPTk5UUkFDSz1tXFxuLS1cXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTY2PUNPTkZJR19ORVRGSUxURVI9eVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWc6Njc6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWctNjgtQ09ORklHX05GX0NPTk5UUkFDSz1tXFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MTgwPUNPTkZJR19ORVRGSUxURVI9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxODE6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xODItQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0s9bVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTE3MT1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MTcyOkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctMTczLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19IT09LPW1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDoyOiNpZm5kZWYgX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDozOiNkZWZpbmUgX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC00LVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg9OD1zdHJ1Y3QgbmZfYnJpZGdlX2ZyYWdfZGF0YSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0xNC1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDoxNTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0xNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZl9icmlkZ2VfaW5fcHJlcm91dGluZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtODUtfVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjg2OiNlbmRpZiAvKiBDT05GSUdfQlJJREdFX05FVEZJTFRFUiAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTg3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yODU9c3RydWN0IHRzX2NvbmZpZztcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI4Ni1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjI4NzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI4OC1zdHJ1Y3QgbmZfYnJpZGdlX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDM4PWVudW0gc2tiX2V4dF9pZCB7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDM5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA0MC1cXHRTS0JfRVhUX0JSSURHRV9ORixcXG4tLVxcbmluY2x1ZGUvbmV0L25laWdoYm91ci5oPTQ4ND1zdGF0aWMgaW5saW5lIGludCBuZWlnaF9ldmVudF9zZW5kKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgtNDg4LVxcbmluY2x1ZGUvbmV0L25laWdoYm91ci5oOjQ4OTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaC00OTAtc3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaGhfYnJpZGdlKHN0cnVjdCBoaF9jYWNoZSAqaGgsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg9OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTEwLXtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg6MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTEyLVxcdHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqYiA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oPTQzPXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0YWJsZSAqYnJpZGdlX3BhcmVudF9ydGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtNDQte1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaDo0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtNDYtXFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydDtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5oPTEzPXN0cnVjdCBuZl9xdWV1ZV9lbnRyeSB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuaC0xOS1cXHR1bnNpZ25lZCBpbnRcXHRcXHRob29rX2luZGV4O1xcdC8qIGluZGV4IGluIGhvb2tfZW50cmllcy1cXHUwMDNlaG9va1tdICovXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmg6MjA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmgtMjEtXFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqYnJpZGdlX2RldjtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MjojaWZuZGVmIF9VQVBJX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjM6I2RlZmluZSBfVUFQSV9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9IXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC00LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD0zND1lbnVtIG5mX2JyX2hvb2tfcHJpb3JpdGllcyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTQ0LVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6NDU6I2VuZGlmIC8qIF9VQVBJX19MSU5VWF9CUklER0VfTkVURklMVEVSX0ggKi9cXG4tLVxcbm5ldC9LY29uZmlnPTIyMD1jb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXFxuLS1cXG5uZXQvS2NvbmZpZy0yMzAtXFxubmV0L0tjb25maWc6MjMxOmNvbmZpZyBCUklER0VfTkVURklMVEVSXFxubmV0L0tjb25maWctMjMyLVxcdHRyaXN0YXRlIFxcXCJCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvTWFrZWZpbGU9MTM9YnJpZGdlLSQoQ09ORklHX1NZU0ZTKSArPSBicl9zeXNmc19pZi5vIGJyX3N5c2ZzX2JyLm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTE0LVxcbm5ldC9icmlkZ2UvTWFrZWZpbGU6MTU6YnJpZGdlLSQoc3Vic3QgbSx5LCQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpKSArPSBicl9uZl9jb3JlLm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTE2LVxcbi0tXFxubmV0L2JyaWRnZS9NYWtlZmlsZT0xOD1icl9uZXRmaWx0ZXItJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICs9IGJyX25ldGZpbHRlcl9pcHY2Lm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSArPSBicl9uZXRmaWx0ZXIub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjAtXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmM9NDI1PXN0YXRpYyBpbnQgX19pbml0IGJyX2luaXQodm9pZClcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy00NjYtXFxubmV0L2JyaWRnZS9ici5jOjQ2NzojaWYgSVNfTU9EVUxFKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnIuYy00NjgtXFx0cHJfaW5mbyhcXFwiYnJpZGdlOiBmaWx0ZXJpbmcgdmlhIGFycC9pcC9pcDZ0YWJsZXMgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSBcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTIwND1zdGF0aWMgaW50IGJyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTIxMS1cXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVFVfU0VUX0JZX1VTRVIsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MjEyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMjEzLVxcdC8qIHJlbWVtYmVyIHRoZSBNVFUgaW4gdGhlIHJ0YWJsZSBmb3IgUE1UVSAqL1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTI5NT1zdGF0aWMgaW50IGJyX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTU1NC0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNTU1OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1NTYtXFx0aWYgKGRhdGFbSUZMQV9CUl9ORl9DQUxMX0lQVEFCTEVTXSkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTYxOT1zdGF0aWMgc2l6ZV90IGJyX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2NjctI2VuZGlmXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTY2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNjY5LVxcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSArICAgICAvKiBJRkxBX0JSX05GX0NBTExfSVBUQUJMRVMgKi9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE2Nzg9c3RhdGljIGludCBicl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc5MS0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNzkyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3OTMtXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX05GX0NBTExfSVBUQUJMRVMsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01MDA9c3RydWN0IG5ldF9icmlkZ2Uge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTE0LVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRwb3J0X2xpc3Q7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NTE1OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUxNi1cXHR1bmlvbiB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0yMDIzPWV4dGVybiBjb25zdCBzdHJ1Y3QgbmZfYnJfb3BzIF9fcmN1ICpuZl9icl9vcHM7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDI1LS8qIGJyX25ldGZpbHRlci5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjAyNjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDI3LWludCBicl9uZl9jb3JlX2luaXQodm9pZCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9NzcxPXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhtdWx0aWNhc3RfbWxkX3ZlcnNpb24pO1xcbi0tXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTc3My0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM6Nzc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy03NzUtc3RhdGljIHNzaXplX3QgbmZfY2FsbF9pcHRhYmxlc19zaG93KFxcbi0tXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jPTkzNT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYnJpZGdlX2F0dHJzW10gPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtOTc2LSNlbmRpZlxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYzo5Nzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTk3OC1cXHRcXHUwMDI2ZGV2X2F0dHJfbmZfY2FsbF9pcHRhYmxlcy5hdHRyLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTE1MD1zdGF0aWMgY29uc3QgdTggc2tiX2V4dF90eXBlX2xlbltdID0ge1xcbm5ldC9jb3JlL3NrYnVmZi5jOjUxNTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2NvcmUvc2tidWZmLmMtNTE1Mi1cXHRbU0tCX0VYVF9CUklER0VfTkZdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1JFSkVDVC5oXFx1MDAzZVxcbm5ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmM6MjA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYy0yMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MjczPXZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTMxMy1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzozMTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzE1LVxcdC8qIElmIHdlIHVzZSBpcF9sb2NhbF9vdXQgZm9yIGJyaWRnZWQgdHJhZmZpYywgdGhlIE1BQyBzb3VyY2Ugb25cXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jPTMxMz12b2lkIG5mX3NlbmRfcmVzZXQ2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtMzgyLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jOjM4MzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy0zODQtXFx0LyogSWYgd2UgdXNlIGlwNl9sb2NhbF9vdXQgZm9yIGJyaWRnZWQgdHJhZmZpYywgdGhlIE1BQyBzb3VyY2Ugb25cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xNDg1PWNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDg2LVxcdHRyaXN0YXRlICdcXFwicGh5c2RldlxcXCIgbWF0Y2ggc3VwcG9ydCdcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4NzpcXHRkZXBlbmRzIG9uIEJSSURHRSBcXHUwMDI2XFx1MDAyNiBCUklER0VfTkVURklMVEVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0ODgtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xMjg9aGFzaF9uZXRpZmFjZTRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTEzOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MTM5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xNDAtc3RhdGljIGNvbnN0IGNoYXIgKmdldF9waHlzaW5kZXZfbmFtZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTU2PWhhc2hfbmV0aWZhY2U0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTE3Ny1cXHRpZiAob3B0LVxcdTAwM2VjbWRmbGFncyBcXHUwMDI2IElQU0VUX0ZMQUdfUEhZU0RFVikge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoxNzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTE3OS1cXHRcXHRjb25zdCBjaGFyICplaWZhY2UgPSBTUkNESVIgPyBnZXRfcGh5c2luZGV2X25hbWUoc2tiLCB4dF9uZXQocGFyKSkgOlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM3Nz1oYXNoX25ldGlmYWNlNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zOTUtXFx0aWYgKG9wdC1cXHUwMDNlY21kZmxhZ3MgXFx1MDAyNiBJUFNFVF9GTEFHX1BIWVNERVYpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6Mzk2OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zOTctXFx0XFx0Y29uc3QgY2hhciAqZWlmYWNlID0gU1JDRElSID8gZ2V0X3BoeXNpbmRldl9uYW1lKHNrYiwgeHRfbmV0KHBhcikpIDpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jPTExMz1uZl9sb2dfZHVtcF9wYWNrZXRfY29tbW9uKHN0cnVjdCBuZl9sb2dfYnVmICptLCB1OCBwZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jLTEyNi1cXHRcXHRcXHRvdXQgPyBvdXQtXFx1MDAzZW5hbWUgOiBcXFwiXFxcIik7XFxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmM6MTI3OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jLTEyOC1cXHRwaHlzaW5kZXYgPSBuZl9icmlkZ2VfZ2V0X3BoeXNpbmRldihza2IsIG5ldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmM9NTk9c3RhdGljIHZvaWQgbmZfcXVldWVfZW50cnlfcmVsZWFzZV9yZWZzKHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtNjktXFxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jOjcwOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy03MS1cXHRkZXZfcHV0KGVudHJ5LVxcdTAwM2VicmlkZ2VfZGV2KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYz04ND1zdGF0aWMgdm9pZCBfX25mX3F1ZXVlX2VudHJ5X2luaXRfcGh5c2RldnMoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtODUte1xcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYzo4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtODctXFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGVudHJ5LVxcdTAwM2Vza2I7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmM9MTEyPWJvb2wgbmZfcXVldWVfZW50cnlfZ2V0X3JlZnMoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy0xMjItXFxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jOjEyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtMTI0LVxcdGRldl9ob2xkKGVudHJ5LVxcdTAwM2VicmlkZ2VfZGV2KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQxLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjQyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQzLSNpbmNsdWRlIFxcXCIuLi9icmlkZ2UvYnJfcHJpdmF0ZS5oXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM9NDIyPXN0YXRpYyBpbnQgbmZ1bG5sX3B1dF9icmlkZ2Uoc3RydWN0IG5mdWxubF9pbnN0YW5jZSAqaW5zdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQ1My1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYzo0NTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNDU1LXN0YXRpYyBpbnQgbmZsb2dfcHV0X21hc3Rlcl9pZmluZGV4KHN0cnVjdCBza19idWZmICpubHNrYiwgaW50IGF0dHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYz00NzQ9X19idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmZubF9sb2dfbmV0ICpsb2csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01MDktXFx0aWYgKGluZGV2KSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NTEwOiNpZiAhSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01MTEtXFx0XFx0aWYgKG5sYV9wdXRfYmUzMihpbnN0LVxcdTAwM2Vza2IsIE5GVUxBX0lGSU5ERVhfSU5ERVYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01NDUtXFx0aWYgKG91dGRldikge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjU0NjojaWYgIUlTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNTQ3LVxcdFxcdGlmIChubGFfcHV0X2JlMzIoaW5zdC1cXHUwMDNlc2tiLCBORlVMQV9JRklOREVYX09VVERFVixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jPTcxOD1uZnVsbmxfbG9nX3BhY2tldChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy03NTYtXFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodV9pbnQzMl90KSlcXHQvKiBpZmluZGV4ICovXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NzU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTc1OC1cXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1X2ludDMyX3QpKVxcdC8qIGlmaW5kZXggKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNDktXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo1MDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTUxLSNpbmNsdWRlIFxcXCIuLi9icmlkZ2UvYnJfcHJpdmF0ZS5oXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz00Njc9c3RhdGljIGJvb2wgbmZfYnJpZGdlX3BvcnRzX3ZhbGlkKGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy00Njgte1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NDY5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNDcwLVxcdGlmICghbmZfYnJpZGdlX3BvcnRfdmFsaWQoZW50cnktXFx1MDAzZXBoeXNpbikgfHxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9Njc1PXN0YXRpYyBpbnQgbmZfcXVldWVfY2hlY2tzdW1faGVscChzdHJ1Y3Qgc2tfYnVmZiAqZW50c2tiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02ODItXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo2ODM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02ODQtc3RhdGljIGludCBuZnFubF9wdXRfbWFzdGVyX2lmaW5kZXgoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLCBpbnQgYXR0cixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzEyPW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzM3LVxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHVfaW50MzJfdCkpXFx0LyogaWZpbmRleCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NzM4OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzM5LVxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHVfaW50MzJfdCkpXFx0LyogaWZpbmRleCAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MzItXFx0aWYgKGluZGV2KSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MzM6I2lmICFJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODM0LVxcdFxcdGlmIChubGFfcHV0X2JlMzIoc2tiLCBORlFBX0lGSU5ERVhfSU5ERVYsIGh0b25sKGluZGV2LVxcdTAwM2VpZmluZGV4KSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTg2My1cXHRpZiAob3V0ZGV2KSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4NjQ6I2lmICFJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODY1LVxcdFxcdGlmIChubGFfcHV0X2JlMzIoc2tiLCBORlFBX0lGSU5ERVhfT1VUREVWLCBodG9ubChvdXRkZXYtXFx1MDAzZWlmaW5kZXgpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTA0OD1uZl9xdWV1ZV9lbnRyeV9kdXAoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDYxLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwNjMtLyogV2hlbiBjYWxsZWQgZnJvbSBicmlkZ2UgbmV0ZmlsdGVyLCBza2ItXFx1MDAzZWRhdGEgbXVzdCBwb2ludCB0byBNQUMgaGVhZGVyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE0OTk9ZGV2X2NtcChzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBsb25nIGlmaW5kZXgpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNTAwLXtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE1MDE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNTAyLVxcdGludCBwaHlzaW5pZiwgcGh5c291dGlmO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWc9Nz1DT05GSUdfQlJJREdFX0VCVF9UX0ZJTFRFUj1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWc6ODpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWctOS1DT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzI6NTYuNzA1MzI4NDM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExNDg5OTk2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgYnJfbmV0ZmlsdGVyX2hvb2tzLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgY2hhbmdlcyBhcmUgaW1wYWN0aW5nIHRoZSBicmlkZ2UgbmV0ZmlsdGVyIGhvb2tzLiBUaW1lIHRvIGNyYWNrIG9wZW4gYG5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSdtIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCBob3cgdGhlIGhvb2tzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuIEnigJltIHRoaW5raW5nIEkgd2lsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgbmV0ZmlsdGVyIGZyYW1ld29yayB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbnRleHQuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyB3aWxsIGJlLiBMZXTigJlzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcwMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMzOjA3Ljg1NDMzMDY1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODU6XFx0XFx0XFx0LnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVCxcXG4xMDg2OlxcdFxcdH0sXFxuMTA4NzpcXHR9O1xcbjEwODg6XFx0XFxuMTA4OTpcXHRzdGF0aWMgaW50IGJybmZfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbjEwOTA6XFx0XFx0XFx0XFx0ICAgICB2b2lkICpwdHIpXFxuMTA5MTpcXHR7XFxuMTA5MjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XFxuMTA5MzpcXHRcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xcbjEwOTQ6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbjEwOTU6XFx0XFx0aW50IHJldDtcXG4xMDk2OlxcdFxcbjEwOTc6XFx0XFx0aWYgKGV2ZW50ICE9IE5FVERFVl9SRUdJU1RFUiB8fCAhbmV0aWZfaXNfYnJpZGdlX21hc3RlcihkZXYpKVxcbjEwOTg6XFx0XFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbjEwOTk6XFx0XFxuMTEwMDpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbjExMDE6XFx0XFxuMTEwMjpcXHRcXHRuZXQgPSBkZXZfbmV0KGRldik7XFxuMTEwMzpcXHRcXHRicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xcbjExMDQ6XFx0XFx0aWYgKGJybmV0LVxcdTAwM2VlbmFibGVkIHx8IGJybmV0LVxcdTAwM2Vpbl91c2VybnMpXFxuMTEwNTpcXHRcXHRcXHRyZXR1cm4gTk9USUZZX09LO1xcbjExMDY6XFx0XFxuMTEwNzpcXHRcXHRyZXQgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBicl9uZl9vcHMsIEFSUkFZX1NJWkUoYnJfbmZfb3BzKSk7XFxuMTEwODpcXHRcXHRpZiAocmV0KVxcbjExMDk6XFx0XFx0XFx0cmV0dXJuIE5PVElGWV9CQUQ7XFxuMTExMDpcXHRcXG4xMTExOlxcdFxcdGJybmV0LVxcdTAwM2VlbmFibGVkID0gdHJ1ZTtcXG4xMTEyOlxcdFxcdHJldHVybiBOT1RJRllfT0s7XFxuMTExMzpcXHR9XFxuMTExNDpcXHRcXG4xMTE1OlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYnJuZl9ub3RpZmllciBfX3JlYWRfbW9zdGx5ID0ge1xcbjExMTY6XFx0XFx0Lm5vdGlmaWVyX2NhbGwgPSBicm5mX2RldmljZV9ldmVudCxcXG4xMTE3OlxcdH07XFxuMTExODpcXHRcXG4xMTE5OlxcdC8qIHJlY3Vyc2l2ZWx5IGludm9rZXMgbmZfaG9va19zbG93IChhZ2FpbiksIHNraXBwaW5nIGFscmVhZHktY2FsbGVkXFxuMTEyMDpcXHQgKiBob29rcyAoXFx1MDAzYyBORl9CUl9QUklfQlJORikuXFxuMTEyMTpcXHQgKlxcbjExMjI6XFx0ICogQ2FsbGVkIHdpdGggcmN1IHJlYWQgbG9jayBoZWxkLlxcbjExMjM6XFx0ICovXFxuMTEyNDpcXHRpbnQgYnJfbmZfaG9va190aHJlc2godW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCxcXG4xMTI1OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xMTI2OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICppbmRldixcXG4xMTI3OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvdXRkZXYsXFxuMTEyODpcXHRcXHRcXHQgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3QgbmV0ICosIHN0cnVjdCBzb2NrICosXFxuMTEyOTpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICopKVxcbjExMzA6XFx0e1xcbjExMzE6XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTtcXG4xMTMyOlxcdFxcdHN0cnVjdCBuZl9ob29rX3N0YXRlIHN0YXRlO1xcbjExMzM6XFx0XFx0c3RydWN0IG5mX2hvb2tfb3BzICoqb3BzO1xcbjExMzQ6XFx0XFx0dW5zaWduZWQgaW50IGk7XFxuMTEzNTpcXHRcXHRpbnQgcmV0O1xcbjExMzY6XFx0XFxuMTEzNzpcXHRcXHRlID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cXHUwMDNlbmYuaG9va3NfYnJpZGdlW2hvb2tdKTtcXG4xMTM4OlxcdFxcdGlmICghZSlcXG4xMTM5OlxcdFxcdFxcdHJldHVybiBva2ZuKG5ldCwgc2ssIHNrYik7XFxuMTE0MDpcXHRcXG4xMTQxOlxcdFxcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XFxuMTE0MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZS1cXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XFxuMTE0MzpcXHRcXHRcXHQvKiBUaGVzZSBob29rcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgKi9cXG4xMTQ0OlxcdFxcdFxcdGlmIChvcHNbaV0tXFx1MDAzZXByaW9yaXR5IFxcdTAwM2MgTkZfQlJfUFJJX0JSTkYpXFxuMTE0NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMTQ2OlxcdFxcbjExNDc6XFx0XFx0XFx0LyogVGhlc2UgaG9va3MgaGF2ZSBub3QgYmVlbiBjYWxsZWQgeWV0LCBydW4gdGhlbS4gKi9cXG4xMTQ4OlxcdFxcdFxcdGlmIChvcHNbaV0tXFx1MDAzZXByaW9yaXR5IFxcdTAwM2UgTkZfQlJfUFJJX0JSTkYpXFxuMTE0OTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTUwOlxcdFxcbjExNTE6XFx0XFx0XFx0LyogdGFrZSBhIGNsb3NlciBsb29rIGF0IE5GX0JSX1BSSV9CUk5GLiAqL1xcbjExNTI6XFx0XFx0XFx0aWYgKG9wc1tpXS1cXHUwMDNlaG9vayA9PSBicl9uZl9wcmVfcm91dGluZykge1xcbjExNTM6XFx0XFx0XFx0XFx0LyogVGhpcyBob29rIGRpdmVydGVkIHRoZSBza2IgdG8gdGhpcyBmdW5jdGlvbixcXG4xMTU0OlxcdFxcdFxcdFxcdCAqIGhvb2tzIGFmdGVyIHRoaXMgaGF2ZSBub3QgYmVlbiBydW4geWV0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzowNy44NTQ1MDI1MTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDY5NTE1MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJJ2QgYmUgdGhpbmtpbmcgYXMgSSBleGFtaW5lIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBhbmQgYXNzdW1pbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYGJyX25ldGZpbHRlcl9ob29rcy5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIGJyaWRnaW5nIG5ldGZpbHRlciBob29rcy4gSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgMTIyMCB0byAxMzQwIG9mIGBicl9uZXRmaWx0ZXJfaG9va3MuY2AuIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiBkZWFscyB3aXRoIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyB0aGUgYnJpZGdlIGludGVyYWN0cyB3aXRoIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLCBwcm9iYWJseSBmaWx0ZXJpbmcgb3IgbWFuaXB1bGF0aW5nIHBhY2tldHMgYXMgdGhleSB0cmF2ZXJzZSB0aGUgYnJpZGdlLlxuXG5TcGVjaWZpY2FsbHksIEknbSBhbnRpY2lwYXRpbmcgdGhpcyBhcmVhIGNvbnRhaW5zIHRoZSBjcnVjaWFsIHJlZ2lzdHJhdGlvbiBvciB1bnJlZ2lzdHJhdGlvbiBsb2dpYyBmb3Igc3BlY2lmaWMgbmV0ZmlsdGVyIGhvb2tzIHVzZWQgd2l0aGluIHRoZSBicmlkZ2luZyBjb250ZXh0LiBQZXJoYXBzIGl0IGRlZmluZXMgdGhlIHByaW9yaXRpZXMgb2YgdGhvc2UgaG9va3MgcmVsYXRpdmUgdG8gb3RoZXIgbmV0ZmlsdGVyIGNvbXBvbmVudHM7IG9yIHRoZSBhY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aG9zZSBuZXRmaWx0ZXIgcnVsZXMuIEknbSBrZWVuIHRvIHNlZSBpZiBpdCBtYWtlcyB1c2Ugb2Ygc3BlY2lmaWMgbmV0ZmlsdGVyIG1vZHVsZXMgb3IgZXh0ZW5zaW9ucyB0aGF0IGFyZSBicmlkZ2Utc3BlY2lmaWMuIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgcGFja2V0IG1hbmdsaW5nLCBOQVQsIG9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgYXJlIGludGVncmF0ZWQgaW50byB0aGUgYnJpZGdlJ3Mgb3BlcmF0aW9uIOKAkyB0aGF0J3Mgb2Z0ZW4gYSBrZXkgYXJlYSBmb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIHN0YXRlbWVudHMuIEl0J3MgbGlrZWx5IHRoYXQgcGFydHMgb2YgdGhpcyBzZWN0aW9uIGhhbmRsZSBkaWZmZXJlbnQgYnJpZGdlIG1vZGVzIG9yIGNvbmZpZ3VyYXRpb25zIChlLmcuLCBzcGFubmluZy10cmVlLCBtdWx0aWNhc3Qgc25vb3BpbmcsIG9yIFZMQU4gaGFuZGxpbmcpLiBJJ2xsIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldGZpbHRlciBob29rcyBhcmUgYWRhcHRlZCBiYXNlZCBvbiB0aGUgYnJpZGdlJ3MgY3VycmVudCBvcGVyYXRpb25hbCBzdGF0ZS4gSSdsbCBhbHNvIGxvb2sgZm9yIGhvdyB0aGVzZSBob29rcyByZWxhdGUgdG8gaW5ncmVzcyBhbmQgZWdyZXNzIHBhY2tldCBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgYnJpZGdlLiBEb2VzIGl0IGZvbGxvdyBhIGNsZWFyLCB3ZWxsLWRlZmluZWQgcGF0aCwgb3IgaXMgaXQgYSBiaXQgbWVzc3k/XG5cbkZpbmFsbHksIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIG5ldGZpbHRlciBmdW5jdGlvbnMgbGlrZSBgbmZfaG9va19vcHNgLCBgbmZfcmVnaXN0ZXJfaG9va2AsIG9yIGBuZl91bnJlZ2lzdGVyX2hvb2tgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZWlyIGFyZ3VtZW50cyBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgYnJpZGdlIGFuZCBuZXRmaWx0ZXIuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGF0YSBzdHJ1Y3R1cmVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgcGFja2V0IGluZm9ybWF0aW9uIGlzIGV4cG9zZWQgKG9yIGhpZGRlbikgdG8gdGhlIGhvb2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk4MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzM6MTEuOTI0MDIwNzE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIyMCxcbiAgXCJMaW5lQ291bnRcIjogMTIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjA6XFx0XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gYnJuZl9zeXNjdGxfY2FsbF90YWJsZXMsXFxuMTIyMTpcXHRcXHR9LFxcbjEyMjI6XFx0fTtcXG4xMjIzOlxcdFxcbjEyMjQ6XFx0c3RhdGljIGlubGluZSB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChzdHJ1Y3QgYnJuZl9uZXQgKmJybmYpXFxuMTIyNTpcXHR7XFxuMTIyNjpcXHRcXHRicm5mLVxcdTAwM2VjYWxsX2lwdGFibGVzID0gMTtcXG4xMjI3OlxcdFxcdGJybmYtXFx1MDAzZWNhbGxfaXA2dGFibGVzID0gMTtcXG4xMjI4OlxcdFxcdGJybmYtXFx1MDAzZWNhbGxfYXJwdGFibGVzID0gMTtcXG4xMjI5OlxcdFxcdGJybmYtXFx1MDAzZWZpbHRlcl92bGFuX3RhZ2dlZCA9IDA7XFxuMTIzMDpcXHRcXHRicm5mLVxcdTAwM2VmaWx0ZXJfcHBwb2VfdGFnZ2VkID0gMDtcXG4xMjMxOlxcdFxcdGJybmYtXFx1MDAzZXBhc3Nfdmxhbl9pbmRldiA9IDA7XFxuMTIzMjpcXHR9XFxuMTIzMzpcXHQjZW5kaWZcXG4xMjM0OlxcdFxcbjEyMzU6XFx0c3RhdGljIGludCBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4xMjM2OlxcdHtcXG4xMjM3OlxcdCNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuMTIzODpcXHRcXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSA9IGJybmZfdGFibGU7XFxuMTIzOTpcXHRcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xcbjEyNDA6XFx0XFxuMTI0MTpcXHRcXHRpZiAoIW5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpIHtcXG4xMjQyOlxcdFxcdFxcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKGJybmZfdGFibGUpLCBHRlBfS0VSTkVMKTtcXG4xMjQzOlxcdFxcdFxcdGlmICghdGFibGUpXFxuMTI0NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMjQ1OlxcdFxcdH1cXG4xMjQ2OlxcdFxcbjEyNDc6XFx0XFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcXG4xMjQ4OlxcdFxcdHRhYmxlWzBdLmRhdGEgPSBcXHUwMDI2YnJuZXQtXFx1MDAzZWNhbGxfYXJwdGFibGVzO1xcbjEyNDk6XFx0XFx0dGFibGVbMV0uZGF0YSA9IFxcdTAwMjZicm5ldC1cXHUwMDNlY2FsbF9pcHRhYmxlcztcXG4xMjUwOlxcdFxcdHRhYmxlWzJdLmRhdGEgPSBcXHUwMDI2YnJuZXQtXFx1MDAzZWNhbGxfaXA2dGFibGVzO1xcbjEyNTE6XFx0XFx0dGFibGVbM10uZGF0YSA9IFxcdTAwMjZicm5ldC1cXHUwMDNlZmlsdGVyX3ZsYW5fdGFnZ2VkO1xcbjEyNTI6XFx0XFx0dGFibGVbNF0uZGF0YSA9IFxcdTAwMjZicm5ldC1cXHUwMDNlZmlsdGVyX3BwcG9lX3RhZ2dlZDtcXG4xMjUzOlxcdFxcdHRhYmxlWzVdLmRhdGEgPSBcXHUwMDI2YnJuZXQtXFx1MDAzZXBhc3Nfdmxhbl9pbmRldjtcXG4xMjU0OlxcdFxcbjEyNTU6XFx0XFx0YnJfbmV0ZmlsdGVyX3N5c2N0bF9kZWZhdWx0KGJybmV0KTtcXG4xMjU2OlxcdFxcbjEyNTc6XFx0XFx0YnJuZXQtXFx1MDAzZWN0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC9icmlkZ2VcXFwiLCB0YWJsZSxcXG4xMjU4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdEFSUkFZX1NJWkUoYnJuZl90YWJsZSkpO1xcbjEyNTk6XFx0XFx0aWYgKCFicm5ldC1cXHUwMDNlY3RsX2hkcikge1xcbjEyNjA6XFx0XFx0XFx0aWYgKCFuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKVxcbjEyNjE6XFx0XFx0XFx0XFx0a2ZyZWUodGFibGUpO1xcbjEyNjI6XFx0XFxuMTI2MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMjY0OlxcdFxcdH1cXG4xMjY1OlxcdCNlbmRpZlxcbjEyNjY6XFx0XFx0cmV0dXJuIDA7XFxuMTI2NzpcXHR9XFxuMTI2ODpcXHRcXG4xMjY5OlxcdHN0YXRpYyB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0LFxcbjEyNzA6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicm5mX25ldCAqYnJuZXQpXFxuMTI3MTpcXHR7XFxuMTI3MjpcXHQjaWZkZWYgQ09ORklHX1NZU0NUTFxcbjEyNzM6XFx0XFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWRlciA9IGJybmV0LVxcdTAwM2VjdGxfaGRyO1xcbjEyNzQ6XFx0XFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuMTI3NTpcXHRcXG4xMjc2OlxcdFxcdGlmICghaGVhZGVyKVxcbjEyNzc6XFx0XFx0XFx0cmV0dXJuO1xcbjEyNzg6XFx0XFxuMTI3OTpcXHRcXHR0YWJsZSA9IGhlYWRlci1cXHUwMDNlY3RsX3RhYmxlX2FyZztcXG4xMjgwOlxcdFxcdHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShoZWFkZXIpO1xcbjEyODE6XFx0XFx0aWYgKCFuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKVxcbjEyODI6XFx0XFx0XFx0a2ZyZWUodGFibGUpO1xcbjEyODM6XFx0I2VuZGlmXFxuMTI4NDpcXHR9XFxuMTI4NTpcXHRcXG4xMjg2OlxcdHN0YXRpYyBpbnQgX19uZXRfaW5pdCBicm5mX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4xMjg3OlxcdHtcXG4xMjg4OlxcdFxcdGlmIChuZXQtXFx1MDAzZXVzZXJfbnMgIT0gXFx1MDAyNmluaXRfdXNlcl9ucykge1xcbjEyODk6XFx0XFx0XFx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xcbjEyOTA6XFx0XFxuMTI5MTpcXHRcXHRcXHRicm5ldC1cXHUwMDNlaW5fdXNlcm5zID0gdHJ1ZTtcXG4xMjkyOlxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiYnJfbmV0ZmlsdGVyIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gdXNlciBuYW1lc3BhY2VzXFxcXG5cXFwiKTtcXG4xMjkzOlxcdFxcdFxcdHJldHVybiAwO1xcbjEyOTQ6XFx0XFx0fVxcbjEyOTU6XFx0XFxuMTI5NjpcXHRcXHRyZXR1cm4gYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChuZXQpO1xcbjEyOTc6XFx0fVxcbjEyOTg6XFx0XFxuMTI5OTpcXHRzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJybmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbjEzMDA6XFx0e1xcbjEzMDE6XFx0XFx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcXG4xMzAyOlxcdFxcbjEzMDM6XFx0XFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcXG4xMzA0OlxcdFxcdGlmIChicm5ldC1cXHUwMDNlZW5hYmxlZCkge1xcbjEzMDU6XFx0XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBicl9uZl9vcHMsIEFSUkFZX1NJWkUoYnJfbmZfb3BzKSk7XFxuMTMwNjpcXHRcXHRcXHRicm5ldC1cXHUwMDNlZW5hYmxlZCA9IGZhbHNlO1xcbjEzMDc6XFx0XFx0fVxcbjEzMDg6XFx0XFxuMTMwOTpcXHRcXHRicl9uZXRmaWx0ZXJfc3lzY3RsX2V4aXRfbmV0KG5ldCwgYnJuZXQpO1xcbjEzMTA6XFx0fVxcbjEzMTE6XFx0XFxuMTMxMjpcXHRzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGJybmZfbmV0X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbjEzMTM6XFx0XFx0LmluaXQgPSBicm5mX2luaXRfbmV0LFxcbjEzMTQ6XFx0XFx0LmV4aXQgPSBicm5mX2V4aXRfbmV0LFxcbjEzMTU6XFx0XFx0LmlkICAgPSBcXHUwMDI2YnJuZl9uZXRfaWQsXFxuMTMxNjpcXHRcXHQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnJuZl9uZXQpLFxcbjEzMTc6XFx0fTtcXG4xMzE4OlxcdFxcbjEzMTk6XFx0c3RhdGljIGludCBfX2luaXQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzM6MTEuOTI0MTY1NTE5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjkzNTY5NzIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aCBGdXp6aW5nIC0gQnJpZGdlIE5ldGZpbHRlciBpbiBVc2VyIE5hbWVzcGFjZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgY29tbWl0IGRpc2FibGVzIGJyaWRnZSBuZXRmaWx0ZXIgd2hlbiB3ZSdyZSBpbnNpZGUgYSBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAoYG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9uc2ApLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBrZXkgaXMgaG93IGl0J3MgaGFuZGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGRldmljZSByZWdpc3RyYXRpb24uIFdoZW4gYGJybmZfaW5pdF9uZXRgIGlzIGNhbGxlZCB3aXRoaW4gYSB1c2VyIG5hbWVzcGFjZSwgaXQgc2V0cyBgYnJuZXQtXHUwMDNlaW5fdXNlcm5zID0gdHJ1ZWAuICBUaGVuLCB3aGVuIGEgYnJpZGdlIGlzIHJlZ2lzdGVyZWQsIGBicm5mX2RldmljZV9ldmVudGAgY2hlY2tzIGBicm5ldC1cdTAwM2VlbmFibGVkIHx8IGJybmV0LVx1MDAzZWluX3VzZXJuc2AuIEJlY2F1c2UgYGJybmYtXHUwMDNlaW5fdXNlcm5zYCBpcyBub3cgdHJ1ZSwgYG5mX3JlZ2lzdGVyX25ldF9ob29rc2AgaXMgbmV2ZXIgY2FsbGVkLiBBbHNvLCBiZWNhdXNlIGBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0YCBpcyBub3QgY2FsbGVkLCBgYnJuZXQtXHUwMDNlY3RsX2hkcmAgcmVtYWlucyBOVUxMLiBTdWJzZXF1ZW50bHksIG9uIGV4aXQgdmlhIGBicm5mX2V4aXRfbmV0YCwgYGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXRgIGNoZWNrcyBmb3IgYSBOVUxMIGhlYWRlciBhbmQgcmV0dXJucy5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnV6emFibGU/IFRpbWUgdG8gY2hlY2sgdGhlIHJ1bGVzLiBUaGUgZ3VpZGVsaW5lcyBzYXkgbm8gaWYgaXQncyBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgZGVjb3JhdGlvbiwgY29uc3RhbnRzLCBvciB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gIEFsc28sIGNlcnRhaW4gdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgYXJlIGV4Y2x1ZGVkLCBhcyBhcmUgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcy4gQnV0IHRoaXMgbG9va3MgZGlmZmVyZW50LlxuXG5UaGlzICpkZWZpbml0ZWx5KiB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gSSdtIHNlZWluZyBjaGFuZ2VzIGluIHBlcm5ldCBpbml0aWFsaXphdGlvbiwgaG93IGRldmljZSBldmVudHMgYXJlIGhhbmRsZWQgZm9yIGJyaWRnZSBuZXRmaWx0ZXIsIHN5c2N0bCByZWdpc3RyYXRpb24gYW5kIGV4aXQsIGFuZCB0aGUgZGlzYWJsaW5nIG9mIGBicl9uZXRmaWx0ZXJgIGluIG5vbi1pbml0IHVzZXIgbmFtZXNwYWNlcy4gSXQncyBwbGF5aW5nIHdpdGggbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24vZGVzdHJ1Y3Rpb24gYW5kIGJyaWRnZSBjcmVhdGlvbiB3aXRoaW4gdXNlciBuYW1lc3BhY2VzLiBUaGlzIGlzICp0ZXh0Ym9vayogc3l6a2FsbGVyIG1hdGVyaWFsLiBDcmVhdGluZyB1c2VyIG5hbWVzcGFjZXMsIG5ldCBuYW1lc3BhY2VzIGluc2lkZSB0aG9zZSwgc2V0dGluZyB1cCBicmlkZ2UgZGV2aWNlcywgcmVnaXN0ZXJpbmcvdW5yZWdpc3RlcmluZyBzeXNjdGwsIGFuZCB0ZWFyaW5nIGRvd24gdGhlIG5hbWVzcGFjZXPigKYgVGhpcyBpcyBleGFjdGx5IHdoYXQgc3l6a2FsbGVyIGV4Y2VscyBhdCwgYW5kIEkgY2FuIGJlIHN1cmUgaXQgd2lsbCBiZSB0ZXN0aW5nIHRoaXMgY29kZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgYENPTkZJR19CUklER0VfTkVURklMVEVSYCBpcyBlbmFibGVkLiBUaGF0IHNob3VsZCBiZSBhIHF1aWNrIGNoZWNrIGluIGBuZXQvS2NvbmZpZ2AuIFllcywgdGhpcyBpcyB3b3J0aCBmdXp6aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAxNCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMzOjE4Ljg1OTg2NTU2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NTk3MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUklER0VfTkVURklMVEVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MjIwPWNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcXG4tLVxcbm5ldC9LY29uZmlnLTIzMC1cXG5uZXQvS2NvbmZpZzoyMzE6Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcXG5uZXQvS2NvbmZpZy0yMzItXFx0dHJpc3RhdGUgXFxcIkJyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzoxOC45Nzc0NjgyNDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5NTExMTcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbmV0L0tjb25maWdgIGZvciBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMgb2YgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmtpbmcgbW9kdWxlLiBUaGUgbW9zdCBkaXJlY3QgcGF0aCwgYXMgYWx3YXlzLCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZXhhbWluaW5nIGFyb3VuZCBsaW5lIDIzMSwgYXMgdGhhdCdzIG9mdGVuIHdoZXJlIHlvdSBmaW5kIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBicmFuY2hpbmcgbG9naWMgZm9yIGEgZmVhdHVyZS4gQnkgZXhhbWluaW5nIHRoZSBpZmRlZnMgYW5kIGRlcGVuZGVuY2llcyBkZWNsYXJlZCBhcm91bmQgdGhhdCBwb2ludCwgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBwcmV0dHkgY2xlYXIgcGljdHVyZSBvZiB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgY29uZmlndXJlZCB0byBnZXQgdGhpcyB0aGluZyB3b3JraW5nLCBhbmQgYWxzbyB3aGF0IG90aGVyIGZ1bmN0aW9uYWxpdGllcyBkZXBlbmQgb24gaXQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGV4cGxvcmF0aW9uLCBzaW5jZSB0aGVzZSB0eXBlcyBvZiBmaWxlcyB1c3VhbGx5IGhhdmUgYSBnb29kIG92ZXJ2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMzOjIxLjI3MjU4MTkzMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjU6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3UgY2FuIHNlbGVjdCBiZXR3ZWVuIGFsbCB0aGUgbmV0ZmlsdGVyIG1vZHVsZXMuXFxuIDIyNjpcXHRcXHQgIElmIHlvdSBzYXkgTiB0aGUgbW9yZSB1bnVzdWFsIG9uZXMgd2lsbCBub3QgYmUgc2hvd24gYW5kIHRoZVxcbiAyMjc6XFx0XFx0ICBiYXNpYyBvbmVzIG5lZWRlZCBieSBtb3N0IHBlb3BsZSB3aWxsIGRlZmF1bHQgdG8gJ00nLlxcbiAyMjg6XFx0XFxuIDIyOTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDIzMDpcXHRcXG4gMjMxOlxcdGNvbmZpZyBCUklER0VfTkVURklMVEVSXFxuIDIzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiQnJpZGdlZCBJUC9BUlAgcGFja2V0cyBmaWx0ZXJpbmdcXFwiXFxuIDIzMzpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAyMzQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVIgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbiAyMzU6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMjM2OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbiAyMzc6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuIDIzODpcXHRcXHRoZWxwXFxuIDIzOTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgbGV0IGFycHRhYmxlcyByZXNwLiBpcHRhYmxlcyBzZWUgYnJpZGdlZFxcbiAyNDA6XFx0XFx0ICBBUlAgcmVzcC4gSVAgdHJhZmZpYy4gSWYgeW91IHdhbnQgYSBicmlkZ2luZyBmaXJld2FsbCwgeW91IHByb2JhYmx5XFxuIDI0MTpcXHRcXHQgIHdhbnQgdGhpcyBvcHRpb24gZW5hYmxlZC5cXG4gMjQyOlxcdFxcdCAgRW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGRvZXNuJ3QgZW5hYmxlIG9yIGRpc2FibGVcXG4gMjQzOlxcdFxcdCAgZWJ0YWJsZXMuXFxuIDI0NDpcXHRcXG4gMjQ1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjQ2OlxcdFxcbiAyNDc6XFx0c291cmNlIFxcXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxuIDI0ODpcXHRzb3VyY2UgXFxcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXFxcIlxcbiAyNDk6XFx0c291cmNlIFxcXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG4gMjUwOlxcdHNvdXJjZSBcXFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG4gMjUxOlxcdFxcbiAyNTI6XFx0ZW5kaWYgIyBpZiBORVRGSUxURVJcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0c291cmNlIFxcXCJuZXQvc2N0cC9LY29uZmlnXFxcIlxcbiAyNTU6XFx0c291cmNlIFxcXCJuZXQvcmRzL0tjb25maWdcXFwiXFxuIDI1NjpcXHRzb3VyY2UgXFxcIm5ldC90aXBjL0tjb25maWdcXFwiXFxuIDI1NzpcXHRzb3VyY2UgXFxcIm5ldC9hdG0vS2NvbmZpZ1xcXCJcXG4gMjU4OlxcdHNvdXJjZSBcXFwibmV0L2wydHAvS2NvbmZpZ1xcXCJcXG4gMjU5OlxcdHNvdXJjZSBcXFwibmV0LzgwMi9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzoyMS4yNzI2NTE1NDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM0ODQ3NTQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIE5hbWVzcGFjZSBDb25maWd1cmF0aW9uIFJlbGV2YW5jZSoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgZmVhdHVyZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQgdG8gbXkgdGVzdGluZy4gRmlyc3QsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBDT05GSUdfVVNFUl9OU2AgYW5kIGBDT05GSUdfTkVUX05TYC4gTWFrZXMgc2Vuc2U7IHRob3NlIGFyZSB0aGUgbmFtZXNwYWNlcyBJJ20gbW9zdCBsaWtlbHkgdG8gcnVuIGludG8gaW4gdGhlIGNvbnRleHQgb2Ygd2hhdGV2ZXIgdGhpcyBmZWF0dXJlIGRvZXMuIEFyZSBgVVNFUl9OU2Agb3IgYE5FVF9OU2AgaW1wb3J0YW50IGZvciB0ZXN0aW5nPyBJIG5lZWQgdG8ga25vdyBpZiB0aGV5J3JlIGV2ZW4gZmFjdG9ycy4gVGhlbiwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciwgSSdsbCB0cmFjayBkb3duIHdoZXJlIGBVU0VSX05TYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIHdhbnQgYSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk3NCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzM6MjMuNjIxMTI5ODk3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzgwNjEwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNFUl9OU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTQzOD1jb25maWcgSVBDX05TXFxuLS1cXG5pbml0L0tjb25maWctMTQ0NS1cXG5pbml0L0tjb25maWc6MTQ0Njpjb25maWcgVVNFUl9OU1xcbmluaXQvS2NvbmZpZy0xNDQ3LVxcdGJvb2wgXFxcIlVzZXIgbmFtZXNwYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzoyMy42Nzg5NDE2ODJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTkzNDA1OTEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcga2V5IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBDT05GSUdfQlJJREdFYCwgYENPTkZJR19CUklER0VfTkVURklMVEVSYCwgYENPTkZJR19VU0VSX05TYCwgYW5kIGBDT05GSUdfTkVUX05TYC4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGJyaWRnaW5nIGFuZCBjb250YWluZXJpemF0aW9uLCBzbyB0aGVpciBzdGF0dXMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IHNldHVwLiBOb3csIHRvIGdldCB0aGUgc3BlY2lmaWNzIG9uIGhvdyB0aGlzIG5ldHdvcmsgYnJpZGdpbmcgaXMgaW1wbGVtZW50ZWQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBuZXQvYnJpZGdlL01ha2VmaWxlYC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGxvd2Rvd24gb24gdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGRlcGVuZGVuY2llcyBmb3IgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyODgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzoyOS42MTMwMDM5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIElFRUUgODAyLjFkIGV0aGVybmV0IGJyaWRnaW5nIGxheWVyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfQlJJREdFKSArPSBicmlkZ2Uub1xcbiAgIDc6XFx0XFxuICAgODpcXHRicmlkZ2UteVxcdDo9IGJyLm8gYnJfZGV2aWNlLm8gYnJfZmRiLm8gYnJfZm9yd2FyZC5vIGJyX2lmLm8gYnJfaW5wdXQubyBcXFxcXFxuICAgOTpcXHRcXHRcXHRcXHRicl9pb2N0bC5vIGJyX3N0cC5vIGJyX3N0cF9icGR1Lm8gXFxcXFxcbiAgMTA6XFx0XFx0XFx0XFx0YnJfc3RwX2lmLm8gYnJfc3RwX3RpbWVyLm8gYnJfbmV0bGluay5vIFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdGJyX25ldGxpbmtfdHVubmVsLm8gYnJfYXJwX25kX3Byb3h5Lm9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0YnJpZGdlLSQoQ09ORklHX1NZU0ZTKSArPSBicl9zeXNmc19pZi5vIGJyX3N5c2ZzX2JyLm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0YnJpZGdlLSQoc3Vic3QgbSx5LCQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpKSArPSBicl9uZl9jb3JlLm9cXG4gIDE2OlxcdFxcbiAgMTc6XFx0YnJfbmV0ZmlsdGVyLXkgOj0gYnJfbmV0ZmlsdGVyX2hvb2tzLm9cXG4gIDE4OlxcdGJyX25ldGZpbHRlci0kKHN1YnN0IG0seSwkKENPTkZJR19JUFY2KSkgKz0gYnJfbmV0ZmlsdGVyX2lwdjYub1xcbiAgMTk6XFx0b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICs9IGJyX25ldGZpbHRlci5vXFxuICAyMDpcXHRcXG4gIDIxOlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXFxuICAyMjpcXHRcXG4gIDIzOlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXFxuICAyNDpcXHRcXG4gIDI1OlxcdGJyaWRnZS0kKENPTkZJR19ORVRfU1dJVENIREVWKSArPSBicl9zd2l0Y2hkZXYub1xcbiAgMjY6XFx0XFxuICAyNzpcXHRvYmotJChDT05GSUdfTkVURklMVEVSKSArPSBuZXRmaWx0ZXIvXFxuICAyODpcXHRcXG4gIDI5OlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfTVJQKVxcdCs9IGJyX21ycF9zd2l0Y2hkZXYubyBicl9tcnAubyBicl9tcnBfbmV0bGluay5vXFxuICAzMDpcXHRcXG4gIDMxOlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfQ0ZNKVxcdCs9IGJyX2NmbS5vIGJyX2NmbV9uZXRsaW5rLm9cXG4gIDMyOlxcdFxcbiAgMzM6XFx0aWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9ORVRGSUxURVJcXG4gIDM0OlxcdEdDT1ZfUFJPRklMRV9icl9uZl9jb3JlLm8gOj0geVxcbiAgMzU6XFx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9ob29rcy5vIDo9IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzM6MjkuNjEzMTAwOThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI3Mzc2MjI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQnJpZGdlIE5ldGZpbHRlciBIb29rcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRoZSBgbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGltcGxlbWVudGVkIGluIHRoZXJlLCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gaXQuIEkgY291bGQgdXNlIGBncmVwYCB0byBwdWxsIHRoZW0gb3V0LCB0aGF0J3MgZ2VuZXJhbGx5IGEgcHJldHR5IGZhc3QgYXBwcm9hY2gsIG9yIEkgY2FuIGp1c3Qgc2NhbiB0aGUgZmlsZSBkaXJlY3RseS4gRWl0aGVyIHdheSwgSSBuZWVkIGEgcmFwaWQgb3ZlcnZpZXcgb2YgdGhlIGZ1bmN0aW9uIHNldCB0byB1bmRlcnN0YW5kIHRoZSBuZXRmaWx0ZXIgaG9va3MgcmVsYXRlZCB0byB0aGUgYnJpZGdpbmcgc3Vic3lzdGVtLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBob3cgcGFja2V0cyBhcmUgcHJvY2Vzc2VkIGluIHRoYXQgcGFydCBvZiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE1NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzM6MzMuODg2ODY1NzExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjIxMjQ4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWjAtOV9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NTU9c3RydWN0IGJybmZfbmV0IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtODItXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo4MzpzdGF0aWMgaW5saW5lIF9fYmUxNiB2bGFuX3Byb3RvKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04NC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTkyLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6OTM6c3RhdGljIGlubGluZSBib29sIGlzX3ZsYW5faXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtOTQte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05OS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEwMDpzdGF0aWMgaW5saW5lIGJvb2wgaXNfdmxhbl9pcHY2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDEtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDgtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDk6c3RhdGljIGlubGluZSBib29sIGlzX3ZsYW5fYXJwKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExMC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExNS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjExNjpzdGF0aWMgaW5saW5lIF9fYmUxNiBwcHBvZV9wcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTE3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTIxLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTIyOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19wcHBvZV9pcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjMte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjktXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzA6c3RhdGljIGlubGluZSBib29sIGlzX3BwcG9lX2lwdjYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMS1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xNDM9c3RydWN0IGJybmZfZnJhZ19kYXRhIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTUxLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTUyOnN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYnJuZl9mcmFnX2RhdGEsIGJybmZfZnJhZ19kYXRhX3N0b3JhZ2UpID0ge1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTUzLVxcdC5iaF9sb2NrID0gSU5JVF9MT0NBTF9MT0NLKGJoX2xvY2spLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xNTUtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNTY6c3RhdGljIHZvaWQgbmZfYnJpZGdlX2luZm9fZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTU3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTYwLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTYxOnN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKmJyaWRnZV9wYXJlbnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE2Mi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE2OC1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjE2OTpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlX3Vuc2hhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE3MC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE3My1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjE3NDp1bnNpZ25lZCBpbnQgbmZfYnJpZGdlX2VuY2FwX2hlYWRlcl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE3NS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE4NS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjE4NjpzdGF0aWMgaW5saW5lIHZvaWQgbmZfYnJpZGdlX3B1bGxfZW5jYXBfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xODcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xOTMtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxOTQ6c3RhdGljIGlubGluZSB2b2lkIG5mX2JyaWRnZV9wdWxsX2VuY2FwX2hlYWRlcl9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTk1LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMjA2LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MjA3OnN0YXRpYyBpbnQgYnJfdmFsaWRhdGVfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yMDgte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNTUtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoyNTY6dm9pZCBuZl9icmlkZ2VfdXBkYXRlX3Byb3RvY29sKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNTcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNzYtICovXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoyNzc6aW50IGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9icmlkZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNzgte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0zMzE9c3RhdGljIGlubGluZSBib29sXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzozMzI6YnJfbmZfaXB2NF9kYWRkcl93YXNfY2hhbmdlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzMzLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2UpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM3Ni0gKi9cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjM3NzpzdGF0aWMgaW50IGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM3OC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQzNS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjQzNjpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJybmZfZ2V0X2xvZ2ljYWxfZGV2KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00MzctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ1NC0vKiBTb21lIGNvbW1vbiBjb2RlIGZvciBJUHY0L0lQdjYgKi9cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjQ1NTpzdHJ1Y3QgbmV0X2RldmljZSAqc2V0dXBfcHJlX3JvdXRpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDU2LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDgzLSAqIGFkZHJlc3MgdG8gYmUgYWJsZSB0byBkZXRlY3QgRE5BVCBhZnRlcndhcmRzLiAqL1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NDg0OnN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcHJlX3JvdXRpbmcodm9pZCAqcHJpdixcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ4NS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01ODUtICovXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1ODY6c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9sb2NhbF9pbih2b2lkICpwcml2LFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTg3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTYzOS0vKiBQRl9CUklER0UvRk9SV0FSRCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NjQwOnN0YXRpYyBpbnQgYnJfbmZfZm9yd2FyZF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02NDEte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02NzMtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo2NzQ6c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9mb3J3YXJkX2lwKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02NzUtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTcyOC1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjcyOTpzdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfYXJwKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03MzAtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03NjktICovXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo3NzA6c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9mb3J3YXJkKHZvaWQgKnByaXYsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03NzEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03ODUtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo3ODY6c3RhdGljIGludCBicl9uZl9wdXNoX2ZyYWdfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTc4Ny17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTgwOT1zdGF0aWMgaW50XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo4MTA6YnJfbmZfaXBfZnJhZ21lbnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04MTEtXFx0XFx0ICBpbnQgKCpvdXRwdXQpKHN0cnVjdCBuZXQgKiwgc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKikpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTgyNi1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjgyNzpzdGF0aWMgdW5zaWduZWQgaW50IG5mX2JyaWRnZV9tdHVfcmVkdWN0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04Mjgte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04MzUtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo4MzY6c3RhdGljIGludCBicl9uZl9kZXZfcXVldWVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTgzNy17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTkyNS0vKiBQRl9CUklER0UvUE9TVF9ST1VUSU5HICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6OTI2OnN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcG9zdF9yb3V0aW5nKHZvaWQgKnByaXYsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05MjctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk3NC0gKiBmb3IgdGhlIHNlY29uZCB0aW1lLiAqL1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6OTc1OnN0YXRpYyB1bnNpZ25lZCBpbnQgaXBfc2Fib3RhZ2VfaW4odm9pZCAqcHJpdixcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk3Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDA1LSAqL1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTAwNjpzdGF0aWMgdm9pZCBicl9uZl9wcmVfcm91dGluZ19maW5pc2hfYnJpZGdlX3Nsb3coc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwMDcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDMwLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTAzMTpzdGF0aWMgaW50IGJyX25mX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDMyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTA0OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGJyX25mX29wc1tdID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDg4LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTA4OTpzdGF0aWMgaW50IGJybmZfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTA5MC1cXHRcXHRcXHQgICAgIHZvaWQgKnB0cilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTExNT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGJybmZfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTEyMy0gKi9cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjExMjQ6aW50IGJyX25mX2hvb2tfdGhyZXNoKHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMTI1LVxcdFxcdCAgICAgIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTE3Mj1zdGF0aWNcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjExNzM6aW50IGJybmZfc3lzY3RsX2NhbGxfdGFibGVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTE3NC1cXHRcXHRcXHQgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTE4NT1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBicm5mX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMjMtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMjI0OnN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRmaWx0ZXJfc3lzY3RsX2RlZmF1bHQoc3RydWN0IGJybmZfbmV0ICpicm5mKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTIyNS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMzQtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMjM1OnN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjM2LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI2OC1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyNjk6c3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjcwLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjg1LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTI4NjpzdGF0aWMgaW50IF9fbmV0X2luaXQgYnJuZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjg3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI5OC1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyOTk6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMDAte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMzEyPXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgYnJuZl9uZXRfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMTgtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzE5OnN0YXRpYyBpbnQgX19pbml0IGJyX25ldGZpbHRlcl9pbml0KHZvaWQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzIwLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMzNy1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMzg6c3RhdGljIHZvaWQgX19leGl0IGJyX25ldGZpbHRlcl9maW5pKHZvaWQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzM5LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTM0NC1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzNDU6bW9kdWxlX2luaXQoYnJfbmV0ZmlsdGVyX2luaXQpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTM0Njptb2R1bGVfZXhpdChicl9uZXRmaWx0ZXJfZmluaSk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzQ3LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTM0ODpNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzQ5Ok1PRFVMRV9BVVRIT1IoXFxcIkxlbm5lcnQgQnV5dGVuaGVrIFxcdTAwM2NidXl0ZW5oQGdudS5vcmdcXHUwMDNlXFxcIik7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzUwOk1PRFVMRV9BVVRIT1IoXFxcIkJhcnQgRGUgU2NodXltZXIgXFx1MDAzY2Jkc2NodXltQHBhbmRvcmEuYmVcXHUwMDNlXFxcIik7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzUxOk1PRFVMRV9ERVNDUklQVElPTihcXFwiTGludXggZXRoZXJuZXQgbmV0ZmlsdGVyIGZpcmV3YWxsIGJyaWRnZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzozMy45NzkwODM4NTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTkyNDIzNzcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGJyX25ldGZpbHRlcmAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBrZXJuZWwgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiAgSSd2ZSBhbHJlYWR5IHBpY2tlZCBvdXQgYGJybmZfZGV2aWNlX2V2ZW50YCwgYGJybmZfaW5pdF9uZXRgLCBhbmQgYGJybmZfZXhpdF9uZXRgIGFzIGNyaXRpY2FsLCBhbG9uZyB3aXRoIGBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0YCBhbmQgYGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXRgIGFuZCBgYnJfbmZfaG9va190aHJlc2hgICh0aG91Z2ggdGhhdCBsYXN0IG9uZSBtaWdodCBiZSBtb3JlIG9mIGEgdGhyZXNob2xkIHZhbHVlLCBJJ2xsIGtlZXAgaXQgb24gdGhlIHJhZGFyIGZvciBub3cpLiBUaGVzZSBhcHBlYXIgdG8gYmUgdGhlIGVudHJ5IHBvaW50cyByZWxhdGVkIHRvIHRoZSBjaGFuZ2VzIGluIHRoZSBgYnJfbmV0ZmlsdGVyYCBtb2R1bGUuXG5cbk5leHQsIEkgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBgQ09ORklHX2Agb3B0aW9ucy4gSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBoZWF2aWx5IGNvbmRpdGlvbmFsLiAgSSd2ZSBjcm9zcy1yZWZlcmVuY2VkIHdpdGggdGhlIEtjb25maWcgZmlsZXMsIGFuZCBpdCBsb29rcyBsaWtlIGBCUklER0VfTkVURklMVEVSYCwgYEJSSURHRWAsIGBORVRGSUxURVJgLCBgVVNFUl9OU2AsIGFuZCBgTkVUX05TYCBhcmUgdGhlIGtleSBlbmFibGluZyBjb25maWdzLiBOb3RhYmx5LCBgQlJJREdFX05FVEZJTFRFUmAgaGFzIGRlcGVuZGVuY2llcyBvbiBib3RoIGBCUklER0VgIGFuZCBgTkVURklMVEVSYCwgYW5kIGBORVRGSUxURVJfQURWQU5DRURgLCB3aGljaCBJJ2xsIG1ha2Ugc3VyZSB0byBpbmNsdWRlLiBgVVNFUl9OU2AgYW5kIGBORVRfTlNgIGFyZSBhbHNvIGV4cGxpY2l0bHkgcmVxdWlyZWQuICBJdCdzIGNyaXRpY2FsIHRoYXQgSSBkb24ndCBvdmVybG9vayB0aGVzZSBkZXBlbmRlbmNpZXM7IG90aGVyd2lzZSwgdGhlIGNvZGUgd29uJ3QgZXZlbiBjb21waWxlIGludG8gdGhlIGtlcm5lbC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSByZWFzb25pbmcgYmVoaW5kIGFsbCB0aGlzLiBUaGUgcGF0Y2ggaXMgYWJvdXQgcmVzdHJpY3RpbmcgdGhlIGhvb2tzIGFuZCBzeXNjdGwgcmVnaXN0cmF0aW9uIG9mIGBicl9uZXRmaWx0ZXJgIHdpdGhpbiB1c2VyIG5hbWVzcGFjZXMuIFNwZWNpZmljYWxseSwgaXQncyBtb2RpZnlpbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBleGl0IHBhdGhzIG9mIHRoaXMgbW9kdWxlLCBpbmNsdWRpbmcgYGJybmZfaW5pdF9uZXRgLCBgYnJuZl9kZXZpY2VfZXZlbnRgIGFuZCBzeXNjdGwgY2xlYW51cCBsb2dpYywgdG8gYXZvaWQgcnVubmluZyBpbiB1c2VyIG5hbWVzcGFjZXMuICBUaGlzIGhhcyBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBicmlkZ2UgZGV2aWNlIGJlaGF2aW9yIGluIG5vbi1yb290IHVzZXIgbmFtZXNwYWNlcy4gVGhpcyBtZWFucyBpdCdzIGRlZmluaXRlbHkgdGVzdGFibGUgYW5kIHJlbGV2YW50IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgZ29vZC4gIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgdGVzdHMgY292ZXIgdGhpcyBhbHRlcmVkIGxvZ2ljLCBlc3BlY2lhbGx5IGFyb3VuZCBpbml0aWFsaXphdGlvbiwgZGVpbml0aWFsaXphdGlvbiwgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBzeXNjdGxzIHdoZW4gZGVhbGluZyB3aXRoIHVzZXIgbmFtZXNwYWNlcy5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiB0aGVzZSBmaW5kaW5ncy4gSSdtIHJlYWR5IHRvIFwic2V0LXJlc3VsdHNcIi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MTksIk91dHB1dFRva2VucyI6MTQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMzOjM5LjkwMzMyNDQ2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDI5MzY1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFX05FVEZJTFRFUlwiLFxuICAgIFwiQlJJREdFXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIlVTRVJfTlNcIixcbiAgICBcIk5FVF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJybmZfZGV2aWNlX2V2ZW50XCIsXG4gICAgXCJicm5mX2luaXRfbmV0XCIsXG4gICAgXCJicm5mX2V4aXRfbmV0XCIsXG4gICAgXCJicl9uZl9ob29rX3RocmVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgYnJpZGdlIG5ldGZpbHRlciBpbml0aWFsaXphdGlvbiBhbmQgZGV2aWNlIGV2ZW50IGhhbmRsaW5nIHRvIGRpc2FibGUgYnJfbmV0ZmlsdGVyIGFuZCBpdHMgc3lzY3RsIHJlZ2lzdHJhdGlvbiB3aXRoaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzLiBUaGlzIGFsdGVycyBjb3JlIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBicmlkZ2UgZGV2aWNlIHNldHVwL3RlYXJkb3duIGV4ZWN1dGlvbiBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFX05FVEZJTFRFUlwiLFxuICAgIFwiQlJJREdFXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIlVTRVJfTlNcIixcbiAgICBcIk5FVF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJybmZfZGV2aWNlX2V2ZW50XCIsXG4gICAgXCJicm5mX2luaXRfbmV0XCIsXG4gICAgXCJicm5mX2V4aXRfbmV0XCIsXG4gICAgXCJicl9uZl9ob29rX3RocmVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgYnJpZGdlIG5ldGZpbHRlciBpbml0aWFsaXphdGlvbiBhbmQgZGV2aWNlIGV2ZW50IGhhbmRsaW5nIHRvIGRpc2FibGUgYnJfbmV0ZmlsdGVyIGFuZCBpdHMgc3lzY3RsIHJlZ2lzdHJhdGlvbiB3aXRoaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzLiBUaGlzIGFsdGVycyBjb3JlIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBicmlkZ2UgZGV2aWNlIHNldHVwL3RlYXJkb3duIGV4ZWN1dGlvbiBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMzOjQwLjAzMzYyNzA5M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NDA4ODQ0OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzo0MC4wMzQ0Mjg5NzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMDg0MDA3ODYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzdHJpY3RzIHRoZSBsZWdhY3kgYnJfbmV0ZmlsdGVyIG1vZHVsZSBpbiBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZXMgYnkgc2V0dGluZyBhIG5ldyBib29sZWFuIGZsYWcgKGBpbl91c2VybnNgKSwgYXZvaWRpbmcgc3lzY3RsIHJlZ2lzdHJhdGlvbiwgYW5kIHNraXBwaW5nIG5ldGZpbHRlciBob29rIHJlZ2lzdHJhdGlvbiBvbiBkZXZpY2UgZXZlbnRzLlxcblxcbi0gTWVtb3J5IEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogYHN0cnVjdCBicm5mX25ldGAgaXMgYWxsb2NhdGVkIGFzIHBlci1uZXRucyBzdG9yYWdlIGJ5IHRoZSBwZXJuZXQgc3Vic3lzdGVtIHVzaW5nIHplcm8taW5pdGlhbGl6ZWQgbWVtb3J5IChga3phbGxvY2ApLiBUaGUgYWRkZWQgYGluX3VzZXJuc2AgYm9vbGVhbiBhbmQgZXhpc3RpbmcgZmllbGRzIGFyZSBzYWZlbHkgemVyby1pbml0aWFsaXplZCBvbiBhbGxvY2F0aW9uLlxcbi0gTm8gSW5mbyBMZWFrcyBvciBVbmluaXRpYWxpemVkIFJlYWRzOiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgYWxzbyBndWFyZHMgc3lzY3RsIGNsZWFudXAgYWdhaW5zdCBOVUxMIHBvaW50ZXJzIChgY3RsX2hkcmApIHdoZW4gc3lzY3RsIHJlZ2lzdHJhdGlvbiB3YXMgc2tpcHBlZC5cXG4tIFN0YW5kYXJkIFNhbml0aXplciBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcm91bmQgbGlmZWN5Y2xlLCBudWxsIGRlcmVmZXJlbmNlcywgb3IgbmV0bnMgZGVzdHJ1Y3Rpb24gYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE0NjczNTEwYTJhOTZiMjE1NjViOGNkMTA0YWM4MzAwZGZlNTJiYjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMjozMjo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcbmluZGV4IGMxZTZlYTUyYzllNTkuLmRkZWQxYTZlZGQ2MDYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcbkBAIC0yNzcsOCArMjc3LDkgQEAgTmV0ZmlsdGVyXG4gPT09PT09PT09XG4gXG4gVGhlIGJyaWRnZSBuZXRmaWx0ZXIgbW9kdWxlIGlzIGEgbGVnYWN5IGZlYXR1cmUgdGhhdCBhbGxvd3MgdG8gZmlsdGVyIGJyaWRnZWRcbi1wYWNrZXRzIHdpdGggaXB0YWJsZXMgYW5kIGlwNnRhYmxlcy4gSXRzIHVzZSBpcyBkaXNjb3VyYWdlZC4gVXNlcnMgc2hvdWxkXG4tY29uc2lkZXIgdXNpbmcgbmZ0YWJsZXMgZm9yIHBhY2tldCBmaWx0ZXJpbmcuXG4rcGFja2V0cyB3aXRoIGlwdGFibGVzIGFuZCBpcDZ0YWJsZXMuIFRoaXMgZmVhdHVyZSBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwgYW5kXG4rbm90IGF2YWlsYWJsZSBpbiB1c2VyIG5hbWVzcGFjZXMuIENvbnNpZGVyIHVzaW5nIG5mdGFibGVzIGZvciBwYWNrZXQgZmlsdGVyaW5nXG4raW5zdGVhZC5cbiBcbiBUaGUgb2xkZXIgZWJ0YWJsZXMgdG9vbCBpcyBtb3JlIGZlYXR1cmUtbGltaXRlZCBjb21wYXJlZCB0byBuZnRhYmxlcywgYnV0XG4ganVzdCBsaWtlIG5mdGFibGVzIGl0IGRvZXNuJ3QgbmVlZCB0aGlzIG1vZHVsZSBlaXRoZXIgdG8gZnVuY3Rpb24uXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmNcbmluZGV4IDBhMzk0ZTVmNDM5MTYuLmUxNTM1NWZmMjE1YTcgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXG5AQCAtNTQsNiArNTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGJybmZfbmV0X2lkIF9fcmVhZF9tb3N0bHk7XG4gXG4gc3RydWN0IGJybmZfbmV0IHtcbiBcdGJvb2wgZW5hYmxlZDtcbitcdGJvb2wgaW5fdXNlcm5zO1xuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqY3RsX2hkcjtcbkBAIC0xMTAwLDcgKzExMDEsNyBAQCBzdGF0aWMgaW50IGJybmZfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxuIFxuIFx0bmV0ID0gZGV2X25ldChkZXYpO1xuIFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcbi1cdGlmIChicm5ldC1cdTAwM2VlbmFibGVkKVxuK1x0aWYgKGJybmV0LVx1MDAzZWVuYWJsZWQgfHwgYnJuZXQtXHUwMDNlaW5fdXNlcm5zKVxuIFx0XHRyZXR1cm4gTk9USUZZX09LO1xuIFxuIFx0cmV0ID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgYnJfbmZfb3BzLCBBUlJBWV9TSVpFKGJyX25mX29wcykpO1xuQEAgLTEyMjksOSArMTIzMCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9kZWZhdWx0KHN0cnVjdCBicm5mX25ldCAqYnJuZilcbiBcdGJybmYtXHUwMDNlZmlsdGVyX3BwcG9lX3RhZ2dlZCA9IDA7XG4gXHRicm5mLVx1MDAzZXBhc3Nfdmxhbl9pbmRldiA9IDA7XG4gfVxuKyNlbmRpZlxuIFxuIHN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuKyNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSA9IGJybmZfdGFibGU7XG4gXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xuIFxuQEAgLTEyNTksMjUgKzEyNjIsMzkgQEAgc3RhdGljIGludCBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4tXG4rI2VuZGlmXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlID0gYnJuZXQtXHUwMDNlY3RsX2hkci1cdTAwM2VjdGxfdGFibGVfYXJnO1xuKyNpZmRlZiBDT05GSUdfU1lTQ1RMXG4rXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyID0gYnJuZXQtXHUwMDNlY3RsX2hkcjtcbitcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFxuLVx0dW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKGJybmV0LVx1MDAzZWN0bF9oZHIpO1xuK1x0aWYgKCFoZWFkZXIpXG4rXHRcdHJldHVybjtcbitcbitcdHRhYmxlID0gaGVhZGVyLVx1MDAzZWN0bF90YWJsZV9hcmc7XG4rXHR1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoaGVhZGVyKTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKVxuIFx0XHRrZnJlZSh0YWJsZSk7XG4rI2VuZGlmXG4gfVxuIFxuIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBicm5mX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiB7XG4rXHRpZiAobmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKSB7XG4rXHRcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcbitcbitcdFx0YnJuZXQtXHUwMDNlaW5fdXNlcm5zID0gdHJ1ZTtcbitcdFx0cHJfd2Fybl9vbmNlKFwiYnJfbmV0ZmlsdGVyIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gdXNlciBuYW1lc3BhY2VzXFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbiBcdHJldHVybiBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KG5ldCk7XG4gfVxuLSNlbmRpZlxuIFxuIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYnJuZl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuQEAgLTEyODksMTUgKzEzMDYsMTEgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0YnJuZXQtXHUwMDNlZW5hYmxlZCA9IGZhbHNlO1xuIFx0fVxuIFxuLSNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gXHRicl9uZXRmaWx0ZXJfc3lzY3RsX2V4aXRfbmV0KG5ldCwgYnJuZXQpO1xuLSNlbmRpZlxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGJybmZfbmV0X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLSNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gXHQuaW5pdCA9IGJybmZfaW5pdF9uZXQsXG4tI2VuZGlmXG4gXHQuZXhpdCA9IGJybmZfZXhpdF9uZXQsXG4gXHQuaWQgICA9IFx1MDAyNmJybmZfbmV0X2lkLFxuIFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGJybmZfbmV0KSxcbkBAIC0xMzE4LDcgKzEzMzEsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBicl9uZXRmaWx0ZXJfaW5pdCh2b2lkKVxuIFx0fVxuIFxuIFx0UkNVX0lOSVRfUE9JTlRFUihuZl9icl9vcHMsIFx1MDAyNmJyX29wcyk7XG4tXHRwcmludGsoS0VSTl9OT1RJQ0UgXCJCcmlkZ2UgZmlyZXdhbGxpbmcgcmVnaXN0ZXJlZFxcblwiKTtcbitcdHByX3dhcm4oXCJicl9uZXRmaWx0ZXIgaXMgc2xhdGVkIGZvciByZW1vdmFsIGluIDIwMjcuXFxuXCIpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzM6NDAuMDM0NDMxMDgzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg5MjU4NDYxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gTGV0J3Mgc2VlLi4uXG5cbjEuICAqKkRvY3VtZW50YXRpb24gVXBkYXRlOioqIEEgZG9jdW1lbnRhdGlvbiB1cGRhdGUgdG8gYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0YC4gVGhhdCdzIG5vdCBsaWtlbHkgdG8gYmUgYSBmdXp6ZXIgdGFyZ2V0IGRpcmVjdGx5LCBpdCdzIGluZm9ybWF0aW9uYWwuXG4yLiAgKipgbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY2AgQ2hhbmdlczoqKiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIHByb2JhYmx5IGFyZS4gTGV0J3Mgc2VlLi4uXG5cbiAgICAqICAgQSBuZXcgYm9vbGVhbiBgaW5fdXNlcm5zYCBpcyBhZGRlZCB0byB0aGUgYHN0cnVjdCBicm5mX25ldGAuIE9rYXksIHRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gaG93IHVzZXIgbmFtZXNwYWNlcyBhcmUgaGFuZGxlZC5cbiAgICAqICAgVGhlIGBicm5mX2RldmljZV9ldmVudGAgZnVuY3Rpb24gbm93IGNoZWNrcyBgYnJuZXQtXHUwMDNlZW5hYmxlZCB8fCBicm5ldC1cdTAwM2Vpbl91c2VybnNgLiBUaGUgYWRkaXRpb24gb2YgYGluX3VzZXJuc2AgdG8gdGhlIGNvbmRpdGlvbiBpcyBkZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcuXG4gICAgKiAgIFN5c2N0bCBjb25maWd1cmF0aW9uIGlzIGJlaW5nIHJlZmFjdG9yZWQuIFRoZSBgI2lmZGVmIENPTkZJR19TWVNDVExgIGd1YXJkcyBhcmUgYmVpbmcgcmVtb3ZlZC4gVGhpcyBwb2ludHMgdG8gYSBjaGFuZ2UgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHN5c2N0bCBzZXR0aW5ncyB3aXRoaW4gdGhlIGBicl9uZXRmaWx0ZXJgIG1vZHVsZS4gSXQncyBwb3NzaWJsZSB0aGF0IGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBtYXkgaW50ZXJhY3Qgd2l0aCB0aGUgbmV0d29yayBicmlkZ2UgaW4gdW5leHBlY3RlZCB3YXlzLlxuICAgICogICBOb3csIGluIGBicm5mX2luaXRfbmV0YCwgdGhlIGNvcmUgbG9naWMgbG9va3MgbGlrZSBpdCdzIGhhbmRsaW5nIHVzZXIgbmFtZXNwYWNlIHNjZW5hcmlvcy4gSXQgYXBwZWFycyB0aGVyZSdzIG5ldyBsb2dpYyB0byBkaXNhYmxlIGNlcnRhaW4gZnVuY3Rpb25hbGl0eSBpbiB1c2VyIG5hbWVzcGFjZXMsIHdpdGggYSB3YXJuaW5nLiBDcnVjaWFsbHksIHRoZSBjb2RlIG5vdyBzZXRzIGBicm5ldC1cdTAwM2Vpbl91c2VybnMgPSB0cnVlYCBpZiB0aGUgbmV0d29yayBuYW1lc3BhY2UgaXMgKm5vdCogdGhlIGluaXRpYWwgb25lLiBUaGlzIGltcGxpZXMgYSBwb3RlbnRpYWxseSBkaWZmZXJlbnQgY29kZSBwYXRoIGFuZCBiZWhhdmlvciB3aGVuIHJ1bm5pbmcgd2l0aGluIGEgdXNlciBuYW1lc3BhY2UuXG4gICAgKiAgIGAuaW5pdCA9IGJybmZfaW5pdF9uZXRgIGlzIG5vdyBhbHdheXMgc2V0IGluIGBicm5mX25ldF9vcHNgLiBUaGUgZ3VhcmQgaXMgZ29uZS4gVGhpcyBsaWtlbHkgbWVhbnMgaW5pdGlhbGl6YXRpb24gaGFwcGVucyB1bmNvbmRpdGlvbmFsbHkgbm93LlxuICAgICogICBUaGUgcGVybmV0IG1lbW9yeSBhbGxvY2F0aW9uIGZvciBgYnJuZl9uZXRfb3BzYCBpcyB1c2luZyBgLnNpemUgPSBzaXplb2Yoc3RydWN0IGJybmZfbmV0KWAuIFBlcm5ldHMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBieSB0aGUgbmV0IG5hbWVzcGFjZSBpbmZyYXN0cnVjdHVyZS4gT2theSwgSSB3YW50IHRvIGRyaWxsIGRvd24gaW50byB0aGUgcGVybmV0IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGJlY2F1c2UgaXQgY291bGQgYmUgYSBzb3VyY2Ugb2YgbWVtb3J5IGNvcnJ1cHRpb24gaWYgaGFuZGxlZCBpbmNvcnJlY3RseS5cblxuVG8gZ2V0IGEgYmV0dGVyIHBpY3R1cmUsIEknbSBnb2luZyB0byBwdWxsIHVwIGBuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jYCB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAuIEknbGwgd2FudCB0byBzZWUgaG93IHRoaXMgcGVybmV0IHN0cnVjdHVyZSBpcyB1c2VkLCBob3cgdGhlIGBpbl91c2VybnNgIGZsYWcgaXMgdXNlZCwgYW5kIGhvdyB0aGVzZSBzeXNjdGwgY2hhbmdlcyBhbmQgdXNlciBuYW1lc3BhY2UgaGFuZGxpbmcgaW50ZXJhY3QuIEdpdmVuIHRoZSB1c2VyIG5hbWVzcGFjZSBpbnRlcmFjdGlvbiBhbmQgdGhlIHJlZmFjdG9yaW5nLCB0aGlzIHBhdGNoIGxvb2tzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgS01TQU4gZnV6emluZywgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgYnJpZGdlIGFuZCB1c2VyIG5hbWVzcGFjZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMzIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzo0OC45NjAyNzk5NzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzY1ODQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicm5mX25ldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUyLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NTM6c3RhdGljIHVuc2lnbmVkIGludCBicm5mX25ldF9pZCBfX3JlYWRfbW9zdGx5O1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTQtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1NTpzdHJ1Y3QgYnJuZl9uZXQge1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTYtXFx0Ym9vbCBlbmFibGVkO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz05Mz1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmxhbl9pcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NC17XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo5NTpcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05Ni1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTAwPXN0YXRpYyBpbmxpbmUgYm9vbCBpc192bGFuX2lwdjYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAyLXtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEwMzpcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDQtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEwOT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmxhbl9hcnAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTEwLXtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjExMTpcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMTItXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEyMj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcHBwb2VfaXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTIzLXtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyNDpcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjUtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEzMD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcHBwb2VfaXB2Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzIte1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTMzOlxcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzNC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NDM2PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnJuZl9nZXRfbG9naWNhbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDQwLVxcdHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuLCAqYnI7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0NDE6XFx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDQyLVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz00ODQ9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZyh2b2lkICpwcml2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00OTEtXFx0X191MzIgbGVuID0gbmZfYnJpZGdlX2VuY2FwX2hlYWRlcl9sZW4oc2tiKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjQ5MjpcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDkzLVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MDEtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1MDI6XFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhzdGF0ZS1cXHUwMDNlbmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MDMtXFx0aWYgKElTX0lQVjYoc2tiKSB8fCBpc192bGFuX2lwdjYoc2tiLCBzdGF0ZS1cXHUwMDNlbmV0KSB8fFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz03Mjk9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9mb3J3YXJkX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03MzQtXFx0c3RydWN0IG5ldF9kZXZpY2UgKipkID0gKHN0cnVjdCBuZXRfZGV2aWNlICoqKShza2ItXFx1MDAzZWNiKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjczNTpcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzM2LVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03NDEtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo3NDI6XFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhzdGF0ZS1cXHUwMDNlbmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03NDMtXFx0aWYgKCFicm5ldC1cXHUwMDNlY2FsbF9hcnB0YWJsZXMgXFx1MDAyNlxcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfQVJQVEFCTEVTKSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTA4OT1zdGF0aWMgaW50IGJybmZfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDkyLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEwOTM6XFx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwOTQtXFx0c3RydWN0IG5ldCAqbmV0O1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMTAyLVxcdG5ldCA9IGRldl9uZXQoZGV2KTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjExMDM6XFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExMDQtXFx0aWYgKGJybmV0LVxcdTAwM2VlbmFibGVkIHx8IGJybmV0LVxcdTAwM2Vpbl91c2VybnMpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTExODU9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgYnJuZl90YWJsZVtdID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjIzLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTIyNDpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9kZWZhdWx0KHN0cnVjdCBicm5mX25ldCAqYnJuZilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMjUte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMjM1PXN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMzgtXFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGUgPSBicm5mX3RhYmxlO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTIzOTpcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI0MC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI0Ni1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyNDc6XFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyNDgtXFx0dGFibGVbMF0uZGF0YSA9IFxcdTAwMjZicm5ldC1cXHUwMDNlY2FsbF9hcnB0YWJsZXM7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEyNjk9c3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMjcwOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI3MS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEyODY9c3RhdGljIGludCBfX25ldF9pbml0IGJybmZfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjg4LVxcdGlmIChuZXQtXFx1MDAzZXVzZXJfbnMgIT0gXFx1MDAyNmluaXRfdXNlcl9ucykge1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTI4OTpcXHRcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjkwLVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMjk5PXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYnJuZl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzAwLXtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMDE6XFx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMDItXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzAzOlxcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzA0LVxcdGlmIChicm5ldC1cXHUwMDNlZW5hYmxlZCkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzExLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTMxMjpzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGJybmZfbmV0X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMxMy1cXHQuaW5pdCA9IGJybmZfaW5pdF9uZXQsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzE0LVxcdC5leGl0ID0gYnJuZl9leGl0X25ldCxcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMTU6XFx0LmlkICAgPSBcXHUwMDI2YnJuZl9uZXRfaWQsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzE2OlxcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBicm5mX25ldCksXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzE3LX07XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEzMTk9c3RhdGljIGludCBfX2luaXQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMyMi1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMjM6XFx0cmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2YnJuZl9uZXRfb3BzKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMjQtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMjgtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMjk6XFx0XFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZicm5mX25ldF9vcHMpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMzMC1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMzM4PXN0YXRpYyB2b2lkIF9fZXhpdCBicl9uZXRmaWx0ZXJfZmluaSh2b2lkKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzQxLVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZicm5mX25vdGlmaWVyKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzNDI6XFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZicm5mX25ldF9vcHMpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTM0My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMzOjQ5LjA2Nzk0MjkyOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTc5ODY1OTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGJyX25ldGZpbHRlcl9ob29rcy5jIGZvciBTeXNjdGwgYW5kIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIHdlIGdldCBzdGFydGVkLCBJIHdhbnQgdG8gdGFrZSBhIG1ldGhvZGljYWwgYXBwcm9hY2ggdG8gdGhpcy4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBob3cgdGhlIGJyaWRnaW5nIG5ldGZpbHRlciBob29rcyBhcmUgc2V0IHVwLCBtYW5hZ2VkLCBhbmQgdG9ybiBkb3duLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHN5c2N0bCBjb25maWd1cmF0aW9ucy4gVGhpcyBtZWFucyBhIGNhcmVmdWwgaW5zcGVjdGlvbiBvZiB0aGUgYG5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmNgIGZpbGUgaXMgaW4gb3JkZXIuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW50aXJlIGZpbGUsIG9yIGF0IGxlYXN0IHRoZSBjcml0aWNhbCBzZWdtZW50cyBkZWFsaW5nIHdpdGggc3lzdGVtIGNvbnRyb2xzIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgcm91dGluZXMuXG5cbkZpcnN0LCBJJ20gdGhpbmtpbmcsIEkgc2hvdWxkIHN0YXJ0IGJ5IHBpbnBvaW50aW5nIHRob3NlIHNlY3Rpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gc3lzY3RsIHZhcmlhYmxlcy4gV2hhdCBhcmUgdGhlIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzPyBIb3cgYXJlIHRoZXkgcmVnaXN0ZXJlZD8gV2hlcmUgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyBkZWZpbmVkPyBXaGF0IGZ1bmN0aW9ucyBoYW5kbGUgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvbiB0aGVzZSBzeXNjdGwgZW50cmllcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHN5c2N0bCBjb250cm9scyBhbmQgdGhlIGFjdHVhbCBicmlkZ2luZyBmdW5jdGlvbmFsaXR5LCBhbmQgd2hldGhlciB0aGUgYnJpZGdlIG5ldGZpbHRlciBob29rcyBoYXZlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlc2UgcGFyYW1ldGVycy5cblxuVGhlbiwgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBleGl0IHNlcXVlbmNlcyBkZW1hbmQgY2FyZWZ1bCBzY3J1dGlueS4gV2hlcmUgYXJlIHRoZSBob29rcyByZWdpc3RlcmVkPyBIb3cgYXJlIHRoZXkgdW5yZWdpc3RlcmVkPyBXaGF0J3MgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnM/IEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gY29uY2VybnM/IEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgY3JvcCB1cCBkdXJpbmcgbW9kdWxlIGxvYWRpbmcgb3IgdW5sb2FkaW5nPyBBcmUgdGhlcmUgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgbW9kdWxlcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGhvb2sgb3JkZXJpbmcsIGRlcGVuZGVuY2llcywgb3IgY2xlYW51cCwgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuXG5UaGUgZ29hbCBpcyBhIHZlcnkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBzeXNjdGwgY29uZmlndXJhdGlvbiwgaG9vayByZWdpc3RyYXRpb24sIGhvb2sgdW5yZWdpc3RyYXRpb24sIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG5ldGZpbHRlciBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTA3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzM6NTIuNjQ3ODEyMzQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjIwOlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IGJybmZfc3lzY3RsX2NhbGxfdGFibGVzLFxcbjEyMjE6XFx0XFx0fSxcXG4xMjIyOlxcdH07XFxuMTIyMzpcXHRcXG4xMjI0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRmaWx0ZXJfc3lzY3RsX2RlZmF1bHQoc3RydWN0IGJybmZfbmV0ICpicm5mKVxcbjEyMjU6XFx0e1xcbjEyMjY6XFx0XFx0YnJuZi1cXHUwMDNlY2FsbF9pcHRhYmxlcyA9IDE7XFxuMTIyNzpcXHRcXHRicm5mLVxcdTAwM2VjYWxsX2lwNnRhYmxlcyA9IDE7XFxuMTIyODpcXHRcXHRicm5mLVxcdTAwM2VjYWxsX2FycHRhYmxlcyA9IDE7XFxuMTIyOTpcXHRcXHRicm5mLVxcdTAwM2VmaWx0ZXJfdmxhbl90YWdnZWQgPSAwO1xcbjEyMzA6XFx0XFx0YnJuZi1cXHUwMDNlZmlsdGVyX3BwcG9lX3RhZ2dlZCA9IDA7XFxuMTIzMTpcXHRcXHRicm5mLVxcdTAwM2VwYXNzX3ZsYW5faW5kZXYgPSAwO1xcbjEyMzI6XFx0fVxcbjEyMzM6XFx0I2VuZGlmXFxuMTIzNDpcXHRcXG4xMjM1OlxcdHN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuMTIzNjpcXHR7XFxuMTIzNzpcXHQjaWZkZWYgQ09ORklHX1NZU0NUTFxcbjEyMzg6XFx0XFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGUgPSBicm5mX3RhYmxlO1xcbjEyMzk6XFx0XFx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcXG4xMjQwOlxcdFxcbjEyNDE6XFx0XFx0aWYgKCFuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKSB7XFxuMTI0MjpcXHRcXHRcXHR0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihicm5mX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuMTI0MzpcXHRcXHRcXHRpZiAoIXRhYmxlKVxcbjEyNDQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTI0NTpcXHRcXHR9XFxuMTI0NjpcXHRcXG4xMjQ3OlxcdFxcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxuMTI0ODpcXHRcXHR0YWJsZVswXS5kYXRhID0gXFx1MDAyNmJybmV0LVxcdTAwM2VjYWxsX2FycHRhYmxlcztcXG4xMjQ5OlxcdFxcdHRhYmxlWzFdLmRhdGEgPSBcXHUwMDI2YnJuZXQtXFx1MDAzZWNhbGxfaXB0YWJsZXM7XFxuMTI1MDpcXHRcXHR0YWJsZVsyXS5kYXRhID0gXFx1MDAyNmJybmV0LVxcdTAwM2VjYWxsX2lwNnRhYmxlcztcXG4xMjUxOlxcdFxcdHRhYmxlWzNdLmRhdGEgPSBcXHUwMDI2YnJuZXQtXFx1MDAzZWZpbHRlcl92bGFuX3RhZ2dlZDtcXG4xMjUyOlxcdFxcdHRhYmxlWzRdLmRhdGEgPSBcXHUwMDI2YnJuZXQtXFx1MDAzZWZpbHRlcl9wcHBvZV90YWdnZWQ7XFxuMTI1MzpcXHRcXHR0YWJsZVs1XS5kYXRhID0gXFx1MDAyNmJybmV0LVxcdTAwM2VwYXNzX3ZsYW5faW5kZXY7XFxuMTI1NDpcXHRcXG4xMjU1OlxcdFxcdGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChicm5ldCk7XFxuMTI1NjpcXHRcXG4xMjU3OlxcdFxcdGJybmV0LVxcdTAwM2VjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFxcXCJuZXQvYnJpZGdlXFxcIiwgdGFibGUsXFxuMTI1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRBUlJBWV9TSVpFKGJybmZfdGFibGUpKTtcXG4xMjU5OlxcdFxcdGlmICghYnJuZXQtXFx1MDAzZWN0bF9oZHIpIHtcXG4xMjYwOlxcdFxcdFxcdGlmICghbmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSlcXG4xMjYxOlxcdFxcdFxcdFxcdGtmcmVlKHRhYmxlKTtcXG4xMjYyOlxcdFxcbjEyNjM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTI2NDpcXHRcXHR9XFxuMTI2NTpcXHQjZW5kaWZcXG4xMjY2OlxcdFxcdHJldHVybiAwO1xcbjEyNjc6XFx0fVxcbjEyNjg6XFx0XFxuMTI2OTpcXHRzdGF0aWMgdm9pZCBicl9uZXRmaWx0ZXJfc3lzY3RsX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCxcXG4xMjcwOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxcbjEyNzE6XFx0e1xcbjEyNzI6XFx0I2lmZGVmIENPTkZJR19TWVNDVExcXG4xMjczOlxcdFxcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXIgPSBicm5ldC1cXHUwMDNlY3RsX2hkcjtcXG4xMjc0OlxcdFxcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xcbjEyNzU6XFx0XFxuMTI3NjpcXHRcXHRpZiAoIWhlYWRlcilcXG4xMjc3OlxcdFxcdFxcdHJldHVybjtcXG4xMjc4OlxcdFxcbjEyNzk6XFx0XFx0dGFibGUgPSBoZWFkZXItXFx1MDAzZWN0bF90YWJsZV9hcmc7XFxuMTI4MDpcXHRcXHR1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoaGVhZGVyKTtcXG4xMjgxOlxcdFxcdGlmICghbmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSlcXG4xMjgyOlxcdFxcdFxcdGtmcmVlKHRhYmxlKTtcXG4xMjgzOlxcdCNlbmRpZlxcbjEyODQ6XFx0fVxcbjEyODU6XFx0XFxuMTI4NjpcXHRzdGF0aWMgaW50IF9fbmV0X2luaXQgYnJuZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuMTI4NzpcXHR7XFxuMTI4ODpcXHRcXHRpZiAobmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpIHtcXG4xMjg5OlxcdFxcdFxcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcXG4xMjkwOlxcdFxcbjEyOTE6XFx0XFx0XFx0YnJuZXQtXFx1MDAzZWluX3VzZXJucyA9IHRydWU7XFxuMTI5MjpcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcImJyX25ldGZpbHRlciBubyBsb25nZXIgc3VwcG9ydGVkIGluIHVzZXIgbmFtZXNwYWNlc1xcXFxuXFxcIik7XFxuMTI5MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMjk0OlxcdFxcdH1cXG4xMjk1OlxcdFxcbjEyOTY6XFx0XFx0cmV0dXJuIGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQobmV0KTtcXG4xMjk3OlxcdH1cXG4xMjk4OlxcdFxcbjEyOTk6XFx0c3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4xMzAwOlxcdHtcXG4xMzAxOlxcdFxcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQ7XFxuMTMwMjpcXHRcXG4xMzAzOlxcdFxcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxuMTMwNDpcXHRcXHRpZiAoYnJuZXQtXFx1MDAzZWVuYWJsZWQpIHtcXG4xMzA1OlxcdFxcdFxcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgYnJfbmZfb3BzLCBBUlJBWV9TSVpFKGJyX25mX29wcykpO1xcbjEzMDY6XFx0XFx0XFx0YnJuZXQtXFx1MDAzZWVuYWJsZWQgPSBmYWxzZTtcXG4xMzA3OlxcdFxcdH1cXG4xMzA4OlxcdFxcbjEzMDk6XFx0XFx0YnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChuZXQsIGJybmV0KTtcXG4xMzEwOlxcdH1cXG4xMzExOlxcdFxcbjEzMTI6XFx0c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBicm5mX25ldF9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4xMzEzOlxcdFxcdC5pbml0ID0gYnJuZl9pbml0X25ldCxcXG4xMzE0OlxcdFxcdC5leGl0ID0gYnJuZl9leGl0X25ldCxcXG4xMzE1OlxcdFxcdC5pZCAgID0gXFx1MDAyNmJybmZfbmV0X2lkLFxcbjEzMTY6XFx0XFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGJybmZfbmV0KSxcXG4xMzE3OlxcdH07XFxuMTMxODpcXHRcXG4xMzE5OlxcdHN0YXRpYyBpbnQgX19pbml0IGJyX25ldGZpbHRlcl9pbml0KHZvaWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMzOjUyLjY0ODAwMzMwMloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MjI2NDgxMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJyaWRnZSBOZXRmaWx0ZXIgQmVoYXZpb3IgaW4gTm9uLUluaXRpYWwgVXNlciBOYW1lc3BhY2VzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGUgYnJpZGdlIG5ldGZpbHRlciBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGl0IGJlaGF2ZXMgd2l0aGluIHVzZXIgbmFtZXNwYWNlcyB0aGF0ICphcmVuJ3QqIHRoZSBpbml0aWFsIG9uZS4gVGhlIG1haW4gY29uY2VybiBoZXJlIHNlZW1zIHRvIGJlIGFib3V0IHNlY3VyaXR5IGFuZCBwb3RlbnRpYWxseSBleHBvc2luZyBsZWdhY3kgZmVhdHVyZXMgaW4gYSB3YXkgdGhhdCdzIHVuaW50ZW5kZWQgb3IgZXhwbG9pdGFibGUuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIHdoYXQgaGFwcGVucyB3aGVuIGBuZXQtXHUwMDNldXNlcl9uc2AgaXNuJ3QgdGhlIGluaXRpYWwgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGhpbmcgSSBub3RpY2VkIGlzIHRoYXQgYGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQobmV0KWAgaXNuJ3QgY2FsbGVkLCB3aGljaCBtYWtlcyBzZW5zZSBpbiB0aGlzIGNvbnRleHQuIEJlY2F1c2Ugb2YgdGhpcywgYGJybmV0LVx1MDAzZWluX3VzZXJuc2AgaXMgc2V0IHRvIGB0cnVlYC4gVGhpcyBgYnJuZXRgIHN0cnVjdHVyZSwgdGhlIHBlci1uZXQgaW5mb3JtYXRpb24sIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCB3aGVuIHRoZSBgbmV0YCBpcyBjcmVhdGVkLiBUaGlzIG1lYW5zIGV2ZXJ5dGhpbmcgc3RhcnRzIGF0IHplcm86IHRoZSBgY3RsX2hkcmAsIHRoZSBob29rIHBvaW50ZXJzLCB0aGUgYGVuYWJsZWRgIGZsYWcsICpldmVyeXRoaW5nKi5cblxuTm93LCB3aGVuIGEgbmV0IGRldmljZSBldmVudCBjb21lcyBpbiB2aWEgYGJybmZfZGV2aWNlX2V2ZW50YCwgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIHNob3dzIGl0J3Mgb25seSBlbmFibGVkIGlmIGVpdGhlciBgYnJuZXQtXHUwMDNlZW5hYmxlZGAgaXMgdHJ1ZSwgb3IgYGJybmV0LVx1MDAzZWluX3VzZXJuc2AgaXMgdHJ1ZS4gKkJ1dCogc2luY2UgYGJybmV0LVx1MDAzZWluX3VzZXJuc2AgaXMgYWx3YXlzIHRydWUsIHRoZSBob29rcyB3aWxsIG5ldmVyIGJlIHJlZ2lzdGVyZWQsIG1lYW5pbmcgdGhhdCBsZWdhY3kgYnJpZGdlIG5ldGZpbHRlciBmdW5jdGlvbmFsaXR5IHNpbXBseSB3b24ndCBydW4gd2l0aGluIHRoaXMgbmFtZXNwYWNlLlxuXG5Mb29raW5nIGF0IHRoZSBleGl0IHBhdGgsIGBicm5mX2V4aXRfbmV0YCwgY29uZmlybXMgdGhpcy4gQmVjYXVzZSBgYnJuZXQtXHUwMDNlZW5hYmxlZGAgaXMgZmFsc2UsIGBuZl91bnJlZ2lzdGVyX25ldF9ob29rc2AgaXMgc2tpcHBlZC4gVGhlbiwgYGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXQobmV0LCBicm5ldClgIGNoZWNrcyBmb3IgYSBOVUxMIGBoZWFkZXJgLiBCZWNhdXNlIG9mIHRoZSBpbml0aWFsIHplcm9pbmcgZnJvbSBga3phbGxvY2AsIHRoaXMgaXMgdHJ1ZSwgc28gaXQgZXhpdHMgY2xlYW5seS5cblxuTm93LCBJIGNoZWNrZWQgaWYgYW55IG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIGFjdHVhbGx5ICp1c2UqIHRoZSBgYnJuZXRgIHN0cnVjdHVyZS4gSSd2ZSBjb25maXJtZWQgdGhhdCBzdHVmZiBsaWtlIGBpc192bGFuX2lwYCwgYGJyX25mX3ByZV9yb3V0aW5nYCwgZXRjLiwgYXJlIG9ubHkgY2FsbGVkIGZyb20gdGhlIGJyaWRnZSBuZXRmaWx0ZXIgaG9va3MgdGhlbXNlbHZlcyB3aGljaCBhcmUgbmV2ZXIgcmVnaXN0ZXJlZCBpbiB0aGlzIHBhdGguIFRoZSBwZXJuZXQgbWVtb3J5ICppcyogemVyby1pbml0aWFsaXplZCB2aWEgYGt6YWxsb2NgLCBhbmQgdGhlIGBicm5ldC1cdTAwM2Vpbl91c2VybnNgIHZhcmlhYmxlIGlzIGEgc2ltcGxlIGJvb2xlYW4gd2l0aGluIGBzdHJ1Y3QgYnJuZl9uZXRgLlxuXG5TbyB0aGUgYmlnIHF1ZXN0aW9uOiBBcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRvIHVzZXJzcGFjZT8gVGhlIGFuc3dlciwgYXQgbGVhc3QgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGlzIG5vLiBXZSdyZSBub3Qgc2VuZGluZyBhbnl0aGluZyB1bmluaXRpYWxpemVkIHRvIHVzZXIgc3BhY2UsIHRoZXJlIGFyZSBubyBgY29weV90b191c2VyYCBvciBgcHV0X3VzZXJgIGNhbGxzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkLiBUaGUgcGVybmV0IG1lbW9yeSBpcyByZWxpYWJseSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBrZXJuZWwgaW5mcmFzdHJ1Y3R1cmUgaXRzZWxmLlxuXG5GaW5hbGx5LCBJIHJhbiBhIGNoZWNrIGFnYWluc3QgdGhlIEtNU0FOIHJlcXVpcmVtZW50cy4gUmVtZW1iZXIsIHdlIG9ubHkgbmVlZCBpdCBpZiB3ZSdyZSB0b3VjaGluZyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBpZiB3ZSBoYXZlIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEuIFdlJ3JlIG5vdCBkb2luZyBhbnkgb2YgdGhhdCBoZXJlLiBUaGlzIHBhdGNoIGlzIGp1c3QgKmRpc2FibGluZyogYnJpZGdlIG5ldGZpbHRlciBmdW5jdGlvbmFsaXR5IGluIHVucHJpdmlsZWdlZCBuYW1lc3BhY2VzIHRvIHByZXZlbnQgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGxlZ2FjeSBjb2RlIGZyb20gcnVubmluZy4gVGhlIG9ubHkgZmllbGRzIHdlIG1vZGlmeSBhcmUgd2l0aGluIHRoZSB6ZXJvLWluaXRpYWxpemVkIGBzdHJ1Y3QgYnJuZl9uZXRgLiBUaGUgc3lzY3RsIHRlYXJkb3duIGlzIG5vdyBzYWZlbHkgaGFuZGxlZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSBsZWFrIHZlY3RvcnMgaW50cm9kdWNlZC5cblxuVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBhbmQgc3l6a2FsbGVyIGNvdmVyYWdlIHNob3VsZCBiZSBhZGVxdWF0ZS4gTm8gZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgcmVxdWlyZWQuIEkgY2FuIGNvbmZpZGVudGx5IGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDgwLCJPdXRwdXRUb2tlbnMiOjIzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjM0OjAwLjg3NDQ4NzgzOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzdHJpY3RzIHRoZSBsZWdhY3kgYnJfbmV0ZmlsdGVyIG1vZHVsZSBpbiBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZXMgYnkgc2V0dGluZyBhIG5ldyBib29sZWFuIGZsYWcgKGBpbl91c2VybnNgKSwgYXZvaWRpbmcgc3lzY3RsIHJlZ2lzdHJhdGlvbiwgYW5kIHNraXBwaW5nIG5ldGZpbHRlciBob29rIHJlZ2lzdHJhdGlvbiBvbiBkZXZpY2UgZXZlbnRzLlxcblxcbi0gTWVtb3J5IEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogYHN0cnVjdCBicm5mX25ldGAgaXMgYWxsb2NhdGVkIGFzIHBlci1uZXRucyBzdG9yYWdlIGJ5IHRoZSBwZXJuZXQgc3Vic3lzdGVtIHVzaW5nIHplcm8taW5pdGlhbGl6ZWQgbWVtb3J5IChga3phbGxvY2ApLiBUaGUgYWRkZWQgYGluX3VzZXJuc2AgYm9vbGVhbiBhbmQgZXhpc3RpbmcgZmllbGRzIGFyZSBzYWZlbHkgemVyby1pbml0aWFsaXplZCBvbiBhbGxvY2F0aW9uLlxcbi0gTm8gSW5mbyBMZWFrcyBvciBVbmluaXRpYWxpemVkIFJlYWRzOiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgYWxzbyBndWFyZHMgc3lzY3RsIGNsZWFudXAgYWdhaW5zdCBOVUxMIHBvaW50ZXJzIChgY3RsX2hkcmApIHdoZW4gc3lzY3RsIHJlZ2lzdHJhdGlvbiB3YXMgc2tpcHBlZC5cXG4tIFN0YW5kYXJkIFNhbml0aXplciBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcm91bmQgbGlmZWN5Y2xlLCBudWxsIGRlcmVmZXJlbmNlcywgb3IgbmV0bnMgZGVzdHJ1Y3Rpb24gYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc3RyaWN0cyB0aGUgbGVnYWN5IGJyX25ldGZpbHRlciBtb2R1bGUgaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzIGJ5IHNldHRpbmcgYSBuZXcgYm9vbGVhbiBmbGFnIChgaW5fdXNlcm5zYCksIGF2b2lkaW5nIHN5c2N0bCByZWdpc3RyYXRpb24sIGFuZCBza2lwcGluZyBuZXRmaWx0ZXIgaG9vayByZWdpc3RyYXRpb24gb24gZGV2aWNlIGV2ZW50cy5cXG5cXG4tIE1lbW9yeSBBbGxvY2F0aW9uIFxcdTAwMjYgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgYnJuZl9uZXRgIGlzIGFsbG9jYXRlZCBhcyBwZXItbmV0bnMgc3RvcmFnZSBieSB0aGUgcGVybmV0IHN1YnN5c3RlbSB1c2luZyB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeSAoYGt6YWxsb2NgKS4gVGhlIGFkZGVkIGBpbl91c2VybnNgIGJvb2xlYW4gYW5kIGV4aXN0aW5nIGZpZWxkcyBhcmUgc2FmZWx5IHplcm8taW5pdGlhbGl6ZWQgb24gYWxsb2NhdGlvbi5cXG4tIE5vIEluZm8gTGVha3Mgb3IgVW5pbml0aWFsaXplZCBSZWFkczogVGhlIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGFsc28gZ3VhcmRzIHN5c2N0bCBjbGVhbnVwIGFnYWluc3QgTlVMTCBwb2ludGVycyAoYGN0bF9oZHJgKSB3aGVuIHN5c2N0bCByZWdpc3RyYXRpb24gd2FzIHNraXBwZWQuXFxuLSBTdGFuZGFyZCBTYW5pdGl6ZXIgQXBwbGljYWJpbGl0eTogQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJvdW5kIGxpZmVjeWNsZSwgbnVsbCBkZXJlZmVyZW5jZXMsIG9yIG5ldG5zIGRlc3RydWN0aW9uIGFyZSBoYW5kbGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowswzs4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 22:11:28 +0000 UTC FinishedAt: 2026-08-31 22:34:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE_NETFILTER", "BRIDGE", "NETFILTER", "USER_NS", "NET_NS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "1b78070aaef63512688aebfbc82365ef9d6660f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE_NETFILTER", "BRIDGE", "NETFILTER", "USER_NS", "NET_NS" ], "series_id": "e2dec9ae-e149-462d-8d80-1ee46fb10c7e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "brnf_device_event", "brnf_init_net", "brnf_exit_net", "br_nf_hook_thresh" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRV9ORVRGSUxURVImIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtVU0VSX05TJiMzNDssCiAgICAmIzM0O05FVF9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JybmZfZGV2aWNlX2V2ZW50JiMzNDssCiAgICAmIzM0O2JybmZfaW5pdF9uZXQmIzM0OywKICAgICYjMzQ7YnJuZl9leGl0X25ldCYjMzQ7LAogICAgJiMzNDticl9uZl9ob29rX3RocmVzaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RyaWN0cyB0aGUgbGVnYWN5IGJyX25ldGZpbHRlciBtb2R1bGUgaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzIGJ5IHNldHRpbmcgYSBuZXcgYm9vbGVhbiBmbGFnIChgaW5fdXNlcm5zYCksIGF2b2lkaW5nIHN5c2N0bCByZWdpc3RyYXRpb24sIGFuZCBza2lwcGluZyBuZXRmaWx0ZXIgaG9vayByZWdpc3RyYXRpb24gb24gZGV2aWNlIGV2ZW50cy5cblxuLSBNZW1vcnkgQWxsb2NhdGlvbiBcdTAwMjYgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgYnJuZl9uZXRgIGlzIGFsbG9jYXRlZCBhcyBwZXItbmV0bnMgc3RvcmFnZSBieSB0aGUgcGVybmV0IHN1YnN5c3RlbSB1c2luZyB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeSAoYGt6YWxsb2NgKS4gVGhlIGFkZGVkIGBpbl91c2VybnNgIGJvb2xlYW4gYW5kIGV4aXN0aW5nIGZpZWxkcyBhcmUgc2FmZWx5IHplcm8taW5pdGlhbGl6ZWQgb24gYWxsb2NhdGlvbi5cbi0gTm8gSW5mbyBMZWFrcyBvciBVbmluaXRpYWxpemVkIFJlYWRzOiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgYWxzbyBndWFyZHMgc3lzY3RsIGNsZWFudXAgYWdhaW5zdCBOVUxMIHBvaW50ZXJzIChgY3RsX2hkcmApIHdoZW4gc3lzY3RsIHJlZ2lzdHJhdGlvbiB3YXMgc2tpcHBlZC5cbi0gU3RhbmRhcmQgU2FuaXRpemVyIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBsaWZlY3ljbGUsIG51bGwgZGVyZWZlcmVuY2VzLCBvciBuZXRucyBkZXN0cnVjdGlvbiBhcmUgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgYnJpZGdlIG5ldGZpbHRlciBpbml0aWFsaXphdGlvbiBhbmQgZGV2aWNlIGV2ZW50IGhhbmRsaW5nIHRvIGRpc2FibGUgYnJfbmV0ZmlsdGVyIGFuZCBpdHMgc3lzY3RsIHJlZ2lzdHJhdGlvbiB3aXRoaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzLiBUaGlzIGFsdGVycyBjb3JlIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBicmlkZ2UgZGV2aWNlIHNldHVwL3RlYXJkb3duIGV4ZWN1dGlvbiBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNDY3MzUxMGEyYTk2YjIxNTY1YjhjZDEwNGFjODMwMGRmZTUyYmIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjI6MzI6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdFxuaW5kZXggYzFlNmVhNTJjOWU1OS4uZGRlZDFhNmVkZDYwNiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdFxuQEAgLTI3Nyw4ICYjNDM7Mjc3LDkgQEAgTmV0ZmlsdGVyXG4gPT09PT09PT09XG4gXG4gVGhlIGJyaWRnZSBuZXRmaWx0ZXIgbW9kdWxlIGlzIGEgbGVnYWN5IGZlYXR1cmUgdGhhdCBhbGxvd3MgdG8gZmlsdGVyIGJyaWRnZWRcbi1wYWNrZXRzIHdpdGggaXB0YWJsZXMgYW5kIGlwNnRhYmxlcy4gSXRzIHVzZSBpcyBkaXNjb3VyYWdlZC4gVXNlcnMgc2hvdWxkXG4tY29uc2lkZXIgdXNpbmcgbmZ0YWJsZXMgZm9yIHBhY2tldCBmaWx0ZXJpbmcuXG4mIzQzO3BhY2tldHMgd2l0aCBpcHRhYmxlcyBhbmQgaXA2dGFibGVzLiBUaGlzIGZlYXR1cmUgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsIGFuZFxuJiM0Mztub3QgYXZhaWxhYmxlIGluIHVzZXIgbmFtZXNwYWNlcy4gQ29uc2lkZXIgdXNpbmcgbmZ0YWJsZXMgZm9yIHBhY2tldCBmaWx0ZXJpbmdcbiYjNDM7aW5zdGVhZC5cbiBcbiBUaGUgb2xkZXIgZWJ0YWJsZXMgdG9vbCBpcyBtb3JlIGZlYXR1cmUtbGltaXRlZCBjb21wYXJlZCB0byBuZnRhYmxlcywgYnV0XG4ganVzdCBsaWtlIG5mdGFibGVzIGl0IGRvZXNuJiMzOTt0IG5lZWQgdGhpcyBtb2R1bGUgZWl0aGVyIHRvIGZ1bmN0aW9uLlxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXG5pbmRleCAwYTM5NGU1ZjQzOTE2Li5lMTUzNTVmZjIxNWE3IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY1xuQEAgLTU0LDYgJiM0Mzs1NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgYnJuZl9uZXRfaWQgX19yZWFkX21vc3RseTtcbiBcbiBzdHJ1Y3QgYnJuZl9uZXQge1xuIFx0Ym9vbCBlbmFibGVkO1xuJiM0MztcdGJvb2wgaW5fdXNlcm5zO1xuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqY3RsX2hkcjtcbkBAIC0xMTAwLDcgJiM0MzsxMTAxLDcgQEAgc3RhdGljIGludCBicm5mX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCxcbiBcbiBcdG5ldCA9IGRldl9uZXQoZGV2KTtcbiBcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG4tXHRpZiAoYnJuZXQtXHUwMDNlZW5hYmxlZClcbiYjNDM7XHRpZiAoYnJuZXQtXHUwMDNlZW5hYmxlZCB8fCBicm5ldC1cdTAwM2Vpbl91c2VybnMpXG4gXHRcdHJldHVybiBOT1RJRllfT0s7XG4gXG4gXHRyZXQgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBicl9uZl9vcHMsIEFSUkFZX1NJWkUoYnJfbmZfb3BzKSk7XG5AQCAtMTIyOSw5ICYjNDM7MTIzMCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9kZWZhdWx0KHN0cnVjdCBicm5mX25ldCAqYnJuZilcbiBcdGJybmYtXHUwMDNlZmlsdGVyX3BwcG9lX3RhZ2dlZCA9IDA7XG4gXHRicm5mLVx1MDAzZXBhc3Nfdmxhbl9pbmRldiA9IDA7XG4gfVxuJiM0MzsjZW5kaWZcbiBcbiBzdGF0aWMgaW50IGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIHtcbiYjNDM7I2lmZGVmIENPTkZJR19TWVNDVExcbiBcdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlID0gYnJuZl90YWJsZTtcbiBcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQ7XG4gXG5AQCAtMTI1OSwyNSAmIzQzOzEyNjIsMzkgQEAgc3RhdGljIGludCBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4tXG4mIzQzOyNlbmRpZlxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgc3RydWN0IGJybmZfbmV0ICpicm5ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSA9IGJybmV0LVx1MDAzZWN0bF9oZHItXHUwMDNlY3RsX3RhYmxlX2FyZztcbiYjNDM7I2lmZGVmIENPTkZJR19TWVNDVExcbiYjNDM7XHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyID0gYnJuZXQtXHUwMDNlY3RsX2hkcjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcbi1cdHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShicm5ldC1cdTAwM2VjdGxfaGRyKTtcbiYjNDM7XHRpZiAoIWhlYWRlcilcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0dGFibGUgPSBoZWFkZXItXHUwMDNlY3RsX3RhYmxlX2FyZztcbiYjNDM7XHR1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoaGVhZGVyKTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKVxuIFx0XHRrZnJlZSh0YWJsZSk7XG4mIzQzOyNlbmRpZlxuIH1cbiBcbiBzdGF0aWMgaW50IF9fbmV0X2luaXQgYnJuZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuJiM0MztcdGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpIHtcbiYjNDM7XHRcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcbiYjNDM7XG4mIzQzO1x0XHRicm5ldC1cdTAwM2Vpbl91c2VybnMgPSB0cnVlO1xuJiM0MztcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O2JyX25ldGZpbHRlciBubyBsb25nZXIgc3VwcG9ydGVkIGluIHVzZXIgbmFtZXNwYWNlc1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQobmV0KTtcbiB9XG4tI2VuZGlmXG4gXG4gc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiB7XG5AQCAtMTI4OSwxNSAmIzQzOzEzMDYsMTEgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0YnJuZXQtXHUwMDNlZW5hYmxlZCA9IGZhbHNlO1xuIFx0fVxuIFxuLSNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gXHRicl9uZXRmaWx0ZXJfc3lzY3RsX2V4aXRfbmV0KG5ldCwgYnJuZXQpO1xuLSNlbmRpZlxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGJybmZfbmV0X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLSNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gXHQuaW5pdCA9IGJybmZfaW5pdF9uZXQsXG4tI2VuZGlmXG4gXHQuZXhpdCA9IGJybmZfZXhpdF9uZXQsXG4gXHQuaWQgICA9IFx1MDAyNmJybmZfbmV0X2lkLFxuIFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGJybmZfbmV0KSxcbkBAIC0xMzE4LDcgJiM0MzsxMzMxLDcgQEAgc3RhdGljIGludCBfX2luaXQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZClcbiBcdH1cbiBcbiBcdFJDVV9JTklUX1BPSU5URVIobmZfYnJfb3BzLCBcdTAwMjZicl9vcHMpO1xuLVx0cHJpbnRrKEtFUk5fTk9USUNFIFwmIzM0O0JyaWRnZSBmaXJld2FsbGluZyByZWdpc3RlcmVkXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcl93YXJuKFwmIzM0O2JyX25ldGZpbHRlciBpcyBzbGF0ZWQgZm9yIHJlbW92YWwgaW4gMjAyNy5cXG5cJiMzNDspO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRV9ORVRGSUxURVImIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtVU0VSX05TJiMzNDssCiAgICAmIzM0O05FVF9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JybmZfZGV2aWNlX2V2ZW50JiMzNDssCiAgICAmIzM0O2JybmZfaW5pdF9uZXQmIzM0OywKICAgICYjMzQ7YnJuZl9leGl0X25ldCYjMzQ7LAogICAgJiMzNDticl9uZl9ob29rX3RocmVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGJyaWRnZSBuZXRmaWx0ZXIgaW5pdGlhbGl6YXRpb24gYW5kIGRldmljZSBldmVudCBoYW5kbGluZyB0byBkaXNhYmxlIGJyX25ldGZpbHRlciBhbmQgaXRzIHN5c2N0bCByZWdpc3RyYXRpb24gd2l0aGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcy4gVGhpcyBhbHRlcnMgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgYnJpZGdlIGRldmljZSBzZXR1cC90ZWFyZG93biBleGVjdXRpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTQ2NzM1MTBhMmE5NmIyMTU2NWI4Y2QxMDRhYzgzMDBkZmU1MmJiMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIyOjMyOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdAppbmRleCBjMWU2ZWE1MmM5ZTU5Li5kZGVkMWE2ZWRkNjA2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdApAQCAtMjc3LDggJiM0MzsyNzcsOSBAQCBOZXRmaWx0ZXIKID09PT09PT09PQogCiBUaGUgYnJpZGdlIG5ldGZpbHRlciBtb2R1bGUgaXMgYSBsZWdhY3kgZmVhdHVyZSB0aGF0IGFsbG93cyB0byBmaWx0ZXIgYnJpZGdlZAotcGFja2V0cyB3aXRoIGlwdGFibGVzIGFuZCBpcDZ0YWJsZXMuIEl0cyB1c2UgaXMgZGlzY291cmFnZWQuIFVzZXJzIHNob3VsZAotY29uc2lkZXIgdXNpbmcgbmZ0YWJsZXMgZm9yIHBhY2tldCBmaWx0ZXJpbmcuCiYjNDM7cGFja2V0cyB3aXRoIGlwdGFibGVzIGFuZCBpcDZ0YWJsZXMuIFRoaXMgZmVhdHVyZSBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwgYW5kCiYjNDM7bm90IGF2YWlsYWJsZSBpbiB1c2VyIG5hbWVzcGFjZXMuIENvbnNpZGVyIHVzaW5nIG5mdGFibGVzIGZvciBwYWNrZXQgZmlsdGVyaW5nCiYjNDM7aW5zdGVhZC4KIAogVGhlIG9sZGVyIGVidGFibGVzIHRvb2wgaXMgbW9yZSBmZWF0dXJlLWxpbWl0ZWQgY29tcGFyZWQgdG8gbmZ0YWJsZXMsIGJ1dAoganVzdCBsaWtlIG5mdGFibGVzIGl0IGRvZXNuJiMzOTt0IG5lZWQgdGhpcyBtb2R1bGUgZWl0aGVyIHRvIGZ1bmN0aW9uLgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMKaW5kZXggMGEzOTRlNWY0MzkxNi4uZTE1MzU1ZmYyMTVhNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jCkBAIC01NCw2ICYjNDM7NTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGJybmZfbmV0X2lkIF9fcmVhZF9tb3N0bHk7CiAKIHN0cnVjdCBicm5mX25ldCB7CiAJYm9vbCBlbmFibGVkOwomIzQzOwlib29sIGluX3VzZXJuczsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKIAlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqY3RsX2hkcjsKQEAgLTExMDAsNyAmIzQzOzExMDEsNyBAQCBzdGF0aWMgaW50IGJybmZfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LAogCiAJbmV0ID0gZGV2X25ldChkZXYpOwogCWJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7Ci0JaWYgKGJybmV0LSZndDtlbmFibGVkKQomIzQzOwlpZiAoYnJuZXQtJmd0O2VuYWJsZWQgfHwgYnJuZXQtJmd0O2luX3VzZXJucykKIAkJcmV0dXJuIE5PVElGWV9PSzsKIAogCXJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGJyX25mX29wcywgQVJSQVlfU0laRShicl9uZl9vcHMpKTsKQEAgLTEyMjksOSAmIzQzOzEyMzAsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChzdHJ1Y3QgYnJuZl9uZXQgKmJybmYpCiAJYnJuZi0mZ3Q7ZmlsdGVyX3BwcG9lX3RhZ2dlZCA9IDA7CiAJYnJuZi0mZ3Q7cGFzc192bGFuX2luZGV2ID0gMDsKIH0KJiM0MzsjZW5kaWYKIAogc3RhdGljIGludCBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKJiM0MzsjaWZkZWYgQ09ORklHX1NZU0NUTAogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlID0gYnJuZl90YWJsZTsKIAlzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0OwogCkBAIC0xMjU5LDI1ICYjNDM7MTI2MiwzOSBAQCBzdGF0aWMgaW50IGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogCiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQomIzQzOyNlbmRpZgogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBicl9uZXRmaWx0ZXJfc3lzY3RsX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJIHN0cnVjdCBicm5mX25ldCAqYnJuZXQpCiB7Ci0JY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUgPSBicm5ldC0mZ3Q7Y3RsX2hkci0mZ3Q7Y3RsX3RhYmxlX2FyZzsKJiM0MzsjaWZkZWYgQ09ORklHX1NZU0NUTAomIzQzOwlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyID0gYnJuZXQtJmd0O2N0bF9oZHI7CiYjNDM7CWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCi0JdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKGJybmV0LSZndDtjdGxfaGRyKTsKJiM0MzsJaWYgKCFoZWFkZXIpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXRhYmxlID0gaGVhZGVyLSZndDtjdGxfdGFibGVfYXJnOwomIzQzOwl1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoaGVhZGVyKTsKIAlpZiAoIW5ldF9lcShuZXQsICZhbXA7aW5pdF9uZXQpKQogCQlrZnJlZSh0YWJsZSk7CiYjNDM7I2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBicm5mX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKJiM0MzsJaWYgKG5ldC0mZ3Q7dXNlcl9ucyAhPSAmYW1wO2luaXRfdXNlcl9ucykgewomIzQzOwkJc3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpOwomIzQzOwomIzQzOwkJYnJuZXQtJmd0O2luX3VzZXJucyA9IHRydWU7CiYjNDM7CQlwcl93YXJuX29uY2UoJiMzNDticl9uZXRmaWx0ZXIgbm8gbG9uZ2VyIHN1cHBvcnRlZCBpbiB1c2VyIG5hbWVzcGFjZXNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQobmV0KTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJybmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewpAQCAtMTI4OSwxNSAmIzQzOzEzMDYsMTEgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAkJYnJuZXQtJmd0O2VuYWJsZWQgPSBmYWxzZTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCiAJYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChuZXQsIGJybmV0KTsKLSNlbmRpZgogfQogCiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGJybmZfbmV0X29wcyBfX3JlYWRfbW9zdGx5ID0gewotI2lmZGVmIENPTkZJR19TWVNDVEwKIAkuaW5pdCA9IGJybmZfaW5pdF9uZXQsCi0jZW5kaWYKIAkuZXhpdCA9IGJybmZfZXhpdF9uZXQsCiAJLmlkICAgPSAmYW1wO2JybmZfbmV0X2lkLAogCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBicm5mX25ldCksCkBAIC0xMzE4LDcgJiM0MzsxMzMxLDcgQEAgc3RhdGljIGludCBfX2luaXQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZCkKIAl9CiAKIAlSQ1VfSU5JVF9QT0lOVEVSKG5mX2JyX29wcywgJmFtcDticl9vcHMpOwotCXByaW50ayhLRVJOX05PVElDRSAmIzM0O0JyaWRnZSBmaXJld2FsbGluZyByZWdpc3RlcmVkXG4mIzM0Oyk7CiYjNDM7CXByX3dhcm4oJiMzNDticl9uZXRmaWx0ZXIgaXMgc2xhdGVkIGZvciByZW1vdmFsIGluIDIwMjcuXG4mIzM0Oyk7CiAJcmV0dXJuIDA7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzNQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDM5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBSZWNlbnQgTmV0d29yayBCcmlkZ2UgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCBwcmltYXJpbHkgaW1wYWN0cyBob3cgdGhlIGJyaWRnZSBuZXRmaWx0ZXIgaG9va3MgYmVoYXZlIHdpdGhpbiB1c2VyIG5hbWVzcGFjZXMuIEkgc2VlIHRoYXQgaXQgbW9kaWZpZXMgYm90aCBgbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY2AgYW5kIGBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdGAsIHNvIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgYm90aCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLgoKTG9va2luZyBhdCBgYnJfbmV0ZmlsdGVyX2hvb2tzLmNgLCB0aGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgYWRkaXRpb24gb2YgYSBgYm9vbCBpbl91c2VybnM7YCBmaWVsZCB3aXRoaW4gdGhlIGBzdHJ1Y3QgYnJuZl9uZXRgLiBUaGlzIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gVGhlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9ucyBpbiBgYnJuZl9kZXZpY2VfZXZlbnRgIGFyZSB0ZWxsaW5nLiBJdCBub3cgY2hlY2tzIGZvciBlaXRoZXIgYGJybmV0LSZndDtlbmFibGVkYCAqb3IqIGBicm5ldC0mZ3Q7aW5fdXNlcm5zYC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIHByZXZpb3VzbHkgaXQgb25seSBjaGVja2VkIGBicm5ldC0mZ3Q7ZW5hYmxlZGAuIFRoaXMgY2hhbmdlIGltcGxpZXMgdGhhdCB3aXRoaW4gYSB1c2VyIG5hbWVzcGFjZSAoZGVmaW5lZCBhcyBgbmV0LSZndDt1c2VyX25zICE9ICZhbXA7aW5pdF91c2VyX25zYCksIHRoZSBgYnJfbmZfb3BzYCBhcmUgKm5vdCogcmVnaXN0ZXJlZCB3aGVuIGEgYnJpZGdlIGRldmljZSBpcyBjcmVhdGVkIG9yIHJlZ2lzdGVyZWQuIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBkaWZmZXJlbmNlLgoKRnVydGhlcm1vcmUsIGBicm5mX2luaXRfbmV0YCBpcyBub3cgYWx3YXlzIGNhbGxlZCwgcmVnYXJkbGVzcyBvZiB0aGUgYENPTkZJR19TWVNDVExgIG9wdGlvbiwgd2hpY2ggaXMgYSBkZXBhcnR1cmUgZnJvbSBwcmV2aW91cyBiZWhhdmlvci4gSSYjMzk7bSBub3RpbmcgdGhhdCBpbiBgYnJuZl9pbml0X25ldGAsIGlmIHRoZSBjb2RlIGRldGVjdHMgdGhhdCB3ZSYjMzk7cmUgd2l0aGluIGEgdXNlciBuYW1lc3BhY2UsIGl0IHNldHMgYGJybmV0LSZndDtpbl91c2VybnMgPSB0cnVlO2AgYW5kIGlzc3VlcyBhIHdhcm5pbmcuIEl0IGFsc28gc2tpcHMgdGhlIGNhbGwgdG8gYGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQobmV0KWAuIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHBhdGNoIGFpbXMgdG8gaXNvbGF0ZSBvciBjb250cm9sIHRoZSBzeXNjdGwgc2V0dGluZ3MgcmVsYXRlZCB0byBuZXRmaWx0ZXIgd2l0aGluIHVzZXIgbmFtZXNwYWNlcy4KClRoZSBjaGFuZ2VzIGluIGBicl9uZXRmaWx0ZXJfc3lzY3RsX2V4aXRfbmV0YCB3aXRoIHRoZSBgaWYgKCFoZWFkZXIpIHJldHVybjtgIGNoZWNrIGFyZSBpbXBvcnRhbnQsIGJ1dCBub3QgaW1tZWRpYXRlbHkgb2J2aW91cy4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgYG5ldC9icmlkZ2UvS2NvbmZpZ2AsIGBuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnYCwgb3IgYG5ldC9LY29uZmlnYCBtaWdodCBjb250YWluIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGRldGFpbHMgZm9yIGBicl9uZXRmaWx0ZXJgLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtCUklER0VfTkVURklMVEVSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWc9MTQ3PUNPTkZJR19ORVRGSUxURVI9eVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZzoxNDg6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0xNDktQ09ORklHX05GX0NPTk5UUkFDSz1tXG4tLVxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZz0xNjM9Q09ORklHX05FVEZJTFRFUj15XG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjE2NDpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnLTE2NS1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW1cbi0tXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTE3OT1DT05GSUdfTkVURklMVEVSPXlcbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWc6MTgwOkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cbmFyY2gvbG9vbmdhcmNoL2NvbmZpZ3MvbG9vbmdzb242NF9kZWZjb25maWctMTgxLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWc9NzU9Q09ORklHX0JSSURHRT15XG5hcmNoL21pcHMvY29uZmlncy9ibWlwc19zdGJfZGVmY29uZmlnOjc2OkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWctNzctQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tXG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvbG9vbmdzb24zX2RlZmNvbmZpZz02MT1DT05GSUdfTkVURklMVEVSPXlcbmFyY2gvbWlwcy9jb25maWdzL2xvb25nc29uM19kZWZjb25maWc6NjI6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxuYXJjaC9taXBzL2NvbmZpZ3MvbG9vbmdzb24zX2RlZmNvbmZpZy02My1DT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWc9NDc9Q09ORklHX05FVEZJTFRFUj15XG5hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWc6NDg6IyBDT05GSUdfQlJJREdFX05FVEZJTFRFUiBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWctNDktQ09ORklHX05GX0NPTk5UUkFDSz15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZz00ND1DT05GSUdfTkVURklMVEVSPXlcbmFyY2gvbWlwcy9jb25maWdzL3J0MzA1eF9kZWZjb25maWc6NDU6IyBDT05GSUdfQlJJREdFX05FVEZJTFRFUiBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnLTQ2LUNPTkZJR19ORl9DT05OVFJBQ0s9bVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL3h3YXlfZGVmY29uZmlnPTQ2PUNPTkZJR19ORVRGSUxURVI9eVxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc6NDc6IyBDT05GSUdfQlJJREdFX05FVEZJTFRFUiBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZy00OC1DT05GSUdfTkZfQ09OTlRSQUNLPW1cbi0tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTY2PUNPTkZJR19ORVRGSUxURVI9eVxuYXJjaC9yaXNjdi9jb25maWdzL2RlZmNvbmZpZzo2NzpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnLTY4LUNPTkZJR19ORl9DT05OVFJBQ0s9bVxuLS1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZz0xODA9Q09ORklHX05FVEZJTFRFUj15XG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc6MTgxOkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xODItQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0s9bVxuLS1cbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZz0xNzE9Q09ORklHX05FVEZJTFRFUj15XG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MTcyOkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cbmFyY2gvczM5MC9jb25maWdzL2RlZmNvbmZpZy0xNzMtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0s9bVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjI6I2lmbmRlZiBfX0xJTlVYX0JSSURHRV9ORVRGSUxURVJfSFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MzojZGVmaW5lIF9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9IXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC00LVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPTg9c3RydWN0IG5mX2JyaWRnZV9mcmFnX2RhdGEge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTE0LVxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MTU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0xNi1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD04Mj1zdGF0aWMgaW5saW5lIGJvb2wgbmZfYnJpZGdlX2luX3ByZXJvdXRpbmcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC04NS19XG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDo4NjojZW5kaWYgLyogQ09ORklHX0JSSURHRV9ORVRGSUxURVIgKi9cbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTg3LVxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg9Mjg1PXN0cnVjdCB0c19jb25maWc7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI4Ni1cbmluY2x1ZGUvbGludXgvc2tidWZmLmg6Mjg3OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC0yODgtc3RydWN0IG5mX2JyaWRnZV9pbmZvIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTUwMzg9ZW51bSBza2JfZXh0X2lkIHtcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6NTAzOTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA0MC1cdFNLQl9FWFRfQlJJREdFX05GLFxuLS1cbmluY2x1ZGUvbmV0L25laWdoYm91ci5oPTQ4ND1zdGF0aWMgaW5saW5lIGludCBuZWlnaF9ldmVudF9zZW5kKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmluY2x1ZGUvbmV0L25laWdoYm91ci5oLTQ4OC1cbmluY2x1ZGUvbmV0L25laWdoYm91ci5oOjQ4OTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbmluY2x1ZGUvbmV0L25laWdoYm91ci5oLTQ5MC1zdGF0aWMgaW5saW5lIGludCBuZWlnaF9oaF9icmlkZ2Uoc3RydWN0IGhoX2NhY2hlICpoaCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg9OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtMTAte1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oOjExOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTEyLVx0c3RydWN0IG5mX2JyaWRnZV9pbmZvICpiID0gc2tiX2V4dF9hZGQoc2tiLCBTS0JfRVhUX0JSSURHRV9ORik7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oPTQzPXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0YWJsZSAqYnJpZGdlX3BhcmVudF9ydGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaC00NC17XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg6NDU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtNDYtXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0O1xuLS1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5oPTEzPXN0cnVjdCBuZl9xdWV1ZV9lbnRyeSB7XG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmgtMTktXHR1bnNpZ25lZCBpbnRcdFx0aG9va19pbmRleDtcdC8qIGluZGV4IGluIGhvb2tfZW50cmllcy1cdTAwM2Vob29rW10gKi9cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5oOjIwOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmgtMjEtXHRzdHJ1Y3QgbmV0X2RldmljZVx0KmJyaWRnZV9kZXY7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjI6I2lmbmRlZiBfVUFQSV9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9IXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjM6I2RlZmluZSBfVUFQSV9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9IXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTQtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD0zND1lbnVtIG5mX2JyX2hvb2tfcHJpb3JpdGllcyB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC00NC1cbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6NDU6I2VuZGlmIC8qIF9VQVBJX19MSU5VWF9CUklER0VfTkVURklMVEVSX0ggKi9cbi0tXG5uZXQvS2NvbmZpZz0yMjA9Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxuLS1cbm5ldC9LY29uZmlnLTIzMC1cbm5ldC9LY29uZmlnOjIzMTpjb25maWcgQlJJREdFX05FVEZJTFRFUlxubmV0L0tjb25maWctMjMyLVx0dHJpc3RhdGUgXCYjMzQ7QnJpZGdlZCBJUC9BUlAgcGFja2V0cyBmaWx0ZXJpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL01ha2VmaWxlPTEzPWJyaWRnZS0kKENPTkZJR19TWVNGUykgJiM0Mzs9IGJyX3N5c2ZzX2lmLm8gYnJfc3lzZnNfYnIub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0xNC1cbm5ldC9icmlkZ2UvTWFrZWZpbGU6MTU6YnJpZGdlLSQoc3Vic3QgbSx5LCQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpKSAmIzQzOz0gYnJfbmZfY29yZS5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTE2LVxuLS1cbm5ldC9icmlkZ2UvTWFrZWZpbGU9MTg9YnJfbmV0ZmlsdGVyLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKSAmIzQzOz0gYnJfbmV0ZmlsdGVyX2lwdjYub1xubmV0L2JyaWRnZS9NYWtlZmlsZToxOTpvYmotJChDT05GSUdfQlJJREdFX05FVEZJTFRFUikgJiM0Mzs9IGJyX25ldGZpbHRlci5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTIwLVxuLS1cbm5ldC9icmlkZ2UvYnIuYz00MjU9c3RhdGljIGludCBfX2luaXQgYnJfaW5pdCh2b2lkKVxuLS1cbm5ldC9icmlkZ2UvYnIuYy00NjYtXG5uZXQvYnJpZGdlL2JyLmM6NDY3OiNpZiBJU19NT0RVTEUoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvYnJpZGdlL2JyLmMtNDY4LVx0cHJfaW5mbyhcJiMzNDticmlkZ2U6IGZpbHRlcmluZyB2aWEgYXJwL2lwL2lwNnRhYmxlcyBpcyBubyBsb25nZXIgYXZhaWxhYmxlIFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MjA0PXN0YXRpYyBpbnQgYnJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTIxMS1cdGJyX29wdF90b2dnbGUoYnIsIEJST1BUX01UVV9TRVRfQllfVVNFUiwgdHJ1ZSk7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjIxMjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMjEzLVx0LyogcmVtZW1iZXIgdGhlIE1UVSBpbiB0aGUgcnRhYmxlIGZvciBQTVRVICovXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTI5NT1zdGF0aWMgaW50IGJyX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1NTQtI2VuZGlmXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNTU1OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTU1Ni1cdGlmIChkYXRhW0lGTEFfQlJfTkZfQ0FMTF9JUFRBQkxFU10pIHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYz0xNjE5PXN0YXRpYyBzaXplX3QgYnJfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2NjctI2VuZGlmXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNjY4OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTY2OS1cdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSAmIzQzOyAgICAgLyogSUZMQV9CUl9ORl9DQUxMX0lQVEFCTEVTICovXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTY3OD1zdGF0aWMgaW50IGJyX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc5MS0jZW5kaWZcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jOjE3OTI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNzkzLVx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX05GX0NBTExfSVBUQUJMRVMsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9NTAwPXN0cnVjdCBuZXRfYnJpZGdlIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC01MTQtXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdHBvcnRfbGlzdDtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjUxNTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUxNi1cdHVuaW9uIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0yMDIzPWV4dGVybiBjb25zdCBzdHJ1Y3QgbmZfYnJfb3BzIF9fcmN1ICpuZl9icl9vcHM7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMjAyNS0vKiBicl9uZXRmaWx0ZXIuYyAqL1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjAyNjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTIwMjctaW50IGJyX25mX2NvcmVfaW5pdCh2b2lkKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9NzcxPXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhtdWx0aWNhc3RfbWxkX3ZlcnNpb24pO1xuLS1cbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy03NzMtI2VuZGlmXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM6Nzc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTc3NS1zdGF0aWMgc3NpemVfdCBuZl9jYWxsX2lwdGFibGVzX3Nob3coXG4tLVxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jPTkzNT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYnJpZGdlX2F0dHJzW10gPSB7XG4tLVxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTk3Ni0jZW5kaWZcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYzo5Nzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtOTc4LVx0XHUwMDI2ZGV2X2F0dHJfbmZfY2FsbF9pcHRhYmxlcy5hdHRyLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTUxNTA9c3RhdGljIGNvbnN0IHU4IHNrYl9leHRfdHlwZV9sZW5bXSA9IHtcbm5ldC9jb3JlL3NrYnVmZi5jOjUxNTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvY29yZS9za2J1ZmYuYy01MTUyLVx0W1NLQl9FWFRfQlJJREdFX05GXSA9IFNLQl9FWFRfQ0hVTktTSVpFT0Yoc3RydWN0IG5mX2JyaWRnZV9pbmZvKSxcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jLTE5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9SRUpFQ1QuaFx1MDAzZVxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYzoyMDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMtMjEtI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXHUwMDNlXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MjczPXZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zMTMtXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzozMTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYy0zMTUtXHQvKiBJZiB3ZSB1c2UgaXBfbG9jYWxfb3V0IGZvciBicmlkZ2VkIHRyYWZmaWMsIHRoZSBNQUMgc291cmNlIG9uXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmM9MzEzPXZvaWQgbmZfc2VuZF9yZXNldDYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpvbGRza2IsXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtMzgyLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmM6MzgzOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtMzg0LVx0LyogSWYgd2UgdXNlIGlwNl9sb2NhbF9vdXQgZm9yIGJyaWRnZWQgdHJhZmZpYywgdGhlIE1BQyBzb3VyY2Ugb25cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9MTQ4NT1jb25maWcgTkVURklMVEVSX1hUX01BVENIX1BIWVNERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDg2LVx0dHJpc3RhdGUgJiMzOTtcJiMzNDtwaHlzZGV2XCYjMzQ7IG1hdGNoIHN1cHBvcnQmIzM5O1xubmV0L25ldGZpbHRlci9LY29uZmlnOjE0ODc6XHRkZXBlbmRzIG9uIEJSSURHRSBcdTAwMjZcdTAwMjYgQlJJREdFX05FVEZJTFRFUlxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0ODgtXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xMjg9aGFzaF9uZXRpZmFjZTRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtICpuZXh0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xMzgtXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MTM5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTE0MC1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X3BoeXNpbmRldl9uYW1lKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTU2PWhhc2hfbmV0aWZhY2U0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xNzctXHRpZiAob3B0LVx1MDAzZWNtZGZsYWdzIFx1MDAyNiBJUFNFVF9GTEFHX1BIWVNERVYpIHtcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoxNzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmMtMTc5LVx0XHRjb25zdCBjaGFyICplaWZhY2UgPSBTUkNESVIgPyBnZXRfcGh5c2luZGV2X25hbWUoc2tiLCB4dF9uZXQocGFyKSkgOlxuLS1cbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0zNzc9aGFzaF9uZXRpZmFjZTZfa2FkdChzdHJ1Y3QgaXBfc2V0ICpzZXQsIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTM5NS1cdGlmIChvcHQtXHUwMDNlY21kZmxhZ3MgXHUwMDI2IElQU0VUX0ZMQUdfUEhZU0RFVikge1xubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jOjM5NjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zOTctXHRcdGNvbnN0IGNoYXIgKmVpZmFjZSA9IFNSQ0RJUiA/IGdldF9waHlzaW5kZXZfbmFtZShza2IsIHh0X25ldChwYXIpKSA6XG4tLVxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmM9MTEzPW5mX2xvZ19kdW1wX3BhY2tldF9jb21tb24oc3RydWN0IG5mX2xvZ19idWYgKm0sIHU4IHBmLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jLTEyNi1cdFx0XHRvdXQgPyBvdXQtXHUwMDNlbmFtZSA6IFwmIzM0O1wmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2xvZ19zeXNsb2cuYzoxMjc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mX2xvZ19zeXNsb2cuYy0xMjgtXHRwaHlzaW5kZXYgPSBuZl9icmlkZ2VfZ2V0X3BoeXNpbmRldihza2IsIG5ldCk7XG4tLVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jPTU5PXN0YXRpYyB2b2lkIG5mX3F1ZXVlX2VudHJ5X3JlbGVhc2VfcmVmcyhzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy02OS1cbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYzo3MDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy03MS1cdGRldl9wdXQoZW50cnktXHUwMDNlYnJpZGdlX2Rldik7XG4tLVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jPTg0PXN0YXRpYyB2b2lkIF9fbmZfcXVldWVfZW50cnlfaW5pdF9waHlzZGV2cyhzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jLTg1LXtcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYzo4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy04Ny1cdGNvbnN0IHN0cnVjdCBza19idWZmICpza2IgPSBlbnRyeS1cdTAwM2Vza2I7XG4tLVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jPTExMj1ib29sIG5mX3F1ZXVlX2VudHJ5X2dldF9yZWZzKHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXG4tLVxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jLTEyMi1cbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYzoxMjM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtMTI0LVx0ZGV2X2hvbGQoZW50cnktXHUwMDNlYnJpZGdlX2Rldik7XG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNDEtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYzo0MjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQzLSNpbmNsdWRlIFwmIzM0Oy4uL2JyaWRnZS9icl9wcml2YXRlLmhcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYz00MjI9c3RhdGljIGludCBuZnVsbmxfcHV0X2JyaWRnZShzdHJ1Y3QgbmZ1bG5sX2luc3RhbmNlICppbnN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQ1My1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjQ1NDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQ1NS1zdGF0aWMgaW50IG5mbG9nX3B1dF9tYXN0ZXJfaWZpbmRleChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsIGludCBhdHRyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jPTQ3ND1fX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZm5sX2xvZ19uZXQgKmxvZyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01MDktXHRpZiAoaW5kZXYpIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjUxMDojaWYgIUlTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01MTEtXHRcdGlmIChubGFfcHV0X2JlMzIoaW5zdC1cdTAwM2Vza2IsIE5GVUxBX0lGSU5ERVhfSU5ERVYsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNTQ1LVx0aWYgKG91dGRldikge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NTQ2OiNpZiAhSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTU0Ny1cdFx0aWYgKG5sYV9wdXRfYmUzMihpbnN0LVx1MDAzZXNrYiwgTkZVTEFfSUZJTkRFWF9PVVRERVYsXG4tLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM9NzE4PW5mdWxubF9sb2dfcGFja2V0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy03NTYtXHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZih1X2ludDMyX3QpKVx0LyogaWZpbmRleCAqL1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NzU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNzU4LVx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodV9pbnQzMl90KSlcdC8qIGlmaW5kZXggKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTQ5LVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo1MDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNTEtI2luY2x1ZGUgXCYjMzQ7Li4vYnJpZGdlL2JyX3ByaXZhdGUuaFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NDY3PXN0YXRpYyBib29sIG5mX2JyaWRnZV9wb3J0c192YWxpZChjb25zdCBzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5KVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy00Njgte1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo0Njk6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTQ3MC1cdGlmICghbmZfYnJpZGdlX3BvcnRfdmFsaWQoZW50cnktXHUwMDNlcGh5c2luKSB8fFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9Njc1PXN0YXRpYyBpbnQgbmZfcXVldWVfY2hlY2tzdW1faGVscChzdHJ1Y3Qgc2tfYnVmZiAqZW50c2tiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNjgyLVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo2ODM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTY4NC1zdGF0aWMgaW50IG5mcW5sX3B1dF9tYXN0ZXJfaWZpbmRleChzdHJ1Y3Qgc2tfYnVmZiAqbmxza2IsIGludCBhdHRyLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzEyPW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTczNy1cdFx0JiM0MzsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHVfaW50MzJfdCkpXHQvKiBpZmluZGV4ICovXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjczODojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzM5LVx0XHQmIzQzOyBubGFfdG90YWxfc2l6ZShzaXplb2YodV9pbnQzMl90KSlcdC8qIGlmaW5kZXggKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgzMi1cdGlmIChpbmRldikge1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MzM6I2lmICFJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MzQtXHRcdGlmIChubGFfcHV0X2JlMzIoc2tiLCBORlFBX0lGSU5ERVhfSU5ERVYsIGh0b25sKGluZGV2LVx1MDAzZWlmaW5kZXgpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTg2My1cdGlmIChvdXRkZXYpIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6ODY0OiNpZiAhSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODY1LVx0XHRpZiAobmxhX3B1dF9iZTMyKHNrYiwgTkZRQV9JRklOREVYX09VVERFViwgaHRvbmwob3V0ZGV2LVx1MDAzZWlmaW5kZXgpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTEwNDg9bmZfcXVldWVfZW50cnlfZHVwKHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwNjEtXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjEwNjI6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwNjMtLyogV2hlbiBjYWxsZWQgZnJvbSBicmlkZ2UgbmV0ZmlsdGVyLCBza2ItXHUwMDNlZGF0YSBtdXN0IHBvaW50IHRvIE1BQyBoZWFkZXJcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE0OTk9ZGV2X2NtcChzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBsb25nIGlmaW5kZXgpXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTE1MDAte1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzoxNTAxOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNTAyLVx0aW50IHBoeXNpbmlmLCBwaHlzb3V0aWY7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWc9Nz1DT05GSUdfQlJJREdFX0VCVF9UX0ZJTFRFUj1tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvbmV0ZmlsdGVyL2NvbmZpZzo4OkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9uZXRmaWx0ZXIvY29uZmlnLTktQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MDMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGJyX25ldGZpbHRlcl9ob29rcy5jYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBjaGFuZ2VzIGFyZSBpbXBhY3RpbmcgdGhlIGJyaWRnZSBuZXRmaWx0ZXIgaG9va3MuIFRpbWUgdG8gY3JhY2sgb3BlbiBgbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCBob3cgdGhlIGhvb2tzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuIEnigJltIHRoaW5raW5nIEkgd2lsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgbmV0ZmlsdGVyIGZyYW1ld29yayB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbnRleHQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBiZS4gTGV04oCZcyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODU6XHRcdFx0LnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVCxcbjEwODY6XHRcdH0sXG4xMDg3Olx0fTtcbjEwODg6XHRcbjEwODk6XHRzdGF0aWMgaW50IGJybmZfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxuMTA5MDpcdFx0XHRcdCAgICAgdm9pZCAqcHRyKVxuMTA5MTpcdHtcbjEwOTI6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcbjEwOTM6XHRcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQ7XG4xMDk0Olx0XHRzdHJ1Y3QgbmV0ICpuZXQ7XG4xMDk1Olx0XHRpbnQgcmV0O1xuMTA5NjpcdFxuMTA5NzpcdFx0aWYgKGV2ZW50ICE9IE5FVERFVl9SRUdJU1RFUiB8fCAhbmV0aWZfaXNfYnJpZGdlX21hc3RlcihkZXYpKVxuMTA5ODpcdFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4xMDk5Olx0XG4xMTAwOlx0XHRBU1NFUlRfUlROTCgpO1xuMTEwMTpcdFxuMTEwMjpcdFx0bmV0ID0gZGV2X25ldChkZXYpO1xuMTEwMzpcdFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcbjExMDQ6XHRcdGlmIChicm5ldC1cdTAwM2VlbmFibGVkIHx8IGJybmV0LVx1MDAzZWluX3VzZXJucylcbjExMDU6XHRcdFx0cmV0dXJuIE5PVElGWV9PSztcbjExMDY6XHRcbjExMDc6XHRcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGJyX25mX29wcywgQVJSQVlfU0laRShicl9uZl9vcHMpKTtcbjExMDg6XHRcdGlmIChyZXQpXG4xMTA5Olx0XHRcdHJldHVybiBOT1RJRllfQkFEO1xuMTExMDpcdFxuMTExMTpcdFx0YnJuZXQtXHUwMDNlZW5hYmxlZCA9IHRydWU7XG4xMTEyOlx0XHRyZXR1cm4gTk9USUZZX09LO1xuMTExMzpcdH1cbjExMTQ6XHRcbjExMTU6XHRzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGJybmZfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHtcbjExMTY6XHRcdC5ub3RpZmllcl9jYWxsID0gYnJuZl9kZXZpY2VfZXZlbnQsXG4xMTE3Olx0fTtcbjExMTg6XHRcbjExMTk6XHQvKiByZWN1cnNpdmVseSBpbnZva2VzIG5mX2hvb2tfc2xvdyAoYWdhaW4pLCBza2lwcGluZyBhbHJlYWR5LWNhbGxlZFxuMTEyMDpcdCAqIGhvb2tzIChcdTAwM2MgTkZfQlJfUFJJX0JSTkYpLlxuMTEyMTpcdCAqXG4xMTIyOlx0ICogQ2FsbGVkIHdpdGggcmN1IHJlYWQgbG9jayBoZWxkLlxuMTEyMzpcdCAqL1xuMTEyNDpcdGludCBicl9uZl9ob29rX3RocmVzaCh1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IG5ldCAqbmV0LFxuMTEyNTpcdFx0XHQgICAgICBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4xMTI2Olx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICppbmRldixcbjExMjc6XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm91dGRldixcbjExMjg6XHRcdFx0ICAgICAgaW50ICgqb2tmbikoc3RydWN0IG5ldCAqLCBzdHJ1Y3Qgc29jayAqLFxuMTEyOTpcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqKSlcbjExMzA6XHR7XG4xMTMxOlx0XHRjb25zdCBzdHJ1Y3QgbmZfaG9va19lbnRyaWVzICplO1xuMTEzMjpcdFx0c3RydWN0IG5mX2hvb2tfc3RhdGUgc3RhdGU7XG4xMTMzOlx0XHRzdHJ1Y3QgbmZfaG9va19vcHMgKipvcHM7XG4xMTM0Olx0XHR1bnNpZ25lZCBpbnQgaTtcbjExMzU6XHRcdGludCByZXQ7XG4xMTM2Olx0XG4xMTM3Olx0XHRlID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cdTAwM2VuZi5ob29rc19icmlkZ2VbaG9va10pO1xuMTEzODpcdFx0aWYgKCFlKVxuMTEzOTpcdFx0XHRyZXR1cm4gb2tmbihuZXQsIHNrLCBza2IpO1xuMTE0MDpcdFxuMTE0MTpcdFx0b3BzID0gbmZfaG9va19lbnRyaWVzX2dldF9ob29rX29wcyhlKTtcbjExNDI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGUtXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbjExNDM6XHRcdFx0LyogVGhlc2UgaG9va3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkICovXG4xMTQ0Olx0XHRcdGlmIChvcHNbaV0tXHUwMDNlcHJpb3JpdHkgXHUwMDNjIE5GX0JSX1BSSV9CUk5GKVxuMTE0NTpcdFx0XHRcdGNvbnRpbnVlO1xuMTE0NjpcdFxuMTE0NzpcdFx0XHQvKiBUaGVzZSBob29rcyBoYXZlIG5vdCBiZWVuIGNhbGxlZCB5ZXQsIHJ1biB0aGVtLiAqL1xuMTE0ODpcdFx0XHRpZiAob3BzW2ldLVx1MDAzZXByaW9yaXR5IFx1MDAzZSBORl9CUl9QUklfQlJORilcbjExNDk6XHRcdFx0XHRicmVhaztcbjExNTA6XHRcbjExNTE6XHRcdFx0LyogdGFrZSBhIGNsb3NlciBsb29rIGF0IE5GX0JSX1BSSV9CUk5GLiAqL1xuMTE1MjpcdFx0XHRpZiAob3BzW2ldLVx1MDAzZWhvb2sgPT0gYnJfbmZfcHJlX3JvdXRpbmcpIHtcbjExNTM6XHRcdFx0XHQvKiBUaGlzIGhvb2sgZGl2ZXJ0ZWQgdGhlIHNrYiB0byB0aGlzIGZ1bmN0aW9uLFxuMTE1NDpcdFx0XHRcdCAqIGhvb2tzIGFmdGVyIHRoaXMgaGF2ZSBub3QgYmVlbiBydW4geWV0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTgxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJJiMzOTtkIGJlIHRoaW5raW5nIGFzIEkgZXhhbWluZSB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgYW5kIGFzc3VtaW5nIG15IGV4cGVydGlzZToKCioqRGl2aW5nIERlZXAgaW50byBgYnJfbmV0ZmlsdGVyX2hvb2tzLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIGJyaWRnaW5nIG5ldGZpbHRlciBob29rcy4gSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgMTIyMCB0byAxMzQwIG9mIGBicl9uZXRmaWx0ZXJfaG9va3MuY2AuIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiBkZWFscyB3aXRoIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyB0aGUgYnJpZGdlIGludGVyYWN0cyB3aXRoIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLCBwcm9iYWJseSBmaWx0ZXJpbmcgb3IgbWFuaXB1bGF0aW5nIHBhY2tldHMgYXMgdGhleSB0cmF2ZXJzZSB0aGUgYnJpZGdlLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFudGljaXBhdGluZyB0aGlzIGFyZWEgY29udGFpbnMgdGhlIGNydWNpYWwgcmVnaXN0cmF0aW9uIG9yIHVucmVnaXN0cmF0aW9uIGxvZ2ljIGZvciBzcGVjaWZpYyBuZXRmaWx0ZXIgaG9va3MgdXNlZCB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbnRleHQuIFBlcmhhcHMgaXQgZGVmaW5lcyB0aGUgcHJpb3JpdGllcyBvZiB0aG9zZSBob29rcyByZWxhdGl2ZSB0byBvdGhlciBuZXRmaWx0ZXIgY29tcG9uZW50czsgb3IgdGhlIGFjdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRob3NlIG5ldGZpbHRlciBydWxlcy4gSSYjMzk7bSBrZWVuIHRvIHNlZSBpZiBpdCBtYWtlcyB1c2Ugb2Ygc3BlY2lmaWMgbmV0ZmlsdGVyIG1vZHVsZXMgb3IgZXh0ZW5zaW9ucyB0aGF0IGFyZSBicmlkZ2Utc3BlY2lmaWMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHdoZXJlIHBhY2tldCBtYW5nbGluZywgTkFULCBvciBjb25uZWN0aW9uIHRyYWNraW5nIGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIGJyaWRnZSYjMzk7cyBvcGVyYXRpb24g4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBrZXkgYXJlYSBmb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgc3RhdGVtZW50cy4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgcGFydHMgb2YgdGhpcyBzZWN0aW9uIGhhbmRsZSBkaWZmZXJlbnQgYnJpZGdlIG1vZGVzIG9yIGNvbmZpZ3VyYXRpb25zIChlLmcuLCBzcGFubmluZy10cmVlLCBtdWx0aWNhc3Qgc25vb3BpbmcsIG9yIFZMQU4gaGFuZGxpbmcpLiBJJiMzOTtsbCB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXRmaWx0ZXIgaG9va3MgYXJlIGFkYXB0ZWQgYmFzZWQgb24gdGhlIGJyaWRnZSYjMzk7cyBjdXJyZW50IG9wZXJhdGlvbmFsIHN0YXRlLiBJJiMzOTtsbCBhbHNvIGxvb2sgZm9yIGhvdyB0aGVzZSBob29rcyByZWxhdGUgdG8gaW5ncmVzcyBhbmQgZWdyZXNzIHBhY2tldCBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgYnJpZGdlLiBEb2VzIGl0IGZvbGxvdyBhIGNsZWFyLCB3ZWxsLWRlZmluZWQgcGF0aCwgb3IgaXMgaXQgYSBiaXQgbWVzc3k/CgpGaW5hbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gbmV0ZmlsdGVyIGZ1bmN0aW9ucyBsaWtlIGBuZl9ob29rX29wc2AsIGBuZl9yZWdpc3Rlcl9ob29rYCwgb3IgYG5mX3VucmVnaXN0ZXJfaG9va2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZWlyIGFyZ3VtZW50cyBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgYnJpZGdlIGFuZCBuZXRmaWx0ZXIuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGF0YSBzdHJ1Y3R1cmVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgcGFja2V0IGluZm9ybWF0aW9uIGlzIGV4cG9zZWQgKG9yIGhpZGRlbikgdG8gdGhlIGhvb2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMjA6XHRcdFx0LnByb2NfaGFuZGxlclx0PSBicm5mX3N5c2N0bF9jYWxsX3RhYmxlcyxcbjEyMjE6XHRcdH0sXG4xMjIyOlx0fTtcbjEyMjM6XHRcbjEyMjQ6XHRzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9kZWZhdWx0KHN0cnVjdCBicm5mX25ldCAqYnJuZilcbjEyMjU6XHR7XG4xMjI2Olx0XHRicm5mLVx1MDAzZWNhbGxfaXB0YWJsZXMgPSAxO1xuMTIyNzpcdFx0YnJuZi1cdTAwM2VjYWxsX2lwNnRhYmxlcyA9IDE7XG4xMjI4Olx0XHRicm5mLVx1MDAzZWNhbGxfYXJwdGFibGVzID0gMTtcbjEyMjk6XHRcdGJybmYtXHUwMDNlZmlsdGVyX3ZsYW5fdGFnZ2VkID0gMDtcbjEyMzA6XHRcdGJybmYtXHUwMDNlZmlsdGVyX3BwcG9lX3RhZ2dlZCA9IDA7XG4xMjMxOlx0XHRicm5mLVx1MDAzZXBhc3Nfdmxhbl9pbmRldiA9IDA7XG4xMjMyOlx0fVxuMTIzMzpcdCNlbmRpZlxuMTIzNDpcdFxuMTIzNTpcdHN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4xMjM2Olx0e1xuMTIzNzpcdCNpZmRlZiBDT05GSUdfU1lTQ1RMXG4xMjM4Olx0XHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSA9IGJybmZfdGFibGU7XG4xMjM5Olx0XHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xuMTI0MDpcdFxuMTI0MTpcdFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpIHtcbjEyNDI6XHRcdFx0dGFibGUgPSBrbWVtZHVwKHRhYmxlLCBzaXplb2YoYnJuZl90YWJsZSksIEdGUF9LRVJORUwpO1xuMTI0MzpcdFx0XHRpZiAoIXRhYmxlKVxuMTI0NDpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTI0NTpcdFx0fVxuMTI0NjpcdFxuMTI0NzpcdFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcbjEyNDg6XHRcdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZicm5ldC1cdTAwM2VjYWxsX2FycHRhYmxlcztcbjEyNDk6XHRcdHRhYmxlWzFdLmRhdGEgPSBcdTAwMjZicm5ldC1cdTAwM2VjYWxsX2lwdGFibGVzO1xuMTI1MDpcdFx0dGFibGVbMl0uZGF0YSA9IFx1MDAyNmJybmV0LVx1MDAzZWNhbGxfaXA2dGFibGVzO1xuMTI1MTpcdFx0dGFibGVbM10uZGF0YSA9IFx1MDAyNmJybmV0LVx1MDAzZWZpbHRlcl92bGFuX3RhZ2dlZDtcbjEyNTI6XHRcdHRhYmxlWzRdLmRhdGEgPSBcdTAwMjZicm5ldC1cdTAwM2VmaWx0ZXJfcHBwb2VfdGFnZ2VkO1xuMTI1MzpcdFx0dGFibGVbNV0uZGF0YSA9IFx1MDAyNmJybmV0LVx1MDAzZXBhc3Nfdmxhbl9pbmRldjtcbjEyNTQ6XHRcbjEyNTU6XHRcdGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChicm5ldCk7XG4xMjU2Olx0XG4xMjU3Olx0XHRicm5ldC1cdTAwM2VjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFwmIzM0O25ldC9icmlkZ2VcJiMzNDssIHRhYmxlLFxuMTI1ODpcdFx0XHRcdFx0XHRcdEFSUkFZX1NJWkUoYnJuZl90YWJsZSkpO1xuMTI1OTpcdFx0aWYgKCFicm5ldC1cdTAwM2VjdGxfaGRyKSB7XG4xMjYwOlx0XHRcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKVxuMTI2MTpcdFx0XHRcdGtmcmVlKHRhYmxlKTtcbjEyNjI6XHRcbjEyNjM6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xMjY0Olx0XHR9XG4xMjY1Olx0I2VuZGlmXG4xMjY2Olx0XHRyZXR1cm4gMDtcbjEyNjc6XHR9XG4xMjY4Olx0XG4xMjY5Olx0c3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsXG4xMjcwOlx0XHRcdFx0XHRcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxuMTI3MTpcdHtcbjEyNzI6XHQjaWZkZWYgQ09ORklHX1NZU0NUTFxuMTI3MzpcdFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWRlciA9IGJybmV0LVx1MDAzZWN0bF9oZHI7XG4xMjc0Olx0XHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbjEyNzU6XHRcbjEyNzY6XHRcdGlmICghaGVhZGVyKVxuMTI3NzpcdFx0XHRyZXR1cm47XG4xMjc4Olx0XG4xMjc5Olx0XHR0YWJsZSA9IGhlYWRlci1cdTAwM2VjdGxfdGFibGVfYXJnO1xuMTI4MDpcdFx0dW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKGhlYWRlcik7XG4xMjgxOlx0XHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSlcbjEyODI6XHRcdFx0a2ZyZWUodGFibGUpO1xuMTI4MzpcdCNlbmRpZlxuMTI4NDpcdH1cbjEyODU6XHRcbjEyODY6XHRzdGF0aWMgaW50IF9fbmV0X2luaXQgYnJuZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4xMjg3Olx0e1xuMTI4ODpcdFx0aWYgKG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucykge1xuMTI4OTpcdFx0XHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG4xMjkwOlx0XG4xMjkxOlx0XHRcdGJybmV0LVx1MDAzZWluX3VzZXJucyA9IHRydWU7XG4xMjkyOlx0XHRcdHByX3dhcm5fb25jZShcJiMzNDticl9uZXRmaWx0ZXIgbm8gbG9uZ2VyIHN1cHBvcnRlZCBpbiB1c2VyIG5hbWVzcGFjZXNcXG5cJiMzNDspO1xuMTI5MzpcdFx0XHRyZXR1cm4gMDtcbjEyOTQ6XHRcdH1cbjEyOTU6XHRcbjEyOTY6XHRcdHJldHVybiBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KG5ldCk7XG4xMjk3Olx0fVxuMTI5ODpcdFxuMTI5OTpcdHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYnJuZl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4xMzAwOlx0e1xuMTMwMTpcdFx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcbjEzMDI6XHRcbjEzMDM6XHRcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG4xMzA0Olx0XHRpZiAoYnJuZXQtXHUwMDNlZW5hYmxlZCkge1xuMTMwNTpcdFx0XHRuZl91bnJlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGJyX25mX29wcywgQVJSQVlfU0laRShicl9uZl9vcHMpKTtcbjEzMDY6XHRcdFx0YnJuZXQtXHUwMDNlZW5hYmxlZCA9IGZhbHNlO1xuMTMwNzpcdFx0fVxuMTMwODpcdFxuMTMwOTpcdFx0YnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChuZXQsIGJybmV0KTtcbjEzMTA6XHR9XG4xMzExOlx0XG4xMzEyOlx0c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBicm5mX25ldF9vcHMgX19yZWFkX21vc3RseSA9IHtcbjEzMTM6XHRcdC5pbml0ID0gYnJuZl9pbml0X25ldCxcbjEzMTQ6XHRcdC5leGl0ID0gYnJuZl9leGl0X25ldCxcbjEzMTU6XHRcdC5pZCAgID0gXHUwMDI2YnJuZl9uZXRfaWQsXG4xMzE2Olx0XHQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnJuZl9uZXQpLFxuMTMxNzpcdH07XG4xMzE4Olx0XG4xMzE5Olx0c3RhdGljIGludCBfX2luaXQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAxNAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDYxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aCBGdXp6aW5nIC0gQnJpZGdlIE5ldGZpbHRlciBpbiBVc2VyIE5hbWVzcGFjZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBjb21taXQgZGlzYWJsZXMgYnJpZGdlIG5ldGZpbHRlciB3aGVuIHdlJiMzOTtyZSBpbnNpZGUgYSBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAoYG5ldC0mZ3Q7dXNlcl9ucyAhPSAmYW1wO2luaXRfdXNlcl9uc2ApLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBrZXkgaXMgaG93IGl0JiMzOTtzIGhhbmRsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIGFuZCBkZXZpY2UgcmVnaXN0cmF0aW9uLiBXaGVuIGBicm5mX2luaXRfbmV0YCBpcyBjYWxsZWQgd2l0aGluIGEgdXNlciBuYW1lc3BhY2UsIGl0IHNldHMgYGJybmV0LSZndDtpbl91c2VybnMgPSB0cnVlYC4gIFRoZW4sIHdoZW4gYSBicmlkZ2UgaXMgcmVnaXN0ZXJlZCwgYGJybmZfZGV2aWNlX2V2ZW50YCBjaGVja3MgYGJybmV0LSZndDtlbmFibGVkIHx8IGJybmV0LSZndDtpbl91c2VybnNgLiBCZWNhdXNlIGBicm5mLSZndDtpbl91c2VybnNgIGlzIG5vdyB0cnVlLCBgbmZfcmVnaXN0ZXJfbmV0X2hvb2tzYCBpcyBuZXZlciBjYWxsZWQuIEFsc28sIGJlY2F1c2UgYGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXRgIGlzIG5vdCBjYWxsZWQsIGBicm5ldC0mZ3Q7Y3RsX2hkcmAgcmVtYWlucyBOVUxMLiBTdWJzZXF1ZW50bHksIG9uIGV4aXQgdmlhIGBicm5mX2V4aXRfbmV0YCwgYGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXRgIGNoZWNrcyBmb3IgYSBOVUxMIGhlYWRlciBhbmQgcmV0dXJucy4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGZ1enphYmxlPyBUaW1lIHRvIGNoZWNrIHRoZSBydWxlcy4gVGhlIGd1aWRlbGluZXMgc2F5IG5vIGlmIGl0JiMzOTtzIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBkZWNvcmF0aW9uLCBjb25zdGFudHMsIG9yIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAgQWxzbywgY2VydGFpbiB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVycyBhcmUgZXhjbHVkZWQsIGFzIGFyZSBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzLiBCdXQgdGhpcyBsb29rcyBkaWZmZXJlbnQuCgpUaGlzICpkZWZpbml0ZWx5KiB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiBwZXJuZXQgaW5pdGlhbGl6YXRpb24sIGhvdyBkZXZpY2UgZXZlbnRzIGFyZSBoYW5kbGVkIGZvciBicmlkZ2UgbmV0ZmlsdGVyLCBzeXNjdGwgcmVnaXN0cmF0aW9uIGFuZCBleGl0LCBhbmQgdGhlIGRpc2FibGluZyBvZiBgYnJfbmV0ZmlsdGVyYCBpbiBub24taW5pdCB1c2VyIG5hbWVzcGFjZXMuIEl0JiMzOTtzIHBsYXlpbmcgd2l0aCBuZXR3b3JrIG5hbWVzcGFjZSBjcmVhdGlvbi9kZXN0cnVjdGlvbiBhbmQgYnJpZGdlIGNyZWF0aW9uIHdpdGhpbiB1c2VyIG5hbWVzcGFjZXMuIFRoaXMgaXMgKnRleHRib29rKiBzeXprYWxsZXIgbWF0ZXJpYWwuIENyZWF0aW5nIHVzZXIgbmFtZXNwYWNlcywgbmV0IG5hbWVzcGFjZXMgaW5zaWRlIHRob3NlLCBzZXR0aW5nIHVwIGJyaWRnZSBkZXZpY2VzLCByZWdpc3RlcmluZy91bnJlZ2lzdGVyaW5nIHN5c2N0bCwgYW5kIHRlYXJpbmcgZG93biB0aGUgbmFtZXNwYWNlc+KApiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBzeXprYWxsZXIgZXhjZWxzIGF0LCBhbmQgSSBjYW4gYmUgc3VyZSBpdCB3aWxsIGJlIHRlc3RpbmcgdGhpcyBjb2RlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBgQ09ORklHX0JSSURHRV9ORVRGSUxURVJgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGEgcXVpY2sgY2hlY2sgaW4gYG5ldC9LY29uZmlnYC4gWWVzLCB0aGlzIGlzIHdvcnRoIGZ1enppbmchCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCUklER0VfTkVURklMVEVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yMjA9Y29uZmlnIE5FVEZJTFRFUl9BRFZBTkNFRFxuLS1cbm5ldC9LY29uZmlnLTIzMC1cbm5ldC9LY29uZmlnOjIzMTpjb25maWcgQlJJREdFX05FVEZJTFRFUlxubmV0L0tjb25maWctMjMyLVx0dHJpc3RhdGUgXCYjMzQ7QnJpZGdlZCBJUC9BUlAgcGFja2V0cyBmaWx0ZXJpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMDMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBuZXQvS2NvbmZpZ2AgZm9yIERlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMgb2YgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmtpbmcgbW9kdWxlLiBUaGUgbW9zdCBkaXJlY3QgcGF0aCwgYXMgYWx3YXlzLCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbmF2aWdhdGluZyB0byB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBleGFtaW5pbmcgYXJvdW5kIGxpbmUgMjMxLCBhcyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHlvdSBmaW5kIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBicmFuY2hpbmcgbG9naWMgZm9yIGEgZmVhdHVyZS4gQnkgZXhhbWluaW5nIHRoZSBpZmRlZnMgYW5kIGRlcGVuZGVuY2llcyBkZWNsYXJlZCBhcm91bmQgdGhhdCBwb2ludCwgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBwcmV0dHkgY2xlYXIgcGljdHVyZSBvZiB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgY29uZmlndXJlZCB0byBnZXQgdGhpcyB0aGluZyB3b3JraW5nLCBhbmQgYWxzbyB3aGF0IG90aGVyIGZ1bmN0aW9uYWxpdGllcyBkZXBlbmQgb24gaXQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciBleHBsb3JhdGlvbiwgc2luY2UgdGhlc2UgdHlwZXMgb2YgZmlsZXMgdXN1YWxseSBoYXZlIGEgZ29vZCBvdmVydmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI1Olx0XHQgIElmIHlvdSBzYXkgWSBoZXJlIHlvdSBjYW4gc2VsZWN0IGJldHdlZW4gYWxsIHRoZSBuZXRmaWx0ZXIgbW9kdWxlcy5cbiAyMjY6XHRcdCAgSWYgeW91IHNheSBOIHRoZSBtb3JlIHVudXN1YWwgb25lcyB3aWxsIG5vdCBiZSBzaG93biBhbmQgdGhlXG4gMjI3Olx0XHQgIGJhc2ljIG9uZXMgbmVlZGVkIGJ5IG1vc3QgcGVvcGxlIHdpbGwgZGVmYXVsdCB0byAmIzM5O00mIzM5Oy5cbiAyMjg6XHRcbiAyMjk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAyMzA6XHRcbiAyMzE6XHRjb25maWcgQlJJREdFX05FVEZJTFRFUlxuIDIzMjpcdFx0dHJpc3RhdGUgXCYjMzQ7QnJpZGdlZCBJUC9BUlAgcGFja2V0cyBmaWx0ZXJpbmdcJiMzNDtcbiAyMzM6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gMjM0Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUiBcdTAwMjZcdTAwMjYgSU5FVFxuIDIzNTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAyMzY6XHRcdHNlbGVjdCBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxuIDIzNzpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gMjM4Olx0XHRoZWxwXG4gMjM5Olx0XHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgbGV0IGFycHRhYmxlcyByZXNwLiBpcHRhYmxlcyBzZWUgYnJpZGdlZFxuIDI0MDpcdFx0ICBBUlAgcmVzcC4gSVAgdHJhZmZpYy4gSWYgeW91IHdhbnQgYSBicmlkZ2luZyBmaXJld2FsbCwgeW91IHByb2JhYmx5XG4gMjQxOlx0XHQgIHdhbnQgdGhpcyBvcHRpb24gZW5hYmxlZC5cbiAyNDI6XHRcdCAgRW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGRvZXNuJiMzOTt0IGVuYWJsZSBvciBkaXNhYmxlXG4gMjQzOlx0XHQgIGVidGFibGVzLlxuIDI0NDpcdFxuIDI0NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI0NjpcdFxuIDI0NzpcdHNvdXJjZSBcJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbiAyNDg6XHRzb3VyY2UgXCYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbiAyNDk6XHRzb3VyY2UgXCYjMzQ7bmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcJiMzNDtcbiAyNTA6XHRzb3VyY2UgXCYjMzQ7bmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ1wmIzM0O1xuIDI1MTpcdFxuIDI1MjpcdGVuZGlmICMgaWYgTkVURklMVEVSXG4gMjUzOlx0XG4gMjU0Olx0c291cmNlIFwmIzM0O25ldC9zY3RwL0tjb25maWdcJiMzNDtcbiAyNTU6XHRzb3VyY2UgXCYjMzQ7bmV0L3Jkcy9LY29uZmlnXCYjMzQ7XG4gMjU2Olx0c291cmNlIFwmIzM0O25ldC90aXBjL0tjb25maWdcJiMzNDtcbiAyNTc6XHRzb3VyY2UgXCYjMzQ7bmV0L2F0bS9LY29uZmlnXCYjMzQ7XG4gMjU4Olx0c291cmNlIFwmIzM0O25ldC9sMnRwL0tjb25maWdcJiMzNDtcbiAyNTk6XHRzb3VyY2UgXCYjMzQ7bmV0LzgwMi9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTc0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLgoKKipJbnZlc3RpZ2F0aW5nIE5hbWVzcGFjZSBDb25maWd1cmF0aW9uIFJlbGV2YW5jZSoqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBmZWF0dXJlLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudCB0byBteSB0ZXN0aW5nLiBGaXJzdCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgYENPTkZJR19VU0VSX05TYCBhbmQgYENPTkZJR19ORVRfTlNgLiBNYWtlcyBzZW5zZTsgdGhvc2UgYXJlIHRoZSBuYW1lc3BhY2VzIEkmIzM5O20gbW9zdCBsaWtlbHkgdG8gcnVuIGludG8gaW4gdGhlIGNvbnRleHQgb2Ygd2hhdGV2ZXIgdGhpcyBmZWF0dXJlIGRvZXMuIEFyZSBgVVNFUl9OU2Agb3IgYE5FVF9OU2AgaW1wb3J0YW50IGZvciB0ZXN0aW5nPyBJIG5lZWQgdG8ga25vdyBpZiB0aGV5JiMzOTtyZSBldmVuIGZhY3RvcnMuIFRoZW4sIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJIHVuZGVyc3RhbmQgaG93IHRoaXMgYWxsIGZpdHMgdG9nZXRoZXIsIEkmIzM5O2xsIHRyYWNrIGRvd24gd2hlcmUgYFVTRVJfTlNgIGlzIGFjdHVhbGx5IGRlZmluZWQuIEkgd2FudCBhIGNvbXBsZXRlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0VSX05TJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE0Mzg9Y29uZmlnIElQQ19OU1xuLS1cbmluaXQvS2NvbmZpZy0xNDQ1LVxuaW5pdC9LY29uZmlnOjE0NDY6Y29uZmlnIFVTRVJfTlNcbmluaXQvS2NvbmZpZy0xNDQ3LVx0Ym9vbCBcJiMzNDtVc2VyIG5hbWVzcGFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI4OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcga2V5IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBDT05GSUdfQlJJREdFYCwgYENPTkZJR19CUklER0VfTkVURklMVEVSYCwgYENPTkZJR19VU0VSX05TYCwgYW5kIGBDT05GSUdfTkVUX05TYC4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGJyaWRnaW5nIGFuZCBjb250YWluZXJpemF0aW9uLCBzbyB0aGVpciBzdGF0dXMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IHNldHVwLiBOb3csIHRvIGdldCB0aGUgc3BlY2lmaWNzIG9uIGhvdyB0aGlzIG5ldHdvcmsgYnJpZGdpbmcgaXMgaW1wbGVtZW50ZWQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBuZXQvYnJpZGdlL01ha2VmaWxlYC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGxvd2Rvd24gb24gdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGRlcGVuZGVuY2llcyBmb3IgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciB0aGUgSUVFRSA4MDIuMWQgZXRoZXJuZXQgYnJpZGdpbmcgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19CUklER0UpICYjNDM7PSBicmlkZ2Uub1xuICAgNzpcdFxuICAgODpcdGJyaWRnZS15XHQ6PSBici5vIGJyX2RldmljZS5vIGJyX2ZkYi5vIGJyX2ZvcndhcmQubyBicl9pZi5vIGJyX2lucHV0Lm8gXFxcbiAgIDk6XHRcdFx0XHRicl9pb2N0bC5vIGJyX3N0cC5vIGJyX3N0cF9icGR1Lm8gXFxcbiAgMTA6XHRcdFx0XHRicl9zdHBfaWYubyBicl9zdHBfdGltZXIubyBicl9uZXRsaW5rLm8gXFxcbiAgMTE6XHRcdFx0XHRicl9uZXRsaW5rX3R1bm5lbC5vIGJyX2FycF9uZF9wcm94eS5vXG4gIDEyOlx0XG4gIDEzOlx0YnJpZGdlLSQoQ09ORklHX1NZU0ZTKSAmIzQzOz0gYnJfc3lzZnNfaWYubyBicl9zeXNmc19ici5vXG4gIDE0Olx0XG4gIDE1Olx0YnJpZGdlLSQoc3Vic3QgbSx5LCQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpKSAmIzQzOz0gYnJfbmZfY29yZS5vXG4gIDE2Olx0XG4gIDE3Olx0YnJfbmV0ZmlsdGVyLXkgOj0gYnJfbmV0ZmlsdGVyX2hvb2tzLm9cbiAgMTg6XHRicl9uZXRmaWx0ZXItJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICYjNDM7PSBicl9uZXRmaWx0ZXJfaXB2Ni5vXG4gIDE5Olx0b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICYjNDM7PSBicl9uZXRmaWx0ZXIub1xuICAyMDpcdFxuICAyMTpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgJiM0Mzs9IGJyX211bHRpY2FzdC5vIGJyX21kYi5vIGJyX211bHRpY2FzdF9laHQub1xuICAyMjpcdFxuICAyMzpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICYjNDM7PSBicl92bGFuLm8gYnJfdmxhbl90dW5uZWwubyBicl92bGFuX29wdGlvbnMubyBicl9tc3Qub1xuICAyNDpcdFxuICAyNTpcdGJyaWRnZS0kKENPTkZJR19ORVRfU1dJVENIREVWKSAmIzQzOz0gYnJfc3dpdGNoZGV2Lm9cbiAgMjY6XHRcbiAgMjc6XHRvYmotJChDT05GSUdfTkVURklMVEVSKSAmIzQzOz0gbmV0ZmlsdGVyL1xuICAyODpcdFxuICAyOTpcdGJyaWRnZS0kKENPTkZJR19CUklER0VfTVJQKVx0JiM0Mzs9IGJyX21ycF9zd2l0Y2hkZXYubyBicl9tcnAubyBicl9tcnBfbmV0bGluay5vXG4gIDMwOlx0XG4gIDMxOlx0YnJpZGdlLSQoQ09ORklHX0JSSURHRV9DRk0pXHQmIzQzOz0gYnJfY2ZtLm8gYnJfY2ZtX25ldGxpbmsub1xuICAzMjpcdFxuICAzMzpcdGlmZGVmIENPTkZJR19HQ09WX1BST0ZJTEVfTkVURklMVEVSXG4gIDM0Olx0R0NPVl9QUk9GSUxFX2JyX25mX2NvcmUubyA6PSB5XG4gIDM1Olx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9ob29rcy5vIDo9IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNTYKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQnJpZGdlIE5ldGZpbHRlciBIb29rcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgZm9jdXMgaXMgdGhlIGBuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGltcGxlbWVudGVkIGluIHRoZXJlLCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gaXQuIEkgY291bGQgdXNlIGBncmVwYCB0byBwdWxsIHRoZW0gb3V0LCB0aGF0JiMzOTtzIGdlbmVyYWxseSBhIHByZXR0eSBmYXN0IGFwcHJvYWNoLCBvciBJIGNhbiBqdXN0IHNjYW4gdGhlIGZpbGUgZGlyZWN0bHkuIEVpdGhlciB3YXksIEkgbmVlZCBhIHJhcGlkIG92ZXJ2aWV3IG9mIHRoZSBmdW5jdGlvbiBzZXQgdG8gdW5kZXJzdGFuZCB0aGUgbmV0ZmlsdGVyIGhvb2tzIHJlbGF0ZWQgdG8gdGhlIGJyaWRnaW5nIHN1YnN5c3RlbS4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGdyYXNwIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgaG93IHBhY2tldHMgYXJlIHByb2Nlc3NlZCBpbiB0aGF0IHBhcnQgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVowLTlfXS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTU1PXN0cnVjdCBicm5mX25ldCB7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04Mi1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6ODM6c3RhdGljIGlubGluZSBfX2JlMTYgdmxhbl9wcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04NC17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05Mi1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6OTM6c3RhdGljIGlubGluZSBib29sIGlzX3ZsYW5faXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NC17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05OS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTAwOnN0YXRpYyBpbmxpbmUgYm9vbCBpc192bGFuX2lwdjYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAxLVx0XHRcdFx0Y29uc3Qgc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTA4LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDk6c3RhdGljIGlubGluZSBib29sIGlzX3ZsYW5fYXJwKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTEwLXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExNS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTE2OnN0YXRpYyBpbmxpbmUgX19iZTE2IHBwcG9lX3Byb3RvKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExNy17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjEtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyMjpzdGF0aWMgaW5saW5lIGJvb2wgaXNfcHBwb2VfaXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjMte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI5LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzA6c3RhdGljIGlubGluZSBib29sIGlzX3BwcG9lX2lwdjYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMxLVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTE0Mz1zdHJ1Y3QgYnJuZl9mcmFnX2RhdGEge1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTUxLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNTI6c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBicm5mX2ZyYWdfZGF0YSwgYnJuZl9mcmFnX2RhdGFfc3RvcmFnZSkgPSB7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE1My1cdC5iaF9sb2NrID0gSU5JVF9MT0NBTF9MT0NLKGJoX2xvY2spLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTU1LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNTY6c3RhdGljIHZvaWQgbmZfYnJpZGdlX2luZm9fZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xNTcte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTYwLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNjE6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqYnJpZGdlX3BhcmVudChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xNjIte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTY4LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNjk6c3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZV91bnNoYXJlKHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE3MC17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xNzMtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjE3NDp1bnNpZ25lZCBpbnQgbmZfYnJpZGdlX2VuY2FwX2hlYWRlcl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTc1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE4NS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTg2OnN0YXRpYyBpbmxpbmUgdm9pZCBuZl9icmlkZ2VfcHVsbF9lbmNhcF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTg3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE5My1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTk0OnN0YXRpYyBpbmxpbmUgdm9pZCBuZl9icmlkZ2VfcHVsbF9lbmNhcF9oZWFkZXJfcmNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTk1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTIwNi1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MjA3OnN0YXRpYyBpbnQgYnJfdmFsaWRhdGVfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTIwOC17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNTUtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjI1Njp2b2lkIG5mX2JyaWRnZV91cGRhdGVfcHJvdG9jb2woc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMjU3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTI3Ni0gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Mjc3OmludCBicl9uZl9wcmVfcm91dGluZ19maW5pc2hfYnJpZGdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNzgte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MzMxPXN0YXRpYyBpbmxpbmUgYm9vbFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzozMzI6YnJfbmZfaXB2NF9kYWRkcl93YXNfY2hhbmdlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zMzMtXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfYnJpZGdlX2luZm8gKm5mX2JyaWRnZSlcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM3Ni0gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Mzc3OnN0YXRpYyBpbnQgYnJfbmZfcHJlX3JvdXRpbmdfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0zNzgte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDM1LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0MzY6c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicm5mX2dldF9sb2dpY2FsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00MzctXHRcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDU0LS8qIFNvbWUgY29tbW9uIGNvZGUgZm9yIElQdjQvSVB2NiAqL1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0NTU6c3RydWN0IG5ldF9kZXZpY2UgKnNldHVwX3ByZV9yb3V0aW5nKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDU2LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ4My0gKiBhZGRyZXNzIHRvIGJlIGFibGUgdG8gZGV0ZWN0IEROQVQgYWZ0ZXJ3YXJkcy4gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NDg0OnN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcHJlX3JvdXRpbmcodm9pZCAqcHJpdixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDg1LVx0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTU4NS0gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NTg2OnN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfbG9jYWxfaW4odm9pZCAqcHJpdixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTg3LVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTYzOS0vKiBQRl9CUklER0UvRk9SV0FSRCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo2NDA6c3RhdGljIGludCBicl9uZl9mb3J3YXJkX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNjQxLXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTY3My1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Njc0OnN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfZm9yd2FyZF9pcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02NzUtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTcyOC1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzI5OnN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfZm9yd2FyZF9hcnAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzMwLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzY5LSAqL1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo3NzA6c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9mb3J3YXJkKHZvaWQgKnByaXYsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTc3MS1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTc4NS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6Nzg2OnN0YXRpYyBpbnQgYnJfbmZfcHVzaF9mcmFnX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTc4Ny17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz04MDk9c3RhdGljIGludFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo4MTA6YnJfbmZfaXBfZnJhZ21lbnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTgxMS1cdFx0ICBpbnQgKCpvdXRwdXQpKHN0cnVjdCBuZXQgKiwgc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKikpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04MjYtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjgyNzpzdGF0aWMgdW5zaWduZWQgaW50IG5mX2JyaWRnZV9tdHVfcmVkdWN0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTgyOC17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04MzUtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjgzNjpzdGF0aWMgaW50IGJyX25mX2Rldl9xdWV1ZV94bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04Mzcte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtOTI1LS8qIFBGX0JSSURHRS9QT1NUX1JPVVRJTkcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjkyNjpzdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX3Bvc3Rfcm91dGluZyh2b2lkICpwcml2LFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05MjctXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk3NC0gKiBmb3IgdGhlIHNlY29uZCB0aW1lLiAqL1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo5NzU6c3RhdGljIHVuc2lnbmVkIGludCBpcF9zYWJvdGFnZV9pbih2b2lkICpwcml2LFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NzYtXHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAwNS0gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTAwNjpzdGF0aWMgdm9pZCBicl9uZl9wcmVfcm91dGluZ19maW5pc2hfYnJpZGdlX3Nsb3coc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAwNy17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDMwLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDMxOnN0YXRpYyBpbnQgYnJfbmZfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAzMi17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMDQ4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZfaG9va19vcHMgYnJfbmZfb3BzW10gPSB7XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDg4LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDg5OnN0YXRpYyBpbnQgYnJuZl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsIHVuc2lnbmVkIGxvbmcgZXZlbnQsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwOTAtXHRcdFx0ICAgICB2b2lkICpwdHIpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMTE1PXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYnJuZl9ub3RpZmllciBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTEyMy0gKi9cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTEyNDppbnQgYnJfbmZfaG9va190aHJlc2godW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTEyNS1cdFx0ICAgICAgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTE3Mj1zdGF0aWNcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTE3MzppbnQgYnJuZl9zeXNjdGxfY2FsbF90YWJsZXMoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExNzQtXHRcdFx0ICAgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMTg1PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGJybmZfdGFibGVbXSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMjMtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyMjQ6c3RhdGljIGlubGluZSB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChzdHJ1Y3QgYnJuZl9uZXQgKmJybmYpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMjUte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTIzNC1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTIzNTpzdGF0aWMgaW50IGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjM2LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyNjgtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyNjk6c3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyNzAtXHRcdFx0XHRcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI4NS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTI4NjpzdGF0aWMgaW50IF9fbmV0X2luaXQgYnJuZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyODcte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI5OC1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTI5OTpzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJybmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzAwLXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEzMTI9c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBicm5mX25ldF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMTgtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMTk6c3RhdGljIGludCBfX2luaXQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZClcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMyMC17XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzM3LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzM4OnN0YXRpYyB2b2lkIF9fZXhpdCBicl9uZXRmaWx0ZXJfZmluaSh2b2lkKVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzM5LXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzNDQtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzNDU6bW9kdWxlX2luaXQoYnJfbmV0ZmlsdGVyX2luaXQpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzQ2Om1vZHVsZV9leGl0KGJyX25ldGZpbHRlcl9maW5pKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTM0Ny1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTM0ODpNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzQ5Ok1PRFVMRV9BVVRIT1IoXCYjMzQ7TGVubmVydCBCdXl0ZW5oZWsgXHUwMDNjYnV5dGVuaEBnbnUub3JnXHUwMDNlXCYjMzQ7KTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTM1MDpNT0RVTEVfQVVUSE9SKFwmIzM0O0JhcnQgRGUgU2NodXltZXIgXHUwMDNjYmRzY2h1eW1AcGFuZG9yYS5iZVx1MDAzZVwmIzM0Oyk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzNTE6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0xpbnV4IGV0aGVybmV0IG5ldGZpbHRlciBmaXJld2FsbCBicmlkZ2VcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYxOQoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiA2NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBicl9uZXRmaWx0ZXJgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBrZXJuZWwgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiAgSSYjMzk7dmUgYWxyZWFkeSBwaWNrZWQgb3V0IGBicm5mX2RldmljZV9ldmVudGAsIGBicm5mX2luaXRfbmV0YCwgYW5kIGBicm5mX2V4aXRfbmV0YCBhcyBjcml0aWNhbCwgYWxvbmcgd2l0aCBgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldGAgYW5kIGBicl9uZXRmaWx0ZXJfc3lzY3RsX2V4aXRfbmV0YCBhbmQgYGJyX25mX2hvb2tfdGhyZXNoYCAodGhvdWdoIHRoYXQgbGFzdCBvbmUgbWlnaHQgYmUgbW9yZSBvZiBhIHRocmVzaG9sZCB2YWx1ZSwgSSYjMzk7bGwga2VlcCBpdCBvbiB0aGUgcmFkYXIgZm9yIG5vdykuIFRoZXNlIGFwcGVhciB0byBiZSB0aGUgZW50cnkgcG9pbnRzIHJlbGF0ZWQgdG8gdGhlIGNoYW5nZXMgaW4gdGhlIGBicl9uZXRmaWx0ZXJgIG1vZHVsZS4KCk5leHQsIEkgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBgQ09ORklHX2Agb3B0aW9ucy4gSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBoZWF2aWx5IGNvbmRpdGlvbmFsLiAgSSYjMzk7dmUgY3Jvc3MtcmVmZXJlbmNlZCB3aXRoIHRoZSBLY29uZmlnIGZpbGVzLCBhbmQgaXQgbG9va3MgbGlrZSBgQlJJREdFX05FVEZJTFRFUmAsIGBCUklER0VgLCBgTkVURklMVEVSYCwgYFVTRVJfTlNgLCBhbmQgYE5FVF9OU2AgYXJlIHRoZSBrZXkgZW5hYmxpbmcgY29uZmlncy4gTm90YWJseSwgYEJSSURHRV9ORVRGSUxURVJgIGhhcyBkZXBlbmRlbmNpZXMgb24gYm90aCBgQlJJREdFYCBhbmQgYE5FVEZJTFRFUmAsIGFuZCBgTkVURklMVEVSX0FEVkFOQ0VEYCwgd2hpY2ggSSYjMzk7bGwgbWFrZSBzdXJlIHRvIGluY2x1ZGUuIGBVU0VSX05TYCBhbmQgYE5FVF9OU2AgYXJlIGFsc28gZXhwbGljaXRseSByZXF1aXJlZC4gIEl0JiMzOTtzIGNyaXRpY2FsIHRoYXQgSSBkb24mIzM5O3Qgb3Zlcmxvb2sgdGhlc2UgZGVwZW5kZW5jaWVzOyBvdGhlcndpc2UsIHRoZSBjb2RlIHdvbiYjMzk7dCBldmVuIGNvbXBpbGUgaW50byB0aGUga2VybmVsLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVhc29uaW5nIGJlaGluZCBhbGwgdGhpcy4gVGhlIHBhdGNoIGlzIGFib3V0IHJlc3RyaWN0aW5nIHRoZSBob29rcyBhbmQgc3lzY3RsIHJlZ2lzdHJhdGlvbiBvZiBgYnJfbmV0ZmlsdGVyYCB3aXRoaW4gdXNlciBuYW1lc3BhY2VzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgcGF0aHMgb2YgdGhpcyBtb2R1bGUsIGluY2x1ZGluZyBgYnJuZl9pbml0X25ldGAsIGBicm5mX2RldmljZV9ldmVudGAgYW5kIHN5c2N0bCBjbGVhbnVwIGxvZ2ljLCB0byBhdm9pZCBydW5uaW5nIGluIHVzZXIgbmFtZXNwYWNlcy4gIFRoaXMgaGFzIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBuYW1lc3BhY2UgYW5kIGJyaWRnZSBkZXZpY2UgYmVoYXZpb3IgaW4gbm9uLXJvb3QgdXNlciBuYW1lc3BhY2VzLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGRlZmluaXRlbHkgdGVzdGFibGUgYW5kIHJlbGV2YW50IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgZ29vZC4gIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgdGVzdHMgY292ZXIgdGhpcyBhbHRlcmVkIGxvZ2ljLCBlc3BlY2lhbGx5IGFyb3VuZCBpbml0aWFsaXphdGlvbiwgZGVpbml0aWFsaXphdGlvbiwgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBzeXNjdGxzIHdoZW4gZGVhbGluZyB3aXRoIHVzZXIgbmFtZXNwYWNlcy4KCkFscmlnaHQsIEkmIzM5O20gY29uZmlkZW50IGluIHRoZXNlIGZpbmRpbmdzLiBJJiMzOTttIHJlYWR5IHRvICYjMzQ7c2V0LXJlc3VsdHMmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRV9ORVRGSUxURVImIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7LAogICAgJiMzNDtVU0VSX05TJiMzNDssCiAgICAmIzM0O05FVF9OUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JybmZfZGV2aWNlX2V2ZW50JiMzNDssCiAgICAmIzM0O2JybmZfaW5pdF9uZXQmIzM0OywKICAgICYjMzQ7YnJuZl9leGl0X25ldCYjMzQ7LAogICAgJiMzNDticl9uZl9ob29rX3RocmVzaCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGJyaWRnZSBuZXRmaWx0ZXIgaW5pdGlhbGl6YXRpb24gYW5kIGRldmljZSBldmVudCBoYW5kbGluZyB0byBkaXNhYmxlIGJyX25ldGZpbHRlciBhbmQgaXRzIHN5c2N0bCByZWdpc3RyYXRpb24gd2l0aGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcy4gVGhpcyBhbHRlcnMgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgYnJpZGdlIGRldmljZSBzZXR1cC90ZWFyZG93biBleGVjdXRpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0VfTkVURklMVEVSJiMzNDssCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OywKICAgICYjMzQ7VVNFUl9OUyYjMzQ7LAogICAgJiMzNDtORVRfTlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticm5mX2RldmljZV9ldmVudCYjMzQ7LAogICAgJiMzNDticm5mX2luaXRfbmV0JiMzNDssCiAgICAmIzM0O2JybmZfZXhpdF9uZXQmIzM0OywKICAgICYjMzQ7YnJfbmZfaG9va190aHJlc2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBicmlkZ2UgbmV0ZmlsdGVyIGluaXRpYWxpemF0aW9uIGFuZCBkZXZpY2UgZXZlbnQgaGFuZGxpbmcgdG8gZGlzYWJsZSBicl9uZXRmaWx0ZXIgYW5kIGl0cyBzeXNjdGwgcmVnaXN0cmF0aW9uIHdpdGhpbiBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZXMuIFRoaXMgYWx0ZXJzIGNvcmUgbmV0d29yayBuYW1lc3BhY2UgYW5kIGJyaWRnZSBkZXZpY2Ugc2V0dXAvdGVhcmRvd24gZXhlY3V0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RyaWN0cyB0aGUgbGVnYWN5IGJyX25ldGZpbHRlciBtb2R1bGUgaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzIGJ5IHNldHRpbmcgYSBuZXcgYm9vbGVhbiBmbGFnIChgaW5fdXNlcm5zYCksIGF2b2lkaW5nIHN5c2N0bCByZWdpc3RyYXRpb24sIGFuZCBza2lwcGluZyBuZXRmaWx0ZXIgaG9vayByZWdpc3RyYXRpb24gb24gZGV2aWNlIGV2ZW50cy5cblxuLSBNZW1vcnkgQWxsb2NhdGlvbiBcdTAwMjYgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgYnJuZl9uZXRgIGlzIGFsbG9jYXRlZCBhcyBwZXItbmV0bnMgc3RvcmFnZSBieSB0aGUgcGVybmV0IHN1YnN5c3RlbSB1c2luZyB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeSAoYGt6YWxsb2NgKS4gVGhlIGFkZGVkIGBpbl91c2VybnNgIGJvb2xlYW4gYW5kIGV4aXN0aW5nIGZpZWxkcyBhcmUgc2FmZWx5IHplcm8taW5pdGlhbGl6ZWQgb24gYWxsb2NhdGlvbi5cbi0gTm8gSW5mbyBMZWFrcyBvciBVbmluaXRpYWxpemVkIFJlYWRzOiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgYWxzbyBndWFyZHMgc3lzY3RsIGNsZWFudXAgYWdhaW5zdCBOVUxMIHBvaW50ZXJzIChgY3RsX2hkcmApIHdoZW4gc3lzY3RsIHJlZ2lzdHJhdGlvbiB3YXMgc2tpcHBlZC5cbi0gU3RhbmRhcmQgU2FuaXRpemVyIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBsaWZlY3ljbGUsIG51bGwgZGVyZWZlcmVuY2VzLCBvciBuZXRucyBkZXN0cnVjdGlvbiBhcmUgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE0NjczNTEwYTJhOTZiMjE1NjViOGNkMTA0YWM4MzAwZGZlNTJiYjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAyMjozMjo0NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3QKaW5kZXggYzFlNmVhNTJjOWU1OS4uZGRlZDFhNmVkZDYwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3QKQEAgLTI3Nyw4ICYjNDM7Mjc3LDkgQEAgTmV0ZmlsdGVyCiA9PT09PT09PT0KIAogVGhlIGJyaWRnZSBuZXRmaWx0ZXIgbW9kdWxlIGlzIGEgbGVnYWN5IGZlYXR1cmUgdGhhdCBhbGxvd3MgdG8gZmlsdGVyIGJyaWRnZWQKLXBhY2tldHMgd2l0aCBpcHRhYmxlcyBhbmQgaXA2dGFibGVzLiBJdHMgdXNlIGlzIGRpc2NvdXJhZ2VkLiBVc2VycyBzaG91bGQKLWNvbnNpZGVyIHVzaW5nIG5mdGFibGVzIGZvciBwYWNrZXQgZmlsdGVyaW5nLgomIzQzO3BhY2tldHMgd2l0aCBpcHRhYmxlcyBhbmQgaXA2dGFibGVzLiBUaGlzIGZlYXR1cmUgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsIGFuZAomIzQzO25vdCBhdmFpbGFibGUgaW4gdXNlciBuYW1lc3BhY2VzLiBDb25zaWRlciB1c2luZyBuZnRhYmxlcyBmb3IgcGFja2V0IGZpbHRlcmluZwomIzQzO2luc3RlYWQuCiAKIFRoZSBvbGRlciBlYnRhYmxlcyB0b29sIGlzIG1vcmUgZmVhdHVyZS1saW1pdGVkIGNvbXBhcmVkIHRvIG5mdGFibGVzLCBidXQKIGp1c3QgbGlrZSBuZnRhYmxlcyBpdCBkb2VzbiYjMzk7dCBuZWVkIHRoaXMgbW9kdWxlIGVpdGhlciB0byBmdW5jdGlvbi4KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jCmluZGV4IDBhMzk0ZTVmNDM5MTYuLmUxNTM1NWZmMjE1YTcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYwpAQCAtNTQsNiAmIzQzOzU0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBicm5mX25ldF9pZCBfX3JlYWRfbW9zdGx5OwogCiBzdHJ1Y3QgYnJuZl9uZXQgewogCWJvb2wgZW5hYmxlZDsKJiM0MzsJYm9vbCBpbl91c2VybnM7CiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmN0bF9oZHI7CkBAIC0xMTAwLDcgJiM0MzsxMTAxLDcgQEAgc3RhdGljIGludCBicm5mX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCwKIAogCW5ldCA9IGRldl9uZXQoZGV2KTsKIAlicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpOwotCWlmIChicm5ldC0mZ3Q7ZW5hYmxlZCkKJiM0MzsJaWYgKGJybmV0LSZndDtlbmFibGVkIHx8IGJybmV0LSZndDtpbl91c2VybnMpCiAJCXJldHVybiBOT1RJRllfT0s7CiAKIAlyZXQgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBicl9uZl9vcHMsIEFSUkFZX1NJWkUoYnJfbmZfb3BzKSk7CkBAIC0xMjI5LDkgJiM0MzsxMjMwLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRmaWx0ZXJfc3lzY3RsX2RlZmF1bHQoc3RydWN0IGJybmZfbmV0ICpicm5mKQogCWJybmYtJmd0O2ZpbHRlcl9wcHBvZV90YWdnZWQgPSAwOwogCWJybmYtJmd0O3Bhc3Nfdmxhbl9pbmRldiA9IDA7CiB9CiYjNDM7I2VuZGlmCiAKIHN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiYjNDM7I2lmZGVmIENPTkZJR19TWVNDVEwKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSA9IGJybmZfdGFibGU7CiAJc3RydWN0IGJybmZfbmV0ICpicm5ldDsKIApAQCAtMTI1OSwyNSAmIzQzOzEyNjIsMzkgQEAgc3RhdGljIGludCBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0KJiM0MzsjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KQogewotCWNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlID0gYnJuZXQtJmd0O2N0bF9oZHItJmd0O2N0bF90YWJsZV9hcmc7CiYjNDM7I2lmZGVmIENPTkZJR19TWVNDVEwKJiM0MzsJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWRlciA9IGJybmV0LSZndDtjdGxfaGRyOwomIzQzOwljb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIAotCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShicm5ldC0mZ3Q7Y3RsX2hkcik7CiYjNDM7CWlmICghaGVhZGVyKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl0YWJsZSA9IGhlYWRlci0mZ3Q7Y3RsX3RhYmxlX2FyZzsKJiM0MzsJdW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKGhlYWRlcik7CiAJaWYgKCFuZXRfZXEobmV0LCAmYW1wO2luaXRfbmV0KSkKIAkJa2ZyZWUodGFibGUpOwomIzQzOyNlbmRpZgogfQogCiBzdGF0aWMgaW50IF9fbmV0X2luaXQgYnJuZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiYjNDM7CWlmIChuZXQtJmd0O3VzZXJfbnMgIT0gJmFtcDtpbml0X3VzZXJfbnMpIHsKJiM0MzsJCXN0cnVjdCBicm5mX25ldCAqYnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTsKJiM0MzsKJiM0MzsJCWJybmV0LSZndDtpbl91c2VybnMgPSB0cnVlOwomIzQzOwkJcHJfd2Fybl9vbmNlKCYjMzQ7YnJfbmV0ZmlsdGVyIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gdXNlciBuYW1lc3BhY2VzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogCXJldHVybiBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KG5ldCk7CiB9Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKQEAgLTEyODksMTUgJiM0MzsxMzA2LDExIEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYnJuZl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiAJCWJybmV0LSZndDtlbmFibGVkID0gZmFsc2U7CiAJfQogCi0jaWZkZWYgQ09ORklHX1NZU0NUTAogCWJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXQobmV0LCBicm5ldCk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBicm5mX25ldF9vcHMgX19yZWFkX21vc3RseSA9IHsKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCiAJLmluaXQgPSBicm5mX2luaXRfbmV0LAotI2VuZGlmCiAJLmV4aXQgPSBicm5mX2V4aXRfbmV0LAogCS5pZCAgID0gJmFtcDticm5mX25ldF9pZCwKIAkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnJuZl9uZXQpLApAQCAtMTMxOCw3ICYjNDM7MTMzMSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJyX25ldGZpbHRlcl9pbml0KHZvaWQpCiAJfQogCiAJUkNVX0lOSVRfUE9JTlRFUihuZl9icl9vcHMsICZhbXA7YnJfb3BzKTsKLQlwcmludGsoS0VSTl9OT1RJQ0UgJiMzNDtCcmlkZ2UgZmlyZXdhbGxpbmcgcmVnaXN0ZXJlZFxuJiMzNDspOwomIzQzOwlwcl93YXJuKCYjMzQ7YnJfbmV0ZmlsdGVyIGlzIHNsYXRlZCBmb3IgcmVtb3ZhbCBpbiAyMDI3LlxuJiMzNDspOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjMyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gTGV0JiMzOTtzIHNlZS4uLgoKMS4gICoqRG9jdW1lbnRhdGlvbiBVcGRhdGU6KiogQSBkb2N1bWVudGF0aW9uIHVwZGF0ZSB0byBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RgLiBUaGF0JiMzOTtzIG5vdCBsaWtlbHkgdG8gYmUgYSBmdXp6ZXIgdGFyZ2V0IGRpcmVjdGx5LCBpdCYjMzk7cyBpbmZvcm1hdGlvbmFsLgoyLiAgKipgbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY2AgQ2hhbmdlczoqKiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIHByb2JhYmx5IGFyZS4gTGV0JiMzOTtzIHNlZS4uLgoKICAgICogICBBIG5ldyBib29sZWFuIGBpbl91c2VybnNgIGlzIGFkZGVkIHRvIHRoZSBgc3RydWN0IGJybmZfbmV0YC4gT2theSwgdGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gaG93IHVzZXIgbmFtZXNwYWNlcyBhcmUgaGFuZGxlZC4KICAgICogICBUaGUgYGJybmZfZGV2aWNlX2V2ZW50YCBmdW5jdGlvbiBub3cgY2hlY2tzIGBicm5ldC0mZ3Q7ZW5hYmxlZCB8fCBicm5ldC0mZ3Q7aW5fdXNlcm5zYC4gVGhlIGFkZGl0aW9uIG9mIGBpbl91c2VybnNgIHRvIHRoZSBjb25kaXRpb24gaXMgZGVmaW5pdGVseSB3b3J0aCBpbnZlc3RpZ2F0aW5nLgogICAgKiAgIFN5c2N0bCBjb25maWd1cmF0aW9uIGlzIGJlaW5nIHJlZmFjdG9yZWQuIFRoZSBgI2lmZGVmIENPTkZJR19TWVNDVExgIGd1YXJkcyBhcmUgYmVpbmcgcmVtb3ZlZC4gVGhpcyBwb2ludHMgdG8gYSBjaGFuZ2UgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHN5c2N0bCBzZXR0aW5ncyB3aXRoaW4gdGhlIGBicl9uZXRmaWx0ZXJgIG1vZHVsZS4gSXQmIzM5O3MgcG9zc2libGUgdGhhdCBjb25maWd1cmF0aW9uIGNoYW5nZXMgbWF5IGludGVyYWN0IHdpdGggdGhlIG5ldHdvcmsgYnJpZGdlIGluIHVuZXhwZWN0ZWQgd2F5cy4KICAgICogICBOb3csIGluIGBicm5mX2luaXRfbmV0YCwgdGhlIGNvcmUgbG9naWMgbG9va3MgbGlrZSBpdCYjMzk7cyBoYW5kbGluZyB1c2VyIG5hbWVzcGFjZSBzY2VuYXJpb3MuIEl0IGFwcGVhcnMgdGhlcmUmIzM5O3MgbmV3IGxvZ2ljIHRvIGRpc2FibGUgY2VydGFpbiBmdW5jdGlvbmFsaXR5IGluIHVzZXIgbmFtZXNwYWNlcywgd2l0aCBhIHdhcm5pbmcuIENydWNpYWxseSwgdGhlIGNvZGUgbm93IHNldHMgYGJybmV0LSZndDtpbl91c2VybnMgPSB0cnVlYCBpZiB0aGUgbmV0d29yayBuYW1lc3BhY2UgaXMgKm5vdCogdGhlIGluaXRpYWwgb25lLiBUaGlzIGltcGxpZXMgYSBwb3RlbnRpYWxseSBkaWZmZXJlbnQgY29kZSBwYXRoIGFuZCBiZWhhdmlvciB3aGVuIHJ1bm5pbmcgd2l0aGluIGEgdXNlciBuYW1lc3BhY2UuCiAgICAqICAgYC5pbml0ID0gYnJuZl9pbml0X25ldGAgaXMgbm93IGFsd2F5cyBzZXQgaW4gYGJybmZfbmV0X29wc2AuIFRoZSBndWFyZCBpcyBnb25lLiBUaGlzIGxpa2VseSBtZWFucyBpbml0aWFsaXphdGlvbiBoYXBwZW5zIHVuY29uZGl0aW9uYWxseSBub3cuCiAgICAqICAgVGhlIHBlcm5ldCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgYGJybmZfbmV0X29wc2AgaXMgdXNpbmcgYC5zaXplID0gc2l6ZW9mKHN0cnVjdCBicm5mX25ldClgLiBQZXJuZXRzIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgYnkgdGhlIG5ldCBuYW1lc3BhY2UgaW5mcmFzdHJ1Y3R1cmUuIE9rYXksIEkgd2FudCB0byBkcmlsbCBkb3duIGludG8gdGhlIHBlcm5ldCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBiZWNhdXNlIGl0IGNvdWxkIGJlIGEgc291cmNlIG9mIG1lbW9yeSBjb3JydXB0aW9uIGlmIGhhbmRsZWQgaW5jb3JyZWN0bHkuCgpUbyBnZXQgYSBiZXR0ZXIgcGljdHVyZSwgSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIGBuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jYCB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyB0aGlzIHBlcm5ldCBzdHJ1Y3R1cmUgaXMgdXNlZCwgaG93IHRoZSBgaW5fdXNlcm5zYCBmbGFnIGlzIHVzZWQsIGFuZCBob3cgdGhlc2Ugc3lzY3RsIGNoYW5nZXMgYW5kIHVzZXIgbmFtZXNwYWNlIGhhbmRsaW5nIGludGVyYWN0LiBHaXZlbiB0aGUgdXNlciBuYW1lc3BhY2UgaW50ZXJhY3Rpb24gYW5kIHRoZSByZWZhY3RvcmluZywgdGhpcyBwYXRjaCBsb29rcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIEtNU0FOIGZ1enppbmcsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGJyaWRnZSBhbmQgdXNlciBuYW1lc3BhY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticm5mX25ldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTItXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjUzOnN0YXRpYyB1bnNpZ25lZCBpbnQgYnJuZl9uZXRfaWQgX19yZWFkX21vc3RseTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTQtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjU1OnN0cnVjdCBicm5mX25ldCB7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTU2LVx0Ym9vbCBlbmFibGVkO1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9OTM9c3RhdGljIGlubGluZSBib29sIGlzX3ZsYW5faXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NC17XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjk1Olx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05Ni1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEwMD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmxhbl9pcHY2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDIte1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDM6XHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwNC1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEwOT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmxhbl9hcnAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMTAte1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMTE6XHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExMi1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEyMj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcHBwb2VfaXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjMte1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMjQ6XHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyNS1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEzMD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcHBwb2VfaXB2Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMyLXtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTMzOlx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzQtXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz00MzY9c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpicm5mX2dldF9sb2dpY2FsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDQwLVx0c3RydWN0IG5ldF9kZXZpY2UgKnZsYW4sICpicjtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NDQxOlx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00NDItXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz00ODQ9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZyh2b2lkICpwcml2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDkxLVx0X191MzIgbGVuID0gbmZfYnJpZGdlX2VuY2FwX2hlYWRlcl9sZW4oc2tiKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NDkyOlx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDkzLVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTAxLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1MDI6XHRicm5ldCA9IG5ldF9nZW5lcmljKHN0YXRlLVx1MDAzZW5ldCwgYnJuZl9uZXRfaWQpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MDMtXHRpZiAoSVNfSVBWNihza2IpIHx8IGlzX3ZsYW5faXB2Nihza2IsIHN0YXRlLVx1MDAzZW5ldCkgfHxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTcyOT1zdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfYXJwKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03MzQtXHRzdHJ1Y3QgbmV0X2RldmljZSAqKmQgPSAoc3RydWN0IG5ldF9kZXZpY2UgKiopKHNrYi1cdTAwM2VjYik7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjczNTpcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQ7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTczNi1cbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTc0MS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NzQyOlx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhzdGF0ZS1cdTAwM2VuZXQsIGJybmZfbmV0X2lkKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzQzLVx0aWYgKCFicm5ldC1cdTAwM2VjYWxsX2FycHRhYmxlcyBcdTAwMjZcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfQVJQVEFCTEVTKSlcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEwODk9c3RhdGljIGludCBicm5mX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCxcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwOTItXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEwOTM6XHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDk0LVx0c3RydWN0IG5ldCAqbmV0O1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTEwMi1cdG5ldCA9IGRldl9uZXQoZGV2KTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTEwMzpcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExMDQtXHRpZiAoYnJuZXQtXHUwMDNlZW5hYmxlZCB8fCBicm5ldC1cdTAwM2Vpbl91c2VybnMpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMTg1PXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGJybmZfdGFibGVbXSA9IHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMjMtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyMjQ6c3RhdGljIGlubGluZSB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChzdHJ1Y3QgYnJuZl9uZXQgKmJybmYpXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMjUte1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTIzNT1zdGF0aWMgaW50IGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTIzOC1cdHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlID0gYnJuZl90YWJsZTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTIzOTpcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQ7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyNDAtXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjQ2LVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMjQ3Olx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI0OC1cdHRhYmxlWzBdLmRhdGEgPSBcdTAwMjZicm5ldC1cdTAwM2VjYWxsX2FycHRhYmxlcztcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEyNjk9c3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyNzA6XHRcdFx0XHRcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjcxLXtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEyODY9c3RhdGljIGludCBfX25ldF9pbml0IGJybmZfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI4OC1cdGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpIHtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTI4OTpcdFx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjkwLVxuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTI5OT1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGJybmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzAwLXtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTMwMTpcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQ7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMDItXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMDM6XHRicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzA0LVx0aWYgKGJybmV0LVx1MDAzZWVuYWJsZWQpIHtcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMTEtXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMTI6c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBicm5mX25ldF9vcHMgX19yZWFkX21vc3RseSA9IHtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMxMy1cdC5pbml0ID0gYnJuZl9pbml0X25ldCxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMxNC1cdC5leGl0ID0gYnJuZl9leGl0X25ldCxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTMxNTpcdC5pZCAgID0gXHUwMDI2YnJuZl9uZXRfaWQsXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMTY6XHQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnJuZl9uZXQpLFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzE3LX07XG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMzE5PXN0YXRpYyBpbnQgX19pbml0IGJyX25ldGZpbHRlcl9pbml0KHZvaWQpXG4tLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzIyLVxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzIzOlx0cmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZicm5mX25ldF9vcHMpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzI0LVx0aWYgKHJldCBcdTAwM2MgMClcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMjgtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMjk6XHRcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZicm5mX25ldF9vcHMpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzMwLVx0XHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTMzOD1zdGF0aWMgdm9pZCBfX2V4aXQgYnJfbmV0ZmlsdGVyX2Zpbmkodm9pZClcbi0tXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzNDEtXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZicm5mX25vdGlmaWVyKTtcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTM0MjpcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZicm5mX25ldF9vcHMpO1xubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzQzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjI6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzEwNwoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipEZWVwIERpdmUgaW50byBicl9uZXRmaWx0ZXJfaG9va3MuYyBmb3IgU3lzY3RsIGFuZCBJbml0aWFsaXphdGlvbioqCgpBbHJpZ2h0LCBiZWZvcmUgd2UgZ2V0IHN0YXJ0ZWQsIEkgd2FudCB0byB0YWtlIGEgbWV0aG9kaWNhbCBhcHByb2FjaCB0byB0aGlzLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGhvdyB0aGUgYnJpZGdpbmcgbmV0ZmlsdGVyIGhvb2tzIGFyZSBzZXQgdXAsIG1hbmFnZWQsIGFuZCB0b3JuIGRvd24sIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gc3lzY3RsIGNvbmZpZ3VyYXRpb25zLiBUaGlzIG1lYW5zIGEgY2FyZWZ1bCBpbnNwZWN0aW9uIG9mIHRoZSBgbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY2AgZmlsZSBpcyBpbiBvcmRlci4gSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlbnRpcmUgZmlsZSwgb3IgYXQgbGVhc3QgdGhlIGNyaXRpY2FsIHNlZ21lbnRzIGRlYWxpbmcgd2l0aCBzeXN0ZW0gY29udHJvbHMgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgZXhpdCByb3V0aW5lcy4KCkZpcnN0LCBJJiMzOTttIHRoaW5raW5nLCBJIHNob3VsZCBzdGFydCBieSBwaW5wb2ludGluZyB0aG9zZSBzZWN0aW9ucyBkaXJlY3RseSByZWxhdGVkIHRvIHN5c2N0bCB2YXJpYWJsZXMuIFdoYXQgYXJlIHRoZSBjb25maWd1cmFibGUgcGFyYW1ldGVycz8gSG93IGFyZSB0aGV5IHJlZ2lzdGVyZWQ/IFdoZXJlIGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgZGVmaW5lZD8gV2hhdCBmdW5jdGlvbnMgaGFuZGxlIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgb24gdGhlc2Ugc3lzY3RsIGVudHJpZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBzeXNjdGwgY29udHJvbHMgYW5kIHRoZSBhY3R1YWwgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eSwgYW5kIHdoZXRoZXIgdGhlIGJyaWRnZSBuZXRmaWx0ZXIgaG9va3MgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZXNlIHBhcmFtZXRlcnMuCgpUaGVuLCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgc2VxdWVuY2VzIGRlbWFuZCBjYXJlZnVsIHNjcnV0aW55LiBXaGVyZSBhcmUgdGhlIGhvb2tzIHJlZ2lzdGVyZWQ/IEhvdyBhcmUgdGhleSB1bnJlZ2lzdGVyZWQ/IFdoYXQmIzM5O3MgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnM/IEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gY29uY2VybnM/IEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgY3JvcCB1cCBkdXJpbmcgbW9kdWxlIGxvYWRpbmcgb3IgdW5sb2FkaW5nPyBBcmUgdGhlcmUgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgbW9kdWxlcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBob29rIG9yZGVyaW5nLCBkZXBlbmRlbmNpZXMsIG9yIGNsZWFudXAsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLgpUaGUgZ29hbCBpcyBhIHZlcnkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBzeXNjdGwgY29uZmlndXJhdGlvbiwgaG9vayByZWdpc3RyYXRpb24sIGhvb2sgdW5yZWdpc3RyYXRpb24sIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG5ldGZpbHRlciBvcGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjIwOlx0XHRcdC5wcm9jX2hhbmRsZXJcdD0gYnJuZl9zeXNjdGxfY2FsbF90YWJsZXMsXG4xMjIxOlx0XHR9LFxuMTIyMjpcdH07XG4xMjIzOlx0XG4xMjI0Olx0c3RhdGljIGlubGluZSB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChzdHJ1Y3QgYnJuZl9uZXQgKmJybmYpXG4xMjI1Olx0e1xuMTIyNjpcdFx0YnJuZi1cdTAwM2VjYWxsX2lwdGFibGVzID0gMTtcbjEyMjc6XHRcdGJybmYtXHUwMDNlY2FsbF9pcDZ0YWJsZXMgPSAxO1xuMTIyODpcdFx0YnJuZi1cdTAwM2VjYWxsX2FycHRhYmxlcyA9IDE7XG4xMjI5Olx0XHRicm5mLVx1MDAzZWZpbHRlcl92bGFuX3RhZ2dlZCA9IDA7XG4xMjMwOlx0XHRicm5mLVx1MDAzZWZpbHRlcl9wcHBvZV90YWdnZWQgPSAwO1xuMTIzMTpcdFx0YnJuZi1cdTAwM2VwYXNzX3ZsYW5faW5kZXYgPSAwO1xuMTIzMjpcdH1cbjEyMzM6XHQjZW5kaWZcbjEyMzQ6XHRcbjEyMzU6XHRzdGF0aWMgaW50IGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuMTIzNjpcdHtcbjEyMzc6XHQjaWZkZWYgQ09ORklHX1NZU0NUTFxuMTIzODpcdFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGUgPSBicm5mX3RhYmxlO1xuMTIzOTpcdFx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcbjEyNDA6XHRcbjEyNDE6XHRcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKSB7XG4xMjQyOlx0XHRcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKGJybmZfdGFibGUpLCBHRlBfS0VSTkVMKTtcbjEyNDM6XHRcdFx0aWYgKCF0YWJsZSlcbjEyNDQ6XHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEyNDU6XHRcdH1cbjEyNDY6XHRcbjEyNDc6XHRcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG4xMjQ4Olx0XHR0YWJsZVswXS5kYXRhID0gXHUwMDI2YnJuZXQtXHUwMDNlY2FsbF9hcnB0YWJsZXM7XG4xMjQ5Olx0XHR0YWJsZVsxXS5kYXRhID0gXHUwMDI2YnJuZXQtXHUwMDNlY2FsbF9pcHRhYmxlcztcbjEyNTA6XHRcdHRhYmxlWzJdLmRhdGEgPSBcdTAwMjZicm5ldC1cdTAwM2VjYWxsX2lwNnRhYmxlcztcbjEyNTE6XHRcdHRhYmxlWzNdLmRhdGEgPSBcdTAwMjZicm5ldC1cdTAwM2VmaWx0ZXJfdmxhbl90YWdnZWQ7XG4xMjUyOlx0XHR0YWJsZVs0XS5kYXRhID0gXHUwMDI2YnJuZXQtXHUwMDNlZmlsdGVyX3BwcG9lX3RhZ2dlZDtcbjEyNTM6XHRcdHRhYmxlWzVdLmRhdGEgPSBcdTAwMjZicm5ldC1cdTAwM2VwYXNzX3ZsYW5faW5kZXY7XG4xMjU0Olx0XG4xMjU1Olx0XHRicl9uZXRmaWx0ZXJfc3lzY3RsX2RlZmF1bHQoYnJuZXQpO1xuMTI1NjpcdFxuMTI1NzpcdFx0YnJuZXQtXHUwMDNlY3RsX2hkciA9IHJlZ2lzdGVyX25ldF9zeXNjdGxfc3oobmV0LCBcJiMzNDtuZXQvYnJpZGdlXCYjMzQ7LCB0YWJsZSxcbjEyNTg6XHRcdFx0XHRcdFx0XHRBUlJBWV9TSVpFKGJybmZfdGFibGUpKTtcbjEyNTk6XHRcdGlmICghYnJuZXQtXHUwMDNlY3RsX2hkcikge1xuMTI2MDpcdFx0XHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSlcbjEyNjE6XHRcdFx0XHRrZnJlZSh0YWJsZSk7XG4xMjYyOlx0XG4xMjYzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTI2NDpcdFx0fVxuMTI2NTpcdCNlbmRpZlxuMTI2NjpcdFx0cmV0dXJuIDA7XG4xMjY3Olx0fVxuMTI2ODpcdFxuMTI2OTpcdHN0YXRpYyB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0LFxuMTI3MDpcdFx0XHRcdFx0XHQgc3RydWN0IGJybmZfbmV0ICpicm5ldClcbjEyNzE6XHR7XG4xMjcyOlx0I2lmZGVmIENPTkZJR19TWVNDVExcbjEyNzM6XHRcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXIgPSBicm5ldC1cdTAwM2VjdGxfaGRyO1xuMTI3NDpcdFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XG4xMjc1Olx0XG4xMjc2Olx0XHRpZiAoIWhlYWRlcilcbjEyNzc6XHRcdFx0cmV0dXJuO1xuMTI3ODpcdFxuMTI3OTpcdFx0dGFibGUgPSBoZWFkZXItXHUwMDNlY3RsX3RhYmxlX2FyZztcbjEyODA6XHRcdHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShoZWFkZXIpO1xuMTI4MTpcdFx0aWYgKCFuZXRfZXEobmV0LCBcdTAwMjZpbml0X25ldCkpXG4xMjgyOlx0XHRcdGtmcmVlKHRhYmxlKTtcbjEyODM6XHQjZW5kaWZcbjEyODQ6XHR9XG4xMjg1Olx0XG4xMjg2Olx0c3RhdGljIGludCBfX25ldF9pbml0IGJybmZfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuMTI4NzpcdHtcbjEyODg6XHRcdGlmIChuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnMpIHtcbjEyODk6XHRcdFx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xuMTI5MDpcdFxuMTI5MTpcdFx0XHRicm5ldC1cdTAwM2Vpbl91c2VybnMgPSB0cnVlO1xuMTI5MjpcdFx0XHRwcl93YXJuX29uY2UoXCYjMzQ7YnJfbmV0ZmlsdGVyIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gdXNlciBuYW1lc3BhY2VzXFxuXCYjMzQ7KTtcbjEyOTM6XHRcdFx0cmV0dXJuIDA7XG4xMjk0Olx0XHR9XG4xMjk1Olx0XG4xMjk2Olx0XHRyZXR1cm4gYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChuZXQpO1xuMTI5NzpcdH1cbjEyOTg6XHRcbjEyOTk6XHRzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJybmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuMTMwMDpcdHtcbjEzMDE6XHRcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQ7XG4xMzAyOlx0XG4xMzAzOlx0XHRicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xuMTMwNDpcdFx0aWYgKGJybmV0LVx1MDAzZWVuYWJsZWQpIHtcbjEzMDU6XHRcdFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBicl9uZl9vcHMsIEFSUkFZX1NJWkUoYnJfbmZfb3BzKSk7XG4xMzA2Olx0XHRcdGJybmV0LVx1MDAzZWVuYWJsZWQgPSBmYWxzZTtcbjEzMDc6XHRcdH1cbjEzMDg6XHRcbjEzMDk6XHRcdGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXQobmV0LCBicm5ldCk7XG4xMzEwOlx0fVxuMTMxMTpcdFxuMTMxMjpcdHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgYnJuZl9uZXRfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4xMzEzOlx0XHQuaW5pdCA9IGJybmZfaW5pdF9uZXQsXG4xMzE0Olx0XHQuZXhpdCA9IGJybmZfZXhpdF9uZXQsXG4xMzE1Olx0XHQuaWQgICA9IFx1MDAyNmJybmZfbmV0X2lkLFxuMTMxNjpcdFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGJybmZfbmV0KSxcbjEzMTc6XHR9O1xuMTMxODpcdFxuMTMxOTpcdHN0YXRpYyBpbnQgX19pbml0IGJyX25ldGZpbHRlcl9pbml0KHZvaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwODAKCQkJCQkJCW91dHB1dDogMjMwCgkJCQkJCQl0aG91Z2h0czogODE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEJyaWRnZSBOZXRmaWx0ZXIgQmVoYXZpb3IgaW4gTm9uLUluaXRpYWwgVXNlciBOYW1lc3BhY2VzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoZSBicmlkZ2UgbmV0ZmlsdGVyIGNvZGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgaXQgYmVoYXZlcyB3aXRoaW4gdXNlciBuYW1lc3BhY2VzIHRoYXQgKmFyZW4mIzM5O3QqIHRoZSBpbml0aWFsIG9uZS4gVGhlIG1haW4gY29uY2VybiBoZXJlIHNlZW1zIHRvIGJlIGFib3V0IHNlY3VyaXR5IGFuZCBwb3RlbnRpYWxseSBleHBvc2luZyBsZWdhY3kgZmVhdHVyZXMgaW4gYSB3YXkgdGhhdCYjMzk7cyB1bmludGVuZGVkIG9yIGV4cGxvaXRhYmxlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBzZWUgd2hhdCBoYXBwZW5zIHdoZW4gYG5ldC0mZ3Q7dXNlcl9uc2AgaXNuJiMzOTt0IHRoZSBpbml0aWFsIG5hbWVzcGFjZS4gVGhlIGZpcnN0IHRoaW5nIEkgbm90aWNlZCBpcyB0aGF0IGBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KG5ldClgIGlzbiYjMzk7dCBjYWxsZWQsIHdoaWNoIG1ha2VzIHNlbnNlIGluIHRoaXMgY29udGV4dC4gQmVjYXVzZSBvZiB0aGlzLCBgYnJuZXQtJmd0O2luX3VzZXJuc2AgaXMgc2V0IHRvIGB0cnVlYC4gVGhpcyBgYnJuZXRgIHN0cnVjdHVyZSwgdGhlIHBlci1uZXQgaW5mb3JtYXRpb24sIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCB3aGVuIHRoZSBgbmV0YCBpcyBjcmVhdGVkLiBUaGlzIG1lYW5zIGV2ZXJ5dGhpbmcgc3RhcnRzIGF0IHplcm86IHRoZSBgY3RsX2hkcmAsIHRoZSBob29rIHBvaW50ZXJzLCB0aGUgYGVuYWJsZWRgIGZsYWcsICpldmVyeXRoaW5nKi4KCk5vdywgd2hlbiBhIG5ldCBkZXZpY2UgZXZlbnQgY29tZXMgaW4gdmlhIGBicm5mX2RldmljZV9ldmVudGAsIHRoZSBjb25kaXRpb25hbCBjaGVjayBzaG93cyBpdCYjMzk7cyBvbmx5IGVuYWJsZWQgaWYgZWl0aGVyIGBicm5ldC0mZ3Q7ZW5hYmxlZGAgaXMgdHJ1ZSwgb3IgYGJybmV0LSZndDtpbl91c2VybnNgIGlzIHRydWUuICpCdXQqIHNpbmNlIGBicm5ldC0mZ3Q7aW5fdXNlcm5zYCBpcyBhbHdheXMgdHJ1ZSwgdGhlIGhvb2tzIHdpbGwgbmV2ZXIgYmUgcmVnaXN0ZXJlZCwgbWVhbmluZyB0aGF0IGxlZ2FjeSBicmlkZ2UgbmV0ZmlsdGVyIGZ1bmN0aW9uYWxpdHkgc2ltcGx5IHdvbiYjMzk7dCBydW4gd2l0aGluIHRoaXMgbmFtZXNwYWNlLgoKTG9va2luZyBhdCB0aGUgZXhpdCBwYXRoLCBgYnJuZl9leGl0X25ldGAsIGNvbmZpcm1zIHRoaXMuIEJlY2F1c2UgYGJybmV0LSZndDtlbmFibGVkYCBpcyBmYWxzZSwgYG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzYCBpcyBza2lwcGVkLiBUaGVuLCBgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChuZXQsIGJybmV0KWAgY2hlY2tzIGZvciBhIE5VTEwgYGhlYWRlcmAuIEJlY2F1c2Ugb2YgdGhlIGluaXRpYWwgemVyb2luZyBmcm9tIGBremFsbG9jYCwgdGhpcyBpcyB0cnVlLCBzbyBpdCBleGl0cyBjbGVhbmx5LgoKTm93LCBJIGNoZWNrZWQgaWYgYW55IG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIGFjdHVhbGx5ICp1c2UqIHRoZSBgYnJuZXRgIHN0cnVjdHVyZS4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgc3R1ZmYgbGlrZSBgaXNfdmxhbl9pcGAsIGBicl9uZl9wcmVfcm91dGluZ2AsIGV0Yy4sIGFyZSBvbmx5IGNhbGxlZCBmcm9tIHRoZSBicmlkZ2UgbmV0ZmlsdGVyIGhvb2tzIHRoZW1zZWx2ZXMgd2hpY2ggYXJlIG5ldmVyIHJlZ2lzdGVyZWQgaW4gdGhpcyBwYXRoLiBUaGUgcGVybmV0IG1lbW9yeSAqaXMqIHplcm8taW5pdGlhbGl6ZWQgdmlhIGBremFsbG9jYCwgYW5kIHRoZSBgYnJuZXQtJmd0O2luX3VzZXJuc2AgdmFyaWFibGUgaXMgYSBzaW1wbGUgYm9vbGVhbiB3aXRoaW4gYHN0cnVjdCBicm5mX25ldGAuCgpTbyB0aGUgYmlnIHF1ZXN0aW9uOiBBcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRvIHVzZXJzcGFjZT8gVGhlIGFuc3dlciwgYXQgbGVhc3QgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGlzIG5vLiBXZSYjMzk7cmUgbm90IHNlbmRpbmcgYW55dGhpbmcgdW5pbml0aWFsaXplZCB0byB1c2VyIHNwYWNlLCB0aGVyZSBhcmUgbm8gYGNvcHlfdG9fdXNlcmAgb3IgYHB1dF91c2VyYCBjYWxscywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBhcmUgcmVhZC4gVGhlIHBlcm5ldCBtZW1vcnkgaXMgcmVsaWFibHkgemVyby1pbml0aWFsaXplZCBieSB0aGUga2VybmVsIGluZnJhc3RydWN0dXJlIGl0c2VsZi4KCkZpbmFsbHksIEkgcmFuIGEgY2hlY2sgYWdhaW5zdCB0aGUgS01TQU4gcmVxdWlyZW1lbnRzLiBSZW1lbWJlciwgd2Ugb25seSBuZWVkIGl0IGlmIHdlJiMzOTtyZSB0b3VjaGluZyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBpZiB3ZSBoYXZlIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEuIFdlJiMzOTtyZSBub3QgZG9pbmcgYW55IG9mIHRoYXQgaGVyZS4gVGhpcyBwYXRjaCBpcyBqdXN0ICpkaXNhYmxpbmcqIGJyaWRnZSBuZXRmaWx0ZXIgZnVuY3Rpb25hbGl0eSBpbiB1bnByaXZpbGVnZWQgbmFtZXNwYWNlcyB0byBwcmV2ZW50IHBvdGVudGlhbGx5IGRhbmdlcm91cyBsZWdhY3kgY29kZSBmcm9tIHJ1bm5pbmcuIFRoZSBvbmx5IGZpZWxkcyB3ZSBtb2RpZnkgYXJlIHdpdGhpbiB0aGUgemVyby1pbml0aWFsaXplZCBgc3RydWN0IGJybmZfbmV0YC4gVGhlIHN5c2N0bCB0ZWFyZG93biBpcyBub3cgc2FmZWx5IGhhbmRsZWQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBtZW1vcnkgbGVhayB2ZWN0b3JzIGludHJvZHVjZWQuCgpUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGFuZCBzeXprYWxsZXIgY292ZXJhZ2Ugc2hvdWxkIGJlIGFkZXF1YXRlLiBObyBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyByZXF1aXJlZC4gSSBjYW4gY29uZmlkZW50bHkgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhpcyByZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc3RyaWN0cyB0aGUgbGVnYWN5IGJyX25ldGZpbHRlciBtb2R1bGUgaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzIGJ5IHNldHRpbmcgYSBuZXcgYm9vbGVhbiBmbGFnIChgaW5fdXNlcm5zYCksIGF2b2lkaW5nIHN5c2N0bCByZWdpc3RyYXRpb24sIGFuZCBza2lwcGluZyBuZXRmaWx0ZXIgaG9vayByZWdpc3RyYXRpb24gb24gZGV2aWNlIGV2ZW50cy5cblxuLSBNZW1vcnkgQWxsb2NhdGlvbiBcdTAwMjYgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgYnJuZl9uZXRgIGlzIGFsbG9jYXRlZCBhcyBwZXItbmV0bnMgc3RvcmFnZSBieSB0aGUgcGVybmV0IHN1YnN5c3RlbSB1c2luZyB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeSAoYGt6YWxsb2NgKS4gVGhlIGFkZGVkIGBpbl91c2VybnNgIGJvb2xlYW4gYW5kIGV4aXN0aW5nIGZpZWxkcyBhcmUgc2FmZWx5IHplcm8taW5pdGlhbGl6ZWQgb24gYWxsb2NhdGlvbi5cbi0gTm8gSW5mbyBMZWFrcyBvciBVbmluaXRpYWxpemVkIFJlYWRzOiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgYWxzbyBndWFyZHMgc3lzY3RsIGNsZWFudXAgYWdhaW5zdCBOVUxMIHBvaW50ZXJzIChgY3RsX2hkcmApIHdoZW4gc3lzY3RsIHJlZ2lzdHJhdGlvbiB3YXMgc2tpcHBlZC5cbi0gU3RhbmRhcmQgU2FuaXRpemVyIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBsaWZlY3ljbGUsIG51bGwgZGVyZWZlcmVuY2VzLCBvciBuZXRucyBkZXN0cnVjdGlvbiBhcmUgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXN0cmljdHMgdGhlIGxlZ2FjeSBicl9uZXRmaWx0ZXIgbW9kdWxlIGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcyBieSBzZXR0aW5nIGEgbmV3IGJvb2xlYW4gZmxhZyAoYGluX3VzZXJuc2ApLCBhdm9pZGluZyBzeXNjdGwgcmVnaXN0cmF0aW9uLCBhbmQgc2tpcHBpbmcgbmV0ZmlsdGVyIGhvb2sgcmVnaXN0cmF0aW9uIG9uIGRldmljZSBldmVudHMuXG5cbi0gTWVtb3J5IEFsbG9jYXRpb24gXHUwMDI2IEluaXRpYWxpemF0aW9uOiBgc3RydWN0IGJybmZfbmV0YCBpcyBhbGxvY2F0ZWQgYXMgcGVyLW5ldG5zIHN0b3JhZ2UgYnkgdGhlIHBlcm5ldCBzdWJzeXN0ZW0gdXNpbmcgemVyby1pbml0aWFsaXplZCBtZW1vcnkgKGBremFsbG9jYCkuIFRoZSBhZGRlZCBgaW5fdXNlcm5zYCBib29sZWFuIGFuZCBleGlzdGluZyBmaWVsZHMgYXJlIHNhZmVseSB6ZXJvLWluaXRpYWxpemVkIG9uIGFsbG9jYXRpb24uXG4tIE5vIEluZm8gTGVha3Mgb3IgVW5pbml0aWFsaXplZCBSZWFkczogVGhlIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGFsc28gZ3VhcmRzIHN5c2N0bCBjbGVhbnVwIGFnYWluc3QgTlVMTCBwb2ludGVycyAoYGN0bF9oZHJgKSB3aGVuIHN5c2N0bCByZWdpc3RyYXRpb24gd2FzIHNraXBwZWQuXG4tIFN0YW5kYXJkIFNhbml0aXplciBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcm91bmQgbGlmZWN5Y2xlLCBudWxsIGRlcmVmZXJlbmNlcywgb3IgbmV0bnMgZGVzdHJ1Y3Rpb24gYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMjo0Ny45Nzk5NDE2MzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Mjg5NDU3ODQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUklER0VfTkVURklMVEVSXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIk5FVEZJTFRFUlwiLFxuICAgIFwiVVNFUl9OU1wiLFxuICAgIFwiTkVUX05TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJuZl9kZXZpY2VfZXZlbnRcIixcbiAgICBcImJybmZfaW5pdF9uZXRcIixcbiAgICBcImJybmZfZXhpdF9uZXRcIixcbiAgICBcImJyX25mX2hvb2tfdGhyZXNoXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXN0cmljdHMgdGhlIGxlZ2FjeSBicl9uZXRmaWx0ZXIgbW9kdWxlIGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcyBieSBzZXR0aW5nIGEgbmV3IGJvb2xlYW4gZmxhZyAoYGluX3VzZXJuc2ApLCBhdm9pZGluZyBzeXNjdGwgcmVnaXN0cmF0aW9uLCBhbmQgc2tpcHBpbmcgbmV0ZmlsdGVyIGhvb2sgcmVnaXN0cmF0aW9uIG9uIGRldmljZSBldmVudHMuXFxuXFxuLSBNZW1vcnkgQWxsb2NhdGlvbiBcXHUwMDI2IEluaXRpYWxpemF0aW9uOiBgc3RydWN0IGJybmZfbmV0YCBpcyBhbGxvY2F0ZWQgYXMgcGVyLW5ldG5zIHN0b3JhZ2UgYnkgdGhlIHBlcm5ldCBzdWJzeXN0ZW0gdXNpbmcgemVyby1pbml0aWFsaXplZCBtZW1vcnkgKGBremFsbG9jYCkuIFRoZSBhZGRlZCBgaW5fdXNlcm5zYCBib29sZWFuIGFuZCBleGlzdGluZyBmaWVsZHMgYXJlIHNhZmVseSB6ZXJvLWluaXRpYWxpemVkIG9uIGFsbG9jYXRpb24uXFxuLSBObyBJbmZvIExlYWtzIG9yIFVuaW5pdGlhbGl6ZWQgUmVhZHM6IFRoZSBwYXRjaCBkb2VzIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBhbHNvIGd1YXJkcyBzeXNjdGwgY2xlYW51cCBhZ2FpbnN0IE5VTEwgcG9pbnRlcnMgKGBjdGxfaGRyYCkgd2hlbiBzeXNjdGwgcmVnaXN0cmF0aW9uIHdhcyBza2lwcGVkLlxcbi0gU3RhbmRhcmQgU2FuaXRpemVyIEFwcGxpY2FiaWxpdHk6IEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCBsaWZlY3ljbGUsIG51bGwgZGVyZWZlcmVuY2VzLCBvciBuZXRucyBkZXN0cnVjdGlvbiBhcmUgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHJlcXVpcmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBicmlkZ2UgbmV0ZmlsdGVyIGluaXRpYWxpemF0aW9uIGFuZCBkZXZpY2UgZXZlbnQgaGFuZGxpbmcgdG8gZGlzYWJsZSBicl9uZXRmaWx0ZXIgYW5kIGl0cyBzeXNjdGwgcmVnaXN0cmF0aW9uIHdpdGhpbiBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZXMuIFRoaXMgYWx0ZXJzIGNvcmUgbmV0d29yayBuYW1lc3BhY2UgYW5kIGJyaWRnZSBkZXZpY2Ugc2V0dXAvdGVhcmRvd24gZXhlY3V0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHN0YW5kYXJkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzI6NDcuOTc5OTQ2MjQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTkxMDA0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhNDY3MzUxMGEyYTk2YjIxNTY1YjhjZDEwNGFjODMwMGRmZTUyYmIxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDIyOjMyOjQ3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcXG5pbmRleCBjMWU2ZWE1MmM5ZTU5Li5kZGVkMWE2ZWRkNjA2IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcXG5AQCAtMjc3LDggKzI3Nyw5IEBAIE5ldGZpbHRlclxcbiA9PT09PT09PT1cXG4gXFxuIFRoZSBicmlkZ2UgbmV0ZmlsdGVyIG1vZHVsZSBpcyBhIGxlZ2FjeSBmZWF0dXJlIHRoYXQgYWxsb3dzIHRvIGZpbHRlciBicmlkZ2VkXFxuLXBhY2tldHMgd2l0aCBpcHRhYmxlcyBhbmQgaXA2dGFibGVzLiBJdHMgdXNlIGlzIGRpc2NvdXJhZ2VkLiBVc2VycyBzaG91bGRcXG4tY29uc2lkZXIgdXNpbmcgbmZ0YWJsZXMgZm9yIHBhY2tldCBmaWx0ZXJpbmcuXFxuK3BhY2tldHMgd2l0aCBpcHRhYmxlcyBhbmQgaXA2dGFibGVzLiBUaGlzIGZlYXR1cmUgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsIGFuZFxcbitub3QgYXZhaWxhYmxlIGluIHVzZXIgbmFtZXNwYWNlcy4gQ29uc2lkZXIgdXNpbmcgbmZ0YWJsZXMgZm9yIHBhY2tldCBmaWx0ZXJpbmdcXG4raW5zdGVhZC5cXG4gXFxuIFRoZSBvbGRlciBlYnRhYmxlcyB0b29sIGlzIG1vcmUgZmVhdHVyZS1saW1pdGVkIGNvbXBhcmVkIHRvIG5mdGFibGVzLCBidXRcXG4ganVzdCBsaWtlIG5mdGFibGVzIGl0IGRvZXNuJ3QgbmVlZCB0aGlzIG1vZHVsZSBlaXRoZXIgdG8gZnVuY3Rpb24uXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXFxuaW5kZXggMGEzOTRlNWY0MzkxNi4uZTE1MzU1ZmYyMTVhNyAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY1xcbkBAIC01NCw2ICs1NCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgYnJuZl9uZXRfaWQgX19yZWFkX21vc3RseTtcXG4gXFxuIHN0cnVjdCBicm5mX25ldCB7XFxuIFxcdGJvb2wgZW5hYmxlZDtcXG4rXFx0Ym9vbCBpbl91c2VybnM7XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxcbiBcXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqY3RsX2hkcjtcXG5AQCAtMTEwMCw3ICsxMTAxLDcgQEAgc3RhdGljIGludCBicm5mX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCxcXG4gXFxuIFxcdG5ldCA9IGRldl9uZXQoZGV2KTtcXG4gXFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcXG4tXFx0aWYgKGJybmV0LVxcdTAwM2VlbmFibGVkKVxcbitcXHRpZiAoYnJuZXQtXFx1MDAzZWVuYWJsZWQgfHwgYnJuZXQtXFx1MDAzZWluX3VzZXJucylcXG4gXFx0XFx0cmV0dXJuIE5PVElGWV9PSztcXG4gXFxuIFxcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGJyX25mX29wcywgQVJSQVlfU0laRShicl9uZl9vcHMpKTtcXG5AQCAtMTIyOSw5ICsxMjMwLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRmaWx0ZXJfc3lzY3RsX2RlZmF1bHQoc3RydWN0IGJybmZfbmV0ICpicm5mKVxcbiBcXHRicm5mLVxcdTAwM2VmaWx0ZXJfcHBwb2VfdGFnZ2VkID0gMDtcXG4gXFx0YnJuZi1cXHUwMDNlcGFzc192bGFuX2luZGV2ID0gMDtcXG4gfVxcbisjZW5kaWZcXG4gXFxuIHN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuIHtcXG4rI2lmZGVmIENPTkZJR19TWVNDVExcXG4gXFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGUgPSBicm5mX3RhYmxlO1xcbiBcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xcbiBcXG5AQCAtMTI1OSwyNSArMTI2MiwzOSBAQCBzdGF0aWMgaW50IGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4tXFxuKyNlbmRpZlxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxcbiB7XFxuLVxcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlID0gYnJuZXQtXFx1MDAzZWN0bF9oZHItXFx1MDAzZWN0bF90YWJsZV9hcmc7XFxuKyNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuK1xcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXIgPSBicm5ldC1cXHUwMDNlY3RsX2hkcjtcXG4rXFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuIFxcbi1cXHR1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoYnJuZXQtXFx1MDAzZWN0bF9oZHIpO1xcbitcXHRpZiAoIWhlYWRlcilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0dGFibGUgPSBoZWFkZXItXFx1MDAzZWN0bF90YWJsZV9hcmc7XFxuK1xcdHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShoZWFkZXIpO1xcbiBcXHRpZiAoIW5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpXFxuIFxcdFxcdGtmcmVlKHRhYmxlKTtcXG4rI2VuZGlmXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBicm5mX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4ge1xcbitcXHRpZiAobmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpIHtcXG4rXFx0XFx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xcbitcXG4rXFx0XFx0YnJuZXQtXFx1MDAzZWluX3VzZXJucyA9IHRydWU7XFxuK1xcdFxcdHByX3dhcm5fb25jZShcXFwiYnJfbmV0ZmlsdGVyIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gdXNlciBuYW1lc3BhY2VzXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIFxcdHJldHVybiBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KG5ldCk7XFxuIH1cXG4tI2VuZGlmXFxuIFxcbiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJybmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiB7XFxuQEAgLTEyODksMTUgKzEzMDYsMTEgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0XFx0YnJuZXQtXFx1MDAzZWVuYWJsZWQgPSBmYWxzZTtcXG4gXFx0fVxcbiBcXG4tI2lmZGVmIENPTkZJR19TWVNDVExcXG4gXFx0YnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChuZXQsIGJybmV0KTtcXG4tI2VuZGlmXFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgYnJuZl9uZXRfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLSNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuIFxcdC5pbml0ID0gYnJuZl9pbml0X25ldCxcXG4tI2VuZGlmXFxuIFxcdC5leGl0ID0gYnJuZl9leGl0X25ldCxcXG4gXFx0LmlkICAgPSBcXHUwMDI2YnJuZl9uZXRfaWQsXFxuIFxcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBicm5mX25ldCksXFxuQEAgLTEzMTgsNyArMTMzMSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGJyX25ldGZpbHRlcl9pbml0KHZvaWQpXFxuIFxcdH1cXG4gXFxuIFxcdFJDVV9JTklUX1BPSU5URVIobmZfYnJfb3BzLCBcXHUwMDI2YnJfb3BzKTtcXG4tXFx0cHJpbnRrKEtFUk5fTk9USUNFIFxcXCJCcmlkZ2UgZmlyZXdhbGxpbmcgcmVnaXN0ZXJlZFxcXFxuXFxcIik7XFxuK1xcdHByX3dhcm4oXFxcImJyX25ldGZpbHRlciBpcyBzbGF0ZWQgZm9yIHJlbW92YWwgaW4gMjAyNy5cXFxcblxcXCIpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzI6NDguNTc5NjU1MDJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxNDUzOTY3MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRV9ORVRGSUxURVJcIixcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiTkVURklMVEVSXCIsXG4gICAgXCJVU0VSX05TXCIsXG4gICAgXCJORVRfTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicm5mX2RldmljZV9ldmVudFwiLFxuICAgIFwiYnJuZl9pbml0X25ldFwiLFxuICAgIFwiYnJuZl9leGl0X25ldFwiLFxuICAgIFwiYnJfbmZfaG9va190aHJlc2hcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIGJyaWRnZSBuZXRmaWx0ZXIgaW5pdGlhbGl6YXRpb24gYW5kIGRldmljZSBldmVudCBoYW5kbGluZyB0byBkaXNhYmxlIGJyX25ldGZpbHRlciBhbmQgaXRzIHN5c2N0bCByZWdpc3RyYXRpb24gd2l0aGluIG5vbi1pbml0aWFsIHVzZXIgbmFtZXNwYWNlcy4gVGhpcyBhbHRlcnMgY29yZSBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgYnJpZGdlIGRldmljZSBzZXR1cC90ZWFyZG93biBleGVjdXRpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNDY3MzUxMGEyYTk2YjIxNTY1YjhjZDEwNGFjODMwMGRmZTUyYmIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjI6MzI6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XG5pbmRleCBjMWU2ZWE1MmM5ZTU5Li5kZGVkMWE2ZWRkNjA2IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XG5AQCAtMjc3LDggKzI3Nyw5IEBAIE5ldGZpbHRlclxuID09PT09PT09PVxuIFxuIFRoZSBicmlkZ2UgbmV0ZmlsdGVyIG1vZHVsZSBpcyBhIGxlZ2FjeSBmZWF0dXJlIHRoYXQgYWxsb3dzIHRvIGZpbHRlciBicmlkZ2VkXG4tcGFja2V0cyB3aXRoIGlwdGFibGVzIGFuZCBpcDZ0YWJsZXMuIEl0cyB1c2UgaXMgZGlzY291cmFnZWQuIFVzZXJzIHNob3VsZFxuLWNvbnNpZGVyIHVzaW5nIG5mdGFibGVzIGZvciBwYWNrZXQgZmlsdGVyaW5nLlxuK3BhY2tldHMgd2l0aCBpcHRhYmxlcyBhbmQgaXA2dGFibGVzLiBUaGlzIGZlYXR1cmUgaXMgc2NoZWR1bGVkIGZvciByZW1vdmFsIGFuZFxuK25vdCBhdmFpbGFibGUgaW4gdXNlciBuYW1lc3BhY2VzLiBDb25zaWRlciB1c2luZyBuZnRhYmxlcyBmb3IgcGFja2V0IGZpbHRlcmluZ1xuK2luc3RlYWQuXG4gXG4gVGhlIG9sZGVyIGVidGFibGVzIHRvb2wgaXMgbW9yZSBmZWF0dXJlLWxpbWl0ZWQgY29tcGFyZWQgdG8gbmZ0YWJsZXMsIGJ1dFxuIGp1c3QgbGlrZSBuZnRhYmxlcyBpdCBkb2Vzbid0IG5lZWQgdGhpcyBtb2R1bGUgZWl0aGVyIHRvIGZ1bmN0aW9uLlxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXG5pbmRleCAwYTM5NGU1ZjQzOTE2Li5lMTUzNTVmZjIxNWE3IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY1xuQEAgLTU0LDYgKzU0LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBicm5mX25ldF9pZCBfX3JlYWRfbW9zdGx5O1xuIFxuIHN0cnVjdCBicm5mX25ldCB7XG4gXHRib29sIGVuYWJsZWQ7XG4rXHRib29sIGluX3VzZXJucztcbiBcbiAjaWZkZWYgQ09ORklHX1NZU0NUTFxuIFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmN0bF9oZHI7XG5AQCAtMTEwMCw3ICsxMTAxLDcgQEAgc3RhdGljIGludCBicm5mX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwgdW5zaWduZWQgbG9uZyBldmVudCxcbiBcbiBcdG5ldCA9IGRldl9uZXQoZGV2KTtcbiBcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG4tXHRpZiAoYnJuZXQtXHUwMDNlZW5hYmxlZClcbitcdGlmIChicm5ldC1cdTAwM2VlbmFibGVkIHx8IGJybmV0LVx1MDAzZWluX3VzZXJucylcbiBcdFx0cmV0dXJuIE5PVElGWV9PSztcbiBcbiBcdHJldCA9IG5mX3JlZ2lzdGVyX25ldF9ob29rcyhuZXQsIGJyX25mX29wcywgQVJSQVlfU0laRShicl9uZl9vcHMpKTtcbkBAIC0xMjI5LDkgKzEyMzAsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChzdHJ1Y3QgYnJuZl9uZXQgKmJybmYpXG4gXHRicm5mLVx1MDAzZWZpbHRlcl9wcHBvZV90YWdnZWQgPSAwO1xuIFx0YnJuZi1cdTAwM2VwYXNzX3ZsYW5faW5kZXYgPSAwO1xuIH1cbisjZW5kaWZcbiBcbiBzdGF0aWMgaW50IGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIHtcbisjaWZkZWYgQ09ORklHX1NZU0NUTFxuIFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGUgPSBicm5mX3RhYmxlO1xuIFx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcbiBcbkBAIC0xMjU5LDI1ICsxMjYyLDM5IEBAIHN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuLVxuKyNlbmRpZlxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgc3RydWN0IGJybmZfbmV0ICpicm5ldClcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSA9IGJybmV0LVx1MDAzZWN0bF9oZHItXHUwMDNlY3RsX3RhYmxlX2FyZztcbisjaWZkZWYgQ09ORklHX1NZU0NUTFxuK1x0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWRlciA9IGJybmV0LVx1MDAzZWN0bF9oZHI7XG4rXHRjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTtcbiBcbi1cdHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShicm5ldC1cdTAwM2VjdGxfaGRyKTtcbitcdGlmICghaGVhZGVyKVxuK1x0XHRyZXR1cm47XG4rXG4rXHR0YWJsZSA9IGhlYWRlci1cdTAwM2VjdGxfdGFibGVfYXJnO1xuK1x0dW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKGhlYWRlcik7XG4gXHRpZiAoIW5ldF9lcShuZXQsIFx1MDAyNmluaXRfbmV0KSlcbiBcdFx0a2ZyZWUodGFibGUpO1xuKyNlbmRpZlxuIH1cbiBcbiBzdGF0aWMgaW50IF9fbmV0X2luaXQgYnJuZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuK1x0aWYgKG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9ucykge1xuK1x0XHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XG4rXG4rXHRcdGJybmV0LVx1MDAzZWluX3VzZXJucyA9IHRydWU7XG4rXHRcdHByX3dhcm5fb25jZShcImJyX25ldGZpbHRlciBubyBsb25nZXIgc3VwcG9ydGVkIGluIHVzZXIgbmFtZXNwYWNlc1xcblwiKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4gXHRyZXR1cm4gYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChuZXQpO1xuIH1cbi0jZW5kaWZcbiBcbiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJybmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIHtcbkBAIC0xMjg5LDE1ICsxMzA2LDExIEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYnJuZl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRcdGJybmV0LVx1MDAzZWVuYWJsZWQgPSBmYWxzZTtcbiBcdH1cbiBcbi0jaWZkZWYgQ09ORklHX1NZU0NUTFxuIFx0YnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChuZXQsIGJybmV0KTtcbi0jZW5kaWZcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBicm5mX25ldF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0jaWZkZWYgQ09ORklHX1NZU0NUTFxuIFx0LmluaXQgPSBicm5mX2luaXRfbmV0LFxuLSNlbmRpZlxuIFx0LmV4aXQgPSBicm5mX2V4aXRfbmV0LFxuIFx0LmlkICAgPSBcdTAwMjZicm5mX25ldF9pZCxcbiBcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBicm5mX25ldCksXG5AQCAtMTMxOCw3ICsxMzMxLDcgQEAgc3RhdGljIGludCBfX2luaXQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZClcbiBcdH1cbiBcbiBcdFJDVV9JTklUX1BPSU5URVIobmZfYnJfb3BzLCBcdTAwMjZicl9vcHMpO1xuLVx0cHJpbnRrKEtFUk5fTk9USUNFIFwiQnJpZGdlIGZpcmV3YWxsaW5nIHJlZ2lzdGVyZWRcXG5cIik7XG4rXHRwcl93YXJuKFwiYnJfbmV0ZmlsdGVyIGlzIHNsYXRlZCBmb3IgcmVtb3ZhbCBpbiAyMDI3LlxcblwiKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMyOjQ4LjU3OTY1NjI4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg4MjU4MjIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWNlbnQgTmV0d29yayBCcmlkZ2UgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQgcHJpbWFyaWx5IGltcGFjdHMgaG93IHRoZSBicmlkZ2UgbmV0ZmlsdGVyIGhvb2tzIGJlaGF2ZSB3aXRoaW4gdXNlciBuYW1lc3BhY2VzLiBJIHNlZSB0aGF0IGl0IG1vZGlmaWVzIGJvdGggYG5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmNgIGFuZCBgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RgLCBzbyBpdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYm90aCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLlxuXG5Mb29raW5nIGF0IGBicl9uZXRmaWx0ZXJfaG9va3MuY2AsIHRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBhZGRpdGlvbiBvZiBhIGBib29sIGluX3VzZXJucztgIGZpZWxkIHdpdGhpbiB0aGUgYHN0cnVjdCBicm5mX25ldGAuIFRoaXMgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBUaGUgc3Vic2VxdWVudCBtb2RpZmljYXRpb25zIGluIGBicm5mX2RldmljZV9ldmVudGAgYXJlIHRlbGxpbmcuIEl0IG5vdyBjaGVja3MgZm9yIGVpdGhlciBgYnJuZXQtXHUwMDNlZW5hYmxlZGAgKm9yKiBgYnJuZXQtXHUwMDNlaW5fdXNlcm5zYC4gVGhpcyBpcyBzaWduaWZpY2FudCBiZWNhdXNlIHByZXZpb3VzbHkgaXQgb25seSBjaGVja2VkIGBicm5ldC1cdTAwM2VlbmFibGVkYC4gVGhpcyBjaGFuZ2UgaW1wbGllcyB0aGF0IHdpdGhpbiBhIHVzZXIgbmFtZXNwYWNlIChkZWZpbmVkIGFzIGBuZXQtXHUwMDNldXNlcl9ucyAhPSBcdTAwMjZpbml0X3VzZXJfbnNgKSwgdGhlIGBicl9uZl9vcHNgIGFyZSAqbm90KiByZWdpc3RlcmVkIHdoZW4gYSBicmlkZ2UgZGV2aWNlIGlzIGNyZWF0ZWQgb3IgcmVnaXN0ZXJlZC4gVGhhdCdzIGEgY3JpdGljYWwgZGlmZmVyZW5jZS5cblxuRnVydGhlcm1vcmUsIGBicm5mX2luaXRfbmV0YCBpcyBub3cgYWx3YXlzIGNhbGxlZCwgcmVnYXJkbGVzcyBvZiB0aGUgYENPTkZJR19TWVNDVExgIG9wdGlvbiwgd2hpY2ggaXMgYSBkZXBhcnR1cmUgZnJvbSBwcmV2aW91cyBiZWhhdmlvci4gSSdtIG5vdGluZyB0aGF0IGluIGBicm5mX2luaXRfbmV0YCwgaWYgdGhlIGNvZGUgZGV0ZWN0cyB0aGF0IHdlJ3JlIHdpdGhpbiBhIHVzZXIgbmFtZXNwYWNlLCBpdCBzZXRzIGBicm5ldC1cdTAwM2Vpbl91c2VybnMgPSB0cnVlO2AgYW5kIGlzc3VlcyBhIHdhcm5pbmcuIEl0IGFsc28gc2tpcHMgdGhlIGNhbGwgdG8gYGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQobmV0KWAuIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHBhdGNoIGFpbXMgdG8gaXNvbGF0ZSBvciBjb250cm9sIHRoZSBzeXNjdGwgc2V0dGluZ3MgcmVsYXRlZCB0byBuZXRmaWx0ZXIgd2l0aGluIHVzZXIgbmFtZXNwYWNlcy5cblxuVGhlIGNoYW5nZXMgaW4gYGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXRgIHdpdGggdGhlIGBpZiAoIWhlYWRlcikgcmV0dXJuO2AgY2hlY2sgYXJlIGltcG9ydGFudCwgYnV0IG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIEl0IGxvb2tzIGxpa2UgYG5ldC9icmlkZ2UvS2NvbmZpZ2AsIGBuZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnYCwgb3IgYG5ldC9LY29uZmlnYCBtaWdodCBjb250YWluIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGRldGFpbHMgZm9yIGBicl9uZXRmaWx0ZXJgLiBJJ2xsIHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzI6NTQuNDYyMjQyMzgyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDMwODAxMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQlJJREdFX05FVEZJTFRFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnPTE0Nz1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnOjE0ODpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxuYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZy0xNDktQ09ORklHX05GX0NPTk5UUkFDSz1tXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnPTE2Mz1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uMzJfZGVmY29uZmlnOjE2NDpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjMyX2RlZmNvbmZpZy0xNjUtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnPTE3OT1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL2xvb25nYXJjaC9jb25maWdzL2xvb25nc29uNjRfZGVmY29uZmlnOjE4MDpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxuYXJjaC9sb29uZ2FyY2gvY29uZmlncy9sb29uZ3NvbjY0X2RlZmNvbmZpZy0xODEtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9ibWlwc19zdGJfZGVmY29uZmlnPTc1PUNPTkZJR19CUklER0U9eVxcbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWc6NzY6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvbWlwcy9jb25maWdzL2JtaXBzX3N0Yl9kZWZjb25maWctNzctQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9sb29uZ3NvbjNfZGVmY29uZmlnPTYxPUNPTkZJR19ORVRGSUxURVI9eVxcbmFyY2gvbWlwcy9jb25maWdzL2xvb25nc29uM19kZWZjb25maWc6NjI6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvbWlwcy9jb25maWdzL2xvb25nc29uM19kZWZjb25maWctNjMtQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tXFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9yYjUzMl9kZWZjb25maWc9NDc9Q09ORklHX05FVEZJTFRFUj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcmI1MzJfZGVmY29uZmlnOjQ4OiMgQ09ORklHX0JSSURHRV9ORVRGSUxURVIgaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL3JiNTMyX2RlZmNvbmZpZy00OS1DT05GSUdfTkZfQ09OTlRSQUNLPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL3J0MzA1eF9kZWZjb25maWc9NDQ9Q09ORklHX05FVEZJTFRFUj15XFxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZzo0NTojIENPTkZJR19CUklER0VfTkVURklMVEVSIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnLTQ2LUNPTkZJR19ORl9DT05OVFJBQ0s9bVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc9NDY9Q09ORklHX05FVEZJTFRFUj15XFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc6NDc6IyBDT05GSUdfQlJJREdFX05FVEZJTFRFUiBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWctNDgtQ09ORklHX05GX0NPTk5UUkFDSz1tXFxuLS1cXG5hcmNoL3Jpc2N2L2NvbmZpZ3MvZGVmY29uZmlnPTY2PUNPTkZJR19ORVRGSUxURVI9eVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWc6Njc6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvcmlzY3YvY29uZmlncy9kZWZjb25maWctNjgtQ09ORklHX05GX0NPTk5UUkFDSz1tXFxuLS1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWJ1Z19kZWZjb25maWc9MTgwPUNPTkZJR19ORVRGSUxURVI9eVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZzoxODE6Q09ORklHX0JSSURHRV9ORVRGSUxURVI9bVxcbmFyY2gvczM5MC9jb25maWdzL2RlYnVnX2RlZmNvbmZpZy0xODItQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0hPT0s9bVxcbi0tXFxuYXJjaC9zMzkwL2NvbmZpZ3MvZGVmY29uZmlnPTE3MT1DT05GSUdfTkVURklMVEVSPXlcXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWc6MTcyOkNPTkZJR19CUklER0VfTkVURklMVEVSPW1cXG5hcmNoL3MzOTAvY29uZmlncy9kZWZjb25maWctMTczLUNPTkZJR19ORVRGSUxURVJfTkVUTElOS19IT09LPW1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDoyOiNpZm5kZWYgX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDozOiNkZWZpbmUgX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC00LVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg9OD1zdHJ1Y3QgbmZfYnJpZGdlX2ZyYWdfZGF0YSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0xNC1cXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaDoxNTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC0xNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPTgyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZl9icmlkZ2VfaW5fcHJlcm91dGluZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtODUtfVxcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjg2OiNlbmRpZiAvKiBDT05GSUdfQlJJREdFX05FVEZJTFRFUiAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTg3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD0yODU9c3RydWN0IHRzX2NvbmZpZztcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI4Ni1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjI4NzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTI4OC1zdHJ1Y3QgbmZfYnJpZGdlX2luZm8ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaD01MDM4PWVudW0gc2tiX2V4dF9pZCB7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo1MDM5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtNTA0MC1cXHRTS0JfRVhUX0JSSURHRV9ORixcXG4tLVxcbmluY2x1ZGUvbmV0L25laWdoYm91ci5oPTQ4ND1zdGF0aWMgaW5saW5lIGludCBuZWlnaF9ldmVudF9zZW5kKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgtNDg4LVxcbmluY2x1ZGUvbmV0L25laWdoYm91ci5oOjQ4OTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL25ldC9uZWlnaGJvdXIuaC00OTAtc3RhdGljIGlubGluZSBpbnQgbmVpZ2hfaGhfYnJpZGdlKHN0cnVjdCBoaF9jYWNoZSAqaGgsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg9OT1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlX2FsbG9jKHN0cnVjdCBza19idWZmICpza2IpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTEwLXtcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmg6MTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oLTEyLVxcdHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqYiA9IHNrYl9leHRfYWRkKHNrYiwgU0tCX0VYVF9CUklER0VfTkYpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2JyX25ldGZpbHRlci5oPTQzPXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0YWJsZSAqYnJpZGdlX3BhcmVudF9ydGFibGUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtNDQte1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9icl9uZXRmaWx0ZXIuaDo0NTojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvYnJfbmV0ZmlsdGVyLmgtNDYtXFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydDtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5oPTEzPXN0cnVjdCBuZl9xdWV1ZV9lbnRyeSB7XFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuaC0xOS1cXHR1bnNpZ25lZCBpbnRcXHRcXHRob29rX2luZGV4O1xcdC8qIGluZGV4IGluIGhvb2tfZW50cmllcy1cXHUwMDNlaG9va1tdICovXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmg6MjA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmgtMjEtXFx0c3RydWN0IG5ldF9kZXZpY2VcXHQqYnJpZGdlX2RldjtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6MjojaWZuZGVmIF9VQVBJX19MSU5VWF9CUklER0VfTkVURklMVEVSX0hcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oOjM6I2RlZmluZSBfVUFQSV9fTElOVVhfQlJJREdFX05FVEZJTFRFUl9IXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaC00LVxcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD0zND1lbnVtIG5mX2JyX2hvb2tfcHJpb3JpdGllcyB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oLTQ0LVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmg6NDU6I2VuZGlmIC8qIF9VQVBJX19MSU5VWF9CUklER0VfTkVURklMVEVSX0ggKi9cXG4tLVxcbm5ldC9LY29uZmlnPTIyMD1jb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXFxuLS1cXG5uZXQvS2NvbmZpZy0yMzAtXFxubmV0L0tjb25maWc6MjMxOmNvbmZpZyBCUklER0VfTkVURklMVEVSXFxubmV0L0tjb25maWctMjMyLVxcdHRyaXN0YXRlIFxcXCJCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvTWFrZWZpbGU9MTM9YnJpZGdlLSQoQ09ORklHX1NZU0ZTKSArPSBicl9zeXNmc19pZi5vIGJyX3N5c2ZzX2JyLm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTE0LVxcbm5ldC9icmlkZ2UvTWFrZWZpbGU6MTU6YnJpZGdlLSQoc3Vic3QgbSx5LCQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpKSArPSBicl9uZl9jb3JlLm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlLTE2LVxcbi0tXFxubmV0L2JyaWRnZS9NYWtlZmlsZT0xOD1icl9uZXRmaWx0ZXItJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpICs9IGJyX25ldGZpbHRlcl9pcHY2Lm9cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19CUklER0VfTkVURklMVEVSKSArPSBicl9uZXRmaWx0ZXIub1xcbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjAtXFxuLS1cXG5uZXQvYnJpZGdlL2JyLmM9NDI1PXN0YXRpYyBpbnQgX19pbml0IGJyX2luaXQodm9pZClcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy00NjYtXFxubmV0L2JyaWRnZS9ici5jOjQ2NzojaWYgSVNfTU9EVUxFKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnIuYy00NjgtXFx0cHJfaW5mbyhcXFwiYnJpZGdlOiBmaWx0ZXJpbmcgdmlhIGFycC9pcC9pcDZ0YWJsZXMgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSBcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTIwND1zdGF0aWMgaW50IGJyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTIxMS1cXHRicl9vcHRfdG9nZ2xlKGJyLCBCUk9QVF9NVFVfU0VUX0JZX1VTRVIsIHRydWUpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MjEyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMjEzLVxcdC8qIHJlbWVtYmVyIHRoZSBNVFUgaW4gdGhlIHJ0YWJsZSBmb3IgUE1UVSAqL1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTI5NT1zdGF0aWMgaW50IGJyX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTU1NC0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNTU1OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE1NTYtXFx0aWYgKGRhdGFbSUZMQV9CUl9ORl9DQUxMX0lQVEFCTEVTXSkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM9MTYxOT1zdGF0aWMgc2l6ZV90IGJyX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE2NjctI2VuZGlmXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmM6MTY2ODojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYy0xNjY5LVxcdCAgICAgICBubGFfdG90YWxfc2l6ZShzaXplb2YodTgpKSArICAgICAvKiBJRkxBX0JSX05GX0NBTExfSVBUQUJMRVMgKi9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jPTE2Nzg9c3RhdGljIGludCBicl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRsaW5rLmMtMTc5MS0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX25ldGxpbmsuYzoxNzkyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfbmV0bGluay5jLTE3OTMtXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSX05GX0NBTExfSVBUQUJMRVMsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD01MDA9c3RydWN0IG5ldF9icmlkZ2Uge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNTE0LVxcdHN0cnVjdCBsaXN0X2hlYWRcXHRcXHRwb3J0X2xpc3Q7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NTE1OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTUxNi1cXHR1bmlvbiB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0yMDIzPWV4dGVybiBjb25zdCBzdHJ1Y3QgbmZfYnJfb3BzIF9fcmN1ICpuZl9icl9vcHM7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDI1LS8qIGJyX25ldGZpbHRlci5jICovXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MjAyNjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0yMDI3LWludCBicl9uZl9jb3JlX2luaXQodm9pZCk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM9NzcxPXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhtdWx0aWNhc3RfbWxkX3ZlcnNpb24pO1xcbi0tXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTc3My0jZW5kaWZcXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmM6Nzc0OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYy03NzUtc3RhdGljIHNzaXplX3QgbmZfY2FsbF9pcHRhYmxlc19zaG93KFxcbi0tXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jPTkzNT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYnJpZGdlX2F0dHJzW10gPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMtOTc2LSNlbmRpZlxcbm5ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYzo5Nzc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2JyaWRnZS9icl9zeXNmc19ici5jLTk3OC1cXHRcXHUwMDI2ZGV2X2F0dHJfbmZfY2FsbF9pcHRhYmxlcy5hdHRyLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTE1MD1zdGF0aWMgY29uc3QgdTggc2tiX2V4dF90eXBlX2xlbltdID0ge1xcbm5ldC9jb3JlL3NrYnVmZi5jOjUxNTE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2NvcmUvc2tidWZmLmMtNTE1Mi1cXHRbU0tCX0VYVF9CUklER0VfTkZdID0gU0tCX0VYVF9DSFVOS1NJWkVPRihzdHJ1Y3QgbmZfYnJpZGdlX2luZm8pLFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYy0xOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1JFSkVDVC5oXFx1MDAzZVxcbm5ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmM6MjA6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYy0yMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmM9MjczPXZvaWQgbmZfc2VuZF9yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKm9sZHNrYixcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZl9yZWplY3RfaXB2NC5jLTMxMy1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjQuYzozMTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY0LmMtMzE1LVxcdC8qIElmIHdlIHVzZSBpcF9sb2NhbF9vdXQgZm9yIGJyaWRnZWQgdHJhZmZpYywgdGhlIE1BQyBzb3VyY2Ugb25cXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jPTMxMz12b2lkIG5mX3NlbmRfcmVzZXQ2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiLFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX3JlamVjdF9pcHY2LmMtMzgyLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9yZWplY3RfaXB2Ni5jOjM4MzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfcmVqZWN0X2lwdjYuYy0zODQtXFx0LyogSWYgd2UgdXNlIGlwNl9sb2NhbF9vdXQgZm9yIGJyaWRnZWQgdHJhZmZpYywgdGhlIE1BQyBzb3VyY2Ugb25cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xNDg1PWNvbmZpZyBORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xNDg2LVxcdHRyaXN0YXRlICdcXFwicGh5c2RldlxcXCIgbWF0Y2ggc3VwcG9ydCdcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTQ4NzpcXHRkZXBlbmRzIG9uIEJSSURHRSBcXHUwMDI2XFx1MDAyNiBCUklER0VfTkVURklMVEVSXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTE0ODgtXFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYz0xMjg9aGFzaF9uZXRpZmFjZTRfZGF0YV9uZXh0KHN0cnVjdCBoYXNoX25ldGlmYWNlNF9lbGVtICpuZXh0LFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTEzOC1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6MTM5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0xNDAtc3RhdGljIGNvbnN0IGNoYXIgKmdldF9waHlzaW5kZXZfbmFtZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM9MTU2PWhhc2hfbmV0aWZhY2U0X2thZHQoc3RydWN0IGlwX3NldCAqc2V0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTE3Ny1cXHRpZiAob3B0LVxcdTAwM2VjbWRmbGFncyBcXHUwMDI2IElQU0VUX0ZMQUdfUEhZU0RFVikge1xcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYzoxNzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jLTE3OS1cXHRcXHRjb25zdCBjaGFyICplaWZhY2UgPSBTUkNESVIgPyBnZXRfcGh5c2luZGV2X25hbWUoc2tiLCB4dF9uZXQocGFyKSkgOlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRpZmFjZS5jPTM3Nz1oYXNoX25ldGlmYWNlNl9rYWR0KHN0cnVjdCBpcF9zZXQgKnNldCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zOTUtXFx0aWYgKG9wdC1cXHUwMDNlY21kZmxhZ3MgXFx1MDAyNiBJUFNFVF9GTEFHX1BIWVNERVYpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldGlmYWNlLmM6Mzk2OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0aWZhY2UuYy0zOTctXFx0XFx0Y29uc3QgY2hhciAqZWlmYWNlID0gU1JDRElSID8gZ2V0X3BoeXNpbmRldl9uYW1lKHNrYiwgeHRfbmV0KHBhcikpIDpcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jPTExMz1uZl9sb2dfZHVtcF9wYWNrZXRfY29tbW9uKHN0cnVjdCBuZl9sb2dfYnVmICptLCB1OCBwZixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jLTEyNi1cXHRcXHRcXHRvdXQgPyBvdXQtXFx1MDAzZW5hbWUgOiBcXFwiXFxcIik7XFxubmV0L25ldGZpbHRlci9uZl9sb2dfc3lzbG9nLmM6MTI3OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZfbG9nX3N5c2xvZy5jLTEyOC1cXHRwaHlzaW5kZXYgPSBuZl9icmlkZ2VfZ2V0X3BoeXNpbmRldihza2IsIG5ldCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmM9NTk9c3RhdGljIHZvaWQgbmZfcXVldWVfZW50cnlfcmVsZWFzZV9yZWZzKHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtNjktXFxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jOjcwOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy03MS1cXHRkZXZfcHV0KGVudHJ5LVxcdTAwM2VicmlkZ2VfZGV2KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYz04ND1zdGF0aWMgdm9pZCBfX25mX3F1ZXVlX2VudHJ5X2luaXRfcGh5c2RldnMoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtODUte1xcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYzo4NjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtODctXFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGVudHJ5LVxcdTAwM2Vza2I7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmM9MTEyPWJvb2wgbmZfcXVldWVfZW50cnlfZ2V0X3JlZnMoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYy0xMjItXFxubmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jOjEyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMtMTI0LVxcdGRldl9ob2xkKGVudHJ5LVxcdTAwM2VicmlkZ2VfZGV2KTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQxLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjQyOiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQzLSNpbmNsdWRlIFxcXCIuLi9icmlkZ2UvYnJfcHJpdmF0ZS5oXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM9NDIyPXN0YXRpYyBpbnQgbmZ1bG5sX3B1dF9icmlkZ2Uoc3RydWN0IG5mdWxubF9pbnN0YW5jZSAqaW5zdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTQ1My1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYzo0NTQ6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNDU1LXN0YXRpYyBpbnQgbmZsb2dfcHV0X21hc3Rlcl9pZmluZGV4KHN0cnVjdCBza19idWZmICpubHNrYiwgaW50IGF0dHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYz00NzQ9X19idWlsZF9wYWNrZXRfbWVzc2FnZShzdHJ1Y3QgbmZubF9sb2dfbmV0ICpsb2csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01MDktXFx0aWYgKGluZGV2KSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NTEwOiNpZiAhSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01MTEtXFx0XFx0aWYgKG5sYV9wdXRfYmUzMihpbnN0LVxcdTAwM2Vza2IsIE5GVUxBX0lGSU5ERVhfSU5ERVYsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy01NDUtXFx0aWYgKG91dGRldikge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jOjU0NjojaWYgIUlTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMtNTQ3LVxcdFxcdGlmIChubGFfcHV0X2JlMzIoaW5zdC1cXHUwMDNlc2tiLCBORlVMQV9JRklOREVYX09VVERFVixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jPTcxOD1uZnVsbmxfbG9nX3BhY2tldChzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYy03NTYtXFx0XFx0KyBubGFfdG90YWxfc2l6ZShzaXplb2YodV9pbnQzMl90KSlcXHQvKiBpZmluZGV4ICovXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmM6NzU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jLTc1OC1cXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZih1X2ludDMyX3QpKVxcdC8qIGlmaW5kZXggKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNDktXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo1MDojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTUxLSNpbmNsdWRlIFxcXCIuLi9icmlkZ2UvYnJfcHJpdmF0ZS5oXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz00Njc9c3RhdGljIGJvb2wgbmZfYnJpZGdlX3BvcnRzX3ZhbGlkKGNvbnN0IHN0cnVjdCBuZl9xdWV1ZV9lbnRyeSAqZW50cnkpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy00Njgte1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NDY5OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNDcwLVxcdGlmICghbmZfYnJpZGdlX3BvcnRfdmFsaWQoZW50cnktXFx1MDAzZXBoeXNpbikgfHxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9Njc1PXN0YXRpYyBpbnQgbmZfcXVldWVfY2hlY2tzdW1faGVscChzdHJ1Y3Qgc2tfYnVmZiAqZW50c2tiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02ODItXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo2ODM6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy02ODQtc3RhdGljIGludCBuZnFubF9wdXRfbWFzdGVyX2lmaW5kZXgoc3RydWN0IHNrX2J1ZmYgKm5sc2tiLCBpbnQgYXR0cixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzEyPW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzM3LVxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHVfaW50MzJfdCkpXFx0LyogaWZpbmRleCAqL1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6NzM4OiNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtNzM5LVxcdFxcdCsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHVfaW50MzJfdCkpXFx0LyogaWZpbmRleCAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MzItXFx0aWYgKGluZGV2KSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4MzM6I2lmICFJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODM0LVxcdFxcdGlmIChubGFfcHV0X2JlMzIoc2tiLCBORlFBX0lGSU5ERVhfSU5ERVYsIGh0b25sKGluZGV2LVxcdTAwM2VpZmluZGV4KSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTg2My1cXHRpZiAob3V0ZGV2KSB7XFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYzo4NjQ6I2lmICFJU19FTkFCTEVEKENPTkZJR19CUklER0VfTkVURklMVEVSKVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODY1LVxcdFxcdGlmIChubGFfcHV0X2JlMzIoc2tiLCBORlFBX0lGSU5ERVhfT1VUREVWLCBodG9ubChvdXRkZXYtXFx1MDAzZWlmaW5kZXgpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9MTA0OD1uZl9xdWV1ZV9lbnRyeV9kdXAoc3RydWN0IG5mX3F1ZXVlX2VudHJ5ICplKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xMDYxLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6MTA2MjojaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUilcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTEwNjMtLyogV2hlbiBjYWxsZWQgZnJvbSBicmlkZ2UgbmV0ZmlsdGVyLCBza2ItXFx1MDAzZWRhdGEgbXVzdCBwb2ludCB0byBNQUMgaGVhZGVyXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jPTE0OTk9ZGV2X2NtcChzdHJ1Y3QgbmZfcXVldWVfZW50cnkgKmVudHJ5LCB1bnNpZ25lZCBsb25nIGlmaW5kZXgpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNTAwLXtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjE1MDE6I2lmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy0xNTAyLVxcdGludCBwaHlzaW5pZiwgcGh5c291dGlmO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWc9Nz1DT05GSUdfQlJJREdFX0VCVF9UX0ZJTFRFUj1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWc6ODpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L25ldGZpbHRlci9jb25maWctOS1DT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzI6NTYuNzA1MzI4NDM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTExNDg5OTk2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgYnJfbmV0ZmlsdGVyX2hvb2tzLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgY2hhbmdlcyBhcmUgaW1wYWN0aW5nIHRoZSBicmlkZ2UgbmV0ZmlsdGVyIGhvb2tzLiBUaW1lIHRvIGNyYWNrIG9wZW4gYG5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gSSdtIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCBob3cgdGhlIGhvb2tzIGFyZSBiZWluZyBtYW5pcHVsYXRlZCwgYW5kIGhvdyBpdCBhbGwgaGFuZ3MgdG9nZXRoZXIuIEnigJltIHRoaW5raW5nIEkgd2lsbCBmb2N1cyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgY29kZSBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgbmV0ZmlsdGVyIGZyYW1ld29yayB3aXRoaW4gdGhlIGJyaWRnaW5nIGNvbnRleHQuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyB3aWxsIGJlLiBMZXTigJlzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcwMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMzOjA3Ljg1NDMzMDY1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODU6XFx0XFx0XFx0LnByaW9yaXR5ID0gTkZfSVA2X1BSSV9GSVJTVCxcXG4xMDg2OlxcdFxcdH0sXFxuMTA4NzpcXHR9O1xcbjEwODg6XFx0XFxuMTA4OTpcXHRzdGF0aWMgaW50IGJybmZfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbjEwOTA6XFx0XFx0XFx0XFx0ICAgICB2b2lkICpwdHIpXFxuMTA5MTpcXHR7XFxuMTA5MjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XFxuMTA5MzpcXHRcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xcbjEwOTQ6XFx0XFx0c3RydWN0IG5ldCAqbmV0O1xcbjEwOTU6XFx0XFx0aW50IHJldDtcXG4xMDk2OlxcdFxcbjEwOTc6XFx0XFx0aWYgKGV2ZW50ICE9IE5FVERFVl9SRUdJU1RFUiB8fCAhbmV0aWZfaXNfYnJpZGdlX21hc3RlcihkZXYpKVxcbjEwOTg6XFx0XFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbjEwOTk6XFx0XFxuMTEwMDpcXHRcXHRBU1NFUlRfUlROTCgpO1xcbjExMDE6XFx0XFxuMTEwMjpcXHRcXHRuZXQgPSBkZXZfbmV0KGRldik7XFxuMTEwMzpcXHRcXHRicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xcbjExMDQ6XFx0XFx0aWYgKGJybmV0LVxcdTAwM2VlbmFibGVkIHx8IGJybmV0LVxcdTAwM2Vpbl91c2VybnMpXFxuMTEwNTpcXHRcXHRcXHRyZXR1cm4gTk9USUZZX09LO1xcbjExMDY6XFx0XFxuMTEwNzpcXHRcXHRyZXQgPSBuZl9yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBicl9uZl9vcHMsIEFSUkFZX1NJWkUoYnJfbmZfb3BzKSk7XFxuMTEwODpcXHRcXHRpZiAocmV0KVxcbjExMDk6XFx0XFx0XFx0cmV0dXJuIE5PVElGWV9CQUQ7XFxuMTExMDpcXHRcXG4xMTExOlxcdFxcdGJybmV0LVxcdTAwM2VlbmFibGVkID0gdHJ1ZTtcXG4xMTEyOlxcdFxcdHJldHVybiBOT1RJRllfT0s7XFxuMTExMzpcXHR9XFxuMTExNDpcXHRcXG4xMTE1OlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYnJuZl9ub3RpZmllciBfX3JlYWRfbW9zdGx5ID0ge1xcbjExMTY6XFx0XFx0Lm5vdGlmaWVyX2NhbGwgPSBicm5mX2RldmljZV9ldmVudCxcXG4xMTE3OlxcdH07XFxuMTExODpcXHRcXG4xMTE5OlxcdC8qIHJlY3Vyc2l2ZWx5IGludm9rZXMgbmZfaG9va19zbG93IChhZ2FpbiksIHNraXBwaW5nIGFscmVhZHktY2FsbGVkXFxuMTEyMDpcXHQgKiBob29rcyAoXFx1MDAzYyBORl9CUl9QUklfQlJORikuXFxuMTEyMTpcXHQgKlxcbjExMjI6XFx0ICogQ2FsbGVkIHdpdGggcmN1IHJlYWQgbG9jayBoZWxkLlxcbjExMjM6XFx0ICovXFxuMTEyNDpcXHRpbnQgYnJfbmZfaG9va190aHJlc2godW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBuZXQgKm5ldCxcXG4xMTI1OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4xMTI2OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICppbmRldixcXG4xMTI3OlxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvdXRkZXYsXFxuMTEyODpcXHRcXHRcXHQgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3QgbmV0ICosIHN0cnVjdCBzb2NrICosXFxuMTEyOTpcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICopKVxcbjExMzA6XFx0e1xcbjExMzE6XFx0XFx0Y29uc3Qgc3RydWN0IG5mX2hvb2tfZW50cmllcyAqZTtcXG4xMTMyOlxcdFxcdHN0cnVjdCBuZl9ob29rX3N0YXRlIHN0YXRlO1xcbjExMzM6XFx0XFx0c3RydWN0IG5mX2hvb2tfb3BzICoqb3BzO1xcbjExMzQ6XFx0XFx0dW5zaWduZWQgaW50IGk7XFxuMTEzNTpcXHRcXHRpbnQgcmV0O1xcbjExMzY6XFx0XFxuMTEzNzpcXHRcXHRlID0gcmN1X2RlcmVmZXJlbmNlKG5ldC1cXHUwMDNlbmYuaG9va3NfYnJpZGdlW2hvb2tdKTtcXG4xMTM4OlxcdFxcdGlmICghZSlcXG4xMTM5OlxcdFxcdFxcdHJldHVybiBva2ZuKG5ldCwgc2ssIHNrYik7XFxuMTE0MDpcXHRcXG4xMTQxOlxcdFxcdG9wcyA9IG5mX2hvb2tfZW50cmllc19nZXRfaG9va19vcHMoZSk7XFxuMTE0MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZS1cXHUwMDNlbnVtX2hvb2tfZW50cmllczsgaSsrKSB7XFxuMTE0MzpcXHRcXHRcXHQvKiBUaGVzZSBob29rcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgKi9cXG4xMTQ0OlxcdFxcdFxcdGlmIChvcHNbaV0tXFx1MDAzZXByaW9yaXR5IFxcdTAwM2MgTkZfQlJfUFJJX0JSTkYpXFxuMTE0NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMTQ2OlxcdFxcbjExNDc6XFx0XFx0XFx0LyogVGhlc2UgaG9va3MgaGF2ZSBub3QgYmVlbiBjYWxsZWQgeWV0LCBydW4gdGhlbS4gKi9cXG4xMTQ4OlxcdFxcdFxcdGlmIChvcHNbaV0tXFx1MDAzZXByaW9yaXR5IFxcdTAwM2UgTkZfQlJfUFJJX0JSTkYpXFxuMTE0OTpcXHRcXHRcXHRcXHRicmVhaztcXG4xMTUwOlxcdFxcbjExNTE6XFx0XFx0XFx0LyogdGFrZSBhIGNsb3NlciBsb29rIGF0IE5GX0JSX1BSSV9CUk5GLiAqL1xcbjExNTI6XFx0XFx0XFx0aWYgKG9wc1tpXS1cXHUwMDNlaG9vayA9PSBicl9uZl9wcmVfcm91dGluZykge1xcbjExNTM6XFx0XFx0XFx0XFx0LyogVGhpcyBob29rIGRpdmVydGVkIHRoZSBza2IgdG8gdGhpcyBmdW5jdGlvbixcXG4xMTU0OlxcdFxcdFxcdFxcdCAqIGhvb2tzIGFmdGVyIHRoaXMgaGF2ZSBub3QgYmVlbiBydW4geWV0LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzowNy44NTQ1MDI1MTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDY5NTE1MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCBJJ2QgYmUgdGhpbmtpbmcgYXMgSSBleGFtaW5lIHRob3NlIGxpbmVzIG9mIGNvZGUsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBhbmQgYXNzdW1pbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gYGJyX25ldGZpbHRlcl9ob29rcy5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGd1dHMgb2YgdGhlIGJyaWRnaW5nIG5ldGZpbHRlciBob29rcy4gSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgMTIyMCB0byAxMzQwIG9mIGBicl9uZXRmaWx0ZXJfaG9va3MuY2AuIEkgZXhwZWN0IHRoaXMgc2VjdGlvbiBkZWFscyB3aXRoIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyB0aGUgYnJpZGdlIGludGVyYWN0cyB3aXRoIHRoZSBuZXRmaWx0ZXIgZnJhbWV3b3JrLCBwcm9iYWJseSBmaWx0ZXJpbmcgb3IgbWFuaXB1bGF0aW5nIHBhY2tldHMgYXMgdGhleSB0cmF2ZXJzZSB0aGUgYnJpZGdlLlxuXG5TcGVjaWZpY2FsbHksIEknbSBhbnRpY2lwYXRpbmcgdGhpcyBhcmVhIGNvbnRhaW5zIHRoZSBjcnVjaWFsIHJlZ2lzdHJhdGlvbiBvciB1bnJlZ2lzdHJhdGlvbiBsb2dpYyBmb3Igc3BlY2lmaWMgbmV0ZmlsdGVyIGhvb2tzIHVzZWQgd2l0aGluIHRoZSBicmlkZ2luZyBjb250ZXh0LiBQZXJoYXBzIGl0IGRlZmluZXMgdGhlIHByaW9yaXRpZXMgb2YgdGhvc2UgaG9va3MgcmVsYXRpdmUgdG8gb3RoZXIgbmV0ZmlsdGVyIGNvbXBvbmVudHM7IG9yIHRoZSBhY3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aG9zZSBuZXRmaWx0ZXIgcnVsZXMuIEknbSBrZWVuIHRvIHNlZSBpZiBpdCBtYWtlcyB1c2Ugb2Ygc3BlY2lmaWMgbmV0ZmlsdGVyIG1vZHVsZXMgb3IgZXh0ZW5zaW9ucyB0aGF0IGFyZSBicmlkZ2Utc3BlY2lmaWMuIEknbGwgYmUgbG9va2luZyBmb3Igd2hlcmUgcGFja2V0IG1hbmdsaW5nLCBOQVQsIG9yIGNvbm5lY3Rpb24gdHJhY2tpbmcgYXJlIGludGVncmF0ZWQgaW50byB0aGUgYnJpZGdlJ3Mgb3BlcmF0aW9uIOKAkyB0aGF0J3Mgb2Z0ZW4gYSBrZXkgYXJlYSBmb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLlxuXG5JJ2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFsIHN0YXRlbWVudHMuIEl0J3MgbGlrZWx5IHRoYXQgcGFydHMgb2YgdGhpcyBzZWN0aW9uIGhhbmRsZSBkaWZmZXJlbnQgYnJpZGdlIG1vZGVzIG9yIGNvbmZpZ3VyYXRpb25zIChlLmcuLCBzcGFubmluZy10cmVlLCBtdWx0aWNhc3Qgc25vb3BpbmcsIG9yIFZMQU4gaGFuZGxpbmcpLiBJJ2xsIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldGZpbHRlciBob29rcyBhcmUgYWRhcHRlZCBiYXNlZCBvbiB0aGUgYnJpZGdlJ3MgY3VycmVudCBvcGVyYXRpb25hbCBzdGF0ZS4gSSdsbCBhbHNvIGxvb2sgZm9yIGhvdyB0aGVzZSBob29rcyByZWxhdGUgdG8gaW5ncmVzcyBhbmQgZWdyZXNzIHBhY2tldCBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgYnJpZGdlLiBEb2VzIGl0IGZvbGxvdyBhIGNsZWFyLCB3ZWxsLWRlZmluZWQgcGF0aCwgb3IgaXMgaXQgYSBiaXQgbWVzc3k/XG5cbkZpbmFsbHksIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIG5ldGZpbHRlciBmdW5jdGlvbnMgbGlrZSBgbmZfaG9va19vcHNgLCBgbmZfcmVnaXN0ZXJfaG9va2AsIG9yIGBuZl91bnJlZ2lzdGVyX2hvb2tgLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoZWlyIGFyZ3VtZW50cyBhbmQgYW55IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgZm9yIHBhc3NpbmcgaW5mb3JtYXRpb24gYmV0d2VlbiB0aGUgYnJpZGdlIGFuZCBuZXRmaWx0ZXIuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZGF0YSBzdHJ1Y3R1cmVzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgcGFja2V0IGluZm9ybWF0aW9uIGlzIGV4cG9zZWQgKG9yIGhpZGRlbikgdG8gdGhlIGhvb2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk4MSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzM6MTEuOTI0MDIwNzE5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIyMCxcbiAgXCJMaW5lQ291bnRcIjogMTIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMjA6XFx0XFx0XFx0LnByb2NfaGFuZGxlclxcdD0gYnJuZl9zeXNjdGxfY2FsbF90YWJsZXMsXFxuMTIyMTpcXHRcXHR9LFxcbjEyMjI6XFx0fTtcXG4xMjIzOlxcdFxcbjEyMjQ6XFx0c3RhdGljIGlubGluZSB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChzdHJ1Y3QgYnJuZl9uZXQgKmJybmYpXFxuMTIyNTpcXHR7XFxuMTIyNjpcXHRcXHRicm5mLVxcdTAwM2VjYWxsX2lwdGFibGVzID0gMTtcXG4xMjI3OlxcdFxcdGJybmYtXFx1MDAzZWNhbGxfaXA2dGFibGVzID0gMTtcXG4xMjI4OlxcdFxcdGJybmYtXFx1MDAzZWNhbGxfYXJwdGFibGVzID0gMTtcXG4xMjI5OlxcdFxcdGJybmYtXFx1MDAzZWZpbHRlcl92bGFuX3RhZ2dlZCA9IDA7XFxuMTIzMDpcXHRcXHRicm5mLVxcdTAwM2VmaWx0ZXJfcHBwb2VfdGFnZ2VkID0gMDtcXG4xMjMxOlxcdFxcdGJybmYtXFx1MDAzZXBhc3Nfdmxhbl9pbmRldiA9IDA7XFxuMTIzMjpcXHR9XFxuMTIzMzpcXHQjZW5kaWZcXG4xMjM0OlxcdFxcbjEyMzU6XFx0c3RhdGljIGludCBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4xMjM2OlxcdHtcXG4xMjM3OlxcdCNpZmRlZiBDT05GSUdfU1lTQ1RMXFxuMTIzODpcXHRcXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSA9IGJybmZfdGFibGU7XFxuMTIzOTpcXHRcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xcbjEyNDA6XFx0XFxuMTI0MTpcXHRcXHRpZiAoIW5ldF9lcShuZXQsIFxcdTAwMjZpbml0X25ldCkpIHtcXG4xMjQyOlxcdFxcdFxcdHRhYmxlID0ga21lbWR1cCh0YWJsZSwgc2l6ZW9mKGJybmZfdGFibGUpLCBHRlBfS0VSTkVMKTtcXG4xMjQzOlxcdFxcdFxcdGlmICghdGFibGUpXFxuMTI0NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMjQ1OlxcdFxcdH1cXG4xMjQ2OlxcdFxcbjEyNDc6XFx0XFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcXG4xMjQ4OlxcdFxcdHRhYmxlWzBdLmRhdGEgPSBcXHUwMDI2YnJuZXQtXFx1MDAzZWNhbGxfYXJwdGFibGVzO1xcbjEyNDk6XFx0XFx0dGFibGVbMV0uZGF0YSA9IFxcdTAwMjZicm5ldC1cXHUwMDNlY2FsbF9pcHRhYmxlcztcXG4xMjUwOlxcdFxcdHRhYmxlWzJdLmRhdGEgPSBcXHUwMDI2YnJuZXQtXFx1MDAzZWNhbGxfaXA2dGFibGVzO1xcbjEyNTE6XFx0XFx0dGFibGVbM10uZGF0YSA9IFxcdTAwMjZicm5ldC1cXHUwMDNlZmlsdGVyX3ZsYW5fdGFnZ2VkO1xcbjEyNTI6XFx0XFx0dGFibGVbNF0uZGF0YSA9IFxcdTAwMjZicm5ldC1cXHUwMDNlZmlsdGVyX3BwcG9lX3RhZ2dlZDtcXG4xMjUzOlxcdFxcdHRhYmxlWzVdLmRhdGEgPSBcXHUwMDI2YnJuZXQtXFx1MDAzZXBhc3Nfdmxhbl9pbmRldjtcXG4xMjU0OlxcdFxcbjEyNTU6XFx0XFx0YnJfbmV0ZmlsdGVyX3N5c2N0bF9kZWZhdWx0KGJybmV0KTtcXG4xMjU2OlxcdFxcbjEyNTc6XFx0XFx0YnJuZXQtXFx1MDAzZWN0bF9oZHIgPSByZWdpc3Rlcl9uZXRfc3lzY3RsX3N6KG5ldCwgXFxcIm5ldC9icmlkZ2VcXFwiLCB0YWJsZSxcXG4xMjU4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdEFSUkFZX1NJWkUoYnJuZl90YWJsZSkpO1xcbjEyNTk6XFx0XFx0aWYgKCFicm5ldC1cXHUwMDNlY3RsX2hkcikge1xcbjEyNjA6XFx0XFx0XFx0aWYgKCFuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKVxcbjEyNjE6XFx0XFx0XFx0XFx0a2ZyZWUodGFibGUpO1xcbjEyNjI6XFx0XFxuMTI2MzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xMjY0OlxcdFxcdH1cXG4xMjY1OlxcdCNlbmRpZlxcbjEyNjY6XFx0XFx0cmV0dXJuIDA7XFxuMTI2NzpcXHR9XFxuMTI2ODpcXHRcXG4xMjY5OlxcdHN0YXRpYyB2b2lkIGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0LFxcbjEyNzA6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBicm5mX25ldCAqYnJuZXQpXFxuMTI3MTpcXHR7XFxuMTI3MjpcXHQjaWZkZWYgQ09ORklHX1NZU0NUTFxcbjEyNzM6XFx0XFx0c3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWRlciA9IGJybmV0LVxcdTAwM2VjdGxfaGRyO1xcbjEyNzQ6XFx0XFx0Y29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGU7XFxuMTI3NTpcXHRcXG4xMjc2OlxcdFxcdGlmICghaGVhZGVyKVxcbjEyNzc6XFx0XFx0XFx0cmV0dXJuO1xcbjEyNzg6XFx0XFxuMTI3OTpcXHRcXHR0YWJsZSA9IGhlYWRlci1cXHUwMDNlY3RsX3RhYmxlX2FyZztcXG4xMjgwOlxcdFxcdHVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShoZWFkZXIpO1xcbjEyODE6XFx0XFx0aWYgKCFuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKVxcbjEyODI6XFx0XFx0XFx0a2ZyZWUodGFibGUpO1xcbjEyODM6XFx0I2VuZGlmXFxuMTI4NDpcXHR9XFxuMTI4NTpcXHRcXG4xMjg2OlxcdHN0YXRpYyBpbnQgX19uZXRfaW5pdCBicm5mX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4xMjg3OlxcdHtcXG4xMjg4OlxcdFxcdGlmIChuZXQtXFx1MDAzZXVzZXJfbnMgIT0gXFx1MDAyNmluaXRfdXNlcl9ucykge1xcbjEyODk6XFx0XFx0XFx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xcbjEyOTA6XFx0XFxuMTI5MTpcXHRcXHRcXHRicm5ldC1cXHUwMDNlaW5fdXNlcm5zID0gdHJ1ZTtcXG4xMjkyOlxcdFxcdFxcdHByX3dhcm5fb25jZShcXFwiYnJfbmV0ZmlsdGVyIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gdXNlciBuYW1lc3BhY2VzXFxcXG5cXFwiKTtcXG4xMjkzOlxcdFxcdFxcdHJldHVybiAwO1xcbjEyOTQ6XFx0XFx0fVxcbjEyOTU6XFx0XFxuMTI5NjpcXHRcXHRyZXR1cm4gYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChuZXQpO1xcbjEyOTc6XFx0fVxcbjEyOTg6XFx0XFxuMTI5OTpcXHRzdGF0aWMgdm9pZCBfX25ldF9leGl0IGJybmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbjEzMDA6XFx0e1xcbjEzMDE6XFx0XFx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcXG4xMzAyOlxcdFxcbjEzMDM6XFx0XFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcXG4xMzA0OlxcdFxcdGlmIChicm5ldC1cXHUwMDNlZW5hYmxlZCkge1xcbjEzMDU6XFx0XFx0XFx0bmZfdW5yZWdpc3Rlcl9uZXRfaG9va3MobmV0LCBicl9uZl9vcHMsIEFSUkFZX1NJWkUoYnJfbmZfb3BzKSk7XFxuMTMwNjpcXHRcXHRcXHRicm5ldC1cXHUwMDNlZW5hYmxlZCA9IGZhbHNlO1xcbjEzMDc6XFx0XFx0fVxcbjEzMDg6XFx0XFxuMTMwOTpcXHRcXHRicl9uZXRmaWx0ZXJfc3lzY3RsX2V4aXRfbmV0KG5ldCwgYnJuZXQpO1xcbjEzMTA6XFx0fVxcbjEzMTE6XFx0XFxuMTMxMjpcXHRzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGJybmZfbmV0X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbjEzMTM6XFx0XFx0LmluaXQgPSBicm5mX2luaXRfbmV0LFxcbjEzMTQ6XFx0XFx0LmV4aXQgPSBicm5mX2V4aXRfbmV0LFxcbjEzMTU6XFx0XFx0LmlkICAgPSBcXHUwMDI2YnJuZl9uZXRfaWQsXFxuMTMxNjpcXHRcXHQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnJuZl9uZXQpLFxcbjEzMTc6XFx0fTtcXG4xMzE4OlxcdFxcbjEzMTk6XFx0c3RhdGljIGludCBfX2luaXQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzM6MTEuOTI0MTY1NTE5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjkzNTY5NzIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aCBGdXp6aW5nIC0gQnJpZGdlIE5ldGZpbHRlciBpbiBVc2VyIE5hbWVzcGFjZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgY29tbWl0IGRpc2FibGVzIGJyaWRnZSBuZXRmaWx0ZXIgd2hlbiB3ZSdyZSBpbnNpZGUgYSBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZSAoYG5ldC1cdTAwM2V1c2VyX25zICE9IFx1MDAyNmluaXRfdXNlcl9uc2ApLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBrZXkgaXMgaG93IGl0J3MgaGFuZGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGRldmljZSByZWdpc3RyYXRpb24uIFdoZW4gYGJybmZfaW5pdF9uZXRgIGlzIGNhbGxlZCB3aXRoaW4gYSB1c2VyIG5hbWVzcGFjZSwgaXQgc2V0cyBgYnJuZXQtXHUwMDNlaW5fdXNlcm5zID0gdHJ1ZWAuICBUaGVuLCB3aGVuIGEgYnJpZGdlIGlzIHJlZ2lzdGVyZWQsIGBicm5mX2RldmljZV9ldmVudGAgY2hlY2tzIGBicm5ldC1cdTAwM2VlbmFibGVkIHx8IGJybmV0LVx1MDAzZWluX3VzZXJuc2AuIEJlY2F1c2UgYGJybmYtXHUwMDNlaW5fdXNlcm5zYCBpcyBub3cgdHJ1ZSwgYG5mX3JlZ2lzdGVyX25ldF9ob29rc2AgaXMgbmV2ZXIgY2FsbGVkLiBBbHNvLCBiZWNhdXNlIGBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0YCBpcyBub3QgY2FsbGVkLCBgYnJuZXQtXHUwMDNlY3RsX2hkcmAgcmVtYWlucyBOVUxMLiBTdWJzZXF1ZW50bHksIG9uIGV4aXQgdmlhIGBicm5mX2V4aXRfbmV0YCwgYGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXRgIGNoZWNrcyBmb3IgYSBOVUxMIGhlYWRlciBhbmQgcmV0dXJucy5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnV6emFibGU/IFRpbWUgdG8gY2hlY2sgdGhlIHJ1bGVzLiBUaGUgZ3VpZGVsaW5lcyBzYXkgbm8gaWYgaXQncyBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgZGVjb3JhdGlvbiwgY29uc3RhbnRzLCBvciB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gIEFsc28sIGNlcnRhaW4gdmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgYXJlIGV4Y2x1ZGVkLCBhcyBhcmUgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcy4gQnV0IHRoaXMgbG9va3MgZGlmZmVyZW50LlxuXG5UaGlzICpkZWZpbml0ZWx5KiB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4gSSdtIHNlZWluZyBjaGFuZ2VzIGluIHBlcm5ldCBpbml0aWFsaXphdGlvbiwgaG93IGRldmljZSBldmVudHMgYXJlIGhhbmRsZWQgZm9yIGJyaWRnZSBuZXRmaWx0ZXIsIHN5c2N0bCByZWdpc3RyYXRpb24gYW5kIGV4aXQsIGFuZCB0aGUgZGlzYWJsaW5nIG9mIGBicl9uZXRmaWx0ZXJgIGluIG5vbi1pbml0IHVzZXIgbmFtZXNwYWNlcy4gSXQncyBwbGF5aW5nIHdpdGggbmV0d29yayBuYW1lc3BhY2UgY3JlYXRpb24vZGVzdHJ1Y3Rpb24gYW5kIGJyaWRnZSBjcmVhdGlvbiB3aXRoaW4gdXNlciBuYW1lc3BhY2VzLiBUaGlzIGlzICp0ZXh0Ym9vayogc3l6a2FsbGVyIG1hdGVyaWFsLiBDcmVhdGluZyB1c2VyIG5hbWVzcGFjZXMsIG5ldCBuYW1lc3BhY2VzIGluc2lkZSB0aG9zZSwgc2V0dGluZyB1cCBicmlkZ2UgZGV2aWNlcywgcmVnaXN0ZXJpbmcvdW5yZWdpc3RlcmluZyBzeXNjdGwsIGFuZCB0ZWFyaW5nIGRvd24gdGhlIG5hbWVzcGFjZXPigKYgVGhpcyBpcyBleGFjdGx5IHdoYXQgc3l6a2FsbGVyIGV4Y2VscyBhdCwgYW5kIEkgY2FuIGJlIHN1cmUgaXQgd2lsbCBiZSB0ZXN0aW5nIHRoaXMgY29kZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgYENPTkZJR19CUklER0VfTkVURklMVEVSYCBpcyBlbmFibGVkLiBUaGF0IHNob3VsZCBiZSBhIHF1aWNrIGNoZWNrIGluIGBuZXQvS2NvbmZpZ2AuIFllcywgdGhpcyBpcyB3b3J0aCBmdXp6aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAxNCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMzOjE4Ljg1OTg2NTU2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NTk3MjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUklER0VfTkVURklMVEVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9MjIwPWNvbmZpZyBORVRGSUxURVJfQURWQU5DRURcXG4tLVxcbm5ldC9LY29uZmlnLTIzMC1cXG5uZXQvS2NvbmZpZzoyMzE6Y29uZmlnIEJSSURHRV9ORVRGSUxURVJcXG5uZXQvS2NvbmZpZy0yMzItXFx0dHJpc3RhdGUgXFxcIkJyaWRnZWQgSVAvQVJQIHBhY2tldHMgZmlsdGVyaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzoxOC45Nzc0NjgyNDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5NTExMTcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgbmV0L0tjb25maWdgIGZvciBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFzcGVjdHMgb2YgdGhpcyBwYXJ0aWN1bGFyIG5ldHdvcmtpbmcgbW9kdWxlLiBUaGUgbW9zdCBkaXJlY3QgcGF0aCwgYXMgYWx3YXlzLCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIHRoZSBgbmV0L0tjb25maWdgIGZpbGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gZXhhbWluaW5nIGFyb3VuZCBsaW5lIDIzMSwgYXMgdGhhdCdzIG9mdGVuIHdoZXJlIHlvdSBmaW5kIHRoZSBjb3JlIGRlZmluaXRpb25zIGFuZCBicmFuY2hpbmcgbG9naWMgZm9yIGEgZmVhdHVyZS4gQnkgZXhhbWluaW5nIHRoZSBpZmRlZnMgYW5kIGRlcGVuZGVuY2llcyBkZWNsYXJlZCBhcm91bmQgdGhhdCBwb2ludCwgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBwcmV0dHkgY2xlYXIgcGljdHVyZSBvZiB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgY29uZmlndXJlZCB0byBnZXQgdGhpcyB0aGluZyB3b3JraW5nLCBhbmQgYWxzbyB3aGF0IG90aGVyIGZ1bmN0aW9uYWxpdGllcyBkZXBlbmQgb24gaXQuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIGV4cGxvcmF0aW9uLCBzaW5jZSB0aGVzZSB0eXBlcyBvZiBmaWxlcyB1c3VhbGx5IGhhdmUgYSBnb29kIG92ZXJ2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMzOjIxLjI3MjU4MTkzMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODMzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjUsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjU6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3UgY2FuIHNlbGVjdCBiZXR3ZWVuIGFsbCB0aGUgbmV0ZmlsdGVyIG1vZHVsZXMuXFxuIDIyNjpcXHRcXHQgIElmIHlvdSBzYXkgTiB0aGUgbW9yZSB1bnVzdWFsIG9uZXMgd2lsbCBub3QgYmUgc2hvd24gYW5kIHRoZVxcbiAyMjc6XFx0XFx0ICBiYXNpYyBvbmVzIG5lZWRlZCBieSBtb3N0IHBlb3BsZSB3aWxsIGRlZmF1bHQgdG8gJ00nLlxcbiAyMjg6XFx0XFxuIDIyOTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDIzMDpcXHRcXG4gMjMxOlxcdGNvbmZpZyBCUklER0VfTkVURklMVEVSXFxuIDIzMjpcXHRcXHR0cmlzdGF0ZSBcXFwiQnJpZGdlZCBJUC9BUlAgcGFja2V0cyBmaWx0ZXJpbmdcXFwiXFxuIDIzMzpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAyMzQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVIgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbiAyMzU6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMjM2OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfRkFNSUxZX0JSSURHRVxcbiAyMzc6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuIDIzODpcXHRcXHRoZWxwXFxuIDIzOTpcXHRcXHQgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgbGV0IGFycHRhYmxlcyByZXNwLiBpcHRhYmxlcyBzZWUgYnJpZGdlZFxcbiAyNDA6XFx0XFx0ICBBUlAgcmVzcC4gSVAgdHJhZmZpYy4gSWYgeW91IHdhbnQgYSBicmlkZ2luZyBmaXJld2FsbCwgeW91IHByb2JhYmx5XFxuIDI0MTpcXHRcXHQgIHdhbnQgdGhpcyBvcHRpb24gZW5hYmxlZC5cXG4gMjQyOlxcdFxcdCAgRW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uIGRvZXNuJ3QgZW5hYmxlIG9yIGRpc2FibGVcXG4gMjQzOlxcdFxcdCAgZWJ0YWJsZXMuXFxuIDI0NDpcXHRcXG4gMjQ1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjQ2OlxcdFxcbiAyNDc6XFx0c291cmNlIFxcXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcXFwiXFxuIDI0ODpcXHRzb3VyY2UgXFxcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXFxcIlxcbiAyNDk6XFx0c291cmNlIFxcXCJuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG4gMjUwOlxcdHNvdXJjZSBcXFwibmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZ1xcXCJcXG4gMjUxOlxcdFxcbiAyNTI6XFx0ZW5kaWYgIyBpZiBORVRGSUxURVJcXG4gMjUzOlxcdFxcbiAyNTQ6XFx0c291cmNlIFxcXCJuZXQvc2N0cC9LY29uZmlnXFxcIlxcbiAyNTU6XFx0c291cmNlIFxcXCJuZXQvcmRzL0tjb25maWdcXFwiXFxuIDI1NjpcXHRzb3VyY2UgXFxcIm5ldC90aXBjL0tjb25maWdcXFwiXFxuIDI1NzpcXHRzb3VyY2UgXFxcIm5ldC9hdG0vS2NvbmZpZ1xcXCJcXG4gMjU4OlxcdHNvdXJjZSBcXFwibmV0L2wydHAvS2NvbmZpZ1xcXCJcXG4gMjU5OlxcdHNvdXJjZSBcXFwibmV0LzgwMi9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzoyMS4yNzI2NTE1NDJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM0ODQ3NTQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIE5hbWVzcGFjZSBDb25maWd1cmF0aW9uIFJlbGV2YW5jZSoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgZmVhdHVyZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhcmUgcmVsZXZhbnQgdG8gbXkgdGVzdGluZy4gRmlyc3QsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBDT05GSUdfVVNFUl9OU2AgYW5kIGBDT05GSUdfTkVUX05TYC4gTWFrZXMgc2Vuc2U7IHRob3NlIGFyZSB0aGUgbmFtZXNwYWNlcyBJJ20gbW9zdCBsaWtlbHkgdG8gcnVuIGludG8gaW4gdGhlIGNvbnRleHQgb2Ygd2hhdGV2ZXIgdGhpcyBmZWF0dXJlIGRvZXMuIEFyZSBgVVNFUl9OU2Agb3IgYE5FVF9OU2AgaW1wb3J0YW50IGZvciB0ZXN0aW5nPyBJIG5lZWQgdG8ga25vdyBpZiB0aGV5J3JlIGV2ZW4gZmFjdG9ycy4gVGhlbiwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlciwgSSdsbCB0cmFjayBkb3duIHdoZXJlIGBVU0VSX05TYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIHdhbnQgYSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTk3NCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzM6MjMuNjIxMTI5ODk3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzgwNjEwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNFUl9OU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTQzOD1jb25maWcgSVBDX05TXFxuLS1cXG5pbml0L0tjb25maWctMTQ0NS1cXG5pbml0L0tjb25maWc6MTQ0Njpjb25maWcgVVNFUl9OU1xcbmluaXQvS2NvbmZpZy0xNDQ3LVxcdGJvb2wgXFxcIlVzZXIgbmFtZXNwYWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzoyMy42Nzg5NDE2ODJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTkzNDA1OTEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBmZXcga2V5IGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHN0YXRlIG9mIGBDT05GSUdfQlJJREdFYCwgYENPTkZJR19CUklER0VfTkVURklMVEVSYCwgYENPTkZJR19VU0VSX05TYCwgYW5kIGBDT05GSUdfTkVUX05TYC4gVGhlc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIGRlYWxpbmcgd2l0aCBuZXR3b3JrIGJyaWRnaW5nIGFuZCBjb250YWluZXJpemF0aW9uLCBzbyB0aGVpciBzdGF0dXMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IHNldHVwLiBOb3csIHRvIGdldCB0aGUgc3BlY2lmaWNzIG9uIGhvdyB0aGlzIG5ldHdvcmsgYnJpZGdpbmcgaXMgaW1wbGVtZW50ZWQsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBuZXQvYnJpZGdlL01ha2VmaWxlYC4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGxvd2Rvd24gb24gdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIGRlcGVuZGVuY2llcyBmb3IgYnJpZGdpbmcgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyODgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzoyOS42MTMwMDM5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIElFRUUgODAyLjFkIGV0aGVybmV0IGJyaWRnaW5nIGxheWVyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfQlJJREdFKSArPSBicmlkZ2Uub1xcbiAgIDc6XFx0XFxuICAgODpcXHRicmlkZ2UteVxcdDo9IGJyLm8gYnJfZGV2aWNlLm8gYnJfZmRiLm8gYnJfZm9yd2FyZC5vIGJyX2lmLm8gYnJfaW5wdXQubyBcXFxcXFxuICAgOTpcXHRcXHRcXHRcXHRicl9pb2N0bC5vIGJyX3N0cC5vIGJyX3N0cF9icGR1Lm8gXFxcXFxcbiAgMTA6XFx0XFx0XFx0XFx0YnJfc3RwX2lmLm8gYnJfc3RwX3RpbWVyLm8gYnJfbmV0bGluay5vIFxcXFxcXG4gIDExOlxcdFxcdFxcdFxcdGJyX25ldGxpbmtfdHVubmVsLm8gYnJfYXJwX25kX3Byb3h5Lm9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0YnJpZGdlLSQoQ09ORklHX1NZU0ZTKSArPSBicl9zeXNmc19pZi5vIGJyX3N5c2ZzX2JyLm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0YnJpZGdlLSQoc3Vic3QgbSx5LCQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpKSArPSBicl9uZl9jb3JlLm9cXG4gIDE2OlxcdFxcbiAgMTc6XFx0YnJfbmV0ZmlsdGVyLXkgOj0gYnJfbmV0ZmlsdGVyX2hvb2tzLm9cXG4gIDE4OlxcdGJyX25ldGZpbHRlci0kKHN1YnN0IG0seSwkKENPTkZJR19JUFY2KSkgKz0gYnJfbmV0ZmlsdGVyX2lwdjYub1xcbiAgMTk6XFx0b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICs9IGJyX25ldGZpbHRlci5vXFxuICAyMDpcXHRcXG4gIDIxOlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXFxuICAyMjpcXHRcXG4gIDIzOlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXFxuICAyNDpcXHRcXG4gIDI1OlxcdGJyaWRnZS0kKENPTkZJR19ORVRfU1dJVENIREVWKSArPSBicl9zd2l0Y2hkZXYub1xcbiAgMjY6XFx0XFxuICAyNzpcXHRvYmotJChDT05GSUdfTkVURklMVEVSKSArPSBuZXRmaWx0ZXIvXFxuICAyODpcXHRcXG4gIDI5OlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfTVJQKVxcdCs9IGJyX21ycF9zd2l0Y2hkZXYubyBicl9tcnAubyBicl9tcnBfbmV0bGluay5vXFxuICAzMDpcXHRcXG4gIDMxOlxcdGJyaWRnZS0kKENPTkZJR19CUklER0VfQ0ZNKVxcdCs9IGJyX2NmbS5vIGJyX2NmbV9uZXRsaW5rLm9cXG4gIDMyOlxcdFxcbiAgMzM6XFx0aWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9ORVRGSUxURVJcXG4gIDM0OlxcdEdDT1ZfUFJPRklMRV9icl9uZl9jb3JlLm8gOj0geVxcbiAgMzU6XFx0R0NPVl9QUk9GSUxFX2JyX25ldGZpbHRlcl9ob29rcy5vIDo9IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzM6MjkuNjEzMTAwOThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDI3Mzc2MjI2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQnJpZGdlIE5ldGZpbHRlciBIb29rcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRoZSBgbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGltcGxlbWVudGVkIGluIHRoZXJlLCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gaXQuIEkgY291bGQgdXNlIGBncmVwYCB0byBwdWxsIHRoZW0gb3V0LCB0aGF0J3MgZ2VuZXJhbGx5IGEgcHJldHR5IGZhc3QgYXBwcm9hY2gsIG9yIEkgY2FuIGp1c3Qgc2NhbiB0aGUgZmlsZSBkaXJlY3RseS4gRWl0aGVyIHdheSwgSSBuZWVkIGEgcmFwaWQgb3ZlcnZpZXcgb2YgdGhlIGZ1bmN0aW9uIHNldCB0byB1bmRlcnN0YW5kIHRoZSBuZXRmaWx0ZXIgaG9va3MgcmVsYXRlZCB0byB0aGUgYnJpZGdpbmcgc3Vic3lzdGVtLiBUaGlzIHdpbGwgYWxsb3cgbWUgdG8gZ3Jhc3AgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBob3cgcGFja2V0cyBhcmUgcHJvY2Vzc2VkIGluIHRoYXQgcGFydCBvZiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzE1NiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzM6MzMuODg2ODY1NzExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjIxMjQ4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWjAtOV9dLipcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NTU9c3RydWN0IGJybmZfbmV0IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtODItXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo4MzpzdGF0aWMgaW5saW5lIF9fYmUxNiB2bGFuX3Byb3RvKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04NC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTkyLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6OTM6c3RhdGljIGlubGluZSBib29sIGlzX3ZsYW5faXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtOTQte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05OS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEwMDpzdGF0aWMgaW5saW5lIGJvb2wgaXNfdmxhbl9pcHY2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDEtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDgtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMDk6c3RhdGljIGlubGluZSBib29sIGlzX3ZsYW5fYXJwKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExMC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExNS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjExNjpzdGF0aWMgaW5saW5lIF9fYmUxNiBwcHBvZV9wcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTE3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTIxLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTIyOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19wcHBvZV9pcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjMte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjktXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzA6c3RhdGljIGlubGluZSBib29sIGlzX3BwcG9lX2lwdjYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMS1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xNDM9c3RydWN0IGJybmZfZnJhZ19kYXRhIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTUxLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTUyOnN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYnJuZl9mcmFnX2RhdGEsIGJybmZfZnJhZ19kYXRhX3N0b3JhZ2UpID0ge1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTUzLVxcdC5iaF9sb2NrID0gSU5JVF9MT0NBTF9MT0NLKGJoX2xvY2spLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xNTUtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxNTY6c3RhdGljIHZvaWQgbmZfYnJpZGdlX2luZm9fZnJlZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTU3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTYwLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTYxOnN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKmJyaWRnZV9wYXJlbnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE2Mi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE2OC1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjE2OTpzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlX3Vuc2hhcmUoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE3MC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE3My1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjE3NDp1bnNpZ25lZCBpbnQgbmZfYnJpZGdlX2VuY2FwX2hlYWRlcl9sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE3NS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTE4NS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjE4NjpzdGF0aWMgaW5saW5lIHZvaWQgbmZfYnJpZGdlX3B1bGxfZW5jYXBfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xODcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xOTMtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxOTQ6c3RhdGljIGlubGluZSB2b2lkIG5mX2JyaWRnZV9wdWxsX2VuY2FwX2hlYWRlcl9yY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTk1LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMjA2LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MjA3OnN0YXRpYyBpbnQgYnJfdmFsaWRhdGVfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yMDgte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNTUtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoyNTY6dm9pZCBuZl9icmlkZ2VfdXBkYXRlX3Byb3RvY29sKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNTcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNzYtICovXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoyNzc6aW50IGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaF9icmlkZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0yNzgte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0zMzE9c3RhdGljIGlubGluZSBib29sXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzozMzI6YnJfbmZfaXB2NF9kYWRkcl93YXNfY2hhbmdlZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMzMzLVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mX2JyaWRnZV9pbmZvICpuZl9icmlkZ2UpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM3Ni0gKi9cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjM3NzpzdGF0aWMgaW50IGJyX25mX3ByZV9yb3V0aW5nX2ZpbmlzaChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTM3OC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQzNS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjQzNjpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJybmZfZ2V0X2xvZ2ljYWxfZGV2KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00MzctXFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ1NC0vKiBTb21lIGNvbW1vbiBjb2RlIGZvciBJUHY0L0lQdjYgKi9cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjQ1NTpzdHJ1Y3QgbmV0X2RldmljZSAqc2V0dXBfcHJlX3JvdXRpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDU2LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDgzLSAqIGFkZHJlc3MgdG8gYmUgYWJsZSB0byBkZXRlY3QgRE5BVCBhZnRlcndhcmRzLiAqL1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NDg0OnN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcHJlX3JvdXRpbmcodm9pZCAqcHJpdixcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTQ4NS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01ODUtICovXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1ODY6c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9sb2NhbF9pbih2b2lkICpwcml2LFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTg3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTYzOS0vKiBQRl9CUklER0UvRk9SV0FSRCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NjQwOnN0YXRpYyBpbnQgYnJfbmZfZm9yd2FyZF9maW5pc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02NDEte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02NzMtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo2NzQ6c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9mb3J3YXJkX2lwKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy02NzUtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfaG9va19zdGF0ZSAqc3RhdGUsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTcyOC1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjcyOTpzdGF0aWMgdW5zaWduZWQgaW50IGJyX25mX2ZvcndhcmRfYXJwKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03MzAtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03NjktICovXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo3NzA6c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9mb3J3YXJkKHZvaWQgKnByaXYsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03NzEtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03ODUtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo3ODY6c3RhdGljIGludCBicl9uZl9wdXNoX2ZyYWdfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTc4Ny17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTgwOT1zdGF0aWMgaW50XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo4MTA6YnJfbmZfaXBfZnJhZ21lbnQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04MTEtXFx0XFx0ICBpbnQgKCpvdXRwdXQpKHN0cnVjdCBuZXQgKiwgc3RydWN0IHNvY2sgKiwgc3RydWN0IHNrX2J1ZmYgKikpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTgyNi1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjgyNzpzdGF0aWMgdW5zaWduZWQgaW50IG5mX2JyaWRnZV9tdHVfcmVkdWN0aW9uKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04Mjgte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy04MzUtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo4MzY6c3RhdGljIGludCBicl9uZl9kZXZfcXVldWVfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTgzNy17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTkyNS0vKiBQRl9CUklER0UvUE9TVF9ST1VUSU5HICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6OTI2OnN0YXRpYyB1bnNpZ25lZCBpbnQgYnJfbmZfcG9zdF9yb3V0aW5nKHZvaWQgKnByaXYsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05MjctXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk3NC0gKiBmb3IgdGhlIHNlY29uZCB0aW1lLiAqL1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6OTc1OnN0YXRpYyB1bnNpZ25lZCBpbnQgaXBfc2Fib3RhZ2VfaW4odm9pZCAqcHJpdixcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTk3Ni1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDA1LSAqL1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTAwNjpzdGF0aWMgdm9pZCBicl9uZl9wcmVfcm91dGluZ19maW5pc2hfYnJpZGdlX3Nsb3coc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwMDcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDMwLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTAzMTpzdGF0aWMgaW50IGJyX25mX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDMyLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTA0OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzIGJyX25mX29wc1tdID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDg4LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTA4OTpzdGF0aWMgaW50IGJybmZfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTA5MC1cXHRcXHRcXHQgICAgIHZvaWQgKnB0cilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTExNT1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGJybmZfbm90aWZpZXIgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTEyMy0gKi9cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjExMjQ6aW50IGJyX25mX2hvb2tfdGhyZXNoKHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMTI1LVxcdFxcdCAgICAgIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTE3Mj1zdGF0aWNcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjExNzM6aW50IGJybmZfc3lzY3RsX2NhbGxfdGFibGVzKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLFxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTE3NC1cXHRcXHRcXHQgICAgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTE4NT1zdGF0aWMgc3RydWN0IGN0bF90YWJsZSBicm5mX3RhYmxlW10gPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMjMtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMjI0OnN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRmaWx0ZXJfc3lzY3RsX2RlZmF1bHQoc3RydWN0IGJybmZfbmV0ICpicm5mKVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTIyNS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMzQtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMjM1OnN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjM2LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI2OC1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyNjk6c3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjcwLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjg1LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTI4NjpzdGF0aWMgaW50IF9fbmV0X2luaXQgYnJuZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjg3LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI5OC1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyOTk6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMDAte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMzEyPXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgYnJuZl9uZXRfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMTgtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzE5OnN0YXRpYyBpbnQgX19pbml0IGJyX25ldGZpbHRlcl9pbml0KHZvaWQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzIwLXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMzNy1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMzg6c3RhdGljIHZvaWQgX19leGl0IGJyX25ldGZpbHRlcl9maW5pKHZvaWQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzM5LXtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTM0NC1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzNDU6bW9kdWxlX2luaXQoYnJfbmV0ZmlsdGVyX2luaXQpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTM0Njptb2R1bGVfZXhpdChicl9uZXRmaWx0ZXJfZmluaSk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzQ3LVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTM0ODpNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzQ5Ok1PRFVMRV9BVVRIT1IoXFxcIkxlbm5lcnQgQnV5dGVuaGVrIFxcdTAwM2NidXl0ZW5oQGdudS5vcmdcXHUwMDNlXFxcIik7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzUwOk1PRFVMRV9BVVRIT1IoXFxcIkJhcnQgRGUgU2NodXltZXIgXFx1MDAzY2Jkc2NodXltQHBhbmRvcmEuYmVcXHUwMDNlXFxcIik7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzUxOk1PRFVMRV9ERVNDUklQVElPTihcXFwiTGludXggZXRoZXJuZXQgbmV0ZmlsdGVyIGZpcmV3YWxsIGJyaWRnZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzozMy45NzkwODM4NTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTkyNDIzNzcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYGJyX25ldGZpbHRlcmAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBrZXJuZWwgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiAgSSd2ZSBhbHJlYWR5IHBpY2tlZCBvdXQgYGJybmZfZGV2aWNlX2V2ZW50YCwgYGJybmZfaW5pdF9uZXRgLCBhbmQgYGJybmZfZXhpdF9uZXRgIGFzIGNyaXRpY2FsLCBhbG9uZyB3aXRoIGBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0YCBhbmQgYGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXRgIGFuZCBgYnJfbmZfaG9va190aHJlc2hgICh0aG91Z2ggdGhhdCBsYXN0IG9uZSBtaWdodCBiZSBtb3JlIG9mIGEgdGhyZXNob2xkIHZhbHVlLCBJJ2xsIGtlZXAgaXQgb24gdGhlIHJhZGFyIGZvciBub3cpLiBUaGVzZSBhcHBlYXIgdG8gYmUgdGhlIGVudHJ5IHBvaW50cyByZWxhdGVkIHRvIHRoZSBjaGFuZ2VzIGluIHRoZSBgYnJfbmV0ZmlsdGVyYCBtb2R1bGUuXG5cbk5leHQsIEkgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBgQ09ORklHX2Agb3B0aW9ucy4gSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBoZWF2aWx5IGNvbmRpdGlvbmFsLiAgSSd2ZSBjcm9zcy1yZWZlcmVuY2VkIHdpdGggdGhlIEtjb25maWcgZmlsZXMsIGFuZCBpdCBsb29rcyBsaWtlIGBCUklER0VfTkVURklMVEVSYCwgYEJSSURHRWAsIGBORVRGSUxURVJgLCBgVVNFUl9OU2AsIGFuZCBgTkVUX05TYCBhcmUgdGhlIGtleSBlbmFibGluZyBjb25maWdzLiBOb3RhYmx5LCBgQlJJREdFX05FVEZJTFRFUmAgaGFzIGRlcGVuZGVuY2llcyBvbiBib3RoIGBCUklER0VgIGFuZCBgTkVURklMVEVSYCwgYW5kIGBORVRGSUxURVJfQURWQU5DRURgLCB3aGljaCBJJ2xsIG1ha2Ugc3VyZSB0byBpbmNsdWRlLiBgVVNFUl9OU2AgYW5kIGBORVRfTlNgIGFyZSBhbHNvIGV4cGxpY2l0bHkgcmVxdWlyZWQuICBJdCdzIGNyaXRpY2FsIHRoYXQgSSBkb24ndCBvdmVybG9vayB0aGVzZSBkZXBlbmRlbmNpZXM7IG90aGVyd2lzZSwgdGhlIGNvZGUgd29uJ3QgZXZlbiBjb21waWxlIGludG8gdGhlIGtlcm5lbC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSByZWFzb25pbmcgYmVoaW5kIGFsbCB0aGlzLiBUaGUgcGF0Y2ggaXMgYWJvdXQgcmVzdHJpY3RpbmcgdGhlIGhvb2tzIGFuZCBzeXNjdGwgcmVnaXN0cmF0aW9uIG9mIGBicl9uZXRmaWx0ZXJgIHdpdGhpbiB1c2VyIG5hbWVzcGFjZXMuIFNwZWNpZmljYWxseSwgaXQncyBtb2RpZnlpbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBleGl0IHBhdGhzIG9mIHRoaXMgbW9kdWxlLCBpbmNsdWRpbmcgYGJybmZfaW5pdF9uZXRgLCBgYnJuZl9kZXZpY2VfZXZlbnRgIGFuZCBzeXNjdGwgY2xlYW51cCBsb2dpYywgdG8gYXZvaWQgcnVubmluZyBpbiB1c2VyIG5hbWVzcGFjZXMuICBUaGlzIGhhcyBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBicmlkZ2UgZGV2aWNlIGJlaGF2aW9yIGluIG5vbi1yb290IHVzZXIgbmFtZXNwYWNlcy4gVGhpcyBtZWFucyBpdCdzIGRlZmluaXRlbHkgdGVzdGFibGUgYW5kIHJlbGV2YW50IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgZ29vZC4gIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgdGVzdHMgY292ZXIgdGhpcyBhbHRlcmVkIGxvZ2ljLCBlc3BlY2lhbGx5IGFyb3VuZCBpbml0aWFsaXphdGlvbiwgZGVpbml0aWFsaXphdGlvbiwgYW5kIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBzeXNjdGxzIHdoZW4gZGVhbGluZyB3aXRoIHVzZXIgbmFtZXNwYWNlcy5cblxuQWxyaWdodCwgSSdtIGNvbmZpZGVudCBpbiB0aGVzZSBmaW5kaW5ncy4gSSdtIHJlYWR5IHRvIFwic2V0LXJlc3VsdHNcIi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MTksIk91dHB1dFRva2VucyI6MTQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMzOjM5LjkwMzMyNDQ2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDI5MzY1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFX05FVEZJTFRFUlwiLFxuICAgIFwiQlJJREdFXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIlVTRVJfTlNcIixcbiAgICBcIk5FVF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJybmZfZGV2aWNlX2V2ZW50XCIsXG4gICAgXCJicm5mX2luaXRfbmV0XCIsXG4gICAgXCJicm5mX2V4aXRfbmV0XCIsXG4gICAgXCJicl9uZl9ob29rX3RocmVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgYnJpZGdlIG5ldGZpbHRlciBpbml0aWFsaXphdGlvbiBhbmQgZGV2aWNlIGV2ZW50IGhhbmRsaW5nIHRvIGRpc2FibGUgYnJfbmV0ZmlsdGVyIGFuZCBpdHMgc3lzY3RsIHJlZ2lzdHJhdGlvbiB3aXRoaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzLiBUaGlzIGFsdGVycyBjb3JlIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBicmlkZ2UgZGV2aWNlIHNldHVwL3RlYXJkb3duIGV4ZWN1dGlvbiBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFX05FVEZJTFRFUlwiLFxuICAgIFwiQlJJREdFXCIsXG4gICAgXCJORVRGSUxURVJcIixcbiAgICBcIlVTRVJfTlNcIixcbiAgICBcIk5FVF9OU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJybmZfZGV2aWNlX2V2ZW50XCIsXG4gICAgXCJicm5mX2luaXRfbmV0XCIsXG4gICAgXCJicm5mX2V4aXRfbmV0XCIsXG4gICAgXCJicl9uZl9ob29rX3RocmVzaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgYnJpZGdlIG5ldGZpbHRlciBpbml0aWFsaXphdGlvbiBhbmQgZGV2aWNlIGV2ZW50IGhhbmRsaW5nIHRvIGRpc2FibGUgYnJfbmV0ZmlsdGVyIGFuZCBpdHMgc3lzY3RsIHJlZ2lzdHJhdGlvbiB3aXRoaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzLiBUaGlzIGFsdGVycyBjb3JlIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBicmlkZ2UgZGV2aWNlIHNldHVwL3RlYXJkb3duIGV4ZWN1dGlvbiBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMzOjQwLjAzMzYyNzA5M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4NDA4ODQ0OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzo0MC4wMzQ0Mjg5NzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMDg0MDA3ODYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzdHJpY3RzIHRoZSBsZWdhY3kgYnJfbmV0ZmlsdGVyIG1vZHVsZSBpbiBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZXMgYnkgc2V0dGluZyBhIG5ldyBib29sZWFuIGZsYWcgKGBpbl91c2VybnNgKSwgYXZvaWRpbmcgc3lzY3RsIHJlZ2lzdHJhdGlvbiwgYW5kIHNraXBwaW5nIG5ldGZpbHRlciBob29rIHJlZ2lzdHJhdGlvbiBvbiBkZXZpY2UgZXZlbnRzLlxcblxcbi0gTWVtb3J5IEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogYHN0cnVjdCBicm5mX25ldGAgaXMgYWxsb2NhdGVkIGFzIHBlci1uZXRucyBzdG9yYWdlIGJ5IHRoZSBwZXJuZXQgc3Vic3lzdGVtIHVzaW5nIHplcm8taW5pdGlhbGl6ZWQgbWVtb3J5IChga3phbGxvY2ApLiBUaGUgYWRkZWQgYGluX3VzZXJuc2AgYm9vbGVhbiBhbmQgZXhpc3RpbmcgZmllbGRzIGFyZSBzYWZlbHkgemVyby1pbml0aWFsaXplZCBvbiBhbGxvY2F0aW9uLlxcbi0gTm8gSW5mbyBMZWFrcyBvciBVbmluaXRpYWxpemVkIFJlYWRzOiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgYWxzbyBndWFyZHMgc3lzY3RsIGNsZWFudXAgYWdhaW5zdCBOVUxMIHBvaW50ZXJzIChgY3RsX2hkcmApIHdoZW4gc3lzY3RsIHJlZ2lzdHJhdGlvbiB3YXMgc2tpcHBlZC5cXG4tIFN0YW5kYXJkIFNhbml0aXplciBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcm91bmQgbGlmZWN5Y2xlLCBudWxsIGRlcmVmZXJlbmNlcywgb3IgbmV0bnMgZGVzdHJ1Y3Rpb24gYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE0NjczNTEwYTJhOTZiMjE1NjViOGNkMTA0YWM4MzAwZGZlNTJiYjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMjozMjo0NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcbmluZGV4IGMxZTZlYTUyYzllNTkuLmRkZWQxYTZlZGQ2MDYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS5yc3RcbkBAIC0yNzcsOCArMjc3LDkgQEAgTmV0ZmlsdGVyXG4gPT09PT09PT09XG4gXG4gVGhlIGJyaWRnZSBuZXRmaWx0ZXIgbW9kdWxlIGlzIGEgbGVnYWN5IGZlYXR1cmUgdGhhdCBhbGxvd3MgdG8gZmlsdGVyIGJyaWRnZWRcbi1wYWNrZXRzIHdpdGggaXB0YWJsZXMgYW5kIGlwNnRhYmxlcy4gSXRzIHVzZSBpcyBkaXNjb3VyYWdlZC4gVXNlcnMgc2hvdWxkXG4tY29uc2lkZXIgdXNpbmcgbmZ0YWJsZXMgZm9yIHBhY2tldCBmaWx0ZXJpbmcuXG4rcGFja2V0cyB3aXRoIGlwdGFibGVzIGFuZCBpcDZ0YWJsZXMuIFRoaXMgZmVhdHVyZSBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwgYW5kXG4rbm90IGF2YWlsYWJsZSBpbiB1c2VyIG5hbWVzcGFjZXMuIENvbnNpZGVyIHVzaW5nIG5mdGFibGVzIGZvciBwYWNrZXQgZmlsdGVyaW5nXG4raW5zdGVhZC5cbiBcbiBUaGUgb2xkZXIgZWJ0YWJsZXMgdG9vbCBpcyBtb3JlIGZlYXR1cmUtbGltaXRlZCBjb21wYXJlZCB0byBuZnRhYmxlcywgYnV0XG4ganVzdCBsaWtlIG5mdGFibGVzIGl0IGRvZXNuJ3QgbmVlZCB0aGlzIG1vZHVsZSBlaXRoZXIgdG8gZnVuY3Rpb24uXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmNcbmluZGV4IDBhMzk0ZTVmNDM5MTYuLmUxNTM1NWZmMjE1YTcgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXG4rKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXG5AQCAtNTQsNiArNTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGJybmZfbmV0X2lkIF9fcmVhZF9tb3N0bHk7XG4gXG4gc3RydWN0IGJybmZfbmV0IHtcbiBcdGJvb2wgZW5hYmxlZDtcbitcdGJvb2wgaW5fdXNlcm5zO1xuIFxuICNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqY3RsX2hkcjtcbkBAIC0xMTAwLDcgKzExMDEsNyBAQCBzdGF0aWMgaW50IGJybmZfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxuIFxuIFx0bmV0ID0gZGV2X25ldChkZXYpO1xuIFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcbi1cdGlmIChicm5ldC1cdTAwM2VlbmFibGVkKVxuK1x0aWYgKGJybmV0LVx1MDAzZWVuYWJsZWQgfHwgYnJuZXQtXHUwMDNlaW5fdXNlcm5zKVxuIFx0XHRyZXR1cm4gTk9USUZZX09LO1xuIFxuIFx0cmV0ID0gbmZfcmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgYnJfbmZfb3BzLCBBUlJBWV9TSVpFKGJyX25mX29wcykpO1xuQEAgLTEyMjksOSArMTIzMCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9kZWZhdWx0KHN0cnVjdCBicm5mX25ldCAqYnJuZilcbiBcdGJybmYtXHUwMDNlZmlsdGVyX3BwcG9lX3RhZ2dlZCA9IDA7XG4gXHRicm5mLVx1MDAzZXBhc3Nfdmxhbl9pbmRldiA9IDA7XG4gfVxuKyNlbmRpZlxuIFxuIHN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuKyNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gXHRzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSA9IGJybmZfdGFibGU7XG4gXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xuIFxuQEAgLTEyNTksMjUgKzEyNjIsMzkgQEAgc3RhdGljIGludCBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4tXG4rI2VuZGlmXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxuIHtcbi1cdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlID0gYnJuZXQtXHUwMDNlY3RsX2hkci1cdTAwM2VjdGxfdGFibGVfYXJnO1xuKyNpZmRlZiBDT05GSUdfU1lTQ1RMXG4rXHRzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGVhZGVyID0gYnJuZXQtXHUwMDNlY3RsX2hkcjtcbitcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xuIFxuLVx0dW5yZWdpc3Rlcl9uZXRfc3lzY3RsX3RhYmxlKGJybmV0LVx1MDAzZWN0bF9oZHIpO1xuK1x0aWYgKCFoZWFkZXIpXG4rXHRcdHJldHVybjtcbitcbitcdHRhYmxlID0gaGVhZGVyLVx1MDAzZWN0bF90YWJsZV9hcmc7XG4rXHR1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoaGVhZGVyKTtcbiBcdGlmICghbmV0X2VxKG5ldCwgXHUwMDI2aW5pdF9uZXQpKVxuIFx0XHRrZnJlZSh0YWJsZSk7XG4rI2VuZGlmXG4gfVxuIFxuIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBicm5mX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiB7XG4rXHRpZiAobmV0LVx1MDAzZXVzZXJfbnMgIT0gXHUwMDI2aW5pdF91c2VyX25zKSB7XG4rXHRcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcbitcbitcdFx0YnJuZXQtXHUwMDNlaW5fdXNlcm5zID0gdHJ1ZTtcbitcdFx0cHJfd2Fybl9vbmNlKFwiYnJfbmV0ZmlsdGVyIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gdXNlciBuYW1lc3BhY2VzXFxuXCIpO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbiBcdHJldHVybiBicl9uZXRmaWx0ZXJfc3lzY3RsX2luaXRfbmV0KG5ldCk7XG4gfVxuLSNlbmRpZlxuIFxuIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYnJuZl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4ge1xuQEAgLTEyODksMTUgKzEzMDYsMTEgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdFx0YnJuZXQtXHUwMDNlZW5hYmxlZCA9IGZhbHNlO1xuIFx0fVxuIFxuLSNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gXHRicl9uZXRmaWx0ZXJfc3lzY3RsX2V4aXRfbmV0KG5ldCwgYnJuZXQpO1xuLSNlbmRpZlxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGJybmZfbmV0X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLSNpZmRlZiBDT05GSUdfU1lTQ1RMXG4gXHQuaW5pdCA9IGJybmZfaW5pdF9uZXQsXG4tI2VuZGlmXG4gXHQuZXhpdCA9IGJybmZfZXhpdF9uZXQsXG4gXHQuaWQgICA9IFx1MDAyNmJybmZfbmV0X2lkLFxuIFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGJybmZfbmV0KSxcbkBAIC0xMzE4LDcgKzEzMzEsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBicl9uZXRmaWx0ZXJfaW5pdCh2b2lkKVxuIFx0fVxuIFxuIFx0UkNVX0lOSVRfUE9JTlRFUihuZl9icl9vcHMsIFx1MDAyNmJyX29wcyk7XG4tXHRwcmludGsoS0VSTl9OT1RJQ0UgXCJCcmlkZ2UgZmlyZXdhbGxpbmcgcmVnaXN0ZXJlZFxcblwiKTtcbitcdHByX3dhcm4oXCJicl9uZXRmaWx0ZXIgaXMgc2xhdGVkIGZvciByZW1vdmFsIGluIDIwMjcuXFxuXCIpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzM6NDAuMDM0NDMxMDgzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg5MjU4NDYxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcy4gTGV0J3Mgc2VlLi4uXG5cbjEuICAqKkRvY3VtZW50YXRpb24gVXBkYXRlOioqIEEgZG9jdW1lbnRhdGlvbiB1cGRhdGUgdG8gYERvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0YC4gVGhhdCdzIG5vdCBsaWtlbHkgdG8gYmUgYSBmdXp6ZXIgdGFyZ2V0IGRpcmVjdGx5LCBpdCdzIGluZm9ybWF0aW9uYWwuXG4yLiAgKipgbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuY2AgQ2hhbmdlczoqKiBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBiaXRzIHByb2JhYmx5IGFyZS4gTGV0J3Mgc2VlLi4uXG5cbiAgICAqICAgQSBuZXcgYm9vbGVhbiBgaW5fdXNlcm5zYCBpcyBhZGRlZCB0byB0aGUgYHN0cnVjdCBicm5mX25ldGAuIE9rYXksIHRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gSXQgc3VnZ2VzdHMgYSBjaGFuZ2UgaW4gaG93IHVzZXIgbmFtZXNwYWNlcyBhcmUgaGFuZGxlZC5cbiAgICAqICAgVGhlIGBicm5mX2RldmljZV9ldmVudGAgZnVuY3Rpb24gbm93IGNoZWNrcyBgYnJuZXQtXHUwMDNlZW5hYmxlZCB8fCBicm5ldC1cdTAwM2Vpbl91c2VybnNgLiBUaGUgYWRkaXRpb24gb2YgYGluX3VzZXJuc2AgdG8gdGhlIGNvbmRpdGlvbiBpcyBkZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcuXG4gICAgKiAgIFN5c2N0bCBjb25maWd1cmF0aW9uIGlzIGJlaW5nIHJlZmFjdG9yZWQuIFRoZSBgI2lmZGVmIENPTkZJR19TWVNDVExgIGd1YXJkcyBhcmUgYmVpbmcgcmVtb3ZlZC4gVGhpcyBwb2ludHMgdG8gYSBjaGFuZ2UgaW4gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHN5c2N0bCBzZXR0aW5ncyB3aXRoaW4gdGhlIGBicl9uZXRmaWx0ZXJgIG1vZHVsZS4gSXQncyBwb3NzaWJsZSB0aGF0IGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBtYXkgaW50ZXJhY3Qgd2l0aCB0aGUgbmV0d29yayBicmlkZ2UgaW4gdW5leHBlY3RlZCB3YXlzLlxuICAgICogICBOb3csIGluIGBicm5mX2luaXRfbmV0YCwgdGhlIGNvcmUgbG9naWMgbG9va3MgbGlrZSBpdCdzIGhhbmRsaW5nIHVzZXIgbmFtZXNwYWNlIHNjZW5hcmlvcy4gSXQgYXBwZWFycyB0aGVyZSdzIG5ldyBsb2dpYyB0byBkaXNhYmxlIGNlcnRhaW4gZnVuY3Rpb25hbGl0eSBpbiB1c2VyIG5hbWVzcGFjZXMsIHdpdGggYSB3YXJuaW5nLiBDcnVjaWFsbHksIHRoZSBjb2RlIG5vdyBzZXRzIGBicm5ldC1cdTAwM2Vpbl91c2VybnMgPSB0cnVlYCBpZiB0aGUgbmV0d29yayBuYW1lc3BhY2UgaXMgKm5vdCogdGhlIGluaXRpYWwgb25lLiBUaGlzIGltcGxpZXMgYSBwb3RlbnRpYWxseSBkaWZmZXJlbnQgY29kZSBwYXRoIGFuZCBiZWhhdmlvciB3aGVuIHJ1bm5pbmcgd2l0aGluIGEgdXNlciBuYW1lc3BhY2UuXG4gICAgKiAgIGAuaW5pdCA9IGJybmZfaW5pdF9uZXRgIGlzIG5vdyBhbHdheXMgc2V0IGluIGBicm5mX25ldF9vcHNgLiBUaGUgZ3VhcmQgaXMgZ29uZS4gVGhpcyBsaWtlbHkgbWVhbnMgaW5pdGlhbGl6YXRpb24gaGFwcGVucyB1bmNvbmRpdGlvbmFsbHkgbm93LlxuICAgICogICBUaGUgcGVybmV0IG1lbW9yeSBhbGxvY2F0aW9uIGZvciBgYnJuZl9uZXRfb3BzYCBpcyB1c2luZyBgLnNpemUgPSBzaXplb2Yoc3RydWN0IGJybmZfbmV0KWAuIFBlcm5ldHMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCBieSB0aGUgbmV0IG5hbWVzcGFjZSBpbmZyYXN0cnVjdHVyZS4gT2theSwgSSB3YW50IHRvIGRyaWxsIGRvd24gaW50byB0aGUgcGVybmV0IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGJlY2F1c2UgaXQgY291bGQgYmUgYSBzb3VyY2Ugb2YgbWVtb3J5IGNvcnJ1cHRpb24gaWYgaGFuZGxlZCBpbmNvcnJlY3RseS5cblxuVG8gZ2V0IGEgYmV0dGVyIHBpY3R1cmUsIEknbSBnb2luZyB0byBwdWxsIHVwIGBuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jYCB1c2luZyBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAuIEknbGwgd2FudCB0byBzZWUgaG93IHRoaXMgcGVybmV0IHN0cnVjdHVyZSBpcyB1c2VkLCBob3cgdGhlIGBpbl91c2VybnNgIGZsYWcgaXMgdXNlZCwgYW5kIGhvdyB0aGVzZSBzeXNjdGwgY2hhbmdlcyBhbmQgdXNlciBuYW1lc3BhY2UgaGFuZGxpbmcgaW50ZXJhY3QuIEdpdmVuIHRoZSB1c2VyIG5hbWVzcGFjZSBpbnRlcmFjdGlvbiBhbmQgdGhlIHJlZmFjdG9yaW5nLCB0aGlzIHBhdGNoIGxvb2tzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgS01TQU4gZnV6emluZywgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgYnJpZGdlIGFuZCB1c2VyIG5hbWVzcGFjZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMzIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMjozMzo0OC45NjAyNzk5NzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzY1ODQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicm5mX25ldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTUyLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6NTM6c3RhdGljIHVuc2lnbmVkIGludCBicm5mX25ldF9pZCBfX3JlYWRfbW9zdGx5O1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTQtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1NTpzdHJ1Y3QgYnJuZl9uZXQge1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNTYtXFx0Ym9vbCBlbmFibGVkO1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz05Mz1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmxhbl9pcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05NC17XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo5NTpcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy05Ni1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTAwPXN0YXRpYyBpbmxpbmUgYm9vbCBpc192bGFuX2lwdjYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTAyLXtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEwMzpcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDQtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEwOT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmxhbl9hcnAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTEwLXtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjExMTpcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMTItXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEyMj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcHBwb2VfaXAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTIzLXtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyNDpcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjUtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEzMD1zdGF0aWMgaW5saW5lIGJvb2wgaXNfcHBwb2VfaXB2Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzIte1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTMzOlxcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzNC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9NDM2PXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnJuZl9nZXRfbG9naWNhbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDQwLVxcdHN0cnVjdCBuZXRfZGV2aWNlICp2bGFuLCAqYnI7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo0NDE6XFx0c3RydWN0IGJybmZfbmV0ICpicm5ldCA9IG5ldF9nZW5lcmljKG5ldCwgYnJuZl9uZXRfaWQpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDQyLVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz00ODQ9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9wcmVfcm91dGluZyh2b2lkICpwcml2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy00OTEtXFx0X191MzIgbGVuID0gbmZfYnJpZGdlX2VuY2FwX2hlYWRlcl9sZW4oc2tiKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjQ5MjpcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNDkzLVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MDEtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo1MDI6XFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhzdGF0ZS1cXHUwMDNlbmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy01MDMtXFx0aWYgKElTX0lQVjYoc2tiKSB8fCBpc192bGFuX2lwdjYoc2tiLCBzdGF0ZS1cXHUwMDNlbmV0KSB8fFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz03Mjk9c3RhdGljIHVuc2lnbmVkIGludCBicl9uZl9mb3J3YXJkX2FycChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03MzQtXFx0c3RydWN0IG5ldF9kZXZpY2UgKipkID0gKHN0cnVjdCBuZXRfZGV2aWNlICoqKShza2ItXFx1MDAzZWNiKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjczNTpcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtNzM2LVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03NDEtXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzo3NDI6XFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhzdGF0ZS1cXHUwMDNlbmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy03NDMtXFx0aWYgKCFicm5ldC1cXHUwMDNlY2FsbF9hcnB0YWJsZXMgXFx1MDAyNlxcdTAwMjYgIWJyX29wdF9nZXQoYnIsIEJST1BUX05GX0NBTExfQVJQVEFCTEVTKSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM9MTA4OT1zdGF0aWMgaW50IGJybmZfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMDkyLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEwOTM6XFx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEwOTQtXFx0c3RydWN0IG5ldCAqbmV0O1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMTAyLVxcdG5ldCA9IGRldl9uZXQoZGV2KTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjExMDM6XFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTExMDQtXFx0aWYgKGJybmV0LVxcdTAwM2VlbmFibGVkIHx8IGJybmV0LVxcdTAwM2Vpbl91c2VybnMpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTExODU9c3RhdGljIHN0cnVjdCBjdGxfdGFibGUgYnJuZl90YWJsZVtdID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjIzLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTIyNDpzdGF0aWMgaW5saW5lIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9kZWZhdWx0KHN0cnVjdCBicm5mX25ldCAqYnJuZilcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMjUte1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMjM1PXN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyMzgtXFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGUgPSBicm5mX3RhYmxlO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTIzOTpcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0O1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI0MC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI0Ni1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEyNDc6XFx0YnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEyNDgtXFx0dGFibGVbMF0uZGF0YSA9IFxcdTAwMjZicm5ldC1cXHUwMDNlY2FsbF9hcnB0YWJsZXM7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEyNjk9c3RhdGljIHZvaWQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMjcwOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTI3MS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEyODY9c3RhdGljIGludCBfX25ldF9pbml0IGJybmZfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjg4LVxcdGlmIChuZXQtXFx1MDAzZXVzZXJfbnMgIT0gXFx1MDAyNmluaXRfdXNlcl9ucykge1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTI4OTpcXHRcXHRzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMjkwLVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMjk5PXN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYnJuZl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzAwLXtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMDE6XFx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMDItXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzAzOlxcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzA0LVxcdGlmIChicm5ldC1cXHUwMDNlZW5hYmxlZCkge1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzExLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmM6MTMxMjpzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGJybmZfbmV0X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMxMy1cXHQuaW5pdCA9IGJybmZfaW5pdF9uZXQsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzE0LVxcdC5leGl0ID0gYnJuZl9leGl0X25ldCxcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMTU6XFx0LmlkICAgPSBcXHUwMDI2YnJuZl9uZXRfaWQsXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYzoxMzE2OlxcdC5zaXplID0gc2l6ZW9mKHN0cnVjdCBicm5mX25ldCksXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzE3LX07XFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jPTEzMTk9c3RhdGljIGludCBfX2luaXQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMyMi1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMjM6XFx0cmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2YnJuZl9uZXRfb3BzKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMjQtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jLTEzMjgtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzMjk6XFx0XFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZicm5mX25ldF9vcHMpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTMzMC1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYz0xMzM4PXN0YXRpYyB2b2lkIF9fZXhpdCBicl9uZXRmaWx0ZXJfZmluaSh2b2lkKVxcbi0tXFxubmV0L2JyaWRnZS9icl9uZXRmaWx0ZXJfaG9va3MuYy0xMzQxLVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZicm5mX25vdGlmaWVyKTtcXG5uZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jOjEzNDI6XFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZicm5mX25ldF9vcHMpO1xcbm5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmMtMTM0My19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMzOjQ5LjA2Nzk0MjkyOVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTc5ODY1OTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkRlZXAgRGl2ZSBpbnRvIGJyX25ldGZpbHRlcl9ob29rcy5jIGZvciBTeXNjdGwgYW5kIEluaXRpYWxpemF0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIHdlIGdldCBzdGFydGVkLCBJIHdhbnQgdG8gdGFrZSBhIG1ldGhvZGljYWwgYXBwcm9hY2ggdG8gdGhpcy4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBob3cgdGhlIGJyaWRnaW5nIG5ldGZpbHRlciBob29rcyBhcmUgc2V0IHVwLCBtYW5hZ2VkLCBhbmQgdG9ybiBkb3duLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIHN5c2N0bCBjb25maWd1cmF0aW9ucy4gVGhpcyBtZWFucyBhIGNhcmVmdWwgaW5zcGVjdGlvbiBvZiB0aGUgYG5ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyX2hvb2tzLmNgIGZpbGUgaXMgaW4gb3JkZXIuIEkgbmVlZCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgZW50aXJlIGZpbGUsIG9yIGF0IGxlYXN0IHRoZSBjcml0aWNhbCBzZWdtZW50cyBkZWFsaW5nIHdpdGggc3lzdGVtIGNvbnRyb2xzIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGV4aXQgcm91dGluZXMuXG5cbkZpcnN0LCBJJ20gdGhpbmtpbmcsIEkgc2hvdWxkIHN0YXJ0IGJ5IHBpbnBvaW50aW5nIHRob3NlIHNlY3Rpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gc3lzY3RsIHZhcmlhYmxlcy4gV2hhdCBhcmUgdGhlIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzPyBIb3cgYXJlIHRoZXkgcmVnaXN0ZXJlZD8gV2hlcmUgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyBkZWZpbmVkPyBXaGF0IGZ1bmN0aW9ucyBoYW5kbGUgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBvbiB0aGVzZSBzeXNjdGwgZW50cmllcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHN5c2N0bCBjb250cm9scyBhbmQgdGhlIGFjdHVhbCBicmlkZ2luZyBmdW5jdGlvbmFsaXR5LCBhbmQgd2hldGhlciB0aGUgYnJpZGdlIG5ldGZpbHRlciBob29rcyBoYXZlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlc2UgcGFyYW1ldGVycy5cblxuVGhlbiwgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBleGl0IHNlcXVlbmNlcyBkZW1hbmQgY2FyZWZ1bCBzY3J1dGlueS4gV2hlcmUgYXJlIHRoZSBob29rcyByZWdpc3RlcmVkPyBIb3cgYXJlIHRoZXkgdW5yZWdpc3RlcmVkPyBXaGF0J3MgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnM/IEFyZSB0aGVyZSBhbnkgcmVzb3VyY2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gY29uY2VybnM/IEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgY3JvcCB1cCBkdXJpbmcgbW9kdWxlIGxvYWRpbmcgb3IgdW5sb2FkaW5nPyBBcmUgdGhlcmUgYW55IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgb3IgbW9kdWxlcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGhvb2sgb3JkZXJpbmcsIGRlcGVuZGVuY2llcywgb3IgY2xlYW51cCwgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuXG5UaGUgZ29hbCBpcyBhIHZlcnkgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBzeXNjdGwgY29uZmlndXJhdGlvbiwgaG9vayByZWdpc3RyYXRpb24sIGhvb2sgdW5yZWdpc3RyYXRpb24sIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIG5ldGZpbHRlciBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTA3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjI6MzM6NTIuNjQ3ODEyMzQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX25ldGZpbHRlcl9ob29rcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjIwOlxcdFxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IGJybmZfc3lzY3RsX2NhbGxfdGFibGVzLFxcbjEyMjE6XFx0XFx0fSxcXG4xMjIyOlxcdH07XFxuMTIyMzpcXHRcXG4xMjI0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBicl9uZXRmaWx0ZXJfc3lzY3RsX2RlZmF1bHQoc3RydWN0IGJybmZfbmV0ICpicm5mKVxcbjEyMjU6XFx0e1xcbjEyMjY6XFx0XFx0YnJuZi1cXHUwMDNlY2FsbF9pcHRhYmxlcyA9IDE7XFxuMTIyNzpcXHRcXHRicm5mLVxcdTAwM2VjYWxsX2lwNnRhYmxlcyA9IDE7XFxuMTIyODpcXHRcXHRicm5mLVxcdTAwM2VjYWxsX2FycHRhYmxlcyA9IDE7XFxuMTIyOTpcXHRcXHRicm5mLVxcdTAwM2VmaWx0ZXJfdmxhbl90YWdnZWQgPSAwO1xcbjEyMzA6XFx0XFx0YnJuZi1cXHUwMDNlZmlsdGVyX3BwcG9lX3RhZ2dlZCA9IDA7XFxuMTIzMTpcXHRcXHRicm5mLVxcdTAwM2VwYXNzX3ZsYW5faW5kZXYgPSAwO1xcbjEyMzI6XFx0fVxcbjEyMzM6XFx0I2VuZGlmXFxuMTIzNDpcXHRcXG4xMjM1OlxcdHN0YXRpYyBpbnQgYnJfbmV0ZmlsdGVyX3N5c2N0bF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuMTIzNjpcXHR7XFxuMTIzNzpcXHQjaWZkZWYgQ09ORklHX1NZU0NUTFxcbjEyMzg6XFx0XFx0c3RydWN0IGN0bF90YWJsZSAqdGFibGUgPSBicm5mX3RhYmxlO1xcbjEyMzk6XFx0XFx0c3RydWN0IGJybmZfbmV0ICpicm5ldDtcXG4xMjQwOlxcdFxcbjEyNDE6XFx0XFx0aWYgKCFuZXRfZXEobmV0LCBcXHUwMDI2aW5pdF9uZXQpKSB7XFxuMTI0MjpcXHRcXHRcXHR0YWJsZSA9IGttZW1kdXAodGFibGUsIHNpemVvZihicm5mX3RhYmxlKSwgR0ZQX0tFUk5FTCk7XFxuMTI0MzpcXHRcXHRcXHRpZiAoIXRhYmxlKVxcbjEyNDQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTI0NTpcXHRcXHR9XFxuMTI0NjpcXHRcXG4xMjQ3OlxcdFxcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxuMTI0ODpcXHRcXHR0YWJsZVswXS5kYXRhID0gXFx1MDAyNmJybmV0LVxcdTAwM2VjYWxsX2FycHRhYmxlcztcXG4xMjQ5OlxcdFxcdHRhYmxlWzFdLmRhdGEgPSBcXHUwMDI2YnJuZXQtXFx1MDAzZWNhbGxfaXB0YWJsZXM7XFxuMTI1MDpcXHRcXHR0YWJsZVsyXS5kYXRhID0gXFx1MDAyNmJybmV0LVxcdTAwM2VjYWxsX2lwNnRhYmxlcztcXG4xMjUxOlxcdFxcdHRhYmxlWzNdLmRhdGEgPSBcXHUwMDI2YnJuZXQtXFx1MDAzZWZpbHRlcl92bGFuX3RhZ2dlZDtcXG4xMjUyOlxcdFxcdHRhYmxlWzRdLmRhdGEgPSBcXHUwMDI2YnJuZXQtXFx1MDAzZWZpbHRlcl9wcHBvZV90YWdnZWQ7XFxuMTI1MzpcXHRcXHR0YWJsZVs1XS5kYXRhID0gXFx1MDAyNmJybmV0LVxcdTAwM2VwYXNzX3ZsYW5faW5kZXY7XFxuMTI1NDpcXHRcXG4xMjU1OlxcdFxcdGJyX25ldGZpbHRlcl9zeXNjdGxfZGVmYXVsdChicm5ldCk7XFxuMTI1NjpcXHRcXG4xMjU3OlxcdFxcdGJybmV0LVxcdTAwM2VjdGxfaGRyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF9zeihuZXQsIFxcXCJuZXQvYnJpZGdlXFxcIiwgdGFibGUsXFxuMTI1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRBUlJBWV9TSVpFKGJybmZfdGFibGUpKTtcXG4xMjU5OlxcdFxcdGlmICghYnJuZXQtXFx1MDAzZWN0bF9oZHIpIHtcXG4xMjYwOlxcdFxcdFxcdGlmICghbmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSlcXG4xMjYxOlxcdFxcdFxcdFxcdGtmcmVlKHRhYmxlKTtcXG4xMjYyOlxcdFxcbjEyNjM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTI2NDpcXHRcXHR9XFxuMTI2NTpcXHQjZW5kaWZcXG4xMjY2OlxcdFxcdHJldHVybiAwO1xcbjEyNjc6XFx0fVxcbjEyNjg6XFx0XFxuMTI2OTpcXHRzdGF0aWMgdm9pZCBicl9uZXRmaWx0ZXJfc3lzY3RsX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCxcXG4xMjcwOlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnJuZl9uZXQgKmJybmV0KVxcbjEyNzE6XFx0e1xcbjEyNzI6XFx0I2lmZGVmIENPTkZJR19TWVNDVExcXG4xMjczOlxcdFxcdHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZWFkZXIgPSBicm5ldC1cXHUwMDNlY3RsX2hkcjtcXG4xMjc0OlxcdFxcdGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlO1xcbjEyNzU6XFx0XFxuMTI3NjpcXHRcXHRpZiAoIWhlYWRlcilcXG4xMjc3OlxcdFxcdFxcdHJldHVybjtcXG4xMjc4OlxcdFxcbjEyNzk6XFx0XFx0dGFibGUgPSBoZWFkZXItXFx1MDAzZWN0bF90YWJsZV9hcmc7XFxuMTI4MDpcXHRcXHR1bnJlZ2lzdGVyX25ldF9zeXNjdGxfdGFibGUoaGVhZGVyKTtcXG4xMjgxOlxcdFxcdGlmICghbmV0X2VxKG5ldCwgXFx1MDAyNmluaXRfbmV0KSlcXG4xMjgyOlxcdFxcdFxcdGtmcmVlKHRhYmxlKTtcXG4xMjgzOlxcdCNlbmRpZlxcbjEyODQ6XFx0fVxcbjEyODU6XFx0XFxuMTI4NjpcXHRzdGF0aWMgaW50IF9fbmV0X2luaXQgYnJuZl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuMTI4NzpcXHR7XFxuMTI4ODpcXHRcXHRpZiAobmV0LVxcdTAwM2V1c2VyX25zICE9IFxcdTAwMjZpbml0X3VzZXJfbnMpIHtcXG4xMjg5OlxcdFxcdFxcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQgPSBuZXRfZ2VuZXJpYyhuZXQsIGJybmZfbmV0X2lkKTtcXG4xMjkwOlxcdFxcbjEyOTE6XFx0XFx0XFx0YnJuZXQtXFx1MDAzZWluX3VzZXJucyA9IHRydWU7XFxuMTI5MjpcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcImJyX25ldGZpbHRlciBubyBsb25nZXIgc3VwcG9ydGVkIGluIHVzZXIgbmFtZXNwYWNlc1xcXFxuXFxcIik7XFxuMTI5MzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMjk0OlxcdFxcdH1cXG4xMjk1OlxcdFxcbjEyOTY6XFx0XFx0cmV0dXJuIGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQobmV0KTtcXG4xMjk3OlxcdH1cXG4xMjk4OlxcdFxcbjEyOTk6XFx0c3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm5mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4xMzAwOlxcdHtcXG4xMzAxOlxcdFxcdHN0cnVjdCBicm5mX25ldCAqYnJuZXQ7XFxuMTMwMjpcXHRcXG4xMzAzOlxcdFxcdGJybmV0ID0gbmV0X2dlbmVyaWMobmV0LCBicm5mX25ldF9pZCk7XFxuMTMwNDpcXHRcXHRpZiAoYnJuZXQtXFx1MDAzZWVuYWJsZWQpIHtcXG4xMzA1OlxcdFxcdFxcdG5mX3VucmVnaXN0ZXJfbmV0X2hvb2tzKG5ldCwgYnJfbmZfb3BzLCBBUlJBWV9TSVpFKGJyX25mX29wcykpO1xcbjEzMDY6XFx0XFx0XFx0YnJuZXQtXFx1MDAzZWVuYWJsZWQgPSBmYWxzZTtcXG4xMzA3OlxcdFxcdH1cXG4xMzA4OlxcdFxcbjEzMDk6XFx0XFx0YnJfbmV0ZmlsdGVyX3N5c2N0bF9leGl0X25ldChuZXQsIGJybmV0KTtcXG4xMzEwOlxcdH1cXG4xMzExOlxcdFxcbjEzMTI6XFx0c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBicm5mX25ldF9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4xMzEzOlxcdFxcdC5pbml0ID0gYnJuZl9pbml0X25ldCxcXG4xMzE0OlxcdFxcdC5leGl0ID0gYnJuZl9leGl0X25ldCxcXG4xMzE1OlxcdFxcdC5pZCAgID0gXFx1MDAyNmJybmZfbmV0X2lkLFxcbjEzMTY6XFx0XFx0LnNpemUgPSBzaXplb2Yoc3RydWN0IGJybmZfbmV0KSxcXG4xMzE3OlxcdH07XFxuMTMxODpcXHRcXG4xMzE5OlxcdHN0YXRpYyBpbnQgX19pbml0IGJyX25ldGZpbHRlcl9pbml0KHZvaWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjMzOjUyLjY0ODAwMzMwMloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4MjI2NDgxMTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJyaWRnZSBOZXRmaWx0ZXIgQmVoYXZpb3IgaW4gTm9uLUluaXRpYWwgVXNlciBOYW1lc3BhY2VzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGUgYnJpZGdlIG5ldGZpbHRlciBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGl0IGJlaGF2ZXMgd2l0aGluIHVzZXIgbmFtZXNwYWNlcyB0aGF0ICphcmVuJ3QqIHRoZSBpbml0aWFsIG9uZS4gVGhlIG1haW4gY29uY2VybiBoZXJlIHNlZW1zIHRvIGJlIGFib3V0IHNlY3VyaXR5IGFuZCBwb3RlbnRpYWxseSBleHBvc2luZyBsZWdhY3kgZmVhdHVyZXMgaW4gYSB3YXkgdGhhdCdzIHVuaW50ZW5kZWQgb3IgZXhwbG9pdGFibGUuXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIHdoYXQgaGFwcGVucyB3aGVuIGBuZXQtXHUwMDNldXNlcl9uc2AgaXNuJ3QgdGhlIGluaXRpYWwgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGhpbmcgSSBub3RpY2VkIGlzIHRoYXQgYGJyX25ldGZpbHRlcl9zeXNjdGxfaW5pdF9uZXQobmV0KWAgaXNuJ3QgY2FsbGVkLCB3aGljaCBtYWtlcyBzZW5zZSBpbiB0aGlzIGNvbnRleHQuIEJlY2F1c2Ugb2YgdGhpcywgYGJybmV0LVx1MDAzZWluX3VzZXJuc2AgaXMgc2V0IHRvIGB0cnVlYC4gVGhpcyBgYnJuZXRgIHN0cnVjdHVyZSwgdGhlIHBlci1uZXQgaW5mb3JtYXRpb24sIGlzIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCB3aGVuIHRoZSBgbmV0YCBpcyBjcmVhdGVkLiBUaGlzIG1lYW5zIGV2ZXJ5dGhpbmcgc3RhcnRzIGF0IHplcm86IHRoZSBgY3RsX2hkcmAsIHRoZSBob29rIHBvaW50ZXJzLCB0aGUgYGVuYWJsZWRgIGZsYWcsICpldmVyeXRoaW5nKi5cblxuTm93LCB3aGVuIGEgbmV0IGRldmljZSBldmVudCBjb21lcyBpbiB2aWEgYGJybmZfZGV2aWNlX2V2ZW50YCwgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIHNob3dzIGl0J3Mgb25seSBlbmFibGVkIGlmIGVpdGhlciBgYnJuZXQtXHUwMDNlZW5hYmxlZGAgaXMgdHJ1ZSwgb3IgYGJybmV0LVx1MDAzZWluX3VzZXJuc2AgaXMgdHJ1ZS4gKkJ1dCogc2luY2UgYGJybmV0LVx1MDAzZWluX3VzZXJuc2AgaXMgYWx3YXlzIHRydWUsIHRoZSBob29rcyB3aWxsIG5ldmVyIGJlIHJlZ2lzdGVyZWQsIG1lYW5pbmcgdGhhdCBsZWdhY3kgYnJpZGdlIG5ldGZpbHRlciBmdW5jdGlvbmFsaXR5IHNpbXBseSB3b24ndCBydW4gd2l0aGluIHRoaXMgbmFtZXNwYWNlLlxuXG5Mb29raW5nIGF0IHRoZSBleGl0IHBhdGgsIGBicm5mX2V4aXRfbmV0YCwgY29uZmlybXMgdGhpcy4gQmVjYXVzZSBgYnJuZXQtXHUwMDNlZW5hYmxlZGAgaXMgZmFsc2UsIGBuZl91bnJlZ2lzdGVyX25ldF9ob29rc2AgaXMgc2tpcHBlZC4gVGhlbiwgYGJyX25ldGZpbHRlcl9zeXNjdGxfZXhpdF9uZXQobmV0LCBicm5ldClgIGNoZWNrcyBmb3IgYSBOVUxMIGBoZWFkZXJgLiBCZWNhdXNlIG9mIHRoZSBpbml0aWFsIHplcm9pbmcgZnJvbSBga3phbGxvY2AsIHRoaXMgaXMgdHJ1ZSwgc28gaXQgZXhpdHMgY2xlYW5seS5cblxuTm93LCBJIGNoZWNrZWQgaWYgYW55IG90aGVyIHBhcnRzIG9mIHRoZSBjb2RlIGFjdHVhbGx5ICp1c2UqIHRoZSBgYnJuZXRgIHN0cnVjdHVyZS4gSSd2ZSBjb25maXJtZWQgdGhhdCBzdHVmZiBsaWtlIGBpc192bGFuX2lwYCwgYGJyX25mX3ByZV9yb3V0aW5nYCwgZXRjLiwgYXJlIG9ubHkgY2FsbGVkIGZyb20gdGhlIGJyaWRnZSBuZXRmaWx0ZXIgaG9va3MgdGhlbXNlbHZlcyB3aGljaCBhcmUgbmV2ZXIgcmVnaXN0ZXJlZCBpbiB0aGlzIHBhdGguIFRoZSBwZXJuZXQgbWVtb3J5ICppcyogemVyby1pbml0aWFsaXplZCB2aWEgYGt6YWxsb2NgLCBhbmQgdGhlIGBicm5ldC1cdTAwM2Vpbl91c2VybnNgIHZhcmlhYmxlIGlzIGEgc2ltcGxlIGJvb2xlYW4gd2l0aGluIGBzdHJ1Y3QgYnJuZl9uZXRgLlxuXG5TbyB0aGUgYmlnIHF1ZXN0aW9uOiBBcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzIHRvIHVzZXJzcGFjZT8gVGhlIGFuc3dlciwgYXQgbGVhc3QgYXMgZmFyIGFzIEkgY2FuIHRlbGwsIGlzIG5vLiBXZSdyZSBub3Qgc2VuZGluZyBhbnl0aGluZyB1bmluaXRpYWxpemVkIHRvIHVzZXIgc3BhY2UsIHRoZXJlIGFyZSBubyBgY29weV90b191c2VyYCBvciBgcHV0X3VzZXJgIGNhbGxzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGFyZSByZWFkLiBUaGUgcGVybmV0IG1lbW9yeSBpcyByZWxpYWJseSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBrZXJuZWwgaW5mcmFzdHJ1Y3R1cmUgaXRzZWxmLlxuXG5GaW5hbGx5LCBJIHJhbiBhIGNoZWNrIGFnYWluc3QgdGhlIEtNU0FOIHJlcXVpcmVtZW50cy4gUmVtZW1iZXIsIHdlIG9ubHkgbmVlZCBpdCBpZiB3ZSdyZSB0b3VjaGluZyBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBpZiB3ZSBoYXZlIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGVudCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEuIFdlJ3JlIG5vdCBkb2luZyBhbnkgb2YgdGhhdCBoZXJlLiBUaGlzIHBhdGNoIGlzIGp1c3QgKmRpc2FibGluZyogYnJpZGdlIG5ldGZpbHRlciBmdW5jdGlvbmFsaXR5IGluIHVucHJpdmlsZWdlZCBuYW1lc3BhY2VzIHRvIHByZXZlbnQgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGxlZ2FjeSBjb2RlIGZyb20gcnVubmluZy4gVGhlIG9ubHkgZmllbGRzIHdlIG1vZGlmeSBhcmUgd2l0aGluIHRoZSB6ZXJvLWluaXRpYWxpemVkIGBzdHJ1Y3QgYnJuZl9uZXRgLiBUaGUgc3lzY3RsIHRlYXJkb3duIGlzIG5vdyBzYWZlbHkgaGFuZGxlZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSBsZWFrIHZlY3RvcnMgaW50cm9kdWNlZC5cblxuVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBhbmQgc3l6a2FsbGVyIGNvdmVyYWdlIHNob3VsZCBiZSBhZGVxdWF0ZS4gTm8gZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgcmVxdWlyZWQuIEkgY2FuIGNvbmZpZGVudGx5IGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDgwLCJPdXRwdXRUb2tlbnMiOjIzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIyOjM0OjAwLjg3NDQ4NzgzOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzdHJpY3RzIHRoZSBsZWdhY3kgYnJfbmV0ZmlsdGVyIG1vZHVsZSBpbiBub24taW5pdGlhbCB1c2VyIG5hbWVzcGFjZXMgYnkgc2V0dGluZyBhIG5ldyBib29sZWFuIGZsYWcgKGBpbl91c2VybnNgKSwgYXZvaWRpbmcgc3lzY3RsIHJlZ2lzdHJhdGlvbiwgYW5kIHNraXBwaW5nIG5ldGZpbHRlciBob29rIHJlZ2lzdHJhdGlvbiBvbiBkZXZpY2UgZXZlbnRzLlxcblxcbi0gTWVtb3J5IEFsbG9jYXRpb24gXFx1MDAyNiBJbml0aWFsaXphdGlvbjogYHN0cnVjdCBicm5mX25ldGAgaXMgYWxsb2NhdGVkIGFzIHBlci1uZXRucyBzdG9yYWdlIGJ5IHRoZSBwZXJuZXQgc3Vic3lzdGVtIHVzaW5nIHplcm8taW5pdGlhbGl6ZWQgbWVtb3J5IChga3phbGxvY2ApLiBUaGUgYWRkZWQgYGluX3VzZXJuc2AgYm9vbGVhbiBhbmQgZXhpc3RpbmcgZmllbGRzIGFyZSBzYWZlbHkgemVyby1pbml0aWFsaXplZCBvbiBhbGxvY2F0aW9uLlxcbi0gTm8gSW5mbyBMZWFrcyBvciBVbmluaXRpYWxpemVkIFJlYWRzOiBUaGUgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgYWxzbyBndWFyZHMgc3lzY3RsIGNsZWFudXAgYWdhaW5zdCBOVUxMIHBvaW50ZXJzIChgY3RsX2hkcmApIHdoZW4gc3lzY3RsIHJlZ2lzdHJhdGlvbiB3YXMgc2tpcHBlZC5cXG4tIFN0YW5kYXJkIFNhbml0aXplciBBcHBsaWNhYmlsaXR5OiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcm91bmQgbGlmZWN5Y2xlLCBudWxsIGRlcmVmZXJlbmNlcywgb3IgbmV0bnMgZGVzdHJ1Y3Rpb24gYXJlIGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyByZXF1aXJpbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc3RyaWN0cyB0aGUgbGVnYWN5IGJyX25ldGZpbHRlciBtb2R1bGUgaW4gbm9uLWluaXRpYWwgdXNlciBuYW1lc3BhY2VzIGJ5IHNldHRpbmcgYSBuZXcgYm9vbGVhbiBmbGFnIChgaW5fdXNlcm5zYCksIGF2b2lkaW5nIHN5c2N0bCByZWdpc3RyYXRpb24sIGFuZCBza2lwcGluZyBuZXRmaWx0ZXIgaG9vayByZWdpc3RyYXRpb24gb24gZGV2aWNlIGV2ZW50cy5cXG5cXG4tIE1lbW9yeSBBbGxvY2F0aW9uIFxcdTAwMjYgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgYnJuZl9uZXRgIGlzIGFsbG9jYXRlZCBhcyBwZXItbmV0bnMgc3RvcmFnZSBieSB0aGUgcGVybmV0IHN1YnN5c3RlbSB1c2luZyB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeSAoYGt6YWxsb2NgKS4gVGhlIGFkZGVkIGBpbl91c2VybnNgIGJvb2xlYW4gYW5kIGV4aXN0aW5nIGZpZWxkcyBhcmUgc2FmZWx5IHplcm8taW5pdGlhbGl6ZWQgb24gYWxsb2NhdGlvbi5cXG4tIE5vIEluZm8gTGVha3Mgb3IgVW5pbml0aWFsaXplZCBSZWFkczogVGhlIHBhdGNoIGRvZXMgbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGFsc28gZ3VhcmRzIHN5c2N0bCBjbGVhbnVwIGFnYWluc3QgTlVMTCBwb2ludGVycyAoYGN0bF9oZHJgKSB3aGVuIHN5c2N0bCByZWdpc3RyYXRpb24gd2FzIHNraXBwZWQuXFxuLSBTdGFuZGFyZCBTYW5pdGl6ZXIgQXBwbGljYWJpbGl0eTogQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJvdW5kIGxpZmVjeWNsZSwgbnVsbCBkZXJlZmVyZW5jZXMsIG9yIG5ldG5zIGRlc3RydWN0aW9uIGFyZSBoYW5kbGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgcmVxdWlyaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowswzs4[1] Phase: Succeeded StartedAt: 2026-08-31 22:34:12 +0000 UTC FinishedAt: 2026-08-31 22:34:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 22:34:12 +0000 UTC FinishedAt: 2026-08-31 22:34:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2] Phase: Succeeded StartedAt: 2026-08-31 22:34:12 +0000 UTC FinishedAt: 2026-09-01 02:20:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-31 22:34:12 +0000 UTC FinishedAt: 2026-09-01 02:20:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-31 22:34:12 +0000 UTC FinishedAt: 2026-08-31 22:34:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-31 22:34:12 +0000 UTC FinishedAt: 2026-08-31 22:34:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowswzs4/series-workflowswzs4-convert-artifact-2167455410/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-31 22:34:38 +0000 UTC FinishedAt: 2026-08-31 22:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-31 22:34:38 +0000 UTC FinishedAt: 2026-08-31 22:53:56 +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:*2332a941-d761-4d3f-ae56-a3955c5eeef1,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-workflowswzs4/series-workflowswzs4-convert-artifact-2167455410/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": "3c8979e0-92f8-4174-b04d-73cc2b10b7d8", "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-workflowswzs4/series-workflowswzs4-build-action-346886192/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-31 22:34:38 +0000 UTC FinishedAt: 2026-08-31 22:53:46 +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:*2332a941-d761-4d3f-ae56-a3955c5eeef1,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-workflowswzs4/series-workflowswzs4-convert-artifact-2167455410/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": "3c8979e0-92f8-4174-b04d-73cc2b10b7d8", "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-workflowswzs4/series-workflowswzs4-build-action-346886192/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-31 22:53:56 +0000 UTC FinishedAt: 2026-08-31 22:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-31 22:53:56 +0000 UTC FinishedAt: 2026-08-31 22:53:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-31 22:53:56 +0000 UTC FinishedAt: 2026-08-31 22:54:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-31 22:53:56 +0000 UTC FinishedAt: 2026-08-31 22:54:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowswzs4/series-workflowswzs4-convert-artifact-738758093/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-31 22:54:16 +0000 UTC FinishedAt: 2026-08-31 22:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-31 22:54:16 +0000 UTC FinishedAt: 2026-08-31 22:56:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3c8979e0-92f8-4174-b04d-73cc2b10b7d8,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-workflowswzs4/series-workflowswzs4-build-action-346886192/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-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-31 22:56:14 +0000 UTC FinishedAt: 2026-08-31 22:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-31 22:56:14 +0000 UTC FinishedAt: 2026-08-31 22:56:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-31 22:56:14 +0000 UTC FinishedAt: 2026-08-31 23:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-31 22:56:14 +0000 UTC FinishedAt: 2026-08-31 23:16:07 +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:*2332a941-d761-4d3f-ae56-a3955c5eeef1,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-workflowswzs4/series-workflowswzs4-convert-artifact-738758093/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": "a4f9c296-838f-4975-bf75-9f8c84c783d1", "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-workflowswzs4/series-workflowswzs4-build-action-891272105/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-31 22:56:14 +0000 UTC FinishedAt: 2026-08-31 23:15:57 +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:*2332a941-d761-4d3f-ae56-a3955c5eeef1,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-workflowswzs4/series-workflowswzs4-convert-artifact-738758093/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": "a4f9c296-838f-4975-bf75-9f8c84c783d1", "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-workflowswzs4/series-workflowswzs4-build-action-891272105/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-31 23:16:07 +0000 UTC FinishedAt: 2026-08-31 23:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-31 23:16:07 +0000 UTC FinishedAt: 2026-08-31 23:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-31 23:16:07 +0000 UTC FinishedAt: 2026-08-31 23:18:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-31 23:16:07 +0000 UTC FinishedAt: 2026-08-31 23:17:50 +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:*a4f9c296-838f-4975-bf75-9f8c84c783d1,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-workflowswzs4/series-workflowswzs4-build-action-891272105/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-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-31 23:18:00 +0000 UTC FinishedAt: 2026-09-01 02:20:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-31 23:18:00 +0000 UTC FinishedAt: 2026-09-01 02:20:56 +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":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"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:*3c8979e0-92f8-4174-b04d-73cc2b10b7d8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a4f9c296-838f-4975-bf75-9f8c84c783d1,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-workflowswzs4/series-workflowswzs4-build-action-346886192/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-workflowswzs4/series-workflowswzs4-build-action-891272105/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-31 23:18:00 +0000 UTC FinishedAt: 2026-08-31 23:18:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-31 23:18:00 +0000 UTC FinishedAt: 2026-08-31 23:18:06 +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":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"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-workflowswzs4/series-workflowswzs4-convert-artifact-2905066162/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-31 23:18:00 +0000 UTC FinishedAt: 2026-08-31 23:18:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-31 23:18:00 +0000 UTC FinishedAt: 2026-08-31 23:18:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-31 23:18:00 +0000 UTC FinishedAt: 2026-08-31 23:18:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-31 23:18:10 +0000 UTC FinishedAt: 2026-09-01 02:20:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowswzs4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["brnf_device_event","brnf_init_net","brnf_exit_net","br_nf_hook_thresh"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1b78070aaef63512688aebfbc82365ef9d6660f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE_NETFILTER","BRIDGE","NETFILTER","USER_NS","NET_NS"],"series_id":"e2dec9ae-e149-462d-8d80-1ee46fb10c7e","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-31 23:18:10 +0000 UTC FinishedAt: 2026-09-01 02:20:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3c8979e0-92f8-4174-b04d-73cc2b10b7d8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a4f9c296-838f-4975-bf75-9f8c84c783d1,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-workflowswzs4/series-workflowswzs4-build-action-346886192/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-workflowswzs4/series-workflowswzs4-build-action-891272105/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-workflowswzs4/series-workflowswzs4-convert-artifact-2905066162/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,}