Name: series-workflow6j56p Phase: Succeeded StartedAt: 2026-09-05 04:42:05 +0000 UTC FinishedAt: 2026-09-05 09:32:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[0] Phase: Succeeded StartedAt: 2026-09-05 04:42:05 +0000 UTC FinishedAt: 2026-09-05 05:52:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 04:42:05 +0000 UTC FinishedAt: 2026-09-05 05:52:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_IO_TRACE", "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_IO_TRACE", "BLOCK" ], "series_id": "6eefcd0a-6495-4ffa-bf26-cd9312cebcf7" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__blk_add_trace", "blk_trace_setup_queue", "record_blktrace_event2", "sysfs_blk_trace_attr_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfSU9fVFJBQ0UmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2Jsa19hZGRfdHJhY2UmIzM0OywKICAgICYjMzQ7YmxrX3RyYWNlX3NldHVwX3F1ZXVlJiMzNDssCiAgICAmIzM0O3JlY29yZF9ibGt0cmFjZV9ldmVudDImIzM0OywKICAgICYjMzQ7c3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNvbHZlcyBhIGZvcm1hdCBtaXNtYXRjaCBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCAvIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgZnRyYWNlIGJsb2NrIHRyYWNpbmcgc3Vic3lzdGVtIChibGt0cmFjZSkuIFByZXZpb3VzbHksIGlmIGJ0LVx1MDAzZXZlcnNpb24gd2FzIDEgb3IgMCwgX19ibGtfYWRkX3RyYWNlKCkgY291bGQgYWxsb2NhdGUgYW5kIHdyaXRlIGEgc21hbGxlciB2MSAoYmxrX2lvX3RyYWNlKSBldmVudCBpbnRvIHRoZSBmdHJhY2UgcmluZyBidWZmZXIgd2hpbGUgZnRyYWNlIGNvbnN1bWVycyBwYXJzZWQgZW50cmllcyBzdHJpY3RseSBhcyB2MiAoYmxrX2lvX3RyYWNlMiksIHJlc3VsdGluZyBpbiBwZHVfc3RhcnQoKSBpbmRleGluZyBvdXQtb2YtYm91bmRzIGJleW9uZCB0aGUgcmVzZXJ2ZWQgZXZlbnQgYnVmZmVyLlxuXG5UaGlzIGNsYXNzIG9mIGJ1ZyAob3V0LW9mLWJvdW5kcyByZWFkIGFuZCB1c2UtYWZ0ZXItZnJlZSkgaXMgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBmdHJhY2UgcGF0aCB0byB1bmNvbmRpdGlvbmFsbHkgcmVjb3JkIHYyIGV2ZW50cyBvZiBzaXplIHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgJiM0MzsgcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbiBhbmQgaW5pdGlhbGl6ZXMgYnQtXHUwMDNldmVyc2lvbiB0byAyIGluIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpICh3aGVyZSB0aGUgbWVtb3J5IGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGt6YWxsb2Nfb2JqKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIHRyYWNlIHN1YnN5c3RlbSAoa2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMpLCBzcGVjaWZpY2FsbHkgaW4gX19ibGtfYWRkX3RyYWNlKCkgYW5kIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB1bmNvbmRpdGlvbmFsbHkgdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGxheW91dCwgZWxpbWluYXRpbmcgcG90ZW50aWFsIGJ1ZmZlciBtaXNtYXRjaGVzIGFuZCBvdXQtb2YtYm91bmRzIHJlYWRzLCBhbmQgaW5pdGlhbGl6ZXMgYnQtXHUwMDNldmVyc2lvbiBmb3Igc3lzZnMtY29uZmlndXJlZCBxdWV1ZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBibG9jayBsYXllciB0cmFjaW5nIGxvZ2ljIGFjY2Vzc2libGUgdmlhIHN5c2ZzIGFuZCBibG9jayBJL08gaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjFmNzg4N2ZmZmFhZTY1YjE3ZjE2MTFhOWUwYWRlODZhMWE5ZDlhZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDU6NTE6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xuaW5kZXggOGNkMjUyMGI0Yzk5ZS4uYWUwMTA5NjljMTQ0MyAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xuQEAgLTM4NSw2NiAmIzQzOzM4NSwyNiBAQCBzdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxuIFx0aWYgKGJsa190cmFjZXIpIHtcbiBcdFx0YnVmZmVyID0gYmxrX3RyLVx1MDAzZWFycmF5X2J1ZmZlci5idWZmZXI7XG4gXHRcdHRyYWNlX2N0eCA9IHRyYWNpbmdfZ2VuX2N0eF9mbGFncygwKTtcbi1cdFx0c3dpdGNoIChidC1cdTAwM2V2ZXJzaW9uKSB7XG4tXHRcdGNhc2UgMTpcbi1cdFx0XHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZSk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgMjpcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIGZ0cmFjZSBhbHdheXMgdXNlcyB2MiAoYmxrX2lvX3RyYWNlMikgZm9ybWF0LlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogRm9yIHN5c2ZzLWVuYWJsZWQgdHJhY2luZyBwYXRoIChlbmFibGVkIHZpYVxuLVx0XHRcdCAqIC9zeXMvYmxvY2svREVWL3RyYWNlL2VuYWJsZSksIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpXG4tXHRcdFx0ICogbmV2ZXIgaW5pdGlhbGl6ZXMgYnQtXHUwMDNldmVyc2lvbiwgbGVhdmluZyBpdCAwIGZyb21cbi1cdFx0XHQgKiBremFsbG9jKCkuIFdlIG11c3QgaGFuZGxlIHZlcnNpb249PTAgc2FmZWx5IGhlcmUuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCB0byBlbnN1cmUgd2UgbmV2ZXIgaGl0IHRoZVxuLVx0XHRcdCAqIG9sZCBidWcgd2hlcmUgZGVmYXVsdCBzZXQgdHJhY2VfbGVuPTAsIGNhdXNpbmdcbi1cdFx0XHQgKiBidWZmZXIgdW5kZXJmbG93IGFuZCBtZW1vcnkgY29ycnVwdGlvbi5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIEFsd2F5cyB1c2UgdjIgZm9ybWF0IGZvciBmdHJhY2UgYW5kIG5vcm1hbGl6ZVxuLVx0XHRcdCAqIGJ0LVx1MDAzZXZlcnNpb24gdG8gMiB3aGVuIHVuaW5pdGlhbGl6ZWQuXG4tXHRcdFx0ICovXG4tXHRcdFx0dHJhY2VfbGVuID0gc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKTtcbi1cdFx0XHRpZiAoYnQtXHUwMDNldmVyc2lvbiA9PSAwKVxuLVx0XHRcdFx0YnQtXHUwMDNldmVyc2lvbiA9IDI7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0dHJhY2VfbGVuICYjNDM7PSBwZHVfbGVuICYjNDM7IGNnaWRfbGVuO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBmdHJhY2UgcmluZyBidWZmZXIgYWx3YXlzIHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKVxuJiM0MztcdFx0ICogZm9ybWF0OyB0aGUgZnRyYWNlIHJlYWRlcnMgcGFyc2Ugb25seSB0aGF0LiBidC1cdTAwM2V2ZXJzaW9uXG4mIzQzO1x0XHQgKiBkZXNjcmliZXMganVzdCB0aGUgcmVsYXkvY2xhc3NpYyBibGt0cmFjZSByZWNvcmQgZm9ybWF0LlxuJiM0MztcdFx0ICogUmVjb3JkaW5nIGEgdjEtc2l6ZWQgZXZlbnQgaGVyZSB3b3VsZCBzaGlmdCBwZHVfc3RhcnQoKSAxNlxuJiM0MztcdFx0ICogYnl0ZXMgcGFzdCB0aGUgUERVIGFuZCBtYWtlIGJsa19sb2dfcmVtYXAoKSByZWFkIHBhc3QgdGhlXG4mIzQzO1x0XHQgKiBldmVudCAoYSB1c2UtYWZ0ZXItZnJlZSBvbiBjb25jdXJyZW50IGJ1ZmZlciByZXNpemUpLCBhbmQgdjFcbiYjNDM7XHRcdCAqIGNhbm5vdCByZXByZXNlbnQgdGhlIG5ld2VyIDY0LWJpdCB6b25lIGFjdGlvbnMgYW55d2F5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICYjNDM7IHBkdV9sZW4gJiM0MzsgY2dpZF9sZW47XG4gXHRcdGV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSyxcbiBcdFx0XHRcdFx0XHQgIHRyYWNlX2xlbiwgdHJhY2VfY3R4KTtcbiBcdFx0aWYgKCFldmVudClcbiBcdFx0XHRyZXR1cm47XG4gXG4gXHRcdHRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3VycmVudCk7XG4tXHRcdHN3aXRjaCAoYnQtXHUwMDNldmVyc2lvbikge1xuLVx0XHRjYXNlIDE6XG4tXHRcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLFxuLVx0XHRcdFx0XHQgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcbi1cdFx0XHRcdFx0ICAgICAgd2hhdCwgYnQtXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXG4tXHRcdFx0XHRcdCAgICAgIHBkdV9kYXRhLCBwZHVfbGVuKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAyOlxuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVXNlIHYyIHJlY29yZGluZyBmdW5jdGlvbiAocmVjb3JkX2Jsa3RyYWNlX2V2ZW50Milcbi1cdFx0XHQgKiB3aGljaCB3cml0ZXMgYmxrX2lvX3RyYWNlMiBzdHJ1Y3R1cmUgd2l0aCBjb3JyZWN0XG4tXHRcdFx0ICogZmllbGQgbGF5b3V0OlxuLVx0XHRcdCAqICAgLSAzMi1iaXQgcGlkIGF0IG9mZnNldCAyOFxuLVx0XHRcdCAqICAgLSA2NC1iaXQgYWN0aW9uIGF0IG9mZnNldCAzMlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgaGFuZGxlcyB2ZXJzaW9uPT0wIGNhc2Vcbi1cdFx0XHQgKiAoZnJvbSBzeXNmcyBwYXRoKSwgZW5zdXJpbmcgd2UgYWx3YXlzIHVzZSBjb3JyZWN0XG4tXHRcdFx0ICogdjIgcmVjb3JkaW5nIGZ1bmN0aW9uIHRvIG1hdGNoIHRoZSB2MiBidWZmZXJcbi1cdFx0XHQgKiBhbGxvY2F0ZWQgYWJvdmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcbi1cdFx0XHRcdFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxuLVx0XHRcdFx0XHQgICAgICAgd2hhdCwgYnQtXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXG4tXHRcdFx0XHRcdCAgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiYjNDM7XHRcdHJlY29yZF9ibGt0cmFjZV9ldmVudDIocmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCksXG4mIzQzO1x0XHRcdFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxuJiM0MztcdFx0XHRcdCAgICAgICB3aGF0LCBidC1cdTAwM2VkZXYsIGVycm9yLCBjZ2lkLCBjZ2lkX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgICAgcGR1X2RhdGEsIHBkdV9sZW4pO1xuIFxuIFx0XHR0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChibGtfdHIsIGJ1ZmZlciwgZXZlbnQsIHRyYWNlX2N0eCk7XG4gXHRcdHJldHVybjtcbkBAIC0xOTEzLDYgJiM0MzsxODczLDEyIEBAIHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIFxuIFx0YnQtXHUwMDNlZGV2ID0gYmRldi1cdTAwM2ViZF9kZXY7XG4gXHRidC1cdTAwM2VhY3RfbWFzayA9ICh1MTYpLTE7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGlzIHN5c2ZzLWVuYWJsZWQgcGF0aCBmZWVkcyB0aGUgZnRyYWNlIGJsayB0cmFjZXIsIHdoaWNoIGFsd2F5c1xuJiM0MztcdCAqIHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKSBmb3JtYXQuIEluaXRpYWxpemUgdGhlIHZlcnNpb24gc28gaXQgaXNcbiYjNDM7XHQgKiBuZXZlciBsZWZ0IGRhbmdsaW5nIGFzIDAgZm9yIGZ1dHVyZSBjb25zdW1lcnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0YnQtXHUwMDNldmVyc2lvbiA9IDI7XG4gXG4gXHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0lPX1RSQUNFJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19ibGtfYWRkX3RyYWNlJiMzNDssCiAgICAmIzM0O2Jsa190cmFjZV9zZXR1cF9xdWV1ZSYjMzQ7LAogICAgJiMzNDtyZWNvcmRfYmxrdHJhY2VfZXZlbnQyJiMzNDssCiAgICAmIzM0O3N5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayB0cmFjZSBzdWJzeXN0ZW0gKGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jKSwgc3BlY2lmaWNhbGx5IGluIF9fYmxrX2FkZF90cmFjZSgpIGFuZCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBmdHJhY2UgcmluZyBidWZmZXIgdW5jb25kaXRpb25hbGx5IHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKSBsYXlvdXQsIGVsaW1pbmF0aW5nIHBvdGVudGlhbCBidWZmZXIgbWlzbWF0Y2hlcyBhbmQgb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGluaXRpYWxpemVzIGJ0LVx1MDAzZXZlcnNpb24gZm9yIHN5c2ZzLWNvbmZpZ3VyZWQgcXVldWVzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgYmxvY2sgbGF5ZXIgdHJhY2luZyBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxZjc4ODdmZmZhYWU2NWIxN2YxNjExYTllMGFkZTg2YTFhOWQ5YWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA1OjUxOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwppbmRleCA4Y2QyNTIwYjRjOTllLi5hZTAxMDk2OWMxNDQzIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwpAQCAtMzg1LDY2ICYjNDM7Mzg1LDI2IEBAIHN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsCiAJaWYgKGJsa190cmFjZXIpIHsKIAkJYnVmZmVyID0gYmxrX3RyLSZndDthcnJheV9idWZmZXIuYnVmZmVyOwogCQl0cmFjZV9jdHggPSB0cmFjaW5nX2dlbl9jdHhfZmxhZ3MoMCk7Ci0JCXN3aXRjaCAoYnQtJmd0O3ZlcnNpb24pIHsKLQkJY2FzZSAxOgotCQkJdHJhY2VfbGVuID0gc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJZGVmYXVsdDoKLQkJCS8qCi0JCQkgKiBmdHJhY2UgYWx3YXlzIHVzZXMgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC4KLQkJCSAqCi0JCQkgKiBGb3Igc3lzZnMtZW5hYmxlZCB0cmFjaW5nIHBhdGggKGVuYWJsZWQgdmlhCi0JCQkgKiAvc3lzL2Jsb2NrL0RFVi90cmFjZS9lbmFibGUpLCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKQotCQkJICogbmV2ZXIgaW5pdGlhbGl6ZXMgYnQtJmd0O3ZlcnNpb24sIGxlYXZpbmcgaXQgMCBmcm9tCi0JCQkgKiBremFsbG9jKCkuIFdlIG11c3QgaGFuZGxlIHZlcnNpb249PTAgc2FmZWx5IGhlcmUuCi0JCQkgKgotCQkJICogRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgdG8gZW5zdXJlIHdlIG5ldmVyIGhpdCB0aGUKLQkJCSAqIG9sZCBidWcgd2hlcmUgZGVmYXVsdCBzZXQgdHJhY2VfbGVuPTAsIGNhdXNpbmcKLQkJCSAqIGJ1ZmZlciB1bmRlcmZsb3cgYW5kIG1lbW9yeSBjb3JydXB0aW9uLgotCQkJICoKLQkJCSAqIEFsd2F5cyB1c2UgdjIgZm9ybWF0IGZvciBmdHJhY2UgYW5kIG5vcm1hbGl6ZQotCQkJICogYnQtJmd0O3ZlcnNpb24gdG8gMiB3aGVuIHVuaW5pdGlhbGl6ZWQuCi0JCQkgKi8KLQkJCXRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMik7Ci0JCQlpZiAoYnQtJmd0O3ZlcnNpb24gPT0gMCkKLQkJCQlidC0mZ3Q7dmVyc2lvbiA9IDI7Ci0JCQlicmVhazsKLQkJfQotCQl0cmFjZV9sZW4gJiM0Mzs9IHBkdV9sZW4gJiM0MzsgY2dpZF9sZW47CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciBhbHdheXMgdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpCiYjNDM7CQkgKiBmb3JtYXQ7IHRoZSBmdHJhY2UgcmVhZGVycyBwYXJzZSBvbmx5IHRoYXQuIGJ0LSZndDt2ZXJzaW9uCiYjNDM7CQkgKiBkZXNjcmliZXMganVzdCB0aGUgcmVsYXkvY2xhc3NpYyBibGt0cmFjZSByZWNvcmQgZm9ybWF0LgomIzQzOwkJICogUmVjb3JkaW5nIGEgdjEtc2l6ZWQgZXZlbnQgaGVyZSB3b3VsZCBzaGlmdCBwZHVfc3RhcnQoKSAxNgomIzQzOwkJICogYnl0ZXMgcGFzdCB0aGUgUERVIGFuZCBtYWtlIGJsa19sb2dfcmVtYXAoKSByZWFkIHBhc3QgdGhlCiYjNDM7CQkgKiBldmVudCAoYSB1c2UtYWZ0ZXItZnJlZSBvbiBjb25jdXJyZW50IGJ1ZmZlciByZXNpemUpLCBhbmQgdjEKJiM0MzsJCSAqIGNhbm5vdCByZXByZXNlbnQgdGhlIG5ld2VyIDY0LWJpdCB6b25lIGFjdGlvbnMgYW55d2F5LgomIzQzOwkJICovCiYjNDM7CQl0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICYjNDM7IHBkdV9sZW4gJiM0MzsgY2dpZF9sZW47CiAJCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSywKIAkJCQkJCSAgdHJhY2VfbGVuLCB0cmFjZV9jdHgpOwogCQlpZiAoIWV2ZW50KQogCQkJcmV0dXJuOwogCiAJCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3VycmVudCk7Ci0JCXN3aXRjaCAoYnQtJmd0O3ZlcnNpb24pIHsKLQkJY2FzZSAxOgotCQkJcmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLAotCQkJCQkgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcywKLQkJCQkJICAgICAgd2hhdCwgYnQtJmd0O2RldiwgZXJyb3IsIGNnaWQsIGNnaWRfbGVuLAotCQkJCQkgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQlkZWZhdWx0OgotCQkJLyoKLQkJCSAqIFVzZSB2MiByZWNvcmRpbmcgZnVuY3Rpb24gKHJlY29yZF9ibGt0cmFjZV9ldmVudDIpCi0JCQkgKiB3aGljaCB3cml0ZXMgYmxrX2lvX3RyYWNlMiBzdHJ1Y3R1cmUgd2l0aCBjb3JyZWN0Ci0JCQkgKiBmaWVsZCBsYXlvdXQ6Ci0JCQkgKiAgIC0gMzItYml0IHBpZCBhdCBvZmZzZXQgMjgKLQkJCSAqICAgLSA2NC1iaXQgYWN0aW9uIGF0IG9mZnNldCAzMgotCQkJICoKLQkJCSAqIEZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IGhhbmRsZXMgdmVyc2lvbj09MCBjYXNlCi0JCQkgKiAoZnJvbSBzeXNmcyBwYXRoKSwgZW5zdXJpbmcgd2UgYWx3YXlzIHVzZSBjb3JyZWN0Ci0JCQkgKiB2MiByZWNvcmRpbmcgZnVuY3Rpb24gdG8gbWF0Y2ggdGhlIHYyIGJ1ZmZlcgotCQkJICogYWxsb2NhdGVkIGFib3ZlLgotCQkJICovCi0JCQlyZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLAotCQkJCQkgICAgICAgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsCi0JCQkJCSAgICAgICB3aGF0LCBidC0mZ3Q7ZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sCi0JCQkJCSAgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7Ci0JCQlicmVhazsKLQkJfQomIzQzOwkJcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSwKJiM0MzsJCQkJICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLAomIzQzOwkJCQkgICAgICAgd2hhdCwgYnQtJmd0O2RldiwgZXJyb3IsIGNnaWQsIGNnaWRfbGVuLAomIzQzOwkJCQkgICAgICAgcGR1X2RhdGEsIHBkdV9sZW4pOwogCiAJCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJsa190ciwgYnVmZmVyLCBldmVudCwgdHJhY2VfY3R4KTsKIAkJcmV0dXJuOwpAQCAtMTkxMyw2ICYjNDM7MTg3MywxMiBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAogCWJ0LSZndDtkZXYgPSBiZGV2LSZndDtiZF9kZXY7CiAJYnQtJmd0O2FjdF9tYXNrID0gKHUxNiktMTsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBzeXNmcy1lbmFibGVkIHBhdGggZmVlZHMgdGhlIGZ0cmFjZSBibGsgdHJhY2VyLCB3aGljaCBhbHdheXMKJiM0MzsJICogdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC4gSW5pdGlhbGl6ZSB0aGUgdmVyc2lvbiBzbyBpdCBpcwomIzQzOwkgKiBuZXZlciBsZWZ0IGRhbmdsaW5nIGFzIDAgZm9yIGZ1dHVyZSBjb25zdW1lcnMuCiYjNDM7CSAqLwomIzQzOwlidC0mZ3Q7dmVyc2lvbiA9IDI7CiAKIAlibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgYmxrdHJhY2UqKgoKT2theSwgc28gdGhleSB3YW50IG1lIHRvIHJldmlldyB0aGlzIGtlcm5lbCBwYXRjaCByZWxhdGVkIHRvIGBibGt0cmFjZWAuIExldCYjMzk7cyBkaWcgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBncmFiIHRoZSBkaWZmIGFuZCBzdGFydCBwb2tpbmcgYXJvdW5kIHRoZSBjb2RlLiBJJiMzOTtsbCBwcm9iYWJseSBmaXJlIHVwIGBncmVwcGVyYCwgYHJlYWQtZmlsZWAsIGFuZCBhIGZldyBvdGhlciB0b29scyB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGUgcGF0Y2ggc3VtbWFyeSBpbmRpY2F0ZXMgY2hhbmdlcyBpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSBgX19ibGtfYWRkX3RyYWNlYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIHRoZSByZW1vdmFsIG9mIGEgYHN3aXRjaGAgc3RhdGVtZW50IGJhc2VkIG9uIGBidC0mZ3Q7dmVyc2lvbmAgd2hlbiBgYmxrX3RyYWNlcmAgaXMgdHJ1ZSDigJMgdGhpcyBpbXBsaWVzIGEgZnRyYWNlIHJpbmcgYnVmZmVyIHBhdGggaXMgaW4gdXNlLiBUaGV5JiMzOTtyZSBvcHRpbmcgdG8gdW5jb25kaXRpb25hbGx5IHVzZSBgc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKWAgYW5kIGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyKClgIGluIHRoaXMgc3BlY2lmaWMgY29uZGl0aW9uLiBBdCB0aGUgc2FtZSB0aW1lLCB0aGUgYGJsa190cmFjZV9zZXR1cF9xdWV1ZWAgZnVuY3Rpb24gaGFzIGJlZW4gYWx0ZXJlZCB0byBpbml0aWFsaXplIGBidC0mZ3Q7dmVyc2lvbiA9IDJgLgoKTXkgZmlyc3QgaW5jbGluYXRpb24gaXMgdG8ganVtcCBpbnRvIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AgYW5kIGltbWVkaWF0ZWx5IGxvb2sgYXJvdW5kIHRoZSBsaW5lcyBtZW50aW9uZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gV2hhdCB3YXMgdGhlIHByZXZpb3VzIGJlaGF2aW9yPyBXaHkgYXJlIHRoZXkgcmVtb3ZpbmcgdGhlIGBzd2l0Y2hgPyBXaGF0JiMzOTtzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY29uZGl0aW9uYWwgYmVoYXZpb3IgYmFzZWQgb24gYGJsa190cmFjZXJgPyBBcmUgdGhlcmUgb3RoZXIgZmlsZXMgb3IgZnVuY3Rpb24gY2FsbHMgYWZmZWN0ZWQ/IEFuZCBtb3N0IGltcG9ydGFudGx5LCBpcyB0aGlzIGNoYW5nZSBzYWZlLCBhbmQgZG9lcyBpdCBhbGlnbiB3aXRoIHRoZSBwcm9qZWN0JiMzOTtzIGxvbmctdGVybSBkZXNpZ24gZ29hbHM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGlzc3Vlcywgb3IgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3MDpcdFx0LyogRHJvcCB0cmFjZSBldmVudHMgZm9yIHpvbmUgb3BlcmF0aW9ucyB3aXRoIGJsa3RyYWNlIHYxICovXG4gMzcxOlx0XHRpZiAoYnQtXHUwMDNldmVyc2lvbiA9PSAxIFx1MDAyNlx1MDAyNiAod2hhdCBcdTAwM2VcdTAwM2UgQkxLX1RDX1NISUZUKSBcdTAwM2UgQkxLX1RDX0VORF9WMSkge1xuIDM3MjpcdFx0XHRwcl9kZWJ1Z19yYXRlbGltaXRlZChcJiMzNDtibGt0cmFjZSB2MSBjYW5ub3QgdHJhY2Ugem9uZSBvcGVyYXRpb24gMHglbGx4XFxuXCYjMzQ7LFxuIDM3MzpcdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZyl3aGF0KTtcbiAzNzQ6XHRcdFx0cmV0dXJuO1xuIDM3NTpcdFx0fVxuIDM3NjpcdFxuIDM3NzpcdFx0aWYgKGNnaWQpXG4gMzc4Olx0XHRcdHdoYXQgfD0gX19CTEtfVEFfQ0dST1VQO1xuIDM3OTpcdFxuIDM4MDpcdFx0cGlkID0gdHNrLVx1MDAzZXBpZDtcbiAzODE6XHRcdGlmIChhY3RfbG9nX2NoZWNrKGJ0LCB3aGF0LCBzZWN0b3IsIHBpZCkpXG4gMzgyOlx0XHRcdHJldHVybjtcbiAzODM6XHRcdGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG4gMzg0Olx0XG4gMzg1Olx0XHRpZiAoYmxrX3RyYWNlcikge1xuIDM4NjpcdFx0XHRidWZmZXIgPSBibGtfdHItXHUwMDNlYXJyYXlfYnVmZmVyLmJ1ZmZlcjtcbiAzODc6XHRcdFx0dHJhY2VfY3R4ID0gdHJhY2luZ19nZW5fY3R4X2ZsYWdzKDApO1xuIDM4ODpcdFx0XHQvKlxuIDM4OTpcdFx0XHQgKiBUaGUgZnRyYWNlIHJpbmcgYnVmZmVyIGFsd2F5cyB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMilcbiAzOTA6XHRcdFx0ICogZm9ybWF0OyB0aGUgZnRyYWNlIHJlYWRlcnMgcGFyc2Ugb25seSB0aGF0LiBidC1cdTAwM2V2ZXJzaW9uXG4gMzkxOlx0XHRcdCAqIGRlc2NyaWJlcyBqdXN0IHRoZSByZWxheS9jbGFzc2ljIGJsa3RyYWNlIHJlY29yZCBmb3JtYXQuXG4gMzkyOlx0XHRcdCAqIFJlY29yZGluZyBhIHYxLXNpemVkIGV2ZW50IGhlcmUgd291bGQgc2hpZnQgcGR1X3N0YXJ0KCkgMTZcbiAzOTM6XHRcdFx0ICogYnl0ZXMgcGFzdCB0aGUgUERVIGFuZCBtYWtlIGJsa19sb2dfcmVtYXAoKSByZWFkIHBhc3QgdGhlXG4gMzk0Olx0XHRcdCAqIGV2ZW50IChhIHVzZS1hZnRlci1mcmVlIG9uIGNvbmN1cnJlbnQgYnVmZmVyIHJlc2l6ZSksIGFuZCB2MVxuIDM5NTpcdFx0XHQgKiBjYW5ub3QgcmVwcmVzZW50IHRoZSBuZXdlciA2NC1iaXQgem9uZSBhY3Rpb25zIGFueXdheS5cbiAzOTY6XHRcdFx0ICovXG4gMzk3Olx0XHRcdHRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgJiM0MzsgcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbjtcbiAzOTg6XHRcdFx0ZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQkxLLFxuIDM5OTpcdFx0XHRcdFx0XHRcdCAgdHJhY2VfbGVuLCB0cmFjZV9jdHgpO1xuIDQwMDpcdFx0XHRpZiAoIWV2ZW50KVxuIDQwMTpcdFx0XHRcdHJldHVybjtcbiA0MDI6XHRcbiA0MDM6XHRcdFx0dHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTtcbiA0MDQ6XHRcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcbiA0MDU6XHRcdFx0XHRcdCAgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcbiA0MDY6XHRcdFx0XHRcdCAgICAgICB3aGF0LCBidC1cdTAwM2VkZXYsIGVycm9yLCBjZ2lkLCBjZ2lkX2xlbixcbiA0MDc6XHRcdFx0XHRcdCAgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7XG4gNDA4Olx0XG4gNDA5Olx0XHRcdHRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJsa190ciwgYnVmZmVyLCBldmVudCwgdHJhY2VfY3R4KTtcbiA0MTA6XHRcdFx0cmV0dXJuO1xuIDQxMTpcdFx0fVxuIDQxMjpcdFxuIDQxMzpcdFx0aWYgKHVubGlrZWx5KHRzay1cdTAwM2VidHJhY2Vfc2VxICE9IGJsa3RyYWNlX3NlcSkpXG4gNDE0Olx0XHRcdHRyYWNlX25vdGVfdHNrKHRzayk7XG4gNDE1Olx0XG4gNDE2Olx0XHQvKlxuIDQxNzpcdFx0ICogQSB3b3JkIGFib3V0IHRoZSBsb2NraW5nIGhlcmUgLSB3ZSBkaXNhYmxlIGludGVycnVwdHMgdG8gcmVzZXJ2ZVxuIDQxODpcdFx0ICogc29tZSBzcGFjZSBpbiB0aGUgcmVsYXkgcGVyLWNwdSBidWZmZXIsIHRvIHByZXZlbnQgYW4gaXJxXG4gNDE5Olx0XHQgKiBmcm9tIGNvbWluZyBpbiBhbmQgc3RlcHBpbmcgb24gb3VyIHRvZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbToKCioqVHJhY2luZyBCbG9jayBEZXZpY2UgUXVldWUgU2V0dXAqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBibG9jayB0cmFjaW5nIGlzIHNldCB1cC4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gZGl2ZSBpbnRvIHRoZSBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCBmdW5jdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGl0JiMzOTtzIGRvaW5nIOKAkyB0aGUgaW5pdGlhbGl6YXRpb24sIHRoZSBjb25uZWN0aW9ucyBpdCYjMzk7cyBtYWtpbmcsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgdG91Y2hpbmcuIFRoZW4sIGVxdWFsbHkgaW1wb3J0YW50bHksIEkgbmVlZCB0byB0cmFjZSAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIEkgbmVlZCB0aGUgY2FsbCBncmFwaCB0byBzZWUgaG93IHRoaXMgc2V0dXAgcHJvY2VzcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgYmxvY2sgSS9PIHN0YWNrLiBBcmUgdGhlcmUgc3BlY2lmaWMgcGF0aHMgb3Igc2NlbmFyaW9zIHRoYXQgdHJpZ2dlciBpdD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHBvaW50cyBvZiBjb25jZXJuPwoKRmluYWxseSwgbGV0JiMzOTtzIG5vdCBmb3JnZXQgdGhlIEtjb25maWcgb3B0aW9ucy4gQmxvY2sgdHJhY2luZyBpcyBvZnRlbiBjb25maWd1cmFibGUsIHNvIEkgbmVlZCB0byBjaGVjayB3aGljaCBvcHRpb25zIGNvbnRyb2wgd2hldGhlciB0aGlzIGNvZGUgZXZlbiAqZ2V0cyogY29tcGlsZWQgYW5kIGxpbmtlZCBpbi4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIG9uIHRob3NlIGNvbmZpZyBzZXR0aW5ncyB3aWxsIGJlIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcgZGlmZmVyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRyYWNpbmcuIFRoaXMgaXMgYWxsIGFib3V0IGdldHRpbmcgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCBmdW5jdGlvbiBhbmQgaXRzIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjU6XHRcbjE4NjY6XHRcdGJ0ID0ga3phbGxvY19vYmooKmJ0KTtcbjE4Njc6XHRcdGlmICghYnQpXG4xODY4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTg2OTpcdFxuMTg3MDpcdFx0YnQtXHUwMDNlbXNnX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShCTEtfVE5fTUFYX01TRywgX19hbGlnbm9mX18oY2hhcikpO1xuMTg3MTpcdFx0aWYgKCFidC1cdTAwM2Vtc2dfZGF0YSlcbjE4NzI6XHRcdFx0Z290byBmcmVlX2J0O1xuMTg3MzpcdFxuMTg3NDpcdFx0YnQtXHUwMDNlZGV2ID0gYmRldi1cdTAwM2ViZF9kZXY7XG4xODc1Olx0XHRidC1cdTAwM2VhY3RfbWFzayA9ICh1MTYpLTE7XG4xODc2Olx0XHQvKlxuMTg3NzpcdFx0ICogVGhpcyBzeXNmcy1lbmFibGVkIHBhdGggZmVlZHMgdGhlIGZ0cmFjZSBibGsgdHJhY2VyLCB3aGljaCBhbHdheXNcbjE4Nzg6XHRcdCAqIHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKSBmb3JtYXQuIEluaXRpYWxpemUgdGhlIHZlcnNpb24gc28gaXQgaXNcbjE4Nzk6XHRcdCAqIG5ldmVyIGxlZnQgZGFuZ2xpbmcgYXMgMCBmb3IgZnV0dXJlIGNvbnN1bWVycy5cbjE4ODA6XHRcdCAqL1xuMTg4MTpcdFx0YnQtXHUwMDNldmVyc2lvbiA9IDI7XG4xODgyOlx0XG4xODgzOlx0XHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcbjE4ODQ6XHRcbjE4ODU6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihxLVx1MDAzZWJsa190cmFjZSwgYnQpO1xuMTg4NjpcdFx0Z2V0X3Byb2JlX3JlZigpO1xuMTg4NzpcdFx0cmV0dXJuIDA7XG4xODg4Olx0XG4xODg5Olx0ZnJlZV9idDpcbjE4OTA6XHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbjE4OTE6XHRcdHJldHVybiByZXQ7XG4xODkyOlx0fVxuMTg5MzpcdFxuMTg5NDpcdC8qXG4xODk1Olx0ICogc3lzZnMgaW50ZXJmYWNlIHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIHRyYWNpbmdcbjE4OTY6XHQgKi9cbjE4OTc6XHRcbjE4OTg6XHRzdGF0aWMgc3NpemVfdCBzeXNmc19ibGtfdHJhY2VfYXR0cl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbjE4OTk6XHRcdFx0XHRcdFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuMTkwMDpcdFx0XHRcdFx0XHQgY2hhciAqYnVmKTtcbjE5MDE6XHRzdGF0aWMgc3NpemVfdCBzeXNmc19ibGtfdHJhY2VfYXR0cl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4xOTAyOlx0XHRcdFx0XHRcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4xOTAzOlx0XHRcdFx0XHRcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpO1xuMTkwNDpcdCNkZWZpbmUgQkxLX1RSQUNFX0RFVklDRV9BVFRSKF9uYW1lKSBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBUcmFjZXBvaW50IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgcmVsYXRlZCB0byBgYmxrdHJhY2VgIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBidWlsZCBzeXN0ZW0sIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgYXJlIGxpa2VseSBkZWZpbmVkLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgYnVpbGQgZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbW9kdWxlLiBJIGtub3cgdGhhdCBLY29uZmlnIGlzIHRoZSBoZWFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBzbyBJJiMzOTtsbCBnbyBzdHJhaWdodCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa3RyYWNlLmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGZpbGVzOgoKKipDaGVja2luZyBSZWxldmFudCBDb25maWd1cmF0aW9uIGFuZCBCdWlsZCBGaWxlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdHJhY2luZyBpcyBjb25maWd1cmVkIGFuZCBidWlsdCwgcGFydGljdWxhcmx5IGFzIGl0IHJlbGF0ZXMgdG8gYmxvY2sgZGV2aWNlIGFjdGl2aXR5LiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBrZXJuZWwvdHJhY2UvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGJlZ2luIGZvciBhbnkgYnVpbGQtcmVsYXRlZCBkZXRhaWxzIGluIHRoZSB0cmFjaW5nIHN1YnN5c3RlbS4gSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IHRyYWNpbmcgbW9kdWxlcyBhbmQgb3B0aW9ucyBhcmUgY29tcGlsZWQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgZXhwb3NlZCB0byB0aGUgdXNlciwgdGhpcyBpcyB3aGVyZSBga2VybmVsL3RyYWNlL0tjb25maWdgIGNvbWVzIGluIHRvIHBsYXkuIEkmIzM5O2xsIGFsc28gY2hlY2sgYGJsb2NrL0tjb25maWdgIHRvIGNyb3NzIHJlZmVyZW5jZSBhbnkgb3B0aW9ucyB0aGF0IGludGVyYWN0IG9yIG1heSBvdmVybGFwIHdpdGggdGhlIGJsb2NrIGRldmljZSB0cmFjaW5nIG9wdGlvbnMgdG8gc2VlIGlmIGFueSBzZXR0aW5ncyBhcmUgc2hhcmVkLiBLbm93aW5nIHRoaXMsIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoZSBibG9jayB0cmFjaW5nIGZlYXR1cmVzIGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzIGFuZCB1c2VyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrdHJhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlPTkxPW9iai0kKENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HKSAmIzQzOz0gdHJhY2VfYnJhbmNoLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo5MjpvYmotJChDT05GSUdfQkxLX0RFVl9JT19UUkFDRSkgJiM0Mzs9IGJsa3RyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS05My1vYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSAmIzQzOz0gZmdyYXBoLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT05ND1pZmVxICgkKENPTkZJR19CTE9DSykseSlcbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo5NTpvYmotJChDT05GSUdfRVZFTlRfVFJBQ0lORykgJiM0Mzs9IGJsa3RyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS05Ni1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODM1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQmxvY2sgRGV2aWNlIEkvTyBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGJsb2NrIGRldmljZSBJL08gdHJhY2luZy4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsLCBuYXR1cmFsbHksIGlzIHRoZSBvYnZpb3VzOiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBhbmQgYGJsb2NrL0tjb25maWdgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWV0aGluZywgcHJvYmFibHkgYSBgY29uZmlnYCBvcHRpb24sIHRoYXQgZGlyZWN0bHkgcmVsYXRlcyB0byBgQkxLX0RFVl9JT19UUkFDRWAuIFRoYXQmIzM5O3MgdGhlIGtleXdvcmQgSSYjMzk7bSBsb29raW5nIGZvciAtIGBCTEtfREVWX0lPX1RSQUNFYC4gSXQgd2lsbCBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQga2VybmVsIGZlYXR1cmVzIGFuZCBob3cgSSBjYW4gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHRyYWNpbmcuIFRoaXMgaXMgYWxsIGFib3V0IGNvbmZpcm1pbmcgdGhlIHByZXNlbmNlIGFuZCBsb2NhdGlvbiBvZiB0aGUgbmVjZXNzYXJ5IHNldHRpbmdzLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgdGhlbS4gVGltZSB0byBkaXZlIGludG8gdGhvc2UgY29uZmlndXJhdGlvbiBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfSU9fVFJBQ0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9NzE3PWNvbmZpZyBCUkFOQ0hfVFJBQ0VSXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNzMwLVxua2VybmVsL3RyYWNlL0tjb25maWc6NzMxOmNvbmZpZyBCTEtfREVWX0lPX1RSQUNFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03MzItXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRyYWNpbmcgYmxvY2sgSU8gYWN0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBLZXJuZWwgVHJhY2luZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBga2VybmVsL3RyYWNlL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDczMS4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIGEgcGFydGljdWxhciB0cmFjaW5nIGZlYXR1cmUgb3IgY29uZmlndXJhdGlvbiBvcHRpb24gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGlzIGRlZmluZWQuIEl0JiMzOTtzIGxpa2VseSBhIHJlbGF0aXZlbHkgY2VudHJhbCBvciBpbXBvcnRhbnQgYXNwZWN0IG9mIHRoZSB0cmFjaW5nIHN1YnN5c3RlbSBpZiBpdCYjMzk7cyBwbGFjZWQgdGhlcmUuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBlbmFibGVkLCBkaXNhYmxlZCwgaXRzIGRlcGVuZGVuY2llcywgYW5kIHdoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGl0cyBkZXNpZ24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjU6XHRcdCAgaGlzdG9ncmFtIG9mIHRoZSBjYWxsZXJzLCBidXQgYWN0dWFsbHkgcGxhY2VzIHRoZSBjYWxsaW5nXG4gNzI2Olx0XHQgIGV2ZW50cyBpbnRvIGEgcnVubmluZyB0cmFjZSBidWZmZXIgdG8gc2VlIHdoZW4gYW5kIHdoZXJlIHRoZVxuIDcyNzpcdFx0ICBldmVudHMgaGFwcGVuZWQsIGFzIHdlbGwgYXMgdGhlaXIgcmVzdWx0cy5cbiA3Mjg6XHRcbiA3Mjk6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuIDczMDpcdFxuIDczMTpcdGNvbmZpZyBCTEtfREVWX0lPX1RSQUNFXG4gNzMyOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRyYWNpbmcgYmxvY2sgSU8gYWN0aW9uc1wmIzM0O1xuIDczMzpcdFx0ZGVwZW5kcyBvbiBTWVNGU1xuIDczNDpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuIDczNTpcdFx0c2VsZWN0IFJFTEFZXG4gNzM2Olx0XHRzZWxlY3QgREVCVUdfRlNcbiA3Mzc6XHRcdHNlbGVjdCBUUkFDRVBPSU5UU1xuIDczODpcdFx0c2VsZWN0IEdFTkVSSUNfVFJBQ0VSXG4gNzM5Olx0XHRzZWxlY3QgU1RBQ0tUUkFDRVxuIDc0MDpcdFx0aGVscFxuIDc0MTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdHJhY2UgdGhlIGJsb2NrIGxheWVyIGFjdGlvbnNcbiA3NDI6XHRcdCAgb24gYSBnaXZlbiBxdWV1ZS4gVHJhY2luZyBhbGxvd3MgeW91IHRvIHNlZSBhbnkgdHJhZmZpYyBoYXBwZW5pbmdcbiA3NDM6XHRcdCAgb24gYSBibG9jayBkZXZpY2UgcXVldWUuIEZvciBtb3JlIGluZm9ybWF0aW9uIChhbmQgdGhlIHVzZXJzcGFjZVxuIDc0NDpcdFx0ICBzdXBwb3J0IHRvb2xzIG5lZWRlZCksIGZldGNoIHRoZSBibGt0cmFjZSB0b29scyBmcm9tOlxuIDc0NTpcdFxuIDc0NjpcdFx0ICBnaXQ6Ly9naXQua2VybmVsLmRrL2Jsa3RyYWNlLmdpdFxuIDc0NzpcdFxuIDc0ODpcdFx0ICBUcmFjaW5nIGFsc28gaXMgcG9zc2libGUgdXNpbmcgdGhlIGZ0cmFjZSBpbnRlcmZhY2UsIGUuZy46XG4gNzQ5Olx0XG4gNzUwOlx0XHQgICAgZWNobyAxIFx1MDAzZSAvc3lzL2Jsb2NrL3NkYS9zZGExL3RyYWNlL2VuYWJsZVxuIDc1MTpcdFx0ICAgIGVjaG8gYmxrIFx1MDAzZSAvc3lzL2tlcm5lbC90cmFjaW5nL2N1cnJlbnRfdHJhY2VyXG4gNzUyOlx0XHQgICAgY2F0IC9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2VfcGlwZVxuIDc1MzpcdFxuIDc1NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODMyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXM6IGJsa3RyYWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGZ1enppbmcgY2FtcGFpZ24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSByZWFjaGFiaWxpdHkuIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AgaXMgdGhlIGhlYXJ0IG9mIHRoZSBibG9jayBsYXllciB0cmFjaW5nLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydC4gSXQgbG9va3MgbGlrZSB3ZSBjYW4gdHJpZ2dlciBpdCB0aHJvdWdoIHN5c2ZzIGVudHJpZXMgdW5kZXIgYC9zeXMvYmxvY2svLi4uL3RyYWNlLy4uLmAsIHNwZWNpZmljIGlvY3RscyBsaWtlIGBCTEtUUkFDRVNFVFVQYCwgYEJMS1RSQUNFU1RBUlRgLCBldGMuLCBvciBldmVuIHRocm91Z2ggdGhlIGZ0cmFjZSBgYmxrYCB0cmFjZXIuIEV4Y2VsbGVudCwgbXVsdGlwbGUgZW50cnkgcG9pbnRzIGVuaGFuY2Ugb3VyIGF0dGFjayBzdXJmYWNlLiBgX19ibGtfYWRkX3RyYWNlKClgIGlzIGEga2V5IGZ1bmN0aW9uLCBnZXR0aW5nIGNhbGxlZCBkdXJpbmcgSU8sIGFuZCBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKClgIGdldHMgY2FsbGVkIHdoZW4gZW5hYmxpbmcgdHJhY2VzIHZpYSBzeXNmcy4KCk5vdywgdGhlIHNwZWNpZmljcyBvZiB0aGlzIHBhdGNoIGFyZSBpbXBvcnRhbnQuIEl0JiMzOTtzIG1vZGlmeWluZyBgX19ibGtfYWRkX3RyYWNlYCB0byB1c2UgdGhlIHYyIGZvcm1hdCB1bmNvbmRpdGlvbmFsbHksIGVmZmVjdGl2ZWx5IHJlbW92aW5nIHRoZSBjb25kaXRpb25hbCB0aGF0IGhhbmRsZWQgdjEgb3IgdjIgZm9ybWF0cy4gVGhpcyBpcyBjcml0aWNhbC4gQnkgZWxpbWluYXRpbmcgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgYmFzZWQgb24gYGJ0LSZndDt2ZXJzaW9uYCwgdGhlIHBhdGNoIGF2b2lkcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIG9yIGJ1ZmZlciBjb3JydXB0aW9uIGlzc3VlcyBpZiBgYnQtJmd0O3ZlcnNpb25gIHdhcyBpbmNvcnJlY3RseSBzZXQgdG8gMSBvciAwLiBBbHNvLCBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCBleHBsaWNpdGx5IHNldHMgYGJ0LSZndDt2ZXJzaW9uID0gMmAgd2hlbiBzeXNmcyB0cmFjaW5nIGlzIGVuYWJsZWQuIFRoYXQgc2ltcGxpZmllcyBvdXIgdGVzdCBjYXNlcyBhcyB3ZSBvbmx5IG5lZWQgdG8gdGhpbmsgYWJvdXQgdjIuCgpHaXZlbiB0aG9zZSBjaGFuZ2VzLCB0aGVyZSBhcmUgc2V2ZXJhbCBwb3NpdGl2ZSBpbmRpY2F0b3JzLiBJdCYjMzk7cyB0b3VjaGluZyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbeKAlHRoZSBibG9jayBsYXllciBhbmQgdHJhY2luZy4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBsb2dpYyBjaGFuZ2VzLCB3aGljaCBhcmUgaWRlYWwgdGFyZ2V0cyBmb3IgZnV6emluZywgc3BlY2lmaWNhbGx5IGluIHRoZSB0cmFjZWFibGUgcmVjb3JkaW5nIGNvZGUgcGF0aCB3aXRoaW4gYF9fYmxrX2FkZF90cmFjZWAgYW5kIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgLiBBbmQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGl0IHNob3VsZCBiZSBlYXNpbHkgYWNjZXNzaWJsZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIFFFTVUgb3IgR0NFLCB1c2luZyBzdGFuZGFyZCBzeXprYWxsZXIgc3lzY2FsbHMsIHN5c2ZzLCBhbmQgaW9jdGxzLiBJJiMzOTttIGdvaW5nIHRvIHNldCBXb3J0aEZ1enppbmcgPSB0cnVlLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbi4gT2J2aW91c2x5LCBgX19ibGtfYWRkX3RyYWNlYCBhbmQgYGJsa190cmFjZV9zZXR1cF9xdWV1ZWAgYXJlIGNlbnRyYWwuIFRoZSBmdW5jdGlvbiBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmAgaXMgYWxzbyBpbW1lZGlhdGVseSByZWxldmFudCwgYXMgaXQgaXMgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB1c2VkLiBOb3cgSSBzaG91bGQgY2hlY2sgYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYCB0byBpZGVudGlmeSB0aGUgc3BlY2lmaWMgcHVibGljIGludGVyZmFjZXMgZm9yIGBibGt0cmFjZWAgdG8gdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfdHJhY2Vfc2V0dXBfcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xODQwPXN0YXRpYyBpbnQgYmxrX3RyYWNlX3JlbW92ZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODU5LSAqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTg2MDpzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4NjEtXHRcdFx0XHQgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMDM3PXN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDczLVx0XHRpZiAodmFsdWUpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMDc0Olx0XHRcdHJldCA9IGJsa190cmFjZV9zZXR1cF9xdWV1ZShxLCBiZGV2KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwNzUtXHRcdGVsc2Vcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDgxLVx0aWYgKGJ0ID09IE5VTEwpIHtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwODI6XHRcdHJldCA9IGJsa190cmFjZV9zZXR1cF9xdWV1ZShxLCBiZGV2KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwODMtXHRcdGJ0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChxLVx1MDAzZWJsa190cmFjZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE2MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgX19ibGtfYWRkX3RyYWNlYCBDYWxsZXJzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2FsbGluZyBgX19ibGtfYWRkX3RyYWNlYCB3aXRoaW4gYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGUgY2FsbGVycy4mIzM0OyBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBibGt0cmFjZSwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIHdpbGwgc2hlZCBsaWdodCBvbiBob3cgdHJhY2luZyBldmVudHMgYXJlIGFjdHVhbGx5IGluamVjdGVkIGludG8gdGhlIGJsa3RyYWNlIHN5c3RlbS4gSXTigJlzIHRoZSBlbnRyeSBwb2ludCwgc28gSSBleHBlY3QgYSB2YXJpZXR5IG9mIGluc3RydW1lbnRhdGlvbiBwb2ludHMgdG8gYmUgY2FsbGluZyBpdCB0byByZWNvcmQgYmxvY2sgZGV2aWNlIEkvTyBhY3Rpdml0eS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgZ2VuZXJhdGVkIGFuZCB0aGUga2luZCBvZiBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHRoYXQgaXMgZ2F0aGVyZWQgd2hlbiB0aGUgY2FsbCBpcyBtYWRlLiBJIHN1c3BlY3QgaXQmIzM5O2xsIHJhbmdlIGZyb20gSS9PIHNjaGVkdWxlcnMsIGJsb2NrIGxheWVyIGRyaXZlcnMsIG1heWJlIGV2ZW4gc29tZSBpbnRlcnJ1cHQgaGFuZGxlcnMsIGRlcGVuZGluZyBvbiBob3cgZmluZWx5IGJsa3RyYWNlIGlzIGludGVncmF0ZWQuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBtYWtlIGRlYnVnZ2luZyBpc3N1ZXMgZmFyIHNpbXBsZXIsIGFuZCBpdCB3aWxsIGxldCBtZSBvcHRpbWl6ZSBibGt0cmFjZSBwZXJmb3JtYW5jZSB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgY2F1c2UgdG9vIG11Y2ggb3ZlcmhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYmxrX2FkZF90cmFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTI5Nj1zdGF0aWMgY29uc3QgdTMyIGRkaXJfYWN0WzJdID0geyBCTEtfVENfQUNUKEJMS19UQ19SRUFEKSxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zMDktICovXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzozMTA6c3RhdGljIHZvaWQgX19ibGtfYWRkX3RyYWNlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcyxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTMxMS1cdFx0XHQgICAgY29uc3QgYmxrX29wZl90IG9wZiwgdTY0IHdoYXQsIGludCBlcnJvcixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz05ODE9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJsa19zdGF0dXNfdCBlcnJvcixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05OTctXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5OTg6XHRfX2Jsa19hZGRfdHJhY2UoYnQsIGJsa19ycV90cmFjZV9zZWN0b3IocnEpLCBucl9ieXRlcywgcnEtXHUwMDNlY21kX2ZsYWdzLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTk5LVx0XHRcdHdoYXQsIGJsa19zdGF0dXNfdG9fZXJybm8oZXJyb3IpLCAwLCBOVUxMLCBjZ2lkKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMDYxPXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTA3Mi1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwNzM6XHRfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwNzQtXHRcdFx0YmlvLVx1MDAzZWJpX29wZiwgd2hhdCwgZXJyb3IsIDAsIE5VTEwsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTEwOD1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3BsdWcodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTE0LVx0aWYgKGJ0KVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTExNTpcdFx0X19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCAwLCBCTEtfVEFfUExVRywgMCwgMCwgTlVMTCwgMCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTE2LVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTExOT1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3VucGx1Zyh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExMzQtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMTM1Olx0XHRfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIHdoYXQsIDAsIHNpemVvZihycGR1KSwgXHUwMDI2cnBkdSwgMCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTM2LVx0fVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExNDA9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV96b25lX3BsdWcodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTQ4LVx0aWYgKGJ0IFx1MDAyNlx1MDAyNiBidC1cdTAwM2V2ZXJzaW9uIFx1MDAzZT0gMilcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExNDk6XHRcdF9fYmxrX2FkZF90cmFjZShidCwgc2VjdG9yLCBzZWN0b3JzIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQsIDAsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTUwLVx0XHRcdFx0QkxLX1RBX1pPTkVfUExVRywgMCwgMCwgTlVMTCwgMCk7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTE1Nj1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3pvbmVfdW5wbHVnKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE2NC1cdGlmIChidCBcdTAwMjZcdTAwMjYgYnQtXHUwMDNldmVyc2lvbiBcdTAwM2U9IDIpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMTY1Olx0XHRfX2Jsa19hZGRfdHJhY2UoYnQsIHNlY3Rvciwgc2VjdG9ycyBcdTAwM2NcdTAwM2MgU0VDVE9SX1NISUZULCAwLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE2Ni1cdFx0XHRcdEJMS19UQV9aT05FX1VOUExVRywgMCwgMCwgTlVMTCwgMCk7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTE3MT1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3NwbGl0KHZvaWQgKmlnbm9yZSwgc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgcGR1KVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExODAtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMTgxOlx0XHRfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3Rvcixcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExODItXHRcdFx0XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplLCBiaW8tXHUwMDNlYmlfb3BmLCBCTEtfVEFfU1BMSVQsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTE5OT1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX2Jpb19yZW1hcCh2b2lkICppZ25vcmUsIHN0cnVjdCBiaW8gKmJpbywgZGV2X3QgZGV2LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyMTYtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMjE3Olx0X19ibGtfYWRkX3RyYWNlKGJ0LCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjE4LVx0XHRcdGJpby1cdTAwM2ViaV9vcGYsIEJMS19UQV9SRU1BUCxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMjM2PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfcmVtYXAodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGRldl90IGRldixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjUyLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTI1MzpcdF9fYmxrX2FkZF90cmFjZShidCwgYmxrX3JxX3BvcyhycSksIGJsa19ycV9ieXRlcyhycSksXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjU0LVx0XHRcdHJxLVx1MDAzZWNtZF9mbGFncywgQkxLX1RBX1JFTUFQLCAwLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEyNjk9dm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjc5LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTI4MDpcdF9fYmxrX2FkZF90cmFjZShidCwgYmxrX3JxX3RyYWNlX3NlY3RvcihycSksIGJsa19ycV9ieXRlcyhycSksIDAsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjgxLVx0XHRcdFx0QkxLX1RBX0RSVl9EQVRBLCAwLCBsZW4sIGRhdGEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDA5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIFRyYWNpbmcqKgoKQWxyaWdodCwgSSYjMzk7bSBhbHJlYWR5IGluIHRoaXMgdHJhY2luZyBjb2RlLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIHN5c3RlbSBiZWhhdmlvci4gV2UmIzM5O3ZlIGxvb2tlZCBhdCB0aGUgbWFpbiBjb21wb25lbnRzLCBidXQgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGdvIGRlZXBlci4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLiBCZWZvcmUgd2UgbW92ZSBvbiwgSSB3YW50IHRvIGNvbmZpcm0gd2UgZGlkbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkaWRuJiMzOTt0IG1pc3MgYW55IGNyaXRpY2FsIGV2ZW50cy4KClNvLCBsZXQmIzM5O3MgYWxzbyBjaGVjayBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmAuIEl0JiMzOTtzIGVzc2VudGlhbCB3ZSBjaGVjayBhbGwgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB0byBjb25maXJtIG91ciB0cmFjaW5nIGlzIGNvbXBsZXRlLiBJZiB0aGF0IGZ1bmN0aW9uIGNhbGxzIG90aGVyIHRyYWNpbmcgZnVuY3Rpb25zLCB3ZSBuZWVkIHRvIGluc3BlY3QgdGhvc2UgdG9vLiBUaGlzIGlzIHRoZSBraW5kIG9mIG1ldGhvZGljYWwgYXBwcm9hY2ggdGhhdCBzZXBhcmF0ZXMgYSBnb29kIGFuYWx5c2lzIGZyb20gYSBzdXBlcmZpY2lhbCBvbmUuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEl04oCZcyBhYm91dCBiZWluZyBwcmVjaXNlOyBsZXTigJlzIGRpdmUgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIHJlY29yZGVkIGluIGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyYC4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgbWlnaHQgYmUgaGlkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWNvcmRfYmxrdHJhY2VfZXZlbnQyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9NjY9c3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHN0cnVjdCBibGtfaW9fdHJhY2UgKnQsIHBpZF90IHBpZCwgaW50IGNwdSxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05My1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk0OnN0YXRpYyB2b2lkIHJlY29yZF9ibGt0cmFjZV9ldmVudDIoc3RydWN0IGJsa19pb190cmFjZTIgKnQyLCBwaWRfdCBwaWQsIGludCBjcHUsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NS1cdFx0XHRcdCAgIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLCB1NjQgd2hhdCxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMzY9c3RhdGljIHZvaWQgcmVsYXlfYmxrdHJhY2VfZXZlbnQyKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE1MS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE1MjpcdHJlY29yZF9ibGt0cmFjZV9ldmVudDIodCwgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsIHdoYXQsIGJ0LVx1MDAzZWRldiwgZXJyb3IsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNTMtXHRcdFx0ICAgICAgIGNnaWQsIGNnaWRfbGVuLCBwZHVfZGF0YSwgcGR1X2xlbik7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTczPXN0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgdTY0IGFjdGlvbixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTQtXHRcdHQgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5NTpcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50Mih0LCBwaWQsIGNwdSwgMCwgMCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5Ni1cdFx0XHRcdCAgICAgICBhY3Rpb24sIGJ0LVx1MDAzZWRldiwgMCwgY2dpZCwgY2dpZF9sZW4sXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MzEwPXN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDAzLVx0XHR0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDA0Olx0XHRyZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDA1LVx0XHRcdFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg1NAoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiA0MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBDYW5kaWRhdGUgQXNzZXNzbWVudDogQmxvY2sgVHJhY2luZyBTdWJzeXN0ZW0qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIHBvaW50cyB0byBgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0VgIGJlaW5nIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gZmxhZyBoZXJlLCB3aGljaCwgb2YgY291cnNlLCBkZXBlbmRzIG9uIGBTWVNGU2AgYW5kIGBCTE9DS2AuIFdlJiMzOTtyZSB0YWxraW5nIGJsb2NrIGRldmljZSBJL08gdHJhY2luZywgc28gdGhhdCBtYWtlcyBzZW5zZS4gVGhlbiB0aGVyZSYjMzk7cyBgQ09ORklHX0VWRU5UX1RSQUNJTkdgLCB3aGljaCBhbHNvIHBsYXlzIGEgcm9sZS4gR29vZCwgd2UgaGF2ZSB0aGUgZGVwZW5kZW5jaWVzIG1hcHBlZC4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGRpcmVjdCBjb25uZWN0aW9uLiBGcm9tIHRoZSBga2VybmVsL3RyYWNlL01ha2VmaWxlYCwgdGhlIGxpbmsgdG8gYGJsa3RyYWNlLm9gIGlzIGNvbmRpdGlvbmVkIG9uIGBDT05GSUdfQkxLX0RFVl9JT19UUkFDRWAgZGlyZWN0bHksIGFuZCB0aGVyZSYjMzk7cyBhbiBgaWZlcWAgY2hlY2sgd2l0aCBgQ09ORklHX0JMT0NLYCwgd2hpY2ggaXMgcmVxdWlyZWQuIFNvLCAqeWVzKiwgYEJMS19ERVZfSU9fVFJBQ0VgIGlzIHRoZSBwcmltYXJ5IHN3aXRjaC4KCkkgbmVlZCB0byBjb25maXJtIHRoZSB0YXJnZXRlZCBjb2RlLiBTcGVjaWZpYyBmdW5jdGlvbiBuYW1lcyBoZWxwIHJlZmluZSB0aGUgc2NvcGUuIExvb2tzIGxpa2UgYF9fYmxrX2FkZF90cmFjZWAsIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgLCBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmAsIGFuZCBgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmVgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB3YXRjaC4gVGhleSYjMzk7cmUgbm90IHViaXF1aXRvdXM7IHRoaXMgaXMgcHJlY2lzZWx5IHRoZSB0YXJnZXRlZCBibGt0cmFjZSBsb2dpYywgd2hpY2ggbWVhbnMgdGhleSBhcmUgZ3JlYXQgY2FuZGlkYXRlcyBmb3IgZmluZGluZyBidWdzLgoKT2theSwgbGV0JiMzOTtzIHN5bnRoZXNpemUgdGhpcyBpbnRvIGEgc3RydWN0dXJlZCBhcmd1bWVudDoKCjEuICAqKlRoZSBNb2RpZmljYXRpb246KiogVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBgX19ibGtfYWRkX3RyYWNlKClgIHdpdGhpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBJdCYjMzk7cyB1bmNvbmRpdGlvbmFsbHkgZW5mb3JjaW5nIHRoZSB2MiAoYGJsa19pb190cmFjZTJgKSBmb3JtYXQgd2hlbiBgYmxrX3RyYWNlcmAgaXMgZW5hYmxlZC4gVGhhdCBzaG91bGQgYXZvaWQgYW55IGJ1ZmZlciBzaXplIG1pc21hdGNoIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3Mgd2hlbiB0cmFjaW5nIHVzaW5nIGZ0cmFjZS4gVGhlIGBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKWAgZnVuY3Rpb24gaXMgYWxzbyB1cGRhdGVkIHRvIGV4cGxpY2l0bHkgc2V0IGBidC0mZ3Q7dmVyc2lvbiA9IDJgLgoKMi4gICoqUmVhY2hhYmlsaXR5OioqIFRoaXMgY29kZSBpcyBzbWFjay1kYWIgaW4gdGhlIGJsb2NrIHRyYWNpbmcgc3Vic3lzdGVtLCBzbyBpdCYjMzk7cyBjb3JlIGZ1bmN0aW9uYWxpdHkuIEl0IGlzIGFjY2Vzc2libGUgdGhyb3VnaCBzeXNmcyBjb25maWd1cmF0aW9uIOKAkyBgL3N5cy9ibG9jay8mbHQ7ZGV2Jmd0Oy90cmFjZS8uLi5gIOKAkyBhbmQgdGhlcmVmb3JlLCB0aHJvdWdoIHN0YW5kYXJkIGJsb2NrIEkvTyBvcGVyYXRpb25zIGFzIGxvbmcgYXMgYENPTkZJR19CTEtfREVWX0lPX1RSQUNFYCBpcyBlbmFibGVkLiBUaGlzIG1ha2VzIGl0IGEgZ3JlYXQgY2FuZGlkYXRlIGZvciBmdXp6aW5nIGFzIGl0IGlzIGEgY29tbW9uIGNvZGUgcGF0aC4KCjMuICAqKlZlcmRpY3Q6KiogIEdpdmVuIHRoZSB0YXJnZXRlZCBjb2RlLCB0aGUgcmVhY2hhYmlsaXR5IHZpYSBzdGFuZGFyZCBibG9jayBJL08gb3BlcmF0aW9ucyBhbmQgc3lzZnMsIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBwYXRjaCwgdGhlIHZlcmRpY3QgaXMgY2xlYXI6ICoqV29ydGhGdXp6aW5nID0gdHJ1ZS4qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfSU9fVFJBQ0UmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2Jsa19hZGRfdHJhY2UmIzM0OywKICAgICYjMzQ7YmxrX3RyYWNlX3NldHVwX3F1ZXVlJiMzNDssCiAgICAmIzM0O3JlY29yZF9ibGt0cmFjZV9ldmVudDImIzM0OywKICAgICYjMzQ7c3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIHRyYWNlIHN1YnN5c3RlbSAoa2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMpLCBzcGVjaWZpY2FsbHkgaW4gX19ibGtfYWRkX3RyYWNlKCkgYW5kIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB1bmNvbmRpdGlvbmFsbHkgdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGxheW91dCwgZWxpbWluYXRpbmcgcG90ZW50aWFsIGJ1ZmZlciBtaXNtYXRjaGVzIGFuZCBvdXQtb2YtYm91bmRzIHJlYWRzLCBhbmQgaW5pdGlhbGl6ZXMgYnQtXHUwMDNldmVyc2lvbiBmb3Igc3lzZnMtY29uZmlndXJlZCBxdWV1ZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBibG9jayBsYXllciB0cmFjaW5nIGxvZ2ljIGFjY2Vzc2libGUgdmlhIHN5c2ZzIGFuZCBibG9jayBJL08gaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0lPX1RSQUNFJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19ibGtfYWRkX3RyYWNlJiMzNDssCiAgICAmIzM0O2Jsa190cmFjZV9zZXR1cF9xdWV1ZSYjMzQ7LAogICAgJiMzNDtyZWNvcmRfYmxrdHJhY2VfZXZlbnQyJiMzNDssCiAgICAmIzM0O3N5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayB0cmFjZSBzdWJzeXN0ZW0gKGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jKSwgc3BlY2lmaWNhbGx5IGluIF9fYmxrX2FkZF90cmFjZSgpIGFuZCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBmdHJhY2UgcmluZyBidWZmZXIgdW5jb25kaXRpb25hbGx5IHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKSBsYXlvdXQsIGVsaW1pbmF0aW5nIHBvdGVudGlhbCBidWZmZXIgbWlzbWF0Y2hlcyBhbmQgb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGluaXRpYWxpemVzIGJ0LVx1MDAzZXZlcnNpb24gZm9yIHN5c2ZzLWNvbmZpZ3VyZWQgcXVldWVzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgYmxvY2sgbGF5ZXIgdHJhY2luZyBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIGEgZm9ybWF0IG1pc21hdGNoIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIC8gdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBmdHJhY2UgYmxvY2sgdHJhY2luZyBzdWJzeXN0ZW0gKGJsa3RyYWNlKS4gUHJldmlvdXNseSwgaWYgYnQtXHUwMDNldmVyc2lvbiB3YXMgMSBvciAwLCBfX2Jsa19hZGRfdHJhY2UoKSBjb3VsZCBhbGxvY2F0ZSBhbmQgd3JpdGUgYSBzbWFsbGVyIHYxIChibGtfaW9fdHJhY2UpIGV2ZW50IGludG8gdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB3aGlsZSBmdHJhY2UgY29uc3VtZXJzIHBhcnNlZCBlbnRyaWVzIHN0cmljdGx5IGFzIHYyIChibGtfaW9fdHJhY2UyKSwgcmVzdWx0aW5nIGluIHBkdV9zdGFydCgpIGluZGV4aW5nIG91dC1vZi1ib3VuZHMgYmV5b25kIHRoZSByZXNlcnZlZCBldmVudCBidWZmZXIuXG5cblRoaXMgY2xhc3Mgb2YgYnVnIChvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHVzZS1hZnRlci1mcmVlKSBpcyB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIGZ0cmFjZSBwYXRoIHRvIHVuY29uZGl0aW9uYWxseSByZWNvcmQgdjIgZXZlbnRzIG9mIHNpemUgc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKSAmIzQzOyBwZHVfbGVuICYjNDM7IGNnaWRfbGVuIGFuZCBpbml0aWFsaXplcyBidC1cdTAwM2V2ZXJzaW9uIHRvIDIgaW4gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCkgKHdoZXJlIHRoZSBtZW1vcnkgaXMgYWxyZWFkeSB6ZXJvLWFsbG9jYXRlZCB2aWEga3phbGxvY19vYmopLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjFmNzg4N2ZmZmFhZTY1YjE3ZjE2MTFhOWUwYWRlODZhMWE5ZDlhZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDU6NTE6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCmluZGV4IDhjZDI1MjBiNGM5OWUuLmFlMDEwOTY5YzE0NDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCkBAIC0zODUsNjYgJiM0MzszODUsMjYgQEAgc3RhdGljIHZvaWQgX19ibGtfYWRkX3RyYWNlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywKIAlpZiAoYmxrX3RyYWNlcikgewogCQlidWZmZXIgPSBibGtfdHItJmd0O2FycmF5X2J1ZmZlci5idWZmZXI7CiAJCXRyYWNlX2N0eCA9IHRyYWNpbmdfZ2VuX2N0eF9mbGFncygwKTsKLQkJc3dpdGNoIChidC0mZ3Q7dmVyc2lvbikgewotCQljYXNlIDE6Ci0JCQl0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZSk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQlkZWZhdWx0OgotCQkJLyoKLQkJCSAqIGZ0cmFjZSBhbHdheXMgdXNlcyB2MiAoYmxrX2lvX3RyYWNlMikgZm9ybWF0LgotCQkJICoKLQkJCSAqIEZvciBzeXNmcy1lbmFibGVkIHRyYWNpbmcgcGF0aCAoZW5hYmxlZCB2aWEKLQkJCSAqIC9zeXMvYmxvY2svREVWL3RyYWNlL2VuYWJsZSksIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpCi0JCQkgKiBuZXZlciBpbml0aWFsaXplcyBidC0mZ3Q7dmVyc2lvbiwgbGVhdmluZyBpdCAwIGZyb20KLQkJCSAqIGt6YWxsb2MoKS4gV2UgbXVzdCBoYW5kbGUgdmVyc2lvbj09MCBzYWZlbHkgaGVyZS4KLQkJCSAqCi0JCQkgKiBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCB0byBlbnN1cmUgd2UgbmV2ZXIgaGl0IHRoZQotCQkJICogb2xkIGJ1ZyB3aGVyZSBkZWZhdWx0IHNldCB0cmFjZV9sZW49MCwgY2F1c2luZwotCQkJICogYnVmZmVyIHVuZGVyZmxvdyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24uCi0JCQkgKgotCQkJICogQWx3YXlzIHVzZSB2MiBmb3JtYXQgZm9yIGZ0cmFjZSBhbmQgbm9ybWFsaXplCi0JCQkgKiBidC0mZ3Q7dmVyc2lvbiB0byAyIHdoZW4gdW5pbml0aWFsaXplZC4KLQkJCSAqLwotCQkJdHJhY2VfbGVuID0gc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKTsKLQkJCWlmIChidC0mZ3Q7dmVyc2lvbiA9PSAwKQotCQkJCWJ0LSZndDt2ZXJzaW9uID0gMjsKLQkJCWJyZWFrOwotCQl9Ci0JCXRyYWNlX2xlbiAmIzQzOz0gcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbjsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgZnRyYWNlIHJpbmcgYnVmZmVyIGFsd2F5cyB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMikKJiM0MzsJCSAqIGZvcm1hdDsgdGhlIGZ0cmFjZSByZWFkZXJzIHBhcnNlIG9ubHkgdGhhdC4gYnQtJmd0O3ZlcnNpb24KJiM0MzsJCSAqIGRlc2NyaWJlcyBqdXN0IHRoZSByZWxheS9jbGFzc2ljIGJsa3RyYWNlIHJlY29yZCBmb3JtYXQuCiYjNDM7CQkgKiBSZWNvcmRpbmcgYSB2MS1zaXplZCBldmVudCBoZXJlIHdvdWxkIHNoaWZ0IHBkdV9zdGFydCgpIDE2CiYjNDM7CQkgKiBieXRlcyBwYXN0IHRoZSBQRFUgYW5kIG1ha2UgYmxrX2xvZ19yZW1hcCgpIHJlYWQgcGFzdCB0aGUKJiM0MzsJCSAqIGV2ZW50IChhIHVzZS1hZnRlci1mcmVlIG9uIGNvbmN1cnJlbnQgYnVmZmVyIHJlc2l6ZSksIGFuZCB2MQomIzQzOwkJICogY2Fubm90IHJlcHJlc2VudCB0aGUgbmV3ZXIgNjQtYml0IHpvbmUgYWN0aW9ucyBhbnl3YXkuCiYjNDM7CQkgKi8KJiM0MzsJCXRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgJiM0MzsgcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbjsKIAkJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQkxLLAogCQkJCQkJICB0cmFjZV9sZW4sIHRyYWNlX2N0eCk7CiAJCWlmICghZXZlbnQpCiAJCQlyZXR1cm47CiAKIAkJdHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTsKLQkJc3dpdGNoIChidC0mZ3Q7dmVyc2lvbikgewotCQljYXNlIDE6Ci0JCQlyZWNvcmRfYmxrdHJhY2VfZXZlbnQocmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCksCi0JCQkJCSAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLAotCQkJCQkgICAgICB3aGF0LCBidC0mZ3Q7ZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sCi0JCQkJCSAgICAgIHBkdV9kYXRhLCBwZHVfbGVuKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCWRlZmF1bHQ6Ci0JCQkvKgotCQkJICogVXNlIHYyIHJlY29yZGluZyBmdW5jdGlvbiAocmVjb3JkX2Jsa3RyYWNlX2V2ZW50MikKLQkJCSAqIHdoaWNoIHdyaXRlcyBibGtfaW9fdHJhY2UyIHN0cnVjdHVyZSB3aXRoIGNvcnJlY3QKLQkJCSAqIGZpZWxkIGxheW91dDoKLQkJCSAqICAgLSAzMi1iaXQgcGlkIGF0IG9mZnNldCAyOAotCQkJICogICAtIDY0LWJpdCBhY3Rpb24gYXQgb2Zmc2V0IDMyCi0JCQkgKgotCQkJICogRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgaGFuZGxlcyB2ZXJzaW9uPT0wIGNhc2UKLQkJCSAqIChmcm9tIHN5c2ZzIHBhdGgpLCBlbnN1cmluZyB3ZSBhbHdheXMgdXNlIGNvcnJlY3QKLQkJCSAqIHYyIHJlY29yZGluZyBmdW5jdGlvbiB0byBtYXRjaCB0aGUgdjIgYnVmZmVyCi0JCQkgKiBhbGxvY2F0ZWQgYWJvdmUuCi0JCQkgKi8KLQkJCXJlY29yZF9ibGt0cmFjZV9ldmVudDIocmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCksCi0JCQkJCSAgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcywKLQkJCQkJICAgICAgIHdoYXQsIGJ0LSZndDtkZXYsIGVycm9yLCBjZ2lkLCBjZ2lkX2xlbiwKLQkJCQkJICAgICAgIHBkdV9kYXRhLCBwZHVfbGVuKTsKLQkJCWJyZWFrOwotCQl9CiYjNDM7CQlyZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLAomIzQzOwkJCQkgICAgICAgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsCiYjNDM7CQkJCSAgICAgICB3aGF0LCBidC0mZ3Q7ZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sCiYjNDM7CQkJCSAgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7CiAKIAkJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYmxrX3RyLCBidWZmZXIsIGV2ZW50LCB0cmFjZV9jdHgpOwogCQlyZXR1cm47CkBAIC0xOTEzLDYgJiM0MzsxODczLDEyIEBAIHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCiAJYnQtJmd0O2RldiA9IGJkZXYtJmd0O2JkX2RldjsKIAlidC0mZ3Q7YWN0X21hc2sgPSAodTE2KS0xOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIHN5c2ZzLWVuYWJsZWQgcGF0aCBmZWVkcyB0aGUgZnRyYWNlIGJsayB0cmFjZXIsIHdoaWNoIGFsd2F5cwomIzQzOwkgKiB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMikgZm9ybWF0LiBJbml0aWFsaXplIHRoZSB2ZXJzaW9uIHNvIGl0IGlzCiYjNDM7CSAqIG5ldmVyIGxlZnQgZGFuZ2xpbmcgYXMgMCBmb3IgZnV0dXJlIGNvbnN1bWVycy4KJiM0MzsJICovCiYjNDM7CWJ0LSZndDt2ZXJzaW9uID0gMjsKIAogCWJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYmxrdHJhY2UgUGF0Y2ggZm9yIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHRoZSBmdXp6aW5nIHN0cmF0ZWd5LiBNeSBndXQgZmVlbGluZyBpcyB3ZSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIEtNU0FOIGhlcmUsIGJ1dCBsZXQmIzM5O3MgYmUgbWV0aG9kaWNhbC4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlLiBUaGUgZGlmZiB0b3VjaGVzIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AsIHNwZWNpZmljYWxseSBgX19ibGtfYWRkX3RyYWNlYC4gUHJldmlvdXNseSwgaXQgc2VlbXMgd2UgaGFkIGEgdmVyc2lvbiBjaGVjayAoYGJ0LSZndDt2ZXJzaW9uYCkgd2l0aCBhIHN3aXRjaC1jYXNlIHRvIGhhbmRsZSBlaXRoZXIgYHJlY29yZF9ibGt0cmFjZV9ldmVudGAgKHZlcnNpb24gMSkgb3IgYHJlY29yZF9ibGt0cmFjZV9ldmVudDJgICh2ZXJzaW9uIDIpLCBkZXRlcm1pbmluZyBgdHJhY2VfbGVuYCBhY2NvcmRpbmdseS4gTm93LCB0aGUgcGF0Y2ggdW5jb25kaXRpb25hbGx5IHVzZXMgYHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgJiM0MzsgcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbmAgYW5kIGNhbGxzIGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyYC4gSW50ZXJlc3RpbmcuIEFsc28sIGBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKWAgbm93IGV4cGxpY2l0bHkgc2V0cyBgYnQtJmd0O3ZlcnNpb24gPSAyYCB3aGVuIGBidGAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY2AuCgpUaGlzIGlzIHdoZXJlIEkmIzM5O20gc3RhcnRpbmcgdG8gZ2V0IGEgYml0IGNvbmNlcm5lZCBhYm91dCBwb3RlbnRpYWwgdW5kZXJmbG93cyBvciBvdmVyZmxvd3MuIFRoZSBoYXJkY29kaW5nIG9mIHZlcnNpb24gMiBhbmQgdGhlIGRpcmVjdCB1c2Ugb2YgYHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMilgIHdpdGhvdXQgYW55IGNvbmRpdGlvbmFsIGNoZWNrcyByYWlzZXMgZmxhZ3MuIEkgbmVlZCB0byBzZWUgaG93IGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyYCBhbmQgYHJlY29yZF9ibGt0cmFjZV9ldmVudGAgYXJlIGRlZmluZWQgYW5kIGhvdyB0aGV5IGhhbmRsZSB0aGUgZGF0YS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGluc3BlY3QgdGhvc2UgZnVuY3Rpb25zIGluIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2Agbm93LiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaG93IHRoYXQgc2l6ZSBjYWxjdWxhdGlvbiBpcyB1c2VkIGFuZCBpZiB0aGVyZSBtaWdodCBiZSBvcHBvcnR1bml0aWVzIGZvciBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcywgZXNwZWNpYWxseSBnaXZlbiB0aGUgaW5jbHVzaW9uIG9mIGBwZHVfbGVuYCBhbmQgYGNnaWRfbGVuYC4gQmFzZWQgb24gd2hhdCBJIHNlZSBpbiB0aG9zZSBmdW5jdGlvbnMsIEkgY2FuIHRoZW4gZGVjaWRlIHdoZXRoZXIgS0FTQU4vc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IG9yIGlmIEtNU0FOIGZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGNhdGNoIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbiBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWNvcmRfYmxrdHJhY2VfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz02ND1zdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY1LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NjY6c3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHN0cnVjdCBibGtfaW9fdHJhY2UgKnQsIHBpZF90IHBpZCwgaW50IGNwdSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY3LVx0XHRcdFx0ICBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywgdTY0IHdoYXQsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTMtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NDpzdGF0aWMgdm9pZCByZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHN0cnVjdCBibGtfaW9fdHJhY2UyICp0MiwgcGlkX3QgcGlkLCBpbnQgY3B1LFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTUtXHRcdFx0XHQgICBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywgdTY0IHdoYXQsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTE2PXN0YXRpYyB2b2lkIHJlbGF5X2Jsa3RyYWNlX2V2ZW50MShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgdW5zaWduZWQgbG9uZyBzZXF1ZW5jZSxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMzEtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMzI6XHRyZWNvcmRfYmxrdHJhY2VfZXZlbnQodCwgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsIHdoYXQsIGJ0LVx1MDAzZWRldiwgZXJyb3IsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMzMtXHRcdFx0ICAgICAgY2dpZCwgY2dpZF9sZW4sIHBkdV9kYXRhLCBwZHVfbGVuKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMzY9c3RhdGljIHZvaWQgcmVsYXlfYmxrdHJhY2VfZXZlbnQyKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE1MS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE1MjpcdHJlY29yZF9ibGt0cmFjZV9ldmVudDIodCwgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsIHdoYXQsIGJ0LVx1MDAzZWRldiwgZXJyb3IsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNTMtXHRcdFx0ICAgICAgIGNnaWQsIGNnaWRfbGVuLCBwZHVfZGF0YSwgcGR1X2xlbik7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTczPXN0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgdTY0IGFjdGlvbixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTQtXHRcdHQgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5NTpcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50Mih0LCBwaWQsIGNwdSwgMCwgMCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5Ni1cdFx0XHRcdCAgICAgICBhY3Rpb24sIGJ0LVx1MDAzZWRldiwgMCwgY2dpZCwgY2dpZF9sZW4sXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MzEwPXN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDAzLVx0XHR0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDA0Olx0XHRyZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDA1LVx0XHRcdFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTk4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQmxrdHJhY2UgRXZlbnQgUmVjb3JkaW5nKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYmxrdHJhY2UgZXZlbnRzIGFyZSBhY3R1YWxseSBjYXB0dXJlZCBhbmQgbG9nZ2VkLCBzbyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9uczogYHJlY29yZF9ibGt0cmFjZV9ldmVudDJgLCBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50YCwgYW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gYF9fYmxrX2FkZF90cmFjZWAuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgY2xldmVyIHVzZSBvZiBwZXItY3B1IGJ1ZmZlcnMgb3IgcmluZyBidWZmZXJzLCBsaWtlbHkgd2l0aCBjYXJlZnVsIGF0dGVudGlvbiB0byBsb2NraW5nIGFuZCBtZW1vcnkgYmFycmllcnMgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5LCBlc3BlY2lhbGx5IGR1cmluZyBoaWdoIEkvTyBsb2Fkcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhlIGFjdHVhbCB0aW1lc3RhbXBpbmcgaGFwcGVucyDigJMgaXMgaXQgaGFyZHdhcmUtYmFzZWQgb3Igc29mdHdhcmUtYmFzZWQsIGFuZCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBhY2N1cmFjeT8gRnVydGhlcm1vcmUsIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrczsgaG93IG11Y2ggb3ZlcmhlYWQgZG9lcyB0aGlzIHRyYWNpbmcgYWRkIHRvIHJlZ3VsYXIgYmxvY2sgSS9PIG9wZXJhdGlvbnM/IEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9ucyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBldmVudCBiZWluZyB0cmFjZWQ/IEFyZSB0aGVyZSBhbnkgY2xldmVyIHRyaWNrcyB0byBoYW5kbGUgZXZlbnQgZmlsdGVyaW5nIG9yIHJhdGUgbGltaXRpbmcgdG8gYXZvaWQgb3ZlcndoZWxtaW5nIHRoZSBzeXN0ZW0/IEkgd2lsbCBhbHNvIGJlIGN1cmlvdXMgYWJvdXQgaG93IHRoZSBhY3R1YWwgdHJhY2UgZGF0YSBnZXRzIGNvbnN1bWVkIGFuZCBzdG9yZWQsIGhvdyBtdWNoIGNvbnRleHQgaXMgaW5jbHVkZWQgd2l0aCBlYWNoIGV2ZW50LCBhbmQgaG93IHRoZSB0cmFjZSBidWZmZXIgaXMgbWFuYWdlZC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwcm9ibGVtcykgbGllLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdHN0YXRpYyBERUZJTkVfTVVURVgoYmxrX3Byb2JlX211dGV4KTtcbiAgNjE6XHRzdGF0aWMgaW50IGJsa19wcm9iZXNfcmVmO1xuICA2MjpcdFxuICA2MzpcdHN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcbiAgNjQ6XHRzdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcbiAgNjU6XHRcbiAgNjY6XHRzdGF0aWMgdm9pZCByZWNvcmRfYmxrdHJhY2VfZXZlbnQoc3RydWN0IGJsa19pb190cmFjZSAqdCwgcGlkX3QgcGlkLCBpbnQgY3B1LFxuICA2NzpcdFx0XHRcdFx0ICBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywgdTY0IHdoYXQsXG4gIDY4Olx0XHRcdFx0XHQgIGRldl90IGRldiwgaW50IGVycm9yLCB1NjQgY2dpZCxcbiAgNjk6XHRcdFx0XHRcdCAgc3NpemVfdCBjZ2lkX2xlbiwgdm9pZCAqcGR1X2RhdGEsIGludCBwZHVfbGVuKVxuICA3MDpcdFxuICA3MTpcdHtcbiAgNzI6XHRcdC8qXG4gIDczOlx0XHQgKiBUaGVzZSB0d28gYXJlIG5vdCBuZWVkZWQgaW4gZnRyYWNlIGFzIHRoZXkgYXJlIGluIHRoZVxuICA3NDpcdFx0ICogZ2VuZXJpYyB0cmFjZV9lbnRyeSwgZmlsbGVkIGJ5IHRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUsXG4gIDc1Olx0XHQgKiBidXQgZm9yIHRoZSB0cmFjZV9ldmVudC1cdTAwM2ViaW4oKSBzeW50aGVzaXplciBiZW5lZml0IHdlIGRvIGl0XG4gIDc2Olx0XHQgKiBoZXJlIHRvby5cbiAgNzc6XHRcdCAqL1xuICA3ODpcdFx0dC1cdTAwM2VjcHUgPSBjcHU7XG4gIDc5Olx0XHR0LVx1MDAzZXBpZCA9IHBpZDtcbiAgODA6XHRcbiAgODE6XHRcdHQtXHUwMDNlc2VjdG9yID0gc2VjdG9yO1xuICA4MjpcdFx0dC1cdTAwM2VieXRlcyA9IGJ5dGVzO1xuICA4MzpcdFx0dC1cdTAwM2VhY3Rpb24gPSBsb3dlcl8zMl9iaXRzKHdoYXQpO1xuICA4NDpcdFx0dC1cdTAwM2VkZXZpY2UgPSBkZXY7XG4gIDg1Olx0XHR0LVx1MDAzZWVycm9yID0gZXJyb3I7XG4gIDg2Olx0XHR0LVx1MDAzZXBkdV9sZW4gPSBwZHVfbGVuICYjNDM7IGNnaWRfbGVuO1xuICA4NzpcdFxuICA4ODpcdFx0aWYgKGNnaWRfbGVuKVxuICA4OTpcdFx0XHRtZW1jcHkoKHZvaWQgKil0ICYjNDM7IHNpemVvZigqdCksIFx1MDAyNmNnaWQsIGNnaWRfbGVuKTtcbiAgOTA6XHRcdGlmIChwZHVfbGVuKVxuICA5MTpcdFx0XHRtZW1jcHkoKHZvaWQgKil0ICYjNDM7IHNpemVvZigqdCkgJiM0MzsgY2dpZF9sZW4sIHBkdV9kYXRhLCBwZHVfbGVuKTtcbiAgOTI6XHR9XG4gIDkzOlx0XG4gIDk0Olx0c3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDIsIHBpZF90IHBpZCwgaW50IGNwdSxcbiAgOTU6XHRcdFx0XHRcdCAgIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLCB1NjQgd2hhdCxcbiAgOTY6XHRcdFx0XHRcdCAgIGRldl90IGRldiwgaW50IGVycm9yLCB1NjQgY2dpZCxcbiAgOTc6XHRcdFx0XHRcdCAgIHNzaXplX3QgY2dpZF9sZW4sIHZvaWQgKnBkdV9kYXRhLFxuICA5ODpcdFx0XHRcdFx0ICAgaW50IHBkdV9sZW4pXG4gIDk5Olx0e1xuIDEwMDpcdFx0dDItXHUwMDNlcGlkID0gcGlkO1xuIDEwMTpcdFx0dDItXHUwMDNlY3B1ID0gY3B1O1xuIDEwMjpcdFxuIDEwMzpcdFx0dDItXHUwMDNlc2VjdG9yID0gc2VjdG9yO1xuIDEwNDpcdFx0dDItXHUwMDNlYnl0ZXMgPSBieXRlcztcbiAxMDU6XHRcdHQyLVx1MDAzZWFjdGlvbiA9IHdoYXQ7XG4gMTA2Olx0XHR0Mi1cdTAwM2VkZXZpY2UgPSBkZXY7XG4gMTA3Olx0XHR0Mi1cdTAwM2VlcnJvciA9IGVycm9yO1xuIDEwODpcdFx0dDItXHUwMDNlcGR1X2xlbiA9IHBkdV9sZW4gJiM0MzsgY2dpZF9sZW47XG4gMTA5Olx0XG4gMTEwOlx0XHRpZiAoY2dpZF9sZW4pXG4gMTExOlx0XHRcdG1lbWNweSgodm9pZCAqKXQyICYjNDM7IHNpemVvZigqdDIpLCBcdTAwMjZjZ2lkLCBjZ2lkX2xlbik7XG4gMTEyOlx0XHRpZiAocGR1X2xlbilcbiAxMTM6XHRcdFx0bWVtY3B5KCh2b2lkICopdDIgJiM0Mzsgc2l6ZW9mKCp0MikgJiM0MzsgY2dpZF9sZW4sIHBkdV9kYXRhLCBwZHVfbGVuKTtcbiAxMTQ6XHR9XG4gMTE1Olx0XG4gMTE2Olx0c3RhdGljIHZvaWQgcmVsYXlfYmxrdHJhY2VfZXZlbnQxKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxuIDExNzpcdFx0XHRcdFx0IHBpZF90IHBpZCwgaW50IGNwdSwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXG4gMTE4Olx0XHRcdFx0XHQgdTY0IHdoYXQsIGludCBlcnJvciwgdTY0IGNnaWQsXG4gMTE5Olx0XHRcdFx0XHQgc3NpemVfdCBjZ2lkX2xlbiwgdm9pZCAqcGR1X2RhdGEsIGludCBwZHVfbGVuKVxuIDEyMDpcdHtcbiAxMjE6XHRcdHN0cnVjdCBibGtfaW9fdHJhY2UgKnQ7XG4gMTIyOlx0XHRzaXplX3QgdHJhY2VfbGVuID0gc2l6ZW9mKCp0KSAmIzQzOyBwZHVfbGVuICYjNDM7IGNnaWRfbGVuO1xuIDEyMzpcdFxuIDEyNDpcdFx0dCA9IHJlbGF5X3Jlc2VydmUoYnQtXHUwMDNlcmNoYW4sIHRyYWNlX2xlbik7XG4gMTI1Olx0XHRpZiAoIXQpXG4gMTI2Olx0XHRcdHJldHVybjtcbiAxMjc6XHRcbiAxMjg6XHRcdHQtXHUwMDNlbWFnaWMgPSBCTEtfSU9fVFJBQ0VfTUFHSUMgfCBCTEtfSU9fVFJBQ0VfVkVSU0lPTjtcbiAxMjk6XHRcdHQtXHUwMDNlc2VxdWVuY2UgPSBzZXF1ZW5jZTtcbiAxMzA6XHRcdHQtXHUwMDNldGltZSA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTtcbiAxMzE6XHRcbiAxMzI6XHRcdHJlY29yZF9ibGt0cmFjZV9ldmVudCh0LCBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcywgd2hhdCwgYnQtXHUwMDNlZGV2LCBlcnJvcixcbiAxMzM6XHRcdFx0XHQgICAgICBjZ2lkLCBjZ2lkX2xlbiwgcGR1X2RhdGEsIHBkdV9sZW4pO1xuIDEzNDpcdH1cbiAxMzU6XHRcbiAxMzY6XHRzdGF0aWMgdm9pZCByZWxheV9ibGt0cmFjZV9ldmVudDIoc3RydWN0IGJsa190cmFjZSAqYnQsIHVuc2lnbmVkIGxvbmcgc2VxdWVuY2UsXG4gMTM3Olx0XHRcdFx0XHQgIHBpZF90IHBpZCwgaW50IGNwdSwgc2VjdG9yX3Qgc2VjdG9yLFxuIDEzODpcdFx0XHRcdFx0ICBpbnQgYnl0ZXMsIHU2NCB3aGF0LCBpbnQgZXJyb3IsIHU2NCBjZ2lkLFxuIDEzOTpcdFx0XHRcdFx0ICBzc2l6ZV90IGNnaWRfbGVuLCB2b2lkICpwZHVfZGF0YSwgaW50IHBkdV9sZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyOTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQmxrdHJhY2UgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2guIFRoZSBjb21taXQgY29tbWVudCBzYXlzIGl0JiMzOTtzIGFib3V0IGFuIGZ0cmFjZSByaW5nIGJ1ZmZlciBpc3N1ZS4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgdGhhdCBgYmxrX2lvX3RyYWNlMmAgaXMgdGhlIG9ubHkgZm9ybWF0IHRoZSBmdHJhY2UgcmVhZGVycyBhcmUgZXhwZWN0aW5nLCBidXQgdGhlcmUgd2FzIGEgbWlzbWF0Y2ggaW4gaG93IHRoZSB2ZXJzaW9uIHdhcyBiZWluZyBoYW5kbGVkLiBBcHBhcmVudGx5LCBgYnQtJmd0O3ZlcnNpb25gIHdhcyBkZXNjcmliaW5nIHRoZSAqcmVsYXkvY2xhc3NpYyogYmxrdHJhY2UgZm9ybWF0LCBub3QgdGhlIGZ0cmFjZSBvbmUuIFRoZSBjb21tZW50IHNwZWNpZmljYWxseSBtZW50aW9ucyBhbiBpc3N1ZSB3aXRoIHJlY29yZGluZyBhIHYxLXNpemVkIGV2ZW50IHdoaWNoIHdvdWxkIGNhdXNlIGEgYHBkdV9zdGFydCgpYCBvZmZzZXQgZXJyb3IsIGxlYWRpbmcgdG8gYSBgYmxrX2xvZ19yZW1hcCgpYCBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHBvc3NpYmxlIHVzZS1hZnRlci1mcmVlLCBlc3BlY2lhbGx5IGlmIHRoZSBidWZmZXIgZ2V0cyByZXNpemVkIGNvbmN1cnJlbnRseS4gQW5kLCBpdCBtZW50aW9ucyB0aGF0IHYxIGFsc28gY2FuJiMzOTt0IHJlcHJlc2VudCB0aGUgbmV3ZXIgNjQtYml0IHpvbmUgYWN0aW9ucy4KClNvLCBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IGBibGtfaW9fdHJhY2VgIGFuZCBgYmxrX2lvX3RyYWNlMmAgYXJlIGRlZmluZWQgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLiBUaGUga2V5IGlzIGluIHRoZSBzdHJ1Y3R1cmVzLCB0aGUgc3RydWN0dXJlcy4gTGV0JiMzOTtzIGZpbmQgdGhvc2Ugc3RydWN0dXJlIGRlZmluaXRpb25zIGFuZCB0cmFjZSB0aGVpciB1c2FnZSB0byBnZXQgYSBjb25jcmV0ZSBncmFzcCBvZiBob3cgdGhpcyBpcyBhbGwgc3VwcG9zZWQgdG8gd29yayBhbmQgd2hhdCB3ZW50IHdyb25nIGluIHRoaXMgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGJsa19pb190cmFjZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmg9NzU9ZW51bSBibGt0cmFjZV9ub3RpZnkge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9ibGt0cmFjZV9hcGkuaC0xMjAtICovXG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmg6MTIxOnN0cnVjdCBibGtfaW9fdHJhY2Uge1xuaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3RyYWNlX2FwaS5oLTEyMi1cdF9fdTMyIG1hZ2ljO1x0XHQvKiBNQUdJQyBcdTAwM2NcdTAwM2MgOCB8IHZlcnNpb24gKi9cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmgtMTM1LVxuaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3RyYWNlX2FwaS5oOjEzNjpzdHJ1Y3QgYmxrX2lvX3RyYWNlMiB7XG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmgtMTM3LVx0X191MzIgbWFnaWM7XHRcdC8qIE1BR0lDIFx1MDAzY1x1MDAzYyA4IHwgQkxLX0lPX1RSQUNFMl9WRVJTSU9OICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3RyYWNlX2FwaS5oLTE1My0gKi9cbmluY2x1ZGUvdWFwaS9saW51eC9ibGt0cmFjZV9hcGkuaDoxNTQ6c3RydWN0IGJsa19pb190cmFjZV9yZW1hcCB7XG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmgtMTU1LVx0X19iZTMyIGRldmljZV9mcm9tO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTY0PXN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNjUtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo2NjpzdGF0aWMgdm9pZCByZWNvcmRfYmxrdHJhY2VfZXZlbnQoc3RydWN0IGJsa19pb190cmFjZSAqdCwgcGlkX3QgcGlkLCBpbnQgY3B1LFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNjctXHRcdFx0XHQgIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLCB1NjQgd2hhdCxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05My1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk0OnN0YXRpYyB2b2lkIHJlY29yZF9ibGt0cmFjZV9ldmVudDIoc3RydWN0IGJsa19pb190cmFjZTIgKnQyLCBwaWRfdCBwaWQsIGludCBjcHUsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NS1cdFx0XHRcdCAgIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLCB1NjQgd2hhdCxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMTY9c3RhdGljIHZvaWQgcmVsYXlfYmxrdHJhY2VfZXZlbnQxKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyMC17XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMjE6XHRzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0O1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTIyLVx0c2l6ZV90IHRyYWNlX2xlbiA9IHNpemVvZigqdCkgJiM0MzsgcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbjtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMzY9c3RhdGljIHZvaWQgcmVsYXlfYmxrdHJhY2VfZXZlbnQyKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE0MC17XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNDE6XHRzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE0MjpcdHNpemVfdCB0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICYjNDM7IHBkdV9sZW4gJiM0MzsgY2dpZF9sZW47XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNDMtXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTczPXN0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgdTY0IGFjdGlvbixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODQtXHRpZiAoYmxrX3RyYWNlcikge1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTg1Olx0XHRzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4Ni1cdFx0c2l6ZV90IHRyYWNlX2xlbiA9IHNpemVvZigqdCkgJiM0MzsgY2dpZF9sZW4gJiM0MzsgbGVuO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTMxMD1zdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTM5Ni1cdFx0ICovXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzozOTc6XHRcdHRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgJiM0MzsgcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbjtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTM5OC1cdFx0ZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQkxLLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExOTk9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fcmVtYXAodm9pZCAqaWdub3JlLCBzdHJ1Y3QgYmlvICpiaW8sIGRldl90IGRldixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjAzLVx0c3RydWN0IGJsa190cmFjZSAqYnQ7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMjA0Olx0c3RydWN0IGJsa19pb190cmFjZV9yZW1hcCByO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTIwNS1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMjM2PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfcmVtYXAodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGRldl90IGRldixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjM5LVx0c3RydWN0IGJsa190cmFjZSAqYnQ7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMjQwOlx0c3RydWN0IGJsa19pb190cmFjZV9yZW1hcCByO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI0MS1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMzMyPXN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTM1Ny0vKlxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTM1ODogKiBzdHJ1Y3QgYmxrX2lvX3RyYWNlciBmb3JtYXR0aW5nIHJvdXRpbmVzXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMzU5LSAqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTM2MC1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEzNjE6c3RhdGljIHZvaWQgZmlsbF9yd2JzKGNoYXIgKnJ3YnMsIGNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UyICp0KVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTM2Mi17XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTM5OD1zdGF0aWMgaW5saW5lXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMzk5OmNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UyICp0ZV9ibGtfaW9fdHJhY2UoY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNDAwLXtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE0MDE6XHRyZXR1cm4gKGNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UyICopZW50O1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQwMi19XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTQ1Mz1zdGF0aWMgdm9pZCBibGtfbG9nX2FjdGlvbl9jbGFzc2ljKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE0NTktXHR1bnNpZ25lZCBzZWNzXHQgICAgICAgPSAodW5zaWduZWQgbG9uZyl0cztcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE0NjA6XHRjb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdCA9IHRlX2Jsa19pb190cmFjZShpdGVyLVx1MDAzZWVudCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNDYxLVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTE0NzA9c3RhdGljIHZvaWQgYmxrX2xvZ19hY3Rpb24oc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBjb25zdCBjaGFyICphY3QsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQ3My1cdGNoYXIgcndic1tSV0JTX0xFTl07XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNDc0Olx0Y29uc3Qgc3RydWN0IGJsa19pb190cmFjZTIgKnQgPSB0ZV9ibGtfaW9fdHJhY2UoaXRlci1cdTAwM2VlbnQpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQ3NS1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNTg3PXN0YXRpYyB2b2lkIGJsa19sb2dfcmVtYXAoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQsIGJvb2wgaGFzX2NnKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTU4OC17XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNTg5Olx0Y29uc3Qgc3RydWN0IGJsa19pb190cmFjZV9yZW1hcCAqX19yID0gcGR1X3N0YXJ0KGVudCwgaGFzX2NnKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE1OTAtXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTY5MD1zdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfb25lX2xpbmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE2OTQtXHRzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gXHUwMDI2aXRlci1cdTAwM2VzZXE7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNjk1Olx0Y29uc3Qgc3RydWN0IGJsa19pb190cmFjZTIgKnQ7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNjk2LVx0dTE2IHdoYXQ7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTcyOT1zdGF0aWMgdm9pZCBibGtfdHJhY2Vfc3ludGhlc2l6ZV9vbGRfdHJhY2Uoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE3MzEtXHRzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gXHUwMDI2aXRlci1cdTAwM2VzZXE7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNzMyOlx0c3RydWN0IGJsa19pb190cmFjZTIgKnQgPSAoc3RydWN0IGJsa19pb190cmFjZTIgKilpdGVyLVx1MDAzZWVudDtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3MzM6XHRjb25zdCBpbnQgb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGJsa19pb190cmFjZTIsIHNlY3Rvcik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNzM0Olx0c3RydWN0IGJsa19pb190cmFjZSBvbGQgPSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNzM1LVx0XHQubWFnaWNcdCAgPSBCTEtfSU9fVFJBQ0VfTUFHSUMgfCBCTEtfSU9fVFJBQ0VfVkVSU0lPTixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNzk5PXN0YXRpYyBpbnQgX19pbml0IF9faW5pdF9ibGtfdHJhY2VyKHZvaWQpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTgxMy1cdFx0ICAgICBfX2FsaWdub2ZfXyhsb25nKSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxODE0Olx0QlVJTERfQlVHX09OKF9fYWxpZ25vZl9fKHN0cnVjdCBibGtfaW9fdHJhY2UyKSAlIF9fYWxpZ25vZl9fKGxvbmcpKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4MTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMjMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIGJsa3RyYWNlX2FwaS5oKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBpbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmhgLCBzcGVjaWZpY2FsbHkgc29tZXdoZXJlIGluIHRoZSB2aWNpbml0eSBvZiBsaW5lcyAxMjAgdGhyb3VnaCAxNTAuIFRoYXQgc2VjdGlvbiBpcyB1c3VhbGx5IHdoZXJlIHRoZXkgZGVmaW5lIHNvbWUgb2YgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGNvbnN0YW50cyB0aGF0IGdvdmVybiB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGJsb2NrIHRyYWNlIHRvb2wgYW5kIHRoZSBrZXJuZWwuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgYXJlYSwgYXMgSSYjMzk7dmUgYmVlbiB3b3JraW5nIGF0IHN1Y2ggYSBoaWdoIGxldmVsIGxhdGVseS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBhbnkgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSByZWNlbnRseSB0byB0aGUgZXZlbnQgZGVmaW5pdGlvbnMgb3IgZmxhZ3MgdGhlcmUuIEFueSBtb2RpZmljYXRpb24gdG8gdGhlc2Ugd2lsbCBuZWVkIHRvIGJlIGNhcmVmdWxseSBjb25zaWRlcmVkIGluIHJlbGF0aW9uIHRvIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyB0cmFjZSB0b29scyBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB3ZSYjMzk7cmUgY29uc3VtaW5nLiBUaGlzIHBhcnRpY3VsYXIgcG9ydGlvbiBvZiB0aGUgaGVhZGVyIGlzIGEgY3JpdGljYWwgcG9pbnQgb2YgaW50ZXJvcGVyYWJpbGl0eS4gTGV0IG1lIGZvY3VzIG9uIHRoaXMgc2VjdGlvbiBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUga2VybmVsJiMzOTtzIGJsb2NrIGxheWVyIGV2ZW50IGhhbmRsaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucyBpZiB0aGV5JiMzOTt2ZSBjaGFuZ2VkIHRoaW5ncyBhdCB0aGlzIGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9ibGt0cmFjZV9hcGkuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0ICovXG4gMTIxOlx0c3RydWN0IGJsa19pb190cmFjZSB7XG4gMTIyOlx0XHRfX3UzMiBtYWdpYztcdFx0LyogTUFHSUMgXHUwMDNjXHUwMDNjIDggfCB2ZXJzaW9uICovXG4gMTIzOlx0XHRfX3UzMiBzZXF1ZW5jZTtcdFx0LyogZXZlbnQgbnVtYmVyICovXG4gMTI0Olx0XHRfX3U2NCB0aW1lO1x0XHQvKiBpbiBuYW5vc2Vjb25kcyAqL1xuIDEyNTpcdFx0X191NjQgc2VjdG9yO1x0XHQvKiBkaXNrIG9mZnNldCAqL1xuIDEyNjpcdFx0X191MzIgYnl0ZXM7XHRcdC8qIHRyYW5zZmVyIGxlbmd0aCAqL1xuIDEyNzpcdFx0X191MzIgYWN0aW9uO1x0XHQvKiB3aGF0IGhhcHBlbmVkICovXG4gMTI4Olx0XHRfX3UzMiBwaWQ7XHRcdC8qIHdobyBkaWQgaXQgKi9cbiAxMjk6XHRcdF9fdTMyIGRldmljZTtcdFx0LyogZGV2aWNlIG51bWJlciAqL1xuIDEzMDpcdFx0X191MzIgY3B1O1x0XHQvKiBvbiB3aGF0IGNwdSBkaWQgaXQgaGFwcGVuICovXG4gMTMxOlx0XHRfX3UxNiBlcnJvcjtcdFx0LyogY29tcGxldGlvbiBlcnJvciAqL1xuIDEzMjpcdFx0X191MTYgcGR1X2xlbjtcdFx0LyogbGVuZ3RoIG9mIGRhdGEgYWZ0ZXIgdGhpcyB0cmFjZSAqL1xuIDEzMzpcdFx0LyogY2dyb3VwIGlkIHdpbGwgYmUgc3RvcmVkIGhlcmUgaWYgZXhpc3RzICovXG4gMTM0Olx0fTtcbiAxMzU6XHRcbiAxMzY6XHRzdHJ1Y3QgYmxrX2lvX3RyYWNlMiB7XG4gMTM3Olx0XHRfX3UzMiBtYWdpYztcdFx0LyogTUFHSUMgXHUwMDNjXHUwMDNjIDggfCBCTEtfSU9fVFJBQ0UyX1ZFUlNJT04gKi9cbiAxMzg6XHRcdF9fdTMyIHNlcXVlbmNlO1x0XHQvKiBldmVudCBudW1iZXIgKi9cbiAxMzk6XHRcdF9fdTY0IHRpbWU7XHRcdC8qIGluIG5hbm9zZWNvbmRzICovXG4gMTQwOlx0XHRfX3U2NCBzZWN0b3I7XHRcdC8qIGRpc2sgb2Zmc2V0ICovXG4gMTQxOlx0XHRfX3UzMiBieXRlcztcdFx0LyogdHJhbnNmZXIgbGVuZ3RoICovXG4gMTQyOlx0XHRfX3UzMiBwaWQ7XHRcdC8qIHdobyBkaWQgaXQgKi9cbiAxNDM6XHRcdF9fdTY0IGFjdGlvbjtcdFx0Lyogd2hhdCBoYXBwZW5lZCAqL1xuIDE0NDpcdFx0X191MzIgZGV2aWNlO1x0XHQvKiBkZXZpY2UgbnVtYmVyICovXG4gMTQ1Olx0XHRfX3UzMiBjcHU7XHRcdC8qIG9uIHdoYXQgY3B1IGRpZCBpdCBoYXBwZW4gKi9cbiAxNDY6XHRcdF9fdTE2IGVycm9yO1x0XHQvKiBjb21wbGV0aW9uIGVycm9yICovXG4gMTQ3Olx0XHRfX3UxNiBwZHVfbGVuO1x0XHQvKiBsZW5ndGggb2YgZGF0YSBhZnRlciB0aGlzIHRyYWNlICovXG4gMTQ4Olx0XHRfX3U4IHBhZFsxMl07XG4gMTQ5Olx0XHQvKiBjZ3JvdXAgaWQgd2lsbCBiZSBzdG9yZWQgaGVyZSBpZiBpdCBleGlzdHMgKi9cbiAxNTA6XHR9O1xuIDE1MTpcdC8qXG4gMTUyOlx0ICogVGhlIHJlbWFwIGV2ZW50XG4gMTUzOlx0ICovXG4gMTU0Olx0c3RydWN0IGJsa19pb190cmFjZV9yZW1hcCB7XG4gMTU1Olx0XHRfX2JlMzIgZGV2aWNlX2Zyb207XG4gMTU2Olx0XHRfX2JlMzIgZGV2aWNlX3RvO1xuIDE1NzpcdFx0X19iZTY0IHNlY3Rvcl9mcm9tO1xuIDE1ODpcdH07XG4gMTU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDkxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogODIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRml4IGZvciBhIEJsay1UcmFjZXIgT3V0LW9mLUJvdW5kcyBSZWFkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgYmVmb3JlIGFuZCBhZnRlcj8mIzM0OyBGcm9tIHdoYXQgSSYjMzk7bSByZWFkaW5nLCBpdCBhcHBlYXJzIHRoZSBgYmxrX3RyYWNlcmAgKGZ0cmFjZSYjMzk7cyBibG9jayBJL08gdHJhY2luZykgaGFkIGEgc3VidGxlIGJ1dCBjcml0aWNhbCBidWcuIEl0IGludm9sdmVzIGhvdyBkYXRhIGlzIHdyaXR0ZW4gdG8gYW5kIHJlYWQgZnJvbSB0aGUgZnRyYWNlIHJpbmcgYnVmZmVyIHVzaW5nIGBzdHJ1Y3QgYmxrX2lvX3RyYWNlMmAuCgpQcmV2aW91c2x5LCB0aGUgY29kZSB3YXMgaW5jb25zaXN0ZW50LiBXaGVuIGBidC0mZ3Q7dmVyc2lvbmAgd2FzIDEg4oCTIHdoaWNoIGNvdWxkIGhhcHBlbiB1bmRlciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIHVzaW5nIGNsYXNzaWMgYmxrdHJhY2Ugb3IgcmVsYXkgd2l0aCB2ZXJzaW9uIDEg4oCTIGBfX2Jsa19hZGRfdHJhY2VgIGFsbG9jYXRlZCBidWZmZXIgc3BhY2UgZm9yIHRoZSBvbGRlciBgc3RydWN0IGJsa19pb190cmFjZWAgcGx1cyB0aGUgUHJvdG9jb2wgRGF0YSBVbml0IChQRFUpIGxlbmd0aCBhbmQgQ29udHJvbCBHcm91cCBJRCAoQ0dJRCkgbGVuZ3RoLiBUaGUgcHJvYmxlbSwgdGhvdWdoLCB3YXMgdGhhdCBpdCB0aGVuICp3cm90ZSogdXNpbmcgYHJlY29yZF9ibGt0cmFjZV9ldmVudGAgd2hpY2ggd3JvdGUgdGhlICpzbWFsbGVyKiBgYmxrX2lvX3RyYWNlYC4gV2hlbiBmdHJhY2UgdGhlbiB3ZW50IHRvICpyZWFkKiB0aGUgYnVmZmVyLCBpdCBjYXN0IHRoZSBlbnRyeSB0byBgc3RydWN0IGJsa19pb190cmFjZTJgIGFuZCBleHBlY3RlZCB0aGUgUERVIHRvIHN0YXJ0IGF0IGEgbGF0ZXIgb2Zmc2V0LiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBidWZmZXIgb3ZlcmZsb3cgc2NlbmFyaW8sIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIGJlY2F1c2UgdGhlIHJlYWQgZXh0ZW5kZWQgcGFzdCB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KClRoZSBwYXRjaCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFzIGEgZml4LiBJdCBpbnRyb2R1Y2VzIHR3byBrZXkgY2hhbmdlczoKCjEuICBTaW5jZSB3ZSBhcmUgaW4gdGhlIGZ0cmFjZSBjb250ZXh0IChgaWYgKGJsa190cmFjZXIpYCksIHRoZSBhbGxvY2F0aW9uIHNpemUgbm93ICphbHdheXMqIHVzZXMgYHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgJiM0MzsgcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbmAgYW5kIHRoZSBkYXRhIGlzICphbHdheXMqIHdyaXR0ZW4gdXNpbmcgYHJlY29yZF9ibGt0cmFjZV9ldmVudDJgLiBTbywgY29uc2lzdGVuY3kgaXMgbm93IGd1YXJhbnRlZWQuCjIuICBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCAod2hpY2ggbGlrZWx5IHJ1bnMgYXQgc3lzdGVtIGluaXRpYWxpemF0aW9uIG9yIHdoZW4gYSB0cmFjZSBpcyBlbmFibGVkKSBub3cgaW5pdGlhbGl6ZXMgYGJ0LSZndDt2ZXJzaW9uID0gMmAuIFRoaXMgZ3VhcmFudGVlcyB0aGUgdmVyc2lvbiBmbGFnIGlzIG5vIGxvbmdlciAxLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSBzY2FuIGZvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgS01TQU4tcmVsZXZhbnQgaXNzdWVzLiBMb29raW5nIGF0IGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyYCwgaXQgYXBwZWFycyB0byBjb3B5IGBjZ2lkYCBhbmQgdGhlbiBgcGR1X2RhdGFgIGludG8gdGhlIGB0MmAgc3RydWN0IGF0IHRoZSBjb3JyZWN0IG9mZnNldHMuIGBjZ2lkX2xlbmAgYW5kIGBwZHVfbGVuYCBkZXRlcm1pbmUgdGhlIGNvcHkgc2l6ZXMsIHNvIHRoYXQgc2VlbXMgb2theS4KCkEgcXVlc3Rpb24gdGhhdCBjb21lcyB1cCB3aXRoIHRoaXMgaXMgcmVsYXRlZCB0byBob3cgdGhlIHJpbmcgYnVmZmVyIGFuZCB0cmFjZSBlbnRyaWVzIGFyZSBoYW5kbGVkIGluIGBmdHJhY2VgLiBXZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IGxheW91dCBpcyBjb3JyZWN0bHkgaGFuZGxlZCBpbiBgdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZWAuIEl0IGxvb2tzIGxpa2UgYHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmVgIGRvZXMgdGhlIHJlc2VydmF0aW9uIGluIHRoZSByaW5nIGJ1ZmZlci4gRnRyYWNlIHRoZW4gaW5pdGlhbGl6ZXMgdGhlIHJpbmcgYnVmZmVyIGVudHJ5IGhlYWRlciwgYW5kIGByaW5nX2J1ZmZlcl9ldmVudF9kYXRhYCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGF5bG9hZCwgd2hpY2ggc2hvdWxkIGJlIHRoZSBgc3RydWN0IGJsa19pb190cmFjZTJgLiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBgc3RydWN0IHRyYWNlX2VudHJ5YCBhbmQgYHN0cnVjdCBibGtfaW9fdHJhY2UyYCBpbiB0aGUgY29udGV4dCBvZiBgYmxrX3RyYWNlcmAuIEhvdyBpcyB0aGUgdHJhY2UgZW50cnkgZGVmaW5lZCBieSBgYmxrX3RyYWNlcmA/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgbmV4dCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1YnRsZSBhbGlnbm1lbnQgb3Igc2l6ZSBkaXNjcmVwYW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtUUkFDRV9CTEsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0Lmg9Nz1zdHJ1Y3QgaW9jX2dxO1xuaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmgtOC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oOjk6I2lmICFkZWZpbmVkKF9UUkFDRV9CTEtfSU9DT1NUX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaDoxMDojZGVmaW5lIF9UUkFDRV9CTEtfSU9DT1NUX0hcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oLTExLVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oPTE4MT1UUkFDRV9FVkVOVChpb2Nvc3RfaW9jZ19mb3JnaXZlX2RlYnQsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmgtMjIxLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0Lmg6MjIyOiNlbmRpZiAvKiBfVFJBQ0VfQkxLX0lPQ09TVF9IICovXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaC0yMjMtXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9Mzc9c3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9SQVdfU1BJTkxPQ0socnVubmluZ190cmFjZV9sb2NrKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zOS0vKiBTZWxlY3QgYW4gYWx0ZXJuYXRpdmUsIG1pbmltYWxpc3RpYyBvdXRwdXQgdGhhbiB0aGUgb3JpZ2luYWwgb25lICovXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0MDojZGVmaW5lIFRSQUNFX0JMS19PUFRfQ0xBU1NJQ1x0MHgxXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0MTojZGVmaW5lIFRSQUNFX0JMS19PUFRfQ0dST1VQXHQweDJcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjQyOiNkZWZpbmUgVFJBQ0VfQkxLX09QVF9DR05BTUVcdDB4NFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDMtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz00ND1zdGF0aWMgc3RydWN0IHRyYWNlcl9vcHQgYmxrX3RyYWNlcl9vcHRzW10gPSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00NS1cdC8qIERlZmF1bHQgZGlzYWJsZSB0aGUgbWluaW1hbGlzdGljIG91dHB1dCAqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDY6XHR7IFRSQUNFUl9PUFQoYmxrX2NsYXNzaWMsIFRSQUNFX0JMS19PUFRfQ0xBU1NJQykgfSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTQ3LSNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDg6XHR7IFRSQUNFUl9PUFQoYmxrX2Nncm91cCwgVFJBQ0VfQkxLX09QVF9DR1JPVVApIH0sXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0OTpcdHsgVFJBQ0VSX09QVChibGtfY2duYW1lLCBUUkFDRV9CTEtfT1BUX0NHTkFNRSkgfSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTUwLSNlbmRpZlxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTE3Mz1zdGF0aWMgdm9pZCB0cmFjZV9ub3RlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBwaWRfdCBwaWQsIHU2NCBhY3Rpb24sXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg5LVx0XHR0cmFjZV9jdHggPSB0cmFjaW5nX2dlbl9jdHhfZmxhZ3MoMCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxOTA6XHRcdGV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSyxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5MS1cdFx0XHRcdFx0XHQgIHRyYWNlX2xlbiwgdHJhY2VfY3R4KTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yNDM9dm9pZCBfX2Jsa190cmFjZV9ub3RlX21lc3NhZ2Uoc3RydWN0IGJsa190cmFjZSAqYnQsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjY5LSNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjcwOlx0aWYgKGNzcyBcdTAwMjZcdTAwMjYgKGJsa190cmFjZXJfZmxhZ3MudmFsIFx1MDAyNiBUUkFDRV9CTEtfT1BUX0NHUk9VUCkpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yNzEtXHRcdGNnaWQgPSBjZ3JvdXBfaWQoY3NzLVx1MDAzZWNncm91cCk7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MzEwPXN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzk3LVx0XHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICYjNDM7IHBkdV9sZW4gJiM0MzsgY2dpZF9sZW47XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzozOTg6XHRcdGV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSyxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTM5OS1cdFx0XHRcdFx0XHQgIHRyYWNlX2xlbiwgdHJhY2VfY3R4KTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz05MzQ9c3RhdGljIHU2NCBibGtfdHJhY2VfYmlvX2dldF9jZ2lkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTQwLVx0YnQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHEtXHUwMDNlYmxrX3RyYWNlLCAxKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk0MTpcdGlmICghYnQgfHwgIShibGtfdHJhY2VyX2ZsYWdzLnZhbCBcdTAwMjYgVFJBQ0VfQkxLX09QVF9DR1JPVVApKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTQyLVx0XHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNDcwPXN0YXRpYyB2b2lkIGJsa19sb2dfYWN0aW9uKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE0NzktXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNDgwOlx0XHRpZiAoYmxrX3RyYWNlcl9mbGFncy52YWwgXHUwMDI2IFRSQUNFX0JMS19PUFRfQ0dOQU1FKSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNDgxLVx0XHRcdGNoYXIgYmxrY2dfbmFtZV9idWZbTkFNRV9NQVggJiM0MzsgMV0gPSBcJiMzNDtcdTAwM2MuLi5cdTAwM2VcJiMzNDs7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTYzOT1zdGF0aWMgdm9pZCBibGtfdHJhY2VyX3ByaW50X2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNjQwLXtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE2NDE6XHRpZiAoIShibGtfdHJhY2VyX2ZsYWdzLnZhbCBcdTAwMjYgVFJBQ0VfQkxLX09QVF9DTEFTU0lDKSlcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE2NDItXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNzUzPXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBibGtfdHJhY2VyX3ByaW50X2xpbmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTc1NC17XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNzU1Olx0aWYgKChpdGVyLVx1MDAzZWVudC1cdTAwM2V0eXBlICE9IFRSQUNFX0JMSykgfHxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3NTY6XHQgICAgIShibGtfdHJhY2VyX2ZsYWdzLnZhbCBcdTAwMjYgVFJBQ0VfQkxLX09QVF9DTEFTU0lDKSlcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE3NTctXHRcdHJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNzYzPWJsa190cmFjZXJfc2V0X2ZsYWcoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgdTMyIG9sZF9mbGFncywgdTMyIGJpdCwgaW50IHNldClcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNzY1LVx0LyogZG9uJiMzOTt0IG91dHB1dCBjb250ZXh0LWluZm8gZm9yIGJsa19jbGFzc2ljIG91dHB1dCAqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTc2NjpcdGlmIChiaXQgPT0gVFJBQ0VfQkxLX09QVF9DTEFTU0lDKSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNzY3LVx0XHRpZiAoc2V0KVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTE3OTI9c3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV9ibGtfZXZlbnQgPSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNzkzOlx0LnR5cGVcdFx0PSBUUkFDRV9CTEssXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNzk0LVx0LmZ1bmNzXHRcdD0gXHUwMDI2dHJhY2VfYmxrX2V2ZW50X2Z1bmNzLFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTM3PWVudW0gdHJhY2VfdHlwZSB7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmgtNTItXHRUUkFDRV9VU0VSX1NUQUNLLFxua2VybmVsL3RyYWNlL3RyYWNlLmg6NTM6XHRUUkFDRV9CTEssXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC01NC1cdFRSQUNFX0JQVVRTLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYmxvY2sgdHJhY2luZyBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBfX2Jsa19hZGRfdHJhY2VgIGZ1bmN0aW9uIGFuZCBpdHMgYXNzb2NpYXRlZCByb3V0aW5lcyBpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgaG93IHRyYWNpbmcgaW5mb3JtYXRpb24gaXMgaW5qZWN0ZWQuCgpTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGZvY3VzaW5nIG9uIGxpbmVzIDMxMCB0aHJvdWdoIDQyMC4gVGhhdCBzZWN0aW9uIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgbWVjaGFuaWNzLCBsaWtlbHkgY292ZXJpbmcgaG93IHRoZSB0cmFjZXBvaW50cyBhcmUgaG9va2VkLCBkYXRhIGlzIGNvbGxlY3RlZCwgYW5kIG1heWJlIGV2ZW4gaG93IHRoZSB0cmFjaW5nIGJ1ZmZlciBpcyBtYW5hZ2VkLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgYW5kIGhvdyBldmVudHMgYXJlIHRpbWVzdGFtcGVkIGFuZCBmb3JtYXR0ZWQuIEhvcGVmdWxseSwgSSYjMzk7bGwgZmluZCBzb21lIGluc2lnaHRzIGludG8gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFwcHJvYWNoIGluIGhpZ2gtcGVyZm9ybWFuY2Ugc2NlbmFyaW9zIG9yIGluIGNvbXBsZXggSU8gY29uZmlndXJhdGlvbnMuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBjb250ZXh0dWFsaXplIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTA6XHRzdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxuIDMxMTpcdFx0XHRcdCAgICBjb25zdCBibGtfb3BmX3Qgb3BmLCB1NjQgd2hhdCwgaW50IGVycm9yLFxuIDMxMjpcdFx0XHRcdCAgICBpbnQgcGR1X2xlbiwgdm9pZCAqcGR1X2RhdGEsIHU2NCBjZ2lkKVxuIDMxMzpcdHtcbiAzMTQ6XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDtcbiAzMTU6XHRcdHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQgPSBOVUxMO1xuIDMxNjpcdFx0c3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyID0gTlVMTDtcbiAzMTc6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwO1xuIDMxODpcdFx0dW5zaWduZWQgbG9uZyAqc2VxdWVuY2U7XG4gMzE5Olx0XHR1bnNpZ25lZCBpbnQgdHJhY2VfY3R4ID0gMDtcbiAzMjA6XHRcdHBpZF90IHBpZDtcbiAzMjE6XHRcdGludCBjcHU7XG4gMzIyOlx0XHRib29sIGJsa190cmFjZXIgPSBibGtfdHJhY2VyX2VuYWJsZWQ7XG4gMzIzOlx0XHRzc2l6ZV90IGNnaWRfbGVuID0gY2dpZCA/IHNpemVvZihjZ2lkKSA6IDA7XG4gMzI0Olx0XHRjb25zdCBlbnVtIHJlcV9vcCBvcCA9IG9wZiBcdTAwMjYgUkVRX09QX01BU0s7XG4gMzI1Olx0XHRzaXplX3QgdHJhY2VfbGVuO1xuIDMyNjpcdFxuIDMyNzpcdFx0aWYgKHVubGlrZWx5KGJ0LVx1MDAzZXRyYWNlX3N0YXRlICE9IEJsa3RyYWNlX3J1bm5pbmcgXHUwMDI2XHUwMDI2ICFibGtfdHJhY2VyKSlcbiAzMjg6XHRcdFx0cmV0dXJuO1xuIDMyOTpcdFxuIDMzMDpcdFx0d2hhdCB8PSBkZGlyX2FjdFtvcF9pc193cml0ZShvcCkgPyBXUklURSA6IFJFQURdO1xuIDMzMTpcdFx0d2hhdCB8PSBNQVNLX1RDX0JJVChvcGYsIFNZTkMpO1xuIDMzMjpcdFx0d2hhdCB8PSBNQVNLX1RDX0JJVChvcGYsIFJBSEVBRCk7XG4gMzMzOlx0XHR3aGF0IHw9IE1BU0tfVENfQklUKG9wZiwgTUVUQSk7XG4gMzM0Olx0XHR3aGF0IHw9IE1BU0tfVENfQklUKG9wZiwgUFJFRkxVU0gpO1xuIDMzNTpcdFx0d2hhdCB8PSBNQVNLX1RDX0JJVChvcGYsIEZVQSk7XG4gMzM2Olx0XG4gMzM3Olx0XHRzd2l0Y2ggKG9wKSB7XG4gMzM4Olx0XHRjYXNlIFJFUV9PUF9ESVNDQVJEOlxuIDMzOTpcdFx0Y2FzZSBSRVFfT1BfU0VDVVJFX0VSQVNFOlxuIDM0MDpcdFx0XHR3aGF0IHw9IEJMS19UQ19BQ1QoQkxLX1RDX0RJU0NBUkQpO1xuIDM0MTpcdFx0XHRicmVhaztcbiAzNDI6XHRcdGNhc2UgUkVRX09QX0ZMVVNIOlxuIDM0MzpcdFx0XHR3aGF0IHw9IEJMS19UQ19BQ1QoQkxLX1RDX0ZMVVNIKTtcbiAzNDQ6XHRcdFx0YnJlYWs7XG4gMzQ1Olx0XHRjYXNlIFJFUV9PUF9aT05FX0FQUEVORDpcbiAzNDY6XHRcdFx0d2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19aT05FX0FQUEVORCk7XG4gMzQ3Olx0XHRcdGJyZWFrO1xuIDM0ODpcdFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVDpcbiAzNDk6XHRcdFx0d2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19aT05FX1JFU0VUKTtcbiAzNTA6XHRcdFx0YnJlYWs7XG4gMzUxOlx0XHRjYXNlIFJFUV9PUF9aT05FX1JFU0VUX0FMTDpcbiAzNTI6XHRcdFx0d2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19aT05FX1JFU0VUX0FMTCk7XG4gMzUzOlx0XHRcdGJyZWFrO1xuIDM1NDpcdFx0Y2FzZSBSRVFfT1BfWk9ORV9GSU5JU0g6XG4gMzU1Olx0XHRcdHdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfWk9ORV9GSU5JU0gpO1xuIDM1NjpcdFx0XHRicmVhaztcbiAzNTc6XHRcdGNhc2UgUkVRX09QX1pPTkVfT1BFTjpcbiAzNTg6XHRcdFx0d2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19aT05FX09QRU4pO1xuIDM1OTpcdFx0XHRicmVhaztcbiAzNjA6XHRcdGNhc2UgUkVRX09QX1pPTkVfQ0xPU0U6XG4gMzYxOlx0XHRcdHdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfWk9ORV9DTE9TRSk7XG4gMzYyOlx0XHRcdGJyZWFrO1xuIDM2MzpcdFx0Y2FzZSBSRVFfT1BfV1JJVEVfWkVST0VTOlxuIDM2NDpcdFx0XHR3aGF0IHw9IEJMS19UQ19BQ1QoQkxLX1RDX1dSSVRFX1pFUk9FUyk7XG4gMzY1Olx0XHRcdGJyZWFrO1xuIDM2NjpcdFx0ZGVmYXVsdDpcbiAzNjc6XHRcdFx0YnJlYWs7XG4gMzY4Olx0XHR9XG4gMzY5Olx0XG4gMzcwOlx0XHQvKiBEcm9wIHRyYWNlIGV2ZW50cyBmb3Igem9uZSBvcGVyYXRpb25zIHdpdGggYmxrdHJhY2UgdjEgKi9cbiAzNzE6XHRcdGlmIChidC1cdTAwM2V2ZXJzaW9uID09IDEgXHUwMDI2XHUwMDI2ICh3aGF0IFx1MDAzZVx1MDAzZSBCTEtfVENfU0hJRlQpIFx1MDAzZSBCTEtfVENfRU5EX1YxKSB7XG4gMzcyOlx0XHRcdHByX2RlYnVnX3JhdGVsaW1pdGVkKFwmIzM0O2Jsa3RyYWNlIHYxIGNhbm5vdCB0cmFjZSB6b25lIG9wZXJhdGlvbiAweCVsbHhcXG5cJiMzNDssXG4gMzczOlx0XHRcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKXdoYXQpO1xuIDM3NDpcdFx0XHRyZXR1cm47XG4gMzc1Olx0XHR9XG4gMzc2Olx0XG4gMzc3Olx0XHRpZiAoY2dpZClcbiAzNzg6XHRcdFx0d2hhdCB8PSBfX0JMS19UQV9DR1JPVVA7XG4gMzc5Olx0XG4gMzgwOlx0XHRwaWQgPSB0c2stXHUwMDNlcGlkO1xuIDM4MTpcdFx0aWYgKGFjdF9sb2dfY2hlY2soYnQsIHdoYXQsIHNlY3RvciwgcGlkKSlcbiAzODI6XHRcdFx0cmV0dXJuO1xuIDM4MzpcdFx0Y3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcbiAzODQ6XHRcbiAzODU6XHRcdGlmIChibGtfdHJhY2VyKSB7XG4gMzg2Olx0XHRcdGJ1ZmZlciA9IGJsa190ci1cdTAwM2VhcnJheV9idWZmZXIuYnVmZmVyO1xuIDM4NzpcdFx0XHR0cmFjZV9jdHggPSB0cmFjaW5nX2dlbl9jdHhfZmxhZ3MoMCk7XG4gMzg4Olx0XHRcdC8qXG4gMzg5Olx0XHRcdCAqIFRoZSBmdHJhY2UgcmluZyBidWZmZXIgYWx3YXlzIHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKVxuIDM5MDpcdFx0XHQgKiBmb3JtYXQ7IHRoZSBmdHJhY2UgcmVhZGVycyBwYXJzZSBvbmx5IHRoYXQuIGJ0LVx1MDAzZXZlcnNpb25cbiAzOTE6XHRcdFx0ICogZGVzY3JpYmVzIGp1c3QgdGhlIHJlbGF5L2NsYXNzaWMgYmxrdHJhY2UgcmVjb3JkIGZvcm1hdC5cbiAzOTI6XHRcdFx0ICogUmVjb3JkaW5nIGEgdjEtc2l6ZWQgZXZlbnQgaGVyZSB3b3VsZCBzaGlmdCBwZHVfc3RhcnQoKSAxNlxuIDM5MzpcdFx0XHQgKiBieXRlcyBwYXN0IHRoZSBQRFUgYW5kIG1ha2UgYmxrX2xvZ19yZW1hcCgpIHJlYWQgcGFzdCB0aGVcbiAzOTQ6XHRcdFx0ICogZXZlbnQgKGEgdXNlLWFmdGVyLWZyZWUgb24gY29uY3VycmVudCBidWZmZXIgcmVzaXplKSwgYW5kIHYxXG4gMzk1Olx0XHRcdCAqIGNhbm5vdCByZXByZXNlbnQgdGhlIG5ld2VyIDY0LWJpdCB6b25lIGFjdGlvbnMgYW55d2F5LlxuIDM5NjpcdFx0XHQgKi9cbiAzOTc6XHRcdFx0dHJhY2VfbGVuID0gc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKSAmIzQzOyBwZHVfbGVuICYjNDM7IGNnaWRfbGVuO1xuIDM5ODpcdFx0XHRldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9CTEssXG4gMzk5Olx0XHRcdFx0XHRcdFx0ICB0cmFjZV9sZW4sIHRyYWNlX2N0eCk7XG4gNDAwOlx0XHRcdGlmICghZXZlbnQpXG4gNDAxOlx0XHRcdFx0cmV0dXJuO1xuIDQwMjpcdFxuIDQwMzpcdFx0XHR0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpO1xuIDQwNDpcdFx0XHRyZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLFxuIDQwNTpcdFx0XHRcdFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxuIDQwNjpcdFx0XHRcdFx0ICAgICAgIHdoYXQsIGJ0LVx1MDAzZWRldiwgZXJyb3IsIGNnaWQsIGNnaWRfbGVuLFxuIDQwNzpcdFx0XHRcdFx0ICAgICAgIHBkdV9kYXRhLCBwZHVfbGVuKTtcbiA0MDg6XHRcbiA0MDk6XHRcdFx0dHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYmxrX3RyLCBidWZmZXIsIGV2ZW50LCB0cmFjZV9jdHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQyOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgYXMgdGhvdWdoIHRoZXkgd2VyZSBteSBvd246CgoqKkRpdmluZyBEZWVwZXIgaW50byBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgYmVlbiBleGFtaW5pbmcgdGhlIGJsb2NrIHRyYWNlIGluZnJhc3RydWN0dXJlLCBhbmQgbm93IEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gTGV0JiMzOTtzIG5vdCBqdXN0IHRhbGsgYWJvdXQgdGhlICp3aGF0KiwgYnV0IGFsc28gdGhlICpob3cqLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ2V0dGluZyBjdXJpb3VzIGFib3V0IHRoZSBpbm5lciB3b3JraW5ncyBvZiBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGhhcHBlbnMgdW5kZXIgdGhlIGhvb2Qgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gSSYjMzk7bSBpbWFnaW5pbmcgdGhpcyBpcyB3aGVyZSB0aGUgdHJhY2Vwb2ludCBzZXR1cCBmb3IgYSBzcGVjaWZpYyBibG9jayBxdWV1ZSBnZXRzIG9yY2hlc3RyYXRlZC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyBnb2luZyB0byBiZSB3aGVyZSBhbGwgdGhlIGltcG9ydGFudCBwYXJhbWV0ZXJzIGFyZSBpbml0aWFsaXplZCBhbmQgcmVnaXN0ZXJlZC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgdGhlIHRyYWNpbmcgc3RhcnRzLiBUaW1lIHRvIGRpc3NlY3QgdGhlIGltcGxlbWVudGF0aW9uLCBsaW5lIGJ5IGxpbmUuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgdGhpbmcgKnJlYWxseSogdGlja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjA6XHRzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbjE4NjE6XHRcdFx0XHRcdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuMTg2MjpcdHtcbjE4NjM6XHRcdHN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gTlVMTDtcbjE4NjQ6XHRcdGludCByZXQgPSAtRU5PTUVNO1xuMTg2NTpcdFxuMTg2NjpcdFx0YnQgPSBremFsbG9jX29iaigqYnQpO1xuMTg2NzpcdFx0aWYgKCFidClcbjE4Njg6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xODY5Olx0XG4xODcwOlx0XHRidC1cdTAwM2Vtc2dfZGF0YSA9IF9fYWxsb2NfcGVyY3B1KEJMS19UTl9NQVhfTVNHLCBfX2FsaWdub2ZfXyhjaGFyKSk7XG4xODcxOlx0XHRpZiAoIWJ0LVx1MDAzZW1zZ19kYXRhKVxuMTg3MjpcdFx0XHRnb3RvIGZyZWVfYnQ7XG4xODczOlx0XG4xODc0Olx0XHRidC1cdTAwM2VkZXYgPSBiZGV2LVx1MDAzZWJkX2RldjtcbjE4NzU6XHRcdGJ0LVx1MDAzZWFjdF9tYXNrID0gKHUxNiktMTtcbjE4NzY6XHRcdC8qXG4xODc3Olx0XHQgKiBUaGlzIHN5c2ZzLWVuYWJsZWQgcGF0aCBmZWVkcyB0aGUgZnRyYWNlIGJsayB0cmFjZXIsIHdoaWNoIGFsd2F5c1xuMTg3ODpcdFx0ICogdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC4gSW5pdGlhbGl6ZSB0aGUgdmVyc2lvbiBzbyBpdCBpc1xuMTg3OTpcdFx0ICogbmV2ZXIgbGVmdCBkYW5nbGluZyBhcyAwIGZvciBmdXR1cmUgY29uc3VtZXJzLlxuMTg4MDpcdFx0ICovXG4xODgxOlx0XHRidC1cdTAwM2V2ZXJzaW9uID0gMjtcbjE4ODI6XHRcbjE4ODM6XHRcdGJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpO1xuMTg4NDpcdFxuMTg4NTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHEtXHUwMDNlYmxrX3RyYWNlLCBidCk7XG4xODg2Olx0XHRnZXRfcHJvYmVfcmVmKCk7XG4xODg3Olx0XHRyZXR1cm4gMDtcbjE4ODg6XHRcbjE4ODk6XHRmcmVlX2J0OlxuMTg5MDpcdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuMTg5MTpcdFx0cmV0dXJuIHJldDtcbjE4OTI6XHR9XG4xODkzOlx0XG4xODk0Olx0LypcbjE4OTU6XHQgKiBzeXNmcyBpbnRlcmZhY2UgdG8gZW5hYmxlIGFuZCBjb25maWd1cmUgdHJhY2luZ1xuMTg5NjpcdCAqL1xuMTg5NzpcdFxuMTg5ODpcdHN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuMTg5OTpcdFx0XHRcdFx0XHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjUwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgYmxrdHJhY2UuY2AmIzM5O3MgVmVyc2lvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBiYWNrIGludG8gYGJsa3RyYWNlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSAqZWxzZSogZG9lcyB0aGlzIGBidC0mZ3Q7dmVyc2lvbmAgdmFyaWFibGUgcG9wIHVwLCBvciB3aGVyZSBhcmUgdGhlIHRyYWNlIHJlY29yZHMgYmVpbmcgaGFuZGxlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoYXQgdmVyc2lvbj8mIzM0OyBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBTbywgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoIGlzIHRvIGRvIGEgdGFyZ2V0ZWQgc2VhcmNoLiBJJiMzOTtsbCBsYXVuY2ggYSBxdWVyeSBmb3IgYm90aCBgYnQtJmd0O3ZlcnNpb25gIGFuZCwganVzdCBpbiBjYXNlLCBhIG1vcmUgZ2VuZXJhbCBgdmVyc2lvbmAgdGhyb3VnaG91dCBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgcXVpY2tseSBwaW5wb2ludCB0aGUga2V5IGFyZWFzIHRvIHVuZGVyc3RhbmQgdGhlIHZlcnNpb25pbmcgbG9naWMgd2l0aGluIHRoZSB0cmFjaW5nIHN5c3RlbSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHRyYWNlIHJlY29yZHMgdGhlbXNlbHZlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGNvbWVzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXJzaW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTU2PXN0YXRpYyB2b2lkIHJlbGF5X2Jsa3RyYWNlX2V2ZW50KHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE2MC17XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNjE6XHRpZiAoYnQtXHUwMDNldmVyc2lvbiA9PSAyKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTYyLVx0XHRyZXR1cm4gcmVsYXlfYmxrdHJhY2VfZXZlbnQyKGJ0LCBzZXF1ZW5jZSwgcGlkLCBjcHUsIHNlY3Rvcixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0zMTA9c3RhdGljIHZvaWQgX19ibGtfYWRkX3RyYWNlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcyxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zNzAtXHQvKiBEcm9wIHRyYWNlIGV2ZW50cyBmb3Igem9uZSBvcGVyYXRpb25zIHdpdGggYmxrdHJhY2UgdjEgKi9cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjM3MTpcdGlmIChidC1cdTAwM2V2ZXJzaW9uID09IDEgXHUwMDI2XHUwMDI2ICh3aGF0IFx1MDAzZVx1MDAzZSBCTEtfVENfU0hJRlQpIFx1MDAzZSBCTEtfVENfRU5EX1YxKSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zNzItXHRcdHByX2RlYnVnX3JhdGVsaW1pdGVkKFwmIzM0O2Jsa3RyYWNlIHYxIGNhbm5vdCB0cmFjZSB6b25lIG9wZXJhdGlvbiAweCVsbHhcXG5cJiMzNDssXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzg5LVx0XHQgKiBUaGUgZnRyYWNlIHJpbmcgYnVmZmVyIGFsd2F5cyB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMilcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjM5MDpcdFx0ICogZm9ybWF0OyB0aGUgZnRyYWNlIHJlYWRlcnMgcGFyc2Ugb25seSB0aGF0LiBidC1cdTAwM2V2ZXJzaW9uXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zOTEtXHRcdCAqIGRlc2NyaWJlcyBqdXN0IHRoZSByZWxheS9jbGFzc2ljIGJsa3RyYWNlIHJlY29yZCBmb3JtYXQuXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9NjkwPXN0YXRpYyB2b2lkIGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjY5MTpcdFx0XHRcdCAgICAgY2hhciAqbmFtZSwgaW50IHZlcnNpb24sXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy02OTItXHRcdFx0XHQgICAgIHN0cnVjdCBibGtfdHJhY2UgKmJ0LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTcwMy1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjcwNDpcdGJ0LVx1MDAzZXZlcnNpb24gPSB2ZXJzaW9uO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzA1LVx0YnQtXHUwMDNlYWN0X21hc2sgPSBidXRzLVx1MDAzZWFjdF9tYXNrO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEwMzQ9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV96b25lX3VwZGF0ZV9yZXF1ZXN0KHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMzktXHRidCA9IHJjdV9kZXJlZmVyZW5jZShycS1cdTAwM2VxLVx1MDAzZWJsa190cmFjZSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMDQwOlx0aWYgKGxpa2VseSghYnQpIHx8IGJ0LVx1MDAzZXZlcnNpb24gXHUwMDNjIDIpIHtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwNDEtXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExNDA9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV96b25lX3BsdWcodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTQ3LVx0YnQgPSByY3VfZGVyZWZlcmVuY2UocS1cdTAwM2VibGtfdHJhY2UpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTE0ODpcdGlmIChidCBcdTAwMjZcdTAwMjYgYnQtXHUwMDNldmVyc2lvbiBcdTAwM2U9IDIpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTQ5LVx0XHRfX2Jsa19hZGRfdHJhY2UoYnQsIHNlY3Rvciwgc2VjdG9ycyBcdTAwM2NcdTAwM2MgU0VDVE9SX1NISUZULCAwLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExNTY9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV96b25lX3VucGx1Zyh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExNjMtXHRidCA9IHJjdV9kZXJlZmVyZW5jZShxLVx1MDAzZWJsa190cmFjZSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMTY0Olx0aWYgKGJ0IFx1MDAyNlx1MDAyNiBidC1cdTAwM2V2ZXJzaW9uIFx1MDAzZT0gMilcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExNjUtXHRcdF9fYmxrX2FkZF90cmFjZShidCwgc2VjdG9yLCBzZWN0b3JzIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQsIDAsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTg2MD1zdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODc3LVx0ICogVGhpcyBzeXNmcy1lbmFibGVkIHBhdGggZmVlZHMgdGhlIGZ0cmFjZSBibGsgdHJhY2VyLCB3aGljaCBhbHdheXNcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4Nzg6XHQgKiB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMikgZm9ybWF0LiBJbml0aWFsaXplIHRoZSB2ZXJzaW9uIHNvIGl0IGlzXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODc5LVx0ICogbmV2ZXIgbGVmdCBkYW5nbGluZyBhcyAwIGZvciBmdXR1cmUgY29uc3VtZXJzLlxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg4MC1cdCAqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTg4MTpcdGJ0LVx1MDAzZXZlcnNpb24gPSAyO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg4Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NTgKCQkJCQkJCW91dHB1dDogMjY0CgkJCQkJCQl0aG91Z2h0czogMTIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoIERvZXNuJiMzOTt0IFdhcnJhbnQgSXQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgdGVsbHMgbWUgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBzdWJ0bGUsIGJ1dCBjcml0aWNhbCwgZmxhdyBpbiB0aGUgYmxvY2sgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gVGhlIGNvcmUgaXNzdWUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHdoYXQmIzM5O3Mgd3JpdHRlbiB0byB0aGUgZnRyYWNlIHJpbmcgYnVmZmVyIGFuZCB3aGF0IHRoZSBjb25zdW1lcnMgKmV4cGVjdCogdG8gZmluZCB0aGVyZS4gUHJldmlvdXNseSwgYF9fYmxrX2FkZF90cmFjZSgpYCBjb3VsZCB3cml0ZSB2MSBgYmxrX2lvX3RyYWNlYCBldmVudHMsIGJ1dCB0aGUgY29uc3VtZXJzLCBsaWtlIGBibGtfbG9nX3JlbWFwYCwgd2VyZSBidWlsdCBleHBlY3RpbmcgdjIgYGJsa19pb190cmFjZTJgIGV2ZW50cy4gVGhpcyBkaWZmZXJlbmNlIGluIHN0cnVjdHVyZSBzaXplcyBsZWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcyBpbiB0aGUgcmluZyBidWZmZXIsIGVzc2VudGlhbGx5IHJlYWRpbmcgcGFzdCB0aGUgaW50ZW5kZWQgZXZlbnQgYm91bmRhcnksIGFuZCB0aGF0IGNyZWF0ZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCBhIHJlYWwgcHJvYmxlbS4KCk15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgaWYgdGhpcyBpbnRyb2R1Y2VzIGEgS01TQU4tcmVsZXZhbnQgcHJvYmxlbS4gSSBzZWUgdGhhdCB0aGUgcGF0Y2gmIzM5O3MgZml4IGludm9sdmVzIHVuY29uZGl0aW9uYWxseSB3cml0aW5nIGBzdHJ1Y3QgYmxrX2lvX3RyYWNlMmAgZXZlbnRzIHRvIHRoZSBmdHJhY2UgYnVmZmVyLiBBbHNvLCBgYnQtJmd0O3ZlcnNpb25gIGlzIGV4cGxpY2l0bHkgc2V0IHRvIDIgZHVyaW5nIHF1ZXVlIHNldHVwIHdoaWNoLCBjcml0aWNhbGx5LCBlbGltaW5hdGVzIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJpc2tzLiBUaGUgbWVtb3J5IGFsbG9jYXRpb24gKGBremFsbG9jX29iamAsIGFuZCBgdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgpYCkgYW5kIGluaXRpYWxpemF0aW9uIChgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmApIHBhcnRzIG9mIHRoZSBjb2RlIGFyZSByb2J1c3QuCgpCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIEtNU0FOIHRyaWdnZXJzLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IG1lZXQgdGhlIGNyaXRlcmlhLiBJdCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHVzZS1hZnRlci1mcmVlLCBwcm9ibGVtcyB0aGF0IEtBU0FOIGFuZCBzdGFuZGFyZCBidWZmZXIgY2hlY2tzIGFyZSBkZXNpZ25lZCB0byBkZXRlY3QuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgc3RydWN0dXJlIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB0aGF0IGFyZSBicmFuY2hlZCBvbi4gSW4gZmFjdCwgaXQgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgdmVyc2lvbiBmaWVsZC4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIGVuYWJsZSBLTVNBTiBoZXJlLiBUaGlzIGlzIGEgc29saWQsIGNsZWFuIGZpeCwgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUgdGhlIHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIGEgZm9ybWF0IG1pc21hdGNoIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIC8gdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBmdHJhY2UgYmxvY2sgdHJhY2luZyBzdWJzeXN0ZW0gKGJsa3RyYWNlKS4gUHJldmlvdXNseSwgaWYgYnQtXHUwMDNldmVyc2lvbiB3YXMgMSBvciAwLCBfX2Jsa19hZGRfdHJhY2UoKSBjb3VsZCBhbGxvY2F0ZSBhbmQgd3JpdGUgYSBzbWFsbGVyIHYxIChibGtfaW9fdHJhY2UpIGV2ZW50IGludG8gdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB3aGlsZSBmdHJhY2UgY29uc3VtZXJzIHBhcnNlZCBlbnRyaWVzIHN0cmljdGx5IGFzIHYyIChibGtfaW9fdHJhY2UyKSwgcmVzdWx0aW5nIGluIHBkdV9zdGFydCgpIGluZGV4aW5nIG91dC1vZi1ib3VuZHMgYmV5b25kIHRoZSByZXNlcnZlZCBldmVudCBidWZmZXIuXG5cblRoaXMgY2xhc3Mgb2YgYnVnIChvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHVzZS1hZnRlci1mcmVlKSBpcyB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIGZ0cmFjZSBwYXRoIHRvIHVuY29uZGl0aW9uYWxseSByZWNvcmQgdjIgZXZlbnRzIG9mIHNpemUgc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKSAmIzQzOyBwZHVfbGVuICYjNDM7IGNnaWRfbGVuIGFuZCBpbml0aWFsaXplcyBidC1cdTAwM2V2ZXJzaW9uIHRvIDIgaW4gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCkgKHdoZXJlIHRoZSBtZW1vcnkgaXMgYWxyZWFkeSB6ZXJvLWFsbG9jYXRlZCB2aWEga3phbGxvY19vYmopLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBmb3JtYXQgbWlzbWF0Y2ggYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgLyB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGZ0cmFjZSBibG9jayB0cmFjaW5nIHN1YnN5c3RlbSAoYmxrdHJhY2UpLiBQcmV2aW91c2x5LCBpZiBidC1cdTAwM2V2ZXJzaW9uIHdhcyAxIG9yIDAsIF9fYmxrX2FkZF90cmFjZSgpIGNvdWxkIGFsbG9jYXRlIGFuZCB3cml0ZSBhIHNtYWxsZXIgdjEgKGJsa19pb190cmFjZSkgZXZlbnQgaW50byB0aGUgZnRyYWNlIHJpbmcgYnVmZmVyIHdoaWxlIGZ0cmFjZSBjb25zdW1lcnMgcGFyc2VkIGVudHJpZXMgc3RyaWN0bHkgYXMgdjIgKGJsa19pb190cmFjZTIpLCByZXN1bHRpbmcgaW4gcGR1X3N0YXJ0KCkgaW5kZXhpbmcgb3V0LW9mLWJvdW5kcyBiZXlvbmQgdGhlIHJlc2VydmVkIGV2ZW50IGJ1ZmZlci5cblxuVGhpcyBjbGFzcyBvZiBidWcgKG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgdXNlLWFmdGVyLWZyZWUpIGlzIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgZnRyYWNlIHBhdGggdG8gdW5jb25kaXRpb25hbGx5IHJlY29yZCB2MiBldmVudHMgb2Ygc2l6ZSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICYjNDM7IHBkdV9sZW4gJiM0MzsgY2dpZF9sZW4gYW5kIGluaXRpYWxpemVzIGJ0LVx1MDAzZXZlcnNpb24gdG8gMiBpbiBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKSAod2hlcmUgdGhlIG1lbW9yeSBpcyBhbHJlYWR5IHplcm8tYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaikuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb25kaXRpb25hbCBsb2dpYy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjA3LjYwMjkxODI3NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MDQzNDE5OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfSU9fVFJBQ0VcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19ibGtfYWRkX3RyYWNlXCIsXG4gICAgXCJibGtfdHJhY2Vfc2V0dXBfcXVldWVcIixcbiAgICBcInJlY29yZF9ibGt0cmFjZV9ldmVudDJcIixcbiAgICBcInN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNvbHZlcyBhIGZvcm1hdCBtaXNtYXRjaCBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCAvIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgZnRyYWNlIGJsb2NrIHRyYWNpbmcgc3Vic3lzdGVtIChibGt0cmFjZSkuIFByZXZpb3VzbHksIGlmIGJ0LVxcdTAwM2V2ZXJzaW9uIHdhcyAxIG9yIDAsIF9fYmxrX2FkZF90cmFjZSgpIGNvdWxkIGFsbG9jYXRlIGFuZCB3cml0ZSBhIHNtYWxsZXIgdjEgKGJsa19pb190cmFjZSkgZXZlbnQgaW50byB0aGUgZnRyYWNlIHJpbmcgYnVmZmVyIHdoaWxlIGZ0cmFjZSBjb25zdW1lcnMgcGFyc2VkIGVudHJpZXMgc3RyaWN0bHkgYXMgdjIgKGJsa19pb190cmFjZTIpLCByZXN1bHRpbmcgaW4gcGR1X3N0YXJ0KCkgaW5kZXhpbmcgb3V0LW9mLWJvdW5kcyBiZXlvbmQgdGhlIHJlc2VydmVkIGV2ZW50IGJ1ZmZlci5cXG5cXG5UaGlzIGNsYXNzIG9mIGJ1ZyAob3V0LW9mLWJvdW5kcyByZWFkIGFuZCB1c2UtYWZ0ZXItZnJlZSkgaXMgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBmdHJhY2UgcGF0aCB0byB1bmNvbmRpdGlvbmFsbHkgcmVjb3JkIHYyIGV2ZW50cyBvZiBzaXplIHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgKyBwZHVfbGVuICsgY2dpZF9sZW4gYW5kIGluaXRpYWxpemVzIGJ0LVxcdTAwM2V2ZXJzaW9uIHRvIDIgaW4gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCkgKHdoZXJlIHRoZSBtZW1vcnkgaXMgYWxyZWFkeSB6ZXJvLWFsbG9jYXRlZCB2aWEga3phbGxvY19vYmopLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayB0cmFjZSBzdWJzeXN0ZW0gKGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jKSwgc3BlY2lmaWNhbGx5IGluIF9fYmxrX2FkZF90cmFjZSgpIGFuZCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBmdHJhY2UgcmluZyBidWZmZXIgdW5jb25kaXRpb25hbGx5IHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKSBsYXlvdXQsIGVsaW1pbmF0aW5nIHBvdGVudGlhbCBidWZmZXIgbWlzbWF0Y2hlcyBhbmQgb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGluaXRpYWxpemVzIGJ0LVxcdTAwM2V2ZXJzaW9uIGZvciBzeXNmcy1jb25maWd1cmVkIHF1ZXVlcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIGJsb2NrIGxheWVyIHRyYWNpbmcgbG9naWMgYWNjZXNzaWJsZSB2aWEgc3lzZnMgYW5kIGJsb2NrIEkvTyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjA3LjYwMjkzMTU4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTg3MTQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxZjc4ODdmZmZhYWU2NWIxN2YxNjExYTllMGFkZTg2YTFhOWQ5YWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTo1MTowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jXFxuaW5kZXggOGNkMjUyMGI0Yzk5ZS4uYWUwMTA5NjljMTQ0MyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xcbisrKyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jXFxuQEAgLTM4NSw2NiArMzg1LDI2IEBAIHN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXFxuIFxcdGlmIChibGtfdHJhY2VyKSB7XFxuIFxcdFxcdGJ1ZmZlciA9IGJsa190ci1cXHUwMDNlYXJyYXlfYnVmZmVyLmJ1ZmZlcjtcXG4gXFx0XFx0dHJhY2VfY3R4ID0gdHJhY2luZ19nZW5fY3R4X2ZsYWdzKDApO1xcbi1cXHRcXHRzd2l0Y2ggKGJ0LVxcdTAwM2V2ZXJzaW9uKSB7XFxuLVxcdFxcdGNhc2UgMTpcXG4tXFx0XFx0XFx0dHJhY2VfbGVuID0gc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAyOlxcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBmdHJhY2UgYWx3YXlzIHVzZXMgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC5cXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogRm9yIHN5c2ZzLWVuYWJsZWQgdHJhY2luZyBwYXRoIChlbmFibGVkIHZpYVxcbi1cXHRcXHRcXHQgKiAvc3lzL2Jsb2NrL0RFVi90cmFjZS9lbmFibGUpLCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKVxcbi1cXHRcXHRcXHQgKiBuZXZlciBpbml0aWFsaXplcyBidC1cXHUwMDNldmVyc2lvbiwgbGVhdmluZyBpdCAwIGZyb21cXG4tXFx0XFx0XFx0ICoga3phbGxvYygpLiBXZSBtdXN0IGhhbmRsZSB2ZXJzaW9uPT0wIHNhZmVseSBoZXJlLlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCB0byBlbnN1cmUgd2UgbmV2ZXIgaGl0IHRoZVxcbi1cXHRcXHRcXHQgKiBvbGQgYnVnIHdoZXJlIGRlZmF1bHQgc2V0IHRyYWNlX2xlbj0wLCBjYXVzaW5nXFxuLVxcdFxcdFxcdCAqIGJ1ZmZlciB1bmRlcmZsb3cgYW5kIG1lbW9yeSBjb3JydXB0aW9uLlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiBBbHdheXMgdXNlIHYyIGZvcm1hdCBmb3IgZnRyYWNlIGFuZCBub3JtYWxpemVcXG4tXFx0XFx0XFx0ICogYnQtXFx1MDAzZXZlcnNpb24gdG8gMiB3aGVuIHVuaW5pdGlhbGl6ZWQuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpO1xcbi1cXHRcXHRcXHRpZiAoYnQtXFx1MDAzZXZlcnNpb24gPT0gMClcXG4tXFx0XFx0XFx0XFx0YnQtXFx1MDAzZXZlcnNpb24gPSAyO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHR0cmFjZV9sZW4gKz0gcGR1X2xlbiArIGNnaWRfbGVuO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgZnRyYWNlIHJpbmcgYnVmZmVyIGFsd2F5cyB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMilcXG4rXFx0XFx0ICogZm9ybWF0OyB0aGUgZnRyYWNlIHJlYWRlcnMgcGFyc2Ugb25seSB0aGF0LiBidC1cXHUwMDNldmVyc2lvblxcbitcXHRcXHQgKiBkZXNjcmliZXMganVzdCB0aGUgcmVsYXkvY2xhc3NpYyBibGt0cmFjZSByZWNvcmQgZm9ybWF0LlxcbitcXHRcXHQgKiBSZWNvcmRpbmcgYSB2MS1zaXplZCBldmVudCBoZXJlIHdvdWxkIHNoaWZ0IHBkdV9zdGFydCgpIDE2XFxuK1xcdFxcdCAqIGJ5dGVzIHBhc3QgdGhlIFBEVSBhbmQgbWFrZSBibGtfbG9nX3JlbWFwKCkgcmVhZCBwYXN0IHRoZVxcbitcXHRcXHQgKiBldmVudCAoYSB1c2UtYWZ0ZXItZnJlZSBvbiBjb25jdXJyZW50IGJ1ZmZlciByZXNpemUpLCBhbmQgdjFcXG4rXFx0XFx0ICogY2Fubm90IHJlcHJlc2VudCB0aGUgbmV3ZXIgNjQtYml0IHpvbmUgYWN0aW9ucyBhbnl3YXkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuO1xcbiBcXHRcXHRldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9CTEssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgdHJhY2VfbGVuLCB0cmFjZV9jdHgpO1xcbiBcXHRcXHRpZiAoIWV2ZW50KVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRcXHR0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpO1xcbi1cXHRcXHRzd2l0Y2ggKGJ0LVxcdTAwM2V2ZXJzaW9uKSB7XFxuLVxcdFxcdGNhc2UgMTpcXG4tXFx0XFx0XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgd2hhdCwgYnQtXFx1MDAzZWRldiwgZXJyb3IsIGNnaWQsIGNnaWRfbGVuLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIDI6XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFVzZSB2MiByZWNvcmRpbmcgZnVuY3Rpb24gKHJlY29yZF9ibGt0cmFjZV9ldmVudDIpXFxuLVxcdFxcdFxcdCAqIHdoaWNoIHdyaXRlcyBibGtfaW9fdHJhY2UyIHN0cnVjdHVyZSB3aXRoIGNvcnJlY3RcXG4tXFx0XFx0XFx0ICogZmllbGQgbGF5b3V0Olxcbi1cXHRcXHRcXHQgKiAgIC0gMzItYml0IHBpZCBhdCBvZmZzZXQgMjhcXG4tXFx0XFx0XFx0ICogICAtIDY0LWJpdCBhY3Rpb24gYXQgb2Zmc2V0IDMyXFxuLVxcdFxcdFxcdCAqXFxuLVxcdFxcdFxcdCAqIEZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IGhhbmRsZXMgdmVyc2lvbj09MCBjYXNlXFxuLVxcdFxcdFxcdCAqIChmcm9tIHN5c2ZzIHBhdGgpLCBlbnN1cmluZyB3ZSBhbHdheXMgdXNlIGNvcnJlY3RcXG4tXFx0XFx0XFx0ICogdjIgcmVjb3JkaW5nIGZ1bmN0aW9uIHRvIG1hdGNoIHRoZSB2MiBidWZmZXJcXG4tXFx0XFx0XFx0ICogYWxsb2NhdGVkIGFib3ZlLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgd2hhdCwgYnQtXFx1MDAzZWRldiwgZXJyb3IsIGNnaWQsIGNnaWRfbGVuLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgcGR1X2RhdGEsIHBkdV9sZW4pO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRcXHRyZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB3aGF0LCBidC1cXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7XFxuIFxcbiBcXHRcXHR0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChibGtfdHIsIGJ1ZmZlciwgZXZlbnQsIHRyYWNlX2N0eCk7XFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMTkxMyw2ICsxODczLDEyIEBAIHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbiBcXG4gXFx0YnQtXFx1MDAzZWRldiA9IGJkZXYtXFx1MDAzZWJkX2RldjtcXG4gXFx0YnQtXFx1MDAzZWFjdF9tYXNrID0gKHUxNiktMTtcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBzeXNmcy1lbmFibGVkIHBhdGggZmVlZHMgdGhlIGZ0cmFjZSBibGsgdHJhY2VyLCB3aGljaCBhbHdheXNcXG4rXFx0ICogdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC4gSW5pdGlhbGl6ZSB0aGUgdmVyc2lvbiBzbyBpdCBpc1xcbitcXHQgKiBuZXZlciBsZWZ0IGRhbmdsaW5nIGFzIDAgZm9yIGZ1dHVyZSBjb25zdW1lcnMuXFxuK1xcdCAqL1xcbitcXHRidC1cXHUwMDNldmVyc2lvbiA9IDI7XFxuIFxcbiBcXHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjA5LjAyNTUwNDMyMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzM5MDg3NTk4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9JT19UUkFDRVwiLFxuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2Jsa19hZGRfdHJhY2VcIixcbiAgICBcImJsa190cmFjZV9zZXR1cF9xdWV1ZVwiLFxuICAgIFwicmVjb3JkX2Jsa3RyYWNlX2V2ZW50MlwiLFxuICAgIFwic3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgdHJhY2Ugc3Vic3lzdGVtIChrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyksIHNwZWNpZmljYWxseSBpbiBfX2Jsa19hZGRfdHJhY2UoKSBhbmQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCkuIEl0IGVuc3VyZXMgdGhhdCB0aGUgZnRyYWNlIHJpbmcgYnVmZmVyIHVuY29uZGl0aW9uYWxseSB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMikgbGF5b3V0LCBlbGltaW5hdGluZyBwb3RlbnRpYWwgYnVmZmVyIG1pc21hdGNoZXMgYW5kIG91dC1vZi1ib3VuZHMgcmVhZHMsIGFuZCBpbml0aWFsaXplcyBidC1cXHUwMDNldmVyc2lvbiBmb3Igc3lzZnMtY29uZmlndXJlZCBxdWV1ZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBibG9jayBsYXllciB0cmFjaW5nIGxvZ2ljIGFjY2Vzc2libGUgdmlhIHN5c2ZzIGFuZCBibG9jayBJL08gaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxZjc4ODdmZmZhYWU2NWIxN2YxNjExYTllMGFkZTg2YTFhOWQ5YWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA1OjUxOjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xuaW5kZXggOGNkMjUyMGI0Yzk5ZS4uYWUwMTA5NjljMTQ0MyAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jXG4rKysgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xuQEAgLTM4NSw2NiArMzg1LDI2IEBAIHN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXG4gXHRpZiAoYmxrX3RyYWNlcikge1xuIFx0XHRidWZmZXIgPSBibGtfdHItXHUwMDNlYXJyYXlfYnVmZmVyLmJ1ZmZlcjtcbiBcdFx0dHJhY2VfY3R4ID0gdHJhY2luZ19nZW5fY3R4X2ZsYWdzKDApO1xuLVx0XHRzd2l0Y2ggKGJ0LVx1MDAzZXZlcnNpb24pIHtcbi1cdFx0Y2FzZSAxOlxuLVx0XHRcdHRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAyOlxuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qXG4tXHRcdFx0ICogZnRyYWNlIGFsd2F5cyB1c2VzIHYyIChibGtfaW9fdHJhY2UyKSBmb3JtYXQuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBGb3Igc3lzZnMtZW5hYmxlZCB0cmFjaW5nIHBhdGggKGVuYWJsZWQgdmlhXG4tXHRcdFx0ICogL3N5cy9ibG9jay9ERVYvdHJhY2UvZW5hYmxlKSwgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKClcbi1cdFx0XHQgKiBuZXZlciBpbml0aWFsaXplcyBidC1cdTAwM2V2ZXJzaW9uLCBsZWF2aW5nIGl0IDAgZnJvbVxuLVx0XHRcdCAqIGt6YWxsb2MoKS4gV2UgbXVzdCBoYW5kbGUgdmVyc2lvbj09MCBzYWZlbHkgaGVyZS5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIEZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IHRvIGVuc3VyZSB3ZSBuZXZlciBoaXQgdGhlXG4tXHRcdFx0ICogb2xkIGJ1ZyB3aGVyZSBkZWZhdWx0IHNldCB0cmFjZV9sZW49MCwgY2F1c2luZ1xuLVx0XHRcdCAqIGJ1ZmZlciB1bmRlcmZsb3cgYW5kIG1lbW9yeSBjb3JydXB0aW9uLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogQWx3YXlzIHVzZSB2MiBmb3JtYXQgZm9yIGZ0cmFjZSBhbmQgbm9ybWFsaXplXG4tXHRcdFx0ICogYnQtXHUwMDNldmVyc2lvbiB0byAyIHdoZW4gdW5pbml0aWFsaXplZC5cbi1cdFx0XHQgKi9cbi1cdFx0XHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpO1xuLVx0XHRcdGlmIChidC1cdTAwM2V2ZXJzaW9uID09IDApXG4tXHRcdFx0XHRidC1cdTAwM2V2ZXJzaW9uID0gMjtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHR0cmFjZV9sZW4gKz0gcGR1X2xlbiArIGNnaWRfbGVuO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgZnRyYWNlIHJpbmcgYnVmZmVyIGFsd2F5cyB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMilcbitcdFx0ICogZm9ybWF0OyB0aGUgZnRyYWNlIHJlYWRlcnMgcGFyc2Ugb25seSB0aGF0LiBidC1cdTAwM2V2ZXJzaW9uXG4rXHRcdCAqIGRlc2NyaWJlcyBqdXN0IHRoZSByZWxheS9jbGFzc2ljIGJsa3RyYWNlIHJlY29yZCBmb3JtYXQuXG4rXHRcdCAqIFJlY29yZGluZyBhIHYxLXNpemVkIGV2ZW50IGhlcmUgd291bGQgc2hpZnQgcGR1X3N0YXJ0KCkgMTZcbitcdFx0ICogYnl0ZXMgcGFzdCB0aGUgUERVIGFuZCBtYWtlIGJsa19sb2dfcmVtYXAoKSByZWFkIHBhc3QgdGhlXG4rXHRcdCAqIGV2ZW50IChhIHVzZS1hZnRlci1mcmVlIG9uIGNvbmN1cnJlbnQgYnVmZmVyIHJlc2l6ZSksIGFuZCB2MVxuK1x0XHQgKiBjYW5ub3QgcmVwcmVzZW50IHRoZSBuZXdlciA2NC1iaXQgem9uZSBhY3Rpb25zIGFueXdheS5cbitcdFx0ICovXG4rXHRcdHRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgKyBwZHVfbGVuICsgY2dpZF9sZW47XG4gXHRcdGV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSyxcbiBcdFx0XHRcdFx0XHQgIHRyYWNlX2xlbiwgdHJhY2VfY3R4KTtcbiBcdFx0aWYgKCFldmVudClcbiBcdFx0XHRyZXR1cm47XG4gXG4gXHRcdHRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3VycmVudCk7XG4tXHRcdHN3aXRjaCAoYnQtXHUwMDNldmVyc2lvbikge1xuLVx0XHRjYXNlIDE6XG4tXHRcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLFxuLVx0XHRcdFx0XHQgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcbi1cdFx0XHRcdFx0ICAgICAgd2hhdCwgYnQtXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXG4tXHRcdFx0XHRcdCAgICAgIHBkdV9kYXRhLCBwZHVfbGVuKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAyOlxuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVXNlIHYyIHJlY29yZGluZyBmdW5jdGlvbiAocmVjb3JkX2Jsa3RyYWNlX2V2ZW50Milcbi1cdFx0XHQgKiB3aGljaCB3cml0ZXMgYmxrX2lvX3RyYWNlMiBzdHJ1Y3R1cmUgd2l0aCBjb3JyZWN0XG4tXHRcdFx0ICogZmllbGQgbGF5b3V0OlxuLVx0XHRcdCAqICAgLSAzMi1iaXQgcGlkIGF0IG9mZnNldCAyOFxuLVx0XHRcdCAqICAgLSA2NC1iaXQgYWN0aW9uIGF0IG9mZnNldCAzMlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgaGFuZGxlcyB2ZXJzaW9uPT0wIGNhc2Vcbi1cdFx0XHQgKiAoZnJvbSBzeXNmcyBwYXRoKSwgZW5zdXJpbmcgd2UgYWx3YXlzIHVzZSBjb3JyZWN0XG4tXHRcdFx0ICogdjIgcmVjb3JkaW5nIGZ1bmN0aW9uIHRvIG1hdGNoIHRoZSB2MiBidWZmZXJcbi1cdFx0XHQgKiBhbGxvY2F0ZWQgYWJvdmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcbi1cdFx0XHRcdFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxuLVx0XHRcdFx0XHQgICAgICAgd2hhdCwgYnQtXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXG4tXHRcdFx0XHRcdCAgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbitcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcbitcdFx0XHRcdCAgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcbitcdFx0XHRcdCAgICAgICB3aGF0LCBidC1cdTAwM2VkZXYsIGVycm9yLCBjZ2lkLCBjZ2lkX2xlbixcbitcdFx0XHRcdCAgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7XG4gXG4gXHRcdHRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJsa190ciwgYnVmZmVyLCBldmVudCwgdHJhY2VfY3R4KTtcbiBcdFx0cmV0dXJuO1xuQEAgLTE5MTMsNiArMTg3MywxMiBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbiBcbiBcdGJ0LVx1MDAzZWRldiA9IGJkZXYtXHUwMDNlYmRfZGV2O1xuIFx0YnQtXHUwMDNlYWN0X21hc2sgPSAodTE2KS0xO1xuK1x0LypcbitcdCAqIFRoaXMgc3lzZnMtZW5hYmxlZCBwYXRoIGZlZWRzIHRoZSBmdHJhY2UgYmxrIHRyYWNlciwgd2hpY2ggYWx3YXlzXG4rXHQgKiB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMikgZm9ybWF0LiBJbml0aWFsaXplIHRoZSB2ZXJzaW9uIHNvIGl0IGlzXG4rXHQgKiBuZXZlciBsZWZ0IGRhbmdsaW5nIGFzIDAgZm9yIGZ1dHVyZSBjb25zdW1lcnMuXG4rXHQgKi9cbitcdGJ0LVx1MDAzZXZlcnNpb24gPSAyO1xuIFxuIFx0YmxrX3RyYWNlX3NldHVwX2xiYShidCwgYmRldik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MTowOS4wMjU1MDU3NzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDU0MDU0MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgYmxrdHJhY2UqKlxuXG5Pa2F5LCBzbyB0aGV5IHdhbnQgbWUgdG8gcmV2aWV3IHRoaXMga2VybmVsIHBhdGNoIHJlbGF0ZWQgdG8gYGJsa3RyYWNlYC4gTGV0J3MgZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ3JhYiB0aGUgZGlmZiBhbmQgc3RhcnQgcG9raW5nIGFyb3VuZCB0aGUgY29kZS4gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGBncmVwcGVyYCwgYHJlYWQtZmlsZWAsIGFuZCBhIGZldyBvdGhlciB0b29scyB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24uIFRoZSBwYXRjaCBzdW1tYXJ5IGluZGljYXRlcyBjaGFuZ2VzIGluIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5J3JlIG1vZGlmeWluZyB0aGUgYF9fYmxrX2FkZF90cmFjZWAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSB0aGUgcmVtb3ZhbCBvZiBhIGBzd2l0Y2hgIHN0YXRlbWVudCBiYXNlZCBvbiBgYnQtXHUwMDNldmVyc2lvbmAgd2hlbiBgYmxrX3RyYWNlcmAgaXMgdHJ1ZSDigJMgdGhpcyBpbXBsaWVzIGEgZnRyYWNlIHJpbmcgYnVmZmVyIHBhdGggaXMgaW4gdXNlLiBUaGV5J3JlIG9wdGluZyB0byB1bmNvbmRpdGlvbmFsbHkgdXNlIGBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpYCBhbmQgYHJlY29yZF9ibGt0cmFjZV9ldmVudDIoKWAgaW4gdGhpcyBzcGVjaWZpYyBjb25kaXRpb24uIEF0IHRoZSBzYW1lIHRpbWUsIHRoZSBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCBmdW5jdGlvbiBoYXMgYmVlbiBhbHRlcmVkIHRvIGluaXRpYWxpemUgYGJ0LVx1MDAzZXZlcnNpb24gPSAyYC5cblxuTXkgZmlyc3QgaW5jbGluYXRpb24gaXMgdG8ganVtcCBpbnRvIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AgYW5kIGltbWVkaWF0ZWx5IGxvb2sgYXJvdW5kIHRoZSBsaW5lcyBtZW50aW9uZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gV2hhdCB3YXMgdGhlIHByZXZpb3VzIGJlaGF2aW9yPyBXaHkgYXJlIHRoZXkgcmVtb3ZpbmcgdGhlIGBzd2l0Y2hgPyBXaGF0J3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjb25kaXRpb25hbCBiZWhhdmlvciBiYXNlZCBvbiBgYmxrX3RyYWNlcmA/IEFyZSB0aGVyZSBvdGhlciBmaWxlcyBvciBmdW5jdGlvbiBjYWxscyBhZmZlY3RlZD8gQW5kIG1vc3QgaW1wb3J0YW50bHksIGlzIHRoaXMgY2hhbmdlIHNhZmUsIGFuZCBkb2VzIGl0IGFsaWduIHdpdGggdGhlIHByb2plY3QncyBsb25nLXRlcm0gZGVzaWduIGdvYWxzPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGlzc3Vlcywgb3IgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTM1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6MTQuNDc5NTYyMjMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3MDpcXHRcXHQvKiBEcm9wIHRyYWNlIGV2ZW50cyBmb3Igem9uZSBvcGVyYXRpb25zIHdpdGggYmxrdHJhY2UgdjEgKi9cXG4gMzcxOlxcdFxcdGlmIChidC1cXHUwMDNldmVyc2lvbiA9PSAxIFxcdTAwMjZcXHUwMDI2ICh3aGF0IFxcdTAwM2VcXHUwMDNlIEJMS19UQ19TSElGVCkgXFx1MDAzZSBCTEtfVENfRU5EX1YxKSB7XFxuIDM3MjpcXHRcXHRcXHRwcl9kZWJ1Z19yYXRlbGltaXRlZChcXFwiYmxrdHJhY2UgdjEgY2Fubm90IHRyYWNlIHpvbmUgb3BlcmF0aW9uIDB4JWxseFxcXFxuXFxcIixcXG4gMzczOlxcdFxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nIGxvbmcpd2hhdCk7XFxuIDM3NDpcXHRcXHRcXHRyZXR1cm47XFxuIDM3NTpcXHRcXHR9XFxuIDM3NjpcXHRcXG4gMzc3OlxcdFxcdGlmIChjZ2lkKVxcbiAzNzg6XFx0XFx0XFx0d2hhdCB8PSBfX0JMS19UQV9DR1JPVVA7XFxuIDM3OTpcXHRcXG4gMzgwOlxcdFxcdHBpZCA9IHRzay1cXHUwMDNlcGlkO1xcbiAzODE6XFx0XFx0aWYgKGFjdF9sb2dfY2hlY2soYnQsIHdoYXQsIHNlY3RvciwgcGlkKSlcXG4gMzgyOlxcdFxcdFxcdHJldHVybjtcXG4gMzgzOlxcdFxcdGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XFxuIDM4NDpcXHRcXG4gMzg1OlxcdFxcdGlmIChibGtfdHJhY2VyKSB7XFxuIDM4NjpcXHRcXHRcXHRidWZmZXIgPSBibGtfdHItXFx1MDAzZWFycmF5X2J1ZmZlci5idWZmZXI7XFxuIDM4NzpcXHRcXHRcXHR0cmFjZV9jdHggPSB0cmFjaW5nX2dlbl9jdHhfZmxhZ3MoMCk7XFxuIDM4ODpcXHRcXHRcXHQvKlxcbiAzODk6XFx0XFx0XFx0ICogVGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciBhbHdheXMgdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpXFxuIDM5MDpcXHRcXHRcXHQgKiBmb3JtYXQ7IHRoZSBmdHJhY2UgcmVhZGVycyBwYXJzZSBvbmx5IHRoYXQuIGJ0LVxcdTAwM2V2ZXJzaW9uXFxuIDM5MTpcXHRcXHRcXHQgKiBkZXNjcmliZXMganVzdCB0aGUgcmVsYXkvY2xhc3NpYyBibGt0cmFjZSByZWNvcmQgZm9ybWF0LlxcbiAzOTI6XFx0XFx0XFx0ICogUmVjb3JkaW5nIGEgdjEtc2l6ZWQgZXZlbnQgaGVyZSB3b3VsZCBzaGlmdCBwZHVfc3RhcnQoKSAxNlxcbiAzOTM6XFx0XFx0XFx0ICogYnl0ZXMgcGFzdCB0aGUgUERVIGFuZCBtYWtlIGJsa19sb2dfcmVtYXAoKSByZWFkIHBhc3QgdGhlXFxuIDM5NDpcXHRcXHRcXHQgKiBldmVudCAoYSB1c2UtYWZ0ZXItZnJlZSBvbiBjb25jdXJyZW50IGJ1ZmZlciByZXNpemUpLCBhbmQgdjFcXG4gMzk1OlxcdFxcdFxcdCAqIGNhbm5vdCByZXByZXNlbnQgdGhlIG5ld2VyIDY0LWJpdCB6b25lIGFjdGlvbnMgYW55d2F5LlxcbiAzOTY6XFx0XFx0XFx0ICovXFxuIDM5NzpcXHRcXHRcXHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuO1xcbiAzOTg6XFx0XFx0XFx0ZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQkxLLFxcbiAzOTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICB0cmFjZV9sZW4sIHRyYWNlX2N0eCk7XFxuIDQwMDpcXHRcXHRcXHRpZiAoIWV2ZW50KVxcbiA0MDE6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA0MDI6XFx0XFxuIDQwMzpcXHRcXHRcXHR0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpO1xcbiA0MDQ6XFx0XFx0XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcXG4gNDA1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcXG4gNDA2OlxcdFxcdFxcdFxcdFxcdCAgICAgICB3aGF0LCBidC1cXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXFxuIDQwNzpcXHRcXHRcXHRcXHRcXHQgICAgICAgcGR1X2RhdGEsIHBkdV9sZW4pO1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRcXHRcXHR0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChibGtfdHIsIGJ1ZmZlciwgZXZlbnQsIHRyYWNlX2N0eCk7XFxuIDQxMDpcXHRcXHRcXHRyZXR1cm47XFxuIDQxMTpcXHRcXHR9XFxuIDQxMjpcXHRcXG4gNDEzOlxcdFxcdGlmICh1bmxpa2VseSh0c2stXFx1MDAzZWJ0cmFjZV9zZXEgIT0gYmxrdHJhY2Vfc2VxKSlcXG4gNDE0OlxcdFxcdFxcdHRyYWNlX25vdGVfdHNrKHRzayk7XFxuIDQxNTpcXHRcXG4gNDE2OlxcdFxcdC8qXFxuIDQxNzpcXHRcXHQgKiBBIHdvcmQgYWJvdXQgdGhlIGxvY2tpbmcgaGVyZSAtIHdlIGRpc2FibGUgaW50ZXJydXB0cyB0byByZXNlcnZlXFxuIDQxODpcXHRcXHQgKiBzb21lIHNwYWNlIGluIHRoZSByZWxheSBwZXItY3B1IGJ1ZmZlciwgdG8gcHJldmVudCBhbiBpcnFcXG4gNDE5OlxcdFxcdCAqIGZyb20gY29taW5nIGluIGFuZCBzdGVwcGluZyBvbiBvdXIgdG9lcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6MTQuNDgwMDE1MjIzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjczNTE0ODk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipUcmFjaW5nIEJsb2NrIERldmljZSBRdWV1ZSBTZXR1cCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgYmxvY2sgdHJhY2luZyBpcyBzZXQgdXAuIEZpcnN0LCBJJ20gZ29pbmcgdG8gZGl2ZSBpbnRvIHRoZSBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCBmdW5jdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGl0J3MgZG9pbmcg4oCTIHRoZSBpbml0aWFsaXphdGlvbiwgdGhlIGNvbm5lY3Rpb25zIGl0J3MgbWFraW5nLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgdG91Y2hpbmcuIFRoZW4sIGVxdWFsbHkgaW1wb3J0YW50bHksIEkgbmVlZCB0byB0cmFjZSAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIEkgbmVlZCB0aGUgY2FsbCBncmFwaCB0byBzZWUgaG93IHRoaXMgc2V0dXAgcHJvY2VzcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgYmxvY2sgSS9PIHN0YWNrLiBBcmUgdGhlcmUgc3BlY2lmaWMgcGF0aHMgb3Igc2NlbmFyaW9zIHRoYXQgdHJpZ2dlciBpdD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHBvaW50cyBvZiBjb25jZXJuP1xuXG5GaW5hbGx5LCBsZXQncyBub3QgZm9yZ2V0IHRoZSBLY29uZmlnIG9wdGlvbnMuIEJsb2NrIHRyYWNpbmcgaXMgb2Z0ZW4gY29uZmlndXJhYmxlLCBzbyBJIG5lZWQgdG8gY2hlY2sgd2hpY2ggb3B0aW9ucyBjb250cm9sIHdoZXRoZXIgdGhpcyBjb2RlIGV2ZW4gKmdldHMqIGNvbXBpbGVkIGFuZCBsaW5rZWQgaW4uIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBvbiB0aG9zZSBjb25maWcgc2V0dGluZ3Mgd2lsbCBiZSBjcml0aWNhbCBmb3IgZGVidWdnaW5nIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0cmFjaW5nLiBUaGlzIGlzIGFsbCBhYm91dCBnZXR0aW5nIGEgaG9saXN0aWMgdmlldyBvZiB0aGUgYGJsa190cmFjZV9zZXR1cF9xdWV1ZWAgZnVuY3Rpb24gYW5kIGl0cyBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM0NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6MTcuMjE1MTY2NDE4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NjU6XFx0XFxuMTg2NjpcXHRcXHRidCA9IGt6YWxsb2Nfb2JqKCpidCk7XFxuMTg2NzpcXHRcXHRpZiAoIWJ0KVxcbjE4Njg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTg2OTpcXHRcXG4xODcwOlxcdFxcdGJ0LVxcdTAwM2Vtc2dfZGF0YSA9IF9fYWxsb2NfcGVyY3B1KEJMS19UTl9NQVhfTVNHLCBfX2FsaWdub2ZfXyhjaGFyKSk7XFxuMTg3MTpcXHRcXHRpZiAoIWJ0LVxcdTAwM2Vtc2dfZGF0YSlcXG4xODcyOlxcdFxcdFxcdGdvdG8gZnJlZV9idDtcXG4xODczOlxcdFxcbjE4NzQ6XFx0XFx0YnQtXFx1MDAzZWRldiA9IGJkZXYtXFx1MDAzZWJkX2RldjtcXG4xODc1OlxcdFxcdGJ0LVxcdTAwM2VhY3RfbWFzayA9ICh1MTYpLTE7XFxuMTg3NjpcXHRcXHQvKlxcbjE4Nzc6XFx0XFx0ICogVGhpcyBzeXNmcy1lbmFibGVkIHBhdGggZmVlZHMgdGhlIGZ0cmFjZSBibGsgdHJhY2VyLCB3aGljaCBhbHdheXNcXG4xODc4OlxcdFxcdCAqIHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKSBmb3JtYXQuIEluaXRpYWxpemUgdGhlIHZlcnNpb24gc28gaXQgaXNcXG4xODc5OlxcdFxcdCAqIG5ldmVyIGxlZnQgZGFuZ2xpbmcgYXMgMCBmb3IgZnV0dXJlIGNvbnN1bWVycy5cXG4xODgwOlxcdFxcdCAqL1xcbjE4ODE6XFx0XFx0YnQtXFx1MDAzZXZlcnNpb24gPSAyO1xcbjE4ODI6XFx0XFxuMTg4MzpcXHRcXHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcXG4xODg0OlxcdFxcbjE4ODU6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHEtXFx1MDAzZWJsa190cmFjZSwgYnQpO1xcbjE4ODY6XFx0XFx0Z2V0X3Byb2JlX3JlZigpO1xcbjE4ODc6XFx0XFx0cmV0dXJuIDA7XFxuMTg4ODpcXHRcXG4xODg5OlxcdGZyZWVfYnQ6XFxuMTg5MDpcXHRcXHRibGtfdHJhY2VfZnJlZShxLCBidCk7XFxuMTg5MTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE4OTI6XFx0fVxcbjE4OTM6XFx0XFxuMTg5NDpcXHQvKlxcbjE4OTU6XFx0ICogc3lzZnMgaW50ZXJmYWNlIHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIHRyYWNpbmdcXG4xODk2OlxcdCAqL1xcbjE4OTc6XFx0XFxuMTg5ODpcXHRzdGF0aWMgc3NpemVfdCBzeXNmc19ibGtfdHJhY2VfYXR0cl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4xODk5OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4xOTAwOlxcdFxcdFxcdFxcdFxcdFxcdCBjaGFyICpidWYpO1xcbjE5MDE6XFx0c3RhdGljIHNzaXplX3Qgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbjE5MDI6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4xOTAzOlxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpO1xcbjE5MDQ6XFx0I2RlZmluZSBCTEtfVFJBQ0VfREVWSUNFX0FUVFIoX25hbWUpIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6MTcuMjE1Mjc1MDI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU4MjY0MzcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVHJhY2Vwb2ludCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgcmVsYXRlZCB0byBgYmxrdHJhY2VgIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBidWlsZCBzeXN0ZW0sIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBhcmUgbGlrZWx5IGRlZmluZWQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBidWlsZCBmbGFncyBvciBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBtb2R1bGUuIEkga25vdyB0aGF0IEtjb25maWcgaXMgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIHNvIEknbGwgZ28gc3RyYWlnaHQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMzQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjE4Ljc5NzkyMTA3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUyMjQxMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrdHJhY2UuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjE4Ljg0NTQ1MDYxMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzYwMTg2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGZpbGVzOlxuXG4qKkNoZWNraW5nIFJlbGV2YW50IENvbmZpZ3VyYXRpb24gYW5kIEJ1aWxkIEZpbGVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRyYWNpbmcgaXMgY29uZmlndXJlZCBhbmQgYnVpbHQsIHBhcnRpY3VsYXJseSBhcyBpdCByZWxhdGVzIHRvIGJsb2NrIGRldmljZSBhY3Rpdml0eS4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBrZXJuZWwvdHJhY2UvTWFrZWZpbGVgLiBUaGF0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gYmVnaW4gZm9yIGFueSBidWlsZC1yZWxhdGVkIGRldGFpbHMgaW4gdGhlIHRyYWNpbmcgc3Vic3lzdGVtLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0cmFjaW5nIG1vZHVsZXMgYW5kIG9wdGlvbnMgYXJlIGNvbXBpbGVkLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8ga25vdyBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgZXhwb3NlZCB0byB0aGUgdXNlciwgdGhpcyBpcyB3aGVyZSBga2VybmVsL3RyYWNlL0tjb25maWdgIGNvbWVzIGluIHRvIHBsYXkuIEknbGwgYWxzbyBjaGVjayBgYmxvY2svS2NvbmZpZ2AgdG8gY3Jvc3MgcmVmZXJlbmNlIGFueSBvcHRpb25zIHRoYXQgaW50ZXJhY3Qgb3IgbWF5IG92ZXJsYXAgd2l0aCB0aGUgYmxvY2sgZGV2aWNlIHRyYWNpbmcgb3B0aW9ucyB0byBzZWUgaWYgYW55IHNldHRpbmdzIGFyZSBzaGFyZWQuIEtub3dpbmcgdGhpcywgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhlIGJsb2NrIHRyYWNpbmcgZmVhdHVyZXMgYXJlIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MgYW5kIHVzZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDI3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6MjAuNzIxNDcxNzAxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc3Mzg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGt0cmFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlPTkxPW9iai0kKENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HKSArPSB0cmFjZV9icmFuY2gub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo5MjpvYmotJChDT05GSUdfQkxLX0RFVl9JT19UUkFDRSkgKz0gYmxrdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS05My1vYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSArPSBmZ3JhcGgub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT05ND1pZmVxICgkKENPTkZJR19CTE9DSykseSlcXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6OTU6b2JqLSQoQ09ORklHX0VWRU5UX1RSQUNJTkcpICs9IGJsa3RyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtOTYtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6MjAuNzY2MjQ4N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDUxMTEyODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJsb2NrIERldmljZSBJL08gVHJhY2luZyBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYmxvY2sgZGV2aWNlIEkvTyB0cmFjaW5nLiBNeSBmaXJzdCBwb3J0IG9mIGNhbGwsIG5hdHVyYWxseSwgaXMgdGhlIG9idmlvdXM6IEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBhbmQgYGJsb2NrL0tjb25maWdgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nLCBwcm9iYWJseSBhIGBjb25maWdgIG9wdGlvbiwgdGhhdCBkaXJlY3RseSByZWxhdGVzIHRvIGBCTEtfREVWX0lPX1RSQUNFYC4gVGhhdCdzIHRoZSBrZXl3b3JkIEknbSBsb29raW5nIGZvciAtIGBCTEtfREVWX0lPX1RSQUNFYC4gSXQgd2lsbCBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQga2VybmVsIGZlYXR1cmVzIGFuZCBob3cgSSBjYW4gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHRyYWNpbmcuIFRoaXMgaXMgYWxsIGFib3V0IGNvbmZpcm1pbmcgdGhlIHByZXNlbmNlIGFuZCBsb2NhdGlvbiBvZiB0aGUgbmVjZXNzYXJ5IHNldHRpbmdzLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgdGhlbS4gVGltZSB0byBkaXZlIGludG8gdGhvc2UgY29uZmlndXJhdGlvbiBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgzNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjIyLjgxNzM2NTI1N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4NzcxMDQxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9JT19UUkFDRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz03MTc9Y29uZmlnIEJSQU5DSF9UUkFDRVJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTczMC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo3MzE6Y29uZmlnIEJMS19ERVZfSU9fVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03MzItXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdHJhY2luZyBibG9jayBJTyBhY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MToyNS4wMDUwNzk5MjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU1MTMzMDE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBmaWxlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDczMS4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSBhIHBhcnRpY3VsYXIgdHJhY2luZyBmZWF0dXJlIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEknbSBpbnRlcmVzdGVkIGluIGlzIGRlZmluZWQuIEl0J3MgbGlrZWx5IGEgcmVsYXRpdmVseSBjZW50cmFsIG9yIGltcG9ydGFudCBhc3BlY3Qgb2YgdGhlIHRyYWNpbmcgc3Vic3lzdGVtIGlmIGl0J3MgcGxhY2VkIHRoZXJlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBlbmFibGVkLCBkaXNhYmxlZCwgaXRzIGRlcGVuZGVuY2llcywgYW5kIHdoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGl0cyBkZXNpZ24uIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE4NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjI2LjU1NjQxMzA1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzI1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzI1OlxcdFxcdCAgaGlzdG9ncmFtIG9mIHRoZSBjYWxsZXJzLCBidXQgYWN0dWFsbHkgcGxhY2VzIHRoZSBjYWxsaW5nXFxuIDcyNjpcXHRcXHQgIGV2ZW50cyBpbnRvIGEgcnVubmluZyB0cmFjZSBidWZmZXIgdG8gc2VlIHdoZW4gYW5kIHdoZXJlIHRoZVxcbiA3Mjc6XFx0XFx0ICBldmVudHMgaGFwcGVuZWQsIGFzIHdlbGwgYXMgdGhlaXIgcmVzdWx0cy5cXG4gNzI4OlxcdFxcbiA3Mjk6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuIDczMDpcXHRcXG4gNzMxOlxcdGNvbmZpZyBCTEtfREVWX0lPX1RSQUNFXFxuIDczMjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciB0cmFjaW5nIGJsb2NrIElPIGFjdGlvbnNcXFwiXFxuIDczMzpcXHRcXHRkZXBlbmRzIG9uIFNZU0ZTXFxuIDczNDpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLXFxuIDczNTpcXHRcXHRzZWxlY3QgUkVMQVlcXG4gNzM2OlxcdFxcdHNlbGVjdCBERUJVR19GU1xcbiA3Mzc6XFx0XFx0c2VsZWN0IFRSQUNFUE9JTlRTXFxuIDczODpcXHRcXHRzZWxlY3QgR0VORVJJQ19UUkFDRVJcXG4gNzM5OlxcdFxcdHNlbGVjdCBTVEFDS1RSQUNFXFxuIDc0MDpcXHRcXHRoZWxwXFxuIDc0MTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB0cmFjZSB0aGUgYmxvY2sgbGF5ZXIgYWN0aW9uc1xcbiA3NDI6XFx0XFx0ICBvbiBhIGdpdmVuIHF1ZXVlLiBUcmFjaW5nIGFsbG93cyB5b3UgdG8gc2VlIGFueSB0cmFmZmljIGhhcHBlbmluZ1xcbiA3NDM6XFx0XFx0ICBvbiBhIGJsb2NrIGRldmljZSBxdWV1ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gKGFuZCB0aGUgdXNlcnNwYWNlXFxuIDc0NDpcXHRcXHQgIHN1cHBvcnQgdG9vbHMgbmVlZGVkKSwgZmV0Y2ggdGhlIGJsa3RyYWNlIHRvb2xzIGZyb206XFxuIDc0NTpcXHRcXG4gNzQ2OlxcdFxcdCAgZ2l0Oi8vZ2l0Lmtlcm5lbC5kay9ibGt0cmFjZS5naXRcXG4gNzQ3OlxcdFxcbiA3NDg6XFx0XFx0ICBUcmFjaW5nIGFsc28gaXMgcG9zc2libGUgdXNpbmcgdGhlIGZ0cmFjZSBpbnRlcmZhY2UsIGUuZy46XFxuIDc0OTpcXHRcXG4gNzUwOlxcdFxcdCAgICBlY2hvIDEgXFx1MDAzZSAvc3lzL2Jsb2NrL3NkYS9zZGExL3RyYWNlL2VuYWJsZVxcbiA3NTE6XFx0XFx0ICAgIGVjaG8gYmxrIFxcdTAwM2UgL3N5cy9rZXJuZWwvdHJhY2luZy9jdXJyZW50X3RyYWNlclxcbiA3NTI6XFx0XFx0ICAgIGNhdCAvc3lzL2tlcm5lbC90cmFjaW5nL3RyYWNlX3BpcGVcXG4gNzUzOlxcdFxcbiA3NTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MToyNi41NTY1MTU4NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc0ODc2NDA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzOiBibGt0cmFjZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gd2hldGhlciB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZnV6emluZyBjYW1wYWlnbi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHJlYWNoYWJpbGl0eS4gYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYCBpcyB0aGUgaGVhcnQgb2YgdGhlIGJsb2NrIGxheWVyIHRyYWNpbmcsIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnQuIEl0IGxvb2tzIGxpa2Ugd2UgY2FuIHRyaWdnZXIgaXQgdGhyb3VnaCBzeXNmcyBlbnRyaWVzIHVuZGVyIGAvc3lzL2Jsb2NrLy4uLi90cmFjZS8uLi5gLCBzcGVjaWZpYyBpb2N0bHMgbGlrZSBgQkxLVFJBQ0VTRVRVUGAsIGBCTEtUUkFDRVNUQVJUYCwgZXRjLiwgb3IgZXZlbiB0aHJvdWdoIHRoZSBmdHJhY2UgYGJsa2AgdHJhY2VyLiBFeGNlbGxlbnQsIG11bHRpcGxlIGVudHJ5IHBvaW50cyBlbmhhbmNlIG91ciBhdHRhY2sgc3VyZmFjZS4gYF9fYmxrX2FkZF90cmFjZSgpYCBpcyBhIGtleSBmdW5jdGlvbiwgZ2V0dGluZyBjYWxsZWQgZHVyaW5nIElPLCBhbmQgYGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpYCBnZXRzIGNhbGxlZCB3aGVuIGVuYWJsaW5nIHRyYWNlcyB2aWEgc3lzZnMuXG5cbk5vdywgdGhlIHNwZWNpZmljcyBvZiB0aGlzIHBhdGNoIGFyZSBpbXBvcnRhbnQuIEl0J3MgbW9kaWZ5aW5nIGBfX2Jsa19hZGRfdHJhY2VgIHRvIHVzZSB0aGUgdjIgZm9ybWF0IHVuY29uZGl0aW9uYWxseSwgZWZmZWN0aXZlbHkgcmVtb3ZpbmcgdGhlIGNvbmRpdGlvbmFsIHRoYXQgaGFuZGxlZCB2MSBvciB2MiBmb3JtYXRzLiBUaGlzIGlzIGNyaXRpY2FsLiBCeSBlbGltaW5hdGluZyB0aGUgc3dpdGNoIHN0YXRlbWVudCBiYXNlZCBvbiBgYnQtXHUwMDNldmVyc2lvbmAsIHRoZSBwYXRjaCBhdm9pZHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMsIHVzZS1hZnRlci1mcmVlLCBvciBidWZmZXIgY29ycnVwdGlvbiBpc3N1ZXMgaWYgYGJ0LVx1MDAzZXZlcnNpb25gIHdhcyBpbmNvcnJlY3RseSBzZXQgdG8gMSBvciAwLiBBbHNvLCBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCBleHBsaWNpdGx5IHNldHMgYGJ0LVx1MDAzZXZlcnNpb24gPSAyYCB3aGVuIHN5c2ZzIHRyYWNpbmcgaXMgZW5hYmxlZC4gVGhhdCBzaW1wbGlmaWVzIG91ciB0ZXN0IGNhc2VzIGFzIHdlIG9ubHkgbmVlZCB0byB0aGluayBhYm91dCB2Mi5cblxuR2l2ZW4gdGhvc2UgY2hhbmdlcywgdGhlcmUgYXJlIHNldmVyYWwgcG9zaXRpdmUgaW5kaWNhdG9ycy4gSXQncyB0b3VjaGluZyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbeKAlHRoZSBibG9jayBsYXllciBhbmQgdHJhY2luZy4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBsb2dpYyBjaGFuZ2VzLCB3aGljaCBhcmUgaWRlYWwgdGFyZ2V0cyBmb3IgZnV6emluZywgc3BlY2lmaWNhbGx5IGluIHRoZSB0cmFjZWFibGUgcmVjb3JkaW5nIGNvZGUgcGF0aCB3aXRoaW4gYF9fYmxrX2FkZF90cmFjZWAgYW5kIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgLiBBbmQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGl0IHNob3VsZCBiZSBlYXNpbHkgYWNjZXNzaWJsZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIFFFTVUgb3IgR0NFLCB1c2luZyBzdGFuZGFyZCBzeXprYWxsZXIgc3lzY2FsbHMsIHN5c2ZzLCBhbmQgaW9jdGxzLiBJJ20gZ29pbmcgdG8gc2V0IFdvcnRoRnV6emluZyA9IHRydWUuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24uIE9idmlvdXNseSwgYF9fYmxrX2FkZF90cmFjZWAgYW5kIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgIGFyZSBjZW50cmFsLiBUaGUgZnVuY3Rpb24gYHJlY29yZF9ibGt0cmFjZV9ldmVudDJgIGlzIGFsc28gaW1tZWRpYXRlbHkgcmVsZXZhbnQsIGFzIGl0IGlzIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gdXNlZC4gTm93IEkgc2hvdWxkIGNoZWNrIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIHB1YmxpYyBpbnRlcmZhY2VzIGZvciBgYmxrdHJhY2VgIHRvIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgzMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjMyLjMwNTI4MjI1MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzODg3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3RyYWNlX3NldHVwX3F1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTE4NDA9c3RhdGljIGludCBibGtfdHJhY2VfcmVtb3ZlX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg1OS0gKi9cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxODYwOnN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4NjEtXFx0XFx0XFx0XFx0IHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMDM3PXN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwNzMtXFx0XFx0aWYgKHZhbHVlKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwNzQ6XFx0XFx0XFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHEsIGJkZXYpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwNzUtXFx0XFx0ZWxzZVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjA4MS1cXHRpZiAoYnQgPT0gTlVMTCkge1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwODI6XFx0XFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHEsIGJkZXYpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwODMtXFx0XFx0YnQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHEtXFx1MDAzZWJsa190cmFjZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6MzIuMzUxNjc2NjAxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MDYyOTAzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgX19ibGtfYWRkX3RyYWNlYCBDYWxsZXJzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNhbGxpbmcgYF9fYmxrX2FkZF90cmFjZWAgd2l0aGluIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBsZXQncyB0cmFjZSB0aGUgY2FsbGVycy5cIiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBibGt0cmFjZSwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIHdpbGwgc2hlZCBsaWdodCBvbiBob3cgdHJhY2luZyBldmVudHMgYXJlIGFjdHVhbGx5IGluamVjdGVkIGludG8gdGhlIGJsa3RyYWNlIHN5c3RlbS4gSXTigJlzIHRoZSBlbnRyeSBwb2ludCwgc28gSSBleHBlY3QgYSB2YXJpZXR5IG9mIGluc3RydW1lbnRhdGlvbiBwb2ludHMgdG8gYmUgY2FsbGluZyBpdCB0byByZWNvcmQgYmxvY2sgZGV2aWNlIEkvTyBhY3Rpdml0eS4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyBnZW5lcmF0ZWQgYW5kIHRoZSBraW5kIG9mIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdGhhdCBpcyBnYXRoZXJlZCB3aGVuIHRoZSBjYWxsIGlzIG1hZGUuIEkgc3VzcGVjdCBpdCdsbCByYW5nZSBmcm9tIEkvTyBzY2hlZHVsZXJzLCBibG9jayBsYXllciBkcml2ZXJzLCBtYXliZSBldmVuIHNvbWUgaW50ZXJydXB0IGhhbmRsZXJzLCBkZXBlbmRpbmcgb24gaG93IGZpbmVseSBibGt0cmFjZSBpcyBpbnRlZ3JhdGVkLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgbWFrZSBkZWJ1Z2dpbmcgaXNzdWVzIGZhciBzaW1wbGVyLCBhbmQgaXQgd2lsbCBsZXQgbWUgb3B0aW1pemUgYmxrdHJhY2UgcGVyZm9ybWFuY2UgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgY2F1c2UgdG9vIG11Y2ggb3ZlcmhlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MTozNC44NTc5NjkyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5ODE1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19ibGtfYWRkX3RyYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTI5Nj1zdGF0aWMgY29uc3QgdTMyIGRkaXJfYWN0WzJdID0geyBCTEtfVENfQUNUKEJMS19UQ19SRUFEKSxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTMwOS0gKi9cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzozMTA6c3RhdGljIHZvaWQgX19ibGtfYWRkX3RyYWNlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcyxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zMTEtXFx0XFx0XFx0ICAgIGNvbnN0IGJsa19vcGZfdCBvcGYsIHU2NCB3aGF0LCBpbnQgZXJyb3IsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz05ODE9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJsa19zdGF0dXNfdCBlcnJvcixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk5Ny1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5OTg6XFx0X19ibGtfYWRkX3RyYWNlKGJ0LCBibGtfcnFfdHJhY2Vfc2VjdG9yKHJxKSwgbnJfYnl0ZXMsIHJxLVxcdTAwM2VjbWRfZmxhZ3MsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTk5LVxcdFxcdFxcdHdoYXQsIGJsa19zdGF0dXNfdG9fZXJybm8oZXJyb3IpLCAwLCBOVUxMLCBjZ2lkKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEwNjE9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwNzItXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTA3MzpcXHRfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IsIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwNzQtXFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYsIHdoYXQsIGVycm9yLCAwLCBOVUxMLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTEwOD1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3BsdWcodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExMTQtXFx0aWYgKGJ0KVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExMTU6XFx0XFx0X19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCAwLCBCTEtfVEFfUExVRywgMCwgMCwgTlVMTCwgMCk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTExNi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExMTk9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV91bnBsdWcodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExMzQtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTEzNTpcXHRcXHRfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIHdoYXQsIDAsIHNpemVvZihycGR1KSwgXFx1MDAyNnJwZHUsIDApO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExMzYtXFx0fVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTE0MD1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3pvbmVfcGx1Zyh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE0OC1cXHRpZiAoYnQgXFx1MDAyNlxcdTAwMjYgYnQtXFx1MDAzZXZlcnNpb24gXFx1MDAzZT0gMilcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMTQ5OlxcdFxcdF9fYmxrX2FkZF90cmFjZShidCwgc2VjdG9yLCBzZWN0b3JzIFxcdTAwM2NcXHUwMDNjIFNFQ1RPUl9TSElGVCwgMCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTUwLVxcdFxcdFxcdFxcdEJMS19UQV9aT05FX1BMVUcsIDAsIDAsIE5VTEwsIDApO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTE1Nj1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3pvbmVfdW5wbHVnKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTY0LVxcdGlmIChidCBcXHUwMDI2XFx1MDAyNiBidC1cXHUwMDNldmVyc2lvbiBcXHUwMDNlPSAyKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExNjU6XFx0XFx0X19ibGtfYWRkX3RyYWNlKGJ0LCBzZWN0b3IsIHNlY3RvcnMgXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZULCAwLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExNjYtXFx0XFx0XFx0XFx0QkxLX1RBX1pPTkVfVU5QTFVHLCAwLCAwLCBOVUxMLCAwKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExNzE9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9zcGxpdCh2b2lkICppZ25vcmUsIHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IHBkdSlcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExODAtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTE4MTpcXHRcXHRfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE4Mi1cXHRcXHRcXHRcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSwgYmlvLVxcdTAwM2ViaV9vcGYsIEJMS19UQV9TUExJVCxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExOTk9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fcmVtYXAodm9pZCAqaWdub3JlLCBzdHJ1Y3QgYmlvICpiaW8sIGRldl90IGRldixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyMTYtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTIxNzpcXHRfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IsIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyMTgtXFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYsIEJMS19UQV9SRU1BUCxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEyMzY9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9yZW1hcCh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgZGV2X3QgZGV2LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI1Mi1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMjUzOlxcdF9fYmxrX2FkZF90cmFjZShidCwgYmxrX3JxX3BvcyhycSksIGJsa19ycV9ieXRlcyhycSksXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI1NC1cXHRcXHRcXHRycS1cXHUwMDNlY21kX2ZsYWdzLCBCTEtfVEFfUkVNQVAsIDAsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMjY5PXZvaWQgYmxrX2FkZF9kcml2ZXJfZGF0YShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjc5LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEyODA6XFx0X19ibGtfYWRkX3RyYWNlKGJ0LCBibGtfcnFfdHJhY2Vfc2VjdG9yKHJxKSwgYmxrX3JxX2J5dGVzKHJxKSwgMCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjgxLVxcdFxcdFxcdFxcdEJMS19UQV9EUlZfREFUQSwgMCwgbGVuLCBkYXRhLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MTozNC45MDE5NTQ4NDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxOTg0OTA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byB0aGUgVHJhY2luZyoqXG5cbkFscmlnaHQsIEknbSBhbHJlYWR5IGluIHRoaXMgdHJhY2luZyBjb2RlLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIHN5c3RlbSBiZWhhdmlvci4gV2UndmUgbG9va2VkIGF0IHRoZSBtYWluIGNvbXBvbmVudHMsIGJ1dCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBnbyBkZWVwZXIuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaC4gQmVmb3JlIHdlIG1vdmUgb24sIEkgd2FudCB0byBjb25maXJtIHdlIGRpZG4ndCBtaXNzIHNvbWV0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgbWlzcyBhbnkgY3JpdGljYWwgZXZlbnRzLlxuXG5TbywgbGV0J3MgYWxzbyBjaGVjayBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmAuIEl0J3MgZXNzZW50aWFsIHdlIGNoZWNrIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGNvbmZpcm0gb3VyIHRyYWNpbmcgaXMgY29tcGxldGUuIElmIHRoYXQgZnVuY3Rpb24gY2FsbHMgb3RoZXIgdHJhY2luZyBmdW5jdGlvbnMsIHdlIG5lZWQgdG8gaW5zcGVjdCB0aG9zZSB0b28uIFRoaXMgaXMgdGhlIGtpbmQgb2YgbWV0aG9kaWNhbCBhcHByb2FjaCB0aGF0IHNlcGFyYXRlcyBhIGdvb2QgYW5hbHlzaXMgZnJvbSBhIHN1cGVyZmljaWFsIG9uZS4gV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJdOKAmXMgYWJvdXQgYmVpbmcgcHJlY2lzZTsgbGV04oCZcyBkaXZlIGluIGFuZCBzZWUgd2hhdCdzIGJlaW5nIHJlY29yZGVkIGluIGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyYC4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgbWlnaHQgYmUgaGlkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAwOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjM3LjYyMTgwNjIzNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwODIwNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY29yZF9ibGt0cmFjZV9ldmVudDJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9NjY9c3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHN0cnVjdCBibGtfaW9fdHJhY2UgKnQsIHBpZF90IHBpZCwgaW50IGNwdSxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkzLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk0OnN0YXRpYyB2b2lkIHJlY29yZF9ibGt0cmFjZV9ldmVudDIoc3RydWN0IGJsa19pb190cmFjZTIgKnQyLCBwaWRfdCBwaWQsIGludCBjcHUsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTUtXFx0XFx0XFx0XFx0ICAgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsIHU2NCB3aGF0LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTM2PXN0YXRpYyB2b2lkIHJlbGF5X2Jsa3RyYWNlX2V2ZW50MihzdHJ1Y3QgYmxrX3RyYWNlICpidCwgdW5zaWduZWQgbG9uZyBzZXF1ZW5jZSxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE1MS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNTI6XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50Mih0LCBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcywgd2hhdCwgYnQtXFx1MDAzZWRldiwgZXJyb3IsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTUzLVxcdFxcdFxcdCAgICAgICBjZ2lkLCBjZ2lkX2xlbiwgcGR1X2RhdGEsIHBkdV9sZW4pO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTczPXN0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgdTY0IGFjdGlvbixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5NC1cXHRcXHR0ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTk1OlxcdFxcdHJlY29yZF9ibGt0cmFjZV9ldmVudDIodCwgcGlkLCBjcHUsIDAsIDAsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk2LVxcdFxcdFxcdFxcdCAgICAgICBhY3Rpb24sIGJ0LVxcdTAwM2VkZXYsIDAsIGNnaWQsIGNnaWRfbGVuLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MzEwPXN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00MDMtXFx0XFx0dHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0MDQ6XFx0XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00MDUtXFx0XFx0XFx0XFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MTozNy43MjI2MzA2MjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA5MzEwNjkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIENhbmRpZGF0ZSBBc3Nlc3NtZW50OiBCbG9jayBUcmFjaW5nIFN1YnN5c3RlbSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIHBvaW50cyB0byBgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0VgIGJlaW5nIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gZmxhZyBoZXJlLCB3aGljaCwgb2YgY291cnNlLCBkZXBlbmRzIG9uIGBTWVNGU2AgYW5kIGBCTE9DS2AuIFdlJ3JlIHRhbGtpbmcgYmxvY2sgZGV2aWNlIEkvTyB0cmFjaW5nLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBUaGVuIHRoZXJlJ3MgYENPTkZJR19FVkVOVF9UUkFDSU5HYCwgd2hpY2ggYWxzbyBwbGF5cyBhIHJvbGUuIEdvb2QsIHdlIGhhdmUgdGhlIGRlcGVuZGVuY2llcyBtYXBwZWQuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgZGlyZWN0IGNvbm5lY3Rpb24uIEZyb20gdGhlIGBrZXJuZWwvdHJhY2UvTWFrZWZpbGVgLCB0aGUgbGluayB0byBgYmxrdHJhY2Uub2AgaXMgY29uZGl0aW9uZWQgb24gYENPTkZJR19CTEtfREVWX0lPX1RSQUNFYCBkaXJlY3RseSwgYW5kIHRoZXJlJ3MgYW4gYGlmZXFgIGNoZWNrIHdpdGggYENPTkZJR19CTE9DS2AsIHdoaWNoIGlzIHJlcXVpcmVkLiBTbywgKnllcyosIGBCTEtfREVWX0lPX1RSQUNFYCBpcyB0aGUgcHJpbWFyeSBzd2l0Y2guXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSB0YXJnZXRlZCBjb2RlLiBTcGVjaWZpYyBmdW5jdGlvbiBuYW1lcyBoZWxwIHJlZmluZSB0aGUgc2NvcGUuIExvb2tzIGxpa2UgYF9fYmxrX2FkZF90cmFjZWAsIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgLCBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmAsIGFuZCBgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmVgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB3YXRjaC4gVGhleSdyZSBub3QgdWJpcXVpdG91czsgdGhpcyBpcyBwcmVjaXNlbHkgdGhlIHRhcmdldGVkIGJsa3RyYWNlIGxvZ2ljLCB3aGljaCBtZWFucyB0aGV5IGFyZSBncmVhdCBjYW5kaWRhdGVzIGZvciBmaW5kaW5nIGJ1Z3MuXG5cbk9rYXksIGxldCdzIHN5bnRoZXNpemUgdGhpcyBpbnRvIGEgc3RydWN0dXJlZCBhcmd1bWVudDpcblxuMS4gICoqVGhlIE1vZGlmaWNhdGlvbjoqKiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIGBfX2Jsa19hZGRfdHJhY2UoKWAgd2l0aGluIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AuIEl0J3MgdW5jb25kaXRpb25hbGx5IGVuZm9yY2luZyB0aGUgdjIgKGBibGtfaW9fdHJhY2UyYCkgZm9ybWF0IHdoZW4gYGJsa190cmFjZXJgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGF2b2lkIGFueSBidWZmZXIgc2l6ZSBtaXNtYXRjaCBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIHdoZW4gdHJhY2luZyB1c2luZyBmdHJhY2UuIFRoZSBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKClgIGZ1bmN0aW9uIGlzIGFsc28gdXBkYXRlZCB0byBleHBsaWNpdGx5IHNldCBgYnQtXHUwMDNldmVyc2lvbiA9IDJgLlxuXG4yLiAgKipSZWFjaGFiaWxpdHk6KiogVGhpcyBjb2RlIGlzIHNtYWNrLWRhYiBpbiB0aGUgYmxvY2sgdHJhY2luZyBzdWJzeXN0ZW0sIHNvIGl0J3MgY29yZSBmdW5jdGlvbmFsaXR5LiBJdCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMgY29uZmlndXJhdGlvbiDigJMgYC9zeXMvYmxvY2svXHUwMDNjZGV2XHUwMDNlL3RyYWNlLy4uLmAg4oCTIGFuZCB0aGVyZWZvcmUsIHRocm91Z2ggc3RhbmRhcmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMgYXMgbG9uZyBhcyBgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0VgIGlzIGVuYWJsZWQuIFRoaXMgbWFrZXMgaXQgYSBncmVhdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgYXMgaXQgaXMgYSBjb21tb24gY29kZSBwYXRoLlxuXG4zLiAgKipWZXJkaWN0OioqICBHaXZlbiB0aGUgdGFyZ2V0ZWQgY29kZSwgdGhlIHJlYWNoYWJpbGl0eSB2aWEgc3RhbmRhcmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMgYW5kIHN5c2ZzLCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgcGF0Y2gsIHRoZSB2ZXJkaWN0IGlzIGNsZWFyOiAqKldvcnRoRnV6emluZyA9IHRydWUuKipcblxuQWxyaWdodCwgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg1NCwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6NDIuODE1NzQwMjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg1MjEwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfSU9fVFJBQ0VcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19ibGtfYWRkX3RyYWNlXCIsXG4gICAgXCJibGtfdHJhY2Vfc2V0dXBfcXVldWVcIixcbiAgICBcInJlY29yZF9ibGt0cmFjZV9ldmVudDJcIixcbiAgICBcInN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIHRyYWNlIHN1YnN5c3RlbSAoa2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMpLCBzcGVjaWZpY2FsbHkgaW4gX19ibGtfYWRkX3RyYWNlKCkgYW5kIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB1bmNvbmRpdGlvbmFsbHkgdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGxheW91dCwgZWxpbWluYXRpbmcgcG90ZW50aWFsIGJ1ZmZlciBtaXNtYXRjaGVzIGFuZCBvdXQtb2YtYm91bmRzIHJlYWRzLCBhbmQgaW5pdGlhbGl6ZXMgYnQtXFx1MDAzZXZlcnNpb24gZm9yIHN5c2ZzLWNvbmZpZ3VyZWQgcXVldWVzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgYmxvY2sgbGF5ZXIgdHJhY2luZyBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0lPX1RSQUNFXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYmxrX2FkZF90cmFjZVwiLFxuICAgIFwiYmxrX3RyYWNlX3NldHVwX3F1ZXVlXCIsXG4gICAgXCJyZWNvcmRfYmxrdHJhY2VfZXZlbnQyXCIsXG4gICAgXCJzeXNmc19ibGtfdHJhY2VfYXR0cl9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayB0cmFjZSBzdWJzeXN0ZW0gKGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jKSwgc3BlY2lmaWNhbGx5IGluIF9fYmxrX2FkZF90cmFjZSgpIGFuZCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBmdHJhY2UgcmluZyBidWZmZXIgdW5jb25kaXRpb25hbGx5IHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKSBsYXlvdXQsIGVsaW1pbmF0aW5nIHBvdGVudGlhbCBidWZmZXIgbWlzbWF0Y2hlcyBhbmQgb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGluaXRpYWxpemVzIGJ0LVxcdTAwM2V2ZXJzaW9uIGZvciBzeXNmcy1jb25maWd1cmVkIHF1ZXVlcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIGJsb2NrIGxheWVyIHRyYWNpbmcgbG9naWMgYWNjZXNzaWJsZSB2aWEgc3lzZnMgYW5kIGJsb2NrIEkvTyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjQyLjkzNDI2ODg0OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA3MTIwNTQ4NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MTo0Mi45MzQ3MzY3OThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MDcxMTU4MDY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBmb3JtYXQgbWlzbWF0Y2ggYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgLyB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGZ0cmFjZSBibG9jayB0cmFjaW5nIHN1YnN5c3RlbSAoYmxrdHJhY2UpLiBQcmV2aW91c2x5LCBpZiBidC1cXHUwMDNldmVyc2lvbiB3YXMgMSBvciAwLCBfX2Jsa19hZGRfdHJhY2UoKSBjb3VsZCBhbGxvY2F0ZSBhbmQgd3JpdGUgYSBzbWFsbGVyIHYxIChibGtfaW9fdHJhY2UpIGV2ZW50IGludG8gdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB3aGlsZSBmdHJhY2UgY29uc3VtZXJzIHBhcnNlZCBlbnRyaWVzIHN0cmljdGx5IGFzIHYyIChibGtfaW9fdHJhY2UyKSwgcmVzdWx0aW5nIGluIHBkdV9zdGFydCgpIGluZGV4aW5nIG91dC1vZi1ib3VuZHMgYmV5b25kIHRoZSByZXNlcnZlZCBldmVudCBidWZmZXIuXFxuXFxuVGhpcyBjbGFzcyBvZiBidWcgKG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgdXNlLWFmdGVyLWZyZWUpIGlzIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgZnRyYWNlIHBhdGggdG8gdW5jb25kaXRpb25hbGx5IHJlY29yZCB2MiBldmVudHMgb2Ygc2l6ZSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuIGFuZCBpbml0aWFsaXplcyBidC1cXHUwMDNldmVyc2lvbiB0byAyIGluIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpICh3aGVyZSB0aGUgbWVtb3J5IGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGt6YWxsb2Nfb2JqKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MWY3ODg3ZmZmYWFlNjViMTdmMTYxMWE5ZTBhZGU4NmExYTlkOWFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTo1MTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcbmluZGV4IDhjZDI1MjBiNGM5OWUuLmFlMDEwOTY5YzE0NDMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xuKysrIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcbkBAIC0zODUsNjYgKzM4NSwyNiBAQCBzdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxuIFx0aWYgKGJsa190cmFjZXIpIHtcbiBcdFx0YnVmZmVyID0gYmxrX3RyLVx1MDAzZWFycmF5X2J1ZmZlci5idWZmZXI7XG4gXHRcdHRyYWNlX2N0eCA9IHRyYWNpbmdfZ2VuX2N0eF9mbGFncygwKTtcbi1cdFx0c3dpdGNoIChidC1cdTAwM2V2ZXJzaW9uKSB7XG4tXHRcdGNhc2UgMTpcbi1cdFx0XHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZSk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgMjpcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIGZ0cmFjZSBhbHdheXMgdXNlcyB2MiAoYmxrX2lvX3RyYWNlMikgZm9ybWF0LlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogRm9yIHN5c2ZzLWVuYWJsZWQgdHJhY2luZyBwYXRoIChlbmFibGVkIHZpYVxuLVx0XHRcdCAqIC9zeXMvYmxvY2svREVWL3RyYWNlL2VuYWJsZSksIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpXG4tXHRcdFx0ICogbmV2ZXIgaW5pdGlhbGl6ZXMgYnQtXHUwMDNldmVyc2lvbiwgbGVhdmluZyBpdCAwIGZyb21cbi1cdFx0XHQgKiBremFsbG9jKCkuIFdlIG11c3QgaGFuZGxlIHZlcnNpb249PTAgc2FmZWx5IGhlcmUuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCB0byBlbnN1cmUgd2UgbmV2ZXIgaGl0IHRoZVxuLVx0XHRcdCAqIG9sZCBidWcgd2hlcmUgZGVmYXVsdCBzZXQgdHJhY2VfbGVuPTAsIGNhdXNpbmdcbi1cdFx0XHQgKiBidWZmZXIgdW5kZXJmbG93IGFuZCBtZW1vcnkgY29ycnVwdGlvbi5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIEFsd2F5cyB1c2UgdjIgZm9ybWF0IGZvciBmdHJhY2UgYW5kIG5vcm1hbGl6ZVxuLVx0XHRcdCAqIGJ0LVx1MDAzZXZlcnNpb24gdG8gMiB3aGVuIHVuaW5pdGlhbGl6ZWQuXG4tXHRcdFx0ICovXG4tXHRcdFx0dHJhY2VfbGVuID0gc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKTtcbi1cdFx0XHRpZiAoYnQtXHUwMDNldmVyc2lvbiA9PSAwKVxuLVx0XHRcdFx0YnQtXHUwMDNldmVyc2lvbiA9IDI7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0dHJhY2VfbGVuICs9IHBkdV9sZW4gKyBjZ2lkX2xlbjtcbitcdFx0LypcbitcdFx0ICogVGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciBhbHdheXMgdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpXG4rXHRcdCAqIGZvcm1hdDsgdGhlIGZ0cmFjZSByZWFkZXJzIHBhcnNlIG9ubHkgdGhhdC4gYnQtXHUwMDNldmVyc2lvblxuK1x0XHQgKiBkZXNjcmliZXMganVzdCB0aGUgcmVsYXkvY2xhc3NpYyBibGt0cmFjZSByZWNvcmQgZm9ybWF0LlxuK1x0XHQgKiBSZWNvcmRpbmcgYSB2MS1zaXplZCBldmVudCBoZXJlIHdvdWxkIHNoaWZ0IHBkdV9zdGFydCgpIDE2XG4rXHRcdCAqIGJ5dGVzIHBhc3QgdGhlIFBEVSBhbmQgbWFrZSBibGtfbG9nX3JlbWFwKCkgcmVhZCBwYXN0IHRoZVxuK1x0XHQgKiBldmVudCAoYSB1c2UtYWZ0ZXItZnJlZSBvbiBjb25jdXJyZW50IGJ1ZmZlciByZXNpemUpLCBhbmQgdjFcbitcdFx0ICogY2Fubm90IHJlcHJlc2VudCB0aGUgbmV3ZXIgNjQtYml0IHpvbmUgYWN0aW9ucyBhbnl3YXkuXG4rXHRcdCAqL1xuK1x0XHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuO1xuIFx0XHRldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9CTEssXG4gXHRcdFx0XHRcdFx0ICB0cmFjZV9sZW4sIHRyYWNlX2N0eCk7XG4gXHRcdGlmICghZXZlbnQpXG4gXHRcdFx0cmV0dXJuO1xuIFxuIFx0XHR0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpO1xuLVx0XHRzd2l0Y2ggKGJ0LVx1MDAzZXZlcnNpb24pIHtcbi1cdFx0Y2FzZSAxOlxuLVx0XHRcdHJlY29yZF9ibGt0cmFjZV9ldmVudChyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcbi1cdFx0XHRcdFx0ICAgICAgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsXG4tXHRcdFx0XHRcdCAgICAgIHdoYXQsIGJ0LVx1MDAzZWRldiwgZXJyb3IsIGNnaWQsIGNnaWRfbGVuLFxuLVx0XHRcdFx0XHQgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgMjpcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFVzZSB2MiByZWNvcmRpbmcgZnVuY3Rpb24gKHJlY29yZF9ibGt0cmFjZV9ldmVudDIpXG4tXHRcdFx0ICogd2hpY2ggd3JpdGVzIGJsa19pb190cmFjZTIgc3RydWN0dXJlIHdpdGggY29ycmVjdFxuLVx0XHRcdCAqIGZpZWxkIGxheW91dDpcbi1cdFx0XHQgKiAgIC0gMzItYml0IHBpZCBhdCBvZmZzZXQgMjhcbi1cdFx0XHQgKiAgIC0gNjQtYml0IGFjdGlvbiBhdCBvZmZzZXQgMzJcbi1cdFx0XHQgKlxuLVx0XHRcdCAqIEZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IGhhbmRsZXMgdmVyc2lvbj09MCBjYXNlXG4tXHRcdFx0ICogKGZyb20gc3lzZnMgcGF0aCksIGVuc3VyaW5nIHdlIGFsd2F5cyB1c2UgY29ycmVjdFxuLVx0XHRcdCAqIHYyIHJlY29yZGluZyBmdW5jdGlvbiB0byBtYXRjaCB0aGUgdjIgYnVmZmVyXG4tXHRcdFx0ICogYWxsb2NhdGVkIGFib3ZlLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHJlY29yZF9ibGt0cmFjZV9ldmVudDIocmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCksXG4tXHRcdFx0XHRcdCAgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcbi1cdFx0XHRcdFx0ICAgICAgIHdoYXQsIGJ0LVx1MDAzZWRldiwgZXJyb3IsIGNnaWQsIGNnaWRfbGVuLFxuLVx0XHRcdFx0XHQgICAgICAgcGR1X2RhdGEsIHBkdV9sZW4pO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4rXHRcdHJlY29yZF9ibGt0cmFjZV9ldmVudDIocmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCksXG4rXHRcdFx0XHQgICAgICAgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsXG4rXHRcdFx0XHQgICAgICAgd2hhdCwgYnQtXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXG4rXHRcdFx0XHQgICAgICAgcGR1X2RhdGEsIHBkdV9sZW4pO1xuIFxuIFx0XHR0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChibGtfdHIsIGJ1ZmZlciwgZXZlbnQsIHRyYWNlX2N0eCk7XG4gXHRcdHJldHVybjtcbkBAIC0xOTEzLDYgKzE4NzMsMTIgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4gXG4gXHRidC1cdTAwM2VkZXYgPSBiZGV2LVx1MDAzZWJkX2RldjtcbiBcdGJ0LVx1MDAzZWFjdF9tYXNrID0gKHUxNiktMTtcbitcdC8qXG4rXHQgKiBUaGlzIHN5c2ZzLWVuYWJsZWQgcGF0aCBmZWVkcyB0aGUgZnRyYWNlIGJsayB0cmFjZXIsIHdoaWNoIGFsd2F5c1xuK1x0ICogdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC4gSW5pdGlhbGl6ZSB0aGUgdmVyc2lvbiBzbyBpdCBpc1xuK1x0ICogbmV2ZXIgbGVmdCBkYW5nbGluZyBhcyAwIGZvciBmdXR1cmUgY29uc3VtZXJzLlxuK1x0ICovXG4rXHRidC1cdTAwM2V2ZXJzaW9uID0gMjtcbiBcbiBcdGJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6NDIuOTM0NzM3ODQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNTQxNTk0NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYmxrdHJhY2UgUGF0Y2ggZm9yIEZ1enppbmcgTmVlZHMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB0aGUgZnV6emluZyBzdHJhdGVneS4gTXkgZ3V0IGZlZWxpbmcgaXMgd2UgbWlnaHQgbmVlZCB0byBjb25zaWRlciBLTVNBTiBoZXJlLCBidXQgbGV0J3MgYmUgbWV0aG9kaWNhbC5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuIFRoZSBkaWZmIHRvdWNoZXMgYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYCwgc3BlY2lmaWNhbGx5IGBfX2Jsa19hZGRfdHJhY2VgLiBQcmV2aW91c2x5LCBpdCBzZWVtcyB3ZSBoYWQgYSB2ZXJzaW9uIGNoZWNrIChgYnQtXHUwMDNldmVyc2lvbmApIHdpdGggYSBzd2l0Y2gtY2FzZSB0byBoYW5kbGUgZWl0aGVyIGByZWNvcmRfYmxrdHJhY2VfZXZlbnRgICh2ZXJzaW9uIDEpIG9yIGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyYCAodmVyc2lvbiAyKSwgZGV0ZXJtaW5pbmcgYHRyYWNlX2xlbmAgYWNjb3JkaW5nbHkuIE5vdywgdGhlIHBhdGNoIHVuY29uZGl0aW9uYWxseSB1c2VzIGBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuYCBhbmQgY2FsbHMgYHJlY29yZF9ibGt0cmFjZV9ldmVudDJgLiBJbnRlcmVzdGluZy4gQWxzbywgYGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpYCBub3cgZXhwbGljaXRseSBzZXRzIGBidC1cdTAwM2V2ZXJzaW9uID0gMmAgd2hlbiBgYnRgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgLlxuXG5UaGlzIGlzIHdoZXJlIEknbSBzdGFydGluZyB0byBnZXQgYSBiaXQgY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCB1bmRlcmZsb3dzIG9yIG92ZXJmbG93cy4gVGhlIGhhcmRjb2Rpbmcgb2YgdmVyc2lvbiAyIGFuZCB0aGUgZGlyZWN0IHVzZSBvZiBgc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKWAgd2l0aG91dCBhbnkgY29uZGl0aW9uYWwgY2hlY2tzIHJhaXNlcyBmbGFncy4gSSBuZWVkIHRvIHNlZSBob3cgYHJlY29yZF9ibGt0cmFjZV9ldmVudDJgIGFuZCBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50YCBhcmUgZGVmaW5lZCBhbmQgaG93IHRoZXkgaGFuZGxlIHRoZSBkYXRhLiBJJ2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBpbnNwZWN0IHRob3NlIGZ1bmN0aW9ucyBpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgIG5vdy4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGhvdyB0aGF0IHNpemUgY2FsY3VsYXRpb24gaXMgdXNlZCBhbmQgaWYgdGhlcmUgbWlnaHQgYmUgb3Bwb3J0dW5pdGllcyBmb3Igb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGluY2x1c2lvbiBvZiBgcGR1X2xlbmAgYW5kIGBjZ2lkX2xlbmAuIEJhc2VkIG9uIHdoYXQgSSBzZWUgaW4gdGhvc2UgZnVuY3Rpb25zLCBJIGNhbiB0aGVuIGRlY2lkZSB3aGV0aGVyIEtBU0FOL3N0YW5kYXJkIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBvciBpZiBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeSB0byBjYXRjaCBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gYnVncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjU0LjQ3NjMzNTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODc4NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY29yZF9ibGt0cmFjZV9ldmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz02ND1zdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy02NS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo2NjpzdGF0aWMgdm9pZCByZWNvcmRfYmxrdHJhY2VfZXZlbnQoc3RydWN0IGJsa19pb190cmFjZSAqdCwgcGlkX3QgcGlkLCBpbnQgY3B1LFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY3LVxcdFxcdFxcdFxcdCAgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsIHU2NCB3aGF0LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTMtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTQ6c3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDIsIHBpZF90IHBpZCwgaW50IGNwdSxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NS1cXHRcXHRcXHRcXHQgICBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywgdTY0IHdoYXQsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMTY9c3RhdGljIHZvaWQgcmVsYXlfYmxrdHJhY2VfZXZlbnQxKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTMxLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEzMjpcXHRyZWNvcmRfYmxrdHJhY2VfZXZlbnQodCwgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsIHdoYXQsIGJ0LVxcdTAwM2VkZXYsIGVycm9yLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEzMy1cXHRcXHRcXHQgICAgICBjZ2lkLCBjZ2lkX2xlbiwgcGR1X2RhdGEsIHBkdV9sZW4pO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTM2PXN0YXRpYyB2b2lkIHJlbGF5X2Jsa3RyYWNlX2V2ZW50MihzdHJ1Y3QgYmxrX3RyYWNlICpidCwgdW5zaWduZWQgbG9uZyBzZXF1ZW5jZSxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE1MS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNTI6XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50Mih0LCBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcywgd2hhdCwgYnQtXFx1MDAzZWRldiwgZXJyb3IsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTUzLVxcdFxcdFxcdCAgICAgICBjZ2lkLCBjZ2lkX2xlbiwgcGR1X2RhdGEsIHBkdV9sZW4pO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTczPXN0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgdTY0IGFjdGlvbixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5NC1cXHRcXHR0ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTk1OlxcdFxcdHJlY29yZF9ibGt0cmFjZV9ldmVudDIodCwgcGlkLCBjcHUsIDAsIDAsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk2LVxcdFxcdFxcdFxcdCAgICAgICBhY3Rpb24sIGJ0LVxcdTAwM2VkZXYsIDAsIGNnaWQsIGNnaWRfbGVuLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MzEwPXN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00MDMtXFx0XFx0dHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0MDQ6XFx0XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00MDUtXFx0XFx0XFx0XFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MTo1NC41NTAyMjAyMDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ1MzA2NzYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQmxrdHJhY2UgRXZlbnQgUmVjb3JkaW5nKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBibGt0cmFjZSBldmVudHMgYXJlIGFjdHVhbGx5IGNhcHR1cmVkIGFuZCBsb2dnZWQsIHNvIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgY29yZSBmdW5jdGlvbnM6IGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyYCwgYHJlY29yZF9ibGt0cmFjZV9ldmVudGAsIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIGBfX2Jsa19hZGRfdHJhY2VgLiBJJ20gZXhwZWN0aW5nIHNvbWUgY2xldmVyIHVzZSBvZiBwZXItY3B1IGJ1ZmZlcnMgb3IgcmluZyBidWZmZXJzLCBsaWtlbHkgd2l0aCBjYXJlZnVsIGF0dGVudGlvbiB0byBsb2NraW5nIGFuZCBtZW1vcnkgYmFycmllcnMgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5LCBlc3BlY2lhbGx5IGR1cmluZyBoaWdoIEkvTyBsb2Fkcy4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGUgYWN0dWFsIHRpbWVzdGFtcGluZyBoYXBwZW5zIOKAkyBpcyBpdCBoYXJkd2FyZS1iYXNlZCBvciBzb2Z0d2FyZS1iYXNlZCwgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGFjY3VyYWN5PyBGdXJ0aGVybW9yZSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3M7IGhvdyBtdWNoIG92ZXJoZWFkIGRvZXMgdGhpcyB0cmFjaW5nIGFkZCB0byByZWd1bGFyIGJsb2NrIEkvTyBvcGVyYXRpb25zPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgYmFzZWQgb24gdGhlIHR5cGUgb2YgZXZlbnQgYmVpbmcgdHJhY2VkPyBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MgdG8gaGFuZGxlIGV2ZW50IGZpbHRlcmluZyBvciByYXRlIGxpbWl0aW5nIHRvIGF2b2lkIG92ZXJ3aGVsbWluZyB0aGUgc3lzdGVtPyBJIHdpbGwgYWxzbyBiZSBjdXJpb3VzIGFib3V0IGhvdyB0aGUgYWN0dWFsIHRyYWNlIGRhdGEgZ2V0cyBjb25zdW1lZCBhbmQgc3RvcmVkLCBob3cgbXVjaCBjb250ZXh0IGlzIGluY2x1ZGVkIHdpdGggZWFjaCBldmVudCwgYW5kIGhvdyB0aGUgdHJhY2UgYnVmZmVyIGlzIG1hbmFnZWQuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcHJvYmxlbXMpIGxpZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU5OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjU3LjAwMzI5MDk5OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0c3RhdGljIERFRklORV9NVVRFWChibGtfcHJvYmVfbXV0ZXgpO1xcbiAgNjE6XFx0c3RhdGljIGludCBibGtfcHJvYmVzX3JlZjtcXG4gIDYyOlxcdFxcbiAgNjM6XFx0c3RhdGljIHZvaWQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpO1xcbiAgNjQ6XFx0c3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCk7XFxuICA2NTpcXHRcXG4gIDY2OlxcdHN0YXRpYyB2b2lkIHJlY29yZF9ibGt0cmFjZV9ldmVudChzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0LCBwaWRfdCBwaWQsIGludCBjcHUsXFxuICA2NzpcXHRcXHRcXHRcXHRcXHQgIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLCB1NjQgd2hhdCxcXG4gIDY4OlxcdFxcdFxcdFxcdFxcdCAgZGV2X3QgZGV2LCBpbnQgZXJyb3IsIHU2NCBjZ2lkLFxcbiAgNjk6XFx0XFx0XFx0XFx0XFx0ICBzc2l6ZV90IGNnaWRfbGVuLCB2b2lkICpwZHVfZGF0YSwgaW50IHBkdV9sZW4pXFxuICA3MDpcXHRcXG4gIDcxOlxcdHtcXG4gIDcyOlxcdFxcdC8qXFxuICA3MzpcXHRcXHQgKiBUaGVzZSB0d28gYXJlIG5vdCBuZWVkZWQgaW4gZnRyYWNlIGFzIHRoZXkgYXJlIGluIHRoZVxcbiAgNzQ6XFx0XFx0ICogZ2VuZXJpYyB0cmFjZV9lbnRyeSwgZmlsbGVkIGJ5IHRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUsXFxuICA3NTpcXHRcXHQgKiBidXQgZm9yIHRoZSB0cmFjZV9ldmVudC1cXHUwMDNlYmluKCkgc3ludGhlc2l6ZXIgYmVuZWZpdCB3ZSBkbyBpdFxcbiAgNzY6XFx0XFx0ICogaGVyZSB0b28uXFxuICA3NzpcXHRcXHQgKi9cXG4gIDc4OlxcdFxcdHQtXFx1MDAzZWNwdSA9IGNwdTtcXG4gIDc5OlxcdFxcdHQtXFx1MDAzZXBpZCA9IHBpZDtcXG4gIDgwOlxcdFxcbiAgODE6XFx0XFx0dC1cXHUwMDNlc2VjdG9yID0gc2VjdG9yO1xcbiAgODI6XFx0XFx0dC1cXHUwMDNlYnl0ZXMgPSBieXRlcztcXG4gIDgzOlxcdFxcdHQtXFx1MDAzZWFjdGlvbiA9IGxvd2VyXzMyX2JpdHMod2hhdCk7XFxuICA4NDpcXHRcXHR0LVxcdTAwM2VkZXZpY2UgPSBkZXY7XFxuICA4NTpcXHRcXHR0LVxcdTAwM2VlcnJvciA9IGVycm9yO1xcbiAgODY6XFx0XFx0dC1cXHUwMDNlcGR1X2xlbiA9IHBkdV9sZW4gKyBjZ2lkX2xlbjtcXG4gIDg3OlxcdFxcbiAgODg6XFx0XFx0aWYgKGNnaWRfbGVuKVxcbiAgODk6XFx0XFx0XFx0bWVtY3B5KCh2b2lkICopdCArIHNpemVvZigqdCksIFxcdTAwMjZjZ2lkLCBjZ2lkX2xlbik7XFxuICA5MDpcXHRcXHRpZiAocGR1X2xlbilcXG4gIDkxOlxcdFxcdFxcdG1lbWNweSgodm9pZCAqKXQgKyBzaXplb2YoKnQpICsgY2dpZF9sZW4sIHBkdV9kYXRhLCBwZHVfbGVuKTtcXG4gIDkyOlxcdH1cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0c3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDIsIHBpZF90IHBpZCwgaW50IGNwdSxcXG4gIDk1OlxcdFxcdFxcdFxcdFxcdCAgIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLCB1NjQgd2hhdCxcXG4gIDk2OlxcdFxcdFxcdFxcdFxcdCAgIGRldl90IGRldiwgaW50IGVycm9yLCB1NjQgY2dpZCxcXG4gIDk3OlxcdFxcdFxcdFxcdFxcdCAgIHNzaXplX3QgY2dpZF9sZW4sIHZvaWQgKnBkdV9kYXRhLFxcbiAgOTg6XFx0XFx0XFx0XFx0XFx0ICAgaW50IHBkdV9sZW4pXFxuICA5OTpcXHR7XFxuIDEwMDpcXHRcXHR0Mi1cXHUwMDNlcGlkID0gcGlkO1xcbiAxMDE6XFx0XFx0dDItXFx1MDAzZWNwdSA9IGNwdTtcXG4gMTAyOlxcdFxcbiAxMDM6XFx0XFx0dDItXFx1MDAzZXNlY3RvciA9IHNlY3RvcjtcXG4gMTA0OlxcdFxcdHQyLVxcdTAwM2VieXRlcyA9IGJ5dGVzO1xcbiAxMDU6XFx0XFx0dDItXFx1MDAzZWFjdGlvbiA9IHdoYXQ7XFxuIDEwNjpcXHRcXHR0Mi1cXHUwMDNlZGV2aWNlID0gZGV2O1xcbiAxMDc6XFx0XFx0dDItXFx1MDAzZWVycm9yID0gZXJyb3I7XFxuIDEwODpcXHRcXHR0Mi1cXHUwMDNlcGR1X2xlbiA9IHBkdV9sZW4gKyBjZ2lkX2xlbjtcXG4gMTA5OlxcdFxcbiAxMTA6XFx0XFx0aWYgKGNnaWRfbGVuKVxcbiAxMTE6XFx0XFx0XFx0bWVtY3B5KCh2b2lkICopdDIgKyBzaXplb2YoKnQyKSwgXFx1MDAyNmNnaWQsIGNnaWRfbGVuKTtcXG4gMTEyOlxcdFxcdGlmIChwZHVfbGVuKVxcbiAxMTM6XFx0XFx0XFx0bWVtY3B5KCh2b2lkICopdDIgKyBzaXplb2YoKnQyKSArIGNnaWRfbGVuLCBwZHVfZGF0YSwgcGR1X2xlbik7XFxuIDExNDpcXHR9XFxuIDExNTpcXHRcXG4gMTE2OlxcdHN0YXRpYyB2b2lkIHJlbGF5X2Jsa3RyYWNlX2V2ZW50MShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgdW5zaWduZWQgbG9uZyBzZXF1ZW5jZSxcXG4gMTE3OlxcdFxcdFxcdFxcdFxcdCBwaWRfdCBwaWQsIGludCBjcHUsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxcbiAxMTg6XFx0XFx0XFx0XFx0XFx0IHU2NCB3aGF0LCBpbnQgZXJyb3IsIHU2NCBjZ2lkLFxcbiAxMTk6XFx0XFx0XFx0XFx0XFx0IHNzaXplX3QgY2dpZF9sZW4sIHZvaWQgKnBkdV9kYXRhLCBpbnQgcGR1X2xlbilcXG4gMTIwOlxcdHtcXG4gMTIxOlxcdFxcdHN0cnVjdCBibGtfaW9fdHJhY2UgKnQ7XFxuIDEyMjpcXHRcXHRzaXplX3QgdHJhY2VfbGVuID0gc2l6ZW9mKCp0KSArIHBkdV9sZW4gKyBjZ2lkX2xlbjtcXG4gMTIzOlxcdFxcbiAxMjQ6XFx0XFx0dCA9IHJlbGF5X3Jlc2VydmUoYnQtXFx1MDAzZXJjaGFuLCB0cmFjZV9sZW4pO1xcbiAxMjU6XFx0XFx0aWYgKCF0KVxcbiAxMjY6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHR0LVxcdTAwM2VtYWdpYyA9IEJMS19JT19UUkFDRV9NQUdJQyB8IEJMS19JT19UUkFDRV9WRVJTSU9OO1xcbiAxMjk6XFx0XFx0dC1cXHUwMDNlc2VxdWVuY2UgPSBzZXF1ZW5jZTtcXG4gMTMwOlxcdFxcdHQtXFx1MDAzZXRpbWUgPSBrdGltZV90b19ucyhrdGltZV9nZXQoKSk7XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdHJlY29yZF9ibGt0cmFjZV9ldmVudCh0LCBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcywgd2hhdCwgYnQtXFx1MDAzZWRldiwgZXJyb3IsXFxuIDEzMzpcXHRcXHRcXHRcXHQgICAgICBjZ2lkLCBjZ2lkX2xlbiwgcGR1X2RhdGEsIHBkdV9sZW4pO1xcbiAxMzQ6XFx0fVxcbiAxMzU6XFx0XFxuIDEzNjpcXHRzdGF0aWMgdm9pZCByZWxheV9ibGt0cmFjZV9ldmVudDIoc3RydWN0IGJsa190cmFjZSAqYnQsIHVuc2lnbmVkIGxvbmcgc2VxdWVuY2UsXFxuIDEzNzpcXHRcXHRcXHRcXHRcXHQgIHBpZF90IHBpZCwgaW50IGNwdSwgc2VjdG9yX3Qgc2VjdG9yLFxcbiAxMzg6XFx0XFx0XFx0XFx0XFx0ICBpbnQgYnl0ZXMsIHU2NCB3aGF0LCBpbnQgZXJyb3IsIHU2NCBjZ2lkLFxcbiAxMzk6XFx0XFx0XFx0XFx0XFx0ICBzc2l6ZV90IGNnaWRfbGVuLCB2b2lkICpwZHVfZGF0YSwgaW50IHBkdV9sZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjU3LjAwMzQ3MzkzOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzUzODQ1MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJsa3RyYWNlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaC4gVGhlIGNvbW1pdCBjb21tZW50IHNheXMgaXQncyBhYm91dCBhbiBmdHJhY2UgcmluZyBidWZmZXIgaXNzdWUuIFRoZSBjb3JlIHNlZW1zIHRvIGJlIHRoYXQgYGJsa19pb190cmFjZTJgIGlzIHRoZSBvbmx5IGZvcm1hdCB0aGUgZnRyYWNlIHJlYWRlcnMgYXJlIGV4cGVjdGluZywgYnV0IHRoZXJlIHdhcyBhIG1pc21hdGNoIGluIGhvdyB0aGUgdmVyc2lvbiB3YXMgYmVpbmcgaGFuZGxlZC4gQXBwYXJlbnRseSwgYGJ0LVx1MDAzZXZlcnNpb25gIHdhcyBkZXNjcmliaW5nIHRoZSAqcmVsYXkvY2xhc3NpYyogYmxrdHJhY2UgZm9ybWF0LCBub3QgdGhlIGZ0cmFjZSBvbmUuIFRoZSBjb21tZW50IHNwZWNpZmljYWxseSBtZW50aW9ucyBhbiBpc3N1ZSB3aXRoIHJlY29yZGluZyBhIHYxLXNpemVkIGV2ZW50IHdoaWNoIHdvdWxkIGNhdXNlIGEgYHBkdV9zdGFydCgpYCBvZmZzZXQgZXJyb3IsIGxlYWRpbmcgdG8gYSBgYmxrX2xvZ19yZW1hcCgpYCBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHBvc3NpYmxlIHVzZS1hZnRlci1mcmVlLCBlc3BlY2lhbGx5IGlmIHRoZSBidWZmZXIgZ2V0cyByZXNpemVkIGNvbmN1cnJlbnRseS4gQW5kLCBpdCBtZW50aW9ucyB0aGF0IHYxIGFsc28gY2FuJ3QgcmVwcmVzZW50IHRoZSBuZXdlciA2NC1iaXQgem9uZSBhY3Rpb25zLlxuXG5TbywgSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyBgYmxrX2lvX3RyYWNlYCBhbmQgYGJsa19pb190cmFjZTJgIGFyZSBkZWZpbmVkIGFuZCBob3cgdGhleSBhcmUgdXNlZC4gVGhlIGtleSBpcyBpbiB0aGUgc3RydWN0dXJlcywgdGhlIHN0cnVjdHVyZXMuIExldCdzIGZpbmQgdGhvc2Ugc3RydWN0dXJlIGRlZmluaXRpb25zIGFuZCB0cmFjZSB0aGVpciB1c2FnZSB0byBnZXQgYSBjb25jcmV0ZSBncmFzcCBvZiBob3cgdGhpcyBpcyBhbGwgc3VwcG9zZWQgdG8gd29yayBhbmQgd2hhdCB3ZW50IHdyb25nIGluIHRoaXMgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUyOjAwLjc1NzMyMzU4N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyODIxMTI3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYmxrX2lvX3RyYWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9ibGt0cmFjZV9hcGkuaD03NT1lbnVtIGJsa3RyYWNlX25vdGlmeSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmgtMTIwLSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9ibGt0cmFjZV9hcGkuaDoxMjE6c3RydWN0IGJsa19pb190cmFjZSB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3RyYWNlX2FwaS5oLTEyMi1cXHRfX3UzMiBtYWdpYztcXHRcXHQvKiBNQUdJQyBcXHUwMDNjXFx1MDAzYyA4IHwgdmVyc2lvbiAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3RyYWNlX2FwaS5oLTEzNS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmg6MTM2OnN0cnVjdCBibGtfaW9fdHJhY2UyIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmgtMTM3LVxcdF9fdTMyIG1hZ2ljO1xcdFxcdC8qIE1BR0lDIFxcdTAwM2NcXHUwMDNjIDggfCBCTEtfSU9fVFJBQ0UyX1ZFUlNJT04gKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9ibGt0cmFjZV9hcGkuaC0xNTMtICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3RyYWNlX2FwaS5oOjE1NDpzdHJ1Y3QgYmxrX2lvX3RyYWNlX3JlbWFwIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmgtMTU1LVxcdF9fYmUzMiBkZXZpY2VfZnJvbTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTY0PXN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY1LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjY2OnN0YXRpYyB2b2lkIHJlY29yZF9ibGt0cmFjZV9ldmVudChzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0LCBwaWRfdCBwaWQsIGludCBjcHUsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNjctXFx0XFx0XFx0XFx0ICBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywgdTY0IHdoYXQsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05My1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NDpzdGF0aWMgdm9pZCByZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHN0cnVjdCBibGtfaW9fdHJhY2UyICp0MiwgcGlkX3QgcGlkLCBpbnQgY3B1LFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk1LVxcdFxcdFxcdFxcdCAgIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLCB1NjQgd2hhdCxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExNj1zdGF0aWMgdm9pZCByZWxheV9ibGt0cmFjZV9ldmVudDEoc3RydWN0IGJsa190cmFjZSAqYnQsIHVuc2lnbmVkIGxvbmcgc2VxdWVuY2UsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjAte1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEyMTpcXHRzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0O1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyMi1cXHRzaXplX3QgdHJhY2VfbGVuID0gc2l6ZW9mKCp0KSArIHBkdV9sZW4gKyBjZ2lkX2xlbjtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEzNj1zdGF0aWMgdm9pZCByZWxheV9ibGt0cmFjZV9ldmVudDIoc3RydWN0IGJsa190cmFjZSAqYnQsIHVuc2lnbmVkIGxvbmcgc2VxdWVuY2UsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNDAte1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE0MTpcXHRzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNDI6XFx0c2l6ZV90IHRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgKyBwZHVfbGVuICsgY2dpZF9sZW47XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQzLVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTczPXN0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgdTY0IGFjdGlvbixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4NC1cXHRpZiAoYmxrX3RyYWNlcikge1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4NTpcXHRcXHRzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODYtXFx0XFx0c2l6ZV90IHRyYWNlX2xlbiA9IHNpemVvZigqdCkgKyBjZ2lkX2xlbiArIGxlbjtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTMxMD1zdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzk2LVxcdFxcdCAqL1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjM5NzpcXHRcXHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTM5OC1cXHRcXHRldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9CTEssXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMTk5PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwKHZvaWQgKmlnbm9yZSwgc3RydWN0IGJpbyAqYmlvLCBkZXZfdCBkZXYsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjAzLVxcdHN0cnVjdCBibGtfdHJhY2UgKmJ0O1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEyMDQ6XFx0c3RydWN0IGJsa19pb190cmFjZV9yZW1hcCByO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyMDUtXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMjM2PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfcmVtYXAodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGRldl90IGRldixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyMzktXFx0c3RydWN0IGJsa190cmFjZSAqYnQ7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTI0MDpcXHRzdHJ1Y3QgYmxrX2lvX3RyYWNlX3JlbWFwIHI7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI0MS1cXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEzMzI9c3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZClcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEzNTctLypcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMzU4OiAqIHN0cnVjdCBibGtfaW9fdHJhY2VyIGZvcm1hdHRpbmcgcm91dGluZXNcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMzU5LSAqL1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEzNjAtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTM2MTpzdGF0aWMgdm9pZCBmaWxsX3J3YnMoY2hhciAqcndicywgY29uc3Qgc3RydWN0IGJsa19pb190cmFjZTIgKnQpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTM2Mi17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMzk4PXN0YXRpYyBpbmxpbmVcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMzk5OmNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UyICp0ZV9ibGtfaW9fdHJhY2UoY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQwMC17XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTQwMTpcXHRyZXR1cm4gKGNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UyICopZW50O1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE0MDItfVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTQ1Mz1zdGF0aWMgdm9pZCBibGtfbG9nX2FjdGlvbl9jbGFzc2ljKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQ1OS1cXHR1bnNpZ25lZCBzZWNzXFx0ICAgICAgID0gKHVuc2lnbmVkIGxvbmcpdHM7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTQ2MDpcXHRjb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdCA9IHRlX2Jsa19pb190cmFjZShpdGVyLVxcdTAwM2VlbnQpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE0NjEtXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNDcwPXN0YXRpYyB2b2lkIGJsa19sb2dfYWN0aW9uKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQ3My1cXHRjaGFyIHJ3YnNbUldCU19MRU5dO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE0NzQ6XFx0Y29uc3Qgc3RydWN0IGJsa19pb190cmFjZTIgKnQgPSB0ZV9ibGtfaW9fdHJhY2UoaXRlci1cXHUwMDNlZW50KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNDc1LVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTU4Nz1zdGF0aWMgdm9pZCBibGtfbG9nX3JlbWFwKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50LCBib29sIGhhc19jZylcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNTg4LXtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNTg5OlxcdGNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2VfcmVtYXAgKl9fciA9IHBkdV9zdGFydChlbnQsIGhhc19jZyk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTU5MC1cXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTE2OTA9c3RhdGljIGVudW0gcHJpbnRfbGluZV90IHByaW50X29uZV9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE2OTQtXFx0c3RydWN0IHRyYWNlX3NlcSAqcyA9IFxcdTAwMjZpdGVyLVxcdTAwM2VzZXE7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTY5NTpcXHRjb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNjk2LVxcdHUxNiB3aGF0O1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTcyOT1zdGF0aWMgdm9pZCBibGtfdHJhY2Vfc3ludGhlc2l6ZV9vbGRfdHJhY2Uoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTczMS1cXHRzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gXFx1MDAyNml0ZXItXFx1MDAzZXNlcTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNzMyOlxcdHN0cnVjdCBibGtfaW9fdHJhY2UyICp0ID0gKHN0cnVjdCBibGtfaW9fdHJhY2UyICopaXRlci1cXHUwMDNlZW50O1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3MzM6XFx0Y29uc3QgaW50IG9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBibGtfaW9fdHJhY2UyLCBzZWN0b3IpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3MzQ6XFx0c3RydWN0IGJsa19pb190cmFjZSBvbGQgPSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTczNS1cXHRcXHQubWFnaWNcXHQgID0gQkxLX0lPX1RSQUNFX01BR0lDIHwgQkxLX0lPX1RSQUNFX1ZFUlNJT04sXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNzk5PXN0YXRpYyBpbnQgX19pbml0IF9faW5pdF9ibGtfdHJhY2VyKHZvaWQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODEzLVxcdFxcdCAgICAgX19hbGlnbm9mX18obG9uZykpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4MTQ6XFx0QlVJTERfQlVHX09OKF9fYWxpZ25vZl9fKHN0cnVjdCBibGtfaW9fdHJhY2UyKSAlIF9fYWxpZ25vZl9fKGxvbmcpKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODE1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MjowMy4wODU1OTEzNDlaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAyMjIxOTMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byBibGt0cmFjZV9hcGkuaCoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gYGluY2x1ZGUvdWFwaS9saW51eC9ibGt0cmFjZV9hcGkuaGAsIHNwZWNpZmljYWxseSBzb21ld2hlcmUgaW4gdGhlIHZpY2luaXR5IG9mIGxpbmVzIDEyMCB0aHJvdWdoIDE1MC4gVGhhdCBzZWN0aW9uIGlzIHVzdWFsbHkgd2hlcmUgdGhleSBkZWZpbmUgc29tZSBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgb3IgY29uc3RhbnRzIHRoYXQgZ292ZXJuIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgYmxvY2sgdHJhY2UgdG9vbCBhbmQgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBhcmVhLCBhcyBJJ3ZlIGJlZW4gd29ya2luZyBhdCBzdWNoIGEgaGlnaCBsZXZlbCBsYXRlbHkuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBhbnkgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSByZWNlbnRseSB0byB0aGUgZXZlbnQgZGVmaW5pdGlvbnMgb3IgZmxhZ3MgdGhlcmUuIEFueSBtb2RpZmljYXRpb24gdG8gdGhlc2Ugd2lsbCBuZWVkIHRvIGJlIGNhcmVmdWxseSBjb25zaWRlcmVkIGluIHJlbGF0aW9uIHRvIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyB0cmFjZSB0b29scyBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB3ZSdyZSBjb25zdW1pbmcuIFRoaXMgcGFydGljdWxhciBwb3J0aW9uIG9mIHRoZSBoZWFkZXIgaXMgYSBjcml0aWNhbCBwb2ludCBvZiBpbnRlcm9wZXJhYmlsaXR5LiBMZXQgbWUgZm9jdXMgb24gdGhpcyBzZWN0aW9uIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBrZXJuZWwncyBibG9jayBsYXllciBldmVudCBoYW5kbGluZy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucyBpZiB0aGV5J3ZlIGNoYW5nZWQgdGhpbmdzIGF0IHRoaXMgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMjMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MjowNS4xMDc4MTM4MjdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzczNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3RyYWNlX2FwaS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHQgKi9cXG4gMTIxOlxcdHN0cnVjdCBibGtfaW9fdHJhY2Uge1xcbiAxMjI6XFx0XFx0X191MzIgbWFnaWM7XFx0XFx0LyogTUFHSUMgXFx1MDAzY1xcdTAwM2MgOCB8IHZlcnNpb24gKi9cXG4gMTIzOlxcdFxcdF9fdTMyIHNlcXVlbmNlO1xcdFxcdC8qIGV2ZW50IG51bWJlciAqL1xcbiAxMjQ6XFx0XFx0X191NjQgdGltZTtcXHRcXHQvKiBpbiBuYW5vc2Vjb25kcyAqL1xcbiAxMjU6XFx0XFx0X191NjQgc2VjdG9yO1xcdFxcdC8qIGRpc2sgb2Zmc2V0ICovXFxuIDEyNjpcXHRcXHRfX3UzMiBieXRlcztcXHRcXHQvKiB0cmFuc2ZlciBsZW5ndGggKi9cXG4gMTI3OlxcdFxcdF9fdTMyIGFjdGlvbjtcXHRcXHQvKiB3aGF0IGhhcHBlbmVkICovXFxuIDEyODpcXHRcXHRfX3UzMiBwaWQ7XFx0XFx0Lyogd2hvIGRpZCBpdCAqL1xcbiAxMjk6XFx0XFx0X191MzIgZGV2aWNlO1xcdFxcdC8qIGRldmljZSBudW1iZXIgKi9cXG4gMTMwOlxcdFxcdF9fdTMyIGNwdTtcXHRcXHQvKiBvbiB3aGF0IGNwdSBkaWQgaXQgaGFwcGVuICovXFxuIDEzMTpcXHRcXHRfX3UxNiBlcnJvcjtcXHRcXHQvKiBjb21wbGV0aW9uIGVycm9yICovXFxuIDEzMjpcXHRcXHRfX3UxNiBwZHVfbGVuO1xcdFxcdC8qIGxlbmd0aCBvZiBkYXRhIGFmdGVyIHRoaXMgdHJhY2UgKi9cXG4gMTMzOlxcdFxcdC8qIGNncm91cCBpZCB3aWxsIGJlIHN0b3JlZCBoZXJlIGlmIGV4aXN0cyAqL1xcbiAxMzQ6XFx0fTtcXG4gMTM1OlxcdFxcbiAxMzY6XFx0c3RydWN0IGJsa19pb190cmFjZTIge1xcbiAxMzc6XFx0XFx0X191MzIgbWFnaWM7XFx0XFx0LyogTUFHSUMgXFx1MDAzY1xcdTAwM2MgOCB8IEJMS19JT19UUkFDRTJfVkVSU0lPTiAqL1xcbiAxMzg6XFx0XFx0X191MzIgc2VxdWVuY2U7XFx0XFx0LyogZXZlbnQgbnVtYmVyICovXFxuIDEzOTpcXHRcXHRfX3U2NCB0aW1lO1xcdFxcdC8qIGluIG5hbm9zZWNvbmRzICovXFxuIDE0MDpcXHRcXHRfX3U2NCBzZWN0b3I7XFx0XFx0LyogZGlzayBvZmZzZXQgKi9cXG4gMTQxOlxcdFxcdF9fdTMyIGJ5dGVzO1xcdFxcdC8qIHRyYW5zZmVyIGxlbmd0aCAqL1xcbiAxNDI6XFx0XFx0X191MzIgcGlkO1xcdFxcdC8qIHdobyBkaWQgaXQgKi9cXG4gMTQzOlxcdFxcdF9fdTY0IGFjdGlvbjtcXHRcXHQvKiB3aGF0IGhhcHBlbmVkICovXFxuIDE0NDpcXHRcXHRfX3UzMiBkZXZpY2U7XFx0XFx0LyogZGV2aWNlIG51bWJlciAqL1xcbiAxNDU6XFx0XFx0X191MzIgY3B1O1xcdFxcdC8qIG9uIHdoYXQgY3B1IGRpZCBpdCBoYXBwZW4gKi9cXG4gMTQ2OlxcdFxcdF9fdTE2IGVycm9yO1xcdFxcdC8qIGNvbXBsZXRpb24gZXJyb3IgKi9cXG4gMTQ3OlxcdFxcdF9fdTE2IHBkdV9sZW47XFx0XFx0LyogbGVuZ3RoIG9mIGRhdGEgYWZ0ZXIgdGhpcyB0cmFjZSAqL1xcbiAxNDg6XFx0XFx0X191OCBwYWRbMTJdO1xcbiAxNDk6XFx0XFx0LyogY2dyb3VwIGlkIHdpbGwgYmUgc3RvcmVkIGhlcmUgaWYgaXQgZXhpc3RzICovXFxuIDE1MDpcXHR9O1xcbiAxNTE6XFx0LypcXG4gMTUyOlxcdCAqIFRoZSByZW1hcCBldmVudFxcbiAxNTM6XFx0ICovXFxuIDE1NDpcXHRzdHJ1Y3QgYmxrX2lvX3RyYWNlX3JlbWFwIHtcXG4gMTU1OlxcdFxcdF9fYmUzMiBkZXZpY2VfZnJvbTtcXG4gMTU2OlxcdFxcdF9fYmUzMiBkZXZpY2VfdG87XFxuIDE1NzpcXHRcXHRfX2JlNjQgc2VjdG9yX2Zyb207XFxuIDE1ODpcXHR9O1xcbiAxNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUyOjA1LjEwNzg5NzE1NloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5Mzc2ODA1OTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRml4IGZvciBhIEJsay1UcmFjZXIgT3V0LW9mLUJvdW5kcyBSZWFkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzLCBcIldoYXQncyB0aGUgYmVmb3JlIGFuZCBhZnRlcj9cIiBGcm9tIHdoYXQgSSdtIHJlYWRpbmcsIGl0IGFwcGVhcnMgdGhlIGBibGtfdHJhY2VyYCAoZnRyYWNlJ3MgYmxvY2sgSS9PIHRyYWNpbmcpIGhhZCBhIHN1YnRsZSBidXQgY3JpdGljYWwgYnVnLiBJdCBpbnZvbHZlcyBob3cgZGF0YSBpcyB3cml0dGVuIHRvIGFuZCByZWFkIGZyb20gdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB1c2luZyBgc3RydWN0IGJsa19pb190cmFjZTJgLlxuXG5QcmV2aW91c2x5LCB0aGUgY29kZSB3YXMgaW5jb25zaXN0ZW50LiBXaGVuIGBidC1cdTAwM2V2ZXJzaW9uYCB3YXMgMSDigJMgd2hpY2ggY291bGQgaGFwcGVuIHVuZGVyIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgdXNpbmcgY2xhc3NpYyBibGt0cmFjZSBvciByZWxheSB3aXRoIHZlcnNpb24gMSDigJMgYF9fYmxrX2FkZF90cmFjZWAgYWxsb2NhdGVkIGJ1ZmZlciBzcGFjZSBmb3IgdGhlIG9sZGVyIGBzdHJ1Y3QgYmxrX2lvX3RyYWNlYCBwbHVzIHRoZSBQcm90b2NvbCBEYXRhIFVuaXQgKFBEVSkgbGVuZ3RoIGFuZCBDb250cm9sIEdyb3VwIElEIChDR0lEKSBsZW5ndGguIFRoZSBwcm9ibGVtLCB0aG91Z2gsIHdhcyB0aGF0IGl0IHRoZW4gKndyb3RlKiB1c2luZyBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50YCB3aGljaCB3cm90ZSB0aGUgKnNtYWxsZXIqIGBibGtfaW9fdHJhY2VgLiBXaGVuIGZ0cmFjZSB0aGVuIHdlbnQgdG8gKnJlYWQqIHRoZSBidWZmZXIsIGl0IGNhc3QgdGhlIGVudHJ5IHRvIGBzdHJ1Y3QgYmxrX2lvX3RyYWNlMmAgYW5kIGV4cGVjdGVkIHRoZSBQRFUgdG8gc3RhcnQgYXQgYSBsYXRlciBvZmZzZXQuIFRoYXQncyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IHNjZW5hcmlvLCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCBiZWNhdXNlIHRoZSByZWFkIGV4dGVuZGVkIHBhc3QgdGhlIGFsbG9jYXRlZCBtZW1vcnkuXG5cblRoZSBwYXRjaCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFzIGEgZml4LiBJdCBpbnRyb2R1Y2VzIHR3byBrZXkgY2hhbmdlczpcblxuMS4gIFNpbmNlIHdlIGFyZSBpbiB0aGUgZnRyYWNlIGNvbnRleHQgKGBpZiAoYmxrX3RyYWNlcilgKSwgdGhlIGFsbG9jYXRpb24gc2l6ZSBub3cgKmFsd2F5cyogdXNlcyBgc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKSArIHBkdV9sZW4gKyBjZ2lkX2xlbmAgYW5kIHRoZSBkYXRhIGlzICphbHdheXMqIHdyaXR0ZW4gdXNpbmcgYHJlY29yZF9ibGt0cmFjZV9ldmVudDJgLiBTbywgY29uc2lzdGVuY3kgaXMgbm93IGd1YXJhbnRlZWQuXG4yLiAgYGJsa190cmFjZV9zZXR1cF9xdWV1ZWAgKHdoaWNoIGxpa2VseSBydW5zIGF0IHN5c3RlbSBpbml0aWFsaXphdGlvbiBvciB3aGVuIGEgdHJhY2UgaXMgZW5hYmxlZCkgbm93IGluaXRpYWxpemVzIGBidC1cdTAwM2V2ZXJzaW9uID0gMmAuIFRoaXMgZ3VhcmFudGVlcyB0aGUgdmVyc2lvbiBmbGFnIGlzIG5vIGxvbmdlciAxLlxuXG5Ob3csIGxldCdzIHF1aWNrbHkgc2NhbiBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIEtNU0FOLXJlbGV2YW50IGlzc3Vlcy4gTG9va2luZyBhdCBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmAsIGl0IGFwcGVhcnMgdG8gY29weSBgY2dpZGAgYW5kIHRoZW4gYHBkdV9kYXRhYCBpbnRvIHRoZSBgdDJgIHN0cnVjdCBhdCB0aGUgY29ycmVjdCBvZmZzZXRzLiBgY2dpZF9sZW5gIGFuZCBgcGR1X2xlbmAgZGV0ZXJtaW5lIHRoZSBjb3B5IHNpemVzLCBzbyB0aGF0IHNlZW1zIG9rYXkuXG5cbkEgcXVlc3Rpb24gdGhhdCBjb21lcyB1cCB3aXRoIHRoaXMgaXMgcmVsYXRlZCB0byBob3cgdGhlIHJpbmcgYnVmZmVyIGFuZCB0cmFjZSBlbnRyaWVzIGFyZSBoYW5kbGVkIGluIGBmdHJhY2VgLiBXZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IGxheW91dCBpcyBjb3JyZWN0bHkgaGFuZGxlZCBpbiBgdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZWAuIEl0IGxvb2tzIGxpa2UgYHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmVgIGRvZXMgdGhlIHJlc2VydmF0aW9uIGluIHRoZSByaW5nIGJ1ZmZlci4gRnRyYWNlIHRoZW4gaW5pdGlhbGl6ZXMgdGhlIHJpbmcgYnVmZmVyIGVudHJ5IGhlYWRlciwgYW5kIGByaW5nX2J1ZmZlcl9ldmVudF9kYXRhYCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGF5bG9hZCwgd2hpY2ggc2hvdWxkIGJlIHRoZSBgc3RydWN0IGJsa19pb190cmFjZTJgLiBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGBzdHJ1Y3QgdHJhY2VfZW50cnlgIGFuZCBgc3RydWN0IGJsa19pb190cmFjZTJgIGluIHRoZSBjb250ZXh0IG9mIGBibGtfdHJhY2VyYC4gSG93IGlzIHRoZSB0cmFjZSBlbnRyeSBkZWZpbmVkIGJ5IGBibGtfdHJhY2VyYD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIG5leHQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgYWxpZ25tZW50IG9yIHNpemUgZGlzY3JlcGFuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwOTEsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MjoxNC40ODQ3MDYxNDNaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDgxMzk4NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVFJBQ0VfQkxLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oPTc9c3RydWN0IGlvY19ncTtcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaC04LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oOjk6I2lmICFkZWZpbmVkKF9UUkFDRV9CTEtfSU9DT1NUX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0Lmg6MTA6I2RlZmluZSBfVFJBQ0VfQkxLX0lPQ09TVF9IXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmgtMTEtXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaD0xODE9VFJBQ0VfRVZFTlQoaW9jb3N0X2lvY2dfZm9yZ2l2ZV9kZWJ0LFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmgtMjIxLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oOjIyMjojZW5kaWYgLyogX1RSQUNFX0JMS19JT0NPU1RfSCAqL1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oLTIyMy1cXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTM3PXN0YXRpYyBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfUkFXX1NQSU5MT0NLKHJ1bm5pbmdfdHJhY2VfbG9jayk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zOS0vKiBTZWxlY3QgYW4gYWx0ZXJuYXRpdmUsIG1pbmltYWxpc3RpYyBvdXRwdXQgdGhhbiB0aGUgb3JpZ2luYWwgb25lICovXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDA6I2RlZmluZSBUUkFDRV9CTEtfT1BUX0NMQVNTSUNcXHQweDFcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0MTojZGVmaW5lIFRSQUNFX0JMS19PUFRfQ0dST1VQXFx0MHgyXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDI6I2RlZmluZSBUUkFDRV9CTEtfT1BUX0NHTkFNRVxcdDB4NFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTQzLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTQ0PXN0YXRpYyBzdHJ1Y3QgdHJhY2VyX29wdCBibGtfdHJhY2VyX29wdHNbXSA9IHtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00NS1cXHQvKiBEZWZhdWx0IGRpc2FibGUgdGhlIG1pbmltYWxpc3RpYyBvdXRwdXQgKi9cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0NjpcXHR7IFRSQUNFUl9PUFQoYmxrX2NsYXNzaWMsIFRSQUNFX0JMS19PUFRfQ0xBU1NJQykgfSxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00Ny0jaWZkZWYgQ09ORklHX0JMS19DR1JPVVBcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0ODpcXHR7IFRSQUNFUl9PUFQoYmxrX2Nncm91cCwgVFJBQ0VfQkxLX09QVF9DR1JPVVApIH0sXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDk6XFx0eyBUUkFDRVJfT1BUKGJsa19jZ25hbWUsIFRSQUNFX0JMS19PUFRfQ0dOQU1FKSB9LFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTUwLSNlbmRpZlxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTczPXN0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgdTY0IGFjdGlvbixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4OS1cXHRcXHR0cmFjZV9jdHggPSB0cmFjaW5nX2dlbl9jdHhfZmxhZ3MoMCk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTkwOlxcdFxcdGV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSyxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTEtXFx0XFx0XFx0XFx0XFx0XFx0ICB0cmFjZV9sZW4sIHRyYWNlX2N0eCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yNDM9dm9pZCBfX2Jsa190cmFjZV9ub3RlX21lc3NhZ2Uoc3RydWN0IGJsa190cmFjZSAqYnQsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yNjktI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjcwOlxcdGlmIChjc3MgXFx1MDAyNlxcdTAwMjYgKGJsa190cmFjZXJfZmxhZ3MudmFsIFxcdTAwMjYgVFJBQ0VfQkxLX09QVF9DR1JPVVApKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI3MS1cXHRcXHRjZ2lkID0gY2dyb3VwX2lkKGNzcy1cXHUwMDNlY2dyb3VwKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTMxMD1zdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzk3LVxcdFxcdHRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgKyBwZHVfbGVuICsgY2dpZF9sZW47XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6Mzk4OlxcdFxcdGV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSyxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zOTktXFx0XFx0XFx0XFx0XFx0XFx0ICB0cmFjZV9sZW4sIHRyYWNlX2N0eCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz05MzQ9c3RhdGljIHU2NCBibGtfdHJhY2VfYmlvX2dldF9jZ2lkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NDAtXFx0YnQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHEtXFx1MDAzZWJsa190cmFjZSwgMSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTQxOlxcdGlmICghYnQgfHwgIShibGtfdHJhY2VyX2ZsYWdzLnZhbCBcXHUwMDI2IFRSQUNFX0JMS19PUFRfQ0dST1VQKSlcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NDItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNDcwPXN0YXRpYyB2b2lkIGJsa19sb2dfYWN0aW9uKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQ3OS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNDgwOlxcdFxcdGlmIChibGtfdHJhY2VyX2ZsYWdzLnZhbCBcXHUwMDI2IFRSQUNFX0JMS19PUFRfQ0dOQU1FKSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQ4MS1cXHRcXHRcXHRjaGFyIGJsa2NnX25hbWVfYnVmW05BTUVfTUFYICsgMV0gPSBcXFwiXFx1MDAzYy4uLlxcdTAwM2VcXFwiO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTYzOT1zdGF0aWMgdm9pZCBibGtfdHJhY2VyX3ByaW50X2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTY0MC17XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTY0MTpcXHRpZiAoIShibGtfdHJhY2VyX2ZsYWdzLnZhbCBcXHUwMDI2IFRSQUNFX0JMS19PUFRfQ0xBU1NJQykpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTY0Mi1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNzUzPXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBibGtfdHJhY2VyX3ByaW50X2xpbmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE3NTQte1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3NTU6XFx0aWYgKChpdGVyLVxcdTAwM2VlbnQtXFx1MDAzZXR5cGUgIT0gVFJBQ0VfQkxLKSB8fFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3NTY6XFx0ICAgICEoYmxrX3RyYWNlcl9mbGFncy52YWwgXFx1MDAyNiBUUkFDRV9CTEtfT1BUX0NMQVNTSUMpKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE3NTctXFx0XFx0cmV0dXJuIFRSQUNFX1RZUEVfVU5IQU5ETEVEO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTc2Mz1ibGtfdHJhY2VyX3NldF9mbGFnKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHUzMiBvbGRfZmxhZ3MsIHUzMiBiaXQsIGludCBzZXQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNzY1LVxcdC8qIGRvbid0IG91dHB1dCBjb250ZXh0LWluZm8gZm9yIGJsa19jbGFzc2ljIG91dHB1dCAqL1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3NjY6XFx0aWYgKGJpdCA9PSBUUkFDRV9CTEtfT1BUX0NMQVNTSUMpIHtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNzY3LVxcdFxcdGlmIChzZXQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNzkyPXN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgdHJhY2VfYmxrX2V2ZW50ID0ge1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3OTM6XFx0LnR5cGVcXHRcXHQ9IFRSQUNFX0JMSyxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNzk0LVxcdC5mdW5jc1xcdFxcdD0gXFx1MDAyNnRyYWNlX2Jsa19ldmVudF9mdW5jcyxcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oPTM3PWVudW0gdHJhY2VfdHlwZSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC01Mi1cXHRUUkFDRV9VU0VSX1NUQUNLLFxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjUzOlxcdFRSQUNFX0JMSyxcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC01NC1cXHRUUkFDRV9CUFVUUyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTI6MTYuNzkyODUyMzA2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzMjg3MzExODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGJsb2NrIHRyYWNpbmcgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBrZXJuZWwuIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBfX2Jsa19hZGRfdHJhY2VgIGZ1bmN0aW9uIGFuZCBpdHMgYXNzb2NpYXRlZCByb3V0aW5lcyBpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgaG93IHRyYWNpbmcgaW5mb3JtYXRpb24gaXMgaW5qZWN0ZWQuXG5cblNwZWNpZmljYWxseSwgSSdsbCBiZSBmb2N1c2luZyBvbiBsaW5lcyAzMTAgdGhyb3VnaCA0MjAuIFRoYXQgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIG1lY2hhbmljcywgbGlrZWx5IGNvdmVyaW5nIGhvdyB0aGUgdHJhY2Vwb2ludHMgYXJlIGhvb2tlZCwgZGF0YSBpcyBjb2xsZWN0ZWQsIGFuZCBtYXliZSBldmVuIGhvdyB0aGUgdHJhY2luZyBidWZmZXIgaXMgbWFuYWdlZC4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgYW5kIGhvdyBldmVudHMgYXJlIHRpbWVzdGFtcGVkIGFuZCBmb3JtYXR0ZWQuIEhvcGVmdWxseSwgSSdsbCBmaW5kIHNvbWUgaW5zaWdodHMgaW50byB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXBwcm9hY2ggaW4gaGlnaC1wZXJmb3JtYW5jZSBzY2VuYXJpb3Mgb3IgaW4gY29tcGxleCBJTyBjb25maWd1cmF0aW9ucy4gVGhpcyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbnRleHR1YWxpemUgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MjoyMi4xMjE1ODYwNjlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTA6XFx0c3RhdGljIHZvaWQgX19ibGtfYWRkX3RyYWNlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcyxcXG4gMzExOlxcdFxcdFxcdFxcdCAgICBjb25zdCBibGtfb3BmX3Qgb3BmLCB1NjQgd2hhdCwgaW50IGVycm9yLFxcbiAzMTI6XFx0XFx0XFx0XFx0ICAgIGludCBwZHVfbGVuLCB2b2lkICpwZHVfZGF0YSwgdTY0IGNnaWQpXFxuIDMxMzpcXHR7XFxuIDMxNDpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7XFxuIDMxNTpcXHRcXHRzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50ID0gTlVMTDtcXG4gMzE2OlxcdFxcdHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciA9IE5VTEw7XFxuIDMxNzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gMDtcXG4gMzE4OlxcdFxcdHVuc2lnbmVkIGxvbmcgKnNlcXVlbmNlO1xcbiAzMTk6XFx0XFx0dW5zaWduZWQgaW50IHRyYWNlX2N0eCA9IDA7XFxuIDMyMDpcXHRcXHRwaWRfdCBwaWQ7XFxuIDMyMTpcXHRcXHRpbnQgY3B1O1xcbiAzMjI6XFx0XFx0Ym9vbCBibGtfdHJhY2VyID0gYmxrX3RyYWNlcl9lbmFibGVkO1xcbiAzMjM6XFx0XFx0c3NpemVfdCBjZ2lkX2xlbiA9IGNnaWQgPyBzaXplb2YoY2dpZCkgOiAwO1xcbiAzMjQ6XFx0XFx0Y29uc3QgZW51bSByZXFfb3Agb3AgPSBvcGYgXFx1MDAyNiBSRVFfT1BfTUFTSztcXG4gMzI1OlxcdFxcdHNpemVfdCB0cmFjZV9sZW47XFxuIDMyNjpcXHRcXG4gMzI3OlxcdFxcdGlmICh1bmxpa2VseShidC1cXHUwMDNldHJhY2Vfc3RhdGUgIT0gQmxrdHJhY2VfcnVubmluZyBcXHUwMDI2XFx1MDAyNiAhYmxrX3RyYWNlcikpXFxuIDMyODpcXHRcXHRcXHRyZXR1cm47XFxuIDMyOTpcXHRcXG4gMzMwOlxcdFxcdHdoYXQgfD0gZGRpcl9hY3Rbb3BfaXNfd3JpdGUob3ApID8gV1JJVEUgOiBSRUFEXTtcXG4gMzMxOlxcdFxcdHdoYXQgfD0gTUFTS19UQ19CSVQob3BmLCBTWU5DKTtcXG4gMzMyOlxcdFxcdHdoYXQgfD0gTUFTS19UQ19CSVQob3BmLCBSQUhFQUQpO1xcbiAzMzM6XFx0XFx0d2hhdCB8PSBNQVNLX1RDX0JJVChvcGYsIE1FVEEpO1xcbiAzMzQ6XFx0XFx0d2hhdCB8PSBNQVNLX1RDX0JJVChvcGYsIFBSRUZMVVNIKTtcXG4gMzM1OlxcdFxcdHdoYXQgfD0gTUFTS19UQ19CSVQob3BmLCBGVUEpO1xcbiAzMzY6XFx0XFxuIDMzNzpcXHRcXHRzd2l0Y2ggKG9wKSB7XFxuIDMzODpcXHRcXHRjYXNlIFJFUV9PUF9ESVNDQVJEOlxcbiAzMzk6XFx0XFx0Y2FzZSBSRVFfT1BfU0VDVVJFX0VSQVNFOlxcbiAzNDA6XFx0XFx0XFx0d2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19ESVNDQVJEKTtcXG4gMzQxOlxcdFxcdFxcdGJyZWFrO1xcbiAzNDI6XFx0XFx0Y2FzZSBSRVFfT1BfRkxVU0g6XFxuIDM0MzpcXHRcXHRcXHR3aGF0IHw9IEJMS19UQ19BQ1QoQkxLX1RDX0ZMVVNIKTtcXG4gMzQ0OlxcdFxcdFxcdGJyZWFrO1xcbiAzNDU6XFx0XFx0Y2FzZSBSRVFfT1BfWk9ORV9BUFBFTkQ6XFxuIDM0NjpcXHRcXHRcXHR3aGF0IHw9IEJMS19UQ19BQ1QoQkxLX1RDX1pPTkVfQVBQRU5EKTtcXG4gMzQ3OlxcdFxcdFxcdGJyZWFrO1xcbiAzNDg6XFx0XFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVDpcXG4gMzQ5OlxcdFxcdFxcdHdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfWk9ORV9SRVNFVCk7XFxuIDM1MDpcXHRcXHRcXHRicmVhaztcXG4gMzUxOlxcdFxcdGNhc2UgUkVRX09QX1pPTkVfUkVTRVRfQUxMOlxcbiAzNTI6XFx0XFx0XFx0d2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19aT05FX1JFU0VUX0FMTCk7XFxuIDM1MzpcXHRcXHRcXHRicmVhaztcXG4gMzU0OlxcdFxcdGNhc2UgUkVRX09QX1pPTkVfRklOSVNIOlxcbiAzNTU6XFx0XFx0XFx0d2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19aT05FX0ZJTklTSCk7XFxuIDM1NjpcXHRcXHRcXHRicmVhaztcXG4gMzU3OlxcdFxcdGNhc2UgUkVRX09QX1pPTkVfT1BFTjpcXG4gMzU4OlxcdFxcdFxcdHdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfWk9ORV9PUEVOKTtcXG4gMzU5OlxcdFxcdFxcdGJyZWFrO1xcbiAzNjA6XFx0XFx0Y2FzZSBSRVFfT1BfWk9ORV9DTE9TRTpcXG4gMzYxOlxcdFxcdFxcdHdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfWk9ORV9DTE9TRSk7XFxuIDM2MjpcXHRcXHRcXHRicmVhaztcXG4gMzYzOlxcdFxcdGNhc2UgUkVRX09QX1dSSVRFX1pFUk9FUzpcXG4gMzY0OlxcdFxcdFxcdHdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfV1JJVEVfWkVST0VTKTtcXG4gMzY1OlxcdFxcdFxcdGJyZWFrO1xcbiAzNjY6XFx0XFx0ZGVmYXVsdDpcXG4gMzY3OlxcdFxcdFxcdGJyZWFrO1xcbiAzNjg6XFx0XFx0fVxcbiAzNjk6XFx0XFxuIDM3MDpcXHRcXHQvKiBEcm9wIHRyYWNlIGV2ZW50cyBmb3Igem9uZSBvcGVyYXRpb25zIHdpdGggYmxrdHJhY2UgdjEgKi9cXG4gMzcxOlxcdFxcdGlmIChidC1cXHUwMDNldmVyc2lvbiA9PSAxIFxcdTAwMjZcXHUwMDI2ICh3aGF0IFxcdTAwM2VcXHUwMDNlIEJMS19UQ19TSElGVCkgXFx1MDAzZSBCTEtfVENfRU5EX1YxKSB7XFxuIDM3MjpcXHRcXHRcXHRwcl9kZWJ1Z19yYXRlbGltaXRlZChcXFwiYmxrdHJhY2UgdjEgY2Fubm90IHRyYWNlIHpvbmUgb3BlcmF0aW9uIDB4JWxseFxcXFxuXFxcIixcXG4gMzczOlxcdFxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nIGxvbmcpd2hhdCk7XFxuIDM3NDpcXHRcXHRcXHRyZXR1cm47XFxuIDM3NTpcXHRcXHR9XFxuIDM3NjpcXHRcXG4gMzc3OlxcdFxcdGlmIChjZ2lkKVxcbiAzNzg6XFx0XFx0XFx0d2hhdCB8PSBfX0JMS19UQV9DR1JPVVA7XFxuIDM3OTpcXHRcXG4gMzgwOlxcdFxcdHBpZCA9IHRzay1cXHUwMDNlcGlkO1xcbiAzODE6XFx0XFx0aWYgKGFjdF9sb2dfY2hlY2soYnQsIHdoYXQsIHNlY3RvciwgcGlkKSlcXG4gMzgyOlxcdFxcdFxcdHJldHVybjtcXG4gMzgzOlxcdFxcdGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XFxuIDM4NDpcXHRcXG4gMzg1OlxcdFxcdGlmIChibGtfdHJhY2VyKSB7XFxuIDM4NjpcXHRcXHRcXHRidWZmZXIgPSBibGtfdHItXFx1MDAzZWFycmF5X2J1ZmZlci5idWZmZXI7XFxuIDM4NzpcXHRcXHRcXHR0cmFjZV9jdHggPSB0cmFjaW5nX2dlbl9jdHhfZmxhZ3MoMCk7XFxuIDM4ODpcXHRcXHRcXHQvKlxcbiAzODk6XFx0XFx0XFx0ICogVGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciBhbHdheXMgdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpXFxuIDM5MDpcXHRcXHRcXHQgKiBmb3JtYXQ7IHRoZSBmdHJhY2UgcmVhZGVycyBwYXJzZSBvbmx5IHRoYXQuIGJ0LVxcdTAwM2V2ZXJzaW9uXFxuIDM5MTpcXHRcXHRcXHQgKiBkZXNjcmliZXMganVzdCB0aGUgcmVsYXkvY2xhc3NpYyBibGt0cmFjZSByZWNvcmQgZm9ybWF0LlxcbiAzOTI6XFx0XFx0XFx0ICogUmVjb3JkaW5nIGEgdjEtc2l6ZWQgZXZlbnQgaGVyZSB3b3VsZCBzaGlmdCBwZHVfc3RhcnQoKSAxNlxcbiAzOTM6XFx0XFx0XFx0ICogYnl0ZXMgcGFzdCB0aGUgUERVIGFuZCBtYWtlIGJsa19sb2dfcmVtYXAoKSByZWFkIHBhc3QgdGhlXFxuIDM5NDpcXHRcXHRcXHQgKiBldmVudCAoYSB1c2UtYWZ0ZXItZnJlZSBvbiBjb25jdXJyZW50IGJ1ZmZlciByZXNpemUpLCBhbmQgdjFcXG4gMzk1OlxcdFxcdFxcdCAqIGNhbm5vdCByZXByZXNlbnQgdGhlIG5ld2VyIDY0LWJpdCB6b25lIGFjdGlvbnMgYW55d2F5LlxcbiAzOTY6XFx0XFx0XFx0ICovXFxuIDM5NzpcXHRcXHRcXHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuO1xcbiAzOTg6XFx0XFx0XFx0ZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQkxLLFxcbiAzOTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICB0cmFjZV9sZW4sIHRyYWNlX2N0eCk7XFxuIDQwMDpcXHRcXHRcXHRpZiAoIWV2ZW50KVxcbiA0MDE6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA0MDI6XFx0XFxuIDQwMzpcXHRcXHRcXHR0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpO1xcbiA0MDQ6XFx0XFx0XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcXG4gNDA1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcXG4gNDA2OlxcdFxcdFxcdFxcdFxcdCAgICAgICB3aGF0LCBidC1cXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXFxuIDQwNzpcXHRcXHRcXHRcXHRcXHQgICAgICAgcGR1X2RhdGEsIHBkdV9sZW4pO1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRcXHRcXHR0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChibGtfdHIsIGJ1ZmZlciwgZXZlbnQsIHRyYWNlX2N0eCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUyOjIyLjEyMTc1OTE0OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjE0NDc5OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCBhcyB0aG91Z2ggdGhleSB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYGJsa190cmFjZV9zZXR1cF9xdWV1ZWAqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBiZWVuIGV4YW1pbmluZyB0aGUgYmxvY2sgdHJhY2UgaW5mcmFzdHJ1Y3R1cmUsIGFuZCBub3cgSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIExldCdzIG5vdCBqdXN0IHRhbGsgYWJvdXQgdGhlICp3aGF0KiwgYnV0IGFsc28gdGhlICpob3cqLiBTcGVjaWZpY2FsbHksIEknbSBnZXR0aW5nIGN1cmlvdXMgYWJvdXQgdGhlIGlubmVyIHdvcmtpbmdzIG9mIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaGFwcGVucyB1bmRlciB0aGUgaG9vZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBJJ20gaW1hZ2luaW5nIHRoaXMgaXMgd2hlcmUgdGhlIHRyYWNlcG9pbnQgc2V0dXAgZm9yIGEgc3BlY2lmaWMgYmxvY2sgcXVldWUgZ2V0cyBvcmNoZXN0cmF0ZWQuIEknbSBleHBlY3RpbmcgdGhpcyBpcyBnb2luZyB0byBiZSB3aGVyZSBhbGwgdGhlIGltcG9ydGFudCBwYXJhbWV0ZXJzIGFyZSBpbml0aWFsaXplZCBhbmQgcmVnaXN0ZXJlZC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgdGhlIHRyYWNpbmcgc3RhcnRzLiBUaW1lIHRvIGRpc3NlY3QgdGhlIGltcGxlbWVudGF0aW9uLCBsaW5lIGJ5IGxpbmUuIExldCdzIHNlZSBob3cgdGhpcyB0aGluZyAqcmVhbGx5KiB0aWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MjgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUyOjI0LjczNjI0MTk1NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2MDpcXHRzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4xODYxOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbjE4NjI6XFx0e1xcbjE4NjM6XFx0XFx0c3RydWN0IGJsa190cmFjZSAqYnQgPSBOVUxMO1xcbjE4NjQ6XFx0XFx0aW50IHJldCA9IC1FTk9NRU07XFxuMTg2NTpcXHRcXG4xODY2OlxcdFxcdGJ0ID0ga3phbGxvY19vYmooKmJ0KTtcXG4xODY3OlxcdFxcdGlmICghYnQpXFxuMTg2ODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xODY5OlxcdFxcbjE4NzA6XFx0XFx0YnQtXFx1MDAzZW1zZ19kYXRhID0gX19hbGxvY19wZXJjcHUoQkxLX1ROX01BWF9NU0csIF9fYWxpZ25vZl9fKGNoYXIpKTtcXG4xODcxOlxcdFxcdGlmICghYnQtXFx1MDAzZW1zZ19kYXRhKVxcbjE4NzI6XFx0XFx0XFx0Z290byBmcmVlX2J0O1xcbjE4NzM6XFx0XFxuMTg3NDpcXHRcXHRidC1cXHUwMDNlZGV2ID0gYmRldi1cXHUwMDNlYmRfZGV2O1xcbjE4NzU6XFx0XFx0YnQtXFx1MDAzZWFjdF9tYXNrID0gKHUxNiktMTtcXG4xODc2OlxcdFxcdC8qXFxuMTg3NzpcXHRcXHQgKiBUaGlzIHN5c2ZzLWVuYWJsZWQgcGF0aCBmZWVkcyB0aGUgZnRyYWNlIGJsayB0cmFjZXIsIHdoaWNoIGFsd2F5c1xcbjE4Nzg6XFx0XFx0ICogdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC4gSW5pdGlhbGl6ZSB0aGUgdmVyc2lvbiBzbyBpdCBpc1xcbjE4Nzk6XFx0XFx0ICogbmV2ZXIgbGVmdCBkYW5nbGluZyBhcyAwIGZvciBmdXR1cmUgY29uc3VtZXJzLlxcbjE4ODA6XFx0XFx0ICovXFxuMTg4MTpcXHRcXHRidC1cXHUwMDNldmVyc2lvbiA9IDI7XFxuMTg4MjpcXHRcXG4xODgzOlxcdFxcdGJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpO1xcbjE4ODQ6XFx0XFxuMTg4NTpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIocS1cXHUwMDNlYmxrX3RyYWNlLCBidCk7XFxuMTg4NjpcXHRcXHRnZXRfcHJvYmVfcmVmKCk7XFxuMTg4NzpcXHRcXHRyZXR1cm4gMDtcXG4xODg4OlxcdFxcbjE4ODk6XFx0ZnJlZV9idDpcXG4xODkwOlxcdFxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG4xODkxOlxcdFxcdHJldHVybiByZXQ7XFxuMTg5MjpcXHR9XFxuMTg5MzpcXHRcXG4xODk0OlxcdC8qXFxuMTg5NTpcXHQgKiBzeXNmcyBpbnRlcmZhY2UgdG8gZW5hYmxlIGFuZCBjb25maWd1cmUgdHJhY2luZ1xcbjE4OTY6XFx0ICovXFxuMTg5NzpcXHRcXG4xODk4OlxcdHN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbjE4OTk6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MjoyNC43MzY0MDM1NTZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NDQzNjgwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGBibGt0cmFjZS5jYCdzIFZlcnNpb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGJhY2sgaW50byBgYmxrdHJhY2UuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlICplbHNlKiBkb2VzIHRoaXMgYGJ0LVx1MDAzZXZlcnNpb25gIHZhcmlhYmxlIHBvcCB1cCwgb3Igd2hlcmUgYXJlIHRoZSB0cmFjZSByZWNvcmRzIGJlaW5nIGhhbmRsZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGF0IHZlcnNpb24/XCIgSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiBob3cgaXQncyBiZWluZyB1c2VkLiBTbywgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoIGlzIHRvIGRvIGEgdGFyZ2V0ZWQgc2VhcmNoLiBJJ2xsIGxhdW5jaCBhIHF1ZXJ5IGZvciBib3RoIGBidC1cdTAwM2V2ZXJzaW9uYCBhbmQsIGp1c3QgaW4gY2FzZSwgYSBtb3JlIGdlbmVyYWwgYHZlcnNpb25gIHRocm91Z2hvdXQgYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYC4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgcXVpY2tseSBwaW5wb2ludCB0aGUga2V5IGFyZWFzIHRvIHVuZGVyc3RhbmQgdGhlIHZlcnNpb25pbmcgbG9naWMgd2l0aGluIHRoZSB0cmFjaW5nIHN5c3RlbSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHRyYWNlIHJlY29yZHMgdGhlbXNlbHZlcy4gTGV0J3Mgc2VlIHdoYXQgY29tZXMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MjoyNi43MjA4NDM0MTRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0OTkxOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZlcnNpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTU2PXN0YXRpYyB2b2lkIHJlbGF5X2Jsa3RyYWNlX2V2ZW50KHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTYwLXtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNjE6XFx0aWYgKGJ0LVxcdTAwM2V2ZXJzaW9uID09IDIpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTYyLVxcdFxcdHJldHVybiByZWxheV9ibGt0cmFjZV9ldmVudDIoYnQsIHNlcXVlbmNlLCBwaWQsIGNwdSwgc2VjdG9yLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MzEwPXN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zNzAtXFx0LyogRHJvcCB0cmFjZSBldmVudHMgZm9yIHpvbmUgb3BlcmF0aW9ucyB3aXRoIGJsa3RyYWNlIHYxICovXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MzcxOlxcdGlmIChidC1cXHUwMDNldmVyc2lvbiA9PSAxIFxcdTAwMjZcXHUwMDI2ICh3aGF0IFxcdTAwM2VcXHUwMDNlIEJMS19UQ19TSElGVCkgXFx1MDAzZSBCTEtfVENfRU5EX1YxKSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzcyLVxcdFxcdHByX2RlYnVnX3JhdGVsaW1pdGVkKFxcXCJibGt0cmFjZSB2MSBjYW5ub3QgdHJhY2Ugem9uZSBvcGVyYXRpb24gMHglbGx4XFxcXG5cXFwiLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzg5LVxcdFxcdCAqIFRoZSBmdHJhY2UgcmluZyBidWZmZXIgYWx3YXlzIHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjM5MDpcXHRcXHQgKiBmb3JtYXQ7IHRoZSBmdHJhY2UgcmVhZGVycyBwYXJzZSBvbmx5IHRoYXQuIGJ0LVxcdTAwM2V2ZXJzaW9uXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzkxLVxcdFxcdCAqIGRlc2NyaWJlcyBqdXN0IHRoZSByZWxheS9jbGFzc2ljIGJsa3RyYWNlIHJlY29yZCBmb3JtYXQuXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz02OTA9c3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjY5MTpcXHRcXHRcXHRcXHQgICAgIGNoYXIgKm5hbWUsIGludCB2ZXJzaW9uLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY5Mi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBibGtfdHJhY2UgKmJ0LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzAzLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjcwNDpcXHRidC1cXHUwMDNldmVyc2lvbiA9IHZlcnNpb247XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzA1LVxcdGJ0LVxcdTAwM2VhY3RfbWFzayA9IGJ1dHMtXFx1MDAzZWFjdF9tYXNrO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTAzND1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3Qodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDM5LVxcdGJ0ID0gcmN1X2RlcmVmZXJlbmNlKHJxLVxcdTAwM2VxLVxcdTAwM2VibGtfdHJhY2UpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwNDA6XFx0aWYgKGxpa2VseSghYnQpIHx8IGJ0LVxcdTAwM2V2ZXJzaW9uIFxcdTAwM2MgMikge1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwNDEtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMTQwPXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2Vfem9uZV9wbHVnKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTQ3LVxcdGJ0ID0gcmN1X2RlcmVmZXJlbmNlKHEtXFx1MDAzZWJsa190cmFjZSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTE0ODpcXHRpZiAoYnQgXFx1MDAyNlxcdTAwMjYgYnQtXFx1MDAzZXZlcnNpb24gXFx1MDAzZT0gMilcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTQ5LVxcdFxcdF9fYmxrX2FkZF90cmFjZShidCwgc2VjdG9yLCBzZWN0b3JzIFxcdTAwM2NcXHUwMDNjIFNFQ1RPUl9TSElGVCwgMCxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExNTY9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV96b25lX3VucGx1Zyh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE2My1cXHRidCA9IHJjdV9kZXJlZmVyZW5jZShxLVxcdTAwM2VibGtfdHJhY2UpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExNjQ6XFx0aWYgKGJ0IFxcdTAwMjZcXHUwMDI2IGJ0LVxcdTAwM2V2ZXJzaW9uIFxcdTAwM2U9IDIpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE2NS1cXHRcXHRfX2Jsa19hZGRfdHJhY2UoYnQsIHNlY3Rvciwgc2VjdG9ycyBcXHUwMDNjXFx1MDAzYyBTRUNUT1JfU0hJRlQsIDAsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xODYwPXN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg3Ny1cXHQgKiBUaGlzIHN5c2ZzLWVuYWJsZWQgcGF0aCBmZWVkcyB0aGUgZnRyYWNlIGJsayB0cmFjZXIsIHdoaWNoIGFsd2F5c1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4Nzg6XFx0ICogdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC4gSW5pdGlhbGl6ZSB0aGUgdmVyc2lvbiBzbyBpdCBpc1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4NzktXFx0ICogbmV2ZXIgbGVmdCBkYW5nbGluZyBhcyAwIGZvciBmdXR1cmUgY29uc3VtZXJzLlxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4ODAtXFx0ICovXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTg4MTpcXHRidC1cXHUwMDNldmVyc2lvbiA9IDI7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg4Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTI6MjYuODA1ODQxODEyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NDA0NDE1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBEb2Vzbid0IFdhcnJhbnQgSXQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIHRlbGxzIG1lIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgc3VidGxlLCBidXQgY3JpdGljYWwsIGZsYXcgaW4gdGhlIGJsb2NrIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBjb3JlIGlzc3VlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB3aGF0J3Mgd3JpdHRlbiB0byB0aGUgZnRyYWNlIHJpbmcgYnVmZmVyIGFuZCB3aGF0IHRoZSBjb25zdW1lcnMgKmV4cGVjdCogdG8gZmluZCB0aGVyZS4gUHJldmlvdXNseSwgYF9fYmxrX2FkZF90cmFjZSgpYCBjb3VsZCB3cml0ZSB2MSBgYmxrX2lvX3RyYWNlYCBldmVudHMsIGJ1dCB0aGUgY29uc3VtZXJzLCBsaWtlIGBibGtfbG9nX3JlbWFwYCwgd2VyZSBidWlsdCBleHBlY3RpbmcgdjIgYGJsa19pb190cmFjZTJgIGV2ZW50cy4gVGhpcyBkaWZmZXJlbmNlIGluIHN0cnVjdHVyZSBzaXplcyBsZWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcyBpbiB0aGUgcmluZyBidWZmZXIsIGVzc2VudGlhbGx5IHJlYWRpbmcgcGFzdCB0aGUgaW50ZW5kZWQgZXZlbnQgYm91bmRhcnksIGFuZCB0aGF0IGNyZWF0ZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCBhIHJlYWwgcHJvYmxlbS5cblxuTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyBpZiB0aGlzIGludHJvZHVjZXMgYSBLTVNBTi1yZWxldmFudCBwcm9ibGVtLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCdzIGZpeCBpbnZvbHZlcyB1bmNvbmRpdGlvbmFsbHkgd3JpdGluZyBgc3RydWN0IGJsa19pb190cmFjZTJgIGV2ZW50cyB0byB0aGUgZnRyYWNlIGJ1ZmZlci4gQWxzbywgYGJ0LVx1MDAzZXZlcnNpb25gIGlzIGV4cGxpY2l0bHkgc2V0IHRvIDIgZHVyaW5nIHF1ZXVlIHNldHVwIHdoaWNoLCBjcml0aWNhbGx5LCBlbGltaW5hdGVzIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJpc2tzLiBUaGUgbWVtb3J5IGFsbG9jYXRpb24gKGBremFsbG9jX29iamAsIGFuZCBgdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgpYCkgYW5kIGluaXRpYWxpemF0aW9uIChgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmApIHBhcnRzIG9mIHRoZSBjb2RlIGFyZSByb2J1c3QuXG5cbkJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgS01TQU4gdHJpZ2dlcnMsIHRoaXMgcGF0Y2ggZG9lc24ndCBtZWV0IHRoZSBjcml0ZXJpYS4gSXQgZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCB1c2UtYWZ0ZXItZnJlZSwgcHJvYmxlbXMgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQgYnVmZmVyIGNoZWNrcyBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgc3RydWN0dXJlIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB0aGF0IGFyZSBicmFuY2hlZCBvbi4gSW4gZmFjdCwgaXQgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgdmVyc2lvbiBmaWVsZC4gVGhlcmVmb3JlLCB0aGVyZSdzIG5vIG5lZWQgdG8gZW5hYmxlIEtNU0FOIGhlcmUuIFRoaXMgaXMgYSBzb2xpZCwgY2xlYW4gZml4LCBhbmQgS0FTQU4gc2hvdWxkIGhhbmRsZSB0aGUgcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NTgsIk91dHB1dFRva2VucyI6MjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MjozMy42NDYyODgwMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBmb3JtYXQgbWlzbWF0Y2ggYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgLyB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGZ0cmFjZSBibG9jayB0cmFjaW5nIHN1YnN5c3RlbSAoYmxrdHJhY2UpLiBQcmV2aW91c2x5LCBpZiBidC1cXHUwMDNldmVyc2lvbiB3YXMgMSBvciAwLCBfX2Jsa19hZGRfdHJhY2UoKSBjb3VsZCBhbGxvY2F0ZSBhbmQgd3JpdGUgYSBzbWFsbGVyIHYxIChibGtfaW9fdHJhY2UpIGV2ZW50IGludG8gdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB3aGlsZSBmdHJhY2UgY29uc3VtZXJzIHBhcnNlZCBlbnRyaWVzIHN0cmljdGx5IGFzIHYyIChibGtfaW9fdHJhY2UyKSwgcmVzdWx0aW5nIGluIHBkdV9zdGFydCgpIGluZGV4aW5nIG91dC1vZi1ib3VuZHMgYmV5b25kIHRoZSByZXNlcnZlZCBldmVudCBidWZmZXIuXFxuXFxuVGhpcyBjbGFzcyBvZiBidWcgKG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgdXNlLWFmdGVyLWZyZWUpIGlzIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgZnRyYWNlIHBhdGggdG8gdW5jb25kaXRpb25hbGx5IHJlY29yZCB2MiBldmVudHMgb2Ygc2l6ZSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuIGFuZCBpbml0aWFsaXplcyBidC1cXHUwMDNldmVyc2lvbiB0byAyIGluIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpICh3aGVyZSB0aGUgbWVtb3J5IGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGt6YWxsb2Nfb2JqKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNvbHZlcyBhIGZvcm1hdCBtaXNtYXRjaCBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCAvIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgZnRyYWNlIGJsb2NrIHRyYWNpbmcgc3Vic3lzdGVtIChibGt0cmFjZSkuIFByZXZpb3VzbHksIGlmIGJ0LVxcdTAwM2V2ZXJzaW9uIHdhcyAxIG9yIDAsIF9fYmxrX2FkZF90cmFjZSgpIGNvdWxkIGFsbG9jYXRlIGFuZCB3cml0ZSBhIHNtYWxsZXIgdjEgKGJsa19pb190cmFjZSkgZXZlbnQgaW50byB0aGUgZnRyYWNlIHJpbmcgYnVmZmVyIHdoaWxlIGZ0cmFjZSBjb25zdW1lcnMgcGFyc2VkIGVudHJpZXMgc3RyaWN0bHkgYXMgdjIgKGJsa19pb190cmFjZTIpLCByZXN1bHRpbmcgaW4gcGR1X3N0YXJ0KCkgaW5kZXhpbmcgb3V0LW9mLWJvdW5kcyBiZXlvbmQgdGhlIHJlc2VydmVkIGV2ZW50IGJ1ZmZlci5cXG5cXG5UaGlzIGNsYXNzIG9mIGJ1ZyAob3V0LW9mLWJvdW5kcyByZWFkIGFuZCB1c2UtYWZ0ZXItZnJlZSkgaXMgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBmdHJhY2UgcGF0aCB0byB1bmNvbmRpdGlvbmFsbHkgcmVjb3JkIHYyIGV2ZW50cyBvZiBzaXplIHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgKyBwZHVfbGVuICsgY2dpZF9sZW4gYW5kIGluaXRpYWxpemVzIGJ0LVxcdTAwM2V2ZXJzaW9uIHRvIDIgaW4gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCkgKHdoZXJlIHRoZSBtZW1vcnkgaXMgYWxyZWFkeSB6ZXJvLWFsbG9jYXRlZCB2aWEga3phbGxvY19vYmopLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j56p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 04:42:05 +0000 UTC FinishedAt: 2026-09-05 05:52:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_IO_TRACE", "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_IO_TRACE", "BLOCK" ], "series_id": "6eefcd0a-6495-4ffa-bf26-cd9312cebcf7" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__blk_add_trace", "blk_trace_setup_queue", "record_blktrace_event2", "sysfs_blk_trace_attr_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfSU9fVFJBQ0UmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2Jsa19hZGRfdHJhY2UmIzM0OywKICAgICYjMzQ7YmxrX3RyYWNlX3NldHVwX3F1ZXVlJiMzNDssCiAgICAmIzM0O3JlY29yZF9ibGt0cmFjZV9ldmVudDImIzM0OywKICAgICYjMzQ7c3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNvbHZlcyBhIGZvcm1hdCBtaXNtYXRjaCBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCAvIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgZnRyYWNlIGJsb2NrIHRyYWNpbmcgc3Vic3lzdGVtIChibGt0cmFjZSkuIFByZXZpb3VzbHksIGlmIGJ0LVx1MDAzZXZlcnNpb24gd2FzIDEgb3IgMCwgX19ibGtfYWRkX3RyYWNlKCkgY291bGQgYWxsb2NhdGUgYW5kIHdyaXRlIGEgc21hbGxlciB2MSAoYmxrX2lvX3RyYWNlKSBldmVudCBpbnRvIHRoZSBmdHJhY2UgcmluZyBidWZmZXIgd2hpbGUgZnRyYWNlIGNvbnN1bWVycyBwYXJzZWQgZW50cmllcyBzdHJpY3RseSBhcyB2MiAoYmxrX2lvX3RyYWNlMiksIHJlc3VsdGluZyBpbiBwZHVfc3RhcnQoKSBpbmRleGluZyBvdXQtb2YtYm91bmRzIGJleW9uZCB0aGUgcmVzZXJ2ZWQgZXZlbnQgYnVmZmVyLlxuXG5UaGlzIGNsYXNzIG9mIGJ1ZyAob3V0LW9mLWJvdW5kcyByZWFkIGFuZCB1c2UtYWZ0ZXItZnJlZSkgaXMgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBmdHJhY2UgcGF0aCB0byB1bmNvbmRpdGlvbmFsbHkgcmVjb3JkIHYyIGV2ZW50cyBvZiBzaXplIHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgJiM0MzsgcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbiBhbmQgaW5pdGlhbGl6ZXMgYnQtXHUwMDNldmVyc2lvbiB0byAyIGluIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpICh3aGVyZSB0aGUgbWVtb3J5IGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGt6YWxsb2Nfb2JqKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIHRyYWNlIHN1YnN5c3RlbSAoa2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMpLCBzcGVjaWZpY2FsbHkgaW4gX19ibGtfYWRkX3RyYWNlKCkgYW5kIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB1bmNvbmRpdGlvbmFsbHkgdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGxheW91dCwgZWxpbWluYXRpbmcgcG90ZW50aWFsIGJ1ZmZlciBtaXNtYXRjaGVzIGFuZCBvdXQtb2YtYm91bmRzIHJlYWRzLCBhbmQgaW5pdGlhbGl6ZXMgYnQtXHUwMDNldmVyc2lvbiBmb3Igc3lzZnMtY29uZmlndXJlZCBxdWV1ZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBibG9jayBsYXllciB0cmFjaW5nIGxvZ2ljIGFjY2Vzc2libGUgdmlhIHN5c2ZzIGFuZCBibG9jayBJL08gaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjFmNzg4N2ZmZmFhZTY1YjE3ZjE2MTFhOWUwYWRlODZhMWE5ZDlhZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMDU6NTE6MDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xuaW5kZXggOGNkMjUyMGI0Yzk5ZS4uYWUwMTA5NjljMTQ0MyAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xuQEAgLTM4NSw2NiAmIzQzOzM4NSwyNiBAQCBzdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxuIFx0aWYgKGJsa190cmFjZXIpIHtcbiBcdFx0YnVmZmVyID0gYmxrX3RyLVx1MDAzZWFycmF5X2J1ZmZlci5idWZmZXI7XG4gXHRcdHRyYWNlX2N0eCA9IHRyYWNpbmdfZ2VuX2N0eF9mbGFncygwKTtcbi1cdFx0c3dpdGNoIChidC1cdTAwM2V2ZXJzaW9uKSB7XG4tXHRcdGNhc2UgMTpcbi1cdFx0XHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZSk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgMjpcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIGZ0cmFjZSBhbHdheXMgdXNlcyB2MiAoYmxrX2lvX3RyYWNlMikgZm9ybWF0LlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogRm9yIHN5c2ZzLWVuYWJsZWQgdHJhY2luZyBwYXRoIChlbmFibGVkIHZpYVxuLVx0XHRcdCAqIC9zeXMvYmxvY2svREVWL3RyYWNlL2VuYWJsZSksIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpXG4tXHRcdFx0ICogbmV2ZXIgaW5pdGlhbGl6ZXMgYnQtXHUwMDNldmVyc2lvbiwgbGVhdmluZyBpdCAwIGZyb21cbi1cdFx0XHQgKiBremFsbG9jKCkuIFdlIG11c3QgaGFuZGxlIHZlcnNpb249PTAgc2FmZWx5IGhlcmUuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCB0byBlbnN1cmUgd2UgbmV2ZXIgaGl0IHRoZVxuLVx0XHRcdCAqIG9sZCBidWcgd2hlcmUgZGVmYXVsdCBzZXQgdHJhY2VfbGVuPTAsIGNhdXNpbmdcbi1cdFx0XHQgKiBidWZmZXIgdW5kZXJmbG93IGFuZCBtZW1vcnkgY29ycnVwdGlvbi5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIEFsd2F5cyB1c2UgdjIgZm9ybWF0IGZvciBmdHJhY2UgYW5kIG5vcm1hbGl6ZVxuLVx0XHRcdCAqIGJ0LVx1MDAzZXZlcnNpb24gdG8gMiB3aGVuIHVuaW5pdGlhbGl6ZWQuXG4tXHRcdFx0ICovXG4tXHRcdFx0dHJhY2VfbGVuID0gc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKTtcbi1cdFx0XHRpZiAoYnQtXHUwMDNldmVyc2lvbiA9PSAwKVxuLVx0XHRcdFx0YnQtXHUwMDNldmVyc2lvbiA9IDI7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0dHJhY2VfbGVuICYjNDM7PSBwZHVfbGVuICYjNDM7IGNnaWRfbGVuO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFRoZSBmdHJhY2UgcmluZyBidWZmZXIgYWx3YXlzIHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKVxuJiM0MztcdFx0ICogZm9ybWF0OyB0aGUgZnRyYWNlIHJlYWRlcnMgcGFyc2Ugb25seSB0aGF0LiBidC1cdTAwM2V2ZXJzaW9uXG4mIzQzO1x0XHQgKiBkZXNjcmliZXMganVzdCB0aGUgcmVsYXkvY2xhc3NpYyBibGt0cmFjZSByZWNvcmQgZm9ybWF0LlxuJiM0MztcdFx0ICogUmVjb3JkaW5nIGEgdjEtc2l6ZWQgZXZlbnQgaGVyZSB3b3VsZCBzaGlmdCBwZHVfc3RhcnQoKSAxNlxuJiM0MztcdFx0ICogYnl0ZXMgcGFzdCB0aGUgUERVIGFuZCBtYWtlIGJsa19sb2dfcmVtYXAoKSByZWFkIHBhc3QgdGhlXG4mIzQzO1x0XHQgKiBldmVudCAoYSB1c2UtYWZ0ZXItZnJlZSBvbiBjb25jdXJyZW50IGJ1ZmZlciByZXNpemUpLCBhbmQgdjFcbiYjNDM7XHRcdCAqIGNhbm5vdCByZXByZXNlbnQgdGhlIG5ld2VyIDY0LWJpdCB6b25lIGFjdGlvbnMgYW55d2F5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICYjNDM7IHBkdV9sZW4gJiM0MzsgY2dpZF9sZW47XG4gXHRcdGV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSyxcbiBcdFx0XHRcdFx0XHQgIHRyYWNlX2xlbiwgdHJhY2VfY3R4KTtcbiBcdFx0aWYgKCFldmVudClcbiBcdFx0XHRyZXR1cm47XG4gXG4gXHRcdHRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3VycmVudCk7XG4tXHRcdHN3aXRjaCAoYnQtXHUwMDNldmVyc2lvbikge1xuLVx0XHRjYXNlIDE6XG4tXHRcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLFxuLVx0XHRcdFx0XHQgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcbi1cdFx0XHRcdFx0ICAgICAgd2hhdCwgYnQtXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXG4tXHRcdFx0XHRcdCAgICAgIHBkdV9kYXRhLCBwZHVfbGVuKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAyOlxuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVXNlIHYyIHJlY29yZGluZyBmdW5jdGlvbiAocmVjb3JkX2Jsa3RyYWNlX2V2ZW50Milcbi1cdFx0XHQgKiB3aGljaCB3cml0ZXMgYmxrX2lvX3RyYWNlMiBzdHJ1Y3R1cmUgd2l0aCBjb3JyZWN0XG4tXHRcdFx0ICogZmllbGQgbGF5b3V0OlxuLVx0XHRcdCAqICAgLSAzMi1iaXQgcGlkIGF0IG9mZnNldCAyOFxuLVx0XHRcdCAqICAgLSA2NC1iaXQgYWN0aW9uIGF0IG9mZnNldCAzMlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgaGFuZGxlcyB2ZXJzaW9uPT0wIGNhc2Vcbi1cdFx0XHQgKiAoZnJvbSBzeXNmcyBwYXRoKSwgZW5zdXJpbmcgd2UgYWx3YXlzIHVzZSBjb3JyZWN0XG4tXHRcdFx0ICogdjIgcmVjb3JkaW5nIGZ1bmN0aW9uIHRvIG1hdGNoIHRoZSB2MiBidWZmZXJcbi1cdFx0XHQgKiBhbGxvY2F0ZWQgYWJvdmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcbi1cdFx0XHRcdFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxuLVx0XHRcdFx0XHQgICAgICAgd2hhdCwgYnQtXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXG4tXHRcdFx0XHRcdCAgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbiYjNDM7XHRcdHJlY29yZF9ibGt0cmFjZV9ldmVudDIocmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCksXG4mIzQzO1x0XHRcdFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxuJiM0MztcdFx0XHRcdCAgICAgICB3aGF0LCBidC1cdTAwM2VkZXYsIGVycm9yLCBjZ2lkLCBjZ2lkX2xlbixcbiYjNDM7XHRcdFx0XHQgICAgICAgcGR1X2RhdGEsIHBkdV9sZW4pO1xuIFxuIFx0XHR0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChibGtfdHIsIGJ1ZmZlciwgZXZlbnQsIHRyYWNlX2N0eCk7XG4gXHRcdHJldHVybjtcbkBAIC0xOTEzLDYgJiM0MzsxODczLDEyIEBAIHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuIFxuIFx0YnQtXHUwMDNlZGV2ID0gYmRldi1cdTAwM2ViZF9kZXY7XG4gXHRidC1cdTAwM2VhY3RfbWFzayA9ICh1MTYpLTE7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGlzIHN5c2ZzLWVuYWJsZWQgcGF0aCBmZWVkcyB0aGUgZnRyYWNlIGJsayB0cmFjZXIsIHdoaWNoIGFsd2F5c1xuJiM0MztcdCAqIHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKSBmb3JtYXQuIEluaXRpYWxpemUgdGhlIHZlcnNpb24gc28gaXQgaXNcbiYjNDM7XHQgKiBuZXZlciBsZWZ0IGRhbmdsaW5nIGFzIDAgZm9yIGZ1dHVyZSBjb25zdW1lcnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0YnQtXHUwMDNldmVyc2lvbiA9IDI7XG4gXG4gXHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0lPX1RSQUNFJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19ibGtfYWRkX3RyYWNlJiMzNDssCiAgICAmIzM0O2Jsa190cmFjZV9zZXR1cF9xdWV1ZSYjMzQ7LAogICAgJiMzNDtyZWNvcmRfYmxrdHJhY2VfZXZlbnQyJiMzNDssCiAgICAmIzM0O3N5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayB0cmFjZSBzdWJzeXN0ZW0gKGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jKSwgc3BlY2lmaWNhbGx5IGluIF9fYmxrX2FkZF90cmFjZSgpIGFuZCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBmdHJhY2UgcmluZyBidWZmZXIgdW5jb25kaXRpb25hbGx5IHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKSBsYXlvdXQsIGVsaW1pbmF0aW5nIHBvdGVudGlhbCBidWZmZXIgbWlzbWF0Y2hlcyBhbmQgb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGluaXRpYWxpemVzIGJ0LVx1MDAzZXZlcnNpb24gZm9yIHN5c2ZzLWNvbmZpZ3VyZWQgcXVldWVzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgYmxvY2sgbGF5ZXIgdHJhY2luZyBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxZjc4ODdmZmZhYWU2NWIxN2YxNjExYTllMGFkZTg2YTFhOWQ5YWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCA1IDA1OjUxOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwppbmRleCA4Y2QyNTIwYjRjOTllLi5hZTAxMDk2OWMxNDQzIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwpAQCAtMzg1LDY2ICYjNDM7Mzg1LDI2IEBAIHN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsCiAJaWYgKGJsa190cmFjZXIpIHsKIAkJYnVmZmVyID0gYmxrX3RyLSZndDthcnJheV9idWZmZXIuYnVmZmVyOwogCQl0cmFjZV9jdHggPSB0cmFjaW5nX2dlbl9jdHhfZmxhZ3MoMCk7Ci0JCXN3aXRjaCAoYnQtJmd0O3ZlcnNpb24pIHsKLQkJY2FzZSAxOgotCQkJdHJhY2VfbGVuID0gc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJZGVmYXVsdDoKLQkJCS8qCi0JCQkgKiBmdHJhY2UgYWx3YXlzIHVzZXMgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC4KLQkJCSAqCi0JCQkgKiBGb3Igc3lzZnMtZW5hYmxlZCB0cmFjaW5nIHBhdGggKGVuYWJsZWQgdmlhCi0JCQkgKiAvc3lzL2Jsb2NrL0RFVi90cmFjZS9lbmFibGUpLCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKQotCQkJICogbmV2ZXIgaW5pdGlhbGl6ZXMgYnQtJmd0O3ZlcnNpb24sIGxlYXZpbmcgaXQgMCBmcm9tCi0JCQkgKiBremFsbG9jKCkuIFdlIG11c3QgaGFuZGxlIHZlcnNpb249PTAgc2FmZWx5IGhlcmUuCi0JCQkgKgotCQkJICogRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgdG8gZW5zdXJlIHdlIG5ldmVyIGhpdCB0aGUKLQkJCSAqIG9sZCBidWcgd2hlcmUgZGVmYXVsdCBzZXQgdHJhY2VfbGVuPTAsIGNhdXNpbmcKLQkJCSAqIGJ1ZmZlciB1bmRlcmZsb3cgYW5kIG1lbW9yeSBjb3JydXB0aW9uLgotCQkJICoKLQkJCSAqIEFsd2F5cyB1c2UgdjIgZm9ybWF0IGZvciBmdHJhY2UgYW5kIG5vcm1hbGl6ZQotCQkJICogYnQtJmd0O3ZlcnNpb24gdG8gMiB3aGVuIHVuaW5pdGlhbGl6ZWQuCi0JCQkgKi8KLQkJCXRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMik7Ci0JCQlpZiAoYnQtJmd0O3ZlcnNpb24gPT0gMCkKLQkJCQlidC0mZ3Q7dmVyc2lvbiA9IDI7Ci0JCQlicmVhazsKLQkJfQotCQl0cmFjZV9sZW4gJiM0Mzs9IHBkdV9sZW4gJiM0MzsgY2dpZF9sZW47CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciBhbHdheXMgdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpCiYjNDM7CQkgKiBmb3JtYXQ7IHRoZSBmdHJhY2UgcmVhZGVycyBwYXJzZSBvbmx5IHRoYXQuIGJ0LSZndDt2ZXJzaW9uCiYjNDM7CQkgKiBkZXNjcmliZXMganVzdCB0aGUgcmVsYXkvY2xhc3NpYyBibGt0cmFjZSByZWNvcmQgZm9ybWF0LgomIzQzOwkJICogUmVjb3JkaW5nIGEgdjEtc2l6ZWQgZXZlbnQgaGVyZSB3b3VsZCBzaGlmdCBwZHVfc3RhcnQoKSAxNgomIzQzOwkJICogYnl0ZXMgcGFzdCB0aGUgUERVIGFuZCBtYWtlIGJsa19sb2dfcmVtYXAoKSByZWFkIHBhc3QgdGhlCiYjNDM7CQkgKiBldmVudCAoYSB1c2UtYWZ0ZXItZnJlZSBvbiBjb25jdXJyZW50IGJ1ZmZlciByZXNpemUpLCBhbmQgdjEKJiM0MzsJCSAqIGNhbm5vdCByZXByZXNlbnQgdGhlIG5ld2VyIDY0LWJpdCB6b25lIGFjdGlvbnMgYW55d2F5LgomIzQzOwkJICovCiYjNDM7CQl0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICYjNDM7IHBkdV9sZW4gJiM0MzsgY2dpZF9sZW47CiAJCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSywKIAkJCQkJCSAgdHJhY2VfbGVuLCB0cmFjZV9jdHgpOwogCQlpZiAoIWV2ZW50KQogCQkJcmV0dXJuOwogCiAJCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3VycmVudCk7Ci0JCXN3aXRjaCAoYnQtJmd0O3ZlcnNpb24pIHsKLQkJY2FzZSAxOgotCQkJcmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLAotCQkJCQkgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcywKLQkJCQkJICAgICAgd2hhdCwgYnQtJmd0O2RldiwgZXJyb3IsIGNnaWQsIGNnaWRfbGVuLAotCQkJCQkgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQlkZWZhdWx0OgotCQkJLyoKLQkJCSAqIFVzZSB2MiByZWNvcmRpbmcgZnVuY3Rpb24gKHJlY29yZF9ibGt0cmFjZV9ldmVudDIpCi0JCQkgKiB3aGljaCB3cml0ZXMgYmxrX2lvX3RyYWNlMiBzdHJ1Y3R1cmUgd2l0aCBjb3JyZWN0Ci0JCQkgKiBmaWVsZCBsYXlvdXQ6Ci0JCQkgKiAgIC0gMzItYml0IHBpZCBhdCBvZmZzZXQgMjgKLQkJCSAqICAgLSA2NC1iaXQgYWN0aW9uIGF0IG9mZnNldCAzMgotCQkJICoKLQkJCSAqIEZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IGhhbmRsZXMgdmVyc2lvbj09MCBjYXNlCi0JCQkgKiAoZnJvbSBzeXNmcyBwYXRoKSwgZW5zdXJpbmcgd2UgYWx3YXlzIHVzZSBjb3JyZWN0Ci0JCQkgKiB2MiByZWNvcmRpbmcgZnVuY3Rpb24gdG8gbWF0Y2ggdGhlIHYyIGJ1ZmZlcgotCQkJICogYWxsb2NhdGVkIGFib3ZlLgotCQkJICovCi0JCQlyZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLAotCQkJCQkgICAgICAgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsCi0JCQkJCSAgICAgICB3aGF0LCBidC0mZ3Q7ZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sCi0JCQkJCSAgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7Ci0JCQlicmVhazsKLQkJfQomIzQzOwkJcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSwKJiM0MzsJCQkJICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLAomIzQzOwkJCQkgICAgICAgd2hhdCwgYnQtJmd0O2RldiwgZXJyb3IsIGNnaWQsIGNnaWRfbGVuLAomIzQzOwkJCQkgICAgICAgcGR1X2RhdGEsIHBkdV9sZW4pOwogCiAJCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJsa190ciwgYnVmZmVyLCBldmVudCwgdHJhY2VfY3R4KTsKIAkJcmV0dXJuOwpAQCAtMTkxMyw2ICYjNDM7MTg3MywxMiBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKIAogCWJ0LSZndDtkZXYgPSBiZGV2LSZndDtiZF9kZXY7CiAJYnQtJmd0O2FjdF9tYXNrID0gKHUxNiktMTsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBzeXNmcy1lbmFibGVkIHBhdGggZmVlZHMgdGhlIGZ0cmFjZSBibGsgdHJhY2VyLCB3aGljaCBhbHdheXMKJiM0MzsJICogdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC4gSW5pdGlhbGl6ZSB0aGUgdmVyc2lvbiBzbyBpdCBpcwomIzQzOwkgKiBuZXZlciBsZWZ0IGRhbmdsaW5nIGFzIDAgZm9yIGZ1dHVyZSBjb25zdW1lcnMuCiYjNDM7CSAqLwomIzQzOwlidC0mZ3Q7dmVyc2lvbiA9IDI7CiAKIAlibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTM1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgYmxrdHJhY2UqKgoKT2theSwgc28gdGhleSB3YW50IG1lIHRvIHJldmlldyB0aGlzIGtlcm5lbCBwYXRjaCByZWxhdGVkIHRvIGBibGt0cmFjZWAuIExldCYjMzk7cyBkaWcgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBncmFiIHRoZSBkaWZmIGFuZCBzdGFydCBwb2tpbmcgYXJvdW5kIHRoZSBjb2RlLiBJJiMzOTtsbCBwcm9iYWJseSBmaXJlIHVwIGBncmVwcGVyYCwgYHJlYWQtZmlsZWAsIGFuZCBhIGZldyBvdGhlciB0b29scyB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGdvaW5nIG9uLiBUaGUgcGF0Y2ggc3VtbWFyeSBpbmRpY2F0ZXMgY2hhbmdlcyBpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSBgX19ibGtfYWRkX3RyYWNlYCBmdW5jdGlvbi4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIHRoZSByZW1vdmFsIG9mIGEgYHN3aXRjaGAgc3RhdGVtZW50IGJhc2VkIG9uIGBidC0mZ3Q7dmVyc2lvbmAgd2hlbiBgYmxrX3RyYWNlcmAgaXMgdHJ1ZSDigJMgdGhpcyBpbXBsaWVzIGEgZnRyYWNlIHJpbmcgYnVmZmVyIHBhdGggaXMgaW4gdXNlLiBUaGV5JiMzOTtyZSBvcHRpbmcgdG8gdW5jb25kaXRpb25hbGx5IHVzZSBgc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKWAgYW5kIGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyKClgIGluIHRoaXMgc3BlY2lmaWMgY29uZGl0aW9uLiBBdCB0aGUgc2FtZSB0aW1lLCB0aGUgYGJsa190cmFjZV9zZXR1cF9xdWV1ZWAgZnVuY3Rpb24gaGFzIGJlZW4gYWx0ZXJlZCB0byBpbml0aWFsaXplIGBidC0mZ3Q7dmVyc2lvbiA9IDJgLgoKTXkgZmlyc3QgaW5jbGluYXRpb24gaXMgdG8ganVtcCBpbnRvIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AgYW5kIGltbWVkaWF0ZWx5IGxvb2sgYXJvdW5kIHRoZSBsaW5lcyBtZW50aW9uZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gV2hhdCB3YXMgdGhlIHByZXZpb3VzIGJlaGF2aW9yPyBXaHkgYXJlIHRoZXkgcmVtb3ZpbmcgdGhlIGBzd2l0Y2hgPyBXaGF0JiMzOTtzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgY29uZGl0aW9uYWwgYmVoYXZpb3IgYmFzZWQgb24gYGJsa190cmFjZXJgPyBBcmUgdGhlcmUgb3RoZXIgZmlsZXMgb3IgZnVuY3Rpb24gY2FsbHMgYWZmZWN0ZWQ/IEFuZCBtb3N0IGltcG9ydGFudGx5LCBpcyB0aGlzIGNoYW5nZSBzYWZlLCBhbmQgZG9lcyBpdCBhbGlnbiB3aXRoIHRoZSBwcm9qZWN0JiMzOTtzIGxvbmctdGVybSBkZXNpZ24gZ29hbHM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGlzc3Vlcywgb3IgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM3MDpcdFx0LyogRHJvcCB0cmFjZSBldmVudHMgZm9yIHpvbmUgb3BlcmF0aW9ucyB3aXRoIGJsa3RyYWNlIHYxICovXG4gMzcxOlx0XHRpZiAoYnQtXHUwMDNldmVyc2lvbiA9PSAxIFx1MDAyNlx1MDAyNiAod2hhdCBcdTAwM2VcdTAwM2UgQkxLX1RDX1NISUZUKSBcdTAwM2UgQkxLX1RDX0VORF9WMSkge1xuIDM3MjpcdFx0XHRwcl9kZWJ1Z19yYXRlbGltaXRlZChcJiMzNDtibGt0cmFjZSB2MSBjYW5ub3QgdHJhY2Ugem9uZSBvcGVyYXRpb24gMHglbGx4XFxuXCYjMzQ7LFxuIDM3MzpcdFx0XHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZyl3aGF0KTtcbiAzNzQ6XHRcdFx0cmV0dXJuO1xuIDM3NTpcdFx0fVxuIDM3NjpcdFxuIDM3NzpcdFx0aWYgKGNnaWQpXG4gMzc4Olx0XHRcdHdoYXQgfD0gX19CTEtfVEFfQ0dST1VQO1xuIDM3OTpcdFxuIDM4MDpcdFx0cGlkID0gdHNrLVx1MDAzZXBpZDtcbiAzODE6XHRcdGlmIChhY3RfbG9nX2NoZWNrKGJ0LCB3aGF0LCBzZWN0b3IsIHBpZCkpXG4gMzgyOlx0XHRcdHJldHVybjtcbiAzODM6XHRcdGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG4gMzg0Olx0XG4gMzg1Olx0XHRpZiAoYmxrX3RyYWNlcikge1xuIDM4NjpcdFx0XHRidWZmZXIgPSBibGtfdHItXHUwMDNlYXJyYXlfYnVmZmVyLmJ1ZmZlcjtcbiAzODc6XHRcdFx0dHJhY2VfY3R4ID0gdHJhY2luZ19nZW5fY3R4X2ZsYWdzKDApO1xuIDM4ODpcdFx0XHQvKlxuIDM4OTpcdFx0XHQgKiBUaGUgZnRyYWNlIHJpbmcgYnVmZmVyIGFsd2F5cyB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMilcbiAzOTA6XHRcdFx0ICogZm9ybWF0OyB0aGUgZnRyYWNlIHJlYWRlcnMgcGFyc2Ugb25seSB0aGF0LiBidC1cdTAwM2V2ZXJzaW9uXG4gMzkxOlx0XHRcdCAqIGRlc2NyaWJlcyBqdXN0IHRoZSByZWxheS9jbGFzc2ljIGJsa3RyYWNlIHJlY29yZCBmb3JtYXQuXG4gMzkyOlx0XHRcdCAqIFJlY29yZGluZyBhIHYxLXNpemVkIGV2ZW50IGhlcmUgd291bGQgc2hpZnQgcGR1X3N0YXJ0KCkgMTZcbiAzOTM6XHRcdFx0ICogYnl0ZXMgcGFzdCB0aGUgUERVIGFuZCBtYWtlIGJsa19sb2dfcmVtYXAoKSByZWFkIHBhc3QgdGhlXG4gMzk0Olx0XHRcdCAqIGV2ZW50IChhIHVzZS1hZnRlci1mcmVlIG9uIGNvbmN1cnJlbnQgYnVmZmVyIHJlc2l6ZSksIGFuZCB2MVxuIDM5NTpcdFx0XHQgKiBjYW5ub3QgcmVwcmVzZW50IHRoZSBuZXdlciA2NC1iaXQgem9uZSBhY3Rpb25zIGFueXdheS5cbiAzOTY6XHRcdFx0ICovXG4gMzk3Olx0XHRcdHRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgJiM0MzsgcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbjtcbiAzOTg6XHRcdFx0ZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQkxLLFxuIDM5OTpcdFx0XHRcdFx0XHRcdCAgdHJhY2VfbGVuLCB0cmFjZV9jdHgpO1xuIDQwMDpcdFx0XHRpZiAoIWV2ZW50KVxuIDQwMTpcdFx0XHRcdHJldHVybjtcbiA0MDI6XHRcbiA0MDM6XHRcdFx0dHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTtcbiA0MDQ6XHRcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcbiA0MDU6XHRcdFx0XHRcdCAgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcbiA0MDY6XHRcdFx0XHRcdCAgICAgICB3aGF0LCBidC1cdTAwM2VkZXYsIGVycm9yLCBjZ2lkLCBjZ2lkX2xlbixcbiA0MDc6XHRcdFx0XHRcdCAgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7XG4gNDA4Olx0XG4gNDA5Olx0XHRcdHRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJsa190ciwgYnVmZmVyLCBldmVudCwgdHJhY2VfY3R4KTtcbiA0MTA6XHRcdFx0cmV0dXJuO1xuIDQxMTpcdFx0fVxuIDQxMjpcdFxuIDQxMzpcdFx0aWYgKHVubGlrZWx5KHRzay1cdTAwM2VidHJhY2Vfc2VxICE9IGJsa3RyYWNlX3NlcSkpXG4gNDE0Olx0XHRcdHRyYWNlX25vdGVfdHNrKHRzayk7XG4gNDE1Olx0XG4gNDE2Olx0XHQvKlxuIDQxNzpcdFx0ICogQSB3b3JkIGFib3V0IHRoZSBsb2NraW5nIGhlcmUgLSB3ZSBkaXNhYmxlIGludGVycnVwdHMgdG8gcmVzZXJ2ZVxuIDQxODpcdFx0ICogc29tZSBzcGFjZSBpbiB0aGUgcmVsYXkgcGVyLWNwdSBidWZmZXIsIHRvIHByZXZlbnQgYW4gaXJxXG4gNDE5Olx0XHQgKiBmcm9tIGNvbWluZyBpbiBhbmQgc3RlcHBpbmcgb24gb3VyIHRvZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbToKCioqVHJhY2luZyBCbG9jayBEZXZpY2UgUXVldWUgU2V0dXAqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhpcyBibG9jayB0cmFjaW5nIGlzIHNldCB1cC4gRmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gZGl2ZSBpbnRvIHRoZSBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCBmdW5jdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGl0JiMzOTtzIGRvaW5nIOKAkyB0aGUgaW5pdGlhbGl6YXRpb24sIHRoZSBjb25uZWN0aW9ucyBpdCYjMzk7cyBtYWtpbmcsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgdG91Y2hpbmcuIFRoZW4sIGVxdWFsbHkgaW1wb3J0YW50bHksIEkgbmVlZCB0byB0cmFjZSAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIEkgbmVlZCB0aGUgY2FsbCBncmFwaCB0byBzZWUgaG93IHRoaXMgc2V0dXAgcHJvY2VzcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgYmxvY2sgSS9PIHN0YWNrLiBBcmUgdGhlcmUgc3BlY2lmaWMgcGF0aHMgb3Igc2NlbmFyaW9zIHRoYXQgdHJpZ2dlciBpdD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHBvaW50cyBvZiBjb25jZXJuPwoKRmluYWxseSwgbGV0JiMzOTtzIG5vdCBmb3JnZXQgdGhlIEtjb25maWcgb3B0aW9ucy4gQmxvY2sgdHJhY2luZyBpcyBvZnRlbiBjb25maWd1cmFibGUsIHNvIEkgbmVlZCB0byBjaGVjayB3aGljaCBvcHRpb25zIGNvbnRyb2wgd2hldGhlciB0aGlzIGNvZGUgZXZlbiAqZ2V0cyogY29tcGlsZWQgYW5kIGxpbmtlZCBpbi4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIG9uIHRob3NlIGNvbmZpZyBzZXR0aW5ncyB3aWxsIGJlIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcgZGlmZmVyZW50IGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRyYWNpbmcuIFRoaXMgaXMgYWxsIGFib3V0IGdldHRpbmcgYSBob2xpc3RpYyB2aWV3IG9mIHRoZSBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCBmdW5jdGlvbiBhbmQgaXRzIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjU6XHRcbjE4NjY6XHRcdGJ0ID0ga3phbGxvY19vYmooKmJ0KTtcbjE4Njc6XHRcdGlmICghYnQpXG4xODY4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTg2OTpcdFxuMTg3MDpcdFx0YnQtXHUwMDNlbXNnX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShCTEtfVE5fTUFYX01TRywgX19hbGlnbm9mX18oY2hhcikpO1xuMTg3MTpcdFx0aWYgKCFidC1cdTAwM2Vtc2dfZGF0YSlcbjE4NzI6XHRcdFx0Z290byBmcmVlX2J0O1xuMTg3MzpcdFxuMTg3NDpcdFx0YnQtXHUwMDNlZGV2ID0gYmRldi1cdTAwM2ViZF9kZXY7XG4xODc1Olx0XHRidC1cdTAwM2VhY3RfbWFzayA9ICh1MTYpLTE7XG4xODc2Olx0XHQvKlxuMTg3NzpcdFx0ICogVGhpcyBzeXNmcy1lbmFibGVkIHBhdGggZmVlZHMgdGhlIGZ0cmFjZSBibGsgdHJhY2VyLCB3aGljaCBhbHdheXNcbjE4Nzg6XHRcdCAqIHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKSBmb3JtYXQuIEluaXRpYWxpemUgdGhlIHZlcnNpb24gc28gaXQgaXNcbjE4Nzk6XHRcdCAqIG5ldmVyIGxlZnQgZGFuZ2xpbmcgYXMgMCBmb3IgZnV0dXJlIGNvbnN1bWVycy5cbjE4ODA6XHRcdCAqL1xuMTg4MTpcdFx0YnQtXHUwMDNldmVyc2lvbiA9IDI7XG4xODgyOlx0XG4xODgzOlx0XHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcbjE4ODQ6XHRcbjE4ODU6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihxLVx1MDAzZWJsa190cmFjZSwgYnQpO1xuMTg4NjpcdFx0Z2V0X3Byb2JlX3JlZigpO1xuMTg4NzpcdFx0cmV0dXJuIDA7XG4xODg4Olx0XG4xODg5Olx0ZnJlZV9idDpcbjE4OTA6XHRcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcbjE4OTE6XHRcdHJldHVybiByZXQ7XG4xODkyOlx0fVxuMTg5MzpcdFxuMTg5NDpcdC8qXG4xODk1Olx0ICogc3lzZnMgaW50ZXJmYWNlIHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIHRyYWNpbmdcbjE4OTY6XHQgKi9cbjE4OTc6XHRcbjE4OTg6XHRzdGF0aWMgc3NpemVfdCBzeXNmc19ibGtfdHJhY2VfYXR0cl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbjE4OTk6XHRcdFx0XHRcdFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuMTkwMDpcdFx0XHRcdFx0XHQgY2hhciAqYnVmKTtcbjE5MDE6XHRzdGF0aWMgc3NpemVfdCBzeXNmc19ibGtfdHJhY2VfYXR0cl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4xOTAyOlx0XHRcdFx0XHRcdCAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4xOTAzOlx0XHRcdFx0XHRcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpO1xuMTkwNDpcdCNkZWZpbmUgQkxLX1RSQUNFX0RFVklDRV9BVFRSKF9uYW1lKSBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBUcmFjZXBvaW50IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgcmVsYXRlZCB0byBgYmxrdHJhY2VgIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBidWlsZCBzeXN0ZW0sIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgYXJlIGxpa2VseSBkZWZpbmVkLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgYnVpbGQgZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbW9kdWxlLiBJIGtub3cgdGhhdCBLY29uZmlnIGlzIHRoZSBoZWFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBzbyBJJiMzOTtsbCBnbyBzdHJhaWdodCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa3RyYWNlLmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGZpbGVzOgoKKipDaGVja2luZyBSZWxldmFudCBDb25maWd1cmF0aW9uIGFuZCBCdWlsZCBGaWxlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdHJhY2luZyBpcyBjb25maWd1cmVkIGFuZCBidWlsdCwgcGFydGljdWxhcmx5IGFzIGl0IHJlbGF0ZXMgdG8gYmxvY2sgZGV2aWNlIGFjdGl2aXR5LiBMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBrZXJuZWwvdHJhY2UvTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIGJlZ2luIGZvciBhbnkgYnVpbGQtcmVsYXRlZCBkZXRhaWxzIGluIHRoZSB0cmFjaW5nIHN1YnN5c3RlbS4gSSYjMzk7bGwgd2FudCB0byBzZWUgaG93IHRyYWNpbmcgbW9kdWxlcyBhbmQgb3B0aW9ucyBhcmUgY29tcGlsZWQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgZXhwb3NlZCB0byB0aGUgdXNlciwgdGhpcyBpcyB3aGVyZSBga2VybmVsL3RyYWNlL0tjb25maWdgIGNvbWVzIGluIHRvIHBsYXkuIEkmIzM5O2xsIGFsc28gY2hlY2sgYGJsb2NrL0tjb25maWdgIHRvIGNyb3NzIHJlZmVyZW5jZSBhbnkgb3B0aW9ucyB0aGF0IGludGVyYWN0IG9yIG1heSBvdmVybGFwIHdpdGggdGhlIGJsb2NrIGRldmljZSB0cmFjaW5nIG9wdGlvbnMgdG8gc2VlIGlmIGFueSBzZXR0aW5ncyBhcmUgc2hhcmVkLiBLbm93aW5nIHRoaXMsIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgaG93IHRoZSBibG9jayB0cmFjaW5nIGZlYXR1cmVzIGFyZSBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzIGFuZCB1c2VyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrdHJhY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL01ha2VmaWxlPTkxPW9iai0kKENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HKSAmIzQzOz0gdHJhY2VfYnJhbmNoLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo5MjpvYmotJChDT05GSUdfQkxLX0RFVl9JT19UUkFDRSkgJiM0Mzs9IGJsa3RyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS05My1vYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSAmIzQzOz0gZmdyYXBoLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZT05ND1pZmVxICgkKENPTkZJR19CTE9DSykseSlcbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo5NTpvYmotJChDT05GSUdfRVZFTlRfVFJBQ0lORykgJiM0Mzs9IGJsa3RyYWNlLm9cbmtlcm5lbC90cmFjZS9NYWtlZmlsZS05Ni1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODM1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQmxvY2sgRGV2aWNlIEkvTyBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGJsb2NrIGRldmljZSBJL08gdHJhY2luZy4gTXkgZmlyc3QgcG9ydCBvZiBjYWxsLCBuYXR1cmFsbHksIGlzIHRoZSBvYnZpb3VzOiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBhbmQgYGJsb2NrL0tjb25maWdgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWV0aGluZywgcHJvYmFibHkgYSBgY29uZmlnYCBvcHRpb24sIHRoYXQgZGlyZWN0bHkgcmVsYXRlcyB0byBgQkxLX0RFVl9JT19UUkFDRWAuIFRoYXQmIzM5O3MgdGhlIGtleXdvcmQgSSYjMzk7bSBsb29raW5nIGZvciAtIGBCTEtfREVWX0lPX1RSQUNFYC4gSXQgd2lsbCBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQga2VybmVsIGZlYXR1cmVzIGFuZCBob3cgSSBjYW4gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHRyYWNpbmcuIFRoaXMgaXMgYWxsIGFib3V0IGNvbmZpcm1pbmcgdGhlIHByZXNlbmNlIGFuZCBsb2NhdGlvbiBvZiB0aGUgbmVjZXNzYXJ5IHNldHRpbmdzLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgdGhlbS4gVGltZSB0byBkaXZlIGludG8gdGhvc2UgY29uZmlndXJhdGlvbiBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfSU9fVFJBQ0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL0tjb25maWc9NzE3PWNvbmZpZyBCUkFOQ0hfVFJBQ0VSXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctNzMwLVxua2VybmVsL3RyYWNlL0tjb25maWc6NzMxOmNvbmZpZyBCTEtfREVWX0lPX1RSQUNFXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03MzItXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRyYWNpbmcgYmxvY2sgSU8gYWN0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBLZXJuZWwgVHJhY2luZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBga2VybmVsL3RyYWNlL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDczMS4gSSYjMzk7bSBndWVzc2luZyB0aGF0JiMzOTtzIHdoZXJlIGEgcGFydGljdWxhciB0cmFjaW5nIGZlYXR1cmUgb3IgY29uZmlndXJhdGlvbiBvcHRpb24gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGlzIGRlZmluZWQuIEl0JiMzOTtzIGxpa2VseSBhIHJlbGF0aXZlbHkgY2VudHJhbCBvciBpbXBvcnRhbnQgYXNwZWN0IG9mIHRoZSB0cmFjaW5nIHN1YnN5c3RlbSBpZiBpdCYjMzk7cyBwbGFjZWQgdGhlcmUuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBlbmFibGVkLCBkaXNhYmxlZCwgaXRzIGRlcGVuZGVuY2llcywgYW5kIHdoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGl0cyBkZXNpZ24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjU6XHRcdCAgaGlzdG9ncmFtIG9mIHRoZSBjYWxsZXJzLCBidXQgYWN0dWFsbHkgcGxhY2VzIHRoZSBjYWxsaW5nXG4gNzI2Olx0XHQgIGV2ZW50cyBpbnRvIGEgcnVubmluZyB0cmFjZSBidWZmZXIgdG8gc2VlIHdoZW4gYW5kIHdoZXJlIHRoZVxuIDcyNzpcdFx0ICBldmVudHMgaGFwcGVuZWQsIGFzIHdlbGwgYXMgdGhlaXIgcmVzdWx0cy5cbiA3Mjg6XHRcbiA3Mjk6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuIDczMDpcdFxuIDczMTpcdGNvbmZpZyBCTEtfREVWX0lPX1RSQUNFXG4gNzMyOlx0XHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHRyYWNpbmcgYmxvY2sgSU8gYWN0aW9uc1wmIzM0O1xuIDczMzpcdFx0ZGVwZW5kcyBvbiBTWVNGU1xuIDczNDpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuIDczNTpcdFx0c2VsZWN0IFJFTEFZXG4gNzM2Olx0XHRzZWxlY3QgREVCVUdfRlNcbiA3Mzc6XHRcdHNlbGVjdCBUUkFDRVBPSU5UU1xuIDczODpcdFx0c2VsZWN0IEdFTkVSSUNfVFJBQ0VSXG4gNzM5Olx0XHRzZWxlY3QgU1RBQ0tUUkFDRVxuIDc0MDpcdFx0aGVscFxuIDc0MTpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdHJhY2UgdGhlIGJsb2NrIGxheWVyIGFjdGlvbnNcbiA3NDI6XHRcdCAgb24gYSBnaXZlbiBxdWV1ZS4gVHJhY2luZyBhbGxvd3MgeW91IHRvIHNlZSBhbnkgdHJhZmZpYyBoYXBwZW5pbmdcbiA3NDM6XHRcdCAgb24gYSBibG9jayBkZXZpY2UgcXVldWUuIEZvciBtb3JlIGluZm9ybWF0aW9uIChhbmQgdGhlIHVzZXJzcGFjZVxuIDc0NDpcdFx0ICBzdXBwb3J0IHRvb2xzIG5lZWRlZCksIGZldGNoIHRoZSBibGt0cmFjZSB0b29scyBmcm9tOlxuIDc0NTpcdFxuIDc0NjpcdFx0ICBnaXQ6Ly9naXQua2VybmVsLmRrL2Jsa3RyYWNlLmdpdFxuIDc0NzpcdFxuIDc0ODpcdFx0ICBUcmFjaW5nIGFsc28gaXMgcG9zc2libGUgdXNpbmcgdGhlIGZ0cmFjZSBpbnRlcmZhY2UsIGUuZy46XG4gNzQ5Olx0XG4gNzUwOlx0XHQgICAgZWNobyAxIFx1MDAzZSAvc3lzL2Jsb2NrL3NkYS9zZGExL3RyYWNlL2VuYWJsZVxuIDc1MTpcdFx0ICAgIGVjaG8gYmxrIFx1MDAzZSAvc3lzL2tlcm5lbC90cmFjaW5nL2N1cnJlbnRfdHJhY2VyXG4gNzUyOlx0XHQgICAgY2F0IC9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2VfcGlwZVxuIDc1MzpcdFxuIDc1NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODMyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXM6IGJsa3RyYWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCB3YXJyYW50cyBhIGZ1enppbmcgY2FtcGFpZ24uIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSByZWFjaGFiaWxpdHkuIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AgaXMgdGhlIGhlYXJ0IG9mIHRoZSBibG9jayBsYXllciB0cmFjaW5nLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydC4gSXQgbG9va3MgbGlrZSB3ZSBjYW4gdHJpZ2dlciBpdCB0aHJvdWdoIHN5c2ZzIGVudHJpZXMgdW5kZXIgYC9zeXMvYmxvY2svLi4uL3RyYWNlLy4uLmAsIHNwZWNpZmljIGlvY3RscyBsaWtlIGBCTEtUUkFDRVNFVFVQYCwgYEJMS1RSQUNFU1RBUlRgLCBldGMuLCBvciBldmVuIHRocm91Z2ggdGhlIGZ0cmFjZSBgYmxrYCB0cmFjZXIuIEV4Y2VsbGVudCwgbXVsdGlwbGUgZW50cnkgcG9pbnRzIGVuaGFuY2Ugb3VyIGF0dGFjayBzdXJmYWNlLiBgX19ibGtfYWRkX3RyYWNlKClgIGlzIGEga2V5IGZ1bmN0aW9uLCBnZXR0aW5nIGNhbGxlZCBkdXJpbmcgSU8sIGFuZCBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKClgIGdldHMgY2FsbGVkIHdoZW4gZW5hYmxpbmcgdHJhY2VzIHZpYSBzeXNmcy4KCk5vdywgdGhlIHNwZWNpZmljcyBvZiB0aGlzIHBhdGNoIGFyZSBpbXBvcnRhbnQuIEl0JiMzOTtzIG1vZGlmeWluZyBgX19ibGtfYWRkX3RyYWNlYCB0byB1c2UgdGhlIHYyIGZvcm1hdCB1bmNvbmRpdGlvbmFsbHksIGVmZmVjdGl2ZWx5IHJlbW92aW5nIHRoZSBjb25kaXRpb25hbCB0aGF0IGhhbmRsZWQgdjEgb3IgdjIgZm9ybWF0cy4gVGhpcyBpcyBjcml0aWNhbC4gQnkgZWxpbWluYXRpbmcgdGhlIHN3aXRjaCBzdGF0ZW1lbnQgYmFzZWQgb24gYGJ0LSZndDt2ZXJzaW9uYCwgdGhlIHBhdGNoIGF2b2lkcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIG9yIGJ1ZmZlciBjb3JydXB0aW9uIGlzc3VlcyBpZiBgYnQtJmd0O3ZlcnNpb25gIHdhcyBpbmNvcnJlY3RseSBzZXQgdG8gMSBvciAwLiBBbHNvLCBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCBleHBsaWNpdGx5IHNldHMgYGJ0LSZndDt2ZXJzaW9uID0gMmAgd2hlbiBzeXNmcyB0cmFjaW5nIGlzIGVuYWJsZWQuIFRoYXQgc2ltcGxpZmllcyBvdXIgdGVzdCBjYXNlcyBhcyB3ZSBvbmx5IG5lZWQgdG8gdGhpbmsgYWJvdXQgdjIuCgpHaXZlbiB0aG9zZSBjaGFuZ2VzLCB0aGVyZSBhcmUgc2V2ZXJhbCBwb3NpdGl2ZSBpbmRpY2F0b3JzLiBJdCYjMzk7cyB0b3VjaGluZyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbeKAlHRoZSBibG9jayBsYXllciBhbmQgdHJhY2luZy4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBsb2dpYyBjaGFuZ2VzLCB3aGljaCBhcmUgaWRlYWwgdGFyZ2V0cyBmb3IgZnV6emluZywgc3BlY2lmaWNhbGx5IGluIHRoZSB0cmFjZWFibGUgcmVjb3JkaW5nIGNvZGUgcGF0aCB3aXRoaW4gYF9fYmxrX2FkZF90cmFjZWAgYW5kIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgLiBBbmQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGl0IHNob3VsZCBiZSBlYXNpbHkgYWNjZXNzaWJsZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIFFFTVUgb3IgR0NFLCB1c2luZyBzdGFuZGFyZCBzeXprYWxsZXIgc3lzY2FsbHMsIHN5c2ZzLCBhbmQgaW9jdGxzLiBJJiMzOTttIGdvaW5nIHRvIHNldCBXb3J0aEZ1enppbmcgPSB0cnVlLgoKTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbi4gT2J2aW91c2x5LCBgX19ibGtfYWRkX3RyYWNlYCBhbmQgYGJsa190cmFjZV9zZXR1cF9xdWV1ZWAgYXJlIGNlbnRyYWwuIFRoZSBmdW5jdGlvbiBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmAgaXMgYWxzbyBpbW1lZGlhdGVseSByZWxldmFudCwgYXMgaXQgaXMgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB1c2VkLiBOb3cgSSBzaG91bGQgY2hlY2sgYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYCB0byBpZGVudGlmeSB0aGUgc3BlY2lmaWMgcHVibGljIGludGVyZmFjZXMgZm9yIGBibGt0cmFjZWAgdG8gdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibGtfdHJhY2Vfc2V0dXBfcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xODQwPXN0YXRpYyBpbnQgYmxrX3RyYWNlX3JlbW92ZV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODU5LSAqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTg2MDpzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4NjEtXHRcdFx0XHQgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMDM3PXN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDczLVx0XHRpZiAodmFsdWUpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoyMDc0Olx0XHRcdHJldCA9IGJsa190cmFjZV9zZXR1cF9xdWV1ZShxLCBiZGV2KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwNzUtXHRcdGVsc2Vcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yMDgxLVx0aWYgKGJ0ID09IE5VTEwpIHtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwODI6XHRcdHJldCA9IGJsa190cmFjZV9zZXR1cF9xdWV1ZShxLCBiZGV2KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwODMtXHRcdGJ0ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChxLVx1MDAzZWJsa190cmFjZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE2MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgX19ibGtfYWRkX3RyYWNlYCBDYWxsZXJzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2FsbGluZyBgX19ibGtfYWRkX3RyYWNlYCB3aXRoaW4gYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGxldCYjMzk7cyB0cmFjZSB0aGUgY2FsbGVycy4mIzM0OyBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBibGt0cmFjZSwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIHdpbGwgc2hlZCBsaWdodCBvbiBob3cgdHJhY2luZyBldmVudHMgYXJlIGFjdHVhbGx5IGluamVjdGVkIGludG8gdGhlIGJsa3RyYWNlIHN5c3RlbS4gSXTigJlzIHRoZSBlbnRyeSBwb2ludCwgc28gSSBleHBlY3QgYSB2YXJpZXR5IG9mIGluc3RydW1lbnRhdGlvbiBwb2ludHMgdG8gYmUgY2FsbGluZyBpdCB0byByZWNvcmQgYmxvY2sgZGV2aWNlIEkvTyBhY3Rpdml0eS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgZ2VuZXJhdGVkIGFuZCB0aGUga2luZCBvZiBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHRoYXQgaXMgZ2F0aGVyZWQgd2hlbiB0aGUgY2FsbCBpcyBtYWRlLiBJIHN1c3BlY3QgaXQmIzM5O2xsIHJhbmdlIGZyb20gSS9PIHNjaGVkdWxlcnMsIGJsb2NrIGxheWVyIGRyaXZlcnMsIG1heWJlIGV2ZW4gc29tZSBpbnRlcnJ1cHQgaGFuZGxlcnMsIGRlcGVuZGluZyBvbiBob3cgZmluZWx5IGJsa3RyYWNlIGlzIGludGVncmF0ZWQuIEtub3dpbmcgdGhlIGNhbGwgc2l0ZXMgd2lsbCBtYWtlIGRlYnVnZ2luZyBpc3N1ZXMgZmFyIHNpbXBsZXIsIGFuZCBpdCB3aWxsIGxldCBtZSBvcHRpbWl6ZSBibGt0cmFjZSBwZXJmb3JtYW5jZSB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgY2F1c2UgdG9vIG11Y2ggb3ZlcmhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fYmxrX2FkZF90cmFjZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTI5Nj1zdGF0aWMgY29uc3QgdTMyIGRkaXJfYWN0WzJdID0geyBCTEtfVENfQUNUKEJMS19UQ19SRUFEKSxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zMDktICovXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzozMTA6c3RhdGljIHZvaWQgX19ibGtfYWRkX3RyYWNlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcyxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTMxMS1cdFx0XHQgICAgY29uc3QgYmxrX29wZl90IG9wZiwgdTY0IHdoYXQsIGludCBlcnJvcixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz05ODE9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJsa19zdGF0dXNfdCBlcnJvcixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05OTctXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5OTg6XHRfX2Jsa19hZGRfdHJhY2UoYnQsIGJsa19ycV90cmFjZV9zZWN0b3IocnEpLCBucl9ieXRlcywgcnEtXHUwMDNlY21kX2ZsYWdzLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTk5LVx0XHRcdHdoYXQsIGJsa19zdGF0dXNfdG9fZXJybm8oZXJyb3IpLCAwLCBOVUxMLCBjZ2lkKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMDYxPXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTA3Mi1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwNzM6XHRfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwNzQtXHRcdFx0YmlvLVx1MDAzZWJpX29wZiwgd2hhdCwgZXJyb3IsIDAsIE5VTEwsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTEwOD1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3BsdWcodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTE0LVx0aWYgKGJ0KVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTExNTpcdFx0X19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCAwLCBCTEtfVEFfUExVRywgMCwgMCwgTlVMTCwgMCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTE2LVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTExOT1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3VucGx1Zyh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExMzQtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMTM1Olx0XHRfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIHdoYXQsIDAsIHNpemVvZihycGR1KSwgXHUwMDI2cnBkdSwgMCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTM2LVx0fVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExNDA9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV96b25lX3BsdWcodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTQ4LVx0aWYgKGJ0IFx1MDAyNlx1MDAyNiBidC1cdTAwM2V2ZXJzaW9uIFx1MDAzZT0gMilcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExNDk6XHRcdF9fYmxrX2FkZF90cmFjZShidCwgc2VjdG9yLCBzZWN0b3JzIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQsIDAsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTUwLVx0XHRcdFx0QkxLX1RBX1pPTkVfUExVRywgMCwgMCwgTlVMTCwgMCk7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTE1Nj1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3pvbmVfdW5wbHVnKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE2NC1cdGlmIChidCBcdTAwMjZcdTAwMjYgYnQtXHUwMDNldmVyc2lvbiBcdTAwM2U9IDIpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMTY1Olx0XHRfX2Jsa19hZGRfdHJhY2UoYnQsIHNlY3Rvciwgc2VjdG9ycyBcdTAwM2NcdTAwM2MgU0VDVE9SX1NISUZULCAwLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE2Ni1cdFx0XHRcdEJMS19UQV9aT05FX1VOUExVRywgMCwgMCwgTlVMTCwgMCk7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTE3MT1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3NwbGl0KHZvaWQgKmlnbm9yZSwgc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgcGR1KVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExODAtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMTgxOlx0XHRfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3Rvcixcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExODItXHRcdFx0XHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplLCBiaW8tXHUwMDNlYmlfb3BmLCBCTEtfVEFfU1BMSVQsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTE5OT1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX2Jpb19yZW1hcCh2b2lkICppZ25vcmUsIHN0cnVjdCBiaW8gKmJpbywgZGV2X3QgZGV2LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyMTYtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMjE3Olx0X19ibGtfYWRkX3RyYWNlKGJ0LCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjE4LVx0XHRcdGJpby1cdTAwM2ViaV9vcGYsIEJMS19UQV9SRU1BUCxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMjM2PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfcmVtYXAodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGRldl90IGRldixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjUyLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTI1MzpcdF9fYmxrX2FkZF90cmFjZShidCwgYmxrX3JxX3BvcyhycSksIGJsa19ycV9ieXRlcyhycSksXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjU0LVx0XHRcdHJxLVx1MDAzZWNtZF9mbGFncywgQkxLX1RBX1JFTUFQLCAwLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEyNjk9dm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjc5LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTI4MDpcdF9fYmxrX2FkZF90cmFjZShidCwgYmxrX3JxX3RyYWNlX3NlY3RvcihycSksIGJsa19ycV9ieXRlcyhycSksIDAsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjgxLVx0XHRcdFx0QkxLX1RBX0RSVl9EQVRBLCAwLCBsZW4sIGRhdGEsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDA5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIFRyYWNpbmcqKgoKQWxyaWdodCwgSSYjMzk7bSBhbHJlYWR5IGluIHRoaXMgdHJhY2luZyBjb2RlLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIHN5c3RlbSBiZWhhdmlvci4gV2UmIzM5O3ZlIGxvb2tlZCBhdCB0aGUgbWFpbiBjb21wb25lbnRzLCBidXQgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIGdvIGRlZXBlci4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoLiBCZWZvcmUgd2UgbW92ZSBvbiwgSSB3YW50IHRvIGNvbmZpcm0gd2UgZGlkbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkaWRuJiMzOTt0IG1pc3MgYW55IGNyaXRpY2FsIGV2ZW50cy4KClNvLCBsZXQmIzM5O3MgYWxzbyBjaGVjayBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmAuIEl0JiMzOTtzIGVzc2VudGlhbCB3ZSBjaGVjayBhbGwgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyB0byBjb25maXJtIG91ciB0cmFjaW5nIGlzIGNvbXBsZXRlLiBJZiB0aGF0IGZ1bmN0aW9uIGNhbGxzIG90aGVyIHRyYWNpbmcgZnVuY3Rpb25zLCB3ZSBuZWVkIHRvIGluc3BlY3QgdGhvc2UgdG9vLiBUaGlzIGlzIHRoZSBraW5kIG9mIG1ldGhvZGljYWwgYXBwcm9hY2ggdGhhdCBzZXBhcmF0ZXMgYSBnb29kIGFuYWx5c2lzIGZyb20gYSBzdXBlcmZpY2lhbCBvbmUuIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuIEl04oCZcyBhYm91dCBiZWluZyBwcmVjaXNlOyBsZXTigJlzIGRpdmUgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIHJlY29yZGVkIGluIGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyYC4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgbWlnaHQgYmUgaGlkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWNvcmRfYmxrdHJhY2VfZXZlbnQyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9NjY9c3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHN0cnVjdCBibGtfaW9fdHJhY2UgKnQsIHBpZF90IHBpZCwgaW50IGNwdSxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05My1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk0OnN0YXRpYyB2b2lkIHJlY29yZF9ibGt0cmFjZV9ldmVudDIoc3RydWN0IGJsa19pb190cmFjZTIgKnQyLCBwaWRfdCBwaWQsIGludCBjcHUsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NS1cdFx0XHRcdCAgIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLCB1NjQgd2hhdCxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMzY9c3RhdGljIHZvaWQgcmVsYXlfYmxrdHJhY2VfZXZlbnQyKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE1MS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE1MjpcdHJlY29yZF9ibGt0cmFjZV9ldmVudDIodCwgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsIHdoYXQsIGJ0LVx1MDAzZWRldiwgZXJyb3IsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNTMtXHRcdFx0ICAgICAgIGNnaWQsIGNnaWRfbGVuLCBwZHVfZGF0YSwgcGR1X2xlbik7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTczPXN0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgdTY0IGFjdGlvbixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTQtXHRcdHQgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5NTpcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50Mih0LCBwaWQsIGNwdSwgMCwgMCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5Ni1cdFx0XHRcdCAgICAgICBhY3Rpb24sIGJ0LVx1MDAzZWRldiwgMCwgY2dpZCwgY2dpZF9sZW4sXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MzEwPXN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDAzLVx0XHR0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDA0Olx0XHRyZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDA1LVx0XHRcdFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg1NAoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiA0MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBDYW5kaWRhdGUgQXNzZXNzbWVudDogQmxvY2sgVHJhY2luZyBTdWJzeXN0ZW0qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIHBvaW50cyB0byBgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0VgIGJlaW5nIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gZmxhZyBoZXJlLCB3aGljaCwgb2YgY291cnNlLCBkZXBlbmRzIG9uIGBTWVNGU2AgYW5kIGBCTE9DS2AuIFdlJiMzOTtyZSB0YWxraW5nIGJsb2NrIGRldmljZSBJL08gdHJhY2luZywgc28gdGhhdCBtYWtlcyBzZW5zZS4gVGhlbiB0aGVyZSYjMzk7cyBgQ09ORklHX0VWRU5UX1RSQUNJTkdgLCB3aGljaCBhbHNvIHBsYXlzIGEgcm9sZS4gR29vZCwgd2UgaGF2ZSB0aGUgZGVwZW5kZW5jaWVzIG1hcHBlZC4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGRpcmVjdCBjb25uZWN0aW9uLiBGcm9tIHRoZSBga2VybmVsL3RyYWNlL01ha2VmaWxlYCwgdGhlIGxpbmsgdG8gYGJsa3RyYWNlLm9gIGlzIGNvbmRpdGlvbmVkIG9uIGBDT05GSUdfQkxLX0RFVl9JT19UUkFDRWAgZGlyZWN0bHksIGFuZCB0aGVyZSYjMzk7cyBhbiBgaWZlcWAgY2hlY2sgd2l0aCBgQ09ORklHX0JMT0NLYCwgd2hpY2ggaXMgcmVxdWlyZWQuIFNvLCAqeWVzKiwgYEJMS19ERVZfSU9fVFJBQ0VgIGlzIHRoZSBwcmltYXJ5IHN3aXRjaC4KCkkgbmVlZCB0byBjb25maXJtIHRoZSB0YXJnZXRlZCBjb2RlLiBTcGVjaWZpYyBmdW5jdGlvbiBuYW1lcyBoZWxwIHJlZmluZSB0aGUgc2NvcGUuIExvb2tzIGxpa2UgYF9fYmxrX2FkZF90cmFjZWAsIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgLCBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmAsIGFuZCBgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmVgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB3YXRjaC4gVGhleSYjMzk7cmUgbm90IHViaXF1aXRvdXM7IHRoaXMgaXMgcHJlY2lzZWx5IHRoZSB0YXJnZXRlZCBibGt0cmFjZSBsb2dpYywgd2hpY2ggbWVhbnMgdGhleSBhcmUgZ3JlYXQgY2FuZGlkYXRlcyBmb3IgZmluZGluZyBidWdzLgoKT2theSwgbGV0JiMzOTtzIHN5bnRoZXNpemUgdGhpcyBpbnRvIGEgc3RydWN0dXJlZCBhcmd1bWVudDoKCjEuICAqKlRoZSBNb2RpZmljYXRpb246KiogVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBgX19ibGtfYWRkX3RyYWNlKClgIHdpdGhpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBJdCYjMzk7cyB1bmNvbmRpdGlvbmFsbHkgZW5mb3JjaW5nIHRoZSB2MiAoYGJsa19pb190cmFjZTJgKSBmb3JtYXQgd2hlbiBgYmxrX3RyYWNlcmAgaXMgZW5hYmxlZC4gVGhhdCBzaG91bGQgYXZvaWQgYW55IGJ1ZmZlciBzaXplIG1pc21hdGNoIG9yIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3Mgd2hlbiB0cmFjaW5nIHVzaW5nIGZ0cmFjZS4gVGhlIGBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKWAgZnVuY3Rpb24gaXMgYWxzbyB1cGRhdGVkIHRvIGV4cGxpY2l0bHkgc2V0IGBidC0mZ3Q7dmVyc2lvbiA9IDJgLgoKMi4gICoqUmVhY2hhYmlsaXR5OioqIFRoaXMgY29kZSBpcyBzbWFjay1kYWIgaW4gdGhlIGJsb2NrIHRyYWNpbmcgc3Vic3lzdGVtLCBzbyBpdCYjMzk7cyBjb3JlIGZ1bmN0aW9uYWxpdHkuIEl0IGlzIGFjY2Vzc2libGUgdGhyb3VnaCBzeXNmcyBjb25maWd1cmF0aW9uIOKAkyBgL3N5cy9ibG9jay8mbHQ7ZGV2Jmd0Oy90cmFjZS8uLi5gIOKAkyBhbmQgdGhlcmVmb3JlLCB0aHJvdWdoIHN0YW5kYXJkIGJsb2NrIEkvTyBvcGVyYXRpb25zIGFzIGxvbmcgYXMgYENPTkZJR19CTEtfREVWX0lPX1RSQUNFYCBpcyBlbmFibGVkLiBUaGlzIG1ha2VzIGl0IGEgZ3JlYXQgY2FuZGlkYXRlIGZvciBmdXp6aW5nIGFzIGl0IGlzIGEgY29tbW9uIGNvZGUgcGF0aC4KCjMuICAqKlZlcmRpY3Q6KiogIEdpdmVuIHRoZSB0YXJnZXRlZCBjb2RlLCB0aGUgcmVhY2hhYmlsaXR5IHZpYSBzdGFuZGFyZCBibG9jayBJL08gb3BlcmF0aW9ucyBhbmQgc3lzZnMsIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBwYXRjaCwgdGhlIHZlcmRpY3QgaXMgY2xlYXI6ICoqV29ydGhGdXp6aW5nID0gdHJ1ZS4qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfSU9fVFJBQ0UmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2Jsa19hZGRfdHJhY2UmIzM0OywKICAgICYjMzQ7YmxrX3RyYWNlX3NldHVwX3F1ZXVlJiMzNDssCiAgICAmIzM0O3JlY29yZF9ibGt0cmFjZV9ldmVudDImIzM0OywKICAgICYjMzQ7c3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIHRyYWNlIHN1YnN5c3RlbSAoa2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMpLCBzcGVjaWZpY2FsbHkgaW4gX19ibGtfYWRkX3RyYWNlKCkgYW5kIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB1bmNvbmRpdGlvbmFsbHkgdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGxheW91dCwgZWxpbWluYXRpbmcgcG90ZW50aWFsIGJ1ZmZlciBtaXNtYXRjaGVzIGFuZCBvdXQtb2YtYm91bmRzIHJlYWRzLCBhbmQgaW5pdGlhbGl6ZXMgYnQtXHUwMDNldmVyc2lvbiBmb3Igc3lzZnMtY29uZmlndXJlZCBxdWV1ZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBibG9jayBsYXllciB0cmFjaW5nIGxvZ2ljIGFjY2Vzc2libGUgdmlhIHN5c2ZzIGFuZCBibG9jayBJL08gaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0lPX1RSQUNFJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19ibGtfYWRkX3RyYWNlJiMzNDssCiAgICAmIzM0O2Jsa190cmFjZV9zZXR1cF9xdWV1ZSYjMzQ7LAogICAgJiMzNDtyZWNvcmRfYmxrdHJhY2VfZXZlbnQyJiMzNDssCiAgICAmIzM0O3N5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayB0cmFjZSBzdWJzeXN0ZW0gKGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jKSwgc3BlY2lmaWNhbGx5IGluIF9fYmxrX2FkZF90cmFjZSgpIGFuZCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBmdHJhY2UgcmluZyBidWZmZXIgdW5jb25kaXRpb25hbGx5IHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKSBsYXlvdXQsIGVsaW1pbmF0aW5nIHBvdGVudGlhbCBidWZmZXIgbWlzbWF0Y2hlcyBhbmQgb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGluaXRpYWxpemVzIGJ0LVx1MDAzZXZlcnNpb24gZm9yIHN5c2ZzLWNvbmZpZ3VyZWQgcXVldWVzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgYmxvY2sgbGF5ZXIgdHJhY2luZyBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIGEgZm9ybWF0IG1pc21hdGNoIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIC8gdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBmdHJhY2UgYmxvY2sgdHJhY2luZyBzdWJzeXN0ZW0gKGJsa3RyYWNlKS4gUHJldmlvdXNseSwgaWYgYnQtXHUwMDNldmVyc2lvbiB3YXMgMSBvciAwLCBfX2Jsa19hZGRfdHJhY2UoKSBjb3VsZCBhbGxvY2F0ZSBhbmQgd3JpdGUgYSBzbWFsbGVyIHYxIChibGtfaW9fdHJhY2UpIGV2ZW50IGludG8gdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB3aGlsZSBmdHJhY2UgY29uc3VtZXJzIHBhcnNlZCBlbnRyaWVzIHN0cmljdGx5IGFzIHYyIChibGtfaW9fdHJhY2UyKSwgcmVzdWx0aW5nIGluIHBkdV9zdGFydCgpIGluZGV4aW5nIG91dC1vZi1ib3VuZHMgYmV5b25kIHRoZSByZXNlcnZlZCBldmVudCBidWZmZXIuXG5cblRoaXMgY2xhc3Mgb2YgYnVnIChvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHVzZS1hZnRlci1mcmVlKSBpcyB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIGZ0cmFjZSBwYXRoIHRvIHVuY29uZGl0aW9uYWxseSByZWNvcmQgdjIgZXZlbnRzIG9mIHNpemUgc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKSAmIzQzOyBwZHVfbGVuICYjNDM7IGNnaWRfbGVuIGFuZCBpbml0aWFsaXplcyBidC1cdTAwM2V2ZXJzaW9uIHRvIDIgaW4gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCkgKHdoZXJlIHRoZSBtZW1vcnkgaXMgYWxyZWFkeSB6ZXJvLWFsbG9jYXRlZCB2aWEga3phbGxvY19vYmopLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjFmNzg4N2ZmZmFhZTY1YjE3ZjE2MTFhOWUwYWRlODZhMWE5ZDlhZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMDU6NTE6MDUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCmluZGV4IDhjZDI1MjBiNGM5OWUuLmFlMDEwOTY5YzE0NDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCkBAIC0zODUsNjYgJiM0MzszODUsMjYgQEAgc3RhdGljIHZvaWQgX19ibGtfYWRkX3RyYWNlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywKIAlpZiAoYmxrX3RyYWNlcikgewogCQlidWZmZXIgPSBibGtfdHItJmd0O2FycmF5X2J1ZmZlci5idWZmZXI7CiAJCXRyYWNlX2N0eCA9IHRyYWNpbmdfZ2VuX2N0eF9mbGFncygwKTsKLQkJc3dpdGNoIChidC0mZ3Q7dmVyc2lvbikgewotCQljYXNlIDE6Ci0JCQl0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZSk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQlkZWZhdWx0OgotCQkJLyoKLQkJCSAqIGZ0cmFjZSBhbHdheXMgdXNlcyB2MiAoYmxrX2lvX3RyYWNlMikgZm9ybWF0LgotCQkJICoKLQkJCSAqIEZvciBzeXNmcy1lbmFibGVkIHRyYWNpbmcgcGF0aCAoZW5hYmxlZCB2aWEKLQkJCSAqIC9zeXMvYmxvY2svREVWL3RyYWNlL2VuYWJsZSksIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpCi0JCQkgKiBuZXZlciBpbml0aWFsaXplcyBidC0mZ3Q7dmVyc2lvbiwgbGVhdmluZyBpdCAwIGZyb20KLQkJCSAqIGt6YWxsb2MoKS4gV2UgbXVzdCBoYW5kbGUgdmVyc2lvbj09MCBzYWZlbHkgaGVyZS4KLQkJCSAqCi0JCQkgKiBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCB0byBlbnN1cmUgd2UgbmV2ZXIgaGl0IHRoZQotCQkJICogb2xkIGJ1ZyB3aGVyZSBkZWZhdWx0IHNldCB0cmFjZV9sZW49MCwgY2F1c2luZwotCQkJICogYnVmZmVyIHVuZGVyZmxvdyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24uCi0JCQkgKgotCQkJICogQWx3YXlzIHVzZSB2MiBmb3JtYXQgZm9yIGZ0cmFjZSBhbmQgbm9ybWFsaXplCi0JCQkgKiBidC0mZ3Q7dmVyc2lvbiB0byAyIHdoZW4gdW5pbml0aWFsaXplZC4KLQkJCSAqLwotCQkJdHJhY2VfbGVuID0gc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKTsKLQkJCWlmIChidC0mZ3Q7dmVyc2lvbiA9PSAwKQotCQkJCWJ0LSZndDt2ZXJzaW9uID0gMjsKLQkJCWJyZWFrOwotCQl9Ci0JCXRyYWNlX2xlbiAmIzQzOz0gcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbjsKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgZnRyYWNlIHJpbmcgYnVmZmVyIGFsd2F5cyB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMikKJiM0MzsJCSAqIGZvcm1hdDsgdGhlIGZ0cmFjZSByZWFkZXJzIHBhcnNlIG9ubHkgdGhhdC4gYnQtJmd0O3ZlcnNpb24KJiM0MzsJCSAqIGRlc2NyaWJlcyBqdXN0IHRoZSByZWxheS9jbGFzc2ljIGJsa3RyYWNlIHJlY29yZCBmb3JtYXQuCiYjNDM7CQkgKiBSZWNvcmRpbmcgYSB2MS1zaXplZCBldmVudCBoZXJlIHdvdWxkIHNoaWZ0IHBkdV9zdGFydCgpIDE2CiYjNDM7CQkgKiBieXRlcyBwYXN0IHRoZSBQRFUgYW5kIG1ha2UgYmxrX2xvZ19yZW1hcCgpIHJlYWQgcGFzdCB0aGUKJiM0MzsJCSAqIGV2ZW50IChhIHVzZS1hZnRlci1mcmVlIG9uIGNvbmN1cnJlbnQgYnVmZmVyIHJlc2l6ZSksIGFuZCB2MQomIzQzOwkJICogY2Fubm90IHJlcHJlc2VudCB0aGUgbmV3ZXIgNjQtYml0IHpvbmUgYWN0aW9ucyBhbnl3YXkuCiYjNDM7CQkgKi8KJiM0MzsJCXRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgJiM0MzsgcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbjsKIAkJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQkxLLAogCQkJCQkJICB0cmFjZV9sZW4sIHRyYWNlX2N0eCk7CiAJCWlmICghZXZlbnQpCiAJCQlyZXR1cm47CiAKIAkJdHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTsKLQkJc3dpdGNoIChidC0mZ3Q7dmVyc2lvbikgewotCQljYXNlIDE6Ci0JCQlyZWNvcmRfYmxrdHJhY2VfZXZlbnQocmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCksCi0JCQkJCSAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLAotCQkJCQkgICAgICB3aGF0LCBidC0mZ3Q7ZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sCi0JCQkJCSAgICAgIHBkdV9kYXRhLCBwZHVfbGVuKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCWRlZmF1bHQ6Ci0JCQkvKgotCQkJICogVXNlIHYyIHJlY29yZGluZyBmdW5jdGlvbiAocmVjb3JkX2Jsa3RyYWNlX2V2ZW50MikKLQkJCSAqIHdoaWNoIHdyaXRlcyBibGtfaW9fdHJhY2UyIHN0cnVjdHVyZSB3aXRoIGNvcnJlY3QKLQkJCSAqIGZpZWxkIGxheW91dDoKLQkJCSAqICAgLSAzMi1iaXQgcGlkIGF0IG9mZnNldCAyOAotCQkJICogICAtIDY0LWJpdCBhY3Rpb24gYXQgb2Zmc2V0IDMyCi0JCQkgKgotCQkJICogRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgaGFuZGxlcyB2ZXJzaW9uPT0wIGNhc2UKLQkJCSAqIChmcm9tIHN5c2ZzIHBhdGgpLCBlbnN1cmluZyB3ZSBhbHdheXMgdXNlIGNvcnJlY3QKLQkJCSAqIHYyIHJlY29yZGluZyBmdW5jdGlvbiB0byBtYXRjaCB0aGUgdjIgYnVmZmVyCi0JCQkgKiBhbGxvY2F0ZWQgYWJvdmUuCi0JCQkgKi8KLQkJCXJlY29yZF9ibGt0cmFjZV9ldmVudDIocmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCksCi0JCQkJCSAgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcywKLQkJCQkJICAgICAgIHdoYXQsIGJ0LSZndDtkZXYsIGVycm9yLCBjZ2lkLCBjZ2lkX2xlbiwKLQkJCQkJICAgICAgIHBkdV9kYXRhLCBwZHVfbGVuKTsKLQkJCWJyZWFrOwotCQl9CiYjNDM7CQlyZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLAomIzQzOwkJCQkgICAgICAgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsCiYjNDM7CQkJCSAgICAgICB3aGF0LCBidC0mZ3Q7ZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sCiYjNDM7CQkJCSAgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7CiAKIAkJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYmxrX3RyLCBidWZmZXIsIGV2ZW50LCB0cmFjZV9jdHgpOwogCQlyZXR1cm47CkBAIC0xOTEzLDYgJiM0MzsxODczLDEyIEBAIHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAogCiAJYnQtJmd0O2RldiA9IGJkZXYtJmd0O2JkX2RldjsKIAlidC0mZ3Q7YWN0X21hc2sgPSAodTE2KS0xOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIHN5c2ZzLWVuYWJsZWQgcGF0aCBmZWVkcyB0aGUgZnRyYWNlIGJsayB0cmFjZXIsIHdoaWNoIGFsd2F5cwomIzQzOwkgKiB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMikgZm9ybWF0LiBJbml0aWFsaXplIHRoZSB2ZXJzaW9uIHNvIGl0IGlzCiYjNDM7CSAqIG5ldmVyIGxlZnQgZGFuZ2xpbmcgYXMgMCBmb3IgZnV0dXJlIGNvbnN1bWVycy4KJiM0MzsJICovCiYjNDM7CWJ0LSZndDt2ZXJzaW9uID0gMjsKIAogCWJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYmxrdHJhY2UgUGF0Y2ggZm9yIEZ1enppbmcgTmVlZHMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IHRoZSBmdXp6aW5nIHN0cmF0ZWd5LiBNeSBndXQgZmVlbGluZyBpcyB3ZSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIEtNU0FOIGhlcmUsIGJ1dCBsZXQmIzM5O3MgYmUgbWV0aG9kaWNhbC4KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlLiBUaGUgZGlmZiB0b3VjaGVzIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AsIHNwZWNpZmljYWxseSBgX19ibGtfYWRkX3RyYWNlYC4gUHJldmlvdXNseSwgaXQgc2VlbXMgd2UgaGFkIGEgdmVyc2lvbiBjaGVjayAoYGJ0LSZndDt2ZXJzaW9uYCkgd2l0aCBhIHN3aXRjaC1jYXNlIHRvIGhhbmRsZSBlaXRoZXIgYHJlY29yZF9ibGt0cmFjZV9ldmVudGAgKHZlcnNpb24gMSkgb3IgYHJlY29yZF9ibGt0cmFjZV9ldmVudDJgICh2ZXJzaW9uIDIpLCBkZXRlcm1pbmluZyBgdHJhY2VfbGVuYCBhY2NvcmRpbmdseS4gTm93LCB0aGUgcGF0Y2ggdW5jb25kaXRpb25hbGx5IHVzZXMgYHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgJiM0MzsgcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbmAgYW5kIGNhbGxzIGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyYC4gSW50ZXJlc3RpbmcuIEFsc28sIGBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKWAgbm93IGV4cGxpY2l0bHkgc2V0cyBgYnQtJmd0O3ZlcnNpb24gPSAyYCB3aGVuIGBidGAgaXMgYWxsb2NhdGVkIHZpYSBga3phbGxvY2AuCgpUaGlzIGlzIHdoZXJlIEkmIzM5O20gc3RhcnRpbmcgdG8gZ2V0IGEgYml0IGNvbmNlcm5lZCBhYm91dCBwb3RlbnRpYWwgdW5kZXJmbG93cyBvciBvdmVyZmxvd3MuIFRoZSBoYXJkY29kaW5nIG9mIHZlcnNpb24gMiBhbmQgdGhlIGRpcmVjdCB1c2Ugb2YgYHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMilgIHdpdGhvdXQgYW55IGNvbmRpdGlvbmFsIGNoZWNrcyByYWlzZXMgZmxhZ3MuIEkgbmVlZCB0byBzZWUgaG93IGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyYCBhbmQgYHJlY29yZF9ibGt0cmFjZV9ldmVudGAgYXJlIGRlZmluZWQgYW5kIGhvdyB0aGV5IGhhbmRsZSB0aGUgZGF0YS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGluc3BlY3QgdGhvc2UgZnVuY3Rpb25zIGluIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2Agbm93LiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaG93IHRoYXQgc2l6ZSBjYWxjdWxhdGlvbiBpcyB1c2VkIGFuZCBpZiB0aGVyZSBtaWdodCBiZSBvcHBvcnR1bml0aWVzIGZvciBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcywgZXNwZWNpYWxseSBnaXZlbiB0aGUgaW5jbHVzaW9uIG9mIGBwZHVfbGVuYCBhbmQgYGNnaWRfbGVuYC4gQmFzZWQgb24gd2hhdCBJIHNlZSBpbiB0aG9zZSBmdW5jdGlvbnMsIEkgY2FuIHRoZW4gZGVjaWRlIHdoZXRoZXIgS0FTQU4vc3RhbmRhcmQgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IG9yIGlmIEtNU0FOIGZ1enppbmcgaXMgbmVjZXNzYXJ5IHRvIGNhdGNoIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbiBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWNvcmRfYmxrdHJhY2VfZXZlbnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz02ND1zdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY1LVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NjY6c3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHN0cnVjdCBibGtfaW9fdHJhY2UgKnQsIHBpZF90IHBpZCwgaW50IGNwdSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY3LVx0XHRcdFx0ICBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywgdTY0IHdoYXQsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTMtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NDpzdGF0aWMgdm9pZCByZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHN0cnVjdCBibGtfaW9fdHJhY2UyICp0MiwgcGlkX3QgcGlkLCBpbnQgY3B1LFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTUtXHRcdFx0XHQgICBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywgdTY0IHdoYXQsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTE2PXN0YXRpYyB2b2lkIHJlbGF5X2Jsa3RyYWNlX2V2ZW50MShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgdW5zaWduZWQgbG9uZyBzZXF1ZW5jZSxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMzEtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMzI6XHRyZWNvcmRfYmxrdHJhY2VfZXZlbnQodCwgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsIHdoYXQsIGJ0LVx1MDAzZWRldiwgZXJyb3IsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMzMtXHRcdFx0ICAgICAgY2dpZCwgY2dpZF9sZW4sIHBkdV9kYXRhLCBwZHVfbGVuKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMzY9c3RhdGljIHZvaWQgcmVsYXlfYmxrdHJhY2VfZXZlbnQyKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE1MS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE1MjpcdHJlY29yZF9ibGt0cmFjZV9ldmVudDIodCwgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsIHdoYXQsIGJ0LVx1MDAzZWRldiwgZXJyb3IsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNTMtXHRcdFx0ICAgICAgIGNnaWQsIGNnaWRfbGVuLCBwZHVfZGF0YSwgcGR1X2xlbik7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTczPXN0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgdTY0IGFjdGlvbixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTQtXHRcdHQgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE5NTpcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50Mih0LCBwaWQsIGNwdSwgMCwgMCxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5Ni1cdFx0XHRcdCAgICAgICBhY3Rpb24sIGJ0LVx1MDAzZWRldiwgMCwgY2dpZCwgY2dpZF9sZW4sXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MzEwPXN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDAzLVx0XHR0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDA0Olx0XHRyZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDA1LVx0XHRcdFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTk4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgQmxrdHJhY2UgRXZlbnQgUmVjb3JkaW5nKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYmxrdHJhY2UgZXZlbnRzIGFyZSBhY3R1YWxseSBjYXB0dXJlZCBhbmQgbG9nZ2VkLCBzbyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBjb3JlIGZ1bmN0aW9uczogYHJlY29yZF9ibGt0cmFjZV9ldmVudDJgLCBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50YCwgYW5kIGFueXRoaW5nIHJlbGF0ZWQgdG8gYF9fYmxrX2FkZF90cmFjZWAuIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgY2xldmVyIHVzZSBvZiBwZXItY3B1IGJ1ZmZlcnMgb3IgcmluZyBidWZmZXJzLCBsaWtlbHkgd2l0aCBjYXJlZnVsIGF0dGVudGlvbiB0byBsb2NraW5nIGFuZCBtZW1vcnkgYmFycmllcnMgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5LCBlc3BlY2lhbGx5IGR1cmluZyBoaWdoIEkvTyBsb2Fkcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3Igd2hlcmUgdGhlIGFjdHVhbCB0aW1lc3RhbXBpbmcgaGFwcGVucyDigJMgaXMgaXQgaGFyZHdhcmUtYmFzZWQgb3Igc29mdHdhcmUtYmFzZWQsIGFuZCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBhY2N1cmFjeT8gRnVydGhlcm1vcmUsIEkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrczsgaG93IG11Y2ggb3ZlcmhlYWQgZG9lcyB0aGlzIHRyYWNpbmcgYWRkIHRvIHJlZ3VsYXIgYmxvY2sgSS9PIG9wZXJhdGlvbnM/IEFyZSB0aGVyZSBhbnkgb3B0aW1pemF0aW9ucyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBldmVudCBiZWluZyB0cmFjZWQ/IEFyZSB0aGVyZSBhbnkgY2xldmVyIHRyaWNrcyB0byBoYW5kbGUgZXZlbnQgZmlsdGVyaW5nIG9yIHJhdGUgbGltaXRpbmcgdG8gYXZvaWQgb3ZlcndoZWxtaW5nIHRoZSBzeXN0ZW0/IEkgd2lsbCBhbHNvIGJlIGN1cmlvdXMgYWJvdXQgaG93IHRoZSBhY3R1YWwgdHJhY2UgZGF0YSBnZXRzIGNvbnN1bWVkIGFuZCBzdG9yZWQsIGhvdyBtdWNoIGNvbnRleHQgaXMgaW5jbHVkZWQgd2l0aCBlYWNoIGV2ZW50LCBhbmQgaG93IHRoZSB0cmFjZSBidWZmZXIgaXMgbWFuYWdlZC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwcm9ibGVtcykgbGllLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdHN0YXRpYyBERUZJTkVfTVVURVgoYmxrX3Byb2JlX211dGV4KTtcbiAgNjE6XHRzdGF0aWMgaW50IGJsa19wcm9iZXNfcmVmO1xuICA2MjpcdFxuICA2MzpcdHN0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcbiAgNjQ6XHRzdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcbiAgNjU6XHRcbiAgNjY6XHRzdGF0aWMgdm9pZCByZWNvcmRfYmxrdHJhY2VfZXZlbnQoc3RydWN0IGJsa19pb190cmFjZSAqdCwgcGlkX3QgcGlkLCBpbnQgY3B1LFxuICA2NzpcdFx0XHRcdFx0ICBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywgdTY0IHdoYXQsXG4gIDY4Olx0XHRcdFx0XHQgIGRldl90IGRldiwgaW50IGVycm9yLCB1NjQgY2dpZCxcbiAgNjk6XHRcdFx0XHRcdCAgc3NpemVfdCBjZ2lkX2xlbiwgdm9pZCAqcGR1X2RhdGEsIGludCBwZHVfbGVuKVxuICA3MDpcdFxuICA3MTpcdHtcbiAgNzI6XHRcdC8qXG4gIDczOlx0XHQgKiBUaGVzZSB0d28gYXJlIG5vdCBuZWVkZWQgaW4gZnRyYWNlIGFzIHRoZXkgYXJlIGluIHRoZVxuICA3NDpcdFx0ICogZ2VuZXJpYyB0cmFjZV9lbnRyeSwgZmlsbGVkIGJ5IHRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUsXG4gIDc1Olx0XHQgKiBidXQgZm9yIHRoZSB0cmFjZV9ldmVudC1cdTAwM2ViaW4oKSBzeW50aGVzaXplciBiZW5lZml0IHdlIGRvIGl0XG4gIDc2Olx0XHQgKiBoZXJlIHRvby5cbiAgNzc6XHRcdCAqL1xuICA3ODpcdFx0dC1cdTAwM2VjcHUgPSBjcHU7XG4gIDc5Olx0XHR0LVx1MDAzZXBpZCA9IHBpZDtcbiAgODA6XHRcbiAgODE6XHRcdHQtXHUwMDNlc2VjdG9yID0gc2VjdG9yO1xuICA4MjpcdFx0dC1cdTAwM2VieXRlcyA9IGJ5dGVzO1xuICA4MzpcdFx0dC1cdTAwM2VhY3Rpb24gPSBsb3dlcl8zMl9iaXRzKHdoYXQpO1xuICA4NDpcdFx0dC1cdTAwM2VkZXZpY2UgPSBkZXY7XG4gIDg1Olx0XHR0LVx1MDAzZWVycm9yID0gZXJyb3I7XG4gIDg2Olx0XHR0LVx1MDAzZXBkdV9sZW4gPSBwZHVfbGVuICYjNDM7IGNnaWRfbGVuO1xuICA4NzpcdFxuICA4ODpcdFx0aWYgKGNnaWRfbGVuKVxuICA4OTpcdFx0XHRtZW1jcHkoKHZvaWQgKil0ICYjNDM7IHNpemVvZigqdCksIFx1MDAyNmNnaWQsIGNnaWRfbGVuKTtcbiAgOTA6XHRcdGlmIChwZHVfbGVuKVxuICA5MTpcdFx0XHRtZW1jcHkoKHZvaWQgKil0ICYjNDM7IHNpemVvZigqdCkgJiM0MzsgY2dpZF9sZW4sIHBkdV9kYXRhLCBwZHVfbGVuKTtcbiAgOTI6XHR9XG4gIDkzOlx0XG4gIDk0Olx0c3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDIsIHBpZF90IHBpZCwgaW50IGNwdSxcbiAgOTU6XHRcdFx0XHRcdCAgIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLCB1NjQgd2hhdCxcbiAgOTY6XHRcdFx0XHRcdCAgIGRldl90IGRldiwgaW50IGVycm9yLCB1NjQgY2dpZCxcbiAgOTc6XHRcdFx0XHRcdCAgIHNzaXplX3QgY2dpZF9sZW4sIHZvaWQgKnBkdV9kYXRhLFxuICA5ODpcdFx0XHRcdFx0ICAgaW50IHBkdV9sZW4pXG4gIDk5Olx0e1xuIDEwMDpcdFx0dDItXHUwMDNlcGlkID0gcGlkO1xuIDEwMTpcdFx0dDItXHUwMDNlY3B1ID0gY3B1O1xuIDEwMjpcdFxuIDEwMzpcdFx0dDItXHUwMDNlc2VjdG9yID0gc2VjdG9yO1xuIDEwNDpcdFx0dDItXHUwMDNlYnl0ZXMgPSBieXRlcztcbiAxMDU6XHRcdHQyLVx1MDAzZWFjdGlvbiA9IHdoYXQ7XG4gMTA2Olx0XHR0Mi1cdTAwM2VkZXZpY2UgPSBkZXY7XG4gMTA3Olx0XHR0Mi1cdTAwM2VlcnJvciA9IGVycm9yO1xuIDEwODpcdFx0dDItXHUwMDNlcGR1X2xlbiA9IHBkdV9sZW4gJiM0MzsgY2dpZF9sZW47XG4gMTA5Olx0XG4gMTEwOlx0XHRpZiAoY2dpZF9sZW4pXG4gMTExOlx0XHRcdG1lbWNweSgodm9pZCAqKXQyICYjNDM7IHNpemVvZigqdDIpLCBcdTAwMjZjZ2lkLCBjZ2lkX2xlbik7XG4gMTEyOlx0XHRpZiAocGR1X2xlbilcbiAxMTM6XHRcdFx0bWVtY3B5KCh2b2lkICopdDIgJiM0Mzsgc2l6ZW9mKCp0MikgJiM0MzsgY2dpZF9sZW4sIHBkdV9kYXRhLCBwZHVfbGVuKTtcbiAxMTQ6XHR9XG4gMTE1Olx0XG4gMTE2Olx0c3RhdGljIHZvaWQgcmVsYXlfYmxrdHJhY2VfZXZlbnQxKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxuIDExNzpcdFx0XHRcdFx0IHBpZF90IHBpZCwgaW50IGNwdSwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXG4gMTE4Olx0XHRcdFx0XHQgdTY0IHdoYXQsIGludCBlcnJvciwgdTY0IGNnaWQsXG4gMTE5Olx0XHRcdFx0XHQgc3NpemVfdCBjZ2lkX2xlbiwgdm9pZCAqcGR1X2RhdGEsIGludCBwZHVfbGVuKVxuIDEyMDpcdHtcbiAxMjE6XHRcdHN0cnVjdCBibGtfaW9fdHJhY2UgKnQ7XG4gMTIyOlx0XHRzaXplX3QgdHJhY2VfbGVuID0gc2l6ZW9mKCp0KSAmIzQzOyBwZHVfbGVuICYjNDM7IGNnaWRfbGVuO1xuIDEyMzpcdFxuIDEyNDpcdFx0dCA9IHJlbGF5X3Jlc2VydmUoYnQtXHUwMDNlcmNoYW4sIHRyYWNlX2xlbik7XG4gMTI1Olx0XHRpZiAoIXQpXG4gMTI2Olx0XHRcdHJldHVybjtcbiAxMjc6XHRcbiAxMjg6XHRcdHQtXHUwMDNlbWFnaWMgPSBCTEtfSU9fVFJBQ0VfTUFHSUMgfCBCTEtfSU9fVFJBQ0VfVkVSU0lPTjtcbiAxMjk6XHRcdHQtXHUwMDNlc2VxdWVuY2UgPSBzZXF1ZW5jZTtcbiAxMzA6XHRcdHQtXHUwMDNldGltZSA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTtcbiAxMzE6XHRcbiAxMzI6XHRcdHJlY29yZF9ibGt0cmFjZV9ldmVudCh0LCBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcywgd2hhdCwgYnQtXHUwMDNlZGV2LCBlcnJvcixcbiAxMzM6XHRcdFx0XHQgICAgICBjZ2lkLCBjZ2lkX2xlbiwgcGR1X2RhdGEsIHBkdV9sZW4pO1xuIDEzNDpcdH1cbiAxMzU6XHRcbiAxMzY6XHRzdGF0aWMgdm9pZCByZWxheV9ibGt0cmFjZV9ldmVudDIoc3RydWN0IGJsa190cmFjZSAqYnQsIHVuc2lnbmVkIGxvbmcgc2VxdWVuY2UsXG4gMTM3Olx0XHRcdFx0XHQgIHBpZF90IHBpZCwgaW50IGNwdSwgc2VjdG9yX3Qgc2VjdG9yLFxuIDEzODpcdFx0XHRcdFx0ICBpbnQgYnl0ZXMsIHU2NCB3aGF0LCBpbnQgZXJyb3IsIHU2NCBjZ2lkLFxuIDEzOTpcdFx0XHRcdFx0ICBzc2l6ZV90IGNnaWRfbGVuLCB2b2lkICpwZHVfZGF0YSwgaW50IHBkdV9sZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyOTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQmxrdHJhY2UgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2guIFRoZSBjb21taXQgY29tbWVudCBzYXlzIGl0JiMzOTtzIGFib3V0IGFuIGZ0cmFjZSByaW5nIGJ1ZmZlciBpc3N1ZS4gVGhlIGNvcmUgc2VlbXMgdG8gYmUgdGhhdCBgYmxrX2lvX3RyYWNlMmAgaXMgdGhlIG9ubHkgZm9ybWF0IHRoZSBmdHJhY2UgcmVhZGVycyBhcmUgZXhwZWN0aW5nLCBidXQgdGhlcmUgd2FzIGEgbWlzbWF0Y2ggaW4gaG93IHRoZSB2ZXJzaW9uIHdhcyBiZWluZyBoYW5kbGVkLiBBcHBhcmVudGx5LCBgYnQtJmd0O3ZlcnNpb25gIHdhcyBkZXNjcmliaW5nIHRoZSAqcmVsYXkvY2xhc3NpYyogYmxrdHJhY2UgZm9ybWF0LCBub3QgdGhlIGZ0cmFjZSBvbmUuIFRoZSBjb21tZW50IHNwZWNpZmljYWxseSBtZW50aW9ucyBhbiBpc3N1ZSB3aXRoIHJlY29yZGluZyBhIHYxLXNpemVkIGV2ZW50IHdoaWNoIHdvdWxkIGNhdXNlIGEgYHBkdV9zdGFydCgpYCBvZmZzZXQgZXJyb3IsIGxlYWRpbmcgdG8gYSBgYmxrX2xvZ19yZW1hcCgpYCBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHBvc3NpYmxlIHVzZS1hZnRlci1mcmVlLCBlc3BlY2lhbGx5IGlmIHRoZSBidWZmZXIgZ2V0cyByZXNpemVkIGNvbmN1cnJlbnRseS4gQW5kLCBpdCBtZW50aW9ucyB0aGF0IHYxIGFsc28gY2FuJiMzOTt0IHJlcHJlc2VudCB0aGUgbmV3ZXIgNjQtYml0IHpvbmUgYWN0aW9ucy4KClNvLCBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgaG93IGBibGtfaW9fdHJhY2VgIGFuZCBgYmxrX2lvX3RyYWNlMmAgYXJlIGRlZmluZWQgYW5kIGhvdyB0aGV5IGFyZSB1c2VkLiBUaGUga2V5IGlzIGluIHRoZSBzdHJ1Y3R1cmVzLCB0aGUgc3RydWN0dXJlcy4gTGV0JiMzOTtzIGZpbmQgdGhvc2Ugc3RydWN0dXJlIGRlZmluaXRpb25zIGFuZCB0cmFjZSB0aGVpciB1c2FnZSB0byBnZXQgYSBjb25jcmV0ZSBncmFzcCBvZiBob3cgdGhpcyBpcyBhbGwgc3VwcG9zZWQgdG8gd29yayBhbmQgd2hhdCB3ZW50IHdyb25nIGluIHRoaXMgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGJsa19pb190cmFjZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmg9NzU9ZW51bSBibGt0cmFjZV9ub3RpZnkge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9ibGt0cmFjZV9hcGkuaC0xMjAtICovXG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmg6MTIxOnN0cnVjdCBibGtfaW9fdHJhY2Uge1xuaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3RyYWNlX2FwaS5oLTEyMi1cdF9fdTMyIG1hZ2ljO1x0XHQvKiBNQUdJQyBcdTAwM2NcdTAwM2MgOCB8IHZlcnNpb24gKi9cbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmgtMTM1LVxuaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3RyYWNlX2FwaS5oOjEzNjpzdHJ1Y3QgYmxrX2lvX3RyYWNlMiB7XG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmgtMTM3LVx0X191MzIgbWFnaWM7XHRcdC8qIE1BR0lDIFx1MDAzY1x1MDAzYyA4IHwgQkxLX0lPX1RSQUNFMl9WRVJTSU9OICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3RyYWNlX2FwaS5oLTE1My0gKi9cbmluY2x1ZGUvdWFwaS9saW51eC9ibGt0cmFjZV9hcGkuaDoxNTQ6c3RydWN0IGJsa19pb190cmFjZV9yZW1hcCB7XG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmgtMTU1LVx0X19iZTMyIGRldmljZV9mcm9tO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTY0PXN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNjUtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo2NjpzdGF0aWMgdm9pZCByZWNvcmRfYmxrdHJhY2VfZXZlbnQoc3RydWN0IGJsa19pb190cmFjZSAqdCwgcGlkX3QgcGlkLCBpbnQgY3B1LFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNjctXHRcdFx0XHQgIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLCB1NjQgd2hhdCxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05My1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk0OnN0YXRpYyB2b2lkIHJlY29yZF9ibGt0cmFjZV9ldmVudDIoc3RydWN0IGJsa19pb190cmFjZTIgKnQyLCBwaWRfdCBwaWQsIGludCBjcHUsXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NS1cdFx0XHRcdCAgIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLCB1NjQgd2hhdCxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMTY9c3RhdGljIHZvaWQgcmVsYXlfYmxrdHJhY2VfZXZlbnQxKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyMC17XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMjE6XHRzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0O1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTIyLVx0c2l6ZV90IHRyYWNlX2xlbiA9IHNpemVvZigqdCkgJiM0MzsgcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbjtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMzY9c3RhdGljIHZvaWQgcmVsYXlfYmxrdHJhY2VfZXZlbnQyKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE0MC17XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNDE6XHRzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE0MjpcdHNpemVfdCB0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICYjNDM7IHBkdV9sZW4gJiM0MzsgY2dpZF9sZW47XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNDMtXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTczPXN0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgdTY0IGFjdGlvbixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODQtXHRpZiAoYmxrX3RyYWNlcikge1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTg1Olx0XHRzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4Ni1cdFx0c2l6ZV90IHRyYWNlX2xlbiA9IHNpemVvZigqdCkgJiM0MzsgY2dpZF9sZW4gJiM0MzsgbGVuO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTMxMD1zdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTM5Ni1cdFx0ICovXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzozOTc6XHRcdHRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgJiM0MzsgcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbjtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTM5OC1cdFx0ZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQkxLLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExOTk9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fcmVtYXAodm9pZCAqaWdub3JlLCBzdHJ1Y3QgYmlvICpiaW8sIGRldl90IGRldixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjAzLVx0c3RydWN0IGJsa190cmFjZSAqYnQ7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMjA0Olx0c3RydWN0IGJsa19pb190cmFjZV9yZW1hcCByO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTIwNS1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMjM2PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfcmVtYXAodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGRldl90IGRldixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjM5LVx0c3RydWN0IGJsa190cmFjZSAqYnQ7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMjQwOlx0c3RydWN0IGJsa19pb190cmFjZV9yZW1hcCByO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI0MS1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMzMyPXN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTM1Ny0vKlxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTM1ODogKiBzdHJ1Y3QgYmxrX2lvX3RyYWNlciBmb3JtYXR0aW5nIHJvdXRpbmVzXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMzU5LSAqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTM2MC1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEzNjE6c3RhdGljIHZvaWQgZmlsbF9yd2JzKGNoYXIgKnJ3YnMsIGNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UyICp0KVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTM2Mi17XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTM5OD1zdGF0aWMgaW5saW5lXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMzk5OmNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UyICp0ZV9ibGtfaW9fdHJhY2UoY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNDAwLXtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE0MDE6XHRyZXR1cm4gKGNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UyICopZW50O1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQwMi19XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTQ1Mz1zdGF0aWMgdm9pZCBibGtfbG9nX2FjdGlvbl9jbGFzc2ljKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE0NTktXHR1bnNpZ25lZCBzZWNzXHQgICAgICAgPSAodW5zaWduZWQgbG9uZyl0cztcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE0NjA6XHRjb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdCA9IHRlX2Jsa19pb190cmFjZShpdGVyLVx1MDAzZWVudCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNDYxLVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTE0NzA9c3RhdGljIHZvaWQgYmxrX2xvZ19hY3Rpb24oc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBjb25zdCBjaGFyICphY3QsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQ3My1cdGNoYXIgcndic1tSV0JTX0xFTl07XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNDc0Olx0Y29uc3Qgc3RydWN0IGJsa19pb190cmFjZTIgKnQgPSB0ZV9ibGtfaW9fdHJhY2UoaXRlci1cdTAwM2VlbnQpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQ3NS1cbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNTg3PXN0YXRpYyB2b2lkIGJsa19sb2dfcmVtYXAoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQsIGJvb2wgaGFzX2NnKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTU4OC17XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNTg5Olx0Y29uc3Qgc3RydWN0IGJsa19pb190cmFjZV9yZW1hcCAqX19yID0gcGR1X3N0YXJ0KGVudCwgaGFzX2NnKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE1OTAtXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTY5MD1zdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfb25lX2xpbmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE2OTQtXHRzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gXHUwMDI2aXRlci1cdTAwM2VzZXE7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNjk1Olx0Y29uc3Qgc3RydWN0IGJsa19pb190cmFjZTIgKnQ7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNjk2LVx0dTE2IHdoYXQ7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTcyOT1zdGF0aWMgdm9pZCBibGtfdHJhY2Vfc3ludGhlc2l6ZV9vbGRfdHJhY2Uoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE3MzEtXHRzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gXHUwMDI2aXRlci1cdTAwM2VzZXE7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNzMyOlx0c3RydWN0IGJsa19pb190cmFjZTIgKnQgPSAoc3RydWN0IGJsa19pb190cmFjZTIgKilpdGVyLVx1MDAzZWVudDtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3MzM6XHRjb25zdCBpbnQgb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGJsa19pb190cmFjZTIsIHNlY3Rvcik7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNzM0Olx0c3RydWN0IGJsa19pb190cmFjZSBvbGQgPSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNzM1LVx0XHQubWFnaWNcdCAgPSBCTEtfSU9fVFJBQ0VfTUFHSUMgfCBCTEtfSU9fVFJBQ0VfVkVSU0lPTixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNzk5PXN0YXRpYyBpbnQgX19pbml0IF9faW5pdF9ibGtfdHJhY2VyKHZvaWQpXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTgxMy1cdFx0ICAgICBfX2FsaWdub2ZfXyhsb25nKSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxODE0Olx0QlVJTERfQlVHX09OKF9fYWxpZ25vZl9fKHN0cnVjdCBibGtfaW9fdHJhY2UyKSAlIF9fYWxpZ25vZl9fKGxvbmcpKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4MTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxMjMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkRpdmluZyBpbnRvIGJsa3RyYWNlX2FwaS5oKioKCk9rYXksIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBpbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmhgLCBzcGVjaWZpY2FsbHkgc29tZXdoZXJlIGluIHRoZSB2aWNpbml0eSBvZiBsaW5lcyAxMjAgdGhyb3VnaCAxNTAuIFRoYXQgc2VjdGlvbiBpcyB1c3VhbGx5IHdoZXJlIHRoZXkgZGVmaW5lIHNvbWUgb2YgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIG9yIGNvbnN0YW50cyB0aGF0IGdvdmVybiB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGJsb2NrIHRyYWNlIHRvb2wgYW5kIHRoZSBrZXJuZWwuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIHRoaXMgYXJlYSwgYXMgSSYjMzk7dmUgYmVlbiB3b3JraW5nIGF0IHN1Y2ggYSBoaWdoIGxldmVsIGxhdGVseS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBhbnkgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSByZWNlbnRseSB0byB0aGUgZXZlbnQgZGVmaW5pdGlvbnMgb3IgZmxhZ3MgdGhlcmUuIEFueSBtb2RpZmljYXRpb24gdG8gdGhlc2Ugd2lsbCBuZWVkIHRvIGJlIGNhcmVmdWxseSBjb25zaWRlcmVkIGluIHJlbGF0aW9uIHRvIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyB0cmFjZSB0b29scyBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB3ZSYjMzk7cmUgY29uc3VtaW5nLiBUaGlzIHBhcnRpY3VsYXIgcG9ydGlvbiBvZiB0aGUgaGVhZGVyIGlzIGEgY3JpdGljYWwgcG9pbnQgb2YgaW50ZXJvcGVyYWJpbGl0eS4gTGV0IG1lIGZvY3VzIG9uIHRoaXMgc2VjdGlvbiBhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUga2VybmVsJiMzOTtzIGJsb2NrIGxheWVyIGV2ZW50IGhhbmRsaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucyBpZiB0aGV5JiMzOTt2ZSBjaGFuZ2VkIHRoaW5ncyBhdCB0aGlzIGxldmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9ibGt0cmFjZV9hcGkuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0ICovXG4gMTIxOlx0c3RydWN0IGJsa19pb190cmFjZSB7XG4gMTIyOlx0XHRfX3UzMiBtYWdpYztcdFx0LyogTUFHSUMgXHUwMDNjXHUwMDNjIDggfCB2ZXJzaW9uICovXG4gMTIzOlx0XHRfX3UzMiBzZXF1ZW5jZTtcdFx0LyogZXZlbnQgbnVtYmVyICovXG4gMTI0Olx0XHRfX3U2NCB0aW1lO1x0XHQvKiBpbiBuYW5vc2Vjb25kcyAqL1xuIDEyNTpcdFx0X191NjQgc2VjdG9yO1x0XHQvKiBkaXNrIG9mZnNldCAqL1xuIDEyNjpcdFx0X191MzIgYnl0ZXM7XHRcdC8qIHRyYW5zZmVyIGxlbmd0aCAqL1xuIDEyNzpcdFx0X191MzIgYWN0aW9uO1x0XHQvKiB3aGF0IGhhcHBlbmVkICovXG4gMTI4Olx0XHRfX3UzMiBwaWQ7XHRcdC8qIHdobyBkaWQgaXQgKi9cbiAxMjk6XHRcdF9fdTMyIGRldmljZTtcdFx0LyogZGV2aWNlIG51bWJlciAqL1xuIDEzMDpcdFx0X191MzIgY3B1O1x0XHQvKiBvbiB3aGF0IGNwdSBkaWQgaXQgaGFwcGVuICovXG4gMTMxOlx0XHRfX3UxNiBlcnJvcjtcdFx0LyogY29tcGxldGlvbiBlcnJvciAqL1xuIDEzMjpcdFx0X191MTYgcGR1X2xlbjtcdFx0LyogbGVuZ3RoIG9mIGRhdGEgYWZ0ZXIgdGhpcyB0cmFjZSAqL1xuIDEzMzpcdFx0LyogY2dyb3VwIGlkIHdpbGwgYmUgc3RvcmVkIGhlcmUgaWYgZXhpc3RzICovXG4gMTM0Olx0fTtcbiAxMzU6XHRcbiAxMzY6XHRzdHJ1Y3QgYmxrX2lvX3RyYWNlMiB7XG4gMTM3Olx0XHRfX3UzMiBtYWdpYztcdFx0LyogTUFHSUMgXHUwMDNjXHUwMDNjIDggfCBCTEtfSU9fVFJBQ0UyX1ZFUlNJT04gKi9cbiAxMzg6XHRcdF9fdTMyIHNlcXVlbmNlO1x0XHQvKiBldmVudCBudW1iZXIgKi9cbiAxMzk6XHRcdF9fdTY0IHRpbWU7XHRcdC8qIGluIG5hbm9zZWNvbmRzICovXG4gMTQwOlx0XHRfX3U2NCBzZWN0b3I7XHRcdC8qIGRpc2sgb2Zmc2V0ICovXG4gMTQxOlx0XHRfX3UzMiBieXRlcztcdFx0LyogdHJhbnNmZXIgbGVuZ3RoICovXG4gMTQyOlx0XHRfX3UzMiBwaWQ7XHRcdC8qIHdobyBkaWQgaXQgKi9cbiAxNDM6XHRcdF9fdTY0IGFjdGlvbjtcdFx0Lyogd2hhdCBoYXBwZW5lZCAqL1xuIDE0NDpcdFx0X191MzIgZGV2aWNlO1x0XHQvKiBkZXZpY2UgbnVtYmVyICovXG4gMTQ1Olx0XHRfX3UzMiBjcHU7XHRcdC8qIG9uIHdoYXQgY3B1IGRpZCBpdCBoYXBwZW4gKi9cbiAxNDY6XHRcdF9fdTE2IGVycm9yO1x0XHQvKiBjb21wbGV0aW9uIGVycm9yICovXG4gMTQ3Olx0XHRfX3UxNiBwZHVfbGVuO1x0XHQvKiBsZW5ndGggb2YgZGF0YSBhZnRlciB0aGlzIHRyYWNlICovXG4gMTQ4Olx0XHRfX3U4IHBhZFsxMl07XG4gMTQ5Olx0XHQvKiBjZ3JvdXAgaWQgd2lsbCBiZSBzdG9yZWQgaGVyZSBpZiBpdCBleGlzdHMgKi9cbiAxNTA6XHR9O1xuIDE1MTpcdC8qXG4gMTUyOlx0ICogVGhlIHJlbWFwIGV2ZW50XG4gMTUzOlx0ICovXG4gMTU0Olx0c3RydWN0IGJsa19pb190cmFjZV9yZW1hcCB7XG4gMTU1Olx0XHRfX2JlMzIgZGV2aWNlX2Zyb207XG4gMTU2Olx0XHRfX2JlMzIgZGV2aWNlX3RvO1xuIDE1NzpcdFx0X19iZTY0IHNlY3Rvcl9mcm9tO1xuIDE1ODpcdH07XG4gMTU5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDkxCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogODIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRml4IGZvciBhIEJsay1UcmFjZXIgT3V0LW9mLUJvdW5kcyBSZWFkKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMsICYjMzQ7V2hhdCYjMzk7cyB0aGUgYmVmb3JlIGFuZCBhZnRlcj8mIzM0OyBGcm9tIHdoYXQgSSYjMzk7bSByZWFkaW5nLCBpdCBhcHBlYXJzIHRoZSBgYmxrX3RyYWNlcmAgKGZ0cmFjZSYjMzk7cyBibG9jayBJL08gdHJhY2luZykgaGFkIGEgc3VidGxlIGJ1dCBjcml0aWNhbCBidWcuIEl0IGludm9sdmVzIGhvdyBkYXRhIGlzIHdyaXR0ZW4gdG8gYW5kIHJlYWQgZnJvbSB0aGUgZnRyYWNlIHJpbmcgYnVmZmVyIHVzaW5nIGBzdHJ1Y3QgYmxrX2lvX3RyYWNlMmAuCgpQcmV2aW91c2x5LCB0aGUgY29kZSB3YXMgaW5jb25zaXN0ZW50LiBXaGVuIGBidC0mZ3Q7dmVyc2lvbmAgd2FzIDEg4oCTIHdoaWNoIGNvdWxkIGhhcHBlbiB1bmRlciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIHVzaW5nIGNsYXNzaWMgYmxrdHJhY2Ugb3IgcmVsYXkgd2l0aCB2ZXJzaW9uIDEg4oCTIGBfX2Jsa19hZGRfdHJhY2VgIGFsbG9jYXRlZCBidWZmZXIgc3BhY2UgZm9yIHRoZSBvbGRlciBgc3RydWN0IGJsa19pb190cmFjZWAgcGx1cyB0aGUgUHJvdG9jb2wgRGF0YSBVbml0IChQRFUpIGxlbmd0aCBhbmQgQ29udHJvbCBHcm91cCBJRCAoQ0dJRCkgbGVuZ3RoLiBUaGUgcHJvYmxlbSwgdGhvdWdoLCB3YXMgdGhhdCBpdCB0aGVuICp3cm90ZSogdXNpbmcgYHJlY29yZF9ibGt0cmFjZV9ldmVudGAgd2hpY2ggd3JvdGUgdGhlICpzbWFsbGVyKiBgYmxrX2lvX3RyYWNlYC4gV2hlbiBmdHJhY2UgdGhlbiB3ZW50IHRvICpyZWFkKiB0aGUgYnVmZmVyLCBpdCBjYXN0IHRoZSBlbnRyeSB0byBgc3RydWN0IGJsa19pb190cmFjZTJgIGFuZCBleHBlY3RlZCB0aGUgUERVIHRvIHN0YXJ0IGF0IGEgbGF0ZXIgb2Zmc2V0LiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBidWZmZXIgb3ZlcmZsb3cgc2NlbmFyaW8sIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBvciB1c2UtYWZ0ZXItZnJlZSBzaXR1YXRpb24sIGJlY2F1c2UgdGhlIHJlYWQgZXh0ZW5kZWQgcGFzdCB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KClRoZSBwYXRjaCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFzIGEgZml4LiBJdCBpbnRyb2R1Y2VzIHR3byBrZXkgY2hhbmdlczoKCjEuICBTaW5jZSB3ZSBhcmUgaW4gdGhlIGZ0cmFjZSBjb250ZXh0IChgaWYgKGJsa190cmFjZXIpYCksIHRoZSBhbGxvY2F0aW9uIHNpemUgbm93ICphbHdheXMqIHVzZXMgYHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgJiM0MzsgcGR1X2xlbiAmIzQzOyBjZ2lkX2xlbmAgYW5kIHRoZSBkYXRhIGlzICphbHdheXMqIHdyaXR0ZW4gdXNpbmcgYHJlY29yZF9ibGt0cmFjZV9ldmVudDJgLiBTbywgY29uc2lzdGVuY3kgaXMgbm93IGd1YXJhbnRlZWQuCjIuICBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCAod2hpY2ggbGlrZWx5IHJ1bnMgYXQgc3lzdGVtIGluaXRpYWxpemF0aW9uIG9yIHdoZW4gYSB0cmFjZSBpcyBlbmFibGVkKSBub3cgaW5pdGlhbGl6ZXMgYGJ0LSZndDt2ZXJzaW9uID0gMmAuIFRoaXMgZ3VhcmFudGVlcyB0aGUgdmVyc2lvbiBmbGFnIGlzIG5vIGxvbmdlciAxLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSBzY2FuIGZvciBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgS01TQU4tcmVsZXZhbnQgaXNzdWVzLiBMb29raW5nIGF0IGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyYCwgaXQgYXBwZWFycyB0byBjb3B5IGBjZ2lkYCBhbmQgdGhlbiBgcGR1X2RhdGFgIGludG8gdGhlIGB0MmAgc3RydWN0IGF0IHRoZSBjb3JyZWN0IG9mZnNldHMuIGBjZ2lkX2xlbmAgYW5kIGBwZHVfbGVuYCBkZXRlcm1pbmUgdGhlIGNvcHkgc2l6ZXMsIHNvIHRoYXQgc2VlbXMgb2theS4KCkEgcXVlc3Rpb24gdGhhdCBjb21lcyB1cCB3aXRoIHRoaXMgaXMgcmVsYXRlZCB0byBob3cgdGhlIHJpbmcgYnVmZmVyIGFuZCB0cmFjZSBlbnRyaWVzIGFyZSBoYW5kbGVkIGluIGBmdHJhY2VgLiBXZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IGxheW91dCBpcyBjb3JyZWN0bHkgaGFuZGxlZCBpbiBgdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZWAuIEl0IGxvb2tzIGxpa2UgYHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmVgIGRvZXMgdGhlIHJlc2VydmF0aW9uIGluIHRoZSByaW5nIGJ1ZmZlci4gRnRyYWNlIHRoZW4gaW5pdGlhbGl6ZXMgdGhlIHJpbmcgYnVmZmVyIGVudHJ5IGhlYWRlciwgYW5kIGByaW5nX2J1ZmZlcl9ldmVudF9kYXRhYCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGF5bG9hZCwgd2hpY2ggc2hvdWxkIGJlIHRoZSBgc3RydWN0IGJsa19pb190cmFjZTJgLiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBgc3RydWN0IHRyYWNlX2VudHJ5YCBhbmQgYHN0cnVjdCBibGtfaW9fdHJhY2UyYCBpbiB0aGUgY29udGV4dCBvZiBgYmxrX3RyYWNlcmAuIEhvdyBpcyB0aGUgdHJhY2UgZW50cnkgZGVmaW5lZCBieSBgYmxrX3RyYWNlcmA/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgbmV4dCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1YnRsZSBhbGlnbm1lbnQgb3Igc2l6ZSBkaXNjcmVwYW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtUUkFDRV9CTEsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0Lmg9Nz1zdHJ1Y3QgaW9jX2dxO1xuaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmgtOC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oOjk6I2lmICFkZWZpbmVkKF9UUkFDRV9CTEtfSU9DT1NUX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaDoxMDojZGVmaW5lIF9UUkFDRV9CTEtfSU9DT1NUX0hcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oLTExLVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oPTE4MT1UUkFDRV9FVkVOVChpb2Nvc3RfaW9jZ19mb3JnaXZlX2RlYnQsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmgtMjIxLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0Lmg6MjIyOiNlbmRpZiAvKiBfVFJBQ0VfQkxLX0lPQ09TVF9IICovXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaC0yMjMtXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9Mzc9c3RhdGljIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9SQVdfU1BJTkxPQ0socnVubmluZ190cmFjZV9sb2NrKTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zOS0vKiBTZWxlY3QgYW4gYWx0ZXJuYXRpdmUsIG1pbmltYWxpc3RpYyBvdXRwdXQgdGhhbiB0aGUgb3JpZ2luYWwgb25lICovXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0MDojZGVmaW5lIFRSQUNFX0JMS19PUFRfQ0xBU1NJQ1x0MHgxXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0MTojZGVmaW5lIFRSQUNFX0JMS19PUFRfQ0dST1VQXHQweDJcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjQyOiNkZWZpbmUgVFJBQ0VfQkxLX09QVF9DR05BTUVcdDB4NFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNDMtXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz00ND1zdGF0aWMgc3RydWN0IHRyYWNlcl9vcHQgYmxrX3RyYWNlcl9vcHRzW10gPSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00NS1cdC8qIERlZmF1bHQgZGlzYWJsZSB0aGUgbWluaW1hbGlzdGljIG91dHB1dCAqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDY6XHR7IFRSQUNFUl9PUFQoYmxrX2NsYXNzaWMsIFRSQUNFX0JMS19PUFRfQ0xBU1NJQykgfSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTQ3LSNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDg6XHR7IFRSQUNFUl9PUFQoYmxrX2Nncm91cCwgVFJBQ0VfQkxLX09QVF9DR1JPVVApIH0sXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0OTpcdHsgVFJBQ0VSX09QVChibGtfY2duYW1lLCBUUkFDRV9CTEtfT1BUX0NHTkFNRSkgfSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTUwLSNlbmRpZlxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTE3Mz1zdGF0aWMgdm9pZCB0cmFjZV9ub3RlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBwaWRfdCBwaWQsIHU2NCBhY3Rpb24sXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg5LVx0XHR0cmFjZV9jdHggPSB0cmFjaW5nX2dlbl9jdHhfZmxhZ3MoMCk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxOTA6XHRcdGV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSyxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5MS1cdFx0XHRcdFx0XHQgIHRyYWNlX2xlbiwgdHJhY2VfY3R4KTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yNDM9dm9pZCBfX2Jsa190cmFjZV9ub3RlX21lc3NhZ2Uoc3RydWN0IGJsa190cmFjZSAqYnQsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjY5LSNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjcwOlx0aWYgKGNzcyBcdTAwMjZcdTAwMjYgKGJsa190cmFjZXJfZmxhZ3MudmFsIFx1MDAyNiBUUkFDRV9CTEtfT1BUX0NHUk9VUCkpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yNzEtXHRcdGNnaWQgPSBjZ3JvdXBfaWQoY3NzLVx1MDAzZWNncm91cCk7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MzEwPXN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzk3LVx0XHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICYjNDM7IHBkdV9sZW4gJiM0MzsgY2dpZF9sZW47XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzozOTg6XHRcdGV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSyxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTM5OS1cdFx0XHRcdFx0XHQgIHRyYWNlX2xlbiwgdHJhY2VfY3R4KTtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz05MzQ9c3RhdGljIHU2NCBibGtfdHJhY2VfYmlvX2dldF9jZ2lkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTQwLVx0YnQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHEtXHUwMDNlYmxrX3RyYWNlLCAxKTtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk0MTpcdGlmICghYnQgfHwgIShibGtfdHJhY2VyX2ZsYWdzLnZhbCBcdTAwMjYgVFJBQ0VfQkxLX09QVF9DR1JPVVApKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTQyLVx0XHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNDcwPXN0YXRpYyB2b2lkIGJsa19sb2dfYWN0aW9uKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE0NzktXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNDgwOlx0XHRpZiAoYmxrX3RyYWNlcl9mbGFncy52YWwgXHUwMDI2IFRSQUNFX0JMS19PUFRfQ0dOQU1FKSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNDgxLVx0XHRcdGNoYXIgYmxrY2dfbmFtZV9idWZbTkFNRV9NQVggJiM0MzsgMV0gPSBcJiMzNDtcdTAwM2MuLi5cdTAwM2VcJiMzNDs7XG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTYzOT1zdGF0aWMgdm9pZCBibGtfdHJhY2VyX3ByaW50X2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNjQwLXtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE2NDE6XHRpZiAoIShibGtfdHJhY2VyX2ZsYWdzLnZhbCBcdTAwMjYgVFJBQ0VfQkxLX09QVF9DTEFTU0lDKSlcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE2NDItXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNzUzPXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBibGtfdHJhY2VyX3ByaW50X2xpbmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTc1NC17XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNzU1Olx0aWYgKChpdGVyLVx1MDAzZWVudC1cdTAwM2V0eXBlICE9IFRSQUNFX0JMSykgfHxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3NTY6XHQgICAgIShibGtfdHJhY2VyX2ZsYWdzLnZhbCBcdTAwMjYgVFJBQ0VfQkxLX09QVF9DTEFTU0lDKSlcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE3NTctXHRcdHJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDtcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNzYzPWJsa190cmFjZXJfc2V0X2ZsYWcoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgdTMyIG9sZF9mbGFncywgdTMyIGJpdCwgaW50IHNldClcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNzY1LVx0LyogZG9uJiMzOTt0IG91dHB1dCBjb250ZXh0LWluZm8gZm9yIGJsa19jbGFzc2ljIG91dHB1dCAqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTc2NjpcdGlmIChiaXQgPT0gVFJBQ0VfQkxLX09QVF9DTEFTU0lDKSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNzY3LVx0XHRpZiAoc2V0KVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTE3OTI9c3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV9ibGtfZXZlbnQgPSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNzkzOlx0LnR5cGVcdFx0PSBUUkFDRV9CTEssXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNzk0LVx0LmZ1bmNzXHRcdD0gXHUwMDI2dHJhY2VfYmxrX2V2ZW50X2Z1bmNzLFxuLS1cbmtlcm5lbC90cmFjZS90cmFjZS5oPTM3PWVudW0gdHJhY2VfdHlwZSB7XG4tLVxua2VybmVsL3RyYWNlL3RyYWNlLmgtNTItXHRUUkFDRV9VU0VSX1NUQUNLLFxua2VybmVsL3RyYWNlL3RyYWNlLmg6NTM6XHRUUkFDRV9CTEssXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC01NC1cdFRSQUNFX0JQVVRTLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYmxvY2sgdHJhY2luZyBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBfX2Jsa19hZGRfdHJhY2VgIGZ1bmN0aW9uIGFuZCBpdHMgYXNzb2NpYXRlZCByb3V0aW5lcyBpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgaG93IHRyYWNpbmcgaW5mb3JtYXRpb24gaXMgaW5qZWN0ZWQuCgpTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGZvY3VzaW5nIG9uIGxpbmVzIDMxMCB0aHJvdWdoIDQyMC4gVGhhdCBzZWN0aW9uIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgbWVjaGFuaWNzLCBsaWtlbHkgY292ZXJpbmcgaG93IHRoZSB0cmFjZXBvaW50cyBhcmUgaG9va2VkLCBkYXRhIGlzIGNvbGxlY3RlZCwgYW5kIG1heWJlIGV2ZW4gaG93IHRoZSB0cmFjaW5nIGJ1ZmZlciBpcyBtYW5hZ2VkLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgYW5kIGhvdyBldmVudHMgYXJlIHRpbWVzdGFtcGVkIGFuZCBmb3JtYXR0ZWQuIEhvcGVmdWxseSwgSSYjMzk7bGwgZmluZCBzb21lIGluc2lnaHRzIGludG8gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFwcHJvYWNoIGluIGhpZ2gtcGVyZm9ybWFuY2Ugc2NlbmFyaW9zIG9yIGluIGNvbXBsZXggSU8gY29uZmlndXJhdGlvbnMuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBjb250ZXh0dWFsaXplIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTA6XHRzdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxuIDMxMTpcdFx0XHRcdCAgICBjb25zdCBibGtfb3BmX3Qgb3BmLCB1NjQgd2hhdCwgaW50IGVycm9yLFxuIDMxMjpcdFx0XHRcdCAgICBpbnQgcGR1X2xlbiwgdm9pZCAqcGR1X2RhdGEsIHU2NCBjZ2lkKVxuIDMxMzpcdHtcbiAzMTQ6XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDtcbiAzMTU6XHRcdHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQgPSBOVUxMO1xuIDMxNjpcdFx0c3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyID0gTlVMTDtcbiAzMTc6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwO1xuIDMxODpcdFx0dW5zaWduZWQgbG9uZyAqc2VxdWVuY2U7XG4gMzE5Olx0XHR1bnNpZ25lZCBpbnQgdHJhY2VfY3R4ID0gMDtcbiAzMjA6XHRcdHBpZF90IHBpZDtcbiAzMjE6XHRcdGludCBjcHU7XG4gMzIyOlx0XHRib29sIGJsa190cmFjZXIgPSBibGtfdHJhY2VyX2VuYWJsZWQ7XG4gMzIzOlx0XHRzc2l6ZV90IGNnaWRfbGVuID0gY2dpZCA/IHNpemVvZihjZ2lkKSA6IDA7XG4gMzI0Olx0XHRjb25zdCBlbnVtIHJlcV9vcCBvcCA9IG9wZiBcdTAwMjYgUkVRX09QX01BU0s7XG4gMzI1Olx0XHRzaXplX3QgdHJhY2VfbGVuO1xuIDMyNjpcdFxuIDMyNzpcdFx0aWYgKHVubGlrZWx5KGJ0LVx1MDAzZXRyYWNlX3N0YXRlICE9IEJsa3RyYWNlX3J1bm5pbmcgXHUwMDI2XHUwMDI2ICFibGtfdHJhY2VyKSlcbiAzMjg6XHRcdFx0cmV0dXJuO1xuIDMyOTpcdFxuIDMzMDpcdFx0d2hhdCB8PSBkZGlyX2FjdFtvcF9pc193cml0ZShvcCkgPyBXUklURSA6IFJFQURdO1xuIDMzMTpcdFx0d2hhdCB8PSBNQVNLX1RDX0JJVChvcGYsIFNZTkMpO1xuIDMzMjpcdFx0d2hhdCB8PSBNQVNLX1RDX0JJVChvcGYsIFJBSEVBRCk7XG4gMzMzOlx0XHR3aGF0IHw9IE1BU0tfVENfQklUKG9wZiwgTUVUQSk7XG4gMzM0Olx0XHR3aGF0IHw9IE1BU0tfVENfQklUKG9wZiwgUFJFRkxVU0gpO1xuIDMzNTpcdFx0d2hhdCB8PSBNQVNLX1RDX0JJVChvcGYsIEZVQSk7XG4gMzM2Olx0XG4gMzM3Olx0XHRzd2l0Y2ggKG9wKSB7XG4gMzM4Olx0XHRjYXNlIFJFUV9PUF9ESVNDQVJEOlxuIDMzOTpcdFx0Y2FzZSBSRVFfT1BfU0VDVVJFX0VSQVNFOlxuIDM0MDpcdFx0XHR3aGF0IHw9IEJMS19UQ19BQ1QoQkxLX1RDX0RJU0NBUkQpO1xuIDM0MTpcdFx0XHRicmVhaztcbiAzNDI6XHRcdGNhc2UgUkVRX09QX0ZMVVNIOlxuIDM0MzpcdFx0XHR3aGF0IHw9IEJMS19UQ19BQ1QoQkxLX1RDX0ZMVVNIKTtcbiAzNDQ6XHRcdFx0YnJlYWs7XG4gMzQ1Olx0XHRjYXNlIFJFUV9PUF9aT05FX0FQUEVORDpcbiAzNDY6XHRcdFx0d2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19aT05FX0FQUEVORCk7XG4gMzQ3Olx0XHRcdGJyZWFrO1xuIDM0ODpcdFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVDpcbiAzNDk6XHRcdFx0d2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19aT05FX1JFU0VUKTtcbiAzNTA6XHRcdFx0YnJlYWs7XG4gMzUxOlx0XHRjYXNlIFJFUV9PUF9aT05FX1JFU0VUX0FMTDpcbiAzNTI6XHRcdFx0d2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19aT05FX1JFU0VUX0FMTCk7XG4gMzUzOlx0XHRcdGJyZWFrO1xuIDM1NDpcdFx0Y2FzZSBSRVFfT1BfWk9ORV9GSU5JU0g6XG4gMzU1Olx0XHRcdHdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfWk9ORV9GSU5JU0gpO1xuIDM1NjpcdFx0XHRicmVhaztcbiAzNTc6XHRcdGNhc2UgUkVRX09QX1pPTkVfT1BFTjpcbiAzNTg6XHRcdFx0d2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19aT05FX09QRU4pO1xuIDM1OTpcdFx0XHRicmVhaztcbiAzNjA6XHRcdGNhc2UgUkVRX09QX1pPTkVfQ0xPU0U6XG4gMzYxOlx0XHRcdHdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfWk9ORV9DTE9TRSk7XG4gMzYyOlx0XHRcdGJyZWFrO1xuIDM2MzpcdFx0Y2FzZSBSRVFfT1BfV1JJVEVfWkVST0VTOlxuIDM2NDpcdFx0XHR3aGF0IHw9IEJMS19UQ19BQ1QoQkxLX1RDX1dSSVRFX1pFUk9FUyk7XG4gMzY1Olx0XHRcdGJyZWFrO1xuIDM2NjpcdFx0ZGVmYXVsdDpcbiAzNjc6XHRcdFx0YnJlYWs7XG4gMzY4Olx0XHR9XG4gMzY5Olx0XG4gMzcwOlx0XHQvKiBEcm9wIHRyYWNlIGV2ZW50cyBmb3Igem9uZSBvcGVyYXRpb25zIHdpdGggYmxrdHJhY2UgdjEgKi9cbiAzNzE6XHRcdGlmIChidC1cdTAwM2V2ZXJzaW9uID09IDEgXHUwMDI2XHUwMDI2ICh3aGF0IFx1MDAzZVx1MDAzZSBCTEtfVENfU0hJRlQpIFx1MDAzZSBCTEtfVENfRU5EX1YxKSB7XG4gMzcyOlx0XHRcdHByX2RlYnVnX3JhdGVsaW1pdGVkKFwmIzM0O2Jsa3RyYWNlIHYxIGNhbm5vdCB0cmFjZSB6b25lIG9wZXJhdGlvbiAweCVsbHhcXG5cJiMzNDssXG4gMzczOlx0XHRcdFx0XHQodW5zaWduZWQgbG9uZyBsb25nKXdoYXQpO1xuIDM3NDpcdFx0XHRyZXR1cm47XG4gMzc1Olx0XHR9XG4gMzc2Olx0XG4gMzc3Olx0XHRpZiAoY2dpZClcbiAzNzg6XHRcdFx0d2hhdCB8PSBfX0JMS19UQV9DR1JPVVA7XG4gMzc5Olx0XG4gMzgwOlx0XHRwaWQgPSB0c2stXHUwMDNlcGlkO1xuIDM4MTpcdFx0aWYgKGFjdF9sb2dfY2hlY2soYnQsIHdoYXQsIHNlY3RvciwgcGlkKSlcbiAzODI6XHRcdFx0cmV0dXJuO1xuIDM4MzpcdFx0Y3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcbiAzODQ6XHRcbiAzODU6XHRcdGlmIChibGtfdHJhY2VyKSB7XG4gMzg2Olx0XHRcdGJ1ZmZlciA9IGJsa190ci1cdTAwM2VhcnJheV9idWZmZXIuYnVmZmVyO1xuIDM4NzpcdFx0XHR0cmFjZV9jdHggPSB0cmFjaW5nX2dlbl9jdHhfZmxhZ3MoMCk7XG4gMzg4Olx0XHRcdC8qXG4gMzg5Olx0XHRcdCAqIFRoZSBmdHJhY2UgcmluZyBidWZmZXIgYWx3YXlzIHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKVxuIDM5MDpcdFx0XHQgKiBmb3JtYXQ7IHRoZSBmdHJhY2UgcmVhZGVycyBwYXJzZSBvbmx5IHRoYXQuIGJ0LVx1MDAzZXZlcnNpb25cbiAzOTE6XHRcdFx0ICogZGVzY3JpYmVzIGp1c3QgdGhlIHJlbGF5L2NsYXNzaWMgYmxrdHJhY2UgcmVjb3JkIGZvcm1hdC5cbiAzOTI6XHRcdFx0ICogUmVjb3JkaW5nIGEgdjEtc2l6ZWQgZXZlbnQgaGVyZSB3b3VsZCBzaGlmdCBwZHVfc3RhcnQoKSAxNlxuIDM5MzpcdFx0XHQgKiBieXRlcyBwYXN0IHRoZSBQRFUgYW5kIG1ha2UgYmxrX2xvZ19yZW1hcCgpIHJlYWQgcGFzdCB0aGVcbiAzOTQ6XHRcdFx0ICogZXZlbnQgKGEgdXNlLWFmdGVyLWZyZWUgb24gY29uY3VycmVudCBidWZmZXIgcmVzaXplKSwgYW5kIHYxXG4gMzk1Olx0XHRcdCAqIGNhbm5vdCByZXByZXNlbnQgdGhlIG5ld2VyIDY0LWJpdCB6b25lIGFjdGlvbnMgYW55d2F5LlxuIDM5NjpcdFx0XHQgKi9cbiAzOTc6XHRcdFx0dHJhY2VfbGVuID0gc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKSAmIzQzOyBwZHVfbGVuICYjNDM7IGNnaWRfbGVuO1xuIDM5ODpcdFx0XHRldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9CTEssXG4gMzk5Olx0XHRcdFx0XHRcdFx0ICB0cmFjZV9sZW4sIHRyYWNlX2N0eCk7XG4gNDAwOlx0XHRcdGlmICghZXZlbnQpXG4gNDAxOlx0XHRcdFx0cmV0dXJuO1xuIDQwMjpcdFxuIDQwMzpcdFx0XHR0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpO1xuIDQwNDpcdFx0XHRyZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLFxuIDQwNTpcdFx0XHRcdFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxuIDQwNjpcdFx0XHRcdFx0ICAgICAgIHdoYXQsIGJ0LVx1MDAzZWRldiwgZXJyb3IsIGNnaWQsIGNnaWRfbGVuLFxuIDQwNzpcdFx0XHRcdFx0ICAgICAgIHBkdV9kYXRhLCBwZHVfbGVuKTtcbiA0MDg6XHRcbiA0MDk6XHRcdFx0dHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYmxrX3RyLCBidWZmZXIsIGV2ZW50LCB0cmFjZV9jdHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQyOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgYXMgdGhvdWdoIHRoZXkgd2VyZSBteSBvd246CgoqKkRpdmluZyBEZWVwZXIgaW50byBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgYmVlbiBleGFtaW5pbmcgdGhlIGJsb2NrIHRyYWNlIGluZnJhc3RydWN0dXJlLCBhbmQgbm93IEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIG5pdHR5LWdyaXR0eS4gTGV0JiMzOTtzIG5vdCBqdXN0IHRhbGsgYWJvdXQgdGhlICp3aGF0KiwgYnV0IGFsc28gdGhlICpob3cqLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ2V0dGluZyBjdXJpb3VzIGFib3V0IHRoZSBpbm5lciB3b3JraW5ncyBvZiBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGhhcHBlbnMgdW5kZXIgdGhlIGhvb2Qgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gSSYjMzk7bSBpbWFnaW5pbmcgdGhpcyBpcyB3aGVyZSB0aGUgdHJhY2Vwb2ludCBzZXR1cCBmb3IgYSBzcGVjaWZpYyBibG9jayBxdWV1ZSBnZXRzIG9yY2hlc3RyYXRlZC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyBnb2luZyB0byBiZSB3aGVyZSBhbGwgdGhlIGltcG9ydGFudCBwYXJhbWV0ZXJzIGFyZSBpbml0aWFsaXplZCBhbmQgcmVnaXN0ZXJlZC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgdGhlIHRyYWNpbmcgc3RhcnRzLiBUaW1lIHRvIGRpc3NlY3QgdGhlIGltcGxlbWVudGF0aW9uLCBsaW5lIGJ5IGxpbmUuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgdGhpbmcgKnJlYWxseSogdGlja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjA6XHRzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbjE4NjE6XHRcdFx0XHRcdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuMTg2MjpcdHtcbjE4NjM6XHRcdHN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gTlVMTDtcbjE4NjQ6XHRcdGludCByZXQgPSAtRU5PTUVNO1xuMTg2NTpcdFxuMTg2NjpcdFx0YnQgPSBremFsbG9jX29iaigqYnQpO1xuMTg2NzpcdFx0aWYgKCFidClcbjE4Njg6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xODY5Olx0XG4xODcwOlx0XHRidC1cdTAwM2Vtc2dfZGF0YSA9IF9fYWxsb2NfcGVyY3B1KEJMS19UTl9NQVhfTVNHLCBfX2FsaWdub2ZfXyhjaGFyKSk7XG4xODcxOlx0XHRpZiAoIWJ0LVx1MDAzZW1zZ19kYXRhKVxuMTg3MjpcdFx0XHRnb3RvIGZyZWVfYnQ7XG4xODczOlx0XG4xODc0Olx0XHRidC1cdTAwM2VkZXYgPSBiZGV2LVx1MDAzZWJkX2RldjtcbjE4NzU6XHRcdGJ0LVx1MDAzZWFjdF9tYXNrID0gKHUxNiktMTtcbjE4NzY6XHRcdC8qXG4xODc3Olx0XHQgKiBUaGlzIHN5c2ZzLWVuYWJsZWQgcGF0aCBmZWVkcyB0aGUgZnRyYWNlIGJsayB0cmFjZXIsIHdoaWNoIGFsd2F5c1xuMTg3ODpcdFx0ICogdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC4gSW5pdGlhbGl6ZSB0aGUgdmVyc2lvbiBzbyBpdCBpc1xuMTg3OTpcdFx0ICogbmV2ZXIgbGVmdCBkYW5nbGluZyBhcyAwIGZvciBmdXR1cmUgY29uc3VtZXJzLlxuMTg4MDpcdFx0ICovXG4xODgxOlx0XHRidC1cdTAwM2V2ZXJzaW9uID0gMjtcbjE4ODI6XHRcbjE4ODM6XHRcdGJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpO1xuMTg4NDpcdFxuMTg4NTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHEtXHUwMDNlYmxrX3RyYWNlLCBidCk7XG4xODg2Olx0XHRnZXRfcHJvYmVfcmVmKCk7XG4xODg3Olx0XHRyZXR1cm4gMDtcbjE4ODg6XHRcbjE4ODk6XHRmcmVlX2J0OlxuMTg5MDpcdFx0YmxrX3RyYWNlX2ZyZWUocSwgYnQpO1xuMTg5MTpcdFx0cmV0dXJuIHJldDtcbjE4OTI6XHR9XG4xODkzOlx0XG4xODk0Olx0LypcbjE4OTU6XHQgKiBzeXNmcyBpbnRlcmZhY2UgdG8gZW5hYmxlIGFuZCBjb25maWd1cmUgdHJhY2luZ1xuMTg5NjpcdCAqL1xuMTg5NzpcdFxuMTg5ODpcdHN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuMTg5OTpcdFx0XHRcdFx0XHQgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjUwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgYmxrdHJhY2UuY2AmIzM5O3MgVmVyc2lvbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBiYWNrIGludG8gYGJsa3RyYWNlLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSAqZWxzZSogZG9lcyB0aGlzIGBidC0mZ3Q7dmVyc2lvbmAgdmFyaWFibGUgcG9wIHVwLCBvciB3aGVyZSBhcmUgdGhlIHRyYWNlIHJlY29yZHMgYmVpbmcgaGFuZGxlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoYXQgdmVyc2lvbj8mIzM0OyBJIG5lZWQgYSBjb21wcmVoZW5zaXZlIG92ZXJ2aWV3IG9mIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBTbywgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoIGlzIHRvIGRvIGEgdGFyZ2V0ZWQgc2VhcmNoLiBJJiMzOTtsbCBsYXVuY2ggYSBxdWVyeSBmb3IgYm90aCBgYnQtJmd0O3ZlcnNpb25gIGFuZCwganVzdCBpbiBjYXNlLCBhIG1vcmUgZ2VuZXJhbCBgdmVyc2lvbmAgdGhyb3VnaG91dCBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgcXVpY2tseSBwaW5wb2ludCB0aGUga2V5IGFyZWFzIHRvIHVuZGVyc3RhbmQgdGhlIHZlcnNpb25pbmcgbG9naWMgd2l0aGluIHRoZSB0cmFjaW5nIHN5c3RlbSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHRyYWNlIHJlY29yZHMgdGhlbXNlbHZlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGNvbWVzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAwNTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZXJzaW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTU2PXN0YXRpYyB2b2lkIHJlbGF5X2Jsa3RyYWNlX2V2ZW50KHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE2MC17XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNjE6XHRpZiAoYnQtXHUwMDNldmVyc2lvbiA9PSAyKVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTYyLVx0XHRyZXR1cm4gcmVsYXlfYmxrdHJhY2VfZXZlbnQyKGJ0LCBzZXF1ZW5jZSwgcGlkLCBjcHUsIHNlY3Rvcixcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0zMTA9c3RhdGljIHZvaWQgX19ibGtfYWRkX3RyYWNlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcyxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zNzAtXHQvKiBEcm9wIHRyYWNlIGV2ZW50cyBmb3Igem9uZSBvcGVyYXRpb25zIHdpdGggYmxrdHJhY2UgdjEgKi9cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjM3MTpcdGlmIChidC1cdTAwM2V2ZXJzaW9uID09IDEgXHUwMDI2XHUwMDI2ICh3aGF0IFx1MDAzZVx1MDAzZSBCTEtfVENfU0hJRlQpIFx1MDAzZSBCTEtfVENfRU5EX1YxKSB7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zNzItXHRcdHByX2RlYnVnX3JhdGVsaW1pdGVkKFwmIzM0O2Jsa3RyYWNlIHYxIGNhbm5vdCB0cmFjZSB6b25lIG9wZXJhdGlvbiAweCVsbHhcXG5cJiMzNDssXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzg5LVx0XHQgKiBUaGUgZnRyYWNlIHJpbmcgYnVmZmVyIGFsd2F5cyB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMilcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjM5MDpcdFx0ICogZm9ybWF0OyB0aGUgZnRyYWNlIHJlYWRlcnMgcGFyc2Ugb25seSB0aGF0LiBidC1cdTAwM2V2ZXJzaW9uXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zOTEtXHRcdCAqIGRlc2NyaWJlcyBqdXN0IHRoZSByZWxheS9jbGFzc2ljIGJsa3RyYWNlIHJlY29yZCBmb3JtYXQuXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9NjkwPXN0YXRpYyB2b2lkIGJsa190cmFjZV9zZXR1cF9maW5hbGl6ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjY5MTpcdFx0XHRcdCAgICAgY2hhciAqbmFtZSwgaW50IHZlcnNpb24sXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy02OTItXHRcdFx0XHQgICAgIHN0cnVjdCBibGtfdHJhY2UgKmJ0LFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTcwMy1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjcwNDpcdGJ0LVx1MDAzZXZlcnNpb24gPSB2ZXJzaW9uO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzA1LVx0YnQtXHUwMDNlYWN0X21hc2sgPSBidXRzLVx1MDAzZWFjdF9tYXNrO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEwMzQ9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV96b25lX3VwZGF0ZV9yZXF1ZXN0KHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3QgKnJxKVxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwMzktXHRidCA9IHJjdV9kZXJlZmVyZW5jZShycS1cdTAwM2VxLVx1MDAzZWJsa190cmFjZSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMDQwOlx0aWYgKGxpa2VseSghYnQpIHx8IGJ0LVx1MDAzZXZlcnNpb24gXHUwMDNjIDIpIHtcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwNDEtXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExNDA9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV96b25lX3BsdWcodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTQ3LVx0YnQgPSByY3VfZGVyZWZlcmVuY2UocS1cdTAwM2VibGtfdHJhY2UpO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTE0ODpcdGlmIChidCBcdTAwMjZcdTAwMjYgYnQtXHUwMDNldmVyc2lvbiBcdTAwM2U9IDIpXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTQ5LVx0XHRfX2Jsa19hZGRfdHJhY2UoYnQsIHNlY3Rvciwgc2VjdG9ycyBcdTAwM2NcdTAwM2MgU0VDVE9SX1NISUZULCAwLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExNTY9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV96b25lX3VucGx1Zyh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExNjMtXHRidCA9IHJjdV9kZXJlZmVyZW5jZShxLVx1MDAzZWJsa190cmFjZSk7XG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMTY0Olx0aWYgKGJ0IFx1MDAyNlx1MDAyNiBidC1cdTAwM2V2ZXJzaW9uIFx1MDAzZT0gMilcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExNjUtXHRcdF9fYmxrX2FkZF90cmFjZShidCwgc2VjdG9yLCBzZWN0b3JzIFx1MDAzY1x1MDAzYyBTRUNUT1JfU0hJRlQsIDAsXG4tLVxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTg2MD1zdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODc3LVx0ICogVGhpcyBzeXNmcy1lbmFibGVkIHBhdGggZmVlZHMgdGhlIGZ0cmFjZSBibGsgdHJhY2VyLCB3aGljaCBhbHdheXNcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4Nzg6XHQgKiB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMikgZm9ybWF0LiBJbml0aWFsaXplIHRoZSB2ZXJzaW9uIHNvIGl0IGlzXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODc5LVx0ICogbmV2ZXIgbGVmdCBkYW5nbGluZyBhcyAwIGZvciBmdXR1cmUgY29uc3VtZXJzLlxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg4MC1cdCAqL1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTg4MTpcdGJ0LVx1MDAzZXZlcnNpb24gPSAyO1xua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg4Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMDU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NTgKCQkJCQkJCW91dHB1dDogMjY0CgkJCQkJCQl0aG91Z2h0czogMTIxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBUaGlzIFBhdGNoIERvZXNuJiMzOTt0IFdhcnJhbnQgSXQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgYW5hbHlzaXMgdGVsbHMgbWUgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBzdWJ0bGUsIGJ1dCBjcml0aWNhbCwgZmxhdyBpbiB0aGUgYmxvY2sgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS4gVGhlIGNvcmUgaXNzdWUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHdoYXQmIzM5O3Mgd3JpdHRlbiB0byB0aGUgZnRyYWNlIHJpbmcgYnVmZmVyIGFuZCB3aGF0IHRoZSBjb25zdW1lcnMgKmV4cGVjdCogdG8gZmluZCB0aGVyZS4gUHJldmlvdXNseSwgYF9fYmxrX2FkZF90cmFjZSgpYCBjb3VsZCB3cml0ZSB2MSBgYmxrX2lvX3RyYWNlYCBldmVudHMsIGJ1dCB0aGUgY29uc3VtZXJzLCBsaWtlIGBibGtfbG9nX3JlbWFwYCwgd2VyZSBidWlsdCBleHBlY3RpbmcgdjIgYGJsa19pb190cmFjZTJgIGV2ZW50cy4gVGhpcyBkaWZmZXJlbmNlIGluIHN0cnVjdHVyZSBzaXplcyBsZWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcyBpbiB0aGUgcmluZyBidWZmZXIsIGVzc2VudGlhbGx5IHJlYWRpbmcgcGFzdCB0aGUgaW50ZW5kZWQgZXZlbnQgYm91bmRhcnksIGFuZCB0aGF0IGNyZWF0ZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCBhIHJlYWwgcHJvYmxlbS4KCk15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgaWYgdGhpcyBpbnRyb2R1Y2VzIGEgS01TQU4tcmVsZXZhbnQgcHJvYmxlbS4gSSBzZWUgdGhhdCB0aGUgcGF0Y2gmIzM5O3MgZml4IGludm9sdmVzIHVuY29uZGl0aW9uYWxseSB3cml0aW5nIGBzdHJ1Y3QgYmxrX2lvX3RyYWNlMmAgZXZlbnRzIHRvIHRoZSBmdHJhY2UgYnVmZmVyLiBBbHNvLCBgYnQtJmd0O3ZlcnNpb25gIGlzIGV4cGxpY2l0bHkgc2V0IHRvIDIgZHVyaW5nIHF1ZXVlIHNldHVwIHdoaWNoLCBjcml0aWNhbGx5LCBlbGltaW5hdGVzIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJpc2tzLiBUaGUgbWVtb3J5IGFsbG9jYXRpb24gKGBremFsbG9jX29iamAsIGFuZCBgdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgpYCkgYW5kIGluaXRpYWxpemF0aW9uIChgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmApIHBhcnRzIG9mIHRoZSBjb2RlIGFyZSByb2J1c3QuCgpCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIEtNU0FOIHRyaWdnZXJzLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IG1lZXQgdGhlIGNyaXRlcmlhLiBJdCBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHVzZS1hZnRlci1mcmVlLCBwcm9ibGVtcyB0aGF0IEtBU0FOIGFuZCBzdGFuZGFyZCBidWZmZXIgY2hlY2tzIGFyZSBkZXNpZ25lZCB0byBkZXRlY3QuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgc3RydWN0dXJlIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB0aGF0IGFyZSBicmFuY2hlZCBvbi4gSW4gZmFjdCwgaXQgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgdmVyc2lvbiBmaWVsZC4gVGhlcmVmb3JlLCB0aGVyZSYjMzk7cyBubyBuZWVkIHRvIGVuYWJsZSBLTVNBTiBoZXJlLiBUaGlzIGlzIGEgc29saWQsIGNsZWFuIGZpeCwgYW5kIEtBU0FOIHNob3VsZCBoYW5kbGUgdGhlIHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDA1OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIGEgZm9ybWF0IG1pc21hdGNoIGFuZCBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkIC8gdXNlLWFmdGVyLWZyZWUgYnVnIGluIHRoZSBmdHJhY2UgYmxvY2sgdHJhY2luZyBzdWJzeXN0ZW0gKGJsa3RyYWNlKS4gUHJldmlvdXNseSwgaWYgYnQtXHUwMDNldmVyc2lvbiB3YXMgMSBvciAwLCBfX2Jsa19hZGRfdHJhY2UoKSBjb3VsZCBhbGxvY2F0ZSBhbmQgd3JpdGUgYSBzbWFsbGVyIHYxIChibGtfaW9fdHJhY2UpIGV2ZW50IGludG8gdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB3aGlsZSBmdHJhY2UgY29uc3VtZXJzIHBhcnNlZCBlbnRyaWVzIHN0cmljdGx5IGFzIHYyIChibGtfaW9fdHJhY2UyKSwgcmVzdWx0aW5nIGluIHBkdV9zdGFydCgpIGluZGV4aW5nIG91dC1vZi1ib3VuZHMgYmV5b25kIHRoZSByZXNlcnZlZCBldmVudCBidWZmZXIuXG5cblRoaXMgY2xhc3Mgb2YgYnVnIChvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHVzZS1hZnRlci1mcmVlKSBpcyB0cmFja2VkIGFuZCBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIHNpbXBsaWZpZXMgdGhlIGZ0cmFjZSBwYXRoIHRvIHVuY29uZGl0aW9uYWxseSByZWNvcmQgdjIgZXZlbnRzIG9mIHNpemUgc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKSAmIzQzOyBwZHVfbGVuICYjNDM7IGNnaWRfbGVuIGFuZCBpbml0aWFsaXplcyBidC1cdTAwM2V2ZXJzaW9uIHRvIDIgaW4gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCkgKHdoZXJlIHRoZSBtZW1vcnkgaXMgYWxyZWFkeSB6ZXJvLWFsbG9jYXRlZCB2aWEga3phbGxvY19vYmopLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBmb3JtYXQgbWlzbWF0Y2ggYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgLyB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGZ0cmFjZSBibG9jayB0cmFjaW5nIHN1YnN5c3RlbSAoYmxrdHJhY2UpLiBQcmV2aW91c2x5LCBpZiBidC1cdTAwM2V2ZXJzaW9uIHdhcyAxIG9yIDAsIF9fYmxrX2FkZF90cmFjZSgpIGNvdWxkIGFsbG9jYXRlIGFuZCB3cml0ZSBhIHNtYWxsZXIgdjEgKGJsa19pb190cmFjZSkgZXZlbnQgaW50byB0aGUgZnRyYWNlIHJpbmcgYnVmZmVyIHdoaWxlIGZ0cmFjZSBjb25zdW1lcnMgcGFyc2VkIGVudHJpZXMgc3RyaWN0bHkgYXMgdjIgKGJsa19pb190cmFjZTIpLCByZXN1bHRpbmcgaW4gcGR1X3N0YXJ0KCkgaW5kZXhpbmcgb3V0LW9mLWJvdW5kcyBiZXlvbmQgdGhlIHJlc2VydmVkIGV2ZW50IGJ1ZmZlci5cblxuVGhpcyBjbGFzcyBvZiBidWcgKG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgdXNlLWFmdGVyLWZyZWUpIGlzIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgZnRyYWNlIHBhdGggdG8gdW5jb25kaXRpb25hbGx5IHJlY29yZCB2MiBldmVudHMgb2Ygc2l6ZSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICYjNDM7IHBkdV9sZW4gJiM0MzsgY2dpZF9sZW4gYW5kIGluaXRpYWxpemVzIGJ0LVx1MDAzZXZlcnNpb24gdG8gMiBpbiBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKSAod2hlcmUgdGhlIG1lbW9yeSBpcyBhbHJlYWR5IHplcm8tYWxsb2NhdGVkIHZpYSBremFsbG9jX29iaikuIE5vIHVuaW5pdGlhbGl6ZWQgZGF0YSBpcyByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb25kaXRpb25hbCBsb2dpYy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjA3LjYwMjkxODI3NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MDQzNDE5OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfSU9fVFJBQ0VcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19ibGtfYWRkX3RyYWNlXCIsXG4gICAgXCJibGtfdHJhY2Vfc2V0dXBfcXVldWVcIixcbiAgICBcInJlY29yZF9ibGt0cmFjZV9ldmVudDJcIixcbiAgICBcInN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNvbHZlcyBhIGZvcm1hdCBtaXNtYXRjaCBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCAvIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgZnRyYWNlIGJsb2NrIHRyYWNpbmcgc3Vic3lzdGVtIChibGt0cmFjZSkuIFByZXZpb3VzbHksIGlmIGJ0LVxcdTAwM2V2ZXJzaW9uIHdhcyAxIG9yIDAsIF9fYmxrX2FkZF90cmFjZSgpIGNvdWxkIGFsbG9jYXRlIGFuZCB3cml0ZSBhIHNtYWxsZXIgdjEgKGJsa19pb190cmFjZSkgZXZlbnQgaW50byB0aGUgZnRyYWNlIHJpbmcgYnVmZmVyIHdoaWxlIGZ0cmFjZSBjb25zdW1lcnMgcGFyc2VkIGVudHJpZXMgc3RyaWN0bHkgYXMgdjIgKGJsa19pb190cmFjZTIpLCByZXN1bHRpbmcgaW4gcGR1X3N0YXJ0KCkgaW5kZXhpbmcgb3V0LW9mLWJvdW5kcyBiZXlvbmQgdGhlIHJlc2VydmVkIGV2ZW50IGJ1ZmZlci5cXG5cXG5UaGlzIGNsYXNzIG9mIGJ1ZyAob3V0LW9mLWJvdW5kcyByZWFkIGFuZCB1c2UtYWZ0ZXItZnJlZSkgaXMgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBmdHJhY2UgcGF0aCB0byB1bmNvbmRpdGlvbmFsbHkgcmVjb3JkIHYyIGV2ZW50cyBvZiBzaXplIHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgKyBwZHVfbGVuICsgY2dpZF9sZW4gYW5kIGluaXRpYWxpemVzIGJ0LVxcdTAwM2V2ZXJzaW9uIHRvIDIgaW4gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCkgKHdoZXJlIHRoZSBtZW1vcnkgaXMgYWxyZWFkeSB6ZXJvLWFsbG9jYXRlZCB2aWEga3phbGxvY19vYmopLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayB0cmFjZSBzdWJzeXN0ZW0gKGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jKSwgc3BlY2lmaWNhbGx5IGluIF9fYmxrX2FkZF90cmFjZSgpIGFuZCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBmdHJhY2UgcmluZyBidWZmZXIgdW5jb25kaXRpb25hbGx5IHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKSBsYXlvdXQsIGVsaW1pbmF0aW5nIHBvdGVudGlhbCBidWZmZXIgbWlzbWF0Y2hlcyBhbmQgb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGluaXRpYWxpemVzIGJ0LVxcdTAwM2V2ZXJzaW9uIGZvciBzeXNmcy1jb25maWd1cmVkIHF1ZXVlcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIGJsb2NrIGxheWVyIHRyYWNpbmcgbG9naWMgYWNjZXNzaWJsZSB2aWEgc3lzZnMgYW5kIGJsb2NrIEkvTyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjA3LjYwMjkzMTU4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTg3MTQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxZjc4ODdmZmZhYWU2NWIxN2YxNjExYTllMGFkZTg2YTFhOWQ5YWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTo1MTowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jXFxuaW5kZXggOGNkMjUyMGI0Yzk5ZS4uYWUwMTA5NjljMTQ0MyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xcbisrKyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jXFxuQEAgLTM4NSw2NiArMzg1LDI2IEBAIHN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXFxuIFxcdGlmIChibGtfdHJhY2VyKSB7XFxuIFxcdFxcdGJ1ZmZlciA9IGJsa190ci1cXHUwMDNlYXJyYXlfYnVmZmVyLmJ1ZmZlcjtcXG4gXFx0XFx0dHJhY2VfY3R4ID0gdHJhY2luZ19nZW5fY3R4X2ZsYWdzKDApO1xcbi1cXHRcXHRzd2l0Y2ggKGJ0LVxcdTAwM2V2ZXJzaW9uKSB7XFxuLVxcdFxcdGNhc2UgMTpcXG4tXFx0XFx0XFx0dHJhY2VfbGVuID0gc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0Y2FzZSAyOlxcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBmdHJhY2UgYWx3YXlzIHVzZXMgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC5cXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogRm9yIHN5c2ZzLWVuYWJsZWQgdHJhY2luZyBwYXRoIChlbmFibGVkIHZpYVxcbi1cXHRcXHRcXHQgKiAvc3lzL2Jsb2NrL0RFVi90cmFjZS9lbmFibGUpLCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKVxcbi1cXHRcXHRcXHQgKiBuZXZlciBpbml0aWFsaXplcyBidC1cXHUwMDNldmVyc2lvbiwgbGVhdmluZyBpdCAwIGZyb21cXG4tXFx0XFx0XFx0ICoga3phbGxvYygpLiBXZSBtdXN0IGhhbmRsZSB2ZXJzaW9uPT0wIHNhZmVseSBoZXJlLlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCB0byBlbnN1cmUgd2UgbmV2ZXIgaGl0IHRoZVxcbi1cXHRcXHRcXHQgKiBvbGQgYnVnIHdoZXJlIGRlZmF1bHQgc2V0IHRyYWNlX2xlbj0wLCBjYXVzaW5nXFxuLVxcdFxcdFxcdCAqIGJ1ZmZlciB1bmRlcmZsb3cgYW5kIG1lbW9yeSBjb3JydXB0aW9uLlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiBBbHdheXMgdXNlIHYyIGZvcm1hdCBmb3IgZnRyYWNlIGFuZCBub3JtYWxpemVcXG4tXFx0XFx0XFx0ICogYnQtXFx1MDAzZXZlcnNpb24gdG8gMiB3aGVuIHVuaW5pdGlhbGl6ZWQuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpO1xcbi1cXHRcXHRcXHRpZiAoYnQtXFx1MDAzZXZlcnNpb24gPT0gMClcXG4tXFx0XFx0XFx0XFx0YnQtXFx1MDAzZXZlcnNpb24gPSAyO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHRcXHR0cmFjZV9sZW4gKz0gcGR1X2xlbiArIGNnaWRfbGVuO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgZnRyYWNlIHJpbmcgYnVmZmVyIGFsd2F5cyB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMilcXG4rXFx0XFx0ICogZm9ybWF0OyB0aGUgZnRyYWNlIHJlYWRlcnMgcGFyc2Ugb25seSB0aGF0LiBidC1cXHUwMDNldmVyc2lvblxcbitcXHRcXHQgKiBkZXNjcmliZXMganVzdCB0aGUgcmVsYXkvY2xhc3NpYyBibGt0cmFjZSByZWNvcmQgZm9ybWF0LlxcbitcXHRcXHQgKiBSZWNvcmRpbmcgYSB2MS1zaXplZCBldmVudCBoZXJlIHdvdWxkIHNoaWZ0IHBkdV9zdGFydCgpIDE2XFxuK1xcdFxcdCAqIGJ5dGVzIHBhc3QgdGhlIFBEVSBhbmQgbWFrZSBibGtfbG9nX3JlbWFwKCkgcmVhZCBwYXN0IHRoZVxcbitcXHRcXHQgKiBldmVudCAoYSB1c2UtYWZ0ZXItZnJlZSBvbiBjb25jdXJyZW50IGJ1ZmZlciByZXNpemUpLCBhbmQgdjFcXG4rXFx0XFx0ICogY2Fubm90IHJlcHJlc2VudCB0aGUgbmV3ZXIgNjQtYml0IHpvbmUgYWN0aW9ucyBhbnl3YXkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuO1xcbiBcXHRcXHRldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9CTEssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgdHJhY2VfbGVuLCB0cmFjZV9jdHgpO1xcbiBcXHRcXHRpZiAoIWV2ZW50KVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRcXHR0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpO1xcbi1cXHRcXHRzd2l0Y2ggKGJ0LVxcdTAwM2V2ZXJzaW9uKSB7XFxuLVxcdFxcdGNhc2UgMTpcXG4tXFx0XFx0XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgd2hhdCwgYnQtXFx1MDAzZWRldiwgZXJyb3IsIGNnaWQsIGNnaWRfbGVuLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIDI6XFxuLVxcdFxcdGRlZmF1bHQ6XFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIFVzZSB2MiByZWNvcmRpbmcgZnVuY3Rpb24gKHJlY29yZF9ibGt0cmFjZV9ldmVudDIpXFxuLVxcdFxcdFxcdCAqIHdoaWNoIHdyaXRlcyBibGtfaW9fdHJhY2UyIHN0cnVjdHVyZSB3aXRoIGNvcnJlY3RcXG4tXFx0XFx0XFx0ICogZmllbGQgbGF5b3V0Olxcbi1cXHRcXHRcXHQgKiAgIC0gMzItYml0IHBpZCBhdCBvZmZzZXQgMjhcXG4tXFx0XFx0XFx0ICogICAtIDY0LWJpdCBhY3Rpb24gYXQgb2Zmc2V0IDMyXFxuLVxcdFxcdFxcdCAqXFxuLVxcdFxcdFxcdCAqIEZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IGhhbmRsZXMgdmVyc2lvbj09MCBjYXNlXFxuLVxcdFxcdFxcdCAqIChmcm9tIHN5c2ZzIHBhdGgpLCBlbnN1cmluZyB3ZSBhbHdheXMgdXNlIGNvcnJlY3RcXG4tXFx0XFx0XFx0ICogdjIgcmVjb3JkaW5nIGZ1bmN0aW9uIHRvIG1hdGNoIHRoZSB2MiBidWZmZXJcXG4tXFx0XFx0XFx0ICogYWxsb2NhdGVkIGFib3ZlLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgd2hhdCwgYnQtXFx1MDAzZWRldiwgZXJyb3IsIGNnaWQsIGNnaWRfbGVuLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgcGR1X2RhdGEsIHBkdV9sZW4pO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbitcXHRcXHRyZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB3aGF0LCBidC1cXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7XFxuIFxcbiBcXHRcXHR0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChibGtfdHIsIGJ1ZmZlciwgZXZlbnQsIHRyYWNlX2N0eCk7XFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMTkxMyw2ICsxODczLDEyIEBAIHN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbiBcXG4gXFx0YnQtXFx1MDAzZWRldiA9IGJkZXYtXFx1MDAzZWJkX2RldjtcXG4gXFx0YnQtXFx1MDAzZWFjdF9tYXNrID0gKHUxNiktMTtcXG4rXFx0LypcXG4rXFx0ICogVGhpcyBzeXNmcy1lbmFibGVkIHBhdGggZmVlZHMgdGhlIGZ0cmFjZSBibGsgdHJhY2VyLCB3aGljaCBhbHdheXNcXG4rXFx0ICogdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC4gSW5pdGlhbGl6ZSB0aGUgdmVyc2lvbiBzbyBpdCBpc1xcbitcXHQgKiBuZXZlciBsZWZ0IGRhbmdsaW5nIGFzIDAgZm9yIGZ1dHVyZSBjb25zdW1lcnMuXFxuK1xcdCAqL1xcbitcXHRidC1cXHUwMDNldmVyc2lvbiA9IDI7XFxuIFxcbiBcXHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjA5LjAyNTUwNDMyMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzM5MDg3NTk4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9JT19UUkFDRVwiLFxuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2Jsa19hZGRfdHJhY2VcIixcbiAgICBcImJsa190cmFjZV9zZXR1cF9xdWV1ZVwiLFxuICAgIFwicmVjb3JkX2Jsa3RyYWNlX2V2ZW50MlwiLFxuICAgIFwic3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmxvY2sgdHJhY2Ugc3Vic3lzdGVtIChrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyksIHNwZWNpZmljYWxseSBpbiBfX2Jsa19hZGRfdHJhY2UoKSBhbmQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCkuIEl0IGVuc3VyZXMgdGhhdCB0aGUgZnRyYWNlIHJpbmcgYnVmZmVyIHVuY29uZGl0aW9uYWxseSB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMikgbGF5b3V0LCBlbGltaW5hdGluZyBwb3RlbnRpYWwgYnVmZmVyIG1pc21hdGNoZXMgYW5kIG91dC1vZi1ib3VuZHMgcmVhZHMsIGFuZCBpbml0aWFsaXplcyBidC1cXHUwMDNldmVyc2lvbiBmb3Igc3lzZnMtY29uZmlndXJlZCBxdWV1ZXMuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgY29yZSBibG9jayBsYXllciB0cmFjaW5nIGxvZ2ljIGFjY2Vzc2libGUgdmlhIHN5c2ZzIGFuZCBibG9jayBJL08gaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxZjc4ODdmZmZhYWU2NWIxN2YxNjExYTllMGFkZTg2YTFhOWQ5YWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDA1OjUxOjA1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xuaW5kZXggOGNkMjUyMGI0Yzk5ZS4uYWUwMTA5NjljMTQ0MyAxMDA2NDRcbi0tLSBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jXG4rKysgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xuQEAgLTM4NSw2NiArMzg1LDI2IEBAIHN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXG4gXHRpZiAoYmxrX3RyYWNlcikge1xuIFx0XHRidWZmZXIgPSBibGtfdHItXHUwMDNlYXJyYXlfYnVmZmVyLmJ1ZmZlcjtcbiBcdFx0dHJhY2VfY3R4ID0gdHJhY2luZ19nZW5fY3R4X2ZsYWdzKDApO1xuLVx0XHRzd2l0Y2ggKGJ0LVx1MDAzZXZlcnNpb24pIHtcbi1cdFx0Y2FzZSAxOlxuLVx0XHRcdHRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAyOlxuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qXG4tXHRcdFx0ICogZnRyYWNlIGFsd2F5cyB1c2VzIHYyIChibGtfaW9fdHJhY2UyKSBmb3JtYXQuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBGb3Igc3lzZnMtZW5hYmxlZCB0cmFjaW5nIHBhdGggKGVuYWJsZWQgdmlhXG4tXHRcdFx0ICogL3N5cy9ibG9jay9ERVYvdHJhY2UvZW5hYmxlKSwgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKClcbi1cdFx0XHQgKiBuZXZlciBpbml0aWFsaXplcyBidC1cdTAwM2V2ZXJzaW9uLCBsZWF2aW5nIGl0IDAgZnJvbVxuLVx0XHRcdCAqIGt6YWxsb2MoKS4gV2UgbXVzdCBoYW5kbGUgdmVyc2lvbj09MCBzYWZlbHkgaGVyZS5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIEZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IHRvIGVuc3VyZSB3ZSBuZXZlciBoaXQgdGhlXG4tXHRcdFx0ICogb2xkIGJ1ZyB3aGVyZSBkZWZhdWx0IHNldCB0cmFjZV9sZW49MCwgY2F1c2luZ1xuLVx0XHRcdCAqIGJ1ZmZlciB1bmRlcmZsb3cgYW5kIG1lbW9yeSBjb3JydXB0aW9uLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogQWx3YXlzIHVzZSB2MiBmb3JtYXQgZm9yIGZ0cmFjZSBhbmQgbm9ybWFsaXplXG4tXHRcdFx0ICogYnQtXHUwMDNldmVyc2lvbiB0byAyIHdoZW4gdW5pbml0aWFsaXplZC5cbi1cdFx0XHQgKi9cbi1cdFx0XHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpO1xuLVx0XHRcdGlmIChidC1cdTAwM2V2ZXJzaW9uID09IDApXG4tXHRcdFx0XHRidC1cdTAwM2V2ZXJzaW9uID0gMjtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0XHR0cmFjZV9sZW4gKz0gcGR1X2xlbiArIGNnaWRfbGVuO1xuK1x0XHQvKlxuK1x0XHQgKiBUaGUgZnRyYWNlIHJpbmcgYnVmZmVyIGFsd2F5cyB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMilcbitcdFx0ICogZm9ybWF0OyB0aGUgZnRyYWNlIHJlYWRlcnMgcGFyc2Ugb25seSB0aGF0LiBidC1cdTAwM2V2ZXJzaW9uXG4rXHRcdCAqIGRlc2NyaWJlcyBqdXN0IHRoZSByZWxheS9jbGFzc2ljIGJsa3RyYWNlIHJlY29yZCBmb3JtYXQuXG4rXHRcdCAqIFJlY29yZGluZyBhIHYxLXNpemVkIGV2ZW50IGhlcmUgd291bGQgc2hpZnQgcGR1X3N0YXJ0KCkgMTZcbitcdFx0ICogYnl0ZXMgcGFzdCB0aGUgUERVIGFuZCBtYWtlIGJsa19sb2dfcmVtYXAoKSByZWFkIHBhc3QgdGhlXG4rXHRcdCAqIGV2ZW50IChhIHVzZS1hZnRlci1mcmVlIG9uIGNvbmN1cnJlbnQgYnVmZmVyIHJlc2l6ZSksIGFuZCB2MVxuK1x0XHQgKiBjYW5ub3QgcmVwcmVzZW50IHRoZSBuZXdlciA2NC1iaXQgem9uZSBhY3Rpb25zIGFueXdheS5cbitcdFx0ICovXG4rXHRcdHRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgKyBwZHVfbGVuICsgY2dpZF9sZW47XG4gXHRcdGV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSyxcbiBcdFx0XHRcdFx0XHQgIHRyYWNlX2xlbiwgdHJhY2VfY3R4KTtcbiBcdFx0aWYgKCFldmVudClcbiBcdFx0XHRyZXR1cm47XG4gXG4gXHRcdHRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3VycmVudCk7XG4tXHRcdHN3aXRjaCAoYnQtXHUwMDNldmVyc2lvbikge1xuLVx0XHRjYXNlIDE6XG4tXHRcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpLFxuLVx0XHRcdFx0XHQgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcbi1cdFx0XHRcdFx0ICAgICAgd2hhdCwgYnQtXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXG4tXHRcdFx0XHRcdCAgICAgIHBkdV9kYXRhLCBwZHVfbGVuKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSAyOlxuLVx0XHRkZWZhdWx0OlxuLVx0XHRcdC8qXG4tXHRcdFx0ICogVXNlIHYyIHJlY29yZGluZyBmdW5jdGlvbiAocmVjb3JkX2Jsa3RyYWNlX2V2ZW50Milcbi1cdFx0XHQgKiB3aGljaCB3cml0ZXMgYmxrX2lvX3RyYWNlMiBzdHJ1Y3R1cmUgd2l0aCBjb3JyZWN0XG4tXHRcdFx0ICogZmllbGQgbGF5b3V0OlxuLVx0XHRcdCAqICAgLSAzMi1iaXQgcGlkIGF0IG9mZnNldCAyOFxuLVx0XHRcdCAqICAgLSA2NC1iaXQgYWN0aW9uIGF0IG9mZnNldCAzMlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgaGFuZGxlcyB2ZXJzaW9uPT0wIGNhc2Vcbi1cdFx0XHQgKiAoZnJvbSBzeXNmcyBwYXRoKSwgZW5zdXJpbmcgd2UgYWx3YXlzIHVzZSBjb3JyZWN0XG4tXHRcdFx0ICogdjIgcmVjb3JkaW5nIGZ1bmN0aW9uIHRvIG1hdGNoIHRoZSB2MiBidWZmZXJcbi1cdFx0XHQgKiBhbGxvY2F0ZWQgYWJvdmUuXG4tXHRcdFx0ICovXG4tXHRcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcbi1cdFx0XHRcdFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxuLVx0XHRcdFx0XHQgICAgICAgd2hhdCwgYnQtXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXG4tXHRcdFx0XHRcdCAgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbitcdFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcbitcdFx0XHRcdCAgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcbitcdFx0XHRcdCAgICAgICB3aGF0LCBidC1cdTAwM2VkZXYsIGVycm9yLCBjZ2lkLCBjZ2lkX2xlbixcbitcdFx0XHRcdCAgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7XG4gXG4gXHRcdHRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGJsa190ciwgYnVmZmVyLCBldmVudCwgdHJhY2VfY3R4KTtcbiBcdFx0cmV0dXJuO1xuQEAgLTE5MTMsNiArMTg3MywxMiBAQCBzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbiBcbiBcdGJ0LVx1MDAzZWRldiA9IGJkZXYtXHUwMDNlYmRfZGV2O1xuIFx0YnQtXHUwMDNlYWN0X21hc2sgPSAodTE2KS0xO1xuK1x0LypcbitcdCAqIFRoaXMgc3lzZnMtZW5hYmxlZCBwYXRoIGZlZWRzIHRoZSBmdHJhY2UgYmxrIHRyYWNlciwgd2hpY2ggYWx3YXlzXG4rXHQgKiB1c2VzIHRoZSB2MiAoYmxrX2lvX3RyYWNlMikgZm9ybWF0LiBJbml0aWFsaXplIHRoZSB2ZXJzaW9uIHNvIGl0IGlzXG4rXHQgKiBuZXZlciBsZWZ0IGRhbmdsaW5nIGFzIDAgZm9yIGZ1dHVyZSBjb25zdW1lcnMuXG4rXHQgKi9cbitcdGJ0LVx1MDAzZXZlcnNpb24gPSAyO1xuIFxuIFx0YmxrX3RyYWNlX3NldHVwX2xiYShidCwgYmRldik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MTowOS4wMjU1MDU3NzJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDU0MDU0MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgYmxrdHJhY2UqKlxuXG5Pa2F5LCBzbyB0aGV5IHdhbnQgbWUgdG8gcmV2aWV3IHRoaXMga2VybmVsIHBhdGNoIHJlbGF0ZWQgdG8gYGJsa3RyYWNlYC4gTGV0J3MgZGlnIGluLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ3JhYiB0aGUgZGlmZiBhbmQgc3RhcnQgcG9raW5nIGFyb3VuZCB0aGUgY29kZS4gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGBncmVwcGVyYCwgYHJlYWQtZmlsZWAsIGFuZCBhIGZldyBvdGhlciB0b29scyB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB3aGF0J3MgZ29pbmcgb24uIFRoZSBwYXRjaCBzdW1tYXJ5IGluZGljYXRlcyBjaGFuZ2VzIGluIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5J3JlIG1vZGlmeWluZyB0aGUgYF9fYmxrX2FkZF90cmFjZWAgZnVuY3Rpb24uIFRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSB0aGUgcmVtb3ZhbCBvZiBhIGBzd2l0Y2hgIHN0YXRlbWVudCBiYXNlZCBvbiBgYnQtXHUwMDNldmVyc2lvbmAgd2hlbiBgYmxrX3RyYWNlcmAgaXMgdHJ1ZSDigJMgdGhpcyBpbXBsaWVzIGEgZnRyYWNlIHJpbmcgYnVmZmVyIHBhdGggaXMgaW4gdXNlLiBUaGV5J3JlIG9wdGluZyB0byB1bmNvbmRpdGlvbmFsbHkgdXNlIGBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpYCBhbmQgYHJlY29yZF9ibGt0cmFjZV9ldmVudDIoKWAgaW4gdGhpcyBzcGVjaWZpYyBjb25kaXRpb24uIEF0IHRoZSBzYW1lIHRpbWUsIHRoZSBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCBmdW5jdGlvbiBoYXMgYmVlbiBhbHRlcmVkIHRvIGluaXRpYWxpemUgYGJ0LVx1MDAzZXZlcnNpb24gPSAyYC5cblxuTXkgZmlyc3QgaW5jbGluYXRpb24gaXMgdG8ganVtcCBpbnRvIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AgYW5kIGltbWVkaWF0ZWx5IGxvb2sgYXJvdW5kIHRoZSBsaW5lcyBtZW50aW9uZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcy4gV2hhdCB3YXMgdGhlIHByZXZpb3VzIGJlaGF2aW9yPyBXaHkgYXJlIHRoZXkgcmVtb3ZpbmcgdGhlIGBzd2l0Y2hgPyBXaGF0J3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBjb25kaXRpb25hbCBiZWhhdmlvciBiYXNlZCBvbiBgYmxrX3RyYWNlcmA/IEFyZSB0aGVyZSBvdGhlciBmaWxlcyBvciBmdW5jdGlvbiBjYWxscyBhZmZlY3RlZD8gQW5kIG1vc3QgaW1wb3J0YW50bHksIGlzIHRoaXMgY2hhbmdlIHNhZmUsIGFuZCBkb2VzIGl0IGFsaWduIHdpdGggdGhlIHByb2plY3QncyBsb25nLXRlcm0gZGVzaWduIGdvYWxzPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGlzc3Vlcywgb3IgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTM1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6MTQuNDc5NTYyMjMzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ3ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM3MDpcXHRcXHQvKiBEcm9wIHRyYWNlIGV2ZW50cyBmb3Igem9uZSBvcGVyYXRpb25zIHdpdGggYmxrdHJhY2UgdjEgKi9cXG4gMzcxOlxcdFxcdGlmIChidC1cXHUwMDNldmVyc2lvbiA9PSAxIFxcdTAwMjZcXHUwMDI2ICh3aGF0IFxcdTAwM2VcXHUwMDNlIEJMS19UQ19TSElGVCkgXFx1MDAzZSBCTEtfVENfRU5EX1YxKSB7XFxuIDM3MjpcXHRcXHRcXHRwcl9kZWJ1Z19yYXRlbGltaXRlZChcXFwiYmxrdHJhY2UgdjEgY2Fubm90IHRyYWNlIHpvbmUgb3BlcmF0aW9uIDB4JWxseFxcXFxuXFxcIixcXG4gMzczOlxcdFxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nIGxvbmcpd2hhdCk7XFxuIDM3NDpcXHRcXHRcXHRyZXR1cm47XFxuIDM3NTpcXHRcXHR9XFxuIDM3NjpcXHRcXG4gMzc3OlxcdFxcdGlmIChjZ2lkKVxcbiAzNzg6XFx0XFx0XFx0d2hhdCB8PSBfX0JMS19UQV9DR1JPVVA7XFxuIDM3OTpcXHRcXG4gMzgwOlxcdFxcdHBpZCA9IHRzay1cXHUwMDNlcGlkO1xcbiAzODE6XFx0XFx0aWYgKGFjdF9sb2dfY2hlY2soYnQsIHdoYXQsIHNlY3RvciwgcGlkKSlcXG4gMzgyOlxcdFxcdFxcdHJldHVybjtcXG4gMzgzOlxcdFxcdGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XFxuIDM4NDpcXHRcXG4gMzg1OlxcdFxcdGlmIChibGtfdHJhY2VyKSB7XFxuIDM4NjpcXHRcXHRcXHRidWZmZXIgPSBibGtfdHItXFx1MDAzZWFycmF5X2J1ZmZlci5idWZmZXI7XFxuIDM4NzpcXHRcXHRcXHR0cmFjZV9jdHggPSB0cmFjaW5nX2dlbl9jdHhfZmxhZ3MoMCk7XFxuIDM4ODpcXHRcXHRcXHQvKlxcbiAzODk6XFx0XFx0XFx0ICogVGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciBhbHdheXMgdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpXFxuIDM5MDpcXHRcXHRcXHQgKiBmb3JtYXQ7IHRoZSBmdHJhY2UgcmVhZGVycyBwYXJzZSBvbmx5IHRoYXQuIGJ0LVxcdTAwM2V2ZXJzaW9uXFxuIDM5MTpcXHRcXHRcXHQgKiBkZXNjcmliZXMganVzdCB0aGUgcmVsYXkvY2xhc3NpYyBibGt0cmFjZSByZWNvcmQgZm9ybWF0LlxcbiAzOTI6XFx0XFx0XFx0ICogUmVjb3JkaW5nIGEgdjEtc2l6ZWQgZXZlbnQgaGVyZSB3b3VsZCBzaGlmdCBwZHVfc3RhcnQoKSAxNlxcbiAzOTM6XFx0XFx0XFx0ICogYnl0ZXMgcGFzdCB0aGUgUERVIGFuZCBtYWtlIGJsa19sb2dfcmVtYXAoKSByZWFkIHBhc3QgdGhlXFxuIDM5NDpcXHRcXHRcXHQgKiBldmVudCAoYSB1c2UtYWZ0ZXItZnJlZSBvbiBjb25jdXJyZW50IGJ1ZmZlciByZXNpemUpLCBhbmQgdjFcXG4gMzk1OlxcdFxcdFxcdCAqIGNhbm5vdCByZXByZXNlbnQgdGhlIG5ld2VyIDY0LWJpdCB6b25lIGFjdGlvbnMgYW55d2F5LlxcbiAzOTY6XFx0XFx0XFx0ICovXFxuIDM5NzpcXHRcXHRcXHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuO1xcbiAzOTg6XFx0XFx0XFx0ZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQkxLLFxcbiAzOTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICB0cmFjZV9sZW4sIHRyYWNlX2N0eCk7XFxuIDQwMDpcXHRcXHRcXHRpZiAoIWV2ZW50KVxcbiA0MDE6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA0MDI6XFx0XFxuIDQwMzpcXHRcXHRcXHR0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpO1xcbiA0MDQ6XFx0XFx0XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcXG4gNDA1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcXG4gNDA2OlxcdFxcdFxcdFxcdFxcdCAgICAgICB3aGF0LCBidC1cXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXFxuIDQwNzpcXHRcXHRcXHRcXHRcXHQgICAgICAgcGR1X2RhdGEsIHBkdV9sZW4pO1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRcXHRcXHR0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChibGtfdHIsIGJ1ZmZlciwgZXZlbnQsIHRyYWNlX2N0eCk7XFxuIDQxMDpcXHRcXHRcXHRyZXR1cm47XFxuIDQxMTpcXHRcXHR9XFxuIDQxMjpcXHRcXG4gNDEzOlxcdFxcdGlmICh1bmxpa2VseSh0c2stXFx1MDAzZWJ0cmFjZV9zZXEgIT0gYmxrdHJhY2Vfc2VxKSlcXG4gNDE0OlxcdFxcdFxcdHRyYWNlX25vdGVfdHNrKHRzayk7XFxuIDQxNTpcXHRcXG4gNDE2OlxcdFxcdC8qXFxuIDQxNzpcXHRcXHQgKiBBIHdvcmQgYWJvdXQgdGhlIGxvY2tpbmcgaGVyZSAtIHdlIGRpc2FibGUgaW50ZXJydXB0cyB0byByZXNlcnZlXFxuIDQxODpcXHRcXHQgKiBzb21lIHNwYWNlIGluIHRoZSByZWxheSBwZXItY3B1IGJ1ZmZlciwgdG8gcHJldmVudCBhbiBpcnFcXG4gNDE5OlxcdFxcdCAqIGZyb20gY29taW5nIGluIGFuZCBzdGVwcGluZyBvbiBvdXIgdG9lcy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6MTQuNDgwMDE1MjIzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjczNTE0ODk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipUcmFjaW5nIEJsb2NrIERldmljZSBRdWV1ZSBTZXR1cCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgYmxvY2sgdHJhY2luZyBpcyBzZXQgdXAuIEZpcnN0LCBJJ20gZ29pbmcgdG8gZGl2ZSBpbnRvIHRoZSBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCBmdW5jdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGl0J3MgZG9pbmcg4oCTIHRoZSBpbml0aWFsaXphdGlvbiwgdGhlIGNvbm5lY3Rpb25zIGl0J3MgbWFraW5nLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgdG91Y2hpbmcuIFRoZW4sIGVxdWFsbHkgaW1wb3J0YW50bHksIEkgbmVlZCB0byB0cmFjZSAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20uIEkgbmVlZCB0aGUgY2FsbCBncmFwaCB0byBzZWUgaG93IHRoaXMgc2V0dXAgcHJvY2VzcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgYmxvY2sgSS9PIHN0YWNrLiBBcmUgdGhlcmUgc3BlY2lmaWMgcGF0aHMgb3Igc2NlbmFyaW9zIHRoYXQgdHJpZ2dlciBpdD8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHBvaW50cyBvZiBjb25jZXJuP1xuXG5GaW5hbGx5LCBsZXQncyBub3QgZm9yZ2V0IHRoZSBLY29uZmlnIG9wdGlvbnMuIEJsb2NrIHRyYWNpbmcgaXMgb2Z0ZW4gY29uZmlndXJhYmxlLCBzbyBJIG5lZWQgdG8gY2hlY2sgd2hpY2ggb3B0aW9ucyBjb250cm9sIHdoZXRoZXIgdGhpcyBjb2RlIGV2ZW4gKmdldHMqIGNvbXBpbGVkIGFuZCBsaW5rZWQgaW4uIFVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyBvbiB0aG9zZSBjb25maWcgc2V0dGluZ3Mgd2lsbCBiZSBjcml0aWNhbCBmb3IgZGVidWdnaW5nIGRpZmZlcmVudCBidWlsZCBjb25maWd1cmF0aW9ucyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0cmFjaW5nLiBUaGlzIGlzIGFsbCBhYm91dCBnZXR0aW5nIGEgaG9saXN0aWMgdmlldyBvZiB0aGUgYGJsa190cmFjZV9zZXR1cF9xdWV1ZWAgZnVuY3Rpb24gYW5kIGl0cyBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM0NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6MTcuMjE1MTY2NDE4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NjU6XFx0XFxuMTg2NjpcXHRcXHRidCA9IGt6YWxsb2Nfb2JqKCpidCk7XFxuMTg2NzpcXHRcXHRpZiAoIWJ0KVxcbjE4Njg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTg2OTpcXHRcXG4xODcwOlxcdFxcdGJ0LVxcdTAwM2Vtc2dfZGF0YSA9IF9fYWxsb2NfcGVyY3B1KEJMS19UTl9NQVhfTVNHLCBfX2FsaWdub2ZfXyhjaGFyKSk7XFxuMTg3MTpcXHRcXHRpZiAoIWJ0LVxcdTAwM2Vtc2dfZGF0YSlcXG4xODcyOlxcdFxcdFxcdGdvdG8gZnJlZV9idDtcXG4xODczOlxcdFxcbjE4NzQ6XFx0XFx0YnQtXFx1MDAzZWRldiA9IGJkZXYtXFx1MDAzZWJkX2RldjtcXG4xODc1OlxcdFxcdGJ0LVxcdTAwM2VhY3RfbWFzayA9ICh1MTYpLTE7XFxuMTg3NjpcXHRcXHQvKlxcbjE4Nzc6XFx0XFx0ICogVGhpcyBzeXNmcy1lbmFibGVkIHBhdGggZmVlZHMgdGhlIGZ0cmFjZSBibGsgdHJhY2VyLCB3aGljaCBhbHdheXNcXG4xODc4OlxcdFxcdCAqIHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKSBmb3JtYXQuIEluaXRpYWxpemUgdGhlIHZlcnNpb24gc28gaXQgaXNcXG4xODc5OlxcdFxcdCAqIG5ldmVyIGxlZnQgZGFuZ2xpbmcgYXMgMCBmb3IgZnV0dXJlIGNvbnN1bWVycy5cXG4xODgwOlxcdFxcdCAqL1xcbjE4ODE6XFx0XFx0YnQtXFx1MDAzZXZlcnNpb24gPSAyO1xcbjE4ODI6XFx0XFxuMTg4MzpcXHRcXHRibGtfdHJhY2Vfc2V0dXBfbGJhKGJ0LCBiZGV2KTtcXG4xODg0OlxcdFxcbjE4ODU6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKHEtXFx1MDAzZWJsa190cmFjZSwgYnQpO1xcbjE4ODY6XFx0XFx0Z2V0X3Byb2JlX3JlZigpO1xcbjE4ODc6XFx0XFx0cmV0dXJuIDA7XFxuMTg4ODpcXHRcXG4xODg5OlxcdGZyZWVfYnQ6XFxuMTg5MDpcXHRcXHRibGtfdHJhY2VfZnJlZShxLCBidCk7XFxuMTg5MTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE4OTI6XFx0fVxcbjE4OTM6XFx0XFxuMTg5NDpcXHQvKlxcbjE4OTU6XFx0ICogc3lzZnMgaW50ZXJmYWNlIHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIHRyYWNpbmdcXG4xODk2OlxcdCAqL1xcbjE4OTc6XFx0XFxuMTg5ODpcXHRzdGF0aWMgc3NpemVfdCBzeXNmc19ibGtfdHJhY2VfYXR0cl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4xODk5OlxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4xOTAwOlxcdFxcdFxcdFxcdFxcdFxcdCBjaGFyICpidWYpO1xcbjE5MDE6XFx0c3RhdGljIHNzaXplX3Qgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbjE5MDI6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4xOTAzOlxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpO1xcbjE5MDQ6XFx0I2RlZmluZSBCTEtfVFJBQ0VfREVWSUNFX0FUVFIoX25hbWUpIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6MTcuMjE1Mjc1MDI4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU4MjY0MzcyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVHJhY2Vwb2ludCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgcmVsYXRlZCB0byBgYmxrdHJhY2VgIHdpdGhpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBidWlsZCBzeXN0ZW0sIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBhcmUgbGlrZWx5IGRlZmluZWQuIEkgbmVlZCB0byBjb25maXJtIHRoZSBidWlsZCBmbGFncyBvciBkZXBlbmRlbmNpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBtb2R1bGUuIEkga25vdyB0aGF0IEtjb25maWcgaXMgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIHNvIEknbGwgZ28gc3RyYWlnaHQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMzQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjE4Ljc5NzkyMTA3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUyMjQxMCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrdHJhY2UuY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjE4Ljg0NTQ1MDYxMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzYwMTg2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGZpbGVzOlxuXG4qKkNoZWNraW5nIFJlbGV2YW50IENvbmZpZ3VyYXRpb24gYW5kIEJ1aWxkIEZpbGVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRyYWNpbmcgaXMgY29uZmlndXJlZCBhbmQgYnVpbHQsIHBhcnRpY3VsYXJseSBhcyBpdCByZWxhdGVzIHRvIGJsb2NrIGRldmljZSBhY3Rpdml0eS4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBrZXJuZWwvdHJhY2UvTWFrZWZpbGVgLiBUaGF0J3MgdGhlIG9idmlvdXMgcGxhY2UgdG8gYmVnaW4gZm9yIGFueSBidWlsZC1yZWxhdGVkIGRldGFpbHMgaW4gdGhlIHRyYWNpbmcgc3Vic3lzdGVtLiBJJ2xsIHdhbnQgdG8gc2VlIGhvdyB0cmFjaW5nIG1vZHVsZXMgYW5kIG9wdGlvbnMgYXJlIGNvbXBpbGVkLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8ga25vdyBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgZXhwb3NlZCB0byB0aGUgdXNlciwgdGhpcyBpcyB3aGVyZSBga2VybmVsL3RyYWNlL0tjb25maWdgIGNvbWVzIGluIHRvIHBsYXkuIEknbGwgYWxzbyBjaGVjayBgYmxvY2svS2NvbmZpZ2AgdG8gY3Jvc3MgcmVmZXJlbmNlIGFueSBvcHRpb25zIHRoYXQgaW50ZXJhY3Qgb3IgbWF5IG92ZXJsYXAgd2l0aCB0aGUgYmxvY2sgZGV2aWNlIHRyYWNpbmcgb3B0aW9ucyB0byBzZWUgaWYgYW55IHNldHRpbmdzIGFyZSBzaGFyZWQuIEtub3dpbmcgdGhpcywgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBob3cgdGhlIGJsb2NrIHRyYWNpbmcgZmVhdHVyZXMgYXJlIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsIGJ1aWxkIHByb2Nlc3MgYW5kIHVzZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDI3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6MjAuNzIxNDcxNzAxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDc3Mzg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGt0cmFjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL01ha2VmaWxlPTkxPW9iai0kKENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HKSArPSB0cmFjZV9icmFuY2gub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZTo5MjpvYmotJChDT05GSUdfQkxLX0RFVl9JT19UUkFDRSkgKz0gYmxrdHJhY2Uub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZS05My1vYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSArPSBmZ3JhcGgub1xcbmtlcm5lbC90cmFjZS9NYWtlZmlsZT05ND1pZmVxICgkKENPTkZJR19CTE9DSykseSlcXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGU6OTU6b2JqLSQoQ09ORklHX0VWRU5UX1RSQUNJTkcpICs9IGJsa3RyYWNlLm9cXG5rZXJuZWwvdHJhY2UvTWFrZWZpbGUtOTYtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6MjAuNzY2MjQ4N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDUxMTEyODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIEJsb2NrIERldmljZSBJL08gVHJhY2luZyBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYmxvY2sgZGV2aWNlIEkvTyB0cmFjaW5nLiBNeSBmaXJzdCBwb3J0IG9mIGNhbGwsIG5hdHVyYWxseSwgaXMgdGhlIG9idmlvdXM6IEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBhbmQgYGJsb2NrL0tjb25maWdgLiBUaG9zZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nLCBwcm9iYWJseSBhIGBjb25maWdgIG9wdGlvbiwgdGhhdCBkaXJlY3RseSByZWxhdGVzIHRvIGBCTEtfREVWX0lPX1RSQUNFYC4gVGhhdCdzIHRoZSBrZXl3b3JkIEknbSBsb29raW5nIGZvciAtIGBCTEtfREVWX0lPX1RSQUNFYC4gSXQgd2lsbCBwb2ludCBtZSB0byB0aGUgcmVsZXZhbnQga2VybmVsIGZlYXR1cmVzIGFuZCBob3cgSSBjYW4gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHRyYWNpbmcuIFRoaXMgaXMgYWxsIGFib3V0IGNvbmZpcm1pbmcgdGhlIHByZXNlbmNlIGFuZCBsb2NhdGlvbiBvZiB0aGUgbmVjZXNzYXJ5IHNldHRpbmdzLCBhbmQgdGhlIGRlcGVuZGVuY2llcyBhcm91bmQgdGhlbS4gVGltZSB0byBkaXZlIGludG8gdGhvc2UgY29uZmlndXJhdGlvbiBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgzNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjIyLjgxNzM2NTI1N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4NzcxMDQxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9JT19UUkFDRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvS2NvbmZpZz03MTc9Y29uZmlnIEJSQU5DSF9UUkFDRVJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTczMC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo3MzE6Y29uZmlnIEJMS19ERVZfSU9fVFJBQ0VcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03MzItXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdHJhY2luZyBibG9jayBJTyBhY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MToyNS4wMDUwNzk5MjFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU1MTMzMDE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBUcmFjaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGtlcm5lbC90cmFjZS9LY29uZmlnYCBmaWxlLiBJJ20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDczMS4gSSdtIGd1ZXNzaW5nIHRoYXQncyB3aGVyZSBhIHBhcnRpY3VsYXIgdHJhY2luZyBmZWF0dXJlIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEknbSBpbnRlcmVzdGVkIGluIGlzIGRlZmluZWQuIEl0J3MgbGlrZWx5IGEgcmVsYXRpdmVseSBjZW50cmFsIG9yIGltcG9ydGFudCBhc3BlY3Qgb2YgdGhlIHRyYWNpbmcgc3Vic3lzdGVtIGlmIGl0J3MgcGxhY2VkIHRoZXJlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBlbmFibGVkLCBkaXNhYmxlZCwgaXRzIGRlcGVuZGVuY2llcywgYW5kIHdoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGl0cyBkZXNpZ24uIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE4NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjI2LjU1NjQxMzA1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEzMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzI1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzI1OlxcdFxcdCAgaGlzdG9ncmFtIG9mIHRoZSBjYWxsZXJzLCBidXQgYWN0dWFsbHkgcGxhY2VzIHRoZSBjYWxsaW5nXFxuIDcyNjpcXHRcXHQgIGV2ZW50cyBpbnRvIGEgcnVubmluZyB0cmFjZSBidWZmZXIgdG8gc2VlIHdoZW4gYW5kIHdoZXJlIHRoZVxcbiA3Mjc6XFx0XFx0ICBldmVudHMgaGFwcGVuZWQsIGFzIHdlbGwgYXMgdGhlaXIgcmVzdWx0cy5cXG4gNzI4OlxcdFxcbiA3Mjk6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuIDczMDpcXHRcXG4gNzMxOlxcdGNvbmZpZyBCTEtfREVWX0lPX1RSQUNFXFxuIDczMjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciB0cmFjaW5nIGJsb2NrIElPIGFjdGlvbnNcXFwiXFxuIDczMzpcXHRcXHRkZXBlbmRzIG9uIFNZU0ZTXFxuIDczNDpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLXFxuIDczNTpcXHRcXHRzZWxlY3QgUkVMQVlcXG4gNzM2OlxcdFxcdHNlbGVjdCBERUJVR19GU1xcbiA3Mzc6XFx0XFx0c2VsZWN0IFRSQUNFUE9JTlRTXFxuIDczODpcXHRcXHRzZWxlY3QgR0VORVJJQ19UUkFDRVJcXG4gNzM5OlxcdFxcdHNlbGVjdCBTVEFDS1RSQUNFXFxuIDc0MDpcXHRcXHRoZWxwXFxuIDc0MTpcXHRcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB0cmFjZSB0aGUgYmxvY2sgbGF5ZXIgYWN0aW9uc1xcbiA3NDI6XFx0XFx0ICBvbiBhIGdpdmVuIHF1ZXVlLiBUcmFjaW5nIGFsbG93cyB5b3UgdG8gc2VlIGFueSB0cmFmZmljIGhhcHBlbmluZ1xcbiA3NDM6XFx0XFx0ICBvbiBhIGJsb2NrIGRldmljZSBxdWV1ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gKGFuZCB0aGUgdXNlcnNwYWNlXFxuIDc0NDpcXHRcXHQgIHN1cHBvcnQgdG9vbHMgbmVlZGVkKSwgZmV0Y2ggdGhlIGJsa3RyYWNlIHRvb2xzIGZyb206XFxuIDc0NTpcXHRcXG4gNzQ2OlxcdFxcdCAgZ2l0Oi8vZ2l0Lmtlcm5lbC5kay9ibGt0cmFjZS5naXRcXG4gNzQ3OlxcdFxcbiA3NDg6XFx0XFx0ICBUcmFjaW5nIGFsc28gaXMgcG9zc2libGUgdXNpbmcgdGhlIGZ0cmFjZSBpbnRlcmZhY2UsIGUuZy46XFxuIDc0OTpcXHRcXG4gNzUwOlxcdFxcdCAgICBlY2hvIDEgXFx1MDAzZSAvc3lzL2Jsb2NrL3NkYS9zZGExL3RyYWNlL2VuYWJsZVxcbiA3NTE6XFx0XFx0ICAgIGVjaG8gYmxrIFxcdTAwM2UgL3N5cy9rZXJuZWwvdHJhY2luZy9jdXJyZW50X3RyYWNlclxcbiA3NTI6XFx0XFx0ICAgIGNhdCAvc3lzL2tlcm5lbC90cmFjaW5nL3RyYWNlX3BpcGVcXG4gNzUzOlxcdFxcbiA3NTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MToyNi41NTY1MTU4NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc0ODc2NDA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzOiBibGt0cmFjZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGZvY3VzZWQgb24gd2hldGhlciB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZnV6emluZyBjYW1wYWlnbi4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHJlYWNoYWJpbGl0eS4gYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYCBpcyB0aGUgaGVhcnQgb2YgdGhlIGJsb2NrIGxheWVyIHRyYWNpbmcsIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnQuIEl0IGxvb2tzIGxpa2Ugd2UgY2FuIHRyaWdnZXIgaXQgdGhyb3VnaCBzeXNmcyBlbnRyaWVzIHVuZGVyIGAvc3lzL2Jsb2NrLy4uLi90cmFjZS8uLi5gLCBzcGVjaWZpYyBpb2N0bHMgbGlrZSBgQkxLVFJBQ0VTRVRVUGAsIGBCTEtUUkFDRVNUQVJUYCwgZXRjLiwgb3IgZXZlbiB0aHJvdWdoIHRoZSBmdHJhY2UgYGJsa2AgdHJhY2VyLiBFeGNlbGxlbnQsIG11bHRpcGxlIGVudHJ5IHBvaW50cyBlbmhhbmNlIG91ciBhdHRhY2sgc3VyZmFjZS4gYF9fYmxrX2FkZF90cmFjZSgpYCBpcyBhIGtleSBmdW5jdGlvbiwgZ2V0dGluZyBjYWxsZWQgZHVyaW5nIElPLCBhbmQgYGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpYCBnZXRzIGNhbGxlZCB3aGVuIGVuYWJsaW5nIHRyYWNlcyB2aWEgc3lzZnMuXG5cbk5vdywgdGhlIHNwZWNpZmljcyBvZiB0aGlzIHBhdGNoIGFyZSBpbXBvcnRhbnQuIEl0J3MgbW9kaWZ5aW5nIGBfX2Jsa19hZGRfdHJhY2VgIHRvIHVzZSB0aGUgdjIgZm9ybWF0IHVuY29uZGl0aW9uYWxseSwgZWZmZWN0aXZlbHkgcmVtb3ZpbmcgdGhlIGNvbmRpdGlvbmFsIHRoYXQgaGFuZGxlZCB2MSBvciB2MiBmb3JtYXRzLiBUaGlzIGlzIGNyaXRpY2FsLiBCeSBlbGltaW5hdGluZyB0aGUgc3dpdGNoIHN0YXRlbWVudCBiYXNlZCBvbiBgYnQtXHUwMDNldmVyc2lvbmAsIHRoZSBwYXRjaCBhdm9pZHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMsIHVzZS1hZnRlci1mcmVlLCBvciBidWZmZXIgY29ycnVwdGlvbiBpc3N1ZXMgaWYgYGJ0LVx1MDAzZXZlcnNpb25gIHdhcyBpbmNvcnJlY3RseSBzZXQgdG8gMSBvciAwLiBBbHNvLCBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlYCBleHBsaWNpdGx5IHNldHMgYGJ0LVx1MDAzZXZlcnNpb24gPSAyYCB3aGVuIHN5c2ZzIHRyYWNpbmcgaXMgZW5hYmxlZC4gVGhhdCBzaW1wbGlmaWVzIG91ciB0ZXN0IGNhc2VzIGFzIHdlIG9ubHkgbmVlZCB0byB0aGluayBhYm91dCB2Mi5cblxuR2l2ZW4gdGhvc2UgY2hhbmdlcywgdGhlcmUgYXJlIHNldmVyYWwgcG9zaXRpdmUgaW5kaWNhdG9ycy4gSXQncyB0b3VjaGluZyByZWFjaGFibGUsIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gYSBjb3JlIHN1YnN5c3RlbeKAlHRoZSBibG9jayBsYXllciBhbmQgdHJhY2luZy4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBsb2dpYyBjaGFuZ2VzLCB3aGljaCBhcmUgaWRlYWwgdGFyZ2V0cyBmb3IgZnV6emluZywgc3BlY2lmaWNhbGx5IGluIHRoZSB0cmFjZWFibGUgcmVjb3JkaW5nIGNvZGUgcGF0aCB3aXRoaW4gYF9fYmxrX2FkZF90cmFjZWAgYW5kIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgLiBBbmQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIGl0IHNob3VsZCBiZSBlYXNpbHkgYWNjZXNzaWJsZSB3aXRoaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBsaWtlIFFFTVUgb3IgR0NFLCB1c2luZyBzdGFuZGFyZCBzeXprYWxsZXIgc3lzY2FsbHMsIHN5c2ZzLCBhbmQgaW9jdGxzLiBJJ20gZ29pbmcgdG8gc2V0IFdvcnRoRnV6emluZyA9IHRydWUuXG5cbk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24uIE9idmlvdXNseSwgYF9fYmxrX2FkZF90cmFjZWAgYW5kIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgIGFyZSBjZW50cmFsLiBUaGUgZnVuY3Rpb24gYHJlY29yZF9ibGt0cmFjZV9ldmVudDJgIGlzIGFsc28gaW1tZWRpYXRlbHkgcmVsZXZhbnQsIGFzIGl0IGlzIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gdXNlZC4gTm93IEkgc2hvdWxkIGNoZWNrIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIHB1YmxpYyBpbnRlcmZhY2VzIGZvciBgYmxrdHJhY2VgIHRvIHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgzMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjMyLjMwNTI4MjI1MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzODg3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmxrX3RyYWNlX3NldHVwX3F1ZXVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTE4NDA9c3RhdGljIGludCBibGtfdHJhY2VfcmVtb3ZlX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg1OS0gKi9cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxODYwOnN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4NjEtXFx0XFx0XFx0XFx0IHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yMDM3PXN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwNzMtXFx0XFx0aWYgKHZhbHVlKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwNzQ6XFx0XFx0XFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHEsIGJkZXYpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwNzUtXFx0XFx0ZWxzZVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMjA4MS1cXHRpZiAoYnQgPT0gTlVMTCkge1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjIwODI6XFx0XFx0cmV0ID0gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHEsIGJkZXYpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTIwODMtXFx0XFx0YnQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHEtXFx1MDAzZWJsa190cmFjZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6MzIuMzUxNjc2NjAxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MDYyOTAzOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgX19ibGtfYWRkX3RyYWNlYCBDYWxsZXJzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNhbGxpbmcgYF9fYmxrX2FkZF90cmFjZWAgd2l0aGluIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBsZXQncyB0cmFjZSB0aGUgY2FsbGVycy5cIiBJIGtub3cgdGhpcyBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBibGt0cmFjZSwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIHdpbGwgc2hlZCBsaWdodCBvbiBob3cgdHJhY2luZyBldmVudHMgYXJlIGFjdHVhbGx5IGluamVjdGVkIGludG8gdGhlIGJsa3RyYWNlIHN5c3RlbS4gSXTigJlzIHRoZSBlbnRyeSBwb2ludCwgc28gSSBleHBlY3QgYSB2YXJpZXR5IG9mIGluc3RydW1lbnRhdGlvbiBwb2ludHMgdG8gYmUgY2FsbGluZyBpdCB0byByZWNvcmQgYmxvY2sgZGV2aWNlIEkvTyBhY3Rpdml0eS4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyBnZW5lcmF0ZWQgYW5kIHRoZSBraW5kIG9mIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdGhhdCBpcyBnYXRoZXJlZCB3aGVuIHRoZSBjYWxsIGlzIG1hZGUuIEkgc3VzcGVjdCBpdCdsbCByYW5nZSBmcm9tIEkvTyBzY2hlZHVsZXJzLCBibG9jayBsYXllciBkcml2ZXJzLCBtYXliZSBldmVuIHNvbWUgaW50ZXJydXB0IGhhbmRsZXJzLCBkZXBlbmRpbmcgb24gaG93IGZpbmVseSBibGt0cmFjZSBpcyBpbnRlZ3JhdGVkLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgbWFrZSBkZWJ1Z2dpbmcgaXNzdWVzIGZhciBzaW1wbGVyLCBhbmQgaXQgd2lsbCBsZXQgbWUgb3B0aW1pemUgYmxrdHJhY2UgcGVyZm9ybWFuY2UgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgY2F1c2UgdG9vIG11Y2ggb3ZlcmhlYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MTozNC44NTc5NjkyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5ODE1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19ibGtfYWRkX3RyYWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTI5Nj1zdGF0aWMgY29uc3QgdTMyIGRkaXJfYWN0WzJdID0geyBCTEtfVENfQUNUKEJMS19UQ19SRUFEKSxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTMwOS0gKi9cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzozMTA6c3RhdGljIHZvaWQgX19ibGtfYWRkX3RyYWNlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcyxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zMTEtXFx0XFx0XFx0ICAgIGNvbnN0IGJsa19vcGZfdCBvcGYsIHU2NCB3aGF0LCBpbnQgZXJyb3IsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz05ODE9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJsa19zdGF0dXNfdCBlcnJvcixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk5Ny1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5OTg6XFx0X19ibGtfYWRkX3RyYWNlKGJ0LCBibGtfcnFfdHJhY2Vfc2VjdG9yKHJxKSwgbnJfYnl0ZXMsIHJxLVxcdTAwM2VjbWRfZmxhZ3MsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTk5LVxcdFxcdFxcdHdoYXQsIGJsa19zdGF0dXNfdG9fZXJybm8oZXJyb3IpLCAwLCBOVUxMLCBjZ2lkKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEwNjE9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwNzItXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTA3MzpcXHRfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IsIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwNzQtXFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYsIHdoYXQsIGVycm9yLCAwLCBOVUxMLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTEwOD1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3BsdWcodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExMTQtXFx0aWYgKGJ0KVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExMTU6XFx0XFx0X19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCAwLCBCTEtfVEFfUExVRywgMCwgMCwgTlVMTCwgMCk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTExNi1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExMTk9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV91bnBsdWcodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExMzQtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTEzNTpcXHRcXHRfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIHdoYXQsIDAsIHNpemVvZihycGR1KSwgXFx1MDAyNnJwZHUsIDApO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExMzYtXFx0fVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTE0MD1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3pvbmVfcGx1Zyh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE0OC1cXHRpZiAoYnQgXFx1MDAyNlxcdTAwMjYgYnQtXFx1MDAzZXZlcnNpb24gXFx1MDAzZT0gMilcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMTQ5OlxcdFxcdF9fYmxrX2FkZF90cmFjZShidCwgc2VjdG9yLCBzZWN0b3JzIFxcdTAwM2NcXHUwMDNjIFNFQ1RPUl9TSElGVCwgMCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTUwLVxcdFxcdFxcdFxcdEJMS19UQV9aT05FX1BMVUcsIDAsIDAsIE5VTEwsIDApO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTE1Nj1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3pvbmVfdW5wbHVnKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTY0LVxcdGlmIChidCBcXHUwMDI2XFx1MDAyNiBidC1cXHUwMDNldmVyc2lvbiBcXHUwMDNlPSAyKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExNjU6XFx0XFx0X19ibGtfYWRkX3RyYWNlKGJ0LCBzZWN0b3IsIHNlY3RvcnMgXFx1MDAzY1xcdTAwM2MgU0VDVE9SX1NISUZULCAwLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExNjYtXFx0XFx0XFx0XFx0QkxLX1RBX1pPTkVfVU5QTFVHLCAwLCAwLCBOVUxMLCAwKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExNzE9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9zcGxpdCh2b2lkICppZ25vcmUsIHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IHBkdSlcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTExODAtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTE4MTpcXHRcXHRfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE4Mi1cXHRcXHRcXHRcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSwgYmlvLVxcdTAwM2ViaV9vcGYsIEJMS19UQV9TUExJVCxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExOTk9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fcmVtYXAodm9pZCAqaWdub3JlLCBzdHJ1Y3QgYmlvICpiaW8sIGRldl90IGRldixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyMTYtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTIxNzpcXHRfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IsIGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyMTgtXFx0XFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYsIEJMS19UQV9SRU1BUCxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEyMzY9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9yZW1hcCh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgZGV2X3QgZGV2LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI1Mi1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMjUzOlxcdF9fYmxrX2FkZF90cmFjZShidCwgYmxrX3JxX3BvcyhycSksIGJsa19ycV9ieXRlcyhycSksXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI1NC1cXHRcXHRcXHRycS1cXHUwMDNlY21kX2ZsYWdzLCBCTEtfVEFfUkVNQVAsIDAsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMjY5PXZvaWQgYmxrX2FkZF9kcml2ZXJfZGF0YShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjc5LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEyODA6XFx0X19ibGtfYWRkX3RyYWNlKGJ0LCBibGtfcnFfdHJhY2Vfc2VjdG9yKHJxKSwgYmxrX3JxX2J5dGVzKHJxKSwgMCxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjgxLVxcdFxcdFxcdFxcdEJMS19UQV9EUlZfREFUQSwgMCwgbGVuLCBkYXRhLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MTozNC45MDE5NTQ4NDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxOTg0OTA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byB0aGUgVHJhY2luZyoqXG5cbkFscmlnaHQsIEknbSBhbHJlYWR5IGluIHRoaXMgdHJhY2luZyBjb2RlLCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIHN5c3RlbSBiZWhhdmlvci4gV2UndmUgbG9va2VkIGF0IHRoZSBtYWluIGNvbXBvbmVudHMsIGJ1dCBJJ20gdGhpbmtpbmcgd2UgbmVlZCB0byBnbyBkZWVwZXIuIFdlIG5lZWQgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaC4gQmVmb3JlIHdlIG1vdmUgb24sIEkgd2FudCB0byBjb25maXJtIHdlIGRpZG4ndCBtaXNzIHNvbWV0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgbWlzcyBhbnkgY3JpdGljYWwgZXZlbnRzLlxuXG5TbywgbGV0J3MgYWxzbyBjaGVjayBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmAuIEl0J3MgZXNzZW50aWFsIHdlIGNoZWNrIGFsbCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIGNvbmZpcm0gb3VyIHRyYWNpbmcgaXMgY29tcGxldGUuIElmIHRoYXQgZnVuY3Rpb24gY2FsbHMgb3RoZXIgdHJhY2luZyBmdW5jdGlvbnMsIHdlIG5lZWQgdG8gaW5zcGVjdCB0aG9zZSB0b28uIFRoaXMgaXMgdGhlIGtpbmQgb2YgbWV0aG9kaWNhbCBhcHByb2FjaCB0aGF0IHNlcGFyYXRlcyBhIGdvb2QgYW5hbHlzaXMgZnJvbSBhIHN1cGVyZmljaWFsIG9uZS4gV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSBhIGNvbXByZWhlbnNpdmUgcGljdHVyZSBvZiB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJdOKAmXMgYWJvdXQgYmVpbmcgcHJlY2lzZTsgbGV04oCZcyBkaXZlIGluIGFuZCBzZWUgd2hhdCdzIGJlaW5nIHJlY29yZGVkIGluIGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyYC4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgbWlnaHQgYmUgaGlkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAwOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjM3LjYyMTgwNjIzNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwODIwNjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY29yZF9ibGt0cmFjZV9ldmVudDJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9NjY9c3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50KHN0cnVjdCBibGtfaW9fdHJhY2UgKnQsIHBpZF90IHBpZCwgaW50IGNwdSxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTkzLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjk0OnN0YXRpYyB2b2lkIHJlY29yZF9ibGt0cmFjZV9ldmVudDIoc3RydWN0IGJsa19pb190cmFjZTIgKnQyLCBwaWRfdCBwaWQsIGludCBjcHUsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTUtXFx0XFx0XFx0XFx0ICAgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsIHU2NCB3aGF0LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTM2PXN0YXRpYyB2b2lkIHJlbGF5X2Jsa3RyYWNlX2V2ZW50MihzdHJ1Y3QgYmxrX3RyYWNlICpidCwgdW5zaWduZWQgbG9uZyBzZXF1ZW5jZSxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE1MS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNTI6XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50Mih0LCBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcywgd2hhdCwgYnQtXFx1MDAzZWRldiwgZXJyb3IsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTUzLVxcdFxcdFxcdCAgICAgICBjZ2lkLCBjZ2lkX2xlbiwgcGR1X2RhdGEsIHBkdV9sZW4pO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTczPXN0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgdTY0IGFjdGlvbixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5NC1cXHRcXHR0ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTk1OlxcdFxcdHJlY29yZF9ibGt0cmFjZV9ldmVudDIodCwgcGlkLCBjcHUsIDAsIDAsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk2LVxcdFxcdFxcdFxcdCAgICAgICBhY3Rpb24sIGJ0LVxcdTAwM2VkZXYsIDAsIGNnaWQsIGNnaWRfbGVuLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MzEwPXN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00MDMtXFx0XFx0dHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0MDQ6XFx0XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00MDUtXFx0XFx0XFx0XFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MTozNy43MjI2MzA2MjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA5MzEwNjkzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIENhbmRpZGF0ZSBBc3Nlc3NtZW50OiBCbG9jayBUcmFjaW5nIFN1YnN5c3RlbSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIHBvaW50cyB0byBgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0VgIGJlaW5nIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gZmxhZyBoZXJlLCB3aGljaCwgb2YgY291cnNlLCBkZXBlbmRzIG9uIGBTWVNGU2AgYW5kIGBCTE9DS2AuIFdlJ3JlIHRhbGtpbmcgYmxvY2sgZGV2aWNlIEkvTyB0cmFjaW5nLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBUaGVuIHRoZXJlJ3MgYENPTkZJR19FVkVOVF9UUkFDSU5HYCwgd2hpY2ggYWxzbyBwbGF5cyBhIHJvbGUuIEdvb2QsIHdlIGhhdmUgdGhlIGRlcGVuZGVuY2llcyBtYXBwZWQuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgZGlyZWN0IGNvbm5lY3Rpb24uIEZyb20gdGhlIGBrZXJuZWwvdHJhY2UvTWFrZWZpbGVgLCB0aGUgbGluayB0byBgYmxrdHJhY2Uub2AgaXMgY29uZGl0aW9uZWQgb24gYENPTkZJR19CTEtfREVWX0lPX1RSQUNFYCBkaXJlY3RseSwgYW5kIHRoZXJlJ3MgYW4gYGlmZXFgIGNoZWNrIHdpdGggYENPTkZJR19CTE9DS2AsIHdoaWNoIGlzIHJlcXVpcmVkLiBTbywgKnllcyosIGBCTEtfREVWX0lPX1RSQUNFYCBpcyB0aGUgcHJpbWFyeSBzd2l0Y2guXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSB0YXJnZXRlZCBjb2RlLiBTcGVjaWZpYyBmdW5jdGlvbiBuYW1lcyBoZWxwIHJlZmluZSB0aGUgc2NvcGUuIExvb2tzIGxpa2UgYF9fYmxrX2FkZF90cmFjZWAsIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgLCBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmAsIGFuZCBgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmVgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB3YXRjaC4gVGhleSdyZSBub3QgdWJpcXVpdG91czsgdGhpcyBpcyBwcmVjaXNlbHkgdGhlIHRhcmdldGVkIGJsa3RyYWNlIGxvZ2ljLCB3aGljaCBtZWFucyB0aGV5IGFyZSBncmVhdCBjYW5kaWRhdGVzIGZvciBmaW5kaW5nIGJ1Z3MuXG5cbk9rYXksIGxldCdzIHN5bnRoZXNpemUgdGhpcyBpbnRvIGEgc3RydWN0dXJlZCBhcmd1bWVudDpcblxuMS4gICoqVGhlIE1vZGlmaWNhdGlvbjoqKiBUaGlzIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIGBfX2Jsa19hZGRfdHJhY2UoKWAgd2l0aGluIGBrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY2AuIEl0J3MgdW5jb25kaXRpb25hbGx5IGVuZm9yY2luZyB0aGUgdjIgKGBibGtfaW9fdHJhY2UyYCkgZm9ybWF0IHdoZW4gYGJsa190cmFjZXJgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGF2b2lkIGFueSBidWZmZXIgc2l6ZSBtaXNtYXRjaCBvciBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zIHdoZW4gdHJhY2luZyB1c2luZyBmdHJhY2UuIFRoZSBgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKClgIGZ1bmN0aW9uIGlzIGFsc28gdXBkYXRlZCB0byBleHBsaWNpdGx5IHNldCBgYnQtXHUwMDNldmVyc2lvbiA9IDJgLlxuXG4yLiAgKipSZWFjaGFiaWxpdHk6KiogVGhpcyBjb2RlIGlzIHNtYWNrLWRhYiBpbiB0aGUgYmxvY2sgdHJhY2luZyBzdWJzeXN0ZW0sIHNvIGl0J3MgY29yZSBmdW5jdGlvbmFsaXR5LiBJdCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMgY29uZmlndXJhdGlvbiDigJMgYC9zeXMvYmxvY2svXHUwMDNjZGV2XHUwMDNlL3RyYWNlLy4uLmAg4oCTIGFuZCB0aGVyZWZvcmUsIHRocm91Z2ggc3RhbmRhcmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMgYXMgbG9uZyBhcyBgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0VgIGlzIGVuYWJsZWQuIFRoaXMgbWFrZXMgaXQgYSBncmVhdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgYXMgaXQgaXMgYSBjb21tb24gY29kZSBwYXRoLlxuXG4zLiAgKipWZXJkaWN0OioqICBHaXZlbiB0aGUgdGFyZ2V0ZWQgY29kZSwgdGhlIHJlYWNoYWJpbGl0eSB2aWEgc3RhbmRhcmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMgYW5kIHN5c2ZzLCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgcGF0Y2gsIHRoZSB2ZXJkaWN0IGlzIGNsZWFyOiAqKldvcnRoRnV6emluZyA9IHRydWUuKipcblxuQWxyaWdodCwgbGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg1NCwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6NDIuODE1NzQwMjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg1MjEwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfSU9fVFJBQ0VcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19ibGtfYWRkX3RyYWNlXCIsXG4gICAgXCJibGtfdHJhY2Vfc2V0dXBfcXVldWVcIixcbiAgICBcInJlY29yZF9ibGt0cmFjZV9ldmVudDJcIixcbiAgICBcInN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJsb2NrIHRyYWNlIHN1YnN5c3RlbSAoa2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMpLCBzcGVjaWZpY2FsbHkgaW4gX19ibGtfYWRkX3RyYWNlKCkgYW5kIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpLiBJdCBlbnN1cmVzIHRoYXQgdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB1bmNvbmRpdGlvbmFsbHkgdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGxheW91dCwgZWxpbWluYXRpbmcgcG90ZW50aWFsIGJ1ZmZlciBtaXNtYXRjaGVzIGFuZCBvdXQtb2YtYm91bmRzIHJlYWRzLCBhbmQgaW5pdGlhbGl6ZXMgYnQtXFx1MDAzZXZlcnNpb24gZm9yIHN5c2ZzLWNvbmZpZ3VyZWQgcXVldWVzLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIGNvcmUgYmxvY2sgbGF5ZXIgdHJhY2luZyBsb2dpYyBhY2Nlc3NpYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0lPX1RSQUNFXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fYmxrX2FkZF90cmFjZVwiLFxuICAgIFwiYmxrX3RyYWNlX3NldHVwX3F1ZXVlXCIsXG4gICAgXCJyZWNvcmRfYmxrdHJhY2VfZXZlbnQyXCIsXG4gICAgXCJzeXNmc19ibGtfdHJhY2VfYXR0cl9zdG9yZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBibG9jayB0cmFjZSBzdWJzeXN0ZW0gKGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jKSwgc3BlY2lmaWNhbGx5IGluIF9fYmxrX2FkZF90cmFjZSgpIGFuZCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoKS4gSXQgZW5zdXJlcyB0aGF0IHRoZSBmdHJhY2UgcmluZyBidWZmZXIgdW5jb25kaXRpb25hbGx5IHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKSBsYXlvdXQsIGVsaW1pbmF0aW5nIHBvdGVudGlhbCBidWZmZXIgbWlzbWF0Y2hlcyBhbmQgb3V0LW9mLWJvdW5kcyByZWFkcywgYW5kIGluaXRpYWxpemVzIGJ0LVxcdTAwM2V2ZXJzaW9uIGZvciBzeXNmcy1jb25maWd1cmVkIHF1ZXVlcy4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBjb3JlIGJsb2NrIGxheWVyIHRyYWNpbmcgbG9naWMgYWNjZXNzaWJsZSB2aWEgc3lzZnMgYW5kIGJsb2NrIEkvTyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjQyLjkzNDI2ODg0OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA3MTIwNTQ4NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MTo0Mi45MzQ3MzY3OThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MDcxMTU4MDY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBmb3JtYXQgbWlzbWF0Y2ggYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgLyB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGZ0cmFjZSBibG9jayB0cmFjaW5nIHN1YnN5c3RlbSAoYmxrdHJhY2UpLiBQcmV2aW91c2x5LCBpZiBidC1cXHUwMDNldmVyc2lvbiB3YXMgMSBvciAwLCBfX2Jsa19hZGRfdHJhY2UoKSBjb3VsZCBhbGxvY2F0ZSBhbmQgd3JpdGUgYSBzbWFsbGVyIHYxIChibGtfaW9fdHJhY2UpIGV2ZW50IGludG8gdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB3aGlsZSBmdHJhY2UgY29uc3VtZXJzIHBhcnNlZCBlbnRyaWVzIHN0cmljdGx5IGFzIHYyIChibGtfaW9fdHJhY2UyKSwgcmVzdWx0aW5nIGluIHBkdV9zdGFydCgpIGluZGV4aW5nIG91dC1vZi1ib3VuZHMgYmV5b25kIHRoZSByZXNlcnZlZCBldmVudCBidWZmZXIuXFxuXFxuVGhpcyBjbGFzcyBvZiBidWcgKG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgdXNlLWFmdGVyLWZyZWUpIGlzIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgZnRyYWNlIHBhdGggdG8gdW5jb25kaXRpb25hbGx5IHJlY29yZCB2MiBldmVudHMgb2Ygc2l6ZSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuIGFuZCBpbml0aWFsaXplcyBidC1cXHUwMDNldmVyc2lvbiB0byAyIGluIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpICh3aGVyZSB0aGUgbWVtb3J5IGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGt6YWxsb2Nfb2JqKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2MWY3ODg3ZmZmYWFlNjViMTdmMTYxMWE5ZTBhZGU4NmExYTlkOWFmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgNSAwNTo1MTowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcbmluZGV4IDhjZDI1MjBiNGM5OWUuLmFlMDEwOTY5YzE0NDMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1xuKysrIGIva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcbkBAIC0zODUsNjYgKzM4NSwyNiBAQCBzdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxuIFx0aWYgKGJsa190cmFjZXIpIHtcbiBcdFx0YnVmZmVyID0gYmxrX3RyLVx1MDAzZWFycmF5X2J1ZmZlci5idWZmZXI7XG4gXHRcdHRyYWNlX2N0eCA9IHRyYWNpbmdfZ2VuX2N0eF9mbGFncygwKTtcbi1cdFx0c3dpdGNoIChidC1cdTAwM2V2ZXJzaW9uKSB7XG4tXHRcdGNhc2UgMTpcbi1cdFx0XHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZSk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgMjpcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIGZ0cmFjZSBhbHdheXMgdXNlcyB2MiAoYmxrX2lvX3RyYWNlMikgZm9ybWF0LlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogRm9yIHN5c2ZzLWVuYWJsZWQgdHJhY2luZyBwYXRoIChlbmFibGVkIHZpYVxuLVx0XHRcdCAqIC9zeXMvYmxvY2svREVWL3RyYWNlL2VuYWJsZSksIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpXG4tXHRcdFx0ICogbmV2ZXIgaW5pdGlhbGl6ZXMgYnQtXHUwMDNldmVyc2lvbiwgbGVhdmluZyBpdCAwIGZyb21cbi1cdFx0XHQgKiBremFsbG9jKCkuIFdlIG11c3QgaGFuZGxlIHZlcnNpb249PTAgc2FmZWx5IGhlcmUuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCB0byBlbnN1cmUgd2UgbmV2ZXIgaGl0IHRoZVxuLVx0XHRcdCAqIG9sZCBidWcgd2hlcmUgZGVmYXVsdCBzZXQgdHJhY2VfbGVuPTAsIGNhdXNpbmdcbi1cdFx0XHQgKiBidWZmZXIgdW5kZXJmbG93IGFuZCBtZW1vcnkgY29ycnVwdGlvbi5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIEFsd2F5cyB1c2UgdjIgZm9ybWF0IGZvciBmdHJhY2UgYW5kIG5vcm1hbGl6ZVxuLVx0XHRcdCAqIGJ0LVx1MDAzZXZlcnNpb24gdG8gMiB3aGVuIHVuaW5pdGlhbGl6ZWQuXG4tXHRcdFx0ICovXG4tXHRcdFx0dHJhY2VfbGVuID0gc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKTtcbi1cdFx0XHRpZiAoYnQtXHUwMDNldmVyc2lvbiA9PSAwKVxuLVx0XHRcdFx0YnQtXHUwMDNldmVyc2lvbiA9IDI7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cdFx0dHJhY2VfbGVuICs9IHBkdV9sZW4gKyBjZ2lkX2xlbjtcbitcdFx0LypcbitcdFx0ICogVGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciBhbHdheXMgdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpXG4rXHRcdCAqIGZvcm1hdDsgdGhlIGZ0cmFjZSByZWFkZXJzIHBhcnNlIG9ubHkgdGhhdC4gYnQtXHUwMDNldmVyc2lvblxuK1x0XHQgKiBkZXNjcmliZXMganVzdCB0aGUgcmVsYXkvY2xhc3NpYyBibGt0cmFjZSByZWNvcmQgZm9ybWF0LlxuK1x0XHQgKiBSZWNvcmRpbmcgYSB2MS1zaXplZCBldmVudCBoZXJlIHdvdWxkIHNoaWZ0IHBkdV9zdGFydCgpIDE2XG4rXHRcdCAqIGJ5dGVzIHBhc3QgdGhlIFBEVSBhbmQgbWFrZSBibGtfbG9nX3JlbWFwKCkgcmVhZCBwYXN0IHRoZVxuK1x0XHQgKiBldmVudCAoYSB1c2UtYWZ0ZXItZnJlZSBvbiBjb25jdXJyZW50IGJ1ZmZlciByZXNpemUpLCBhbmQgdjFcbitcdFx0ICogY2Fubm90IHJlcHJlc2VudCB0aGUgbmV3ZXIgNjQtYml0IHpvbmUgYWN0aW9ucyBhbnl3YXkuXG4rXHRcdCAqL1xuK1x0XHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuO1xuIFx0XHRldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9CTEssXG4gXHRcdFx0XHRcdFx0ICB0cmFjZV9sZW4sIHRyYWNlX2N0eCk7XG4gXHRcdGlmICghZXZlbnQpXG4gXHRcdFx0cmV0dXJuO1xuIFxuIFx0XHR0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpO1xuLVx0XHRzd2l0Y2ggKGJ0LVx1MDAzZXZlcnNpb24pIHtcbi1cdFx0Y2FzZSAxOlxuLVx0XHRcdHJlY29yZF9ibGt0cmFjZV9ldmVudChyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcbi1cdFx0XHRcdFx0ICAgICAgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsXG4tXHRcdFx0XHRcdCAgICAgIHdoYXQsIGJ0LVx1MDAzZWRldiwgZXJyb3IsIGNnaWQsIGNnaWRfbGVuLFxuLVx0XHRcdFx0XHQgICAgICBwZHVfZGF0YSwgcGR1X2xlbik7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgMjpcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIFVzZSB2MiByZWNvcmRpbmcgZnVuY3Rpb24gKHJlY29yZF9ibGt0cmFjZV9ldmVudDIpXG4tXHRcdFx0ICogd2hpY2ggd3JpdGVzIGJsa19pb190cmFjZTIgc3RydWN0dXJlIHdpdGggY29ycmVjdFxuLVx0XHRcdCAqIGZpZWxkIGxheW91dDpcbi1cdFx0XHQgKiAgIC0gMzItYml0IHBpZCBhdCBvZmZzZXQgMjhcbi1cdFx0XHQgKiAgIC0gNjQtYml0IGFjdGlvbiBhdCBvZmZzZXQgMzJcbi1cdFx0XHQgKlxuLVx0XHRcdCAqIEZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IGhhbmRsZXMgdmVyc2lvbj09MCBjYXNlXG4tXHRcdFx0ICogKGZyb20gc3lzZnMgcGF0aCksIGVuc3VyaW5nIHdlIGFsd2F5cyB1c2UgY29ycmVjdFxuLVx0XHRcdCAqIHYyIHJlY29yZGluZyBmdW5jdGlvbiB0byBtYXRjaCB0aGUgdjIgYnVmZmVyXG4tXHRcdFx0ICogYWxsb2NhdGVkIGFib3ZlLlxuLVx0XHRcdCAqL1xuLVx0XHRcdHJlY29yZF9ibGt0cmFjZV9ldmVudDIocmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCksXG4tXHRcdFx0XHRcdCAgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcbi1cdFx0XHRcdFx0ICAgICAgIHdoYXQsIGJ0LVx1MDAzZWRldiwgZXJyb3IsIGNnaWQsIGNnaWRfbGVuLFxuLVx0XHRcdFx0XHQgICAgICAgcGR1X2RhdGEsIHBkdV9sZW4pO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4rXHRcdHJlY29yZF9ibGt0cmFjZV9ldmVudDIocmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCksXG4rXHRcdFx0XHQgICAgICAgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsXG4rXHRcdFx0XHQgICAgICAgd2hhdCwgYnQtXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXG4rXHRcdFx0XHQgICAgICAgcGR1X2RhdGEsIHBkdV9sZW4pO1xuIFxuIFx0XHR0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChibGtfdHIsIGJ1ZmZlciwgZXZlbnQsIHRyYWNlX2N0eCk7XG4gXHRcdHJldHVybjtcbkBAIC0xOTEzLDYgKzE4NzMsMTIgQEAgc3RhdGljIGludCBibGtfdHJhY2Vfc2V0dXBfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXG4gXG4gXHRidC1cdTAwM2VkZXYgPSBiZGV2LVx1MDAzZWJkX2RldjtcbiBcdGJ0LVx1MDAzZWFjdF9tYXNrID0gKHUxNiktMTtcbitcdC8qXG4rXHQgKiBUaGlzIHN5c2ZzLWVuYWJsZWQgcGF0aCBmZWVkcyB0aGUgZnRyYWNlIGJsayB0cmFjZXIsIHdoaWNoIGFsd2F5c1xuK1x0ICogdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC4gSW5pdGlhbGl6ZSB0aGUgdmVyc2lvbiBzbyBpdCBpc1xuK1x0ICogbmV2ZXIgbGVmdCBkYW5nbGluZyBhcyAwIGZvciBmdXR1cmUgY29uc3VtZXJzLlxuK1x0ICovXG4rXHRidC1cdTAwM2V2ZXJzaW9uID0gMjtcbiBcbiBcdGJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTE6NDIuOTM0NzM3ODQ5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNTQxNTk0NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYmxrdHJhY2UgUGF0Y2ggZm9yIEZ1enppbmcgTmVlZHMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB0aGUgZnV6emluZyBzdHJhdGVneS4gTXkgZ3V0IGZlZWxpbmcgaXMgd2UgbWlnaHQgbmVlZCB0byBjb25zaWRlciBLTVNBTiBoZXJlLCBidXQgbGV0J3MgYmUgbWV0aG9kaWNhbC5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuIFRoZSBkaWZmIHRvdWNoZXMgYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYCwgc3BlY2lmaWNhbGx5IGBfX2Jsa19hZGRfdHJhY2VgLiBQcmV2aW91c2x5LCBpdCBzZWVtcyB3ZSBoYWQgYSB2ZXJzaW9uIGNoZWNrIChgYnQtXHUwMDNldmVyc2lvbmApIHdpdGggYSBzd2l0Y2gtY2FzZSB0byBoYW5kbGUgZWl0aGVyIGByZWNvcmRfYmxrdHJhY2VfZXZlbnRgICh2ZXJzaW9uIDEpIG9yIGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyYCAodmVyc2lvbiAyKSwgZGV0ZXJtaW5pbmcgYHRyYWNlX2xlbmAgYWNjb3JkaW5nbHkuIE5vdywgdGhlIHBhdGNoIHVuY29uZGl0aW9uYWxseSB1c2VzIGBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuYCBhbmQgY2FsbHMgYHJlY29yZF9ibGt0cmFjZV9ldmVudDJgLiBJbnRlcmVzdGluZy4gQWxzbywgYGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpYCBub3cgZXhwbGljaXRseSBzZXRzIGBidC1cdTAwM2V2ZXJzaW9uID0gMmAgd2hlbiBgYnRgIGlzIGFsbG9jYXRlZCB2aWEgYGt6YWxsb2NgLlxuXG5UaGlzIGlzIHdoZXJlIEknbSBzdGFydGluZyB0byBnZXQgYSBiaXQgY29uY2VybmVkIGFib3V0IHBvdGVudGlhbCB1bmRlcmZsb3dzIG9yIG92ZXJmbG93cy4gVGhlIGhhcmRjb2Rpbmcgb2YgdmVyc2lvbiAyIGFuZCB0aGUgZGlyZWN0IHVzZSBvZiBgc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKWAgd2l0aG91dCBhbnkgY29uZGl0aW9uYWwgY2hlY2tzIHJhaXNlcyBmbGFncy4gSSBuZWVkIHRvIHNlZSBob3cgYHJlY29yZF9ibGt0cmFjZV9ldmVudDJgIGFuZCBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50YCBhcmUgZGVmaW5lZCBhbmQgaG93IHRoZXkgaGFuZGxlIHRoZSBkYXRhLiBJJ2xsIG5lZWQgdG8gdXNlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBpbnNwZWN0IHRob3NlIGZ1bmN0aW9ucyBpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgIG5vdy4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGhvdyB0aGF0IHNpemUgY2FsY3VsYXRpb24gaXMgdXNlZCBhbmQgaWYgdGhlcmUgbWlnaHQgYmUgb3Bwb3J0dW5pdGllcyBmb3Igb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGluY2x1c2lvbiBvZiBgcGR1X2xlbmAgYW5kIGBjZ2lkX2xlbmAuIEJhc2VkIG9uIHdoYXQgSSBzZWUgaW4gdGhvc2UgZnVuY3Rpb25zLCBJIGNhbiB0aGVuIGRlY2lkZSB3aGV0aGVyIEtBU0FOL3N0YW5kYXJkIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCBvciBpZiBLTVNBTiBmdXp6aW5nIGlzIG5lY2Vzc2FyeSB0byBjYXRjaCBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gYnVncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE0NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjU0LjQ3NjMzNTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODc4NjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY29yZF9ibGt0cmFjZV9ldmVudFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvdHJhY2UvYmxrdHJhY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz02ND1zdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy02NS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo2NjpzdGF0aWMgdm9pZCByZWNvcmRfYmxrdHJhY2VfZXZlbnQoc3RydWN0IGJsa19pb190cmFjZSAqdCwgcGlkX3QgcGlkLCBpbnQgY3B1LFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY3LVxcdFxcdFxcdFxcdCAgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsIHU2NCB3aGF0LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtOTMtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTQ6c3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDIsIHBpZF90IHBpZCwgaW50IGNwdSxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NS1cXHRcXHRcXHRcXHQgICBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywgdTY0IHdoYXQsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMTY9c3RhdGljIHZvaWQgcmVsYXlfYmxrdHJhY2VfZXZlbnQxKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTMxLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEzMjpcXHRyZWNvcmRfYmxrdHJhY2VfZXZlbnQodCwgcGlkLCBjcHUsIHNlY3RvciwgYnl0ZXMsIHdoYXQsIGJ0LVxcdTAwM2VkZXYsIGVycm9yLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEzMy1cXHRcXHRcXHQgICAgICBjZ2lkLCBjZ2lkX2xlbiwgcGR1X2RhdGEsIHBkdV9sZW4pO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTM2PXN0YXRpYyB2b2lkIHJlbGF5X2Jsa3RyYWNlX2V2ZW50MihzdHJ1Y3QgYmxrX3RyYWNlICpidCwgdW5zaWduZWQgbG9uZyBzZXF1ZW5jZSxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE1MS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNTI6XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50Mih0LCBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcywgd2hhdCwgYnQtXFx1MDAzZWRldiwgZXJyb3IsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTUzLVxcdFxcdFxcdCAgICAgICBjZ2lkLCBjZ2lkX2xlbiwgcGR1X2RhdGEsIHBkdV9sZW4pO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTczPXN0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgdTY0IGFjdGlvbixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE5NC1cXHRcXHR0ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTk1OlxcdFxcdHJlY29yZF9ibGt0cmFjZV9ldmVudDIodCwgcGlkLCBjcHUsIDAsIDAsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTk2LVxcdFxcdFxcdFxcdCAgICAgICBhY3Rpb24sIGJ0LVxcdTAwM2VkZXYsIDAsIGNnaWQsIGNnaWRfbGVuLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MzEwPXN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00MDMtXFx0XFx0dHJhY2luZ19yZWNvcmRfY21kbGluZShjdXJyZW50KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0MDQ6XFx0XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00MDUtXFx0XFx0XFx0XFx0ICAgICAgIHBpZCwgY3B1LCBzZWN0b3IsIGJ5dGVzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MTo1NC41NTAyMjAyMDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ1MzA2NzYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQmxrdHJhY2UgRXZlbnQgUmVjb3JkaW5nKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBibGt0cmFjZSBldmVudHMgYXJlIGFjdHVhbGx5IGNhcHR1cmVkIGFuZCBsb2dnZWQsIHNvIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgY29yZSBmdW5jdGlvbnM6IGByZWNvcmRfYmxrdHJhY2VfZXZlbnQyYCwgYHJlY29yZF9ibGt0cmFjZV9ldmVudGAsIGFuZCBhbnl0aGluZyByZWxhdGVkIHRvIGBfX2Jsa19hZGRfdHJhY2VgLiBJJ20gZXhwZWN0aW5nIHNvbWUgY2xldmVyIHVzZSBvZiBwZXItY3B1IGJ1ZmZlcnMgb3IgcmluZyBidWZmZXJzLCBsaWtlbHkgd2l0aCBjYXJlZnVsIGF0dGVudGlvbiB0byBsb2NraW5nIGFuZCBtZW1vcnkgYmFycmllcnMgdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5LCBlc3BlY2lhbGx5IGR1cmluZyBoaWdoIEkvTyBsb2Fkcy4gSSdsbCBiZSBsb29raW5nIGZvciB3aGVyZSB0aGUgYWN0dWFsIHRpbWVzdGFtcGluZyBoYXBwZW5zIOKAkyBpcyBpdCBoYXJkd2FyZS1iYXNlZCBvciBzb2Z0d2FyZS1iYXNlZCwgYW5kIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGFjY3VyYWN5PyBGdXJ0aGVybW9yZSwgSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3M7IGhvdyBtdWNoIG92ZXJoZWFkIGRvZXMgdGhpcyB0cmFjaW5nIGFkZCB0byByZWd1bGFyIGJsb2NrIEkvTyBvcGVyYXRpb25zPyBBcmUgdGhlcmUgYW55IG9wdGltaXphdGlvbnMgYmFzZWQgb24gdGhlIHR5cGUgb2YgZXZlbnQgYmVpbmcgdHJhY2VkPyBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3MgdG8gaGFuZGxlIGV2ZW50IGZpbHRlcmluZyBvciByYXRlIGxpbWl0aW5nIHRvIGF2b2lkIG92ZXJ3aGVsbWluZyB0aGUgc3lzdGVtPyBJIHdpbGwgYWxzbyBiZSBjdXJpb3VzIGFib3V0IGhvdyB0aGUgYWN0dWFsIHRyYWNlIGRhdGEgZ2V0cyBjb25zdW1lZCBhbmQgc3RvcmVkLCBob3cgbXVjaCBjb250ZXh0IGlzIGluY2x1ZGVkIHdpdGggZWFjaCBldmVudCwgYW5kIGhvdyB0aGUgdHJhY2UgYnVmZmVyIGlzIG1hbmFnZWQuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcHJvYmxlbXMpIGxpZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU5OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjU3LjAwMzI5MDk5OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzkzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNjA6XFx0c3RhdGljIERFRklORV9NVVRFWChibGtfcHJvYmVfbXV0ZXgpO1xcbiAgNjE6XFx0c3RhdGljIGludCBibGtfcHJvYmVzX3JlZjtcXG4gIDYyOlxcdFxcbiAgNjM6XFx0c3RhdGljIHZvaWQgYmxrX3JlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpO1xcbiAgNjQ6XFx0c3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCk7XFxuICA2NTpcXHRcXG4gIDY2OlxcdHN0YXRpYyB2b2lkIHJlY29yZF9ibGt0cmFjZV9ldmVudChzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0LCBwaWRfdCBwaWQsIGludCBjcHUsXFxuICA2NzpcXHRcXHRcXHRcXHRcXHQgIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLCB1NjQgd2hhdCxcXG4gIDY4OlxcdFxcdFxcdFxcdFxcdCAgZGV2X3QgZGV2LCBpbnQgZXJyb3IsIHU2NCBjZ2lkLFxcbiAgNjk6XFx0XFx0XFx0XFx0XFx0ICBzc2l6ZV90IGNnaWRfbGVuLCB2b2lkICpwZHVfZGF0YSwgaW50IHBkdV9sZW4pXFxuICA3MDpcXHRcXG4gIDcxOlxcdHtcXG4gIDcyOlxcdFxcdC8qXFxuICA3MzpcXHRcXHQgKiBUaGVzZSB0d28gYXJlIG5vdCBuZWVkZWQgaW4gZnRyYWNlIGFzIHRoZXkgYXJlIGluIHRoZVxcbiAgNzQ6XFx0XFx0ICogZ2VuZXJpYyB0cmFjZV9lbnRyeSwgZmlsbGVkIGJ5IHRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUsXFxuICA3NTpcXHRcXHQgKiBidXQgZm9yIHRoZSB0cmFjZV9ldmVudC1cXHUwMDNlYmluKCkgc3ludGhlc2l6ZXIgYmVuZWZpdCB3ZSBkbyBpdFxcbiAgNzY6XFx0XFx0ICogaGVyZSB0b28uXFxuICA3NzpcXHRcXHQgKi9cXG4gIDc4OlxcdFxcdHQtXFx1MDAzZWNwdSA9IGNwdTtcXG4gIDc5OlxcdFxcdHQtXFx1MDAzZXBpZCA9IHBpZDtcXG4gIDgwOlxcdFxcbiAgODE6XFx0XFx0dC1cXHUwMDNlc2VjdG9yID0gc2VjdG9yO1xcbiAgODI6XFx0XFx0dC1cXHUwMDNlYnl0ZXMgPSBieXRlcztcXG4gIDgzOlxcdFxcdHQtXFx1MDAzZWFjdGlvbiA9IGxvd2VyXzMyX2JpdHMod2hhdCk7XFxuICA4NDpcXHRcXHR0LVxcdTAwM2VkZXZpY2UgPSBkZXY7XFxuICA4NTpcXHRcXHR0LVxcdTAwM2VlcnJvciA9IGVycm9yO1xcbiAgODY6XFx0XFx0dC1cXHUwMDNlcGR1X2xlbiA9IHBkdV9sZW4gKyBjZ2lkX2xlbjtcXG4gIDg3OlxcdFxcbiAgODg6XFx0XFx0aWYgKGNnaWRfbGVuKVxcbiAgODk6XFx0XFx0XFx0bWVtY3B5KCh2b2lkICopdCArIHNpemVvZigqdCksIFxcdTAwMjZjZ2lkLCBjZ2lkX2xlbik7XFxuICA5MDpcXHRcXHRpZiAocGR1X2xlbilcXG4gIDkxOlxcdFxcdFxcdG1lbWNweSgodm9pZCAqKXQgKyBzaXplb2YoKnQpICsgY2dpZF9sZW4sIHBkdV9kYXRhLCBwZHVfbGVuKTtcXG4gIDkyOlxcdH1cXG4gIDkzOlxcdFxcbiAgOTQ6XFx0c3RhdGljIHZvaWQgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDIsIHBpZF90IHBpZCwgaW50IGNwdSxcXG4gIDk1OlxcdFxcdFxcdFxcdFxcdCAgIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLCB1NjQgd2hhdCxcXG4gIDk2OlxcdFxcdFxcdFxcdFxcdCAgIGRldl90IGRldiwgaW50IGVycm9yLCB1NjQgY2dpZCxcXG4gIDk3OlxcdFxcdFxcdFxcdFxcdCAgIHNzaXplX3QgY2dpZF9sZW4sIHZvaWQgKnBkdV9kYXRhLFxcbiAgOTg6XFx0XFx0XFx0XFx0XFx0ICAgaW50IHBkdV9sZW4pXFxuICA5OTpcXHR7XFxuIDEwMDpcXHRcXHR0Mi1cXHUwMDNlcGlkID0gcGlkO1xcbiAxMDE6XFx0XFx0dDItXFx1MDAzZWNwdSA9IGNwdTtcXG4gMTAyOlxcdFxcbiAxMDM6XFx0XFx0dDItXFx1MDAzZXNlY3RvciA9IHNlY3RvcjtcXG4gMTA0OlxcdFxcdHQyLVxcdTAwM2VieXRlcyA9IGJ5dGVzO1xcbiAxMDU6XFx0XFx0dDItXFx1MDAzZWFjdGlvbiA9IHdoYXQ7XFxuIDEwNjpcXHRcXHR0Mi1cXHUwMDNlZGV2aWNlID0gZGV2O1xcbiAxMDc6XFx0XFx0dDItXFx1MDAzZWVycm9yID0gZXJyb3I7XFxuIDEwODpcXHRcXHR0Mi1cXHUwMDNlcGR1X2xlbiA9IHBkdV9sZW4gKyBjZ2lkX2xlbjtcXG4gMTA5OlxcdFxcbiAxMTA6XFx0XFx0aWYgKGNnaWRfbGVuKVxcbiAxMTE6XFx0XFx0XFx0bWVtY3B5KCh2b2lkICopdDIgKyBzaXplb2YoKnQyKSwgXFx1MDAyNmNnaWQsIGNnaWRfbGVuKTtcXG4gMTEyOlxcdFxcdGlmIChwZHVfbGVuKVxcbiAxMTM6XFx0XFx0XFx0bWVtY3B5KCh2b2lkICopdDIgKyBzaXplb2YoKnQyKSArIGNnaWRfbGVuLCBwZHVfZGF0YSwgcGR1X2xlbik7XFxuIDExNDpcXHR9XFxuIDExNTpcXHRcXG4gMTE2OlxcdHN0YXRpYyB2b2lkIHJlbGF5X2Jsa3RyYWNlX2V2ZW50MShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgdW5zaWduZWQgbG9uZyBzZXF1ZW5jZSxcXG4gMTE3OlxcdFxcdFxcdFxcdFxcdCBwaWRfdCBwaWQsIGludCBjcHUsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxcbiAxMTg6XFx0XFx0XFx0XFx0XFx0IHU2NCB3aGF0LCBpbnQgZXJyb3IsIHU2NCBjZ2lkLFxcbiAxMTk6XFx0XFx0XFx0XFx0XFx0IHNzaXplX3QgY2dpZF9sZW4sIHZvaWQgKnBkdV9kYXRhLCBpbnQgcGR1X2xlbilcXG4gMTIwOlxcdHtcXG4gMTIxOlxcdFxcdHN0cnVjdCBibGtfaW9fdHJhY2UgKnQ7XFxuIDEyMjpcXHRcXHRzaXplX3QgdHJhY2VfbGVuID0gc2l6ZW9mKCp0KSArIHBkdV9sZW4gKyBjZ2lkX2xlbjtcXG4gMTIzOlxcdFxcbiAxMjQ6XFx0XFx0dCA9IHJlbGF5X3Jlc2VydmUoYnQtXFx1MDAzZXJjaGFuLCB0cmFjZV9sZW4pO1xcbiAxMjU6XFx0XFx0aWYgKCF0KVxcbiAxMjY6XFx0XFx0XFx0cmV0dXJuO1xcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHR0LVxcdTAwM2VtYWdpYyA9IEJMS19JT19UUkFDRV9NQUdJQyB8IEJMS19JT19UUkFDRV9WRVJTSU9OO1xcbiAxMjk6XFx0XFx0dC1cXHUwMDNlc2VxdWVuY2UgPSBzZXF1ZW5jZTtcXG4gMTMwOlxcdFxcdHQtXFx1MDAzZXRpbWUgPSBrdGltZV90b19ucyhrdGltZV9nZXQoKSk7XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdHJlY29yZF9ibGt0cmFjZV9ldmVudCh0LCBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcywgd2hhdCwgYnQtXFx1MDAzZWRldiwgZXJyb3IsXFxuIDEzMzpcXHRcXHRcXHRcXHQgICAgICBjZ2lkLCBjZ2lkX2xlbiwgcGR1X2RhdGEsIHBkdV9sZW4pO1xcbiAxMzQ6XFx0fVxcbiAxMzU6XFx0XFxuIDEzNjpcXHRzdGF0aWMgdm9pZCByZWxheV9ibGt0cmFjZV9ldmVudDIoc3RydWN0IGJsa190cmFjZSAqYnQsIHVuc2lnbmVkIGxvbmcgc2VxdWVuY2UsXFxuIDEzNzpcXHRcXHRcXHRcXHRcXHQgIHBpZF90IHBpZCwgaW50IGNwdSwgc2VjdG9yX3Qgc2VjdG9yLFxcbiAxMzg6XFx0XFx0XFx0XFx0XFx0ICBpbnQgYnl0ZXMsIHU2NCB3aGF0LCBpbnQgZXJyb3IsIHU2NCBjZ2lkLFxcbiAxMzk6XFx0XFx0XFx0XFx0XFx0ICBzc2l6ZV90IGNnaWRfbGVuLCB2b2lkICpwZHVfZGF0YSwgaW50IHBkdV9sZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUxOjU3LjAwMzQ3MzkzOVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzUzODQ1MzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEJsa3RyYWNlIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaC4gVGhlIGNvbW1pdCBjb21tZW50IHNheXMgaXQncyBhYm91dCBhbiBmdHJhY2UgcmluZyBidWZmZXIgaXNzdWUuIFRoZSBjb3JlIHNlZW1zIHRvIGJlIHRoYXQgYGJsa19pb190cmFjZTJgIGlzIHRoZSBvbmx5IGZvcm1hdCB0aGUgZnRyYWNlIHJlYWRlcnMgYXJlIGV4cGVjdGluZywgYnV0IHRoZXJlIHdhcyBhIG1pc21hdGNoIGluIGhvdyB0aGUgdmVyc2lvbiB3YXMgYmVpbmcgaGFuZGxlZC4gQXBwYXJlbnRseSwgYGJ0LVx1MDAzZXZlcnNpb25gIHdhcyBkZXNjcmliaW5nIHRoZSAqcmVsYXkvY2xhc3NpYyogYmxrdHJhY2UgZm9ybWF0LCBub3QgdGhlIGZ0cmFjZSBvbmUuIFRoZSBjb21tZW50IHNwZWNpZmljYWxseSBtZW50aW9ucyBhbiBpc3N1ZSB3aXRoIHJlY29yZGluZyBhIHYxLXNpemVkIGV2ZW50IHdoaWNoIHdvdWxkIGNhdXNlIGEgYHBkdV9zdGFydCgpYCBvZmZzZXQgZXJyb3IsIGxlYWRpbmcgdG8gYSBgYmxrX2xvZ19yZW1hcCgpYCBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIHBvc3NpYmxlIHVzZS1hZnRlci1mcmVlLCBlc3BlY2lhbGx5IGlmIHRoZSBidWZmZXIgZ2V0cyByZXNpemVkIGNvbmN1cnJlbnRseS4gQW5kLCBpdCBtZW50aW9ucyB0aGF0IHYxIGFsc28gY2FuJ3QgcmVwcmVzZW50IHRoZSBuZXdlciA2NC1iaXQgem9uZSBhY3Rpb25zLlxuXG5TbywgSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyBgYmxrX2lvX3RyYWNlYCBhbmQgYGJsa19pb190cmFjZTJgIGFyZSBkZWZpbmVkIGFuZCBob3cgdGhleSBhcmUgdXNlZC4gVGhlIGtleSBpcyBpbiB0aGUgc3RydWN0dXJlcywgdGhlIHN0cnVjdHVyZXMuIExldCdzIGZpbmQgdGhvc2Ugc3RydWN0dXJlIGRlZmluaXRpb25zIGFuZCB0cmFjZSB0aGVpciB1c2FnZSB0byBnZXQgYSBjb25jcmV0ZSBncmFzcCBvZiBob3cgdGhpcyBpcyBhbGwgc3VwcG9zZWQgdG8gd29yayBhbmQgd2hhdCB3ZW50IHdyb25nIGluIHRoaXMgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUyOjAwLjc1NzMyMzU4N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyODIxMTI3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYmxrX2lvX3RyYWNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9ibGt0cmFjZV9hcGkuaD03NT1lbnVtIGJsa3RyYWNlX25vdGlmeSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmgtMTIwLSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9ibGt0cmFjZV9hcGkuaDoxMjE6c3RydWN0IGJsa19pb190cmFjZSB7XFxuaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3RyYWNlX2FwaS5oLTEyMi1cXHRfX3UzMiBtYWdpYztcXHRcXHQvKiBNQUdJQyBcXHUwMDNjXFx1MDAzYyA4IHwgdmVyc2lvbiAqL1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3RyYWNlX2FwaS5oLTEzNS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmg6MTM2OnN0cnVjdCBibGtfaW9fdHJhY2UyIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmgtMTM3LVxcdF9fdTMyIG1hZ2ljO1xcdFxcdC8qIE1BR0lDIFxcdTAwM2NcXHUwMDNjIDggfCBCTEtfSU9fVFJBQ0UyX1ZFUlNJT04gKi9cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9ibGt0cmFjZV9hcGkuaC0xNTMtICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3RyYWNlX2FwaS5oOjE1NDpzdHJ1Y3QgYmxrX2lvX3RyYWNlX3JlbWFwIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvYmxrdHJhY2VfYXBpLmgtMTU1LVxcdF9fYmUzMiBkZXZpY2VfZnJvbTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTY0PXN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY1LVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjY2OnN0YXRpYyB2b2lkIHJlY29yZF9ibGt0cmFjZV9ldmVudChzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0LCBwaWRfdCBwaWQsIGludCBjcHUsXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNjctXFx0XFx0XFx0XFx0ICBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywgdTY0IHdoYXQsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05My1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo5NDpzdGF0aWMgdm9pZCByZWNvcmRfYmxrdHJhY2VfZXZlbnQyKHN0cnVjdCBibGtfaW9fdHJhY2UyICp0MiwgcGlkX3QgcGlkLCBpbnQgY3B1LFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTk1LVxcdFxcdFxcdFxcdCAgIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLCB1NjQgd2hhdCxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExNj1zdGF0aWMgdm9pZCByZWxheV9ibGt0cmFjZV9ldmVudDEoc3RydWN0IGJsa190cmFjZSAqYnQsIHVuc2lnbmVkIGxvbmcgc2VxdWVuY2UsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjAte1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEyMTpcXHRzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0O1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyMi1cXHRzaXplX3QgdHJhY2VfbGVuID0gc2l6ZW9mKCp0KSArIHBkdV9sZW4gKyBjZ2lkX2xlbjtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEzNj1zdGF0aWMgdm9pZCByZWxheV9ibGt0cmFjZV9ldmVudDIoc3RydWN0IGJsa190cmFjZSAqYnQsIHVuc2lnbmVkIGxvbmcgc2VxdWVuY2UsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNDAte1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE0MTpcXHRzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNDI6XFx0c2l6ZV90IHRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgKyBwZHVfbGVuICsgY2dpZF9sZW47XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQzLVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTczPXN0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgdTY0IGFjdGlvbixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4NC1cXHRpZiAoYmxrX3RyYWNlcikge1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4NTpcXHRcXHRzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODYtXFx0XFx0c2l6ZV90IHRyYWNlX2xlbiA9IHNpemVvZigqdCkgKyBjZ2lkX2xlbiArIGxlbjtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTMxMD1zdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzk2LVxcdFxcdCAqL1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjM5NzpcXHRcXHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTM5OC1cXHRcXHRldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9CTEssXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMTk5PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX3JlbWFwKHZvaWQgKmlnbm9yZSwgc3RydWN0IGJpbyAqYmlvLCBkZXZfdCBkZXYsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMjAzLVxcdHN0cnVjdCBibGtfdHJhY2UgKmJ0O1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEyMDQ6XFx0c3RydWN0IGJsa19pb190cmFjZV9yZW1hcCByO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyMDUtXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMjM2PXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfcmVtYXAodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGRldl90IGRldixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEyMzktXFx0c3RydWN0IGJsa190cmFjZSAqYnQ7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTI0MDpcXHRzdHJ1Y3QgYmxrX2lvX3RyYWNlX3JlbWFwIHI7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTI0MS1cXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTEzMzI9c3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZClcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEzNTctLypcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMzU4OiAqIHN0cnVjdCBibGtfaW9fdHJhY2VyIGZvcm1hdHRpbmcgcm91dGluZXNcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMzU5LSAqL1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEzNjAtXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTM2MTpzdGF0aWMgdm9pZCBmaWxsX3J3YnMoY2hhciAqcndicywgY29uc3Qgc3RydWN0IGJsa19pb190cmFjZTIgKnQpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTM2Mi17XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMzk4PXN0YXRpYyBpbmxpbmVcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxMzk5OmNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UyICp0ZV9ibGtfaW9fdHJhY2UoY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQwMC17XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTQwMTpcXHRyZXR1cm4gKGNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UyICopZW50O1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE0MDItfVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTQ1Mz1zdGF0aWMgdm9pZCBibGtfbG9nX2FjdGlvbl9jbGFzc2ljKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQ1OS1cXHR1bnNpZ25lZCBzZWNzXFx0ICAgICAgID0gKHVuc2lnbmVkIGxvbmcpdHM7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTQ2MDpcXHRjb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdCA9IHRlX2Jsa19pb190cmFjZShpdGVyLVxcdTAwM2VlbnQpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE0NjEtXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNDcwPXN0YXRpYyB2b2lkIGJsa19sb2dfYWN0aW9uKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQ3My1cXHRjaGFyIHJ3YnNbUldCU19MRU5dO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE0NzQ6XFx0Y29uc3Qgc3RydWN0IGJsa19pb190cmFjZTIgKnQgPSB0ZV9ibGtfaW9fdHJhY2UoaXRlci1cXHUwMDNlZW50KTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNDc1LVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTU4Nz1zdGF0aWMgdm9pZCBibGtfbG9nX3JlbWFwKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50LCBib29sIGhhc19jZylcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNTg4LXtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNTg5OlxcdGNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2VfcmVtYXAgKl9fciA9IHBkdV9zdGFydChlbnQsIGhhc19jZyk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTU5MC1cXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTE2OTA9c3RhdGljIGVudW0gcHJpbnRfbGluZV90IHByaW50X29uZV9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE2OTQtXFx0c3RydWN0IHRyYWNlX3NlcSAqcyA9IFxcdTAwMjZpdGVyLVxcdTAwM2VzZXE7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTY5NTpcXHRjb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlMiAqdDtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNjk2LVxcdHUxNiB3aGF0O1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTcyOT1zdGF0aWMgdm9pZCBibGtfdHJhY2Vfc3ludGhlc2l6ZV9vbGRfdHJhY2Uoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKVxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTczMS1cXHRzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gXFx1MDAyNml0ZXItXFx1MDAzZXNlcTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNzMyOlxcdHN0cnVjdCBibGtfaW9fdHJhY2UyICp0ID0gKHN0cnVjdCBibGtfaW9fdHJhY2UyICopaXRlci1cXHUwMDNlZW50O1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3MzM6XFx0Y29uc3QgaW50IG9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBibGtfaW9fdHJhY2UyLCBzZWN0b3IpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3MzQ6XFx0c3RydWN0IGJsa19pb190cmFjZSBvbGQgPSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTczNS1cXHRcXHQubWFnaWNcXHQgID0gQkxLX0lPX1RSQUNFX01BR0lDIHwgQkxLX0lPX1RSQUNFX1ZFUlNJT04sXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNzk5PXN0YXRpYyBpbnQgX19pbml0IF9faW5pdF9ibGtfdHJhY2VyKHZvaWQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODEzLVxcdFxcdCAgICAgX19hbGlnbm9mX18obG9uZykpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4MTQ6XFx0QlVJTERfQlVHX09OKF9fYWxpZ25vZl9fKHN0cnVjdCBibGtfaW9fdHJhY2UyKSAlIF9fYWxpZ25vZl9fKGxvbmcpKTtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xODE1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MjowMy4wODU1OTEzNDlaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAyMjIxOTMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipEaXZpbmcgaW50byBibGt0cmFjZV9hcGkuaCoqXG5cbk9rYXksIGxldCdzIHplcm8gaW4gb24gYGluY2x1ZGUvdWFwaS9saW51eC9ibGt0cmFjZV9hcGkuaGAsIHNwZWNpZmljYWxseSBzb21ld2hlcmUgaW4gdGhlIHZpY2luaXR5IG9mIGxpbmVzIDEyMCB0aHJvdWdoIDE1MC4gVGhhdCBzZWN0aW9uIGlzIHVzdWFsbHkgd2hlcmUgdGhleSBkZWZpbmUgc29tZSBvZiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgb3IgY29uc3RhbnRzIHRoYXQgZ292ZXJuIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgYmxvY2sgdHJhY2UgdG9vbCBhbmQgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBhcmVhLCBhcyBJJ3ZlIGJlZW4gd29ya2luZyBhdCBzdWNoIGEgaGlnaCBsZXZlbCBsYXRlbHkuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBhbnkgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSByZWNlbnRseSB0byB0aGUgZXZlbnQgZGVmaW5pdGlvbnMgb3IgZmxhZ3MgdGhlcmUuIEFueSBtb2RpZmljYXRpb24gdG8gdGhlc2Ugd2lsbCBuZWVkIHRvIGJlIGNhcmVmdWxseSBjb25zaWRlcmVkIGluIHJlbGF0aW9uIHRvIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyB0cmFjZSB0b29scyBhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyB3ZSdyZSBjb25zdW1pbmcuIFRoaXMgcGFydGljdWxhciBwb3J0aW9uIG9mIHRoZSBoZWFkZXIgaXMgYSBjcml0aWNhbCBwb2ludCBvZiBpbnRlcm9wZXJhYmlsaXR5LiBMZXQgbWUgZm9jdXMgb24gdGhpcyBzZWN0aW9uIGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBrZXJuZWwncyBibG9jayBsYXllciBldmVudCBoYW5kbGluZy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9ucyBpZiB0aGV5J3ZlIGNoYW5nZWQgdGhpbmdzIGF0IHRoaXMgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxMjMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MjowNS4xMDc4MTM4MjdaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzczNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2Jsa3RyYWNlX2FwaS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHQgKi9cXG4gMTIxOlxcdHN0cnVjdCBibGtfaW9fdHJhY2Uge1xcbiAxMjI6XFx0XFx0X191MzIgbWFnaWM7XFx0XFx0LyogTUFHSUMgXFx1MDAzY1xcdTAwM2MgOCB8IHZlcnNpb24gKi9cXG4gMTIzOlxcdFxcdF9fdTMyIHNlcXVlbmNlO1xcdFxcdC8qIGV2ZW50IG51bWJlciAqL1xcbiAxMjQ6XFx0XFx0X191NjQgdGltZTtcXHRcXHQvKiBpbiBuYW5vc2Vjb25kcyAqL1xcbiAxMjU6XFx0XFx0X191NjQgc2VjdG9yO1xcdFxcdC8qIGRpc2sgb2Zmc2V0ICovXFxuIDEyNjpcXHRcXHRfX3UzMiBieXRlcztcXHRcXHQvKiB0cmFuc2ZlciBsZW5ndGggKi9cXG4gMTI3OlxcdFxcdF9fdTMyIGFjdGlvbjtcXHRcXHQvKiB3aGF0IGhhcHBlbmVkICovXFxuIDEyODpcXHRcXHRfX3UzMiBwaWQ7XFx0XFx0Lyogd2hvIGRpZCBpdCAqL1xcbiAxMjk6XFx0XFx0X191MzIgZGV2aWNlO1xcdFxcdC8qIGRldmljZSBudW1iZXIgKi9cXG4gMTMwOlxcdFxcdF9fdTMyIGNwdTtcXHRcXHQvKiBvbiB3aGF0IGNwdSBkaWQgaXQgaGFwcGVuICovXFxuIDEzMTpcXHRcXHRfX3UxNiBlcnJvcjtcXHRcXHQvKiBjb21wbGV0aW9uIGVycm9yICovXFxuIDEzMjpcXHRcXHRfX3UxNiBwZHVfbGVuO1xcdFxcdC8qIGxlbmd0aCBvZiBkYXRhIGFmdGVyIHRoaXMgdHJhY2UgKi9cXG4gMTMzOlxcdFxcdC8qIGNncm91cCBpZCB3aWxsIGJlIHN0b3JlZCBoZXJlIGlmIGV4aXN0cyAqL1xcbiAxMzQ6XFx0fTtcXG4gMTM1OlxcdFxcbiAxMzY6XFx0c3RydWN0IGJsa19pb190cmFjZTIge1xcbiAxMzc6XFx0XFx0X191MzIgbWFnaWM7XFx0XFx0LyogTUFHSUMgXFx1MDAzY1xcdTAwM2MgOCB8IEJMS19JT19UUkFDRTJfVkVSU0lPTiAqL1xcbiAxMzg6XFx0XFx0X191MzIgc2VxdWVuY2U7XFx0XFx0LyogZXZlbnQgbnVtYmVyICovXFxuIDEzOTpcXHRcXHRfX3U2NCB0aW1lO1xcdFxcdC8qIGluIG5hbm9zZWNvbmRzICovXFxuIDE0MDpcXHRcXHRfX3U2NCBzZWN0b3I7XFx0XFx0LyogZGlzayBvZmZzZXQgKi9cXG4gMTQxOlxcdFxcdF9fdTMyIGJ5dGVzO1xcdFxcdC8qIHRyYW5zZmVyIGxlbmd0aCAqL1xcbiAxNDI6XFx0XFx0X191MzIgcGlkO1xcdFxcdC8qIHdobyBkaWQgaXQgKi9cXG4gMTQzOlxcdFxcdF9fdTY0IGFjdGlvbjtcXHRcXHQvKiB3aGF0IGhhcHBlbmVkICovXFxuIDE0NDpcXHRcXHRfX3UzMiBkZXZpY2U7XFx0XFx0LyogZGV2aWNlIG51bWJlciAqL1xcbiAxNDU6XFx0XFx0X191MzIgY3B1O1xcdFxcdC8qIG9uIHdoYXQgY3B1IGRpZCBpdCBoYXBwZW4gKi9cXG4gMTQ2OlxcdFxcdF9fdTE2IGVycm9yO1xcdFxcdC8qIGNvbXBsZXRpb24gZXJyb3IgKi9cXG4gMTQ3OlxcdFxcdF9fdTE2IHBkdV9sZW47XFx0XFx0LyogbGVuZ3RoIG9mIGRhdGEgYWZ0ZXIgdGhpcyB0cmFjZSAqL1xcbiAxNDg6XFx0XFx0X191OCBwYWRbMTJdO1xcbiAxNDk6XFx0XFx0LyogY2dyb3VwIGlkIHdpbGwgYmUgc3RvcmVkIGhlcmUgaWYgaXQgZXhpc3RzICovXFxuIDE1MDpcXHR9O1xcbiAxNTE6XFx0LypcXG4gMTUyOlxcdCAqIFRoZSByZW1hcCBldmVudFxcbiAxNTM6XFx0ICovXFxuIDE1NDpcXHRzdHJ1Y3QgYmxrX2lvX3RyYWNlX3JlbWFwIHtcXG4gMTU1OlxcdFxcdF9fYmUzMiBkZXZpY2VfZnJvbTtcXG4gMTU2OlxcdFxcdF9fYmUzMiBkZXZpY2VfdG87XFxuIDE1NzpcXHRcXHRfX2JlNjQgc2VjdG9yX2Zyb207XFxuIDE1ODpcXHR9O1xcbiAxNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUyOjA1LjEwNzg5NzE1NloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5Mzc2ODA1OTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRml4IGZvciBhIEJsay1UcmFjZXIgT3V0LW9mLUJvdW5kcyBSZWFkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzLCBcIldoYXQncyB0aGUgYmVmb3JlIGFuZCBhZnRlcj9cIiBGcm9tIHdoYXQgSSdtIHJlYWRpbmcsIGl0IGFwcGVhcnMgdGhlIGBibGtfdHJhY2VyYCAoZnRyYWNlJ3MgYmxvY2sgSS9PIHRyYWNpbmcpIGhhZCBhIHN1YnRsZSBidXQgY3JpdGljYWwgYnVnLiBJdCBpbnZvbHZlcyBob3cgZGF0YSBpcyB3cml0dGVuIHRvIGFuZCByZWFkIGZyb20gdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB1c2luZyBgc3RydWN0IGJsa19pb190cmFjZTJgLlxuXG5QcmV2aW91c2x5LCB0aGUgY29kZSB3YXMgaW5jb25zaXN0ZW50LiBXaGVuIGBidC1cdTAwM2V2ZXJzaW9uYCB3YXMgMSDigJMgd2hpY2ggY291bGQgaGFwcGVuIHVuZGVyIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgdXNpbmcgY2xhc3NpYyBibGt0cmFjZSBvciByZWxheSB3aXRoIHZlcnNpb24gMSDigJMgYF9fYmxrX2FkZF90cmFjZWAgYWxsb2NhdGVkIGJ1ZmZlciBzcGFjZSBmb3IgdGhlIG9sZGVyIGBzdHJ1Y3QgYmxrX2lvX3RyYWNlYCBwbHVzIHRoZSBQcm90b2NvbCBEYXRhIFVuaXQgKFBEVSkgbGVuZ3RoIGFuZCBDb250cm9sIEdyb3VwIElEIChDR0lEKSBsZW5ndGguIFRoZSBwcm9ibGVtLCB0aG91Z2gsIHdhcyB0aGF0IGl0IHRoZW4gKndyb3RlKiB1c2luZyBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50YCB3aGljaCB3cm90ZSB0aGUgKnNtYWxsZXIqIGBibGtfaW9fdHJhY2VgLiBXaGVuIGZ0cmFjZSB0aGVuIHdlbnQgdG8gKnJlYWQqIHRoZSBidWZmZXIsIGl0IGNhc3QgdGhlIGVudHJ5IHRvIGBzdHJ1Y3QgYmxrX2lvX3RyYWNlMmAgYW5kIGV4cGVjdGVkIHRoZSBQRFUgdG8gc3RhcnQgYXQgYSBsYXRlciBvZmZzZXQuIFRoYXQncyBhIGNsYXNzaWMgYnVmZmVyIG92ZXJmbG93IHNjZW5hcmlvLCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCBiZWNhdXNlIHRoZSByZWFkIGV4dGVuZGVkIHBhc3QgdGhlIGFsbG9jYXRlZCBtZW1vcnkuXG5cblRoZSBwYXRjaCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGFzIGEgZml4LiBJdCBpbnRyb2R1Y2VzIHR3byBrZXkgY2hhbmdlczpcblxuMS4gIFNpbmNlIHdlIGFyZSBpbiB0aGUgZnRyYWNlIGNvbnRleHQgKGBpZiAoYmxrX3RyYWNlcilgKSwgdGhlIGFsbG9jYXRpb24gc2l6ZSBub3cgKmFsd2F5cyogdXNlcyBgc2l6ZW9mKHN0cnVjdCBibGtfaW9fdHJhY2UyKSArIHBkdV9sZW4gKyBjZ2lkX2xlbmAgYW5kIHRoZSBkYXRhIGlzICphbHdheXMqIHdyaXR0ZW4gdXNpbmcgYHJlY29yZF9ibGt0cmFjZV9ldmVudDJgLiBTbywgY29uc2lzdGVuY3kgaXMgbm93IGd1YXJhbnRlZWQuXG4yLiAgYGJsa190cmFjZV9zZXR1cF9xdWV1ZWAgKHdoaWNoIGxpa2VseSBydW5zIGF0IHN5c3RlbSBpbml0aWFsaXphdGlvbiBvciB3aGVuIGEgdHJhY2UgaXMgZW5hYmxlZCkgbm93IGluaXRpYWxpemVzIGBidC1cdTAwM2V2ZXJzaW9uID0gMmAuIFRoaXMgZ3VhcmFudGVlcyB0aGUgdmVyc2lvbiBmbGFnIGlzIG5vIGxvbmdlciAxLlxuXG5Ob3csIGxldCdzIHF1aWNrbHkgc2NhbiBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIEtNU0FOLXJlbGV2YW50IGlzc3Vlcy4gTG9va2luZyBhdCBgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmAsIGl0IGFwcGVhcnMgdG8gY29weSBgY2dpZGAgYW5kIHRoZW4gYHBkdV9kYXRhYCBpbnRvIHRoZSBgdDJgIHN0cnVjdCBhdCB0aGUgY29ycmVjdCBvZmZzZXRzLiBgY2dpZF9sZW5gIGFuZCBgcGR1X2xlbmAgZGV0ZXJtaW5lIHRoZSBjb3B5IHNpemVzLCBzbyB0aGF0IHNlZW1zIG9rYXkuXG5cbkEgcXVlc3Rpb24gdGhhdCBjb21lcyB1cCB3aXRoIHRoaXMgaXMgcmVsYXRlZCB0byBob3cgdGhlIHJpbmcgYnVmZmVyIGFuZCB0cmFjZSBlbnRyaWVzIGFyZSBoYW5kbGVkIGluIGBmdHJhY2VgLiBXZSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgbWVtb3J5IGxheW91dCBpcyBjb3JyZWN0bHkgaGFuZGxlZCBpbiBgdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZWAuIEl0IGxvb2tzIGxpa2UgYHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmVgIGRvZXMgdGhlIHJlc2VydmF0aW9uIGluIHRoZSByaW5nIGJ1ZmZlci4gRnRyYWNlIHRoZW4gaW5pdGlhbGl6ZXMgdGhlIHJpbmcgYnVmZmVyIGVudHJ5IGhlYWRlciwgYW5kIGByaW5nX2J1ZmZlcl9ldmVudF9kYXRhYCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGF5bG9hZCwgd2hpY2ggc2hvdWxkIGJlIHRoZSBgc3RydWN0IGJsa19pb190cmFjZTJgLiBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGBzdHJ1Y3QgdHJhY2VfZW50cnlgIGFuZCBgc3RydWN0IGJsa19pb190cmFjZTJgIGluIHRoZSBjb250ZXh0IG9mIGBibGtfdHJhY2VyYC4gSG93IGlzIHRoZSB0cmFjZSBlbnRyeSBkZWZpbmVkIGJ5IGBibGtfdHJhY2VyYD8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlIG5leHQgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdWJ0bGUgYWxpZ25tZW50IG9yIHNpemUgZGlzY3JlcGFuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwOTEsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MjoxNC40ODQ3MDYxNDNaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMDgxMzk4NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVFJBQ0VfQkxLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oPTc9c3RydWN0IGlvY19ncTtcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaC04LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oOjk6I2lmICFkZWZpbmVkKF9UUkFDRV9CTEtfSU9DT1NUX0gpIHx8IGRlZmluZWQoVFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0Lmg6MTA6I2RlZmluZSBfVFJBQ0VfQkxLX0lPQ09TVF9IXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmgtMTEtXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9pb2Nvc3QuaD0xODE9VFJBQ0VfRVZFTlQoaW9jb3N0X2lvY2dfZm9yZ2l2ZV9kZWJ0LFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvaW9jb3N0LmgtMjIxLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oOjIyMjojZW5kaWYgLyogX1RSQUNFX0JMS19JT0NPU1RfSCAqL1xcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2lvY29zdC5oLTIyMy1cXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTM3PXN0YXRpYyBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfUkFXX1NQSU5MT0NLKHJ1bm5pbmdfdHJhY2VfbG9jayk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zOS0vKiBTZWxlY3QgYW4gYWx0ZXJuYXRpdmUsIG1pbmltYWxpc3RpYyBvdXRwdXQgdGhhbiB0aGUgb3JpZ2luYWwgb25lICovXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDA6I2RlZmluZSBUUkFDRV9CTEtfT1BUX0NMQVNTSUNcXHQweDFcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0MTojZGVmaW5lIFRSQUNFX0JMS19PUFRfQ0dST1VQXFx0MHgyXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDI6I2RlZmluZSBUUkFDRV9CTEtfT1BUX0NHTkFNRVxcdDB4NFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTQzLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTQ0PXN0YXRpYyBzdHJ1Y3QgdHJhY2VyX29wdCBibGtfdHJhY2VyX29wdHNbXSA9IHtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00NS1cXHQvKiBEZWZhdWx0IGRpc2FibGUgdGhlIG1pbmltYWxpc3RpYyBvdXRwdXQgKi9cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0NjpcXHR7IFRSQUNFUl9PUFQoYmxrX2NsYXNzaWMsIFRSQUNFX0JMS19PUFRfQ0xBU1NJQykgfSxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy00Ny0jaWZkZWYgQ09ORklHX0JMS19DR1JPVVBcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzo0ODpcXHR7IFRSQUNFUl9PUFQoYmxrX2Nncm91cCwgVFJBQ0VfQkxLX09QVF9DR1JPVVApIH0sXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6NDk6XFx0eyBUUkFDRVJfT1BUKGJsa19jZ25hbWUsIFRSQUNFX0JMS19PUFRfQ0dOQU1FKSB9LFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTUwLSNlbmRpZlxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTczPXN0YXRpYyB2b2lkIHRyYWNlX25vdGUoc3RydWN0IGJsa190cmFjZSAqYnQsIHBpZF90IHBpZCwgdTY0IGFjdGlvbixcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4OS1cXHRcXHR0cmFjZV9jdHggPSB0cmFjaW5nX2dlbl9jdHhfZmxhZ3MoMCk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTkwOlxcdFxcdGV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSyxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xOTEtXFx0XFx0XFx0XFx0XFx0XFx0ICB0cmFjZV9sZW4sIHRyYWNlX2N0eCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0yNDM9dm9pZCBfX2Jsa190cmFjZV9ub3RlX21lc3NhZ2Uoc3RydWN0IGJsa190cmFjZSAqYnQsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0yNjktI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MjcwOlxcdGlmIChjc3MgXFx1MDAyNlxcdTAwMjYgKGJsa190cmFjZXJfZmxhZ3MudmFsIFxcdTAwMjYgVFJBQ0VfQkxLX09QVF9DR1JPVVApKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTI3MS1cXHRcXHRjZ2lkID0gY2dyb3VwX2lkKGNzcy1cXHUwMDNlY2dyb3VwKTtcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTMxMD1zdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzk3LVxcdFxcdHRyYWNlX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgKyBwZHVfbGVuICsgY2dpZF9sZW47XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6Mzk4OlxcdFxcdGV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShidWZmZXIsIFRSQUNFX0JMSyxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zOTktXFx0XFx0XFx0XFx0XFx0XFx0ICB0cmFjZV9sZW4sIHRyYWNlX2N0eCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz05MzQ9c3RhdGljIHU2NCBibGtfdHJhY2VfYmlvX2dldF9jZ2lkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NDAtXFx0YnQgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHEtXFx1MDAzZWJsa190cmFjZSwgMSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6OTQxOlxcdGlmICghYnQgfHwgIShibGtfdHJhY2VyX2ZsYWdzLnZhbCBcXHUwMDI2IFRSQUNFX0JMS19PUFRfQ0dST1VQKSlcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy05NDItXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNDcwPXN0YXRpYyB2b2lkIGJsa19sb2dfYWN0aW9uKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQ3OS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNDgwOlxcdFxcdGlmIChibGtfdHJhY2VyX2ZsYWdzLnZhbCBcXHUwMDI2IFRSQUNFX0JMS19PUFRfQ0dOQU1FKSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTQ4MS1cXHRcXHRcXHRjaGFyIGJsa2NnX25hbWVfYnVmW05BTUVfTUFYICsgMV0gPSBcXFwiXFx1MDAzYy4uLlxcdTAwM2VcXFwiO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTYzOT1zdGF0aWMgdm9pZCBibGtfdHJhY2VyX3ByaW50X2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTY0MC17XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTY0MTpcXHRpZiAoIShibGtfdHJhY2VyX2ZsYWdzLnZhbCBcXHUwMDI2IFRSQUNFX0JMS19PUFRfQ0xBU1NJQykpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTY0Mi1cXHRcXHRyZXR1cm47XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNzUzPXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBibGtfdHJhY2VyX3ByaW50X2xpbmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE3NTQte1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3NTU6XFx0aWYgKChpdGVyLVxcdTAwM2VlbnQtXFx1MDAzZXR5cGUgIT0gVFJBQ0VfQkxLKSB8fFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3NTY6XFx0ICAgICEoYmxrX3RyYWNlcl9mbGFncy52YWwgXFx1MDAyNiBUUkFDRV9CTEtfT1BUX0NMQVNTSUMpKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE3NTctXFx0XFx0cmV0dXJuIFRSQUNFX1RZUEVfVU5IQU5ETEVEO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTc2Mz1ibGtfdHJhY2VyX3NldF9mbGFnKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHUzMiBvbGRfZmxhZ3MsIHUzMiBiaXQsIGludCBzZXQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNzY1LVxcdC8qIGRvbid0IG91dHB1dCBjb250ZXh0LWluZm8gZm9yIGJsa19jbGFzc2ljIG91dHB1dCAqL1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3NjY6XFx0aWYgKGJpdCA9PSBUUkFDRV9CTEtfT1BUX0NMQVNTSUMpIHtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNzY3LVxcdFxcdGlmIChzZXQpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xNzkyPXN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgdHJhY2VfYmxrX2V2ZW50ID0ge1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE3OTM6XFx0LnR5cGVcXHRcXHQ9IFRSQUNFX0JMSyxcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xNzk0LVxcdC5mdW5jc1xcdFxcdD0gXFx1MDAyNnRyYWNlX2Jsa19ldmVudF9mdW5jcyxcXG4tLVxcbmtlcm5lbC90cmFjZS90cmFjZS5oPTM3PWVudW0gdHJhY2VfdHlwZSB7XFxuLS1cXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC01Mi1cXHRUUkFDRV9VU0VSX1NUQUNLLFxcbmtlcm5lbC90cmFjZS90cmFjZS5oOjUzOlxcdFRSQUNFX0JMSyxcXG5rZXJuZWwvdHJhY2UvdHJhY2UuaC01NC1cXHRUUkFDRV9CUFVUUyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTI6MTYuNzkyODUyMzA2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzMjg3MzExODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IGJsb2NrIHRyYWNpbmcgaXMgaW1wbGVtZW50ZWQgd2l0aGluIHRoZSBrZXJuZWwuIEknbSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGBfX2Jsa19hZGRfdHJhY2VgIGZ1bmN0aW9uIGFuZCBpdHMgYXNzb2NpYXRlZCByb3V0aW5lcyBpbiBga2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNgLiBUaGlzIHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgaG93IHRyYWNpbmcgaW5mb3JtYXRpb24gaXMgaW5qZWN0ZWQuXG5cblNwZWNpZmljYWxseSwgSSdsbCBiZSBmb2N1c2luZyBvbiBsaW5lcyAzMTAgdGhyb3VnaCA0MjAuIFRoYXQgc2VjdGlvbiBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIG1lY2hhbmljcywgbGlrZWx5IGNvdmVyaW5nIGhvdyB0aGUgdHJhY2Vwb2ludHMgYXJlIGhvb2tlZCwgZGF0YSBpcyBjb2xsZWN0ZWQsIGFuZCBtYXliZSBldmVuIGhvdyB0aGUgdHJhY2luZyBidWZmZXIgaXMgbWFuYWdlZC4gSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQgYW5kIGhvdyBldmVudHMgYXJlIHRpbWVzdGFtcGVkIGFuZCBmb3JtYXR0ZWQuIEhvcGVmdWxseSwgSSdsbCBmaW5kIHNvbWUgaW5zaWdodHMgaW50byB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXBwcm9hY2ggaW4gaGlnaC1wZXJmb3JtYW5jZSBzY2VuYXJpb3Mgb3IgaW4gY29tcGxleCBJTyBjb25maWd1cmF0aW9ucy4gVGhpcyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbnRleHR1YWxpemUgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MjoyMi4xMjE1ODYwNjlaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90cmFjZS9ibGt0cmFjZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTA6XFx0c3RhdGljIHZvaWQgX19ibGtfYWRkX3RyYWNlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcyxcXG4gMzExOlxcdFxcdFxcdFxcdCAgICBjb25zdCBibGtfb3BmX3Qgb3BmLCB1NjQgd2hhdCwgaW50IGVycm9yLFxcbiAzMTI6XFx0XFx0XFx0XFx0ICAgIGludCBwZHVfbGVuLCB2b2lkICpwZHVfZGF0YSwgdTY0IGNnaWQpXFxuIDMxMzpcXHR7XFxuIDMxNDpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7XFxuIDMxNTpcXHRcXHRzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50ID0gTlVMTDtcXG4gMzE2OlxcdFxcdHN0cnVjdCB0cmFjZV9idWZmZXIgKmJ1ZmZlciA9IE5VTEw7XFxuIDMxNzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzID0gMDtcXG4gMzE4OlxcdFxcdHVuc2lnbmVkIGxvbmcgKnNlcXVlbmNlO1xcbiAzMTk6XFx0XFx0dW5zaWduZWQgaW50IHRyYWNlX2N0eCA9IDA7XFxuIDMyMDpcXHRcXHRwaWRfdCBwaWQ7XFxuIDMyMTpcXHRcXHRpbnQgY3B1O1xcbiAzMjI6XFx0XFx0Ym9vbCBibGtfdHJhY2VyID0gYmxrX3RyYWNlcl9lbmFibGVkO1xcbiAzMjM6XFx0XFx0c3NpemVfdCBjZ2lkX2xlbiA9IGNnaWQgPyBzaXplb2YoY2dpZCkgOiAwO1xcbiAzMjQ6XFx0XFx0Y29uc3QgZW51bSByZXFfb3Agb3AgPSBvcGYgXFx1MDAyNiBSRVFfT1BfTUFTSztcXG4gMzI1OlxcdFxcdHNpemVfdCB0cmFjZV9sZW47XFxuIDMyNjpcXHRcXG4gMzI3OlxcdFxcdGlmICh1bmxpa2VseShidC1cXHUwMDNldHJhY2Vfc3RhdGUgIT0gQmxrdHJhY2VfcnVubmluZyBcXHUwMDI2XFx1MDAyNiAhYmxrX3RyYWNlcikpXFxuIDMyODpcXHRcXHRcXHRyZXR1cm47XFxuIDMyOTpcXHRcXG4gMzMwOlxcdFxcdHdoYXQgfD0gZGRpcl9hY3Rbb3BfaXNfd3JpdGUob3ApID8gV1JJVEUgOiBSRUFEXTtcXG4gMzMxOlxcdFxcdHdoYXQgfD0gTUFTS19UQ19CSVQob3BmLCBTWU5DKTtcXG4gMzMyOlxcdFxcdHdoYXQgfD0gTUFTS19UQ19CSVQob3BmLCBSQUhFQUQpO1xcbiAzMzM6XFx0XFx0d2hhdCB8PSBNQVNLX1RDX0JJVChvcGYsIE1FVEEpO1xcbiAzMzQ6XFx0XFx0d2hhdCB8PSBNQVNLX1RDX0JJVChvcGYsIFBSRUZMVVNIKTtcXG4gMzM1OlxcdFxcdHdoYXQgfD0gTUFTS19UQ19CSVQob3BmLCBGVUEpO1xcbiAzMzY6XFx0XFxuIDMzNzpcXHRcXHRzd2l0Y2ggKG9wKSB7XFxuIDMzODpcXHRcXHRjYXNlIFJFUV9PUF9ESVNDQVJEOlxcbiAzMzk6XFx0XFx0Y2FzZSBSRVFfT1BfU0VDVVJFX0VSQVNFOlxcbiAzNDA6XFx0XFx0XFx0d2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19ESVNDQVJEKTtcXG4gMzQxOlxcdFxcdFxcdGJyZWFrO1xcbiAzNDI6XFx0XFx0Y2FzZSBSRVFfT1BfRkxVU0g6XFxuIDM0MzpcXHRcXHRcXHR3aGF0IHw9IEJMS19UQ19BQ1QoQkxLX1RDX0ZMVVNIKTtcXG4gMzQ0OlxcdFxcdFxcdGJyZWFrO1xcbiAzNDU6XFx0XFx0Y2FzZSBSRVFfT1BfWk9ORV9BUFBFTkQ6XFxuIDM0NjpcXHRcXHRcXHR3aGF0IHw9IEJMS19UQ19BQ1QoQkxLX1RDX1pPTkVfQVBQRU5EKTtcXG4gMzQ3OlxcdFxcdFxcdGJyZWFrO1xcbiAzNDg6XFx0XFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVDpcXG4gMzQ5OlxcdFxcdFxcdHdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfWk9ORV9SRVNFVCk7XFxuIDM1MDpcXHRcXHRcXHRicmVhaztcXG4gMzUxOlxcdFxcdGNhc2UgUkVRX09QX1pPTkVfUkVTRVRfQUxMOlxcbiAzNTI6XFx0XFx0XFx0d2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19aT05FX1JFU0VUX0FMTCk7XFxuIDM1MzpcXHRcXHRcXHRicmVhaztcXG4gMzU0OlxcdFxcdGNhc2UgUkVRX09QX1pPTkVfRklOSVNIOlxcbiAzNTU6XFx0XFx0XFx0d2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19aT05FX0ZJTklTSCk7XFxuIDM1NjpcXHRcXHRcXHRicmVhaztcXG4gMzU3OlxcdFxcdGNhc2UgUkVRX09QX1pPTkVfT1BFTjpcXG4gMzU4OlxcdFxcdFxcdHdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfWk9ORV9PUEVOKTtcXG4gMzU5OlxcdFxcdFxcdGJyZWFrO1xcbiAzNjA6XFx0XFx0Y2FzZSBSRVFfT1BfWk9ORV9DTE9TRTpcXG4gMzYxOlxcdFxcdFxcdHdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfWk9ORV9DTE9TRSk7XFxuIDM2MjpcXHRcXHRcXHRicmVhaztcXG4gMzYzOlxcdFxcdGNhc2UgUkVRX09QX1dSSVRFX1pFUk9FUzpcXG4gMzY0OlxcdFxcdFxcdHdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfV1JJVEVfWkVST0VTKTtcXG4gMzY1OlxcdFxcdFxcdGJyZWFrO1xcbiAzNjY6XFx0XFx0ZGVmYXVsdDpcXG4gMzY3OlxcdFxcdFxcdGJyZWFrO1xcbiAzNjg6XFx0XFx0fVxcbiAzNjk6XFx0XFxuIDM3MDpcXHRcXHQvKiBEcm9wIHRyYWNlIGV2ZW50cyBmb3Igem9uZSBvcGVyYXRpb25zIHdpdGggYmxrdHJhY2UgdjEgKi9cXG4gMzcxOlxcdFxcdGlmIChidC1cXHUwMDNldmVyc2lvbiA9PSAxIFxcdTAwMjZcXHUwMDI2ICh3aGF0IFxcdTAwM2VcXHUwMDNlIEJMS19UQ19TSElGVCkgXFx1MDAzZSBCTEtfVENfRU5EX1YxKSB7XFxuIDM3MjpcXHRcXHRcXHRwcl9kZWJ1Z19yYXRlbGltaXRlZChcXFwiYmxrdHJhY2UgdjEgY2Fubm90IHRyYWNlIHpvbmUgb3BlcmF0aW9uIDB4JWxseFxcXFxuXFxcIixcXG4gMzczOlxcdFxcdFxcdFxcdFxcdCh1bnNpZ25lZCBsb25nIGxvbmcpd2hhdCk7XFxuIDM3NDpcXHRcXHRcXHRyZXR1cm47XFxuIDM3NTpcXHRcXHR9XFxuIDM3NjpcXHRcXG4gMzc3OlxcdFxcdGlmIChjZ2lkKVxcbiAzNzg6XFx0XFx0XFx0d2hhdCB8PSBfX0JMS19UQV9DR1JPVVA7XFxuIDM3OTpcXHRcXG4gMzgwOlxcdFxcdHBpZCA9IHRzay1cXHUwMDNlcGlkO1xcbiAzODE6XFx0XFx0aWYgKGFjdF9sb2dfY2hlY2soYnQsIHdoYXQsIHNlY3RvciwgcGlkKSlcXG4gMzgyOlxcdFxcdFxcdHJldHVybjtcXG4gMzgzOlxcdFxcdGNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XFxuIDM4NDpcXHRcXG4gMzg1OlxcdFxcdGlmIChibGtfdHJhY2VyKSB7XFxuIDM4NjpcXHRcXHRcXHRidWZmZXIgPSBibGtfdHItXFx1MDAzZWFycmF5X2J1ZmZlci5idWZmZXI7XFxuIDM4NzpcXHRcXHRcXHR0cmFjZV9jdHggPSB0cmFjaW5nX2dlbl9jdHhfZmxhZ3MoMCk7XFxuIDM4ODpcXHRcXHRcXHQvKlxcbiAzODk6XFx0XFx0XFx0ICogVGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciBhbHdheXMgdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpXFxuIDM5MDpcXHRcXHRcXHQgKiBmb3JtYXQ7IHRoZSBmdHJhY2UgcmVhZGVycyBwYXJzZSBvbmx5IHRoYXQuIGJ0LVxcdTAwM2V2ZXJzaW9uXFxuIDM5MTpcXHRcXHRcXHQgKiBkZXNjcmliZXMganVzdCB0aGUgcmVsYXkvY2xhc3NpYyBibGt0cmFjZSByZWNvcmQgZm9ybWF0LlxcbiAzOTI6XFx0XFx0XFx0ICogUmVjb3JkaW5nIGEgdjEtc2l6ZWQgZXZlbnQgaGVyZSB3b3VsZCBzaGlmdCBwZHVfc3RhcnQoKSAxNlxcbiAzOTM6XFx0XFx0XFx0ICogYnl0ZXMgcGFzdCB0aGUgUERVIGFuZCBtYWtlIGJsa19sb2dfcmVtYXAoKSByZWFkIHBhc3QgdGhlXFxuIDM5NDpcXHRcXHRcXHQgKiBldmVudCAoYSB1c2UtYWZ0ZXItZnJlZSBvbiBjb25jdXJyZW50IGJ1ZmZlciByZXNpemUpLCBhbmQgdjFcXG4gMzk1OlxcdFxcdFxcdCAqIGNhbm5vdCByZXByZXNlbnQgdGhlIG5ld2VyIDY0LWJpdCB6b25lIGFjdGlvbnMgYW55d2F5LlxcbiAzOTY6XFx0XFx0XFx0ICovXFxuIDM5NzpcXHRcXHRcXHR0cmFjZV9sZW4gPSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuO1xcbiAzOTg6XFx0XFx0XFx0ZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfQkxLLFxcbiAzOTk6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICB0cmFjZV9sZW4sIHRyYWNlX2N0eCk7XFxuIDQwMDpcXHRcXHRcXHRpZiAoIWV2ZW50KVxcbiA0MDE6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbiA0MDI6XFx0XFxuIDQwMzpcXHRcXHRcXHR0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpO1xcbiA0MDQ6XFx0XFx0XFx0cmVjb3JkX2Jsa3RyYWNlX2V2ZW50MihyaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KSxcXG4gNDA1OlxcdFxcdFxcdFxcdFxcdCAgICAgICBwaWQsIGNwdSwgc2VjdG9yLCBieXRlcyxcXG4gNDA2OlxcdFxcdFxcdFxcdFxcdCAgICAgICB3aGF0LCBidC1cXHUwMDNlZGV2LCBlcnJvciwgY2dpZCwgY2dpZF9sZW4sXFxuIDQwNzpcXHRcXHRcXHRcXHRcXHQgICAgICAgcGR1X2RhdGEsIHBkdV9sZW4pO1xcbiA0MDg6XFx0XFxuIDQwOTpcXHRcXHRcXHR0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChibGtfdHIsIGJ1ZmZlciwgZXZlbnQsIHRyYWNlX2N0eCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUyOjIyLjEyMTc1OTE0OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjE0NDc5OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHRzLCBhcyB0aG91Z2ggdGhleSB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gYGJsa190cmFjZV9zZXR1cF9xdWV1ZWAqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBiZWVuIGV4YW1pbmluZyB0aGUgYmxvY2sgdHJhY2UgaW5mcmFzdHJ1Y3R1cmUsIGFuZCBub3cgSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBuaXR0eS1ncml0dHkuIExldCdzIG5vdCBqdXN0IHRhbGsgYWJvdXQgdGhlICp3aGF0KiwgYnV0IGFsc28gdGhlICpob3cqLiBTcGVjaWZpY2FsbHksIEknbSBnZXR0aW5nIGN1cmlvdXMgYWJvdXQgdGhlIGlubmVyIHdvcmtpbmdzIG9mIGBibGtfdHJhY2Vfc2V0dXBfcXVldWVgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgaGFwcGVucyB1bmRlciB0aGUgaG9vZCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBJJ20gaW1hZ2luaW5nIHRoaXMgaXMgd2hlcmUgdGhlIHRyYWNlcG9pbnQgc2V0dXAgZm9yIGEgc3BlY2lmaWMgYmxvY2sgcXVldWUgZ2V0cyBvcmNoZXN0cmF0ZWQuIEknbSBleHBlY3RpbmcgdGhpcyBpcyBnb2luZyB0byBiZSB3aGVyZSBhbGwgdGhlIGltcG9ydGFudCBwYXJhbWV0ZXJzIGFyZSBpbml0aWFsaXplZCBhbmQgcmVnaXN0ZXJlZC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgdGhlIHRyYWNpbmcgc3RhcnRzLiBUaW1lIHRvIGRpc3NlY3QgdGhlIGltcGxlbWVudGF0aW9uLCBsaW5lIGJ5IGxpbmUuIExldCdzIHNlZSBob3cgdGhpcyB0aGluZyAqcmVhbGx5KiB0aWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MjgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDA1OjUyOjI0LjczNjI0MTk1NloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTg2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg2MDpcXHRzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4xODYxOlxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbjE4NjI6XFx0e1xcbjE4NjM6XFx0XFx0c3RydWN0IGJsa190cmFjZSAqYnQgPSBOVUxMO1xcbjE4NjQ6XFx0XFx0aW50IHJldCA9IC1FTk9NRU07XFxuMTg2NTpcXHRcXG4xODY2OlxcdFxcdGJ0ID0ga3phbGxvY19vYmooKmJ0KTtcXG4xODY3OlxcdFxcdGlmICghYnQpXFxuMTg2ODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xODY5OlxcdFxcbjE4NzA6XFx0XFx0YnQtXFx1MDAzZW1zZ19kYXRhID0gX19hbGxvY19wZXJjcHUoQkxLX1ROX01BWF9NU0csIF9fYWxpZ25vZl9fKGNoYXIpKTtcXG4xODcxOlxcdFxcdGlmICghYnQtXFx1MDAzZW1zZ19kYXRhKVxcbjE4NzI6XFx0XFx0XFx0Z290byBmcmVlX2J0O1xcbjE4NzM6XFx0XFxuMTg3NDpcXHRcXHRidC1cXHUwMDNlZGV2ID0gYmRldi1cXHUwMDNlYmRfZGV2O1xcbjE4NzU6XFx0XFx0YnQtXFx1MDAzZWFjdF9tYXNrID0gKHUxNiktMTtcXG4xODc2OlxcdFxcdC8qXFxuMTg3NzpcXHRcXHQgKiBUaGlzIHN5c2ZzLWVuYWJsZWQgcGF0aCBmZWVkcyB0aGUgZnRyYWNlIGJsayB0cmFjZXIsIHdoaWNoIGFsd2F5c1xcbjE4Nzg6XFx0XFx0ICogdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC4gSW5pdGlhbGl6ZSB0aGUgdmVyc2lvbiBzbyBpdCBpc1xcbjE4Nzk6XFx0XFx0ICogbmV2ZXIgbGVmdCBkYW5nbGluZyBhcyAwIGZvciBmdXR1cmUgY29uc3VtZXJzLlxcbjE4ODA6XFx0XFx0ICovXFxuMTg4MTpcXHRcXHRidC1cXHUwMDNldmVyc2lvbiA9IDI7XFxuMTg4MjpcXHRcXG4xODgzOlxcdFxcdGJsa190cmFjZV9zZXR1cF9sYmEoYnQsIGJkZXYpO1xcbjE4ODQ6XFx0XFxuMTg4NTpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIocS1cXHUwMDNlYmxrX3RyYWNlLCBidCk7XFxuMTg4NjpcXHRcXHRnZXRfcHJvYmVfcmVmKCk7XFxuMTg4NzpcXHRcXHRyZXR1cm4gMDtcXG4xODg4OlxcdFxcbjE4ODk6XFx0ZnJlZV9idDpcXG4xODkwOlxcdFxcdGJsa190cmFjZV9mcmVlKHEsIGJ0KTtcXG4xODkxOlxcdFxcdHJldHVybiByZXQ7XFxuMTg5MjpcXHR9XFxuMTg5MzpcXHRcXG4xODk0OlxcdC8qXFxuMTg5NTpcXHQgKiBzeXNmcyBpbnRlcmZhY2UgdG8gZW5hYmxlIGFuZCBjb25maWd1cmUgdHJhY2luZ1xcbjE4OTY6XFx0ICovXFxuMTg5NzpcXHRcXG4xODk4OlxcdHN0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbjE4OTk6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MjoyNC43MzY0MDM1NTZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTk4NDQzNjgwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIGBibGt0cmFjZS5jYCdzIFZlcnNpb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGJhY2sgaW50byBgYmxrdHJhY2UuY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlICplbHNlKiBkb2VzIHRoaXMgYGJ0LVx1MDAzZXZlcnNpb25gIHZhcmlhYmxlIHBvcCB1cCwgb3Igd2hlcmUgYXJlIHRoZSB0cmFjZSByZWNvcmRzIGJlaW5nIGhhbmRsZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGF0IHZlcnNpb24/XCIgSSBuZWVkIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiBob3cgaXQncyBiZWluZyB1c2VkLiBTbywgdGhlIG1vc3Qgc3RyYWlnaHRmb3J3YXJkIGFwcHJvYWNoIGlzIHRvIGRvIGEgdGFyZ2V0ZWQgc2VhcmNoLiBJJ2xsIGxhdW5jaCBhIHF1ZXJ5IGZvciBib3RoIGBidC1cdTAwM2V2ZXJzaW9uYCBhbmQsIGp1c3QgaW4gY2FzZSwgYSBtb3JlIGdlbmVyYWwgYHZlcnNpb25gIHRocm91Z2hvdXQgYGtlcm5lbC90cmFjZS9ibGt0cmFjZS5jYC4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgcXVpY2tseSBwaW5wb2ludCB0aGUga2V5IGFyZWFzIHRvIHVuZGVyc3RhbmQgdGhlIHZlcnNpb25pbmcgbG9naWMgd2l0aGluIHRoZSB0cmFjaW5nIHN5c3RlbSBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHRyYWNlIHJlY29yZHMgdGhlbXNlbHZlcy4gTGV0J3Mgc2VlIHdoYXQgY29tZXMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjUwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MjoyNi43MjA4NDM0MTRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0OTkxOTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZlcnNpb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL2Jsa3RyYWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTU2PXN0YXRpYyB2b2lkIHJlbGF5X2Jsa3RyYWNlX2V2ZW50KHN0cnVjdCBibGtfdHJhY2UgKmJ0LCB1bnNpZ25lZCBsb25nIHNlcXVlbmNlLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTYwLXtcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYzoxNjE6XFx0aWYgKGJ0LVxcdTAwM2V2ZXJzaW9uID09IDIpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTYyLVxcdFxcdHJldHVybiByZWxheV9ibGt0cmFjZV9ldmVudDIoYnQsIHNlcXVlbmNlLCBwaWQsIGNwdSwgc2VjdG9yLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MzEwPXN0YXRpYyB2b2lkIF9fYmxrX2FkZF90cmFjZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgYnl0ZXMsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0zNzAtXFx0LyogRHJvcCB0cmFjZSBldmVudHMgZm9yIHpvbmUgb3BlcmF0aW9ucyB3aXRoIGJsa3RyYWNlIHYxICovXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MzcxOlxcdGlmIChidC1cXHUwMDNldmVyc2lvbiA9PSAxIFxcdTAwMjZcXHUwMDI2ICh3aGF0IFxcdTAwM2VcXHUwMDNlIEJMS19UQ19TSElGVCkgXFx1MDAzZSBCTEtfVENfRU5EX1YxKSB7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzcyLVxcdFxcdHByX2RlYnVnX3JhdGVsaW1pdGVkKFxcXCJibGt0cmFjZSB2MSBjYW5ub3QgdHJhY2Ugem9uZSBvcGVyYXRpb24gMHglbGx4XFxcXG5cXFwiLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzg5LVxcdFxcdCAqIFRoZSBmdHJhY2UgcmluZyBidWZmZXIgYWx3YXlzIHVzZXMgdGhlIHYyIChibGtfaW9fdHJhY2UyKVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjM5MDpcXHRcXHQgKiBmb3JtYXQ7IHRoZSBmdHJhY2UgcmVhZGVycyBwYXJzZSBvbmx5IHRoYXQuIGJ0LVxcdTAwM2V2ZXJzaW9uXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMzkxLVxcdFxcdCAqIGRlc2NyaWJlcyBqdXN0IHRoZSByZWxheS9jbGFzc2ljIGJsa3RyYWNlIHJlY29yZCBmb3JtYXQuXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz02OTA9c3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldHVwX2ZpbmFsaXplKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjY5MTpcXHRcXHRcXHRcXHQgICAgIGNoYXIgKm5hbWUsIGludCB2ZXJzaW9uLFxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTY5Mi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBibGtfdHJhY2UgKmJ0LFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzAzLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjcwNDpcXHRidC1cXHUwMDNldmVyc2lvbiA9IHZlcnNpb247XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtNzA1LVxcdGJ0LVxcdTAwM2VhY3RfbWFzayA9IGJ1dHMtXFx1MDAzZWFjdF9tYXNrO1xcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM9MTAzND1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3pvbmVfdXBkYXRlX3JlcXVlc3Qodm9pZCAqaWdub3JlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMDM5LVxcdGJ0ID0gcmN1X2RlcmVmZXJlbmNlKHJxLVxcdTAwM2VxLVxcdTAwM2VibGtfdHJhY2UpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjEwNDA6XFx0aWYgKGxpa2VseSghYnQpIHx8IGJ0LVxcdTAwM2V2ZXJzaW9uIFxcdTAwM2MgMikge1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTEwNDEtXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xMTQwPXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2Vfem9uZV9wbHVnKHZvaWQgKmlnbm9yZSwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTQ3LVxcdGJ0ID0gcmN1X2RlcmVmZXJlbmNlKHEtXFx1MDAzZWJsa190cmFjZSk7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTE0ODpcXHRpZiAoYnQgXFx1MDAyNlxcdTAwMjYgYnQtXFx1MDAzZXZlcnNpb24gXFx1MDAzZT0gMilcXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYy0xMTQ5LVxcdFxcdF9fYmxrX2FkZF90cmFjZShidCwgc2VjdG9yLCBzZWN0b3JzIFxcdTAwM2NcXHUwMDNjIFNFQ1RPUl9TSElGVCwgMCxcXG4tLVxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jPTExNTY9c3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV96b25lX3VucGx1Zyh2b2lkICppZ25vcmUsIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE2My1cXHRidCA9IHJjdV9kZXJlZmVyZW5jZShxLVxcdTAwM2VibGtfdHJhY2UpO1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjExNjQ6XFx0aWYgKGJ0IFxcdTAwMjZcXHUwMDI2IGJ0LVxcdTAwM2V2ZXJzaW9uIFxcdTAwM2U9IDIpXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTE2NS1cXHRcXHRfX2Jsa19hZGRfdHJhY2UoYnQsIHNlY3Rvciwgc2VjdG9ycyBcXHUwMDNjXFx1MDAzYyBTRUNUT1JfU0hJRlQsIDAsXFxuLS1cXG5rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYz0xODYwPXN0YXRpYyBpbnQgYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbi0tXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg3Ny1cXHQgKiBUaGlzIHN5c2ZzLWVuYWJsZWQgcGF0aCBmZWVkcyB0aGUgZnRyYWNlIGJsayB0cmFjZXIsIHdoaWNoIGFsd2F5c1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jOjE4Nzg6XFx0ICogdXNlcyB0aGUgdjIgKGJsa19pb190cmFjZTIpIGZvcm1hdC4gSW5pdGlhbGl6ZSB0aGUgdmVyc2lvbiBzbyBpdCBpc1xcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4NzktXFx0ICogbmV2ZXIgbGVmdCBkYW5nbGluZyBhcyAwIGZvciBmdXR1cmUgY29uc3VtZXJzLlxcbmtlcm5lbC90cmFjZS9ibGt0cmFjZS5jLTE4ODAtXFx0ICovXFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmM6MTg4MTpcXHRidC1cXHUwMDNldmVyc2lvbiA9IDI7XFxua2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMtMTg4Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMDU6NTI6MjYuODA1ODQxODEyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NDA0NDE1NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBEb2Vzbid0IFdhcnJhbnQgSXQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGFuYWx5c2lzIHRlbGxzIG1lIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgc3VidGxlLCBidXQgY3JpdGljYWwsIGZsYXcgaW4gdGhlIGJsb2NrIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBjb3JlIGlzc3VlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB3aGF0J3Mgd3JpdHRlbiB0byB0aGUgZnRyYWNlIHJpbmcgYnVmZmVyIGFuZCB3aGF0IHRoZSBjb25zdW1lcnMgKmV4cGVjdCogdG8gZmluZCB0aGVyZS4gUHJldmlvdXNseSwgYF9fYmxrX2FkZF90cmFjZSgpYCBjb3VsZCB3cml0ZSB2MSBgYmxrX2lvX3RyYWNlYCBldmVudHMsIGJ1dCB0aGUgY29uc3VtZXJzLCBsaWtlIGBibGtfbG9nX3JlbWFwYCwgd2VyZSBidWlsdCBleHBlY3RpbmcgdjIgYGJsa19pb190cmFjZTJgIGV2ZW50cy4gVGhpcyBkaWZmZXJlbmNlIGluIHN0cnVjdHVyZSBzaXplcyBsZWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcyBpbiB0aGUgcmluZyBidWZmZXIsIGVzc2VudGlhbGx5IHJlYWRpbmcgcGFzdCB0aGUgaW50ZW5kZWQgZXZlbnQgYm91bmRhcnksIGFuZCB0aGF0IGNyZWF0ZXMgYSB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5LCBhIHJlYWwgcHJvYmxlbS5cblxuTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyBpZiB0aGlzIGludHJvZHVjZXMgYSBLTVNBTi1yZWxldmFudCBwcm9ibGVtLiBJIHNlZSB0aGF0IHRoZSBwYXRjaCdzIGZpeCBpbnZvbHZlcyB1bmNvbmRpdGlvbmFsbHkgd3JpdGluZyBgc3RydWN0IGJsa19pb190cmFjZTJgIGV2ZW50cyB0byB0aGUgZnRyYWNlIGJ1ZmZlci4gQWxzbywgYGJ0LVx1MDAzZXZlcnNpb25gIGlzIGV4cGxpY2l0bHkgc2V0IHRvIDIgZHVyaW5nIHF1ZXVlIHNldHVwIHdoaWNoLCBjcml0aWNhbGx5LCBlbGltaW5hdGVzIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHJpc2tzLiBUaGUgbWVtb3J5IGFsbG9jYXRpb24gKGBremFsbG9jX29iamAsIGFuZCBgdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSgpYCkgYW5kIGluaXRpYWxpemF0aW9uIChgcmVjb3JkX2Jsa3RyYWNlX2V2ZW50MmApIHBhcnRzIG9mIHRoZSBjb2RlIGFyZSByb2J1c3QuXG5cbkJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgS01TQU4gdHJpZ2dlcnMsIHRoaXMgcGF0Y2ggZG9lc24ndCBtZWV0IHRoZSBjcml0ZXJpYS4gSXQgZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCB1c2UtYWZ0ZXItZnJlZSwgcHJvYmxlbXMgdGhhdCBLQVNBTiBhbmQgc3RhbmRhcmQgYnVmZmVyIGNoZWNrcyBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LiBJdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJpc2tzIGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgc3RydWN0dXJlIGxlYWtzLCBvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB0aGF0IGFyZSBicmFuY2hlZCBvbi4gSW4gZmFjdCwgaXQgZXhwbGljaXRseSBpbml0aWFsaXplcyB0aGUgdmVyc2lvbiBmaWVsZC4gVGhlcmVmb3JlLCB0aGVyZSdzIG5vIG5lZWQgdG8gZW5hYmxlIEtNU0FOIGhlcmUuIFRoaXMgaXMgYSBzb2xpZCwgY2xlYW4gZml4LCBhbmQgS0FTQU4gc2hvdWxkIGhhbmRsZSB0aGUgcG90ZW50aWFsIGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NTgsIk91dHB1dFRva2VucyI6MjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQwNTo1MjozMy42NDYyODgwMVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBmb3JtYXQgbWlzbWF0Y2ggYW5kIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQgLyB1c2UtYWZ0ZXItZnJlZSBidWcgaW4gdGhlIGZ0cmFjZSBibG9jayB0cmFjaW5nIHN1YnN5c3RlbSAoYmxrdHJhY2UpLiBQcmV2aW91c2x5LCBpZiBidC1cXHUwMDNldmVyc2lvbiB3YXMgMSBvciAwLCBfX2Jsa19hZGRfdHJhY2UoKSBjb3VsZCBhbGxvY2F0ZSBhbmQgd3JpdGUgYSBzbWFsbGVyIHYxIChibGtfaW9fdHJhY2UpIGV2ZW50IGludG8gdGhlIGZ0cmFjZSByaW5nIGJ1ZmZlciB3aGlsZSBmdHJhY2UgY29uc3VtZXJzIHBhcnNlZCBlbnRyaWVzIHN0cmljdGx5IGFzIHYyIChibGtfaW9fdHJhY2UyKSwgcmVzdWx0aW5nIGluIHBkdV9zdGFydCgpIGluZGV4aW5nIG91dC1vZi1ib3VuZHMgYmV5b25kIHRoZSByZXNlcnZlZCBldmVudCBidWZmZXIuXFxuXFxuVGhpcyBjbGFzcyBvZiBidWcgKG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgdXNlLWFmdGVyLWZyZWUpIGlzIHRyYWNrZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggc2ltcGxpZmllcyB0aGUgZnRyYWNlIHBhdGggdG8gdW5jb25kaXRpb25hbGx5IHJlY29yZCB2MiBldmVudHMgb2Ygc2l6ZSBzaXplb2Yoc3RydWN0IGJsa19pb190cmFjZTIpICsgcGR1X2xlbiArIGNnaWRfbGVuIGFuZCBpbml0aWFsaXplcyBidC1cXHUwMDNldmVyc2lvbiB0byAyIGluIGJsa190cmFjZV9zZXR1cF9xdWV1ZSgpICh3aGVyZSB0aGUgbWVtb3J5IGlzIGFscmVhZHkgemVyby1hbGxvY2F0ZWQgdmlhIGt6YWxsb2Nfb2JqKS4gTm8gdW5pbml0aWFsaXplZCBkYXRhIGlzIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNvbHZlcyBhIGZvcm1hdCBtaXNtYXRjaCBhbmQgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZCAvIHVzZS1hZnRlci1mcmVlIGJ1ZyBpbiB0aGUgZnRyYWNlIGJsb2NrIHRyYWNpbmcgc3Vic3lzdGVtIChibGt0cmFjZSkuIFByZXZpb3VzbHksIGlmIGJ0LVxcdTAwM2V2ZXJzaW9uIHdhcyAxIG9yIDAsIF9fYmxrX2FkZF90cmFjZSgpIGNvdWxkIGFsbG9jYXRlIGFuZCB3cml0ZSBhIHNtYWxsZXIgdjEgKGJsa19pb190cmFjZSkgZXZlbnQgaW50byB0aGUgZnRyYWNlIHJpbmcgYnVmZmVyIHdoaWxlIGZ0cmFjZSBjb25zdW1lcnMgcGFyc2VkIGVudHJpZXMgc3RyaWN0bHkgYXMgdjIgKGJsa19pb190cmFjZTIpLCByZXN1bHRpbmcgaW4gcGR1X3N0YXJ0KCkgaW5kZXhpbmcgb3V0LW9mLWJvdW5kcyBiZXlvbmQgdGhlIHJlc2VydmVkIGV2ZW50IGJ1ZmZlci5cXG5cXG5UaGlzIGNsYXNzIG9mIGJ1ZyAob3V0LW9mLWJvdW5kcyByZWFkIGFuZCB1c2UtYWZ0ZXItZnJlZSkgaXMgdHJhY2tlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBzaW1wbGlmaWVzIHRoZSBmdHJhY2UgcGF0aCB0byB1bmNvbmRpdGlvbmFsbHkgcmVjb3JkIHYyIGV2ZW50cyBvZiBzaXplIHNpemVvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlMikgKyBwZHVfbGVuICsgY2dpZF9sZW4gYW5kIGluaXRpYWxpemVzIGJ0LVxcdTAwM2V2ZXJzaW9uIHRvIDIgaW4gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKCkgKHdoZXJlIHRoZSBtZW1vcnkgaXMgYWxyZWFkeSB6ZXJvLWFsbG9jYXRlZCB2aWEga3phbGxvY19vYmopLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j56p[1] Phase: Succeeded StartedAt: 2026-09-05 05:52:45 +0000 UTC FinishedAt: 2026-09-05 05:52:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 05:52:45 +0000 UTC FinishedAt: 2026-09-05 05:52:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2] Phase: Succeeded StartedAt: 2026-09-05 05:52:45 +0000 UTC FinishedAt: 2026-09-05 09:32:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 05:52:45 +0000 UTC FinishedAt: 2026-09-05 09:32:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 05:52:45 +0000 UTC FinishedAt: 2026-09-05 05:52:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 05:52:45 +0000 UTC FinishedAt: 2026-09-05 05:52:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow6j56p/series-workflow6j56p-convert-artifact-749029715/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 05:52:55 +0000 UTC FinishedAt: 2026-09-05 06:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 05:52:55 +0000 UTC FinishedAt: 2026-09-05 06:09:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1975f88a-255b-4b19-a80a-4949485b2cd2,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-workflow6j56p/series-workflow6j56p-convert-artifact-749029715/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": "49dec8ae-6bf7-4d36-bf2d-e5f5dd998158", "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-workflow6j56p/series-workflow6j56p-build-action-4237593729/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 05:52:55 +0000 UTC FinishedAt: 2026-09-05 06:09:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1975f88a-255b-4b19-a80a-4949485b2cd2,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-workflow6j56p/series-workflow6j56p-convert-artifact-749029715/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": "49dec8ae-6bf7-4d36-bf2d-e5f5dd998158", "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-workflow6j56p/series-workflow6j56p-build-action-4237593729/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 06:09:25 +0000 UTC FinishedAt: 2026-09-05 06:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 06:09:25 +0000 UTC FinishedAt: 2026-09-05 06:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 06:09:25 +0000 UTC FinishedAt: 2026-09-05 06:09:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 06:09:25 +0000 UTC FinishedAt: 2026-09-05 06:09:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow6j56p/series-workflow6j56p-convert-artifact-3085598538/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 06:09:35 +0000 UTC FinishedAt: 2026-09-05 06:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 06:09:35 +0000 UTC FinishedAt: 2026-09-05 06:11:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49dec8ae-6bf7-4d36-bf2d-e5f5dd998158,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-workflow6j56p/series-workflow6j56p-build-action-4237593729/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-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 06:11:36 +0000 UTC FinishedAt: 2026-09-05 06:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 06:11:36 +0000 UTC FinishedAt: 2026-09-05 06:11:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 06:11:36 +0000 UTC FinishedAt: 2026-09-05 06:27:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 06:11:36 +0000 UTC FinishedAt: 2026-09-05 06:27:31 +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:*1975f88a-255b-4b19-a80a-4949485b2cd2,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-workflow6j56p/series-workflow6j56p-convert-artifact-3085598538/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": "f40edbeb-eff5-4336-afb4-a0fa6b080596", "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-workflow6j56p/series-workflow6j56p-build-action-3913474926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 06:11:36 +0000 UTC FinishedAt: 2026-09-05 06:27:21 +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:*1975f88a-255b-4b19-a80a-4949485b2cd2,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-workflow6j56p/series-workflow6j56p-convert-artifact-3085598538/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": "f40edbeb-eff5-4336-afb4-a0fa6b080596", "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-workflow6j56p/series-workflow6j56p-build-action-3913474926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 06:27:31 +0000 UTC FinishedAt: 2026-09-05 06:27:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 06:27:31 +0000 UTC FinishedAt: 2026-09-05 06:27:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 06:27:31 +0000 UTC FinishedAt: 2026-09-05 06:29:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 06:27:32 +0000 UTC FinishedAt: 2026-09-05 06:29:19 +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:*f40edbeb-eff5-4336-afb4-a0fa6b080596,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-workflow6j56p/series-workflow6j56p-build-action-3913474926/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-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 06:29:29 +0000 UTC FinishedAt: 2026-09-05 09:32:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 06:29:29 +0000 UTC FinishedAt: 2026-09-05 09:32:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"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:*49dec8ae-6bf7-4d36-bf2d-e5f5dd998158,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f40edbeb-eff5-4336-afb4-a0fa6b080596,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-workflow6j56p/series-workflow6j56p-build-action-4237593729/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-workflow6j56p/series-workflow6j56p-build-action-3913474926/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 06:29:29 +0000 UTC FinishedAt: 2026-09-05 06:29:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 06:29:29 +0000 UTC FinishedAt: 2026-09-05 06:29:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"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-workflow6j56p/series-workflow6j56p-convert-artifact-2042984671/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 06:29:29 +0000 UTC FinishedAt: 2026-09-05 06:29:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 06:29:29 +0000 UTC FinishedAt: 2026-09-05 06:29:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 06:29:29 +0000 UTC FinishedAt: 2026-09-05 06:29:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 06:29:39 +0000 UTC FinishedAt: 2026-09-05 09:32:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6j56p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__blk_add_trace","blk_trace_setup_queue","record_blktrace_event2","sysfs_blk_trace_attr_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_IO_TRACE","BLOCK"],"series_id":"6eefcd0a-6495-4ffa-bf26-cd9312cebcf7","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 06:29:39 +0000 UTC FinishedAt: 2026-09-05 09:32:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*49dec8ae-6bf7-4d36-bf2d-e5f5dd998158,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f40edbeb-eff5-4336-afb4-a0fa6b080596,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-workflow6j56p/series-workflow6j56p-build-action-4237593729/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-workflow6j56p/series-workflow6j56p-build-action-3913474926/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-workflow6j56p/series-workflow6j56p-convert-artifact-2042984671/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,}