Name: series-workflow7xzmx Phase: Succeeded StartedAt: 2026-08-13 02:22:14 +0000 UTC FinishedAt: 2026-08-13 06:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[0] Phase: Succeeded StartedAt: 2026-08-13 02:22:14 +0000 UTC FinishedAt: 2026-08-13 02:25:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 02:22:14 +0000 UTC FinishedAt: 2026-08-13 02:25:29 +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": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_TAPRIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_TAPRIO" ], "series_id": "a3f2cc20-36ff-455a-bf1e-fa526f734b8f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "taprio_change" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBDUFUgbGl2ZWxvY2svc29mdCBsb2NrdXAgaXNzdWUgaW4gdGhlIHRhcHJpbyBzY2hlZHVsZXIgYnkgZW5mb3JjaW5nIGEgbWluaW11bSBocnRpbWVyIGludGVydmFsIChgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OU2ApIHdoZW4gc29mdHdhcmUgc2NoZWR1bGluZyBpcyB1c2VkLiBJdCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGludGVydmFsYCBhbmQgYGN5Y2xlX3RpbWVgIHBhcnNlZCBmcm9tIG5ldGxpbmsgYXR0cmlidXRlcy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgc29mdCBsb2NrdXBzIG9yIG91dC1vZi1ib3VuZHMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgdGhlIHNvZnQgbG9ja3VwIGRldGVjdG9yIG9yIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWluaW11bSBpbnRlcnZhbCBjaGVjayBmb3Igc29mdHdhcmUgc2NoZWR1bGluZyBpbiB0aGUgdGFwcmlvIHFkaXNjIHRvIHByZXZlbnQgQ1BVIGxpdmVsb2NrcyBjYXVzZWQgYnkgdmVyeSBzbWFsbCBocnRpbWVyIGludGVydmFscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgcWRpc2MgYWRkL2NoYW5nZSkgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxODA2OTUwMjM3YTJmMWUyMmNjZmQ5YWU2ODVmNTNkOTBjYWJjNmJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDI6MjM6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbmluZGV4IDQ1MjQ1MTU3ZTAwYTYuLjJiZjRjYWUxNjRiYzIgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG5AQCAtNDksNiAmIzQzOzQ5LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSB0YXByaW9faGF2ZV93b3JraW5nX21xcHJpbztcbiAgKi9cbiAjZGVmaW5lIFRBUFJJT19QSUNPU19QRVJfQllURV9NSU4gMTdcbiBcbiYjNDM7LyogVGhlIHNvZnR3YXJlIHNjaGVkdWxlciBjYW5ub3Qgc3VzdGFpbiBocnRpbWVyIGludGVydmFscyBzbWFsbGVyIHRoYW5cbiYjNDM7ICogdGhpcyB3aXRob3V0IGxpdmVsb2NraW5nIHRoZSBDUFUuIFRoZSB2YWx1ZSBtdXN0IGV4Y2VlZCB0aGUgY29zdCBvZlxuJiM0MzsgKiBvbmUgYWR2YW5jZV9zY2hlZCgpIGludm9jYXRpb24gKGxvY2sgYWNxdWlzaXRpb24sIGJ1ZGdldCByZWNvbXB1dGF0aW9uLFxuJiM0MzsgKiBUWCBzb2Z0aXJxKSB3aXRoIG1hcmdpbi5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyAoMTAwICogTlNFQ19QRVJfVVNFQylcbiYjNDM7XG4gc3RydWN0IHNjaGVkX2VudHJ5IHtcbiBcdC8qIER1cmF0aW9ucyBiZXR3ZWVuIHRoaXMgR0NMIGVudHJ5IGFuZCB0aGUgR0NMIGVudHJ5IHdoZXJlIHRoZVxuIFx0ICogcmVzcGVjdGl2ZSB0cmFmZmljIGNsYXNzIGdhdGUgY2xvc2VzXG5AQCAtMjU5LDYgJiM0MzsyNjYsMTYgQEAgc3RhdGljIGludCBsZW5ndGhfdG9fZHVyYXRpb24oc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgaW50IGxlbilcbiBcdHJldHVybiBkaXZfdTY0KGxlbiAqIGF0b21pYzY0X3JlYWQoXHUwMDI2cS1cdTAwM2VwaWNvc19wZXJfYnl0ZSksIFBTRUNfUEVSX05TRUMpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB0YXByaW9fbWluX2ludGVydmFsKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdG1pbl9kdXJhdGlvbiA9IG1heF90KGludCwgbWluX2R1cmF0aW9uLCBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1pbl9kdXJhdGlvbjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGR1cmF0aW9uX3RvX2xlbmd0aChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCB1NjQgZHVyYXRpb24pXG4ge1xuIFx0cmV0dXJuIGRpdl91NjQoZHVyYXRpb24gKiBQU0VDX1BFUl9OU0VDLCBhdG9taWM2NF9yZWFkKFx1MDAyNnEtXHUwMDNlcGljb3NfcGVyX2J5dGUpKTtcbkBAIC0xMDM4LDcgJiM0MzsxMDU1LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0XHQgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSxcbiBcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbi1cdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xuJiM0MztcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xuIFx0dTMyIGludGVydmFsID0gMDtcbiBcbiBcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pXG5AQCAtMTA1NCw3ICYjNDM7MTA3MSw4IEBAIHN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4gXHRcdFx0dGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9JTlRFUlZBTF0pO1xuIFxuIFx0LyogVGhlIGludGVydmFsIHNob3VsZCBhbGxvdyBhdCBsZWFzdCB0aGUgbWluaW11bSBldGhlcm5ldFxuLVx0ICogZnJhbWUgdG8gZ28gb3V0LlxuJiM0MztcdCAqIGZyYW1lIHRvIGdvIG91dC4gV2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQsIHRoZVxuJiM0MztcdCAqIGludGVydmFsIG11c3QgYWxzbyBiZSBhdCBsZWFzdCB0aGUgbWluaW11bSBocnRpbWVyIGludGVydmFsLlxuIFx0ICovXG4gXHRpZiAoaW50ZXJ2YWwgXHUwMDNjIG1pbl9kdXJhdGlvbikge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgaW50ZXJ2YWwgZm9yIHNjaGVkdWxlIGVudHJ5XCYjMzQ7KTtcbkBAIC0xMTY2LDcgJiM0MzsxMTg0LDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZSA9IGN5Y2xlO1xuIFx0fVxuIFxuLVx0aWYgKG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyBuZXctXHUwMDNlbnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7XG4mIzQzO1x0aWYgKG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyAoczY0KW5ldy1cdTAwM2VudW1fZW50cmllcyAqIHRhcHJpb19taW5faW50ZXJ2YWwocSkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gc21hbGxcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSF9UQVBSSU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YXByaW9fY2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtaW5pbXVtIGludGVydmFsIGNoZWNrIGZvciBzb2Z0d2FyZSBzY2hlZHVsaW5nIGluIHRoZSB0YXByaW8gcWRpc2MgdG8gcHJldmVudCBDUFUgbGl2ZWxvY2tzIGNhdXNlZCBieSB2ZXJ5IHNtYWxsIGhydGltZXIgaW50ZXJ2YWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGVyIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBxZGlzYyBhZGQvY2hhbmdlKSBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE4MDY5NTAyMzdhMmYxZTIyY2NmZDlhZTY4NWY1M2Q5MGNhYmM2YmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwMjoyMzo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCmluZGV4IDQ1MjQ1MTU3ZTAwYTYuLjJiZjRjYWUxNjRiYzIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF90YXByaW8uYwpAQCAtNDksNiAmIzQzOzQ5LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSB0YXByaW9faGF2ZV93b3JraW5nX21xcHJpbzsKICAqLwogI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3CiAKJiM0MzsvKiBUaGUgc29mdHdhcmUgc2NoZWR1bGVyIGNhbm5vdCBzdXN0YWluIGhydGltZXIgaW50ZXJ2YWxzIHNtYWxsZXIgdGhhbgomIzQzOyAqIHRoaXMgd2l0aG91dCBsaXZlbG9ja2luZyB0aGUgQ1BVLiBUaGUgdmFsdWUgbXVzdCBleGNlZWQgdGhlIGNvc3Qgb2YKJiM0MzsgKiBvbmUgYWR2YW5jZV9zY2hlZCgpIGludm9jYXRpb24gKGxvY2sgYWNxdWlzaXRpb24sIGJ1ZGdldCByZWNvbXB1dGF0aW9uLAomIzQzOyAqIFRYIHNvZnRpcnEpIHdpdGggbWFyZ2luLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyAoMTAwICogTlNFQ19QRVJfVVNFQykKJiM0MzsKIHN0cnVjdCBzY2hlZF9lbnRyeSB7CiAJLyogRHVyYXRpb25zIGJldHdlZW4gdGhpcyBHQ0wgZW50cnkgYW5kIHRoZSBHQ0wgZW50cnkgd2hlcmUgdGhlCiAJICogcmVzcGVjdGl2ZSB0cmFmZmljIGNsYXNzIGdhdGUgY2xvc2VzCkBAIC0yNTksNiAmIzQzOzI2NiwxNiBAQCBzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKQogCXJldHVybiBkaXZfdTY0KGxlbiAqIGF0b21pYzY0X3JlYWQoJmFtcDtxLSZndDtwaWNvc19wZXJfYnl0ZSksIFBTRUNfUEVSX05TRUMpOwogfQogCiYjNDM7c3RhdGljIGludCB0YXByaW9fbWluX2ludGVydmFsKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpCiYjNDM7ewomIzQzOwlpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTsKJiM0MzsKJiM0MzsJaWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLSZndDtmbGFncykpCiYjNDM7CQltaW5fZHVyYXRpb24gPSBtYXhfdChpbnQsIG1pbl9kdXJhdGlvbiwgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyk7CiYjNDM7CiYjNDM7CXJldHVybiBtaW5fZHVyYXRpb247CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkdXJhdGlvbl90b19sZW5ndGgoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgdTY0IGR1cmF0aW9uKQogewogCXJldHVybiBkaXZfdTY0KGR1cmF0aW9uICogUFNFQ19QRVJfTlNFQywgYXRvbWljNjRfcmVhZCgmYW1wO3EtJmd0O3BpY29zX3Blcl9ieXRlKSk7CkBAIC0xMDM4LDcgJiM0MzsxMDU1LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJCSAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LAogCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKLQlpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTsKJiM0MzsJaW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7CiAJdTMyIGludGVydmFsID0gMDsKIAogCWlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pCkBAIC0xMDU0LDcgJiM0MzsxMDcxLDggQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJCXRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfSU5URVJWQUxdKTsKIAogCS8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYWxsb3cgYXQgbGVhc3QgdGhlIG1pbmltdW0gZXRoZXJuZXQKLQkgKiBmcmFtZSB0byBnbyBvdXQuCiYjNDM7CSAqIGZyYW1lIHRvIGdvIG91dC4gV2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQsIHRoZQomIzQzOwkgKiBpbnRlcnZhbCBtdXN0IGFsc28gYmUgYXQgbGVhc3QgdGhlIG1pbmltdW0gaHJ0aW1lciBpbnRlcnZhbC4KIAkgKi8KIAlpZiAoaW50ZXJ2YWwgJmx0OyBtaW5fZHVyYXRpb24pIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0ludmFsaWQgaW50ZXJ2YWwgZm9yIHNjaGVkdWxlIGVudHJ5JiMzNDspOwpAQCAtMTE2Niw3ICYjNDM7MTE4NCw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJbmV3LSZndDtjeWNsZV90aW1lID0gY3ljbGU7CiAJfQogCi0JaWYgKG5ldy0mZ3Q7Y3ljbGVfdGltZSAmbHQ7IG5ldy0mZ3Q7bnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7CiYjNDM7CWlmIChuZXctJmd0O2N5Y2xlX3RpbWUgJmx0OyAoczY0KW5ldy0mZ3Q7bnVtX2VudHJpZXMgKiB0YXByaW9fbWluX2ludGVydmFsKHEpKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gc21hbGwmIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIHRhcHJpbyBTY2hlZHVsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIFRBUFJJTyBzY2hlZHVsZXIuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYSBtaW5pbXVtIHNvZnR3YXJlIGludGVydmFsLCBkZWZpbmVkIGFzIGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCwgYW5kIGEgZnVuY3Rpb24gYHRhcHJpb19taW5faW50ZXJ2YWwoc3RydWN0IHRhcHJpb19zY2hlZCAqcSlgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24sIHJlcGxhY2luZyB0aGUgaGFyZGNvZGVkIGBFVEhfWkxFTmAgZHVyYXRpb24gY2FsY3VsYXRpb25zIHdpdGggdGhpcyBuZXcsIHByZXN1bWFibHkgbW9yZSBzZW5zaWJsZSwgbWluaW11bSBpbnRlcnZhbCwgdXNpbmcgYHRhcHJpb19taW5faW50ZXJ2YWwocSlgIHdpdGhpbiB0aGUgYGZpbGxfc2NoZWRfZW50cnlgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBmdW5jdGlvbnMuCgpFc3NlbnRpYWxseSwgdGhleSYjMzk7cmUgcHJldmVudGluZyB0aGUgc2NoZWR1bGVyIGZyb20gZ2V0dGluZyBib2dnZWQgZG93biBhbmQgcG90ZW50aWFsbHkgY2F1c2luZyBsaXZlbG9jayBieSBhbGxvd2luZyBleGNlc3NpdmVseSBzaG9ydCBocnRpbWVyIGludGVydmFscyBpbiBzb2Z0d2FyZSBzY2hlZHVsaW5nLiBJdCBtYWtlcyBzZW5zZTsgcmVhbGx5IHRpbnkgaW50ZXJ2YWxzIHdvdWxkIGp1c3QgYnVybiBDUFUgY3ljbGVzIHdpdGhvdXQgYWNjb21wbGlzaGluZyBtdWNoLgoKVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIGltcGFjdHMgaG93IFRBUFJJTyBzY2hlZHVsZXMgYXJlIHBhcnNlZCBhbmQgdmFsaWRhdGVkLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGluIHRoZSBzY2hlZHVsaW5nIGNvZGUsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2UgdXNpbmcgbmV0bGluayB0aHJvdWdoIGNvbW1hbmRzIGxpa2UgYHRjIHFkaXNjIGFkZC9jaGFuZ2VgLiBJJiMzOTtsbCBoYXZlIHRvIGRvdWJsZS1jaGVjaywgYnV0IEkmIzM5O20gd2lsbGluZyB0byBiZXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBDT05GSUdfTkVUX1NDSF9UQVBSSU9gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz0xNjc9Y29uZmlnIE5FVF9TQ0hfTVFQUklPX0xJQlxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTE3MS1cbm5ldC9zY2hlZC9LY29uZmlnOjE3Mjpjb25maWcgTkVUX1NDSF9UQVBSSU9cbm5ldC9zY2hlZC9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O1RpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXCYjMzQ7XG4tLVxubmV0L3NjaGVkL01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19ORVRfU0NIX0VURilcdCYjNDM7PSBzY2hfZXRmLm9cbm5ldC9zY2hlZC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfTkVUX1NDSF9UQVBSSU8pXHQmIzQzOz0gc2NoX3RhcHJpby5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX05FVF9TQ0hfQlBGKVx0JiM0Mzs9IGJwZl9xZGlzYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVEFQUklPIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBUQVBSSU8gc2NoZWR1bGVyIGltcGxlbWVudGF0aW9uLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBgTkVUX1NDSF9UQVBSSU9gLiBNeSBhdHRlbnRpb24gaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBmaWxsX3NjaGVkX2VudHJ5YCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAuIEdvb2QsIHRoZXkmIzM5O3ZlIGhpZ2hsaWdodGVkIHRoZSBzcGVjaWZpYyBhcmVhcyBJIG5lZWQgdG8gZm9jdXMgb24uCgpCb3RoIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgaW5kaWNhdGVzIHRoYXQgdGhlaXIgc2NvcGUgaXMgbGltaXRlZCB3aXRoaW4gdGhlIG1vZHVsZSwgbGlrZWx5IGZvciBlbmNhcHN1bGF0aW9uLiBCdXQsIGhtbSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdG8gZW5zdXJlIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcy4gTGV0IG1lIGNoZWNrIHdoYXQgYWN0dWFsbHkgKmNhbGxzKiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBjb250cmlidXRlcyB0byB0aGUgb3ZlcmFsbCBzY2hlZHVsZXIgb3BlcmF0aW9uLiBLbm93aW5nIGhvdyBpdCYjMzk7cyBpbnZva2VkIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgc2NoZWR1bGluZyBsb2dpYyB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYXJzZV90YXByaW9fc2NoZWR1bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTEwNj1zdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExNDUtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExNDY6c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTQ3LVx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE4MzU9c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTI3LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxOTI4Olx0ZXJyID0gcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHEsIHRiLCBuZXdfYWRtaW4sIGV4dGFjayk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MjktXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBUQVBSSU8gUWRpc2MgTW9kaWZpY2F0aW9uKioKCkFscmlnaHQsIHNvIGB0YXByaW9fY2hhbmdlYCBpcyBmaXJpbmcuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgdGhlIGAuY2hhbmdlYCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIFRBUFJJTyBxZGlzYy4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIHdoYXQgdHJpZ2dlcnMgdGhpcyBjYWxsYmFjay4gSXQmIzM5O3Mgc2FmZSB0byBhc3N1bWUgc29tZSBhc3BlY3Qgb2YgdGhlIFRBUFJJTyBzY2hlZHVsZSBpcyBiZWluZyBhbHRlcmVkLiBUaGUgY3J1Y2lhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc2NoZWR1bGUgaXRzZWxmLCB3aGljaCwgZnJvbSB0aGUgY29kZSwgSSBzZWUgaXMgcGFyc2VkIHZpYSBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYC4gCgpCZWZvcmUgZGlnZ2luZyB0b28gZGVlcCBpbnRvIHRoYXQgcGFyc2luZyBsb2dpYywgbGV0JiMzOTtzIHN0ZXAgYmFjayBmb3IgYSBtb21lbnQuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgZGl2aW5nIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIHNjaGVkdWxlLCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBxZGlzYyBvcGVyYXRpb25zIHJlbGF0ZSB0byB0YXByaW8uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBsb29raW5nIGF0IHRoZSBzb3VyY2Ugb2YgdHJ1dGgsIGFuZCBub3QgbWlzc2luZyBhIG51YW5jZSBpbiBob3cgdGhpcyB3b3Jrcy4gSSB3YW50IHRvIGhhdmUgdGhlIGNvbnRleHQgb2YgdGhlIG92ZXJhbGwgVEFQUklPIGltcGxlbWVudGF0aW9uIGZyZXNoIGluIG15IG1pbmQuIFdoZXJlIGFyZSB0aG9zZSBxZGlzYyBvcGVyYXRpb25zIGRlZmluZWQsIGFuZCBob3cgZG8gdGhleSBpbnRlcmFjdCB3aXRoIHRoaXMgYHRhcHJpb19jaGFuZ2VgIGNhbGxiYWNrPyBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtb2RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFwcmlvX3FkaXNjX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHRhcHJpb19jbGFzc19vcHMgPSB7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTUyLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTUzOnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU1NC1cdC5jbF9vcHNcdFx0PSBcdTAwMjZ0YXByaW9fY2xhc3Nfb3BzLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjU3NT1zdGF0aWMgaW50IF9faW5pdCB0YXByaW9fbW9kdWxlX2luaXQodm9pZClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODEtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1ODI6XHRyZXR1cm4gcmVnaXN0ZXJfcWRpc2MoXHUwMDI2dGFwcmlvX3FkaXNjX29wcyk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODMtfVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjU4NT1zdGF0aWMgdm9pZCBfX2V4aXQgdGFwcmlvX21vZHVsZV9leGl0KHZvaWQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODYte1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTg3Olx0dW5yZWdpc3Rlcl9xZGlzYyhcdTAwMjZ0YXByaW9fcWRpc2Nfb3BzKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU4OC1cdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNnRhcHJpb19kZXZpY2Vfbm90aWZpZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NDMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgdGFwcmlvX3FkaXNjX29wc2AgU3RydWN0dXJlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGB0YXByaW9fcWRpc2Nfb3BzYCBzdHJ1Y3R1cmUuIEkmIzM5O20gcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gdGhlIGZ1bmN0aW9ucyBleHBvc2VkIGhlcmUsIG5hdHVyYWxseS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGF2YWlsYWJsZSBmb3IgaW50ZXJhY3Rpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzY2hlZHVsZXIgaW50ZXJhY3RzIHdpdGggdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIG1lY2hhbmlzbXMuIFdoYXQgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzPyBJJiMzOTttIGFudGljaXBhdGluZyBgaW5pdGAsIGBkZXN0cm95YCwgYGVucXVldWVgLCBgZGVxdWV1ZWAg4oCTIHRoZSB1c3VhbCBzdXNwZWN0cy4gQnV0IEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGFueSBwb3RlbnRpYWwgaG9va3MgZm9yIHRoaW5ncyBsaWtlIHJhdGUgbGltaXRpbmcsIHNoYXBlciBjb25maWd1cmF0aW9uLCBvciBtYXliZSBldmVuIGludGVncmF0aW9uIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXMsIGlmIGFwcGxpY2FibGUuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIGludGVyZmFjZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIFRBUFJJTyBxZGlzYyBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIHRjIGZyYW1ld29yay4gSXQmIzM5O3MgdGltZSB0byBiZWNvbWUgaW50aW1hdGUgd2l0aCB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFwcmlvX3FkaXNjX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHRhcHJpb19jbGFzc19vcHMgPSB7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTUyLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTUzOnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU1NC1cdC5jbF9vcHNcdFx0PSBcdTAwMjZ0YXByaW9fY2xhc3Nfb3BzLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjU3NT1zdGF0aWMgaW50IF9faW5pdCB0YXByaW9fbW9kdWxlX2luaXQodm9pZClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODEtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1ODI6XHRyZXR1cm4gcmVnaXN0ZXJfcWRpc2MoXHUwMDI2dGFwcmlvX3FkaXNjX29wcyk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODMtfVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjU4NT1zdGF0aWMgdm9pZCBfX2V4aXQgdGFwcmlvX21vZHVsZV9leGl0KHZvaWQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODYte1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTg3Olx0dW5yZWdpc3Rlcl9xZGlzYyhcdTAwMjZ0YXByaW9fcWRpc2Nfb3BzKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU4OC1cdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNnRhcHJpb19kZXZpY2Vfbm90aWZpZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjQyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgdGFwcmlvX3FkaXNjX29wc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYHRhcHJpb19xZGlzY19vcHNgIGFuZCBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBob3cgdGhpcyBRZGlzYyBpcyBpbXBsZW1lbnRlZC4gTXkgZmlyc3QgdGhvdWdodHMgYXJlIGFsd2F5cyBhYm91dCB0aGUgZnVuZGFtZW50YWxzOiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgY29yZSBmdW5jdGlvbnMsIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBvcGVyYXRpb25zIGZvciBlbnF1ZXVlaW5nLCBkZXF1ZXVlaW5nLCBoYW5kbGluZyBzdGF0aXN0aWNzLCBhbmQgcHJvYmFibHkgc29tZSBtZXRob2RzIHJlbGF0ZWQgdG8gc2V0dGluZyB1cCBhbmQgdGVhcmluZyBkb3duIHRoZSBRZGlzYyBpdHNlbGYuCgpJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhlIHRyYWZmaWMgc2hhcGluZyBhc3BlY3RzOyB3aGF0IHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBhcmUgZW1wbG95ZWQ/IEFyZSB0aGV5IHVzaW5nIHRpbWUtYXdhcmUgc2hhcGVyIChUQVMpIGZlYXR1cmVzPyBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGhvdyB0aGV5IGFyZSBoYW5kbGluZyBwZXItcXVldWUgY29uZmlndXJhdGlvbnMgYW5kIGhvdyB0aGUgZnJhbWUgdHJhbnNtaXNzaW9uIGlzIGdvdmVybmVkIGJhc2VkIG9uIHRpbWUgYW5kIHByaW9yaXR5LiBHaXZlbiB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gVEFQUklPLCBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGxldmVsIG9mIElFRUUgODAyLjFRYnYgaW50ZWdyYXRpb24gb3IgZXF1aXZhbGVudC4gSSB3aWxsIHRyeSB0byB2aXN1YWxpemUgaG93IHRyYWZmaWMgaXMgYmVpbmcgc2NoZWR1bGVkIGFuZCB0cmFuc21pdHRlZCBiYXNlZCBvbiB2YXJpb3VzIHRpbWUgd2luZG93cyBhbmQgd2hhdCBraW5kIG9mIHN5bmNocm9uaXphdGlvbiBjaGFsbGVuZ2VzIHRoZXkmIzM5O3JlIGhhbmRsaW5nLCBhc3N1bWluZyB0aGlzIFFkaXNjIHdpbGwgYmUgdXNlZCB3aXRoIGhpZ2gtcHJlY2lzaW9uIHRpbWUtc2Vuc2l0aXZlIG5ldHdvcmtpbmcuCgpJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHRoYXQgdGhlcmUgd2lsbCBiZSBzb21lIGNoZWNrcyBmb3IgdGhlIGN1cnJlbnQgdGltZSBzb3VyY2UgdGhhdCB0aGV5IGFyZSB1c2luZy4gSSB3YW50IHRvIGtub3cgaWYgaXQgcmVxdWlyZXMgYSBzcGVjaWFsIG9yIHNwZWNpZmljIHRpbWUgc291cmNlIHRvIG9wZXJhdGUuCgpJIHdpbGwgYWxzbyBiZSBvbiB0aGUgbG9va291dCBmb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBBcmUgdGhleSB1c2luZyBhbnkgYXRvbWljIG9wZXJhdGlvbnMgb3Igc3BpbmxvY2tzPyBIb3cgaXMgY29uY3VycmVuY3kgbWFuYWdlZD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCB0cmFkZS1vZmZzIGJldHdlZW4gbGF0ZW5jeSBhbmQgdGhyb3VnaHB1dD8KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCB1c2VyLXNwYWNlIGludGVyYWN0aW9uOiBob3cgY29uZmlndXJhdGlvbnMgYXJlIHNldCwgaG93IHN0YXRpc3RpY3MgYXJlIHJldHJpZXZlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBzcGVjaWFsIGludGVyZmFjZXMgZm9yIHR1bmluZyB0aGUgUWRpc2MuIEkgd2lsbCBwcm9iYWJseSBhbHNvIGF0dGVtcHQgdG8gY29tcGFyZSBpdCB3aXRoIG90aGVyIHNpbWlsYXIgUWRpc2NzIGFuZCB0aGVpciBhcHByb2FjaGVzLiBJIHdhbnQgdG8gc2VlIGlmIGFueSBvZiB0aGVpciB0ZWNobmlxdWVzIGFyZSBpbm5vdmF0aXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gc3RvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU1MzpcdHN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbjI1NTQ6XHRcdC5jbF9vcHNcdFx0PSBcdTAwMjZ0YXByaW9fY2xhc3Nfb3BzLFxuMjU1NTpcdFx0LmlkXHRcdD0gXCYjMzQ7dGFwcmlvXCYjMzQ7LFxuMjU1NjpcdFx0LnByaXZfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHRhcHJpb19zY2hlZCksXG4yNTU3Olx0XHQuaW5pdFx0XHQ9IHRhcHJpb19pbml0LFxuMjU1ODpcdFx0LmNoYW5nZVx0XHQ9IHRhcHJpb19jaGFuZ2UsXG4yNTU5Olx0XHQuZGVzdHJveVx0PSB0YXByaW9fZGVzdHJveSxcbjI1NjA6XHRcdC5yZXNldFx0XHQ9IHRhcHJpb19yZXNldCxcbjI1NjE6XHRcdC5hdHRhY2hcdFx0PSB0YXByaW9fYXR0YWNoLFxuMjU2MjpcdFx0LnBlZWtcdFx0PSB0YXByaW9fcGVlayxcbjI1NjM6XHRcdC5kZXF1ZXVlXHQ9IHRhcHJpb19kZXF1ZXVlLFxuMjU2NDpcdFx0LmVucXVldWVcdD0gdGFwcmlvX2VucXVldWUsXG4yNTY1Olx0XHQuZHVtcFx0XHQ9IHRhcHJpb19kdW1wLFxuMjU2NjpcdFx0LmR1bXBfc3RhdHNcdD0gdGFwcmlvX2R1bXBfc3RhdHMsXG4yNTY3Olx0XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbjI1Njg6XHR9O1xuMjU2OTpcdE1PRFVMRV9BTElBU19ORVRfU0NIKFwmIzM0O3RhcHJpb1wmIzM0Oyk7XG4yNTcwOlx0XG4yNTcxOlx0c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB0YXByaW9fZGV2aWNlX25vdGlmaWVyID0ge1xuMjU3MjpcdFx0Lm5vdGlmaWVyX2NhbGwgPSB0YXByaW9fZGV2X25vdGlmaWVyLFxuMjU3MzpcdH07XG4yNTc0Olx0XG4yNTc1Olx0c3RhdGljIGludCBfX2luaXQgdGFwcmlvX21vZHVsZV9pbml0KHZvaWQpXG4yNTc2Olx0e1xuMjU3NzpcdFx0aW50IGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZ0YXByaW9fZGV2aWNlX25vdGlmaWVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRBUFJJTyBDb2RlYmFzZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgVEFQUklPIGNvZGUgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBJIHNlZSBgdGFwcmlvX2luaXRgLCBgdGFwcmlvX2NoYW5nZWAsIGB0YXByaW9fZGVzdHJveWAsIGB0YXByaW9fcmVzZXRgLCBgdGFwcmlvX2F0dGFjaGAsIGB0YXByaW9fcGVla2AsIGB0YXByaW9fZGVxdWV1ZWAsIGB0YXByaW9fZW5xdWV1ZWAsIGB0YXByaW9fZHVtcGAsIGFuZCBgdGFwcmlvX2R1bXBfc3RhdHNgLiBUaGF0JiMzOTtzIGEgZGVjZW50IHN1aXRlIG9mIGZ1bmN0aW9ucywgYnV0IEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHBsYXllcnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMuCgpJdCBsb29rcyBsaWtlIHRoZSByZWFsIHdvcmsgaXMgYmVpbmcgZG9uZSBpbnNpZGUgYGZpbGxfc2NoZWRfZW50cnlgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYW5kIHRoZXNlIGFyZSBib3RoIGNhbGxlZCBmcm9tIGB0YXByaW9fY2hhbmdlYC4gQWhhISBgdGFwcmlvX2NoYW5nZWAgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uOyBpdCBzZWVtcyBjZW50cmFsIHRvIHRoZSBjb3JlIFRBUFJJTyBsb2dpYywgYXMgaXQmIzM5O3MgbW9kaWZ5aW5nIHRob3NlIGtleSBzdHJ1Y3R1cmVzLiBCdXQgSSBzaG91bGQgY2hlY2sgYHRhcHJpb19pbml0YCB0b28sIGp1c3QgdG8gYmUgc3VyZSBpdCBkb2VzbiYjMzk7dCBpbml0aWFsaXplIGFuZCB0aGVuIGNhbGwgaXQsIHdoaWNoIGlzIGxpa2VseS4gSXQmIzM5O3MgZ29vZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXByaW9faW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0yMDQyPXN0YXRpYyB2b2lkIHRhcHJpb19kZXN0cm95KHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA1MS1cdC8qIE5vdGUgdGhhdCB0YXByaW9fcmVzZXQoKSBtaWdodCBub3QgYmUgY2FsbGVkIGlmIGFuIGVycm9yXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwNTI6XHQgKiBoYXBwZW5zIGluIHFkaXNjX2NyZWF0ZSgpLCBhZnRlciB0YXByaW9faW5pdCgpIGhhcyBiZWVuIGNhbGxlZC5cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA1My1cdCAqL1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA4MC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA4MTpzdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwODItXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTUzPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTYtXHQucHJpdl9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgdGFwcmlvX3NjaGVkKSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjU1NzpcdC5pbml0XHRcdD0gdGFwcmlvX2luaXQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTgtXHQuY2hhbmdlXHRcdD0gdGFwcmlvX2NoYW5nZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkwMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsIFN0YWNrOiBgdGFwcmlvX2luaXRgIGFuZCBgdGFwcmlvX2NoYW5nZWAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYHRhcHJpb19pbml0YCBhbmQgYHRhcHJpb19jaGFuZ2VgLiBUaGUgcXVlc3Rpb24gYXQgaGFuZCBpcyB3aGV0aGVyIGB0YXByaW9faW5pdGAgZGlyZWN0bHkgY2FsbHMgb3IgaW5kaXJlY3RseSB0cmlnZ2VycyBgdGFwcmlvX2NoYW5nZWAuIFVuZGVyc3RhbmRpbmcgdGhpcyBjb250cm9sIGZsb3cgaXMgY3JpdGljYWwgZm9y4oCmIHdlbGwsIGZyYW5rbHksIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aW1pbmcsIHNjaGVkdWxpbmcsIGFuZCBlbnN1cmluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW4gdGhlIFRBUFJJTyBjb250ZXh0LiBJZiB0aGVyZSYjMzk7cyBubyBkaXJlY3QgaW52b2NhdGlvbiwgaXMgdGhlcmUgYW4gZXZlbnQsIGEgZmxhZywgb3IgYSBzZXBhcmF0ZSB0aHJlYWQgY29tbXVuaWNhdGluZyB0aGUgbmVlZCB0byAqcG90ZW50aWFsbHkqIG1vZGlmeSBwYXJhbWV0ZXJzPyBJZiBpdCAqaXMqIGEgZGlyZWN0IGNhbGwsIGl0IHNpbXBsaWZpZXMgZGVidWdnaW5nIGNvbnNpZGVyYWJseSwgYnV0IEkgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZCBjb3JyZWN0bHkgYW5kIHRoYXQgdGhlcmUgaXMgbm8gdW5pbnRlbmRlZCBzaWRlLWVmZmVjdC4gSSBrbm93IHRoZXJlJiMzOTtzIGEgZGVsaWNhdGUgZGFuY2Ugd2l0aCBtdWx0aXBsZSB0YXNrcyB0cnlpbmcgdG8gdGFrZSBjb250cm9sLCBzbyBhbnkgY2FsbCBzZXF1ZW5jZSBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5LiBMZXQmIzM5O3Mgc2VlLi4uSSB0aGluayBJIHdpbGwgdXNlIGEgZGVidWdnZXIgdG8gc3RlcCB0aHJvdWdoIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA4MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDgxOlx0c3RhdGljIGludCB0YXByaW9faW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuMjA4MjpcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMjA4MzpcdHtcbjIwODQ6XHRcdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4yMDg1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XG4yMDg2Olx0XHRpbnQgaSwgdGM7XG4yMDg3Olx0XG4yMDg4Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZxLVx1MDAzZWN1cnJlbnRfZW50cnlfbG9jayk7XG4yMDg5Olx0XG4yMDkwOlx0XHRocnRpbWVyX3NldHVwKFx1MDAyNnEtXHUwMDNlYWR2YW5jZV90aW1lciwgYWR2YW5jZV9zY2hlZCwgQ0xPQ0tfVEFJLCBIUlRJTUVSX01PREVfQUJTKTtcbjIwOTE6XHRcbjIwOTI6XHRcdHEtXHUwMDNlcm9vdCA9IHNjaDtcbjIwOTM6XHRcbjIwOTQ6XHRcdC8qIFdlIG9ubHkgc3VwcG9ydCBzdGF0aWMgY2xvY2tpZHMuIFVzZSBhbiBpbnZhbGlkIHZhbHVlIGFzIGRlZmF1bHRcbjIwOTU6XHRcdCAqIGFuZCBnZXQgdGhlIHZhbGlkIG9uZSBvbiB0YXByaW9fY2hhbmdlKCkuXG4yMDk2Olx0XHQgKi9cbjIwOTc6XHRcdHEtXHUwMDNlY2xvY2tpZCA9IC0xO1xuMjA5ODpcdFx0cS1cdTAwM2VmbGFncyA9IFRBUFJJT19GTEFHU19JTlZBTElEO1xuMjA5OTpcdFxuMjEwMDpcdFx0bGlzdF9hZGQoXHUwMDI2cS1cdTAwM2V0YXByaW9fbGlzdCwgXHUwMDI2dGFwcmlvX2xpc3QpO1xuMjEwMTpcdFxuMjEwMjpcdFx0aWYgKHNjaC1cdTAwM2VwYXJlbnQgIT0gVENfSF9ST09UKSB7XG4yMTAzOlx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0NhbiBvbmx5IGJlIGF0dGFjaGVkIGFzIHJvb3QgcWRpc2NcJiMzNDspO1xuMjEwNDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4yMTA1Olx0XHR9XG4yMTA2Olx0XG4yMTA3Olx0XHRpZiAoIW5ldGlmX2lzX211bHRpcXVldWUoZGV2KSkge1xuMjEwODpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtNdWx0aS1xdWV1ZSBkZXZpY2UgaXMgcmVxdWlyZWRcJiMzNDspO1xuMjEwOTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4yMTEwOlx0XHR9XG4yMTExOlx0XG4yMTEyOlx0XHRxLVx1MDAzZXFkaXNjcyA9IGt6YWxsb2Nfb2JqcyhxLVx1MDAzZXFkaXNjc1swXSwgZGV2LVx1MDAzZW51bV90eF9xdWV1ZXMpO1xuMjExMzpcdFx0aWYgKCFxLVx1MDAzZXFkaXNjcylcbjIxMTQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMTE1Olx0XG4yMTE2Olx0XHRpZiAoIW9wdClcbjIxMTc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMTE4Olx0XG4yMTE5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbjIxMjA6XHRcdFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODI5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ2FsbCB0byBgdGFwcmlvX2luaXRgKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBub3cgb24gdGhlIGB0YXByaW9faW5pdGAgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIFdoYXQmIzM5O3MgaXQgaW5pdGlhbGl6aW5nPyBJcyBpdCBzZXR0aW5nIHVwIGRhdGEgc3RydWN0dXJlcywgY29uZmlndXJpbmcgaGFyZHdhcmUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBpdHNlbGYgZ2l2ZXMgYSBjbHVlIOKAkyBpbml0aWFsaXphdGlvbiBpcyB0aGUga2V5LiBCdXQgSSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBMZXQmIzM5O3Mgc3RhcnQgYnkgYWN0dWFsbHkgbG9va2luZyBhdCB0aGUgZnVuY3Rpb27igJlzIGltcGxlbWVudGF0aW9uLCBsaW5lIGJ5IGxpbmUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgbWVudGFsbHkgdHJhY2luZyBleGVjdXRpb24gYW5kIHRoaW5rIGFib3V0IGhvdyBJIHdvdWxkIGRlc2lnbiB0aGlzIGZ1bmN0aW9uIG15c2VsZiwgd2hhdCBlZGdlIGNhc2VzIG1pZ2h0IGJlIHByZXNlbnQsIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGUgZnVuY3Rpb27igJlzIGRlc2lnbiBoYXMgZm9yIGxhdGVyIHBlcmZvcm1hbmNlIGFuZCBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjEyMTpcdFx0XHRzdHJ1Y3QgUWRpc2MgKnFkaXNjO1xuMjEyMjpcdFxuMjEyMzpcdFx0XHRkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7XG4yMTI0Olx0XHRcdHFkaXNjID0gcWRpc2NfY3JlYXRlX2RmbHQoZGV2X3F1ZXVlLFxuMjEyNTpcdFx0XHRcdFx0XHQgIFx1MDAyNnBmaWZvX3FkaXNjX29wcyxcbjIxMjY6XHRcdFx0XHRcdFx0ICBUQ19IX01BS0UoVENfSF9NQUooc2NoLVx1MDAzZWhhbmRsZSksXG4yMTI3Olx0XHRcdFx0XHRcdFx0ICAgIFRDX0hfTUlOKGkgJiM0MzsgMSkpLFxuMjEyODpcdFx0XHRcdFx0XHQgIGV4dGFjayk7XG4yMTI5Olx0XHRcdGlmICghcWRpc2MpXG4yMTMwOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMTMxOlx0XG4yMTMyOlx0XHRcdGlmIChpIFx1MDAzYyBkZXYtXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKVxuMjEzMzpcdFx0XHRcdHFkaXNjX2hhc2hfYWRkKHFkaXNjLCBmYWxzZSk7XG4yMTM0Olx0XG4yMTM1Olx0XHRcdHEtXHUwMDNlcWRpc2NzW2ldID0gcWRpc2M7XG4yMTM2Olx0XHR9XG4yMTM3Olx0XG4yMTM4Olx0XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIFRDX1FPUFRfTUFYX1FVRVVFOyB0YyYjNDM7JiM0MzspXG4yMTM5Olx0XHRcdHEtXHUwMDNlZnBbdGNdID0gVENfRlBfRVhQUkVTUztcbjIxNDA6XHRcbjIxNDE6XHRcdHRhcHJpb19kZXRlY3RfYnJva2VuX21xcHJpbyhxKTtcbjIxNDI6XHRcbjIxNDM6XHRcdHJldHVybiB0YXByaW9fY2hhbmdlKHNjaCwgb3B0LCBleHRhY2spO1xuMjE0NDpcdH1cbjIxNDU6XHRcbjIxNDY6XHRzdGF0aWMgdm9pZCB0YXByaW9fYXR0YWNoKHN0cnVjdCBRZGlzYyAqc2NoKVxuMjE0NzpcdHtcbjIxNDg6XHRcdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4yMTQ5Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XG4yMTUwOlx0XHR1bnNpZ25lZCBpbnQgbnR4O1xuMjE1MTpcdFxuMjE1MjpcdFx0LyogQXR0YWNoIHVuZGVybHlpbmcgcWRpc2MgKi9cbjIxNTM6XHRcdGZvciAobnR4ID0gMDsgbnR4IFx1MDAzYyBkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgbnR4JiM0MzsmIzQzOykge1xuMjE1NDpcdFx0XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgbnR4KTtcbjIxNTU6XHRcdFx0c3RydWN0IFFkaXNjICpvbGQsICpkZXZfcXVldWVfcWRpc2M7XG4yMTU2Olx0XG4yMTU3Olx0XHRcdGlmIChGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSkge1xuMjE1ODpcdFx0XHRcdHN0cnVjdCBRZGlzYyAqcWRpc2MgPSBxLVx1MDAzZXFkaXNjc1tudHhdO1xuMjE1OTpcdFxuMjE2MDpcdFx0XHRcdC8qIEluIG9mZmxvYWQgbW9kZSwgdGhlIHJvb3QgdGFwcmlvIHFkaXNjIGlzIGJ5cGFzc2VkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFRBUFJJTyBRZGlzYyBDb25maWd1cmF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBgdGFwcmlvX2luaXRgIHVsdGltYXRlbHkgY2FsbHMgYHRhcHJpb19jaGFuZ2VgIC0gdGhhdCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nOiBgdGFwcmlvX2NoYW5nZWAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGNvbmZpZ3VyaW5nIHRoZSBUQVBSSU8gcWRpc2MuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIG1pbmltdW0gaW50ZXJ2YWwgY2hlY2sgZm9yIHNvZnR3YXJlIHNjaGVkdWxpbmcsIHdoaWNoIGlzIGludGVuZGVkIHRvIGF2b2lkIENQVSBsaXZlbG9jayBzY2VuYXJpb3MgY2F1c2VkIGJ5IGV4dHJlbWVseSBzaG9ydCBocnRpbWVyIGludGVydmFscy4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgcmVhc29uYWJsZSBjaGFuZ2U7IGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgcm9idXN0bmVzcy4gVGhlIHJlbGV2YW50IGNvbmZpZyBzeW1ib2wgaXMsIGFzIGV4cGVjdGVkLCBgTkVUX1NDSF9UQVBSSU9gLiBJJiMzOTttIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiBgdGFwcmlvX2NoYW5nZWAgYXMgdGhlIGtleSBlbnRyeSBwb2ludC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCYjMzk7cyBzZWUuLi4gYE5FVF9TQ0hfVEFQUklPYCBpcyBhIHRyaXN0YXRlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBhcmUgdGhlcmUgYW55ICpkZXBlbmRlbmNpZXMqIGZvciBgTkVUX1NDSF9UQVBSSU9gPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfVEFQUklPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MTY3PWNvbmZpZyBORVRfU0NIX01RUFJJT19MSUJcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0xNzEtXG5uZXQvc2NoZWQvS2NvbmZpZzoxNzI6Y29uZmlnIE5FVF9TQ0hfVEFQUklPXG5uZXQvc2NoZWQvS2NvbmZpZy0xNzMtXHR0cmlzdGF0ZSBcJiMzNDtUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIFNjaGVkdWxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjA1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIE5ldHdvcmsgU2NoZWR1bGVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc2NoZWR1bGluZyBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBgbmV0L3NjaGVkL0tjb25maWdgIGFyb3VuZCBsaW5lIDE3Mi4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiBtaWdodCBiZSB3aGVyZSBhIGNlcnRhaW4gc2V0dGluZyBvciBmZWF0dXJlIHJlbGF0ZWQgdG8uLi4gW1VzZXImIzM5O3MgZmllbGQgb2YgZXhwZXJ0aXNlLCBpbmZlcnJlZCwgZS5nLiwgdHJhZmZpYyBzaGFwaW5nLCBRb1MsIHF1ZXVlIG1hbmFnZW1lbnQsIGV0Yy5dLi4uIGlzIGRlZmluZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBvcHRpb25zLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgY29tcG9uZW50IGlzIGNvbmZpZ3VyZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29yayBzdGFjay4gSSBhbnRpY2lwYXRlIHRoZXJlIHdpbGwgYmUgZGV0YWlscyByZWdhcmRpbmcgYW55IHBhcmFtZXRlcnMgb3IgY29uc3RyYWludHMgb24gdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBhcHBseSBpbiBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzI6XHRjb25maWcgTkVUX1NDSF9UQVBSSU9cbiAxNzM6XHRcdHRyaXN0YXRlIFwmIzM0O1RpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXCYjMzQ7XG4gMTc0Olx0XHRzZWxlY3QgTkVUX1NDSF9NUVBSSU9fTElCXG4gMTc1Olx0XHRoZWxwXG4gMTc2Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIHBhY2tldFxuIDE3NzpcdFx0ICBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAxNzg6XHRcbiAxNzk6XHRcdCAgU2VlIHRoZSB0b3Agb2YgXHUwMDNjZmlsZTpuZXQvc2NoZWQvc2NoX3RhcHJpby5jXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXG4gMTgwOlx0XG4gMTgxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gdGhlIEJlc3QgRm9jdXMgU3ltYm9sIGZvciBUcmFjaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGFuZCB0aGlua2luZywgaWRlYWxseSwgSSB3YW50IGEgZ29vZCBmb2N1cyBzeW1ib2wgZm9yIHRyYWNpbmcgdGhpcyBgTkVUX1NDSF9UQVBSSU9gIGNvZGUuIFRoZSBrZXkgaXMgdG8gZmluZCBzb21ldGhpbmcgdGhhdCYjMzk7cyBzZWxmLWNvbnRhaW5lZCBhbmQgcmVsZXZhbnQuIE5vIG90aGVyIGRlcGVuZGVuY2llcy4uLnJpZ2h0LCBzbyB3ZSYjMzk7cmUgZ29vZCB3aXRoIGp1c3QgYE5FVF9TQ0hfVEFQUklPYC4KClRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcG90ZW50aWFsIGZvciBgdGFwcmlvX2NoYW5nZWAuIE5vdywgaXMgaXQgc3RhdGljPyBMZXQmIzM5O3MgdmVyaWZ5Li4ueWVwLCBpdCBpcy4gV2FpdCBhIHNlY29uZCwgdGhlIHByb21wdCBpcyB0ZWxsaW5nIG1lIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBmdW5jdGlvbnMgKmNhbiogYmUgaW5saW5lZC4gQnV0Li4uYHRhcHJpb19jaGFuZ2VgIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgdGFwcmlvX3FkaXNjX29wc2AuIFNvLCB0aGUgY29tcGlsZXIgKndvbiYjMzk7dCogaW5saW5lIGl0IGJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgdGFrZW4uCgpIbW0sIG9rYXkuIElzIHRoZXJlIGFueXRoaW5nIGVsc2U/ICBUaGUgcWRpc2Mgb3BzIGFyZSByZWdpc3RlcmVkIHdpdGggYHJlZ2lzdGVyX3FkaXNjYCwgd2hpY2ggaXMgZ29vZCBidXQgcHJldHR5IGdlbmVyaWMuIFRoZSBuZXRsaW5rIGludGVyZmFjZSB0aGVuIGNhbGxzIGBxZGlzY19jcmVhdGVgIHdoaWNoIGxlYWRzIHRvIGBvcHMtJmd0O2luaXRgIHdoaWNoIGlzIGB0YXByaW9faW5pdGAsIGFuZCBgcWRpc2NfY2hhbmdlYCB3aGljaCBjYWxscyBgb3BzLSZndDtjaGFuZ2VgLCB3aGljaCBpcyBgdGFwcmlvX2NoYW5nZWAuICBTaW5jZSBgdGFwcmlvX2NoYW5nZWAgKmlzKiBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgaXQmIzM5O2xsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYW5kIGJlIHRyYWNlYWJsZSwgc28gdGhhdCYjMzk7cyBnb29kISBJZiBJIHdlbnQgd2l0aCBhIG5vbi1zdGF0aWMgb3B0aW9uLCBteSBjaG9pY2VzIHdvdWxkIGJlIGBxZGlzY19jcmVhdGVgIG9yIGBxZGlzY19jaGFuZ2VgLCB3aGljaCBhcmUganVzdCB0b28gZGFtbiBnZW5lcmljIHRvIGJlIGhlbHBmdWwgaGVyZS4gIFNvLCBJIHRoaW5rIEkmIzM5O20gc3RpbGwgY29taW5nIGJhY2sgdG8gYHRhcHJpb19jaGFuZ2VgLiBJdCYjMzk7cyBzdGF0aWMsIGJ1dCB1c2FibGUuIEl0JiMzOTtzIHRoZSBiZXN0IGZvY3VzIEkmIzM5O20gc2VlaW5nLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgaXQgaXMgaW5kZWVkIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODE1PXN0YXRpYyBpbnQgdGFwcmlvX21xcHJpb19jbXAoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MzQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE4MzU6c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MzYtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIwODE9c3RhdGljIGludCB0YXByaW9faW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA5NC1cdC8qIFdlIG9ubHkgc3VwcG9ydCBzdGF0aWMgY2xvY2tpZHMuIFVzZSBhbiBpbnZhbGlkIHZhbHVlIGFzIGRlZmF1bHRcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA5NTpcdCAqIGFuZCBnZXQgdGhlIHZhbGlkIG9uZSBvbiB0YXByaW9fY2hhbmdlKCkuXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwOTYtXHQgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNDItXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIxNDM6XHRyZXR1cm4gdGFwcmlvX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE0NC19XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTUzPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTctXHQuaW5pdFx0XHQ9IHRhcHJpb19pbml0LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTU4Olx0LmNoYW5nZVx0XHQ9IHRhcHJpb19jaGFuZ2UsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTktXHQuZGVzdHJveVx0PSB0YXByaW9fZGVzdHJveSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NjQKCQkJCQkJCW91dHB1dDogMTA4CgkJCQkJCQl0aG91Z2h0czogNTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVEFQUklPIFNjaGVkdWxlciBQYXRjaCoqCgpPa2F5LCBzbyBgdGFwcmlvX2NoYW5nZWAgaXMgc3RhdGljLCB3aGljaCBpcyB3aHkgaXQmIzM5O3Mgbm90IGlubGluZWQsIHNpbmNlIGl0IGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIEkmIzM5O2xsIGtlZXAgYHRhcHJpb19jaGFuZ2VgIGFzIHRoZSBmb2N1cyBoZXJlLiBMZXQgbWUgcmUtZXhhbWluZSB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhIG1pbmltdW0gaW50ZXJ2YWwgdG8gdGhlIHNvZnR3YXJlIHNjaGVkdWxlciwgc3BlY2lmaWNhbGx5IHVzaW5nIGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYC4gVGhlIGNvbW1lbnQgY2xhcmlmaWVzIHRoYXQgd2UgbmVlZCB0aGlzIHRvIGF2b2lkIGxpdmVsb2NraW5nIHRoZSBDUFUsIGFuZCB0aGF0IHRoaXMgbWluaW11bSBoYXMgdG8gZXhjZWVkIHRoZSBjb3N0IG9mIG9uZSBgYWR2YW5jZV9zY2hlZCgpYCBpbnZvY2F0aW9uLgoKTG9va2luZyBhdCB0aGUgY29kZSwgYHRhcHJpb19taW5faW50ZXJ2YWwoKWAgc2VlbXMgdG8gYmUgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBpdCBzZWVtcyB0byBoYXZlIHJlcGxhY2VkIGBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pYCBpbiB0d28gcGxhY2VzOyBpbnNpZGUgYGZpbGxfc2NoZWRfZW50cnkoKWAgYW5kIGluc2lkZSBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgLiBUaGUgc2Vjb25kIGNhc2UgaW52b2x2ZXMgYSBjb21wYXJpc29uOiBgbmV3LSZndDtjeWNsZV90aW1lICZsdDsgKHM2NCluZXctJmd0O251bV9lbnRyaWVzICogdGFwcmlvX21pbl9pbnRlcnZhbChxKWAuIE5vdyBJIGhhdmUgaXQuIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCBgY3ljbGVfdGltZWAgaXMgbm90IHRvbyBzbWFsbCByZWxhdGl2ZSB0byB0aGUgbnVtYmVyIG9mIGVudHJpZXMgYW5kIHRoZWlyIG1pbmltdW0gZHVyYXRpb24uIFRoaXMgaXMgYWxsIGdvb2QgYW5kIG1ha2VzIHNlbnNlIGluIHRlcm1zIG9mIGZ1bmN0aW9uYWxpdHkuIEkgd2lsbCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvbmZpZyBgTkVUX1NDSF9UQVBSSU9gLgoKVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBlZGdlIGNhc2VzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLCBzbyBJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWluaW11bSBpbnRlcnZhbCBjaGVjayBmb3Igc29mdHdhcmUgc2NoZWR1bGluZyBpbiB0aGUgdGFwcmlvIHFkaXNjIHRvIHByZXZlbnQgQ1BVIGxpdmVsb2NrcyBjYXVzZWQgYnkgdmVyeSBzbWFsbCBocnRpbWVyIGludGVydmFscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgcWRpc2MgYWRkL2NoYW5nZSkgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWluaW11bSBpbnRlcnZhbCBjaGVjayBmb3Igc29mdHdhcmUgc2NoZWR1bGluZyBpbiB0aGUgdGFwcmlvIHFkaXNjIHRvIHByZXZlbnQgQ1BVIGxpdmVsb2NrcyBjYXVzZWQgYnkgdmVyeSBzbWFsbCBocnRpbWVyIGludGVydmFscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgcWRpc2MgYWRkL2NoYW5nZSkgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIENQVSBsaXZlbG9jay9zb2Z0IGxvY2t1cCBpc3N1ZSBpbiB0aGUgdGFwcmlvIHNjaGVkdWxlciBieSBlbmZvcmNpbmcgYSBtaW5pbXVtIGhydGltZXIgaW50ZXJ2YWwgKGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCkgd2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQuIEl0IG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgaW50ZXJ2YWxgIGFuZCBgY3ljbGVfdGltZWAgcGFyc2VkIGZyb20gbmV0bGluayBhdHRyaWJ1dGVzLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaCAoc3VjaCBhcyBzb2Z0IGxvY2t1cHMgb3Igb3V0LW9mLWJvdW5kcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSB0aGUgc29mdCBsb2NrdXAgZGV0ZWN0b3Igb3IgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE4MDY5NTAyMzdhMmYxZTIyY2NmZDlhZTY4NWY1M2Q5MGNhYmM2YmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwMjoyMzo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCmluZGV4IDQ1MjQ1MTU3ZTAwYTYuLjJiZjRjYWUxNjRiYzIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF90YXByaW8uYwpAQCAtNDksNiAmIzQzOzQ5LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSB0YXByaW9faGF2ZV93b3JraW5nX21xcHJpbzsKICAqLwogI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3CiAKJiM0MzsvKiBUaGUgc29mdHdhcmUgc2NoZWR1bGVyIGNhbm5vdCBzdXN0YWluIGhydGltZXIgaW50ZXJ2YWxzIHNtYWxsZXIgdGhhbgomIzQzOyAqIHRoaXMgd2l0aG91dCBsaXZlbG9ja2luZyB0aGUgQ1BVLiBUaGUgdmFsdWUgbXVzdCBleGNlZWQgdGhlIGNvc3Qgb2YKJiM0MzsgKiBvbmUgYWR2YW5jZV9zY2hlZCgpIGludm9jYXRpb24gKGxvY2sgYWNxdWlzaXRpb24sIGJ1ZGdldCByZWNvbXB1dGF0aW9uLAomIzQzOyAqIFRYIHNvZnRpcnEpIHdpdGggbWFyZ2luLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyAoMTAwICogTlNFQ19QRVJfVVNFQykKJiM0MzsKIHN0cnVjdCBzY2hlZF9lbnRyeSB7CiAJLyogRHVyYXRpb25zIGJldHdlZW4gdGhpcyBHQ0wgZW50cnkgYW5kIHRoZSBHQ0wgZW50cnkgd2hlcmUgdGhlCiAJICogcmVzcGVjdGl2ZSB0cmFmZmljIGNsYXNzIGdhdGUgY2xvc2VzCkBAIC0yNTksNiAmIzQzOzI2NiwxNiBAQCBzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKQogCXJldHVybiBkaXZfdTY0KGxlbiAqIGF0b21pYzY0X3JlYWQoJmFtcDtxLSZndDtwaWNvc19wZXJfYnl0ZSksIFBTRUNfUEVSX05TRUMpOwogfQogCiYjNDM7c3RhdGljIGludCB0YXByaW9fbWluX2ludGVydmFsKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpCiYjNDM7ewomIzQzOwlpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTsKJiM0MzsKJiM0MzsJaWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLSZndDtmbGFncykpCiYjNDM7CQltaW5fZHVyYXRpb24gPSBtYXhfdChpbnQsIG1pbl9kdXJhdGlvbiwgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyk7CiYjNDM7CiYjNDM7CXJldHVybiBtaW5fZHVyYXRpb247CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkdXJhdGlvbl90b19sZW5ndGgoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgdTY0IGR1cmF0aW9uKQogewogCXJldHVybiBkaXZfdTY0KGR1cmF0aW9uICogUFNFQ19QRVJfTlNFQywgYXRvbWljNjRfcmVhZCgmYW1wO3EtJmd0O3BpY29zX3Blcl9ieXRlKSk7CkBAIC0xMDM4LDcgJiM0MzsxMDU1LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJCSAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LAogCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKLQlpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTsKJiM0MzsJaW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7CiAJdTMyIGludGVydmFsID0gMDsKIAogCWlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pCkBAIC0xMDU0LDcgJiM0MzsxMDcxLDggQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJCXRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfSU5URVJWQUxdKTsKIAogCS8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYWxsb3cgYXQgbGVhc3QgdGhlIG1pbmltdW0gZXRoZXJuZXQKLQkgKiBmcmFtZSB0byBnbyBvdXQuCiYjNDM7CSAqIGZyYW1lIHRvIGdvIG91dC4gV2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQsIHRoZQomIzQzOwkgKiBpbnRlcnZhbCBtdXN0IGFsc28gYmUgYXQgbGVhc3QgdGhlIG1pbmltdW0gaHJ0aW1lciBpbnRlcnZhbC4KIAkgKi8KIAlpZiAoaW50ZXJ2YWwgJmx0OyBtaW5fZHVyYXRpb24pIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0ludmFsaWQgaW50ZXJ2YWwgZm9yIHNjaGVkdWxlIGVudHJ5JiMzNDspOwpAQCAtMTE2Niw3ICYjNDM7MTE4NCw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJbmV3LSZndDtjeWNsZV90aW1lID0gY3ljbGU7CiAJfQogCi0JaWYgKG5ldy0mZ3Q7Y3ljbGVfdGltZSAmbHQ7IG5ldy0mZ3Q7bnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7CiYjNDM7CWlmIChuZXctJmd0O2N5Y2xlX3RpbWUgJmx0OyAoczY0KW5ldy0mZ3Q7bnVtX2VudHJpZXMgKiB0YXByaW9fbWluX2ludGVydmFsKHEpKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gc21hbGwmIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjQKCQkJCQkJCW91dHB1dDogMTYwCgkJCQkJCQl0aG91Z2h0czogMzY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRBUFJJTyBTY2hlZHVsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSBzb2xpZCwgc3RyYWlnaHRmb3J3YXJkIGJ1ZyBmaXguIEl0IGludHJvZHVjZXMgYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgIGFuZCBgdGFwcmlvX21pbl9pbnRlcnZhbCgpYCwgYW5kIGludGVsbGlnZW50bHkgcmVwbGFjZXMgdGhlIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pYCB3aXRoIGB0YXByaW9fbWluX2ludGVydmFsKHEpYCBpbiB0aGUga2V5IGZ1bmN0aW9ucyBgZmlsbF9zY2hlZF9lbnRyeSgpYCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYC4KClRoZSBjb3JlIGlzc3VlIHRoaXMgYWRkcmVzc2VzIGlzIGEgcG90ZW50aWFsIENQVSBsaXZlbG9jayBzY2VuYXJpby4gSWYgdGhlIGhhcmR3YXJlIHRpbWVyIGludGVydmFscyBiZWNvbWUgdG9vIHNtYWxsLCB0aGUgc29mdHdhcmUgc2NoZWR1bGVyIGNhbiBlZmZlY3RpdmVseSBsb2NrIHVwIHRoZSBDUFUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBkZW5pYWwtb2Ytc2VydmljZSBjb25kaXRpb24uIFRoaXMgcGF0Y2ggY29ycmVjdGx5IGVuZm9yY2VzIGEgbWluaW11bSBpbnRlcnZhbCwgcHJldmVudGluZyB0aGF0IGZyb20gaGFwcGVuaW5nLiBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCgpNeSBmaXJzdCB0aG91Z2h0IHdhcyB0byBpbW1lZGlhdGVseSBjaGVjayBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLCB0aGF0JiMzOTtzIGFsbW9zdCByZWZsZXhpdmUuIEkgc2VlIHRoZSBjaGVjaywgaW4gYGZpbGxfc2NoZWRfZW50cnkoKWAsIGZvciBgaW50ZXJ2YWwgJmx0OyBtaW5fZHVyYXRpb25gLiBBbHNvLCBpbiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgIHRoZXJlJiMzOTtzIGEgY2hlY2sgZm9yIGBuZXctJmd0O2N5Y2xlX3RpbWUgJmx0OyAoczY0KW5ldy0mZ3Q7bnVtX2VudHJpZXMgKiB0YXByaW9fbWluX2ludGVydmFsKHEpYC4gTG9va2luZyBtb3JlIGNsb3NlbHkgYXQgYHRhcHJpb19taW5faW50ZXJ2YWxgIEkgc2VlIGl0JiMzOTtzIHVzaW5nIGBsZW5ndGhfdG9fZHVyYXRpb25gIGFuZCBgRlVMTF9PRkZMT0FEX0lTX0VOQUJMRURgLiBIb3dldmVyLCBJ4oCZbSBjb25maWRlbnQgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaGVyZS4gVGhlIGNoZWNrcyBhcmUgY2xlYXJseSBwcmVzZW50IGFuZCBwcmV2ZW50IHRoZXNlIHNjZW5hcmlvcy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYWRkaW5nIGEgc2FmZXR5IG5ldCB0byBjb250cm9sIHRoZSBwYXJzZWQgbmV0bGluayBhdHRyaWJ1dGVzLgoKVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHByZXZlbnRhdGl2ZSwgYW5kIHRoZSBLQVNBTiBvciBMT0NLREVQIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKHN1Y2ggYXMgdGhlIHNvZnQgbG9ja3VwIGRldGVjdG9yKSBtaWdodCBoYXZlIGNhdWdodCB0aGlzLCBidXQgS01TQU4gaXMgZGVmaW5pdGl2ZWx5IG5vdCByZXF1aXJlZCBoZXJlLiBUaGlzIGlzIGEgQ1BVIGxpdmVsb2NrIGF2b2lkYW5jZSwgbm90IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gSSYjMzk7bSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgYWRkaW5nIHRoZSByZWFzb25zIGZvciBteSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgQ1BVIGxpdmVsb2NrL3NvZnQgbG9ja3VwIGlzc3VlIGluIHRoZSB0YXByaW8gc2NoZWR1bGVyIGJ5IGVuZm9yY2luZyBhIG1pbmltdW0gaHJ0aW1lciBpbnRlcnZhbCAoYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgKSB3aGVuIHNvZnR3YXJlIHNjaGVkdWxpbmcgaXMgdXNlZC4gSXQgbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBpbnRlcnZhbGAgYW5kIGBjeWNsZV90aW1lYCBwYXJzZWQgZnJvbSBuZXRsaW5rIGF0dHJpYnV0ZXMuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIGludm9sdmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhdGNoIChzdWNoIGFzIHNvZnQgbG9ja3VwcyBvciBvdXQtb2YtYm91bmRzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIHRoZSBzb2Z0IGxvY2t1cCBkZXRlY3RvciBvciBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBDUFUgbGl2ZWxvY2svc29mdCBsb2NrdXAgaXNzdWUgaW4gdGhlIHRhcHJpbyBzY2hlZHVsZXIgYnkgZW5mb3JjaW5nIGEgbWluaW11bSBocnRpbWVyIGludGVydmFsIChgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OU2ApIHdoZW4gc29mdHdhcmUgc2NoZWR1bGluZyBpcyB1c2VkLiBJdCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGludGVydmFsYCBhbmQgYGN5Y2xlX3RpbWVgIHBhcnNlZCBmcm9tIG5ldGxpbmsgYXR0cmlidXRlcy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgc29mdCBsb2NrdXBzIG9yIG91dC1vZi1ib3VuZHMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgdGhlIHNvZnQgbG9ja3VwIGRldGVjdG9yIG9yIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyMzo1MC4zOTQzNTM3MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzk3MDIwNzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIX1RBUFJJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhcHJpb19jaGFuZ2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBDUFUgbGl2ZWxvY2svc29mdCBsb2NrdXAgaXNzdWUgaW4gdGhlIHRhcHJpbyBzY2hlZHVsZXIgYnkgZW5mb3JjaW5nIGEgbWluaW11bSBocnRpbWVyIGludGVydmFsIChgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OU2ApIHdoZW4gc29mdHdhcmUgc2NoZWR1bGluZyBpcyB1c2VkLiBJdCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGludGVydmFsYCBhbmQgYGN5Y2xlX3RpbWVgIHBhcnNlZCBmcm9tIG5ldGxpbmsgYXR0cmlidXRlcy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgc29mdCBsb2NrdXBzIG9yIG91dC1vZi1ib3VuZHMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgdGhlIHNvZnQgbG9ja3VwIGRldGVjdG9yIG9yIEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtaW5pbXVtIGludGVydmFsIGNoZWNrIGZvciBzb2Z0d2FyZSBzY2hlZHVsaW5nIGluIHRoZSB0YXByaW8gcWRpc2MgdG8gcHJldmVudCBDUFUgbGl2ZWxvY2tzIGNhdXNlZCBieSB2ZXJ5IHNtYWxsIGhydGltZXIgaW50ZXJ2YWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGVyIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBxZGlzYyBhZGQvY2hhbmdlKSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjM6NTAuMzk0MzU5ODE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc3MDM2OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTgwNjk1MDIzN2EyZjFlMjJjY2ZkOWFlNjg1ZjUzZDkwY2FiYzZiZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwMjoyMzo0OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xcbmluZGV4IDQ1MjQ1MTU3ZTAwYTYuLjJiZjRjYWUxNjRiYzIgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXG5AQCAtNDksNiArNDksMTMgQEAgc3RhdGljIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHRhcHJpb19oYXZlX3dvcmtpbmdfbXFwcmlvO1xcbiAgKi9cXG4gI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3XFxuIFxcbisvKiBUaGUgc29mdHdhcmUgc2NoZWR1bGVyIGNhbm5vdCBzdXN0YWluIGhydGltZXIgaW50ZXJ2YWxzIHNtYWxsZXIgdGhhblxcbisgKiB0aGlzIHdpdGhvdXQgbGl2ZWxvY2tpbmcgdGhlIENQVS4gVGhlIHZhbHVlIG11c3QgZXhjZWVkIHRoZSBjb3N0IG9mXFxuKyAqIG9uZSBhZHZhbmNlX3NjaGVkKCkgaW52b2NhdGlvbiAobG9jayBhY3F1aXNpdGlvbiwgYnVkZ2V0IHJlY29tcHV0YXRpb24sXFxuKyAqIFRYIHNvZnRpcnEpIHdpdGggbWFyZ2luLlxcbisgKi9cXG4rI2RlZmluZSBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TICgxMDAgKiBOU0VDX1BFUl9VU0VDKVxcbitcXG4gc3RydWN0IHNjaGVkX2VudHJ5IHtcXG4gXFx0LyogRHVyYXRpb25zIGJldHdlZW4gdGhpcyBHQ0wgZW50cnkgYW5kIHRoZSBHQ0wgZW50cnkgd2hlcmUgdGhlXFxuIFxcdCAqIHJlc3BlY3RpdmUgdHJhZmZpYyBjbGFzcyBnYXRlIGNsb3Nlc1xcbkBAIC0yNTksNiArMjY2LDE2IEBAIHN0YXRpYyBpbnQgbGVuZ3RoX3RvX2R1cmF0aW9uKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIGludCBsZW4pXFxuIFxcdHJldHVybiBkaXZfdTY0KGxlbiAqIGF0b21pYzY0X3JlYWQoXFx1MDAyNnEtXFx1MDAzZXBpY29zX3Blcl9ieXRlKSwgUFNFQ19QRVJfTlNFQyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdGFwcmlvX21pbl9pbnRlcnZhbChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxcbit7XFxuK1xcdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xcbitcXG4rXFx0aWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdG1pbl9kdXJhdGlvbiA9IG1heF90KGludCwgbWluX2R1cmF0aW9uLCBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TKTtcXG4rXFxuK1xcdHJldHVybiBtaW5fZHVyYXRpb247XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZHVyYXRpb25fdG9fbGVuZ3RoKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHU2NCBkdXJhdGlvbilcXG4ge1xcbiBcXHRyZXR1cm4gZGl2X3U2NChkdXJhdGlvbiAqIFBTRUNfUEVSX05TRUMsIGF0b21pYzY0X3JlYWQoXFx1MDAyNnEtXFx1MDAzZXBpY29zX3Blcl9ieXRlKSk7XFxuQEAgLTEwMzgsNyArMTA1NSw3IEBAIHN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuLVxcdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xcbitcXHRpbnQgbWluX2R1cmF0aW9uID0gdGFwcmlvX21pbl9pbnRlcnZhbChxKTtcXG4gXFx0dTMyIGludGVydmFsID0gMDtcXG4gXFxuIFxcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pXFxuQEAgLTEwNTQsNyArMTA3MSw4IEBAIHN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxuIFxcdFxcdFxcdHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfSU5URVJWQUxdKTtcXG4gXFxuIFxcdC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYWxsb3cgYXQgbGVhc3QgdGhlIG1pbmltdW0gZXRoZXJuZXRcXG4tXFx0ICogZnJhbWUgdG8gZ28gb3V0LlxcbitcXHQgKiBmcmFtZSB0byBnbyBvdXQuIFdoZW4gc29mdHdhcmUgc2NoZWR1bGluZyBpcyB1c2VkLCB0aGVcXG4rXFx0ICogaW50ZXJ2YWwgbXVzdCBhbHNvIGJlIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGhydGltZXIgaW50ZXJ2YWwuXFxuIFxcdCAqL1xcbiBcXHRpZiAoaW50ZXJ2YWwgXFx1MDAzYyBtaW5fZHVyYXRpb24pIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBpbnRlcnZhbCBmb3Igc2NoZWR1bGUgZW50cnlcXFwiKTtcXG5AQCAtMTE2Niw3ICsxMTg0LDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbiBcXHRcXHRuZXctXFx1MDAzZWN5Y2xlX3RpbWUgPSBjeWNsZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIG5ldy1cXHUwMDNlbnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7XFxuK1xcdGlmIChuZXctXFx1MDAzZWN5Y2xlX3RpbWUgXFx1MDAzYyAoczY0KW5ldy1cXHUwMDNlbnVtX2VudHJpZXMgKiB0YXByaW9fbWluX2ludGVydmFsKHEpKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIidjeWNsZV90aW1lJyBpcyB0b28gc21hbGxcXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjM6NTEuNzcyNDQ0NjM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Nzg3NjM1NzE5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9UQVBSSU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0YXByaW9fY2hhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1pbmltdW0gaW50ZXJ2YWwgY2hlY2sgZm9yIHNvZnR3YXJlIHNjaGVkdWxpbmcgaW4gdGhlIHRhcHJpbyBxZGlzYyB0byBwcmV2ZW50IENQVSBsaXZlbG9ja3MgY2F1c2VkIGJ5IHZlcnkgc21hbGwgaHJ0aW1lciBpbnRlcnZhbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKHRjIHFkaXNjIGFkZC9jaGFuZ2UpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxODA2OTUwMjM3YTJmMWUyMmNjZmQ5YWU2ODVmNTNkOTBjYWJjNmJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDI6MjM6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuaW5kZXggNDUyNDUxNTdlMDBhNi4uMmJmNGNhZTE2NGJjMiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbkBAIC00OSw2ICs0OSwxMyBAQCBzdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgdGFwcmlvX2hhdmVfd29ya2luZ19tcXByaW87XG4gICovXG4gI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3XG4gXG4rLyogVGhlIHNvZnR3YXJlIHNjaGVkdWxlciBjYW5ub3Qgc3VzdGFpbiBocnRpbWVyIGludGVydmFscyBzbWFsbGVyIHRoYW5cbisgKiB0aGlzIHdpdGhvdXQgbGl2ZWxvY2tpbmcgdGhlIENQVS4gVGhlIHZhbHVlIG11c3QgZXhjZWVkIHRoZSBjb3N0IG9mXG4rICogb25lIGFkdmFuY2Vfc2NoZWQoKSBpbnZvY2F0aW9uIChsb2NrIGFjcXVpc2l0aW9uLCBidWRnZXQgcmVjb21wdXRhdGlvbixcbisgKiBUWCBzb2Z0aXJxKSB3aXRoIG1hcmdpbi5cbisgKi9cbisjZGVmaW5lIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMgKDEwMCAqIE5TRUNfUEVSX1VTRUMpXG4rXG4gc3RydWN0IHNjaGVkX2VudHJ5IHtcbiBcdC8qIER1cmF0aW9ucyBiZXR3ZWVuIHRoaXMgR0NMIGVudHJ5IGFuZCB0aGUgR0NMIGVudHJ5IHdoZXJlIHRoZVxuIFx0ICogcmVzcGVjdGl2ZSB0cmFmZmljIGNsYXNzIGdhdGUgY2xvc2VzXG5AQCAtMjU5LDYgKzI2NiwxNiBAQCBzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKVxuIFx0cmV0dXJuIGRpdl91NjQobGVuICogYXRvbWljNjRfcmVhZChcdTAwMjZxLVx1MDAzZXBpY29zX3Blcl9ieXRlKSwgUFNFQ19QRVJfTlNFQyk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgdGFwcmlvX21pbl9pbnRlcnZhbChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxuK3tcbitcdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xuK1xuK1x0aWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSlcbitcdFx0bWluX2R1cmF0aW9uID0gbWF4X3QoaW50LCBtaW5fZHVyYXRpb24sIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMpO1xuK1xuK1x0cmV0dXJuIG1pbl9kdXJhdGlvbjtcbit9XG4rXG4gc3RhdGljIGludCBkdXJhdGlvbl90b19sZW5ndGgoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgdTY0IGR1cmF0aW9uKVxuIHtcbiBcdHJldHVybiBkaXZfdTY0KGR1cmF0aW9uICogUFNFQ19QRVJfTlNFQywgYXRvbWljNjRfcmVhZChcdTAwMjZxLVx1MDAzZXBpY29zX3Blcl9ieXRlKSk7XG5AQCAtMTAzOCw3ICsxMDU1LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0XHQgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSxcbiBcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbi1cdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xuK1x0aW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7XG4gXHR1MzIgaW50ZXJ2YWwgPSAwO1xuIFxuIFx0aWYgKHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfQ01EXSlcbkBAIC0xMDU0LDcgKzEwNzEsOCBAQCBzdGF0aWMgaW50IGZpbGxfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfSU5URVJWQUxdKTtcbiBcbiBcdC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYWxsb3cgYXQgbGVhc3QgdGhlIG1pbmltdW0gZXRoZXJuZXRcbi1cdCAqIGZyYW1lIHRvIGdvIG91dC5cbitcdCAqIGZyYW1lIHRvIGdvIG91dC4gV2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQsIHRoZVxuK1x0ICogaW50ZXJ2YWwgbXVzdCBhbHNvIGJlIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGhydGltZXIgaW50ZXJ2YWwuXG4gXHQgKi9cbiBcdGlmIChpbnRlcnZhbCBcdTAwM2MgbWluX2R1cmF0aW9uKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJJbnZhbGlkIGludGVydmFsIGZvciBzY2hlZHVsZSBlbnRyeVwiKTtcbkBAIC0xMTY2LDcgKzExODQsNyBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4gXHRcdG5ldy1cdTAwM2VjeWNsZV90aW1lID0gY3ljbGU7XG4gXHR9XG4gXG4tXHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIG5ldy1cdTAwM2VudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHtcbitcdGlmIChuZXctXHUwMDNlY3ljbGVfdGltZSBcdTAwM2MgKHM2NCluZXctXHUwMDNlbnVtX2VudHJpZXMgKiB0YXByaW9fbWluX2ludGVydmFsKHEpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCInY3ljbGVfdGltZScgaXMgdG9vIHNtYWxsXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjIzOjUxLjc3MjQ0NjI1NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMzM2MTY3ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgdGFwcmlvIFNjaGVkdWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIFRBUFJJTyBzY2hlZHVsZXIuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBpbnRyb2R1Y2luZyBhIG1pbmltdW0gc29mdHdhcmUgaW50ZXJ2YWwsIGRlZmluZWQgYXMgYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgLCBhbmQgYSBmdW5jdGlvbiBgdGFwcmlvX21pbl9pbnRlcnZhbChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbiwgcmVwbGFjaW5nIHRoZSBoYXJkY29kZWQgYEVUSF9aTEVOYCBkdXJhdGlvbiBjYWxjdWxhdGlvbnMgd2l0aCB0aGlzIG5ldywgcHJlc3VtYWJseSBtb3JlIHNlbnNpYmxlLCBtaW5pbXVtIGludGVydmFsLCB1c2luZyBgdGFwcmlvX21pbl9pbnRlcnZhbChxKWAgd2l0aGluIHRoZSBgZmlsbF9zY2hlZF9lbnRyeWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIGZ1bmN0aW9ucy5cblxuRXNzZW50aWFsbHksIHRoZXkncmUgcHJldmVudGluZyB0aGUgc2NoZWR1bGVyIGZyb20gZ2V0dGluZyBib2dnZWQgZG93biBhbmQgcG90ZW50aWFsbHkgY2F1c2luZyBsaXZlbG9jayBieSBhbGxvd2luZyBleGNlc3NpdmVseSBzaG9ydCBocnRpbWVyIGludGVydmFscyBpbiBzb2Z0d2FyZSBzY2hlZHVsaW5nLiBJdCBtYWtlcyBzZW5zZTsgcmVhbGx5IHRpbnkgaW50ZXJ2YWxzIHdvdWxkIGp1c3QgYnVybiBDUFUgY3ljbGVzIHdpdGhvdXQgYWNjb21wbGlzaGluZyBtdWNoLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgaW1wYWN0cyBob3cgVEFQUklPIHNjaGVkdWxlcyBhcmUgcGFyc2VkIGFuZCB2YWxpZGF0ZWQuIEdpdmVuIHRoYXQgaXQncyBpbiB0aGUgc2NoZWR1bGluZyBjb2RlLCBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2UgdXNpbmcgbmV0bGluayB0aHJvdWdoIGNvbW1hbmRzIGxpa2UgYHRjIHFkaXNjIGFkZC9jaGFuZ2VgLiBJJ2xsIGhhdmUgdG8gZG91YmxlLWNoZWNrLCBidXQgSSdtIHdpbGxpbmcgdG8gYmV0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBgQ09ORklHX05FVF9TQ0hfVEFQUklPYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjE1LjEwODYxODEwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTMxMjk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfU0NIX1RBUFJJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTE2Nz1jb25maWcgTkVUX1NDSF9NUVBSSU9fTElCXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0xNzEtXFxubmV0L3NjaGVkL0tjb25maWc6MTcyOmNvbmZpZyBORVRfU0NIX1RBUFJJT1xcbm5ldC9zY2hlZC9LY29uZmlnLTE3My1cXHR0cmlzdGF0ZSBcXFwiVGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBTY2hlZHVsZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX05FVF9TQ0hfRVRGKVxcdCs9IHNjaF9ldGYub1xcbm5ldC9zY2hlZC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfTkVUX1NDSF9UQVBSSU8pXFx0Kz0gc2NoX3RhcHJpby5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTY1LW9iai0kKENPTkZJR19ORVRfU0NIX0JQRilcXHQrPSBicGZfcWRpc2Mub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNDoxNS4xNjM5MzYxMjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU0ODc1OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVEFQUklPIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgVEFQUklPIHNjaGVkdWxlciBpbXBsZW1lbnRhdGlvbi4gVGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUgaXMgYE5FVF9TQ0hfVEFQUklPYC4gTXkgYXR0ZW50aW9uIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBtb2RpZmljYXRpb25zIHdpdGhpbiBgZmlsbF9zY2hlZF9lbnRyeWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLiBHb29kLCB0aGV5J3ZlIGhpZ2hsaWdodGVkIHRoZSBzcGVjaWZpYyBhcmVhcyBJIG5lZWQgdG8gZm9jdXMgb24uXG5cbkJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBpbmRpY2F0ZXMgdGhhdCB0aGVpciBzY29wZSBpcyBsaW1pdGVkIHdpdGhpbiB0aGUgbW9kdWxlLCBsaWtlbHkgZm9yIGVuY2Fwc3VsYXRpb24uIEJ1dCwgaG1tLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0byBlbnN1cmUgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzLiBMZXQgbWUgY2hlY2sgd2hhdCBhY3R1YWxseSAqY2FsbHMqIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLiBJdCdzIGNydWNpYWwgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gY29udHJpYnV0ZXMgdG8gdGhlIG92ZXJhbGwgc2NoZWR1bGVyIG9wZXJhdGlvbi4gS25vd2luZyBob3cgaXQncyBpbnZva2VkIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgc2NoZWR1bGluZyBsb2dpYyB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjE4LjMxODgxNDc1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU2ODg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYXJzZV90YXByaW9fc2NoZWR1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jPTExMDY9c3RhdGljIGludCBwYXJzZV9zY2hlZF9saXN0KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKmxpc3QsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExNDUtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMTQ2OnN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExNDctXFx0XFx0XFx0XFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTgzNT1zdGF0aWMgaW50IHRhcHJpb19jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkyNy1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE5Mjg6XFx0ZXJyID0gcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHEsIHRiLCBuZXdfYWRtaW4sIGV4dGFjayk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTI5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNDoxOC4zNjkzOTI3NzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDUyMTc3NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBUQVBSSU8gUWRpc2MgTW9kaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gYHRhcHJpb19jaGFuZ2VgIGlzIGZpcmluZy4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyB0aGUgYC5jaGFuZ2VgIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgVEFQUklPIHFkaXNjLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXMgd2hhdCB0cmlnZ2VycyB0aGlzIGNhbGxiYWNrLiBJdCdzIHNhZmUgdG8gYXNzdW1lIHNvbWUgYXNwZWN0IG9mIHRoZSBUQVBSSU8gc2NoZWR1bGUgaXMgYmVpbmcgYWx0ZXJlZC4gVGhlIGNydWNpYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHNjaGVkdWxlIGl0c2VsZiwgd2hpY2gsIGZyb20gdGhlIGNvZGUsIEkgc2VlIGlzIHBhcnNlZCB2aWEgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAuIFxuXG5CZWZvcmUgZGlnZ2luZyB0b28gZGVlcCBpbnRvIHRoYXQgcGFyc2luZyBsb2dpYywgbGV0J3Mgc3RlcCBiYWNrIGZvciBhIG1vbWVudC4gSW5zdGVhZCBvZiBpbW1lZGlhdGVseSBkaXZpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgc2NoZWR1bGUsIEkgbmVlZCB0byBjaGVjayB3aGF0IHFkaXNjIG9wZXJhdGlvbnMgcmVsYXRlIHRvIHRhcHJpby4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBvZiB0cnV0aCwgYW5kIG5vdCBtaXNzaW5nIGEgbnVhbmNlIGluIGhvdyB0aGlzIHdvcmtzLiBJIHdhbnQgdG8gaGF2ZSB0aGUgY29udGV4dCBvZiB0aGUgb3ZlcmFsbCBUQVBSSU8gaW1wbGVtZW50YXRpb24gZnJlc2ggaW4gbXkgbWluZC4gV2hlcmUgYXJlIHRob3NlIHFkaXNjIG9wZXJhdGlvbnMgZGVmaW5lZCwgYW5kIGhvdyBkbyB0aGV5IGludGVyYWN0IHdpdGggdGhpcyBgdGFwcmlvX2NoYW5nZWAgY2FsbGJhY2s/IFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wbGljYXRpb25zIG9mIHRoaXMgbW9kaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTY5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjQ6MjEuODIxNTczMDg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTMyNzUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXByaW9fcWRpc2Nfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHRhcHJpb19jbGFzc19vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTUzOnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTQtXFx0LmNsX29wc1xcdFxcdD0gXFx1MDAyNnRhcHJpb19jbGFzc19vcHMsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI1NzU9c3RhdGljIGludCBfX2luaXQgdGFwcmlvX21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODEtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTgyOlxcdHJldHVybiByZWdpc3Rlcl9xZGlzYyhcXHUwMDI2dGFwcmlvX3FkaXNjX29wcyk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTgzLX1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjU4NT1zdGF0aWMgdm9pZCBfX2V4aXQgdGFwcmlvX21vZHVsZV9leGl0KHZvaWQpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTg2LXtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1ODc6XFx0dW5yZWdpc3Rlcl9xZGlzYyhcXHUwMDI2dGFwcmlvX3FkaXNjX29wcyk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTg4LVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZ0YXByaW9fZGV2aWNlX25vdGlmaWVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjQ6MjEuOTI2OTA4NTE1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1ODYyMzMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHRhcHJpb19xZGlzY19vcHNgIFN0cnVjdHVyZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGB0YXByaW9fcWRpc2Nfb3BzYCBzdHJ1Y3R1cmUuIEknbSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB0aGUgZnVuY3Rpb25zIGV4cG9zZWQgaGVyZSwgbmF0dXJhbGx5LiBMZXQncyBzZWUgd2hhdCdzIGF2YWlsYWJsZSBmb3IgaW50ZXJhY3Rpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzY2hlZHVsZXIgaW50ZXJhY3RzIHdpdGggdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIG1lY2hhbmlzbXMuIFdoYXQgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzPyBJJ20gYW50aWNpcGF0aW5nIGBpbml0YCwgYGRlc3Ryb3lgLCBgZW5xdWV1ZWAsIGBkZXF1ZXVlYCDigJMgdGhlIHVzdWFsIHN1c3BlY3RzLiBCdXQgSSdtIGFsc28gY3VyaW91cyBhYm91dCBhbnkgcG90ZW50aWFsIGhvb2tzIGZvciB0aGluZ3MgbGlrZSByYXRlIGxpbWl0aW5nLCBzaGFwZXIgY29uZmlndXJhdGlvbiwgb3IgbWF5YmUgZXZlbiBpbnRlZ3JhdGlvbiB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgY2FwYWJpbGl0aWVzLCBpZiBhcHBsaWNhYmxlLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBpbnRlcmZhY2UuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBUQVBSSU8gcWRpc2MgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSB0YyBmcmFtZXdvcmsuIEl0J3MgdGltZSB0byBiZWNvbWUgaW50aW1hdGUgd2l0aCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY0MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjI1LjE4NTUzNDk3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI2MDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXByaW9fcWRpc2Nfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHRhcHJpb19jbGFzc19vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTUzOnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTQtXFx0LmNsX29wc1xcdFxcdD0gXFx1MDAyNnRhcHJpb19jbGFzc19vcHMsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI1NzU9c3RhdGljIGludCBfX2luaXQgdGFwcmlvX21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODEtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTgyOlxcdHJldHVybiByZWdpc3Rlcl9xZGlzYyhcXHUwMDI2dGFwcmlvX3FkaXNjX29wcyk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTgzLX1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjU4NT1zdGF0aWMgdm9pZCBfX2V4aXQgdGFwcmlvX21vZHVsZV9leGl0KHZvaWQpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTg2LXtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1ODc6XFx0dW5yZWdpc3Rlcl9xZGlzYyhcXHUwMDI2dGFwcmlvX3FkaXNjX29wcyk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTg4LVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZ0YXByaW9fZGV2aWNlX25vdGlmaWVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjQ6MjUuMjMzODAyNjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0ODI4MjY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgdGFwcmlvX3FkaXNjX29wc2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgYHRhcHJpb19xZGlzY19vcHNgIGFuZCBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBob3cgdGhpcyBRZGlzYyBpcyBpbXBsZW1lbnRlZC4gTXkgZmlyc3QgdGhvdWdodHMgYXJlIGFsd2F5cyBhYm91dCB0aGUgZnVuZGFtZW50YWxzOiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgY29yZSBmdW5jdGlvbnMsIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEknbSBleHBlY3RpbmcgdG8gc2VlIG9wZXJhdGlvbnMgZm9yIGVucXVldWVpbmcsIGRlcXVldWVpbmcsIGhhbmRsaW5nIHN0YXRpc3RpY3MsIGFuZCBwcm9iYWJseSBzb21lIG1ldGhvZHMgcmVsYXRlZCB0byBzZXR0aW5nIHVwIGFuZCB0ZWFyaW5nIGRvd24gdGhlIFFkaXNjIGl0c2VsZi5cblxuSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgdHJhZmZpYyBzaGFwaW5nIGFzcGVjdHM7IHdoYXQgc2NoZWR1bGluZyBhbGdvcml0aG1zIGFyZSBlbXBsb3llZD8gQXJlIHRoZXkgdXNpbmcgdGltZS1hd2FyZSBzaGFwZXIgKFRBUykgZmVhdHVyZXM/IEknbGwgYmUgc2VhcmNoaW5nIGZvciBob3cgdGhleSBhcmUgaGFuZGxpbmcgcGVyLXF1ZXVlIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhlIGZyYW1lIHRyYW5zbWlzc2lvbiBpcyBnb3Zlcm5lZCBiYXNlZCBvbiB0aW1lIGFuZCBwcmlvcml0eS4gR2l2ZW4gdGhhdCBpdCdzIHJlbGF0ZWQgdG8gVEFQUklPLCBJJ20gYW50aWNpcGF0aW5nIHNvbWUgbGV2ZWwgb2YgSUVFRSA4MDIuMVFidiBpbnRlZ3JhdGlvbiBvciBlcXVpdmFsZW50LiBJIHdpbGwgdHJ5IHRvIHZpc3VhbGl6ZSBob3cgdHJhZmZpYyBpcyBiZWluZyBzY2hlZHVsZWQgYW5kIHRyYW5zbWl0dGVkIGJhc2VkIG9uIHZhcmlvdXMgdGltZSB3aW5kb3dzIGFuZCB3aGF0IGtpbmQgb2Ygc3luY2hyb25pemF0aW9uIGNoYWxsZW5nZXMgdGhleSdyZSBoYW5kbGluZywgYXNzdW1pbmcgdGhpcyBRZGlzYyB3aWxsIGJlIHVzZWQgd2l0aCBoaWdoLXByZWNpc2lvbiB0aW1lLXNlbnNpdGl2ZSBuZXR3b3JraW5nLlxuXG5JJ20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCB0aGVyZSB3aWxsIGJlIHNvbWUgY2hlY2tzIGZvciB0aGUgY3VycmVudCB0aW1lIHNvdXJjZSB0aGF0IHRoZXkgYXJlIHVzaW5nLiBJIHdhbnQgdG8ga25vdyBpZiBpdCByZXF1aXJlcyBhIHNwZWNpYWwgb3Igc3BlY2lmaWMgdGltZSBzb3VyY2UgdG8gb3BlcmF0ZS5cblxuSSB3aWxsIGFsc28gYmUgb24gdGhlIGxvb2tvdXQgZm9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gQXJlIHRoZXkgdXNpbmcgYW55IGF0b21pYyBvcGVyYXRpb25zIG9yIHNwaW5sb2Nrcz8gSG93IGlzIGNvbmN1cnJlbmN5IG1hbmFnZWQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgdHJhZGUtb2ZmcyBiZXR3ZWVuIGxhdGVuY3kgYW5kIHRocm91Z2hwdXQ/XG5cbkZpbmFsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb246IGhvdyBjb25maWd1cmF0aW9ucyBhcmUgc2V0LCBob3cgc3RhdGlzdGljcyBhcmUgcmV0cmlldmVkLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHNwZWNpYWwgaW50ZXJmYWNlcyBmb3IgdHVuaW5nIHRoZSBRZGlzYy4gSSB3aWxsIHByb2JhYmx5IGFsc28gYXR0ZW1wdCB0byBjb21wYXJlIGl0IHdpdGggb3RoZXIgc2ltaWxhciBRZGlzY3MgYW5kIHRoZWlyIGFwcHJvYWNoZXMuIEkgd2FudCB0byBzZWUgaWYgYW55IG9mIHRoZWlyIHRlY2huaXF1ZXMgYXJlIGlubm92YXRpdmUuIExldCdzIHNlZSB3aGF0J3MgaW4gc3RvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNDIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNDozMC4zODIwODgxNDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU1MyxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU1MzpcXHRzdGF0aWMgc3RydWN0IFFkaXNjX29wcyB0YXByaW9fcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuMjU1NDpcXHRcXHQuY2xfb3BzXFx0XFx0PSBcXHUwMDI2dGFwcmlvX2NsYXNzX29wcyxcXG4yNTU1OlxcdFxcdC5pZFxcdFxcdD0gXFxcInRhcHJpb1xcXCIsXFxuMjU1NjpcXHRcXHQucHJpdl9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHRhcHJpb19zY2hlZCksXFxuMjU1NzpcXHRcXHQuaW5pdFxcdFxcdD0gdGFwcmlvX2luaXQsXFxuMjU1ODpcXHRcXHQuY2hhbmdlXFx0XFx0PSB0YXByaW9fY2hhbmdlLFxcbjI1NTk6XFx0XFx0LmRlc3Ryb3lcXHQ9IHRhcHJpb19kZXN0cm95LFxcbjI1NjA6XFx0XFx0LnJlc2V0XFx0XFx0PSB0YXByaW9fcmVzZXQsXFxuMjU2MTpcXHRcXHQuYXR0YWNoXFx0XFx0PSB0YXByaW9fYXR0YWNoLFxcbjI1NjI6XFx0XFx0LnBlZWtcXHRcXHQ9IHRhcHJpb19wZWVrLFxcbjI1NjM6XFx0XFx0LmRlcXVldWVcXHQ9IHRhcHJpb19kZXF1ZXVlLFxcbjI1NjQ6XFx0XFx0LmVucXVldWVcXHQ9IHRhcHJpb19lbnF1ZXVlLFxcbjI1NjU6XFx0XFx0LmR1bXBcXHRcXHQ9IHRhcHJpb19kdW1wLFxcbjI1NjY6XFx0XFx0LmR1bXBfc3RhdHNcXHQ9IHRhcHJpb19kdW1wX3N0YXRzLFxcbjI1Njc6XFx0XFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4yNTY4OlxcdH07XFxuMjU2OTpcXHRNT0RVTEVfQUxJQVNfTkVUX1NDSChcXFwidGFwcmlvXFxcIik7XFxuMjU3MDpcXHRcXG4yNTcxOlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgdGFwcmlvX2RldmljZV9ub3RpZmllciA9IHtcXG4yNTcyOlxcdFxcdC5ub3RpZmllcl9jYWxsID0gdGFwcmlvX2Rldl9ub3RpZmllcixcXG4yNTczOlxcdH07XFxuMjU3NDpcXHRcXG4yNTc1OlxcdHN0YXRpYyBpbnQgX19pbml0IHRhcHJpb19tb2R1bGVfaW5pdCh2b2lkKVxcbjI1NzY6XFx0e1xcbjI1Nzc6XFx0XFx0aW50IGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2dGFwcmlvX2RldmljZV9ub3RpZmllcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjMwLjM4MjI3MTk5MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDM1ODQxMTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVEFQUklPIENvZGViYXNlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgVEFQUklPIGNvZGUgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBJIHNlZSBgdGFwcmlvX2luaXRgLCBgdGFwcmlvX2NoYW5nZWAsIGB0YXByaW9fZGVzdHJveWAsIGB0YXByaW9fcmVzZXRgLCBgdGFwcmlvX2F0dGFjaGAsIGB0YXByaW9fcGVla2AsIGB0YXByaW9fZGVxdWV1ZWAsIGB0YXByaW9fZW5xdWV1ZWAsIGB0YXByaW9fZHVtcGAsIGFuZCBgdGFwcmlvX2R1bXBfc3RhdHNgLiBUaGF0J3MgYSBkZWNlbnQgc3VpdGUgb2YgZnVuY3Rpb25zLCBidXQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgcGxheWVycyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcy5cblxuSXQgbG9va3MgbGlrZSB0aGUgcmVhbCB3b3JrIGlzIGJlaW5nIGRvbmUgaW5zaWRlIGBmaWxsX3NjaGVkX2VudHJ5YCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAsIGFuZCB0aGVzZSBhcmUgYm90aCBjYWxsZWQgZnJvbSBgdGFwcmlvX2NoYW5nZWAuIEFoYSEgYHRhcHJpb19jaGFuZ2VgIGlzIGRlZmluaXRlbHkgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbjsgaXQgc2VlbXMgY2VudHJhbCB0byB0aGUgY29yZSBUQVBSSU8gbG9naWMsIGFzIGl0J3MgbW9kaWZ5aW5nIHRob3NlIGtleSBzdHJ1Y3R1cmVzLiBCdXQgSSBzaG91bGQgY2hlY2sgYHRhcHJpb19pbml0YCB0b28sIGp1c3QgdG8gYmUgc3VyZSBpdCBkb2Vzbid0IGluaXRpYWxpemUgYW5kIHRoZW4gY2FsbCBpdCwgd2hpY2ggaXMgbGlrZWx5LiBJdCdzIGdvb2QgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNDozNC40MTgxMTYzNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NjA5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFwcmlvX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIwNDI9c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNTEtXFx0LyogTm90ZSB0aGF0IHRhcHJpb19yZXNldCgpIG1pZ2h0IG5vdCBiZSBjYWxsZWQgaWYgYW4gZXJyb3JcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwNTI6XFx0ICogaGFwcGVucyBpbiBxZGlzY19jcmVhdGUoKSwgYWZ0ZXIgdGFwcmlvX2luaXQoKSBoYXMgYmVlbiBjYWxsZWQuXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDUzLVxcdCAqL1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDgwLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA4MTpzdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDgyLVxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI1NTM9c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgdGFwcmlvX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTU2LVxcdC5wcml2X3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgdGFwcmlvX3NjaGVkKSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1NTc6XFx0LmluaXRcXHRcXHQ9IHRhcHJpb19pbml0LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU1OC1cXHQuY2hhbmdlXFx0XFx0PSB0YXByaW9fY2hhbmdlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNDozNC40NjQ5ODM5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM2MTc3NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjazogYHRhcHJpb19pbml0YCBhbmQgYHRhcHJpb19jaGFuZ2VgKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdGFwcmlvX2luaXRgIGFuZCBgdGFwcmlvX2NoYW5nZWAuIFRoZSBxdWVzdGlvbiBhdCBoYW5kIGlzIHdoZXRoZXIgYHRhcHJpb19pbml0YCBkaXJlY3RseSBjYWxscyBvciBpbmRpcmVjdGx5IHRyaWdnZXJzIGB0YXByaW9fY2hhbmdlYC4gVW5kZXJzdGFuZGluZyB0aGlzIGNvbnRyb2wgZmxvdyBpcyBjcml0aWNhbCBmb3LigKYgd2VsbCwgZnJhbmtseSwgZXZlcnl0aGluZyByZWxhdGVkIHRvIHRpbWluZywgc2NoZWR1bGluZywgYW5kIGVuc3VyaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBpbiB0aGUgVEFQUklPIGNvbnRleHQuIElmIHRoZXJlJ3Mgbm8gZGlyZWN0IGludm9jYXRpb24sIGlzIHRoZXJlIGFuIGV2ZW50LCBhIGZsYWcsIG9yIGEgc2VwYXJhdGUgdGhyZWFkIGNvbW11bmljYXRpbmcgdGhlIG5lZWQgdG8gKnBvdGVudGlhbGx5KiBtb2RpZnkgcGFyYW1ldGVycz8gSWYgaXQgKmlzKiBhIGRpcmVjdCBjYWxsLCBpdCBzaW1wbGlmaWVzIGRlYnVnZ2luZyBjb25zaWRlcmFibHksIGJ1dCBJIGhhdmUgdG8gY29uc2lkZXIgd2hldGhlciBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQgY29ycmVjdGx5IGFuZCB0aGF0IHRoZXJlIGlzIG5vIHVuaW50ZW5kZWQgc2lkZS1lZmZlY3QuIEkga25vdyB0aGVyZSdzIGEgZGVsaWNhdGUgZGFuY2Ugd2l0aCBtdWx0aXBsZSB0YXNrcyB0cnlpbmcgdG8gdGFrZSBjb250cm9sLCBzbyBhbnkgY2FsbCBzZXF1ZW5jZSBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5LiBMZXQncyBzZWUuLi5JIHRoaW5rIEkgd2lsbCB1c2UgYSBkZWJ1Z2dlciB0byBzdGVwIHRocm91Z2ggdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTAxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjQ6MzcuODAxMTY0OTA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwODEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwODE6XFx0c3RhdGljIGludCB0YXByaW9faW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbjIwODI6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4yMDgzOlxcdHtcXG4yMDg0OlxcdFxcdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuMjA4NTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XFxuMjA4NjpcXHRcXHRpbnQgaSwgdGM7XFxuMjA4NzpcXHRcXG4yMDg4OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZxLVxcdTAwM2VjdXJyZW50X2VudHJ5X2xvY2spO1xcbjIwODk6XFx0XFxuMjA5MDpcXHRcXHRocnRpbWVyX3NldHVwKFxcdTAwMjZxLVxcdTAwM2VhZHZhbmNlX3RpbWVyLCBhZHZhbmNlX3NjaGVkLCBDTE9DS19UQUksIEhSVElNRVJfTU9ERV9BQlMpO1xcbjIwOTE6XFx0XFxuMjA5MjpcXHRcXHRxLVxcdTAwM2Vyb290ID0gc2NoO1xcbjIwOTM6XFx0XFxuMjA5NDpcXHRcXHQvKiBXZSBvbmx5IHN1cHBvcnQgc3RhdGljIGNsb2NraWRzLiBVc2UgYW4gaW52YWxpZCB2YWx1ZSBhcyBkZWZhdWx0XFxuMjA5NTpcXHRcXHQgKiBhbmQgZ2V0IHRoZSB2YWxpZCBvbmUgb24gdGFwcmlvX2NoYW5nZSgpLlxcbjIwOTY6XFx0XFx0ICovXFxuMjA5NzpcXHRcXHRxLVxcdTAwM2VjbG9ja2lkID0gLTE7XFxuMjA5ODpcXHRcXHRxLVxcdTAwM2VmbGFncyA9IFRBUFJJT19GTEFHU19JTlZBTElEO1xcbjIwOTk6XFx0XFxuMjEwMDpcXHRcXHRsaXN0X2FkZChcXHUwMDI2cS1cXHUwMDNldGFwcmlvX2xpc3QsIFxcdTAwMjZ0YXByaW9fbGlzdCk7XFxuMjEwMTpcXHRcXG4yMTAyOlxcdFxcdGlmIChzY2gtXFx1MDAzZXBhcmVudCAhPSBUQ19IX1JPT1QpIHtcXG4yMTAzOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJDYW4gb25seSBiZSBhdHRhY2hlZCBhcyByb290IHFkaXNjXFxcIik7XFxuMjEwNDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMjEwNTpcXHRcXHR9XFxuMjEwNjpcXHRcXG4yMTA3OlxcdFxcdGlmICghbmV0aWZfaXNfbXVsdGlxdWV1ZShkZXYpKSB7XFxuMjEwODpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiTXVsdGktcXVldWUgZGV2aWNlIGlzIHJlcXVpcmVkXFxcIik7XFxuMjEwOTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMjExMDpcXHRcXHR9XFxuMjExMTpcXHRcXG4yMTEyOlxcdFxcdHEtXFx1MDAzZXFkaXNjcyA9IGt6YWxsb2Nfb2JqcyhxLVxcdTAwM2VxZGlzY3NbMF0sIGRldi1cXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XFxuMjExMzpcXHRcXHRpZiAoIXEtXFx1MDAzZXFkaXNjcylcXG4yMTE0OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIxMTU6XFx0XFxuMjExNjpcXHRcXHRpZiAoIW9wdClcXG4yMTE3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIxMTg6XFx0XFxuMjExOTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4yMTIwOlxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjQ6MzcuODAxMzcxMDU0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDU4MzYxOTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIHRvIGB0YXByaW9faW5pdGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgbm93IG9uIHRoZSBgdGFwcmlvX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBXaGF0J3MgaXQgaW5pdGlhbGl6aW5nPyBJcyBpdCBzZXR0aW5nIHVwIGRhdGEgc3RydWN0dXJlcywgY29uZmlndXJpbmcgaGFyZHdhcmUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBpdHNlbGYgZ2l2ZXMgYSBjbHVlIOKAkyBpbml0aWFsaXphdGlvbiBpcyB0aGUga2V5LiBCdXQgSSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBMZXQncyBzdGFydCBieSBhY3R1YWxseSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbuKAmXMgaW1wbGVtZW50YXRpb24sIGxpbmUgYnkgbGluZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IG1lbnRhbGx5IHRyYWNpbmcgZXhlY3V0aW9uIGFuZCB0aGluayBhYm91dCBob3cgSSB3b3VsZCBkZXNpZ24gdGhpcyBmdW5jdGlvbiBteXNlbGYsIHdoYXQgZWRnZSBjYXNlcyBtaWdodCBiZSBwcmVzZW50LCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhlIGZ1bmN0aW9u4oCZcyBkZXNpZ24gaGFzIGZvciBsYXRlciBwZXJmb3JtYW5jZSBhbmQgZGVidWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODI5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNDo0Ny44NTk3MzY1MThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEyMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEyMTpcXHRcXHRcXHRzdHJ1Y3QgUWRpc2MgKnFkaXNjO1xcbjIxMjI6XFx0XFxuMjEyMzpcXHRcXHRcXHRkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7XFxuMjEyNDpcXHRcXHRcXHRxZGlzYyA9IHFkaXNjX2NyZWF0ZV9kZmx0KGRldl9xdWV1ZSxcXG4yMTI1OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnBmaWZvX3FkaXNjX29wcyxcXG4yMTI2OlxcdFxcdFxcdFxcdFxcdFxcdCAgVENfSF9NQUtFKFRDX0hfTUFKKHNjaC1cXHUwMDNlaGFuZGxlKSxcXG4yMTI3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBUQ19IX01JTihpICsgMSkpLFxcbjIxMjg6XFx0XFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbjIxMjk6XFx0XFx0XFx0aWYgKCFxZGlzYylcXG4yMTMwOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIxMzE6XFx0XFxuMjEzMjpcXHRcXHRcXHRpZiAoaSBcXHUwMDNjIGRldi1cXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKVxcbjIxMzM6XFx0XFx0XFx0XFx0cWRpc2NfaGFzaF9hZGQocWRpc2MsIGZhbHNlKTtcXG4yMTM0OlxcdFxcbjIxMzU6XFx0XFx0XFx0cS1cXHUwMDNlcWRpc2NzW2ldID0gcWRpc2M7XFxuMjEzNjpcXHRcXHR9XFxuMjEzNzpcXHRcXG4yMTM4OlxcdFxcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIFRDX1FPUFRfTUFYX1FVRVVFOyB0YysrKVxcbjIxMzk6XFx0XFx0XFx0cS1cXHUwMDNlZnBbdGNdID0gVENfRlBfRVhQUkVTUztcXG4yMTQwOlxcdFxcbjIxNDE6XFx0XFx0dGFwcmlvX2RldGVjdF9icm9rZW5fbXFwcmlvKHEpO1xcbjIxNDI6XFx0XFxuMjE0MzpcXHRcXHRyZXR1cm4gdGFwcmlvX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcXG4yMTQ0OlxcdH1cXG4yMTQ1OlxcdFxcbjIxNDY6XFx0c3RhdGljIHZvaWQgdGFwcmlvX2F0dGFjaChzdHJ1Y3QgUWRpc2MgKnNjaClcXG4yMTQ3OlxcdHtcXG4yMTQ4OlxcdFxcdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuMjE0OTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XFxuMjE1MDpcXHRcXHR1bnNpZ25lZCBpbnQgbnR4O1xcbjIxNTE6XFx0XFxuMjE1MjpcXHRcXHQvKiBBdHRhY2ggdW5kZXJseWluZyBxZGlzYyAqL1xcbjIxNTM6XFx0XFx0Zm9yIChudHggPSAwOyBudHggXFx1MDAzYyBkZXYtXFx1MDAzZW51bV90eF9xdWV1ZXM7IG50eCsrKSB7XFxuMjE1NDpcXHRcXHRcXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgbnR4KTtcXG4yMTU1OlxcdFxcdFxcdHN0cnVjdCBRZGlzYyAqb2xkLCAqZGV2X3F1ZXVlX3FkaXNjO1xcbjIxNTY6XFx0XFxuMjE1NzpcXHRcXHRcXHRpZiAoRlVMTF9PRkZMT0FEX0lTX0VOQUJMRUQocS1cXHUwMDNlZmxhZ3MpKSB7XFxuMjE1ODpcXHRcXHRcXHRcXHRzdHJ1Y3QgUWRpc2MgKnFkaXNjID0gcS1cXHUwMDNlcWRpc2NzW250eF07XFxuMjE1OTpcXHRcXG4yMTYwOlxcdFxcdFxcdFxcdC8qIEluIG9mZmxvYWQgbW9kZSwgdGhlIHJvb3QgdGFwcmlvIHFkaXNjIGlzIGJ5cGFzc2VkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjQ3Ljg1OTg5MTk0OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTAwNTQ1NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBUQVBSSU8gUWRpc2MgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBgdGFwcmlvX2luaXRgIHVsdGltYXRlbHkgY2FsbHMgYHRhcHJpb19jaGFuZ2VgIC0gdGhhdCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nOiBgdGFwcmlvX2NoYW5nZWAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGNvbmZpZ3VyaW5nIHRoZSBUQVBSSU8gcWRpc2MuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIG1pbmltdW0gaW50ZXJ2YWwgY2hlY2sgZm9yIHNvZnR3YXJlIHNjaGVkdWxpbmcsIHdoaWNoIGlzIGludGVuZGVkIHRvIGF2b2lkIENQVSBsaXZlbG9jayBzY2VuYXJpb3MgY2F1c2VkIGJ5IGV4dHJlbWVseSBzaG9ydCBocnRpbWVyIGludGVydmFscy4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgcmVhc29uYWJsZSBjaGFuZ2U7IGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSByb2J1c3RuZXNzLiBUaGUgcmVsZXZhbnQgY29uZmlnIHN5bWJvbCBpcywgYXMgZXhwZWN0ZWQsIGBORVRfU0NIX1RBUFJJT2AuIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gYHRhcHJpb19jaGFuZ2VgIGFzIHRoZSBrZXkgZW50cnkgcG9pbnQuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlLi4uIGBORVRfU0NIX1RBUFJJT2AgaXMgYSB0cmlzdGF0ZS4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBhcmUgdGhlcmUgYW55ICpkZXBlbmRlbmNpZXMqIGZvciBgTkVUX1NDSF9UQVBSSU9gPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcxMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjUxLjk2MDQ0MTEyN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NzE3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfVEFQUklPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTE2Nz1jb25maWcgTkVUX1NDSF9NUVBSSU9fTElCXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0xNzEtXFxubmV0L3NjaGVkL0tjb25maWc6MTcyOmNvbmZpZyBORVRfU0NIX1RBUFJJT1xcbm5ldC9zY2hlZC9LY29uZmlnLTE3My1cXHR0cmlzdGF0ZSBcXFwiVGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBTY2hlZHVsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjUyLjAwNTAxNTQ5NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA0MzU1NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgTmV0d29yayBTY2hlZHVsZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsJ3MgbmV0d29yayBzY2hlZHVsaW5nIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGBuZXQvc2NoZWQvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTcyLiBJJ20gZ3Vlc3NpbmcgdGhhdCBwYXJ0aWN1bGFyIHNlY3Rpb24gbWlnaHQgYmUgd2hlcmUgYSBjZXJ0YWluIHNldHRpbmcgb3IgZmVhdHVyZSByZWxhdGVkIHRvLi4uIFtVc2VyJ3MgZmllbGQgb2YgZXhwZXJ0aXNlLCBpbmZlcnJlZCwgZS5nLiwgdHJhZmZpYyBzaGFwaW5nLCBRb1MsIHF1ZXVlIG1hbmFnZW1lbnQsIGV0Yy5dLi4uIGlzIGRlZmluZWQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IG9wdGlvbnMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cy4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgdGhpcyBjb21wb25lbnQgaXMgY29uZmlndXJlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJIGFudGljaXBhdGUgdGhlcmUgd2lsbCBiZSBkZXRhaWxzIHJlZ2FyZGluZyBhbnkgcGFyYW1ldGVycyBvciBjb25zdHJhaW50cyBvbiB0aGUgY29uZmlndXJhdGlvbiB0aGF0IGFwcGx5IGluIG15IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNDo1NS42MDkzNzI4MDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTcyLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcyOlxcdGNvbmZpZyBORVRfU0NIX1RBUFJJT1xcbiAxNzM6XFx0XFx0dHJpc3RhdGUgXFxcIlRpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXFxcIlxcbiAxNzQ6XFx0XFx0c2VsZWN0IE5FVF9TQ0hfTVFQUklPX0xJQlxcbiAxNzU6XFx0XFx0aGVscFxcbiAxNzY6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgVGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBwYWNrZXRcXG4gMTc3OlxcdFxcdCAgc2NoZWR1bGluZyBhbGdvcml0aG0uXFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdCAgU2VlIHRoZSB0b3Agb2YgXFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF90YXByaW8uY1xcdTAwM2UgZm9yIG1vcmUgZGV0YWlscy5cXG4gMTgwOlxcdFxcbiAxODE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjU1LjYwOTQ1ODA4OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk0MTQzNjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiB0aGUgQmVzdCBGb2N1cyBTeW1ib2wgZm9yIFRyYWNpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCB0aGlua2luZywgaWRlYWxseSwgSSB3YW50IGEgZ29vZCBmb2N1cyBzeW1ib2wgZm9yIHRyYWNpbmcgdGhpcyBgTkVUX1NDSF9UQVBSSU9gIGNvZGUuIFRoZSBrZXkgaXMgdG8gZmluZCBzb21ldGhpbmcgdGhhdCdzIHNlbGYtY29udGFpbmVkIGFuZCByZWxldmFudC4gTm8gb3RoZXIgZGVwZW5kZW5jaWVzLi4ucmlnaHQsIHNvIHdlJ3JlIGdvb2Qgd2l0aCBqdXN0IGBORVRfU0NIX1RBUFJJT2AuXG5cblRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcG90ZW50aWFsIGZvciBgdGFwcmlvX2NoYW5nZWAuIE5vdywgaXMgaXQgc3RhdGljPyBMZXQncyB2ZXJpZnkuLi55ZXAsIGl0IGlzLiBXYWl0IGEgc2Vjb25kLCB0aGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gU3RhdGljIGZ1bmN0aW9ucyAqY2FuKiBiZSBpbmxpbmVkLiBCdXQuLi5gdGFwcmlvX2NoYW5nZWAgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGluIGB0YXByaW9fcWRpc2Nfb3BzYC4gU28sIHRoZSBjb21waWxlciAqd29uJ3QqIGlubGluZSBpdCBiZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuLlxuXG5IbW0sIG9rYXkuIElzIHRoZXJlIGFueXRoaW5nIGVsc2U/ICBUaGUgcWRpc2Mgb3BzIGFyZSByZWdpc3RlcmVkIHdpdGggYHJlZ2lzdGVyX3FkaXNjYCwgd2hpY2ggaXMgZ29vZCBidXQgcHJldHR5IGdlbmVyaWMuIFRoZSBuZXRsaW5rIGludGVyZmFjZSB0aGVuIGNhbGxzIGBxZGlzY19jcmVhdGVgIHdoaWNoIGxlYWRzIHRvIGBvcHMtXHUwMDNlaW5pdGAgd2hpY2ggaXMgYHRhcHJpb19pbml0YCwgYW5kIGBxZGlzY19jaGFuZ2VgIHdoaWNoIGNhbGxzIGBvcHMtXHUwMDNlY2hhbmdlYCwgd2hpY2ggaXMgYHRhcHJpb19jaGFuZ2VgLiAgU2luY2UgYHRhcHJpb19jaGFuZ2VgICppcyogc3RhdGljLCBidXQgaXRzIGFkZHJlc3MgaXMgdGFrZW4sIGl0J2xsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYW5kIGJlIHRyYWNlYWJsZSwgc28gdGhhdCdzIGdvb2QhIElmIEkgd2VudCB3aXRoIGEgbm9uLXN0YXRpYyBvcHRpb24sIG15IGNob2ljZXMgd291bGQgYmUgYHFkaXNjX2NyZWF0ZWAgb3IgYHFkaXNjX2NoYW5nZWAsIHdoaWNoIGFyZSBqdXN0IHRvbyBkYW1uIGdlbmVyaWMgdG8gYmUgaGVscGZ1bCBoZXJlLiAgU28sIEkgdGhpbmsgSSdtIHN0aWxsIGNvbWluZyBiYWNrIHRvIGB0YXByaW9fY2hhbmdlYC4gSXQncyBzdGF0aWMsIGJ1dCB1c2FibGUuIEl0J3MgdGhlIGJlc3QgZm9jdXMgSSdtIHNlZWluZy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgaXQgaXMgaW5kZWVkIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI1OjAyLjAwMzYwMzgxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMyOTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXByaW9fY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODE1PXN0YXRpYyBpbnQgdGFwcmlvX21xcHJpb19jbXAoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTgzNC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE4MzU6c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xODM2LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIwODE9c3RhdGljIGludCB0YXByaW9faW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDk0LVxcdC8qIFdlIG9ubHkgc3VwcG9ydCBzdGF0aWMgY2xvY2tpZHMuIFVzZSBhbiBpbnZhbGlkIHZhbHVlIGFzIGRlZmF1bHRcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwOTU6XFx0ICogYW5kIGdldCB0aGUgdmFsaWQgb25lIG9uIHRhcHJpb19jaGFuZ2UoKS5cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwOTYtXFx0ICovXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNDItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMTQzOlxcdHJldHVybiB0YXByaW9fY2hhbmdlKHNjaCwgb3B0LCBleHRhY2spO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE0NC19XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI1NTM9c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgdGFwcmlvX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTU3LVxcdC5pbml0XFx0XFx0PSB0YXByaW9faW5pdCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1NTg6XFx0LmNoYW5nZVxcdFxcdD0gdGFwcmlvX2NoYW5nZSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTktXFx0LmRlc3Ryb3lcXHQ9IHRhcHJpb19kZXN0cm95LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNTowMi4wNDc5MzY4N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDExOTU5Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVEFQUklPIFNjaGVkdWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIGB0YXByaW9fY2hhbmdlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHdoeSBpdCdzIG5vdCBpbmxpbmVkLCBzaW5jZSBpdCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBJJ2xsIGtlZXAgYHRhcHJpb19jaGFuZ2VgIGFzIHRoZSBmb2N1cyBoZXJlLiBMZXQgbWUgcmUtZXhhbWluZSB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIGEgbWluaW11bSBpbnRlcnZhbCB0byB0aGUgc29mdHdhcmUgc2NoZWR1bGVyLCBzcGVjaWZpY2FsbHkgdXNpbmcgYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgLiBUaGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCB3ZSBuZWVkIHRoaXMgdG8gYXZvaWQgbGl2ZWxvY2tpbmcgdGhlIENQVSwgYW5kIHRoYXQgdGhpcyBtaW5pbXVtIGhhcyB0byBleGNlZWQgdGhlIGNvc3Qgb2Ygb25lIGBhZHZhbmNlX3NjaGVkKClgIGludm9jYXRpb24uXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGB0YXByaW9fbWluX2ludGVydmFsKClgIHNlZW1zIHRvIGJlIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgaXQgc2VlbXMgdG8gaGF2ZSByZXBsYWNlZCBgbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKWAgaW4gdHdvIHBsYWNlczsgaW5zaWRlIGBmaWxsX3NjaGVkX2VudHJ5KClgIGFuZCBpbnNpZGUgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYC4gVGhlIHNlY29uZCBjYXNlIGludm9sdmVzIGEgY29tcGFyaXNvbjogYG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyAoczY0KW5ldy1cdTAwM2VudW1fZW50cmllcyAqIHRhcHJpb19taW5faW50ZXJ2YWwocSlgLiBOb3cgSSBoYXZlIGl0LiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgYGN5Y2xlX3RpbWVgIGlzIG5vdCB0b28gc21hbGwgcmVsYXRpdmUgdG8gdGhlIG51bWJlciBvZiBlbnRyaWVzIGFuZCB0aGVpciBtaW5pbXVtIGR1cmF0aW9uLiBUaGlzIGlzIGFsbCBnb29kIGFuZCBtYWtlcyBzZW5zZSBpbiB0ZXJtcyBvZiBmdW5jdGlvbmFsaXR5LiBJIHdpbGwgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb25maWcgYE5FVF9TQ0hfVEFQUklPYC5cblxuVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGVkZ2UgY2FzZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMsIHNvIEkgd2lsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc2NCwiT3V0cHV0VG9rZW5zIjoxMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjU6MTAuNDU5ODk4ODY2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxMTUzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGFwcmlvX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtaW5pbXVtIGludGVydmFsIGNoZWNrIGZvciBzb2Z0d2FyZSBzY2hlZHVsaW5nIGluIHRoZSB0YXByaW8gcWRpc2MgdG8gcHJldmVudCBDUFUgbGl2ZWxvY2tzIGNhdXNlZCBieSB2ZXJ5IHNtYWxsIGhydGltZXIgaW50ZXJ2YWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGVyIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBxZGlzYyBhZGQvY2hhbmdlKSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIX1RBUFJJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhcHJpb19jaGFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWluaW11bSBpbnRlcnZhbCBjaGVjayBmb3Igc29mdHdhcmUgc2NoZWR1bGluZyBpbiB0aGUgdGFwcmlvIHFkaXNjIHRvIHByZXZlbnQgQ1BVIGxpdmVsb2NrcyBjYXVzZWQgYnkgdmVyeSBzbWFsbCBocnRpbWVyIGludGVydmFscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgcWRpc2MgYWRkL2NoYW5nZSkgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI1OjEwLjUzNjAxOTU2NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyODUzMjc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI1OjEwLjUzNjQzNTAxNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3ODI4MTEyMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgQ1BVIGxpdmVsb2NrL3NvZnQgbG9ja3VwIGlzc3VlIGluIHRoZSB0YXByaW8gc2NoZWR1bGVyIGJ5IGVuZm9yY2luZyBhIG1pbmltdW0gaHJ0aW1lciBpbnRlcnZhbCAoYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgKSB3aGVuIHNvZnR3YXJlIHNjaGVkdWxpbmcgaXMgdXNlZC4gSXQgbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBpbnRlcnZhbGAgYW5kIGBjeWNsZV90aW1lYCBwYXJzZWQgZnJvbSBuZXRsaW5rIGF0dHJpYnV0ZXMuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIGludm9sdmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhdGNoIChzdWNoIGFzIHNvZnQgbG9ja3VwcyBvciBvdXQtb2YtYm91bmRzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIHRoZSBzb2Z0IGxvY2t1cCBkZXRlY3RvciBvciBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxODA2OTUwMjM3YTJmMWUyMmNjZmQ5YWU2ODVmNTNkOTBjYWJjNmJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDI6MjM6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuaW5kZXggNDUyNDUxNTdlMDBhNi4uMmJmNGNhZTE2NGJjMiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbkBAIC00OSw2ICs0OSwxMyBAQCBzdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgdGFwcmlvX2hhdmVfd29ya2luZ19tcXByaW87XG4gICovXG4gI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3XG4gXG4rLyogVGhlIHNvZnR3YXJlIHNjaGVkdWxlciBjYW5ub3Qgc3VzdGFpbiBocnRpbWVyIGludGVydmFscyBzbWFsbGVyIHRoYW5cbisgKiB0aGlzIHdpdGhvdXQgbGl2ZWxvY2tpbmcgdGhlIENQVS4gVGhlIHZhbHVlIG11c3QgZXhjZWVkIHRoZSBjb3N0IG9mXG4rICogb25lIGFkdmFuY2Vfc2NoZWQoKSBpbnZvY2F0aW9uIChsb2NrIGFjcXVpc2l0aW9uLCBidWRnZXQgcmVjb21wdXRhdGlvbixcbisgKiBUWCBzb2Z0aXJxKSB3aXRoIG1hcmdpbi5cbisgKi9cbisjZGVmaW5lIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMgKDEwMCAqIE5TRUNfUEVSX1VTRUMpXG4rXG4gc3RydWN0IHNjaGVkX2VudHJ5IHtcbiBcdC8qIER1cmF0aW9ucyBiZXR3ZWVuIHRoaXMgR0NMIGVudHJ5IGFuZCB0aGUgR0NMIGVudHJ5IHdoZXJlIHRoZVxuIFx0ICogcmVzcGVjdGl2ZSB0cmFmZmljIGNsYXNzIGdhdGUgY2xvc2VzXG5AQCAtMjU5LDYgKzI2NiwxNiBAQCBzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKVxuIFx0cmV0dXJuIGRpdl91NjQobGVuICogYXRvbWljNjRfcmVhZChcdTAwMjZxLVx1MDAzZXBpY29zX3Blcl9ieXRlKSwgUFNFQ19QRVJfTlNFQyk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgdGFwcmlvX21pbl9pbnRlcnZhbChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxuK3tcbitcdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xuK1xuK1x0aWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSlcbitcdFx0bWluX2R1cmF0aW9uID0gbWF4X3QoaW50LCBtaW5fZHVyYXRpb24sIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMpO1xuK1xuK1x0cmV0dXJuIG1pbl9kdXJhdGlvbjtcbit9XG4rXG4gc3RhdGljIGludCBkdXJhdGlvbl90b19sZW5ndGgoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgdTY0IGR1cmF0aW9uKVxuIHtcbiBcdHJldHVybiBkaXZfdTY0KGR1cmF0aW9uICogUFNFQ19QRVJfTlNFQywgYXRvbWljNjRfcmVhZChcdTAwMjZxLVx1MDAzZXBpY29zX3Blcl9ieXRlKSk7XG5AQCAtMTAzOCw3ICsxMDU1LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0XHQgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSxcbiBcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbi1cdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xuK1x0aW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7XG4gXHR1MzIgaW50ZXJ2YWwgPSAwO1xuIFxuIFx0aWYgKHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfQ01EXSlcbkBAIC0xMDU0LDcgKzEwNzEsOCBAQCBzdGF0aWMgaW50IGZpbGxfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfSU5URVJWQUxdKTtcbiBcbiBcdC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYWxsb3cgYXQgbGVhc3QgdGhlIG1pbmltdW0gZXRoZXJuZXRcbi1cdCAqIGZyYW1lIHRvIGdvIG91dC5cbitcdCAqIGZyYW1lIHRvIGdvIG91dC4gV2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQsIHRoZVxuK1x0ICogaW50ZXJ2YWwgbXVzdCBhbHNvIGJlIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGhydGltZXIgaW50ZXJ2YWwuXG4gXHQgKi9cbiBcdGlmIChpbnRlcnZhbCBcdTAwM2MgbWluX2R1cmF0aW9uKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJJbnZhbGlkIGludGVydmFsIGZvciBzY2hlZHVsZSBlbnRyeVwiKTtcbkBAIC0xMTY2LDcgKzExODQsNyBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4gXHRcdG5ldy1cdTAwM2VjeWNsZV90aW1lID0gY3ljbGU7XG4gXHR9XG4gXG4tXHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIG5ldy1cdTAwM2VudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHtcbitcdGlmIChuZXctXHUwMDNlY3ljbGVfdGltZSBcdTAwM2MgKHM2NCluZXctXHUwMDNlbnVtX2VudHJpZXMgKiB0YXByaW9fbWluX2ludGVydmFsKHEpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCInY3ljbGVfdGltZScgaXMgdG9vIHNtYWxsXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI1OjEwLjUzNjQzNzgwNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODI4MDg5MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRBUFJJTyBTY2hlZHVsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgYSBzb2xpZCwgc3RyYWlnaHRmb3J3YXJkIGJ1ZyBmaXguIEl0IGludHJvZHVjZXMgYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgIGFuZCBgdGFwcmlvX21pbl9pbnRlcnZhbCgpYCwgYW5kIGludGVsbGlnZW50bHkgcmVwbGFjZXMgdGhlIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pYCB3aXRoIGB0YXByaW9fbWluX2ludGVydmFsKHEpYCBpbiB0aGUga2V5IGZ1bmN0aW9ucyBgZmlsbF9zY2hlZF9lbnRyeSgpYCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYC5cblxuVGhlIGNvcmUgaXNzdWUgdGhpcyBhZGRyZXNzZXMgaXMgYSBwb3RlbnRpYWwgQ1BVIGxpdmVsb2NrIHNjZW5hcmlvLiBJZiB0aGUgaGFyZHdhcmUgdGltZXIgaW50ZXJ2YWxzIGJlY29tZSB0b28gc21hbGwsIHRoZSBzb2Z0d2FyZSBzY2hlZHVsZXIgY2FuIGVmZmVjdGl2ZWx5IGxvY2sgdXAgdGhlIENQVSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIGRlbmlhbC1vZi1zZXJ2aWNlIGNvbmRpdGlvbi4gVGhpcyBwYXRjaCBjb3JyZWN0bHkgZW5mb3JjZXMgYSBtaW5pbXVtIGludGVydmFsLCBwcmV2ZW50aW5nIHRoYXQgZnJvbSBoYXBwZW5pbmcuIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZS5cblxuTXkgZmlyc3QgdGhvdWdodCB3YXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucywgdGhhdCdzIGFsbW9zdCByZWZsZXhpdmUuIEkgc2VlIHRoZSBjaGVjaywgaW4gYGZpbGxfc2NoZWRfZW50cnkoKWAsIGZvciBgaW50ZXJ2YWwgXHUwMDNjIG1pbl9kdXJhdGlvbmAuIEFsc28sIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAgdGhlcmUncyBhIGNoZWNrIGZvciBgbmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIChzNjQpbmV3LVx1MDAzZW51bV9lbnRyaWVzICogdGFwcmlvX21pbl9pbnRlcnZhbChxKWAuIExvb2tpbmcgbW9yZSBjbG9zZWx5IGF0IGB0YXByaW9fbWluX2ludGVydmFsYCBJIHNlZSBpdCdzIHVzaW5nIGBsZW5ndGhfdG9fZHVyYXRpb25gIGFuZCBgRlVMTF9PRkZMT0FEX0lTX0VOQUJMRURgLiBIb3dldmVyLCBJ4oCZbSBjb25maWRlbnQgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaGVyZS4gVGhlIGNoZWNrcyBhcmUgY2xlYXJseSBwcmVzZW50IGFuZCBwcmV2ZW50IHRoZXNlIHNjZW5hcmlvcy4gSXQncyBlc3NlbnRpYWxseSBhZGRpbmcgYSBzYWZldHkgbmV0IHRvIGNvbnRyb2wgdGhlIHBhcnNlZCBuZXRsaW5rIGF0dHJpYnV0ZXMuXG5cblRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBwcmV2ZW50YXRpdmUsIGFuZCB0aGUgS0FTQU4gb3IgTE9DS0RFUCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChzdWNoIGFzIHRoZSBzb2Z0IGxvY2t1cCBkZXRlY3RvcikgbWlnaHQgaGF2ZSBjYXVnaHQgdGhpcywgYnV0IEtNU0FOIGlzIGRlZmluaXRpdmVseSBub3QgcmVxdWlyZWQgaGVyZS4gVGhpcyBpcyBhIENQVSBsaXZlbG9jayBhdm9pZGFuY2UsIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUuIEknbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgYWRkaW5nIHRoZSByZWFzb25zIGZvciBteSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI0LCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI1OjE4LjM2NDUyOTQwNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIENQVSBsaXZlbG9jay9zb2Z0IGxvY2t1cCBpc3N1ZSBpbiB0aGUgdGFwcmlvIHNjaGVkdWxlciBieSBlbmZvcmNpbmcgYSBtaW5pbXVtIGhydGltZXIgaW50ZXJ2YWwgKGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCkgd2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQuIEl0IG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgaW50ZXJ2YWxgIGFuZCBgY3ljbGVfdGltZWAgcGFyc2VkIGZyb20gbmV0bGluayBhdHRyaWJ1dGVzLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaCAoc3VjaCBhcyBzb2Z0IGxvY2t1cHMgb3Igb3V0LW9mLWJvdW5kcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSB0aGUgc29mdCBsb2NrdXAgZGV0ZWN0b3Igb3IgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIENQVSBsaXZlbG9jay9zb2Z0IGxvY2t1cCBpc3N1ZSBpbiB0aGUgdGFwcmlvIHNjaGVkdWxlciBieSBlbmZvcmNpbmcgYSBtaW5pbXVtIGhydGltZXIgaW50ZXJ2YWwgKGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCkgd2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQuIEl0IG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgaW50ZXJ2YWxgIGFuZCBgY3ljbGVfdGltZWAgcGFyc2VkIGZyb20gbmV0bGluayBhdHRyaWJ1dGVzLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaCAoc3VjaCBhcyBzb2Z0IGxvY2t1cHMgb3Igb3V0LW9mLWJvdW5kcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSB0aGUgc29mdCBsb2NrdXAgZGV0ZWN0b3Igb3IgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xzmx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 02:22:14 +0000 UTC FinishedAt: 2026-08-13 02:25:19 +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": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_TAPRIO" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCH_TAPRIO" ], "series_id": "a3f2cc20-36ff-455a-bf1e-fa526f734b8f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "taprio_change" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBDUFUgbGl2ZWxvY2svc29mdCBsb2NrdXAgaXNzdWUgaW4gdGhlIHRhcHJpbyBzY2hlZHVsZXIgYnkgZW5mb3JjaW5nIGEgbWluaW11bSBocnRpbWVyIGludGVydmFsIChgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OU2ApIHdoZW4gc29mdHdhcmUgc2NoZWR1bGluZyBpcyB1c2VkLiBJdCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGludGVydmFsYCBhbmQgYGN5Y2xlX3RpbWVgIHBhcnNlZCBmcm9tIG5ldGxpbmsgYXR0cmlidXRlcy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgc29mdCBsb2NrdXBzIG9yIG91dC1vZi1ib3VuZHMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgdGhlIHNvZnQgbG9ja3VwIGRldGVjdG9yIG9yIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWluaW11bSBpbnRlcnZhbCBjaGVjayBmb3Igc29mdHdhcmUgc2NoZWR1bGluZyBpbiB0aGUgdGFwcmlvIHFkaXNjIHRvIHByZXZlbnQgQ1BVIGxpdmVsb2NrcyBjYXVzZWQgYnkgdmVyeSBzbWFsbCBocnRpbWVyIGludGVydmFscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgcWRpc2MgYWRkL2NoYW5nZSkgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxODA2OTUwMjM3YTJmMWUyMmNjZmQ5YWU2ODVmNTNkOTBjYWJjNmJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDI6MjM6NDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90YXByaW8uYyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbmluZGV4IDQ1MjQ1MTU3ZTAwYTYuLjJiZjRjYWUxNjRiYzIgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jXG5AQCAtNDksNiAmIzQzOzQ5LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSB0YXByaW9faGF2ZV93b3JraW5nX21xcHJpbztcbiAgKi9cbiAjZGVmaW5lIFRBUFJJT19QSUNPU19QRVJfQllURV9NSU4gMTdcbiBcbiYjNDM7LyogVGhlIHNvZnR3YXJlIHNjaGVkdWxlciBjYW5ub3Qgc3VzdGFpbiBocnRpbWVyIGludGVydmFscyBzbWFsbGVyIHRoYW5cbiYjNDM7ICogdGhpcyB3aXRob3V0IGxpdmVsb2NraW5nIHRoZSBDUFUuIFRoZSB2YWx1ZSBtdXN0IGV4Y2VlZCB0aGUgY29zdCBvZlxuJiM0MzsgKiBvbmUgYWR2YW5jZV9zY2hlZCgpIGludm9jYXRpb24gKGxvY2sgYWNxdWlzaXRpb24sIGJ1ZGdldCByZWNvbXB1dGF0aW9uLFxuJiM0MzsgKiBUWCBzb2Z0aXJxKSB3aXRoIG1hcmdpbi5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyAoMTAwICogTlNFQ19QRVJfVVNFQylcbiYjNDM7XG4gc3RydWN0IHNjaGVkX2VudHJ5IHtcbiBcdC8qIER1cmF0aW9ucyBiZXR3ZWVuIHRoaXMgR0NMIGVudHJ5IGFuZCB0aGUgR0NMIGVudHJ5IHdoZXJlIHRoZVxuIFx0ICogcmVzcGVjdGl2ZSB0cmFmZmljIGNsYXNzIGdhdGUgY2xvc2VzXG5AQCAtMjU5LDYgJiM0MzsyNjYsMTYgQEAgc3RhdGljIGludCBsZW5ndGhfdG9fZHVyYXRpb24oc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgaW50IGxlbilcbiBcdHJldHVybiBkaXZfdTY0KGxlbiAqIGF0b21pYzY0X3JlYWQoXHUwMDI2cS1cdTAwM2VwaWNvc19wZXJfYnl0ZSksIFBTRUNfUEVSX05TRUMpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB0YXByaW9fbWluX2ludGVydmFsKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdG1pbl9kdXJhdGlvbiA9IG1heF90KGludCwgbWluX2R1cmF0aW9uLCBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG1pbl9kdXJhdGlvbjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGR1cmF0aW9uX3RvX2xlbmd0aChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCB1NjQgZHVyYXRpb24pXG4ge1xuIFx0cmV0dXJuIGRpdl91NjQoZHVyYXRpb24gKiBQU0VDX1BFUl9OU0VDLCBhdG9taWM2NF9yZWFkKFx1MDAyNnEtXHUwMDNlcGljb3NfcGVyX2J5dGUpKTtcbkBAIC0xMDM4LDcgJiM0MzsxMDU1LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0XHQgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSxcbiBcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbi1cdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xuJiM0MztcdGludCBtaW5fZHVyYXRpb24gPSB0YXByaW9fbWluX2ludGVydmFsKHEpO1xuIFx0dTMyIGludGVydmFsID0gMDtcbiBcbiBcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pXG5AQCAtMTA1NCw3ICYjNDM7MTA3MSw4IEBAIHN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4gXHRcdFx0dGJbVENBX1RBUFJJT19TQ0hFRF9FTlRSWV9JTlRFUlZBTF0pO1xuIFxuIFx0LyogVGhlIGludGVydmFsIHNob3VsZCBhbGxvdyBhdCBsZWFzdCB0aGUgbWluaW11bSBldGhlcm5ldFxuLVx0ICogZnJhbWUgdG8gZ28gb3V0LlxuJiM0MztcdCAqIGZyYW1lIHRvIGdvIG91dC4gV2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQsIHRoZVxuJiM0MztcdCAqIGludGVydmFsIG11c3QgYWxzbyBiZSBhdCBsZWFzdCB0aGUgbWluaW11bSBocnRpbWVyIGludGVydmFsLlxuIFx0ICovXG4gXHRpZiAoaW50ZXJ2YWwgXHUwMDNjIG1pbl9kdXJhdGlvbikge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgaW50ZXJ2YWwgZm9yIHNjaGVkdWxlIGVudHJ5XCYjMzQ7KTtcbkBAIC0xMTY2LDcgJiM0MzsxMTg0LDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRuZXctXHUwMDNlY3ljbGVfdGltZSA9IGN5Y2xlO1xuIFx0fVxuIFxuLVx0aWYgKG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyBuZXctXHUwMDNlbnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7XG4mIzQzO1x0aWYgKG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyAoczY0KW5ldy1cdTAwM2VudW1fZW50cmllcyAqIHRhcHJpb19taW5faW50ZXJ2YWwocSkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gc21hbGxcJiMzNDspO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1NDSF9UQVBSSU8mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YXByaW9fY2hhbmdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtaW5pbXVtIGludGVydmFsIGNoZWNrIGZvciBzb2Z0d2FyZSBzY2hlZHVsaW5nIGluIHRoZSB0YXByaW8gcWRpc2MgdG8gcHJldmVudCBDUFUgbGl2ZWxvY2tzIGNhdXNlZCBieSB2ZXJ5IHNtYWxsIGhydGltZXIgaW50ZXJ2YWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGVyIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBxZGlzYyBhZGQvY2hhbmdlKSBhbmQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE4MDY5NTAyMzdhMmYxZTIyY2NmZDlhZTY4NWY1M2Q5MGNhYmM2YmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwMjoyMzo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCmluZGV4IDQ1MjQ1MTU3ZTAwYTYuLjJiZjRjYWUxNjRiYzIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF90YXByaW8uYwpAQCAtNDksNiAmIzQzOzQ5LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSB0YXByaW9faGF2ZV93b3JraW5nX21xcHJpbzsKICAqLwogI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3CiAKJiM0MzsvKiBUaGUgc29mdHdhcmUgc2NoZWR1bGVyIGNhbm5vdCBzdXN0YWluIGhydGltZXIgaW50ZXJ2YWxzIHNtYWxsZXIgdGhhbgomIzQzOyAqIHRoaXMgd2l0aG91dCBsaXZlbG9ja2luZyB0aGUgQ1BVLiBUaGUgdmFsdWUgbXVzdCBleGNlZWQgdGhlIGNvc3Qgb2YKJiM0MzsgKiBvbmUgYWR2YW5jZV9zY2hlZCgpIGludm9jYXRpb24gKGxvY2sgYWNxdWlzaXRpb24sIGJ1ZGdldCByZWNvbXB1dGF0aW9uLAomIzQzOyAqIFRYIHNvZnRpcnEpIHdpdGggbWFyZ2luLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyAoMTAwICogTlNFQ19QRVJfVVNFQykKJiM0MzsKIHN0cnVjdCBzY2hlZF9lbnRyeSB7CiAJLyogRHVyYXRpb25zIGJldHdlZW4gdGhpcyBHQ0wgZW50cnkgYW5kIHRoZSBHQ0wgZW50cnkgd2hlcmUgdGhlCiAJICogcmVzcGVjdGl2ZSB0cmFmZmljIGNsYXNzIGdhdGUgY2xvc2VzCkBAIC0yNTksNiAmIzQzOzI2NiwxNiBAQCBzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKQogCXJldHVybiBkaXZfdTY0KGxlbiAqIGF0b21pYzY0X3JlYWQoJmFtcDtxLSZndDtwaWNvc19wZXJfYnl0ZSksIFBTRUNfUEVSX05TRUMpOwogfQogCiYjNDM7c3RhdGljIGludCB0YXByaW9fbWluX2ludGVydmFsKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpCiYjNDM7ewomIzQzOwlpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTsKJiM0MzsKJiM0MzsJaWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLSZndDtmbGFncykpCiYjNDM7CQltaW5fZHVyYXRpb24gPSBtYXhfdChpbnQsIG1pbl9kdXJhdGlvbiwgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyk7CiYjNDM7CiYjNDM7CXJldHVybiBtaW5fZHVyYXRpb247CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkdXJhdGlvbl90b19sZW5ndGgoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgdTY0IGR1cmF0aW9uKQogewogCXJldHVybiBkaXZfdTY0KGR1cmF0aW9uICogUFNFQ19QRVJfTlNFQywgYXRvbWljNjRfcmVhZCgmYW1wO3EtJmd0O3BpY29zX3Blcl9ieXRlKSk7CkBAIC0xMDM4LDcgJiM0MzsxMDU1LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJCSAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LAogCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKLQlpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTsKJiM0MzsJaW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7CiAJdTMyIGludGVydmFsID0gMDsKIAogCWlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pCkBAIC0xMDU0LDcgJiM0MzsxMDcxLDggQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJCXRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfSU5URVJWQUxdKTsKIAogCS8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYWxsb3cgYXQgbGVhc3QgdGhlIG1pbmltdW0gZXRoZXJuZXQKLQkgKiBmcmFtZSB0byBnbyBvdXQuCiYjNDM7CSAqIGZyYW1lIHRvIGdvIG91dC4gV2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQsIHRoZQomIzQzOwkgKiBpbnRlcnZhbCBtdXN0IGFsc28gYmUgYXQgbGVhc3QgdGhlIG1pbmltdW0gaHJ0aW1lciBpbnRlcnZhbC4KIAkgKi8KIAlpZiAoaW50ZXJ2YWwgJmx0OyBtaW5fZHVyYXRpb24pIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0ludmFsaWQgaW50ZXJ2YWwgZm9yIHNjaGVkdWxlIGVudHJ5JiMzNDspOwpAQCAtMTE2Niw3ICYjNDM7MTE4NCw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJbmV3LSZndDtjeWNsZV90aW1lID0gY3ljbGU7CiAJfQogCi0JaWYgKG5ldy0mZ3Q7Y3ljbGVfdGltZSAmbHQ7IG5ldy0mZ3Q7bnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7CiYjNDM7CWlmIChuZXctJmd0O2N5Y2xlX3RpbWUgJmx0OyAoczY0KW5ldy0mZ3Q7bnVtX2VudHJpZXMgKiB0YXByaW9fbWluX2ludGVydmFsKHEpKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gc21hbGwmIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIHRhcHJpbyBTY2hlZHVsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIFRBUFJJTyBzY2hlZHVsZXIuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYSBtaW5pbXVtIHNvZnR3YXJlIGludGVydmFsLCBkZWZpbmVkIGFzIGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCwgYW5kIGEgZnVuY3Rpb24gYHRhcHJpb19taW5faW50ZXJ2YWwoc3RydWN0IHRhcHJpb19zY2hlZCAqcSlgLiBUaGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb24sIHJlcGxhY2luZyB0aGUgaGFyZGNvZGVkIGBFVEhfWkxFTmAgZHVyYXRpb24gY2FsY3VsYXRpb25zIHdpdGggdGhpcyBuZXcsIHByZXN1bWFibHkgbW9yZSBzZW5zaWJsZSwgbWluaW11bSBpbnRlcnZhbCwgdXNpbmcgYHRhcHJpb19taW5faW50ZXJ2YWwocSlgIHdpdGhpbiB0aGUgYGZpbGxfc2NoZWRfZW50cnlgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCBmdW5jdGlvbnMuCgpFc3NlbnRpYWxseSwgdGhleSYjMzk7cmUgcHJldmVudGluZyB0aGUgc2NoZWR1bGVyIGZyb20gZ2V0dGluZyBib2dnZWQgZG93biBhbmQgcG90ZW50aWFsbHkgY2F1c2luZyBsaXZlbG9jayBieSBhbGxvd2luZyBleGNlc3NpdmVseSBzaG9ydCBocnRpbWVyIGludGVydmFscyBpbiBzb2Z0d2FyZSBzY2hlZHVsaW5nLiBJdCBtYWtlcyBzZW5zZTsgcmVhbGx5IHRpbnkgaW50ZXJ2YWxzIHdvdWxkIGp1c3QgYnVybiBDUFUgY3ljbGVzIHdpdGhvdXQgYWNjb21wbGlzaGluZyBtdWNoLgoKVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIGltcGFjdHMgaG93IFRBUFJJTyBzY2hlZHVsZXMgYXJlIHBhcnNlZCBhbmQgdmFsaWRhdGVkLiBHaXZlbiB0aGF0IGl0JiMzOTtzIGluIHRoZSBzY2hlZHVsaW5nIGNvZGUsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2UgdXNpbmcgbmV0bGluayB0aHJvdWdoIGNvbW1hbmRzIGxpa2UgYHRjIHFkaXNjIGFkZC9jaGFuZ2VgLiBJJiMzOTtsbCBoYXZlIHRvIGRvdWJsZS1jaGVjaywgYnV0IEkmIzM5O20gd2lsbGluZyB0byBiZXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGBDT05GSUdfTkVUX1NDSF9UQVBSSU9gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz0xNjc9Y29uZmlnIE5FVF9TQ0hfTVFQUklPX0xJQlxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTE3MS1cbm5ldC9zY2hlZC9LY29uZmlnOjE3Mjpjb25maWcgTkVUX1NDSF9UQVBSSU9cbm5ldC9zY2hlZC9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O1RpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXCYjMzQ7XG4tLVxubmV0L3NjaGVkL01ha2VmaWxlPTYzPW9iai0kKENPTkZJR19ORVRfU0NIX0VURilcdCYjNDM7PSBzY2hfZXRmLm9cbm5ldC9zY2hlZC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfTkVUX1NDSF9UQVBSSU8pXHQmIzQzOz0gc2NoX3RhcHJpby5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtNjUtb2JqLSQoQ09ORklHX05FVF9TQ0hfQlBGKVx0JiM0Mzs9IGJwZl9xZGlzYy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVEFQUklPIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBUQVBSSU8gc2NoZWR1bGVyIGltcGxlbWVudGF0aW9uLiBUaGUga2V5IGNvbmZpZ3VyYXRpb24gaGVyZSBpcyBgTkVUX1NDSF9UQVBSSU9gLiBNeSBhdHRlbnRpb24gaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIG1vZGlmaWNhdGlvbnMgd2l0aGluIGBmaWxsX3NjaGVkX2VudHJ5YCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAuIEdvb2QsIHRoZXkmIzM5O3ZlIGhpZ2hsaWdodGVkIHRoZSBzcGVjaWZpYyBhcmVhcyBJIG5lZWQgdG8gZm9jdXMgb24uCgpCb3RoIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgaW5kaWNhdGVzIHRoYXQgdGhlaXIgc2NvcGUgaXMgbGltaXRlZCB3aXRoaW4gdGhlIG1vZHVsZSwgbGlrZWx5IGZvciBlbmNhcHN1bGF0aW9uLiBCdXQsIGhtbSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgdG8gZW5zdXJlIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlcy4gTGV0IG1lIGNoZWNrIHdoYXQgYWN0dWFsbHkgKmNhbGxzKiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIHRvIHNlZSBob3cgdGhhdCBmdW5jdGlvbiBjb250cmlidXRlcyB0byB0aGUgb3ZlcmFsbCBzY2hlZHVsZXIgb3BlcmF0aW9uLiBLbm93aW5nIGhvdyBpdCYjMzk7cyBpbnZva2VkIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgc2NoZWR1bGluZyBsb2dpYyB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYXJzZV90YXByaW9fc2NoZWR1bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTEwNj1zdGF0aWMgaW50IHBhcnNlX3NjaGVkX2xpc3Qoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqbGlzdCxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExNDUtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjExNDY6c3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xMTQ3LVx0XHRcdFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTE4MzU9c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTI3LVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxOTI4Olx0ZXJyID0gcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHEsIHRiLCBuZXdfYWRtaW4sIGV4dGFjayk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE5MjktXHRpZiAoZXJyIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBUQVBSSU8gUWRpc2MgTW9kaWZpY2F0aW9uKioKCkFscmlnaHQsIHNvIGB0YXByaW9fY2hhbmdlYCBpcyBmaXJpbmcuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgdGhlIGAuY2hhbmdlYCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIFRBUFJJTyBxZGlzYy4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIHdoYXQgdHJpZ2dlcnMgdGhpcyBjYWxsYmFjay4gSXQmIzM5O3Mgc2FmZSB0byBhc3N1bWUgc29tZSBhc3BlY3Qgb2YgdGhlIFRBUFJJTyBzY2hlZHVsZSBpcyBiZWluZyBhbHRlcmVkLiBUaGUgY3J1Y2lhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgc2NoZWR1bGUgaXRzZWxmLCB3aGljaCwgZnJvbSB0aGUgY29kZSwgSSBzZWUgaXMgcGFyc2VkIHZpYSBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYC4gCgpCZWZvcmUgZGlnZ2luZyB0b28gZGVlcCBpbnRvIHRoYXQgcGFyc2luZyBsb2dpYywgbGV0JiMzOTtzIHN0ZXAgYmFjayBmb3IgYSBtb21lbnQuIEluc3RlYWQgb2YgaW1tZWRpYXRlbHkgZGl2aW5nIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIHNjaGVkdWxlLCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBxZGlzYyBvcGVyYXRpb25zIHJlbGF0ZSB0byB0YXByaW8uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBsb29raW5nIGF0IHRoZSBzb3VyY2Ugb2YgdHJ1dGgsIGFuZCBub3QgbWlzc2luZyBhIG51YW5jZSBpbiBob3cgdGhpcyB3b3Jrcy4gSSB3YW50IHRvIGhhdmUgdGhlIGNvbnRleHQgb2YgdGhlIG92ZXJhbGwgVEFQUklPIGltcGxlbWVudGF0aW9uIGZyZXNoIGluIG15IG1pbmQuIFdoZXJlIGFyZSB0aG9zZSBxZGlzYyBvcGVyYXRpb25zIGRlZmluZWQsIGFuZCBob3cgZG8gdGhleSBpbnRlcmFjdCB3aXRoIHRoaXMgYHRhcHJpb19jaGFuZ2VgIGNhbGxiYWNrPyBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBtb2RpZmljYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFwcmlvX3FkaXNjX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHRhcHJpb19jbGFzc19vcHMgPSB7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTUyLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTUzOnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU1NC1cdC5jbF9vcHNcdFx0PSBcdTAwMjZ0YXByaW9fY2xhc3Nfb3BzLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjU3NT1zdGF0aWMgaW50IF9faW5pdCB0YXByaW9fbW9kdWxlX2luaXQodm9pZClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODEtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1ODI6XHRyZXR1cm4gcmVnaXN0ZXJfcWRpc2MoXHUwMDI2dGFwcmlvX3FkaXNjX29wcyk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODMtfVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjU4NT1zdGF0aWMgdm9pZCBfX2V4aXQgdGFwcmlvX21vZHVsZV9leGl0KHZvaWQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODYte1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTg3Olx0dW5yZWdpc3Rlcl9xZGlzYyhcdTAwMjZ0YXByaW9fcWRpc2Nfb3BzKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU4OC1cdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNnRhcHJpb19kZXZpY2Vfbm90aWZpZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NDMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBgdGFwcmlvX3FkaXNjX29wc2AgU3RydWN0dXJlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGB0YXByaW9fcWRpc2Nfb3BzYCBzdHJ1Y3R1cmUuIEkmIzM5O20gcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gdGhlIGZ1bmN0aW9ucyBleHBvc2VkIGhlcmUsIG5hdHVyYWxseS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGF2YWlsYWJsZSBmb3IgaW50ZXJhY3Rpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzY2hlZHVsZXIgaW50ZXJhY3RzIHdpdGggdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIG1lY2hhbmlzbXMuIFdoYXQgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzPyBJJiMzOTttIGFudGljaXBhdGluZyBgaW5pdGAsIGBkZXN0cm95YCwgYGVucXVldWVgLCBgZGVxdWV1ZWAg4oCTIHRoZSB1c3VhbCBzdXNwZWN0cy4gQnV0IEkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGFueSBwb3RlbnRpYWwgaG9va3MgZm9yIHRoaW5ncyBsaWtlIHJhdGUgbGltaXRpbmcsIHNoYXBlciBjb25maWd1cmF0aW9uLCBvciBtYXliZSBldmVuIGludGVncmF0aW9uIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBjYXBhYmlsaXRpZXMsIGlmIGFwcGxpY2FibGUuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIGludGVyZmFjZS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIFRBUFJJTyBxZGlzYyBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIHRjIGZyYW1ld29yay4gSXQmIzM5O3MgdGltZSB0byBiZWNvbWUgaW50aW1hdGUgd2l0aCB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFwcmlvX3FkaXNjX29wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHRhcHJpb19jbGFzc19vcHMgPSB7XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTUyLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTUzOnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU1NC1cdC5jbF9vcHNcdFx0PSBcdTAwMjZ0YXByaW9fY2xhc3Nfb3BzLFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjU3NT1zdGF0aWMgaW50IF9faW5pdCB0YXByaW9fbW9kdWxlX2luaXQodm9pZClcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODEtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1ODI6XHRyZXR1cm4gcmVnaXN0ZXJfcWRpc2MoXHUwMDI2dGFwcmlvX3FkaXNjX29wcyk7XG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODMtfVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjU4NT1zdGF0aWMgdm9pZCBfX2V4aXQgdGFwcmlvX21vZHVsZV9leGl0KHZvaWQpXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODYte1xubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTg3Olx0dW5yZWdpc3Rlcl9xZGlzYyhcdTAwMjZ0YXByaW9fcWRpc2Nfb3BzKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU4OC1cdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNnRhcHJpb19kZXZpY2Vfbm90aWZpZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjQyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgdGFwcmlvX3FkaXNjX29wc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYHRhcHJpb19xZGlzY19vcHNgIGFuZCBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBob3cgdGhpcyBRZGlzYyBpcyBpbXBsZW1lbnRlZC4gTXkgZmlyc3QgdGhvdWdodHMgYXJlIGFsd2F5cyBhYm91dCB0aGUgZnVuZGFtZW50YWxzOiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgY29yZSBmdW5jdGlvbnMsIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBvcGVyYXRpb25zIGZvciBlbnF1ZXVlaW5nLCBkZXF1ZXVlaW5nLCBoYW5kbGluZyBzdGF0aXN0aWNzLCBhbmQgcHJvYmFibHkgc29tZSBtZXRob2RzIHJlbGF0ZWQgdG8gc2V0dGluZyB1cCBhbmQgdGVhcmluZyBkb3duIHRoZSBRZGlzYyBpdHNlbGYuCgpJJiMzOTtsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhlIHRyYWZmaWMgc2hhcGluZyBhc3BlY3RzOyB3aGF0IHNjaGVkdWxpbmcgYWxnb3JpdGhtcyBhcmUgZW1wbG95ZWQ/IEFyZSB0aGV5IHVzaW5nIHRpbWUtYXdhcmUgc2hhcGVyIChUQVMpIGZlYXR1cmVzPyBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGhvdyB0aGV5IGFyZSBoYW5kbGluZyBwZXItcXVldWUgY29uZmlndXJhdGlvbnMgYW5kIGhvdyB0aGUgZnJhbWUgdHJhbnNtaXNzaW9uIGlzIGdvdmVybmVkIGJhc2VkIG9uIHRpbWUgYW5kIHByaW9yaXR5LiBHaXZlbiB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gVEFQUklPLCBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGxldmVsIG9mIElFRUUgODAyLjFRYnYgaW50ZWdyYXRpb24gb3IgZXF1aXZhbGVudC4gSSB3aWxsIHRyeSB0byB2aXN1YWxpemUgaG93IHRyYWZmaWMgaXMgYmVpbmcgc2NoZWR1bGVkIGFuZCB0cmFuc21pdHRlZCBiYXNlZCBvbiB2YXJpb3VzIHRpbWUgd2luZG93cyBhbmQgd2hhdCBraW5kIG9mIHN5bmNocm9uaXphdGlvbiBjaGFsbGVuZ2VzIHRoZXkmIzM5O3JlIGhhbmRsaW5nLCBhc3N1bWluZyB0aGlzIFFkaXNjIHdpbGwgYmUgdXNlZCB3aXRoIGhpZ2gtcHJlY2lzaW9uIHRpbWUtc2Vuc2l0aXZlIG5ldHdvcmtpbmcuCgpJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHRoYXQgdGhlcmUgd2lsbCBiZSBzb21lIGNoZWNrcyBmb3IgdGhlIGN1cnJlbnQgdGltZSBzb3VyY2UgdGhhdCB0aGV5IGFyZSB1c2luZy4gSSB3YW50IHRvIGtub3cgaWYgaXQgcmVxdWlyZXMgYSBzcGVjaWFsIG9yIHNwZWNpZmljIHRpbWUgc291cmNlIHRvIG9wZXJhdGUuCgpJIHdpbGwgYWxzbyBiZSBvbiB0aGUgbG9va291dCBmb3IgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBBcmUgdGhleSB1c2luZyBhbnkgYXRvbWljIG9wZXJhdGlvbnMgb3Igc3BpbmxvY2tzPyBIb3cgaXMgY29uY3VycmVuY3kgbWFuYWdlZD8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCB0cmFkZS1vZmZzIGJldHdlZW4gbGF0ZW5jeSBhbmQgdGhyb3VnaHB1dD8KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBhYm91dCB1c2VyLXNwYWNlIGludGVyYWN0aW9uOiBob3cgY29uZmlndXJhdGlvbnMgYXJlIHNldCwgaG93IHN0YXRpc3RpY3MgYXJlIHJldHJpZXZlZCwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBzcGVjaWFsIGludGVyZmFjZXMgZm9yIHR1bmluZyB0aGUgUWRpc2MuIEkgd2lsbCBwcm9iYWJseSBhbHNvIGF0dGVtcHQgdG8gY29tcGFyZSBpdCB3aXRoIG90aGVyIHNpbWlsYXIgUWRpc2NzIGFuZCB0aGVpciBhcHByb2FjaGVzLiBJIHdhbnQgdG8gc2VlIGlmIGFueSBvZiB0aGVpciB0ZWNobmlxdWVzIGFyZSBpbm5vdmF0aXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gc3RvcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU1MzpcdHN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbjI1NTQ6XHRcdC5jbF9vcHNcdFx0PSBcdTAwMjZ0YXByaW9fY2xhc3Nfb3BzLFxuMjU1NTpcdFx0LmlkXHRcdD0gXCYjMzQ7dGFwcmlvXCYjMzQ7LFxuMjU1NjpcdFx0LnByaXZfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHRhcHJpb19zY2hlZCksXG4yNTU3Olx0XHQuaW5pdFx0XHQ9IHRhcHJpb19pbml0LFxuMjU1ODpcdFx0LmNoYW5nZVx0XHQ9IHRhcHJpb19jaGFuZ2UsXG4yNTU5Olx0XHQuZGVzdHJveVx0PSB0YXByaW9fZGVzdHJveSxcbjI1NjA6XHRcdC5yZXNldFx0XHQ9IHRhcHJpb19yZXNldCxcbjI1NjE6XHRcdC5hdHRhY2hcdFx0PSB0YXByaW9fYXR0YWNoLFxuMjU2MjpcdFx0LnBlZWtcdFx0PSB0YXByaW9fcGVlayxcbjI1NjM6XHRcdC5kZXF1ZXVlXHQ9IHRhcHJpb19kZXF1ZXVlLFxuMjU2NDpcdFx0LmVucXVldWVcdD0gdGFwcmlvX2VucXVldWUsXG4yNTY1Olx0XHQuZHVtcFx0XHQ9IHRhcHJpb19kdW1wLFxuMjU2NjpcdFx0LmR1bXBfc3RhdHNcdD0gdGFwcmlvX2R1bXBfc3RhdHMsXG4yNTY3Olx0XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbjI1Njg6XHR9O1xuMjU2OTpcdE1PRFVMRV9BTElBU19ORVRfU0NIKFwmIzM0O3RhcHJpb1wmIzM0Oyk7XG4yNTcwOlx0XG4yNTcxOlx0c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB0YXByaW9fZGV2aWNlX25vdGlmaWVyID0ge1xuMjU3MjpcdFx0Lm5vdGlmaWVyX2NhbGwgPSB0YXByaW9fZGV2X25vdGlmaWVyLFxuMjU3MzpcdH07XG4yNTc0Olx0XG4yNTc1Olx0c3RhdGljIGludCBfX2luaXQgdGFwcmlvX21vZHVsZV9pbml0KHZvaWQpXG4yNTc2Olx0e1xuMjU3NzpcdFx0aW50IGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZ0YXByaW9fZGV2aWNlX25vdGlmaWVyKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE0NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRBUFJJTyBDb2RlYmFzZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgVEFQUklPIGNvZGUgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBJIHNlZSBgdGFwcmlvX2luaXRgLCBgdGFwcmlvX2NoYW5nZWAsIGB0YXByaW9fZGVzdHJveWAsIGB0YXByaW9fcmVzZXRgLCBgdGFwcmlvX2F0dGFjaGAsIGB0YXByaW9fcGVla2AsIGB0YXByaW9fZGVxdWV1ZWAsIGB0YXByaW9fZW5xdWV1ZWAsIGB0YXByaW9fZHVtcGAsIGFuZCBgdGFwcmlvX2R1bXBfc3RhdHNgLiBUaGF0JiMzOTtzIGEgZGVjZW50IHN1aXRlIG9mIGZ1bmN0aW9ucywgYnV0IEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHBsYXllcnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMuCgpJdCBsb29rcyBsaWtlIHRoZSByZWFsIHdvcmsgaXMgYmVpbmcgZG9uZSBpbnNpZGUgYGZpbGxfc2NoZWRfZW50cnlgIGFuZCBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlYCwgYW5kIHRoZXNlIGFyZSBib3RoIGNhbGxlZCBmcm9tIGB0YXByaW9fY2hhbmdlYC4gQWhhISBgdGFwcmlvX2NoYW5nZWAgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3ltYm9sIHRvIGZvY3VzIG9uOyBpdCBzZWVtcyBjZW50cmFsIHRvIHRoZSBjb3JlIFRBUFJJTyBsb2dpYywgYXMgaXQmIzM5O3MgbW9kaWZ5aW5nIHRob3NlIGtleSBzdHJ1Y3R1cmVzLiBCdXQgSSBzaG91bGQgY2hlY2sgYHRhcHJpb19pbml0YCB0b28sIGp1c3QgdG8gYmUgc3VyZSBpdCBkb2VzbiYjMzk7dCBpbml0aWFsaXplIGFuZCB0aGVuIGNhbGwgaXQsIHdoaWNoIGlzIGxpa2VseS4gSXQmIzM5O3MgZ29vZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXByaW9faW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0yMDQyPXN0YXRpYyB2b2lkIHRhcHJpb19kZXN0cm95KHN0cnVjdCBRZGlzYyAqc2NoKVxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA1MS1cdC8qIE5vdGUgdGhhdCB0YXByaW9fcmVzZXQoKSBtaWdodCBub3QgYmUgY2FsbGVkIGlmIGFuIGVycm9yXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwNTI6XHQgKiBoYXBwZW5zIGluIHFkaXNjX2NyZWF0ZSgpLCBhZnRlciB0YXByaW9faW5pdCgpIGhhcyBiZWVuIGNhbGxlZC5cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA1My1cdCAqL1xuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA4MC1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA4MTpzdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwODItXHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTUzPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTYtXHQucHJpdl9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgdGFwcmlvX3NjaGVkKSxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjU1NzpcdC5pbml0XHRcdD0gdGFwcmlvX2luaXQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTgtXHQuY2hhbmdlXHRcdD0gdGFwcmlvX2NoYW5nZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkwMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsIFN0YWNrOiBgdGFwcmlvX2luaXRgIGFuZCBgdGFwcmlvX2NoYW5nZWAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYHRhcHJpb19pbml0YCBhbmQgYHRhcHJpb19jaGFuZ2VgLiBUaGUgcXVlc3Rpb24gYXQgaGFuZCBpcyB3aGV0aGVyIGB0YXByaW9faW5pdGAgZGlyZWN0bHkgY2FsbHMgb3IgaW5kaXJlY3RseSB0cmlnZ2VycyBgdGFwcmlvX2NoYW5nZWAuIFVuZGVyc3RhbmRpbmcgdGhpcyBjb250cm9sIGZsb3cgaXMgY3JpdGljYWwgZm9y4oCmIHdlbGwsIGZyYW5rbHksIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aW1pbmcsIHNjaGVkdWxpbmcsIGFuZCBlbnN1cmluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW4gdGhlIFRBUFJJTyBjb250ZXh0LiBJZiB0aGVyZSYjMzk7cyBubyBkaXJlY3QgaW52b2NhdGlvbiwgaXMgdGhlcmUgYW4gZXZlbnQsIGEgZmxhZywgb3IgYSBzZXBhcmF0ZSB0aHJlYWQgY29tbXVuaWNhdGluZyB0aGUgbmVlZCB0byAqcG90ZW50aWFsbHkqIG1vZGlmeSBwYXJhbWV0ZXJzPyBJZiBpdCAqaXMqIGEgZGlyZWN0IGNhbGwsIGl0IHNpbXBsaWZpZXMgZGVidWdnaW5nIGNvbnNpZGVyYWJseSwgYnV0IEkgaGF2ZSB0byBjb25zaWRlciB3aGV0aGVyIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHBhc3NlZCBjb3JyZWN0bHkgYW5kIHRoYXQgdGhlcmUgaXMgbm8gdW5pbnRlbmRlZCBzaWRlLWVmZmVjdC4gSSBrbm93IHRoZXJlJiMzOTtzIGEgZGVsaWNhdGUgZGFuY2Ugd2l0aCBtdWx0aXBsZSB0YXNrcyB0cnlpbmcgdG8gdGFrZSBjb250cm9sLCBzbyBhbnkgY2FsbCBzZXF1ZW5jZSBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5LiBMZXQmIzM5O3Mgc2VlLi4uSSB0aGluayBJIHdpbGwgdXNlIGEgZGVidWdnZXIgdG8gc3RlcCB0aHJvdWdoIHRvIGJlIGFic29sdXRlbHkgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX3RhcHJpby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA4MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDgxOlx0c3RhdGljIGludCB0YXByaW9faW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuMjA4MjpcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMjA4MzpcdHtcbjIwODQ6XHRcdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4yMDg1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XG4yMDg2Olx0XHRpbnQgaSwgdGM7XG4yMDg3Olx0XG4yMDg4Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZxLVx1MDAzZWN1cnJlbnRfZW50cnlfbG9jayk7XG4yMDg5Olx0XG4yMDkwOlx0XHRocnRpbWVyX3NldHVwKFx1MDAyNnEtXHUwMDNlYWR2YW5jZV90aW1lciwgYWR2YW5jZV9zY2hlZCwgQ0xPQ0tfVEFJLCBIUlRJTUVSX01PREVfQUJTKTtcbjIwOTE6XHRcbjIwOTI6XHRcdHEtXHUwMDNlcm9vdCA9IHNjaDtcbjIwOTM6XHRcbjIwOTQ6XHRcdC8qIFdlIG9ubHkgc3VwcG9ydCBzdGF0aWMgY2xvY2tpZHMuIFVzZSBhbiBpbnZhbGlkIHZhbHVlIGFzIGRlZmF1bHRcbjIwOTU6XHRcdCAqIGFuZCBnZXQgdGhlIHZhbGlkIG9uZSBvbiB0YXByaW9fY2hhbmdlKCkuXG4yMDk2Olx0XHQgKi9cbjIwOTc6XHRcdHEtXHUwMDNlY2xvY2tpZCA9IC0xO1xuMjA5ODpcdFx0cS1cdTAwM2VmbGFncyA9IFRBUFJJT19GTEFHU19JTlZBTElEO1xuMjA5OTpcdFxuMjEwMDpcdFx0bGlzdF9hZGQoXHUwMDI2cS1cdTAwM2V0YXByaW9fbGlzdCwgXHUwMDI2dGFwcmlvX2xpc3QpO1xuMjEwMTpcdFxuMjEwMjpcdFx0aWYgKHNjaC1cdTAwM2VwYXJlbnQgIT0gVENfSF9ST09UKSB7XG4yMTAzOlx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0NhbiBvbmx5IGJlIGF0dGFjaGVkIGFzIHJvb3QgcWRpc2NcJiMzNDspO1xuMjEwNDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4yMTA1Olx0XHR9XG4yMTA2Olx0XG4yMTA3Olx0XHRpZiAoIW5ldGlmX2lzX211bHRpcXVldWUoZGV2KSkge1xuMjEwODpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtNdWx0aS1xdWV1ZSBkZXZpY2UgaXMgcmVxdWlyZWRcJiMzNDspO1xuMjEwOTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4yMTEwOlx0XHR9XG4yMTExOlx0XG4yMTEyOlx0XHRxLVx1MDAzZXFkaXNjcyA9IGt6YWxsb2Nfb2JqcyhxLVx1MDAzZXFkaXNjc1swXSwgZGV2LVx1MDAzZW51bV90eF9xdWV1ZXMpO1xuMjExMzpcdFx0aWYgKCFxLVx1MDAzZXFkaXNjcylcbjIxMTQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMTE1Olx0XG4yMTE2Olx0XHRpZiAoIW9wdClcbjIxMTc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yMTE4Olx0XG4yMTE5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspIHtcbjIxMjA6XHRcdFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3F1ZXVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODI5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgQ2FsbCB0byBgdGFwcmlvX2luaXRgKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBub3cgb24gdGhlIGB0YXByaW9faW5pdGAgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIFdoYXQmIzM5O3MgaXQgaW5pdGlhbGl6aW5nPyBJcyBpdCBzZXR0aW5nIHVwIGRhdGEgc3RydWN0dXJlcywgY29uZmlndXJpbmcgaGFyZHdhcmUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBpdHNlbGYgZ2l2ZXMgYSBjbHVlIOKAkyBpbml0aWFsaXphdGlvbiBpcyB0aGUga2V5LiBCdXQgSSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBMZXQmIzM5O3Mgc3RhcnQgYnkgYWN0dWFsbHkgbG9va2luZyBhdCB0aGUgZnVuY3Rpb27igJlzIGltcGxlbWVudGF0aW9uLCBsaW5lIGJ5IGxpbmUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgbWVudGFsbHkgdHJhY2luZyBleGVjdXRpb24gYW5kIHRoaW5rIGFib3V0IGhvdyBJIHdvdWxkIGRlc2lnbiB0aGlzIGZ1bmN0aW9uIG15c2VsZiwgd2hhdCBlZGdlIGNhc2VzIG1pZ2h0IGJlIHByZXNlbnQsIGFuZCB3aGF0IGltcGxpY2F0aW9ucyB0aGUgZnVuY3Rpb27igJlzIGRlc2lnbiBoYXMgZm9yIGxhdGVyIHBlcmZvcm1hbmNlIGFuZCBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjEyMTpcdFx0XHRzdHJ1Y3QgUWRpc2MgKnFkaXNjO1xuMjEyMjpcdFxuMjEyMzpcdFx0XHRkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7XG4yMTI0Olx0XHRcdHFkaXNjID0gcWRpc2NfY3JlYXRlX2RmbHQoZGV2X3F1ZXVlLFxuMjEyNTpcdFx0XHRcdFx0XHQgIFx1MDAyNnBmaWZvX3FkaXNjX29wcyxcbjIxMjY6XHRcdFx0XHRcdFx0ICBUQ19IX01BS0UoVENfSF9NQUooc2NoLVx1MDAzZWhhbmRsZSksXG4yMTI3Olx0XHRcdFx0XHRcdFx0ICAgIFRDX0hfTUlOKGkgJiM0MzsgMSkpLFxuMjEyODpcdFx0XHRcdFx0XHQgIGV4dGFjayk7XG4yMTI5Olx0XHRcdGlmICghcWRpc2MpXG4yMTMwOlx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMTMxOlx0XG4yMTMyOlx0XHRcdGlmIChpIFx1MDAzYyBkZXYtXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKVxuMjEzMzpcdFx0XHRcdHFkaXNjX2hhc2hfYWRkKHFkaXNjLCBmYWxzZSk7XG4yMTM0Olx0XG4yMTM1Olx0XHRcdHEtXHUwMDNlcWRpc2NzW2ldID0gcWRpc2M7XG4yMTM2Olx0XHR9XG4yMTM3Olx0XG4yMTM4Olx0XHRmb3IgKHRjID0gMDsgdGMgXHUwMDNjIFRDX1FPUFRfTUFYX1FVRVVFOyB0YyYjNDM7JiM0MzspXG4yMTM5Olx0XHRcdHEtXHUwMDNlZnBbdGNdID0gVENfRlBfRVhQUkVTUztcbjIxNDA6XHRcbjIxNDE6XHRcdHRhcHJpb19kZXRlY3RfYnJva2VuX21xcHJpbyhxKTtcbjIxNDI6XHRcbjIxNDM6XHRcdHJldHVybiB0YXByaW9fY2hhbmdlKHNjaCwgb3B0LCBleHRhY2spO1xuMjE0NDpcdH1cbjIxNDU6XHRcbjIxNDY6XHRzdGF0aWMgdm9pZCB0YXByaW9fYXR0YWNoKHN0cnVjdCBRZGlzYyAqc2NoKVxuMjE0NzpcdHtcbjIxNDg6XHRcdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XG4yMTQ5Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XG4yMTUwOlx0XHR1bnNpZ25lZCBpbnQgbnR4O1xuMjE1MTpcdFxuMjE1MjpcdFx0LyogQXR0YWNoIHVuZGVybHlpbmcgcWRpc2MgKi9cbjIxNTM6XHRcdGZvciAobnR4ID0gMDsgbnR4IFx1MDAzYyBkZXYtXHUwMDNlbnVtX3R4X3F1ZXVlczsgbnR4JiM0MzsmIzQzOykge1xuMjE1NDpcdFx0XHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgbnR4KTtcbjIxNTU6XHRcdFx0c3RydWN0IFFkaXNjICpvbGQsICpkZXZfcXVldWVfcWRpc2M7XG4yMTU2Olx0XG4yMTU3Olx0XHRcdGlmIChGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSkge1xuMjE1ODpcdFx0XHRcdHN0cnVjdCBRZGlzYyAqcWRpc2MgPSBxLVx1MDAzZXFkaXNjc1tudHhdO1xuMjE1OTpcdFxuMjE2MDpcdFx0XHRcdC8qIEluIG9mZmxvYWQgbW9kZSwgdGhlIHJvb3QgdGFwcmlvIHFkaXNjIGlzIGJ5cGFzc2VkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFRBUFJJTyBRZGlzYyBDb25maWd1cmF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyBgdGFwcmlvX2luaXRgIHVsdGltYXRlbHkgY2FsbHMgYHRhcHJpb19jaGFuZ2VgIC0gdGhhdCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nOiBgdGFwcmlvX2NoYW5nZWAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGNvbmZpZ3VyaW5nIHRoZSBUQVBSSU8gcWRpc2MuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIG1pbmltdW0gaW50ZXJ2YWwgY2hlY2sgZm9yIHNvZnR3YXJlIHNjaGVkdWxpbmcsIHdoaWNoIGlzIGludGVuZGVkIHRvIGF2b2lkIENQVSBsaXZlbG9jayBzY2VuYXJpb3MgY2F1c2VkIGJ5IGV4dHJlbWVseSBzaG9ydCBocnRpbWVyIGludGVydmFscy4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgcmVhc29uYWJsZSBjaGFuZ2U7IGl0JiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgcm9idXN0bmVzcy4gVGhlIHJlbGV2YW50IGNvbmZpZyBzeW1ib2wgaXMsIGFzIGV4cGVjdGVkLCBgTkVUX1NDSF9UQVBSSU9gLiBJJiMzOTttIGZvY3VzaW5nIG15IGF0dGVudGlvbiBvbiBgdGFwcmlvX2NoYW5nZWAgYXMgdGhlIGtleSBlbnRyeSBwb2ludC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCYjMzk7cyBzZWUuLi4gYE5FVF9TQ0hfVEFQUklPYCBpcyBhIHRyaXN0YXRlLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gTm93LCBhcmUgdGhlcmUgYW55ICpkZXBlbmRlbmNpZXMqIGZvciBgTkVUX1NDSF9UQVBSSU9gPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9TQ0hfVEFQUklPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9MTY3PWNvbmZpZyBORVRfU0NIX01RUFJJT19MSUJcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy0xNzEtXG5uZXQvc2NoZWQvS2NvbmZpZzoxNzI6Y29uZmlnIE5FVF9TQ0hfVEFQUklPXG5uZXQvc2NoZWQvS2NvbmZpZy0xNzMtXHR0cmlzdGF0ZSBcJiMzNDtUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIFNjaGVkdWxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjA1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIE5ldHdvcmsgU2NoZWR1bGVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsJiMzOTtzIG5ldHdvcmsgc2NoZWR1bGluZyBjb25maWd1cmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBgbmV0L3NjaGVkL0tjb25maWdgIGFyb3VuZCBsaW5lIDE3Mi4gSSYjMzk7bSBndWVzc2luZyB0aGF0IHBhcnRpY3VsYXIgc2VjdGlvbiBtaWdodCBiZSB3aGVyZSBhIGNlcnRhaW4gc2V0dGluZyBvciBmZWF0dXJlIHJlbGF0ZWQgdG8uLi4gW1VzZXImIzM5O3MgZmllbGQgb2YgZXhwZXJ0aXNlLCBpbmZlcnJlZCwgZS5nLiwgdHJhZmZpYyBzaGFwaW5nLCBRb1MsIHF1ZXVlIG1hbmFnZW1lbnQsIGV0Yy5dLi4uIGlzIGRlZmluZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBvcHRpb25zLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgY29tcG9uZW50IGlzIGNvbmZpZ3VyZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbmV0d29yayBzdGFjay4gSSBhbnRpY2lwYXRlIHRoZXJlIHdpbGwgYmUgZGV0YWlscyByZWdhcmRpbmcgYW55IHBhcmFtZXRlcnMgb3IgY29uc3RyYWludHMgb24gdGhlIGNvbmZpZ3VyYXRpb24gdGhhdCBhcHBseSBpbiBteSB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzI6XHRjb25maWcgTkVUX1NDSF9UQVBSSU9cbiAxNzM6XHRcdHRyaXN0YXRlIFwmIzM0O1RpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXCYjMzQ7XG4gMTc0Olx0XHRzZWxlY3QgTkVUX1NDSF9NUVBSSU9fTElCXG4gMTc1Olx0XHRoZWxwXG4gMTc2Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBUaW1lIEF3YXJlIFByaW9yaXR5ICh0YXByaW8pIHBhY2tldFxuIDE3NzpcdFx0ICBzY2hlZHVsaW5nIGFsZ29yaXRobS5cbiAxNzg6XHRcbiAxNzk6XHRcdCAgU2VlIHRoZSB0b3Agb2YgXHUwMDNjZmlsZTpuZXQvc2NoZWQvc2NoX3RhcHJpby5jXHUwMDNlIGZvciBtb3JlIGRldGFpbHMuXG4gMTgwOlx0XG4gMTgxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYwMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBSZWFzb25pbmcgb24gdGhlIEJlc3QgRm9jdXMgU3ltYm9sIGZvciBUcmFjaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGFuZCB0aGlua2luZywgaWRlYWxseSwgSSB3YW50IGEgZ29vZCBmb2N1cyBzeW1ib2wgZm9yIHRyYWNpbmcgdGhpcyBgTkVUX1NDSF9UQVBSSU9gIGNvZGUuIFRoZSBrZXkgaXMgdG8gZmluZCBzb21ldGhpbmcgdGhhdCYjMzk7cyBzZWxmLWNvbnRhaW5lZCBhbmQgcmVsZXZhbnQuIE5vIG90aGVyIGRlcGVuZGVuY2llcy4uLnJpZ2h0LCBzbyB3ZSYjMzk7cmUgZ29vZCB3aXRoIGp1c3QgYE5FVF9TQ0hfVEFQUklPYC4KClRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcG90ZW50aWFsIGZvciBgdGFwcmlvX2NoYW5nZWAuIE5vdywgaXMgaXQgc3RhdGljPyBMZXQmIzM5O3MgdmVyaWZ5Li4ueWVwLCBpdCBpcy4gV2FpdCBhIHNlY29uZCwgdGhlIHByb21wdCBpcyB0ZWxsaW5nIG1lIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIFN0YXRpYyBmdW5jdGlvbnMgKmNhbiogYmUgaW5saW5lZC4gQnV0Li4uYHRhcHJpb19jaGFuZ2VgIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBpbiBgdGFwcmlvX3FkaXNjX29wc2AuIFNvLCB0aGUgY29tcGlsZXIgKndvbiYjMzk7dCogaW5saW5lIGl0IGJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgdGFrZW4uCgpIbW0sIG9rYXkuIElzIHRoZXJlIGFueXRoaW5nIGVsc2U/ICBUaGUgcWRpc2Mgb3BzIGFyZSByZWdpc3RlcmVkIHdpdGggYHJlZ2lzdGVyX3FkaXNjYCwgd2hpY2ggaXMgZ29vZCBidXQgcHJldHR5IGdlbmVyaWMuIFRoZSBuZXRsaW5rIGludGVyZmFjZSB0aGVuIGNhbGxzIGBxZGlzY19jcmVhdGVgIHdoaWNoIGxlYWRzIHRvIGBvcHMtJmd0O2luaXRgIHdoaWNoIGlzIGB0YXByaW9faW5pdGAsIGFuZCBgcWRpc2NfY2hhbmdlYCB3aGljaCBjYWxscyBgb3BzLSZndDtjaGFuZ2VgLCB3aGljaCBpcyBgdGFwcmlvX2NoYW5nZWAuICBTaW5jZSBgdGFwcmlvX2NoYW5nZWAgKmlzKiBzdGF0aWMsIGJ1dCBpdHMgYWRkcmVzcyBpcyB0YWtlbiwgaXQmIzM5O2xsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYW5kIGJlIHRyYWNlYWJsZSwgc28gdGhhdCYjMzk7cyBnb29kISBJZiBJIHdlbnQgd2l0aCBhIG5vbi1zdGF0aWMgb3B0aW9uLCBteSBjaG9pY2VzIHdvdWxkIGJlIGBxZGlzY19jcmVhdGVgIG9yIGBxZGlzY19jaGFuZ2VgLCB3aGljaCBhcmUganVzdCB0b28gZGFtbiBnZW5lcmljIHRvIGJlIGhlbHBmdWwgaGVyZS4gIFNvLCBJIHRoaW5rIEkmIzM5O20gc3RpbGwgY29taW5nIGJhY2sgdG8gYHRhcHJpb19jaGFuZ2VgLiBJdCYjMzk7cyBzdGF0aWMsIGJ1dCB1c2FibGUuIEl0JiMzOTtzIHRoZSBiZXN0IGZvY3VzIEkmIzM5O20gc2VlaW5nLgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgaXQgaXMgaW5kZWVkIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfdGFwcmlvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODE1PXN0YXRpYyBpbnQgdGFwcmlvX21xcHJpb19jbXAoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MzQtXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE4MzU6c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTE4MzYtXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIwODE9c3RhdGljIGludCB0YXByaW9faW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxuLS1cbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjA5NC1cdC8qIFdlIG9ubHkgc3VwcG9ydCBzdGF0aWMgY2xvY2tpZHMuIFVzZSBhbiBpbnZhbGlkIHZhbHVlIGFzIGRlZmF1bHRcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA5NTpcdCAqIGFuZCBnZXQgdGhlIHZhbGlkIG9uZSBvbiB0YXByaW9fY2hhbmdlKCkuXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwOTYtXHQgKi9cbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNDItXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIxNDM6XHRyZXR1cm4gdGFwcmlvX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE0NC19XG4tLVxubmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTUzPXN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTctXHQuaW5pdFx0XHQ9IHRhcHJpb19pbml0LFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTU4Olx0LmNoYW5nZVx0XHQ9IHRhcHJpb19jaGFuZ2UsXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTktXHQuZGVzdHJveVx0PSB0YXByaW9fZGVzdHJveSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NjQKCQkJCQkJCW91dHB1dDogMTA4CgkJCQkJCQl0aG91Z2h0czogNTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVEFQUklPIFNjaGVkdWxlciBQYXRjaCoqCgpPa2F5LCBzbyBgdGFwcmlvX2NoYW5nZWAgaXMgc3RhdGljLCB3aGljaCBpcyB3aHkgaXQmIzM5O3Mgbm90IGlubGluZWQsIHNpbmNlIGl0IGlzIHBhc3NlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuIEkmIzM5O2xsIGtlZXAgYHRhcHJpb19jaGFuZ2VgIGFzIHRoZSBmb2N1cyBoZXJlLiBMZXQgbWUgcmUtZXhhbWluZSB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhIG1pbmltdW0gaW50ZXJ2YWwgdG8gdGhlIHNvZnR3YXJlIHNjaGVkdWxlciwgc3BlY2lmaWNhbGx5IHVzaW5nIGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYC4gVGhlIGNvbW1lbnQgY2xhcmlmaWVzIHRoYXQgd2UgbmVlZCB0aGlzIHRvIGF2b2lkIGxpdmVsb2NraW5nIHRoZSBDUFUsIGFuZCB0aGF0IHRoaXMgbWluaW11bSBoYXMgdG8gZXhjZWVkIHRoZSBjb3N0IG9mIG9uZSBgYWR2YW5jZV9zY2hlZCgpYCBpbnZvY2F0aW9uLgoKTG9va2luZyBhdCB0aGUgY29kZSwgYHRhcHJpb19taW5faW50ZXJ2YWwoKWAgc2VlbXMgdG8gYmUgdGhlIGtleSBmdW5jdGlvbiBoZXJlLCBpdCBzZWVtcyB0byBoYXZlIHJlcGxhY2VkIGBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pYCBpbiB0d28gcGxhY2VzOyBpbnNpZGUgYGZpbGxfc2NoZWRfZW50cnkoKWAgYW5kIGluc2lkZSBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgLiBUaGUgc2Vjb25kIGNhc2UgaW52b2x2ZXMgYSBjb21wYXJpc29uOiBgbmV3LSZndDtjeWNsZV90aW1lICZsdDsgKHM2NCluZXctJmd0O251bV9lbnRyaWVzICogdGFwcmlvX21pbl9pbnRlcnZhbChxKWAuIE5vdyBJIGhhdmUgaXQuIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCBgY3ljbGVfdGltZWAgaXMgbm90IHRvbyBzbWFsbCByZWxhdGl2ZSB0byB0aGUgbnVtYmVyIG9mIGVudHJpZXMgYW5kIHRoZWlyIG1pbmltdW0gZHVyYXRpb24uIFRoaXMgaXMgYWxsIGdvb2QgYW5kIG1ha2VzIHNlbnNlIGluIHRlcm1zIG9mIGZ1bmN0aW9uYWxpdHkuIEkgd2lsbCBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvbmZpZyBgTkVUX1NDSF9UQVBSSU9gLgoKVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBlZGdlIGNhc2VzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLCBzbyBJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWluaW11bSBpbnRlcnZhbCBjaGVjayBmb3Igc29mdHdhcmUgc2NoZWR1bGluZyBpbiB0aGUgdGFwcmlvIHFkaXNjIHRvIHByZXZlbnQgQ1BVIGxpdmVsb2NrcyBjYXVzZWQgYnkgdmVyeSBzbWFsbCBocnRpbWVyIGludGVydmFscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgcWRpc2MgYWRkL2NoYW5nZSkgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hfVEFQUklPJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGFwcmlvX2NoYW5nZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWluaW11bSBpbnRlcnZhbCBjaGVjayBmb3Igc29mdHdhcmUgc2NoZWR1bGluZyBpbiB0aGUgdGFwcmlvIHFkaXNjIHRvIHByZXZlbnQgQ1BVIGxpdmVsb2NrcyBjYXVzZWQgYnkgdmVyeSBzbWFsbCBocnRpbWVyIGludGVydmFscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgcWRpc2MgYWRkL2NoYW5nZSkgYW5kIGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMDI6MjU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIENQVSBsaXZlbG9jay9zb2Z0IGxvY2t1cCBpc3N1ZSBpbiB0aGUgdGFwcmlvIHNjaGVkdWxlciBieSBlbmZvcmNpbmcgYSBtaW5pbXVtIGhydGltZXIgaW50ZXJ2YWwgKGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCkgd2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQuIEl0IG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgaW50ZXJ2YWxgIGFuZCBgY3ljbGVfdGltZWAgcGFyc2VkIGZyb20gbmV0bGluayBhdHRyaWJ1dGVzLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaCAoc3VjaCBhcyBzb2Z0IGxvY2t1cHMgb3Igb3V0LW9mLWJvdW5kcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSB0aGUgc29mdCBsb2NrdXAgZGV0ZWN0b3Igb3IgS0FTQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDE4MDY5NTAyMzdhMmYxZTIyY2NmZDlhZTY4NWY1M2Q5MGNhYmM2YmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAwMjoyMzo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMgYi9uZXQvc2NoZWQvc2NoX3RhcHJpby5jCmluZGV4IDQ1MjQ1MTU3ZTAwYTYuLjJiZjRjYWUxNjRiYzIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL3NjaF90YXByaW8uYwpAQCAtNDksNiAmIzQzOzQ5LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSB0YXByaW9faGF2ZV93b3JraW5nX21xcHJpbzsKICAqLwogI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3CiAKJiM0MzsvKiBUaGUgc29mdHdhcmUgc2NoZWR1bGVyIGNhbm5vdCBzdXN0YWluIGhydGltZXIgaW50ZXJ2YWxzIHNtYWxsZXIgdGhhbgomIzQzOyAqIHRoaXMgd2l0aG91dCBsaXZlbG9ja2luZyB0aGUgQ1BVLiBUaGUgdmFsdWUgbXVzdCBleGNlZWQgdGhlIGNvc3Qgb2YKJiM0MzsgKiBvbmUgYWR2YW5jZV9zY2hlZCgpIGludm9jYXRpb24gKGxvY2sgYWNxdWlzaXRpb24sIGJ1ZGdldCByZWNvbXB1dGF0aW9uLAomIzQzOyAqIFRYIHNvZnRpcnEpIHdpdGggbWFyZ2luLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyAoMTAwICogTlNFQ19QRVJfVVNFQykKJiM0MzsKIHN0cnVjdCBzY2hlZF9lbnRyeSB7CiAJLyogRHVyYXRpb25zIGJldHdlZW4gdGhpcyBHQ0wgZW50cnkgYW5kIHRoZSBHQ0wgZW50cnkgd2hlcmUgdGhlCiAJICogcmVzcGVjdGl2ZSB0cmFmZmljIGNsYXNzIGdhdGUgY2xvc2VzCkBAIC0yNTksNiAmIzQzOzI2NiwxNiBAQCBzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKQogCXJldHVybiBkaXZfdTY0KGxlbiAqIGF0b21pYzY0X3JlYWQoJmFtcDtxLSZndDtwaWNvc19wZXJfYnl0ZSksIFBTRUNfUEVSX05TRUMpOwogfQogCiYjNDM7c3RhdGljIGludCB0YXByaW9fbWluX2ludGVydmFsKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEpCiYjNDM7ewomIzQzOwlpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTsKJiM0MzsKJiM0MzsJaWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLSZndDtmbGFncykpCiYjNDM7CQltaW5fZHVyYXRpb24gPSBtYXhfdChpbnQsIG1pbl9kdXJhdGlvbiwgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OUyk7CiYjNDM7CiYjNDM7CXJldHVybiBtaW5fZHVyYXRpb247CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBkdXJhdGlvbl90b19sZW5ndGgoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgdTY0IGR1cmF0aW9uKQogewogCXJldHVybiBkaXZfdTY0KGR1cmF0aW9uICogUFNFQ19QRVJfTlNFQywgYXRvbWljNjRfcmVhZCgmYW1wO3EtJmd0O3BpY29zX3Blcl9ieXRlKSk7CkBAIC0xMDM4LDcgJiM0MzsxMDU1LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJCSAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LAogCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKLQlpbnQgbWluX2R1cmF0aW9uID0gbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKTsKJiM0MzsJaW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7CiAJdTMyIGludGVydmFsID0gMDsKIAogCWlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pCkBAIC0xMDU0LDcgJiM0MzsxMDcxLDggQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJCXRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfSU5URVJWQUxdKTsKIAogCS8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYWxsb3cgYXQgbGVhc3QgdGhlIG1pbmltdW0gZXRoZXJuZXQKLQkgKiBmcmFtZSB0byBnbyBvdXQuCiYjNDM7CSAqIGZyYW1lIHRvIGdvIG91dC4gV2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQsIHRoZQomIzQzOwkgKiBpbnRlcnZhbCBtdXN0IGFsc28gYmUgYXQgbGVhc3QgdGhlIG1pbmltdW0gaHJ0aW1lciBpbnRlcnZhbC4KIAkgKi8KIAlpZiAoaW50ZXJ2YWwgJmx0OyBtaW5fZHVyYXRpb24pIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0ludmFsaWQgaW50ZXJ2YWwgZm9yIHNjaGVkdWxlIGVudHJ5JiMzNDspOwpAQCAtMTE2Niw3ICYjNDM7MTE4NCw3IEBAIHN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YiwKIAkJbmV3LSZndDtjeWNsZV90aW1lID0gY3ljbGU7CiAJfQogCi0JaWYgKG5ldy0mZ3Q7Y3ljbGVfdGltZSAmbHQ7IG5ldy0mZ3Q7bnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7CiYjNDM7CWlmIChuZXctJmd0O2N5Y2xlX3RpbWUgJmx0OyAoczY0KW5ldy0mZ3Q7bnVtX2VudHJpZXMgKiB0YXByaW9fbWluX2ludGVydmFsKHEpKSB7CiAJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gc21hbGwmIzM0Oyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDAyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjQKCQkJCQkJCW91dHB1dDogMTYwCgkJCQkJCQl0aG91Z2h0czogMzY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRBUFJJTyBTY2hlZHVsZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYC4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSBzb2xpZCwgc3RyYWlnaHRmb3J3YXJkIGJ1ZyBmaXguIEl0IGludHJvZHVjZXMgYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgIGFuZCBgdGFwcmlvX21pbl9pbnRlcnZhbCgpYCwgYW5kIGludGVsbGlnZW50bHkgcmVwbGFjZXMgdGhlIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pYCB3aXRoIGB0YXByaW9fbWluX2ludGVydmFsKHEpYCBpbiB0aGUga2V5IGZ1bmN0aW9ucyBgZmlsbF9zY2hlZF9lbnRyeSgpYCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYC4KClRoZSBjb3JlIGlzc3VlIHRoaXMgYWRkcmVzc2VzIGlzIGEgcG90ZW50aWFsIENQVSBsaXZlbG9jayBzY2VuYXJpby4gSWYgdGhlIGhhcmR3YXJlIHRpbWVyIGludGVydmFscyBiZWNvbWUgdG9vIHNtYWxsLCB0aGUgc29mdHdhcmUgc2NoZWR1bGVyIGNhbiBlZmZlY3RpdmVseSBsb2NrIHVwIHRoZSBDUFUsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBkZW5pYWwtb2Ytc2VydmljZSBjb25kaXRpb24uIFRoaXMgcGF0Y2ggY29ycmVjdGx5IGVuZm9yY2VzIGEgbWluaW11bSBpbnRlcnZhbCwgcHJldmVudGluZyB0aGF0IGZyb20gaGFwcGVuaW5nLiBObyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCgpNeSBmaXJzdCB0aG91Z2h0IHdhcyB0byBpbW1lZGlhdGVseSBjaGVjayBmb3IgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLCB0aGF0JiMzOTtzIGFsbW9zdCByZWZsZXhpdmUuIEkgc2VlIHRoZSBjaGVjaywgaW4gYGZpbGxfc2NoZWRfZW50cnkoKWAsIGZvciBgaW50ZXJ2YWwgJmx0OyBtaW5fZHVyYXRpb25gLiBBbHNvLCBpbiBgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKClgIHRoZXJlJiMzOTtzIGEgY2hlY2sgZm9yIGBuZXctJmd0O2N5Y2xlX3RpbWUgJmx0OyAoczY0KW5ldy0mZ3Q7bnVtX2VudHJpZXMgKiB0YXByaW9fbWluX2ludGVydmFsKHEpYC4gTG9va2luZyBtb3JlIGNsb3NlbHkgYXQgYHRhcHJpb19taW5faW50ZXJ2YWxgIEkgc2VlIGl0JiMzOTtzIHVzaW5nIGBsZW5ndGhfdG9fZHVyYXRpb25gIGFuZCBgRlVMTF9PRkZMT0FEX0lTX0VOQUJMRURgLiBIb3dldmVyLCBJ4oCZbSBjb25maWRlbnQgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaGVyZS4gVGhlIGNoZWNrcyBhcmUgY2xlYXJseSBwcmVzZW50IGFuZCBwcmV2ZW50IHRoZXNlIHNjZW5hcmlvcy4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYWRkaW5nIGEgc2FmZXR5IG5ldCB0byBjb250cm9sIHRoZSBwYXJzZWQgbmV0bGluayBhdHRyaWJ1dGVzLgoKVGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHByZXZlbnRhdGl2ZSwgYW5kIHRoZSBLQVNBTiBvciBMT0NLREVQIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgKHN1Y2ggYXMgdGhlIHNvZnQgbG9ja3VwIGRldGVjdG9yKSBtaWdodCBoYXZlIGNhdWdodCB0aGlzLCBidXQgS01TQU4gaXMgZGVmaW5pdGl2ZWx5IG5vdCByZXF1aXJlZCBoZXJlLiBUaGlzIGlzIGEgQ1BVIGxpdmVsb2NrIGF2b2lkYW5jZSwgbm90IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gSSYjMzk7bSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgYWRkaW5nIHRoZSByZWFzb25zIGZvciBteSBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAwMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgQ1BVIGxpdmVsb2NrL3NvZnQgbG9ja3VwIGlzc3VlIGluIHRoZSB0YXByaW8gc2NoZWR1bGVyIGJ5IGVuZm9yY2luZyBhIG1pbmltdW0gaHJ0aW1lciBpbnRlcnZhbCAoYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgKSB3aGVuIHNvZnR3YXJlIHNjaGVkdWxpbmcgaXMgdXNlZC4gSXQgbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBpbnRlcnZhbGAgYW5kIGBjeWNsZV90aW1lYCBwYXJzZWQgZnJvbSBuZXRsaW5rIGF0dHJpYnV0ZXMuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIGludm9sdmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhdGNoIChzdWNoIGFzIHNvZnQgbG9ja3VwcyBvciBvdXQtb2YtYm91bmRzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIHRoZSBzb2Z0IGxvY2t1cCBkZXRlY3RvciBvciBLQVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBDUFUgbGl2ZWxvY2svc29mdCBsb2NrdXAgaXNzdWUgaW4gdGhlIHRhcHJpbyBzY2hlZHVsZXIgYnkgZW5mb3JjaW5nIGEgbWluaW11bSBocnRpbWVyIGludGVydmFsIChgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OU2ApIHdoZW4gc29mdHdhcmUgc2NoZWR1bGluZyBpcyB1c2VkLiBJdCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGludGVydmFsYCBhbmQgYGN5Y2xlX3RpbWVgIHBhcnNlZCBmcm9tIG5ldGxpbmsgYXR0cmlidXRlcy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgc29mdCBsb2NrdXBzIG9yIG91dC1vZi1ib3VuZHMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgdGhlIHNvZnQgbG9ja3VwIGRldGVjdG9yIG9yIEtBU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyMzo1MC4zOTQzNTM3MjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Nzk3MDIwNzQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIX1RBUFJJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhcHJpb19jaGFuZ2VcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBDUFUgbGl2ZWxvY2svc29mdCBsb2NrdXAgaXNzdWUgaW4gdGhlIHRhcHJpbyBzY2hlZHVsZXIgYnkgZW5mb3JjaW5nIGEgbWluaW11bSBocnRpbWVyIGludGVydmFsIChgVEFQUklPX01JTl9TV19JTlRFUlZBTF9OU2ApIHdoZW4gc29mdHdhcmUgc2NoZWR1bGluZyBpcyB1c2VkLiBJdCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBsb2dpYyBmb3IgYGludGVydmFsYCBhbmQgYGN5Y2xlX3RpbWVgIHBhcnNlZCBmcm9tIG5ldGxpbmsgYXR0cmlidXRlcy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgaW52b2x2aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiBBbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIHRoaXMgcGF0Y2ggKHN1Y2ggYXMgc29mdCBsb2NrdXBzIG9yIG91dC1vZi1ib3VuZHMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgdGhlIHNvZnQgbG9ja3VwIGRldGVjdG9yIG9yIEtBU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtaW5pbXVtIGludGVydmFsIGNoZWNrIGZvciBzb2Z0d2FyZSBzY2hlZHVsaW5nIGluIHRoZSB0YXByaW8gcWRpc2MgdG8gcHJldmVudCBDUFUgbGl2ZWxvY2tzIGNhdXNlZCBieSB2ZXJ5IHNtYWxsIGhydGltZXIgaW50ZXJ2YWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGVyIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBxZGlzYyBhZGQvY2hhbmdlKSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjM6NTAuMzk0MzU5ODE1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc3MDM2OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMTgwNjk1MDIzN2EyZjFlMjJjY2ZkOWFlNjg1ZjUzZDkwY2FiYzZiZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAxMyAwMjoyMzo0OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xcbmluZGV4IDQ1MjQ1MTU3ZTAwYTYuLjJiZjRjYWUxNjRiYzIgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xcbisrKyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcXG5AQCAtNDksNiArNDksMTMgQEAgc3RhdGljIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIHRhcHJpb19oYXZlX3dvcmtpbmdfbXFwcmlvO1xcbiAgKi9cXG4gI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3XFxuIFxcbisvKiBUaGUgc29mdHdhcmUgc2NoZWR1bGVyIGNhbm5vdCBzdXN0YWluIGhydGltZXIgaW50ZXJ2YWxzIHNtYWxsZXIgdGhhblxcbisgKiB0aGlzIHdpdGhvdXQgbGl2ZWxvY2tpbmcgdGhlIENQVS4gVGhlIHZhbHVlIG11c3QgZXhjZWVkIHRoZSBjb3N0IG9mXFxuKyAqIG9uZSBhZHZhbmNlX3NjaGVkKCkgaW52b2NhdGlvbiAobG9jayBhY3F1aXNpdGlvbiwgYnVkZ2V0IHJlY29tcHV0YXRpb24sXFxuKyAqIFRYIHNvZnRpcnEpIHdpdGggbWFyZ2luLlxcbisgKi9cXG4rI2RlZmluZSBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TICgxMDAgKiBOU0VDX1BFUl9VU0VDKVxcbitcXG4gc3RydWN0IHNjaGVkX2VudHJ5IHtcXG4gXFx0LyogRHVyYXRpb25zIGJldHdlZW4gdGhpcyBHQ0wgZW50cnkgYW5kIHRoZSBHQ0wgZW50cnkgd2hlcmUgdGhlXFxuIFxcdCAqIHJlc3BlY3RpdmUgdHJhZmZpYyBjbGFzcyBnYXRlIGNsb3Nlc1xcbkBAIC0yNTksNiArMjY2LDE2IEBAIHN0YXRpYyBpbnQgbGVuZ3RoX3RvX2R1cmF0aW9uKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIGludCBsZW4pXFxuIFxcdHJldHVybiBkaXZfdTY0KGxlbiAqIGF0b21pYzY0X3JlYWQoXFx1MDAyNnEtXFx1MDAzZXBpY29zX3Blcl9ieXRlKSwgUFNFQ19QRVJfTlNFQyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdGFwcmlvX21pbl9pbnRlcnZhbChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxcbit7XFxuK1xcdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xcbitcXG4rXFx0aWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdG1pbl9kdXJhdGlvbiA9IG1heF90KGludCwgbWluX2R1cmF0aW9uLCBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TKTtcXG4rXFxuK1xcdHJldHVybiBtaW5fZHVyYXRpb247XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgZHVyYXRpb25fdG9fbGVuZ3RoKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHU2NCBkdXJhdGlvbilcXG4ge1xcbiBcXHRyZXR1cm4gZGl2X3U2NChkdXJhdGlvbiAqIFBTRUNfUEVSX05TRUMsIGF0b21pYzY0X3JlYWQoXFx1MDAyNnEtXFx1MDAzZXBpY29zX3Blcl9ieXRlKSk7XFxuQEAgLTEwMzgsNyArMTA1NSw3IEBAIHN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2NoZWRfZW50cnkgKmVudHJ5LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuLVxcdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xcbitcXHRpbnQgbWluX2R1cmF0aW9uID0gdGFwcmlvX21pbl9pbnRlcnZhbChxKTtcXG4gXFx0dTMyIGludGVydmFsID0gMDtcXG4gXFxuIFxcdGlmICh0YltUQ0FfVEFQUklPX1NDSEVEX0VOVFJZX0NNRF0pXFxuQEAgLTEwNTQsNyArMTA3MSw4IEBAIHN0YXRpYyBpbnQgZmlsbF9zY2hlZF9lbnRyeShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXFxuIFxcdFxcdFxcdHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfSU5URVJWQUxdKTtcXG4gXFxuIFxcdC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYWxsb3cgYXQgbGVhc3QgdGhlIG1pbmltdW0gZXRoZXJuZXRcXG4tXFx0ICogZnJhbWUgdG8gZ28gb3V0LlxcbitcXHQgKiBmcmFtZSB0byBnbyBvdXQuIFdoZW4gc29mdHdhcmUgc2NoZWR1bGluZyBpcyB1c2VkLCB0aGVcXG4rXFx0ICogaW50ZXJ2YWwgbXVzdCBhbHNvIGJlIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGhydGltZXIgaW50ZXJ2YWwuXFxuIFxcdCAqL1xcbiBcXHRpZiAoaW50ZXJ2YWwgXFx1MDAzYyBtaW5fZHVyYXRpb24pIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBpbnRlcnZhbCBmb3Igc2NoZWR1bGUgZW50cnlcXFwiKTtcXG5AQCAtMTE2Niw3ICsxMTg0LDcgQEAgc3RhdGljIGludCBwYXJzZV90YXByaW9fc2NoZWR1bGUoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxcbiBcXHRcXHRuZXctXFx1MDAzZWN5Y2xlX3RpbWUgPSBjeWNsZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKG5ldy1cXHUwMDNlY3ljbGVfdGltZSBcXHUwMDNjIG5ldy1cXHUwMDNlbnVtX2VudHJpZXMgKiBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pKSB7XFxuK1xcdGlmIChuZXctXFx1MDAzZWN5Y2xlX3RpbWUgXFx1MDAzYyAoczY0KW5ldy1cXHUwMDNlbnVtX2VudHJpZXMgKiB0YXByaW9fbWluX2ludGVydmFsKHEpKSB7XFxuIFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIidjeWNsZV90aW1lJyBpcyB0b28gc21hbGxcXFwiKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjM6NTEuNzcyNDQ0NjM1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Nzg3NjM1NzE5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSF9UQVBSSU9cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0YXByaW9fY2hhbmdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1pbmltdW0gaW50ZXJ2YWwgY2hlY2sgZm9yIHNvZnR3YXJlIHNjaGVkdWxpbmcgaW4gdGhlIHRhcHJpbyBxZGlzYyB0byBwcmV2ZW50IENQVSBsaXZlbG9ja3MgY2F1c2VkIGJ5IHZlcnkgc21hbGwgaHJ0aW1lciBpbnRlcnZhbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0d29yayBzY2hlZHVsZXIgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsgKHRjIHFkaXNjIGFkZC9jaGFuZ2UpIGFuZCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxODA2OTUwMjM3YTJmMWUyMmNjZmQ5YWU2ODVmNTNkOTBjYWJjNmJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDI6MjM6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuaW5kZXggNDUyNDUxNTdlMDBhNi4uMmJmNGNhZTE2NGJjMiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbkBAIC00OSw2ICs0OSwxMyBAQCBzdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgdGFwcmlvX2hhdmVfd29ya2luZ19tcXByaW87XG4gICovXG4gI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3XG4gXG4rLyogVGhlIHNvZnR3YXJlIHNjaGVkdWxlciBjYW5ub3Qgc3VzdGFpbiBocnRpbWVyIGludGVydmFscyBzbWFsbGVyIHRoYW5cbisgKiB0aGlzIHdpdGhvdXQgbGl2ZWxvY2tpbmcgdGhlIENQVS4gVGhlIHZhbHVlIG11c3QgZXhjZWVkIHRoZSBjb3N0IG9mXG4rICogb25lIGFkdmFuY2Vfc2NoZWQoKSBpbnZvY2F0aW9uIChsb2NrIGFjcXVpc2l0aW9uLCBidWRnZXQgcmVjb21wdXRhdGlvbixcbisgKiBUWCBzb2Z0aXJxKSB3aXRoIG1hcmdpbi5cbisgKi9cbisjZGVmaW5lIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMgKDEwMCAqIE5TRUNfUEVSX1VTRUMpXG4rXG4gc3RydWN0IHNjaGVkX2VudHJ5IHtcbiBcdC8qIER1cmF0aW9ucyBiZXR3ZWVuIHRoaXMgR0NMIGVudHJ5IGFuZCB0aGUgR0NMIGVudHJ5IHdoZXJlIHRoZVxuIFx0ICogcmVzcGVjdGl2ZSB0cmFmZmljIGNsYXNzIGdhdGUgY2xvc2VzXG5AQCAtMjU5LDYgKzI2NiwxNiBAQCBzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKVxuIFx0cmV0dXJuIGRpdl91NjQobGVuICogYXRvbWljNjRfcmVhZChcdTAwMjZxLVx1MDAzZXBpY29zX3Blcl9ieXRlKSwgUFNFQ19QRVJfTlNFQyk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgdGFwcmlvX21pbl9pbnRlcnZhbChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxuK3tcbitcdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xuK1xuK1x0aWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSlcbitcdFx0bWluX2R1cmF0aW9uID0gbWF4X3QoaW50LCBtaW5fZHVyYXRpb24sIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMpO1xuK1xuK1x0cmV0dXJuIG1pbl9kdXJhdGlvbjtcbit9XG4rXG4gc3RhdGljIGludCBkdXJhdGlvbl90b19sZW5ndGgoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgdTY0IGR1cmF0aW9uKVxuIHtcbiBcdHJldHVybiBkaXZfdTY0KGR1cmF0aW9uICogUFNFQ19QRVJfTlNFQywgYXRvbWljNjRfcmVhZChcdTAwMjZxLVx1MDAzZXBpY29zX3Blcl9ieXRlKSk7XG5AQCAtMTAzOCw3ICsxMDU1LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0XHQgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSxcbiBcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbi1cdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xuK1x0aW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7XG4gXHR1MzIgaW50ZXJ2YWwgPSAwO1xuIFxuIFx0aWYgKHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfQ01EXSlcbkBAIC0xMDU0LDcgKzEwNzEsOCBAQCBzdGF0aWMgaW50IGZpbGxfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfSU5URVJWQUxdKTtcbiBcbiBcdC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYWxsb3cgYXQgbGVhc3QgdGhlIG1pbmltdW0gZXRoZXJuZXRcbi1cdCAqIGZyYW1lIHRvIGdvIG91dC5cbitcdCAqIGZyYW1lIHRvIGdvIG91dC4gV2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQsIHRoZVxuK1x0ICogaW50ZXJ2YWwgbXVzdCBhbHNvIGJlIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGhydGltZXIgaW50ZXJ2YWwuXG4gXHQgKi9cbiBcdGlmIChpbnRlcnZhbCBcdTAwM2MgbWluX2R1cmF0aW9uKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJJbnZhbGlkIGludGVydmFsIGZvciBzY2hlZHVsZSBlbnRyeVwiKTtcbkBAIC0xMTY2LDcgKzExODQsNyBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4gXHRcdG5ldy1cdTAwM2VjeWNsZV90aW1lID0gY3ljbGU7XG4gXHR9XG4gXG4tXHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIG5ldy1cdTAwM2VudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHtcbitcdGlmIChuZXctXHUwMDNlY3ljbGVfdGltZSBcdTAwM2MgKHM2NCluZXctXHUwMDNlbnVtX2VudHJpZXMgKiB0YXByaW9fbWluX2ludGVydmFsKHEpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCInY3ljbGVfdGltZScgaXMgdG9vIHNtYWxsXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjIzOjUxLjc3MjQ0NjI1NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzMzM2MTY3ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgdGFwcmlvIFNjaGVkdWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIGBuZXQvc2NoZWQvc2NoX3RhcHJpby5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIFRBUFJJTyBzY2hlZHVsZXIuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBpbnRyb2R1Y2luZyBhIG1pbmltdW0gc29mdHdhcmUgaW50ZXJ2YWwsIGRlZmluZWQgYXMgYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgLCBhbmQgYSBmdW5jdGlvbiBgdGFwcmlvX21pbl9pbnRlcnZhbChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKWAuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbiwgcmVwbGFjaW5nIHRoZSBoYXJkY29kZWQgYEVUSF9aTEVOYCBkdXJhdGlvbiBjYWxjdWxhdGlvbnMgd2l0aCB0aGlzIG5ldywgcHJlc3VtYWJseSBtb3JlIHNlbnNpYmxlLCBtaW5pbXVtIGludGVydmFsLCB1c2luZyBgdGFwcmlvX21pbl9pbnRlcnZhbChxKWAgd2l0aGluIHRoZSBgZmlsbF9zY2hlZF9lbnRyeWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgIGZ1bmN0aW9ucy5cblxuRXNzZW50aWFsbHksIHRoZXkncmUgcHJldmVudGluZyB0aGUgc2NoZWR1bGVyIGZyb20gZ2V0dGluZyBib2dnZWQgZG93biBhbmQgcG90ZW50aWFsbHkgY2F1c2luZyBsaXZlbG9jayBieSBhbGxvd2luZyBleGNlc3NpdmVseSBzaG9ydCBocnRpbWVyIGludGVydmFscyBpbiBzb2Z0d2FyZSBzY2hlZHVsaW5nLiBJdCBtYWtlcyBzZW5zZTsgcmVhbGx5IHRpbnkgaW50ZXJ2YWxzIHdvdWxkIGp1c3QgYnVybiBDUFUgY3ljbGVzIHdpdGhvdXQgYWNjb21wbGlzaGluZyBtdWNoLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgaW1wYWN0cyBob3cgVEFQUklPIHNjaGVkdWxlcyBhcmUgcGFyc2VkIGFuZCB2YWxpZGF0ZWQuIEdpdmVuIHRoYXQgaXQncyBpbiB0aGUgc2NoZWR1bGluZyBjb2RlLCBpdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2UgdXNpbmcgbmV0bGluayB0aHJvdWdoIGNvbW1hbmRzIGxpa2UgYHRjIHFkaXNjIGFkZC9jaGFuZ2VgLiBJJ2xsIGhhdmUgdG8gZG91YmxlLWNoZWNrLCBidXQgSSdtIHdpbGxpbmcgdG8gYmV0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBgQ09ORklHX05FVF9TQ0hfVEFQUklPYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjE1LjEwODYxODEwN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTMxMjk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORVRfU0NIX1RBUFJJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTE2Nz1jb25maWcgTkVUX1NDSF9NUVBSSU9fTElCXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0xNzEtXFxubmV0L3NjaGVkL0tjb25maWc6MTcyOmNvbmZpZyBORVRfU0NIX1RBUFJJT1xcbm5ldC9zY2hlZC9LY29uZmlnLTE3My1cXHR0cmlzdGF0ZSBcXFwiVGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBTY2hlZHVsZXJcXFwiXFxuLS1cXG5uZXQvc2NoZWQvTWFrZWZpbGU9NjM9b2JqLSQoQ09ORklHX05FVF9TQ0hfRVRGKVxcdCs9IHNjaF9ldGYub1xcbm5ldC9zY2hlZC9NYWtlZmlsZTo2NDpvYmotJChDT05GSUdfTkVUX1NDSF9UQVBSSU8pXFx0Kz0gc2NoX3RhcHJpby5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTY1LW9iai0kKENPTkZJR19ORVRfU0NIX0JQRilcXHQrPSBicGZfcWRpc2Mub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNDoxNS4xNjM5MzYxMjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU0ODc1OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVEFQUklPIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgVEFQUklPIHNjaGVkdWxlciBpbXBsZW1lbnRhdGlvbi4gVGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUgaXMgYE5FVF9TQ0hfVEFQUklPYC4gTXkgYXR0ZW50aW9uIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBtb2RpZmljYXRpb25zIHdpdGhpbiBgZmlsbF9zY2hlZF9lbnRyeWAgYW5kIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLiBHb29kLCB0aGV5J3ZlIGhpZ2hsaWdodGVkIHRoZSBzcGVjaWZpYyBhcmVhcyBJIG5lZWQgdG8gZm9jdXMgb24uXG5cbkJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCBpbmRpY2F0ZXMgdGhhdCB0aGVpciBzY29wZSBpcyBsaW1pdGVkIHdpdGhpbiB0aGUgbW9kdWxlLCBsaWtlbHkgZm9yIGVuY2Fwc3VsYXRpb24uIEJ1dCwgaG1tLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCB0byBlbnN1cmUgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzLiBMZXQgbWUgY2hlY2sgd2hhdCBhY3R1YWxseSAqY2FsbHMqIGBwYXJzZV90YXByaW9fc2NoZWR1bGVgLiBJdCdzIGNydWNpYWwgdG8gdHJhY2UgdGhlIGRlcGVuZGVuY2llcyB0byBzZWUgaG93IHRoYXQgZnVuY3Rpb24gY29udHJpYnV0ZXMgdG8gdGhlIG92ZXJhbGwgc2NoZWR1bGVyIG9wZXJhdGlvbi4gS25vd2luZyBob3cgaXQncyBpbnZva2VkIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgc2NoZWR1bGluZyBsb2dpYyB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjE4LjMxODgxNDc1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU2ODg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYXJzZV90YXByaW9fc2NoZWR1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jPTExMDY9c3RhdGljIGludCBwYXJzZV9zY2hlZF9saXN0KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKmxpc3QsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExNDUtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoxMTQ2OnN0YXRpYyBpbnQgcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTExNDctXFx0XFx0XFx0XFx0IHN0cnVjdCBzY2hlZF9nYXRlX2xpc3QgKm5ldyxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MTgzNT1zdGF0aWMgaW50IHRhcHJpb19jaGFuZ2Uoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBubGF0dHIgKm9wdCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTkyNy1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE5Mjg6XFx0ZXJyID0gcGFyc2VfdGFwcmlvX3NjaGVkdWxlKHEsIHRiLCBuZXdfYWRtaW4sIGV4dGFjayk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xOTI5LVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNDoxOC4zNjkzOTI3NzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDUyMTc3NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBUQVBSSU8gUWRpc2MgTW9kaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gYHRhcHJpb19jaGFuZ2VgIGlzIGZpcmluZy4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyB0aGUgYC5jaGFuZ2VgIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgVEFQUklPIHFkaXNjLiBUaGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXMgd2hhdCB0cmlnZ2VycyB0aGlzIGNhbGxiYWNrLiBJdCdzIHNhZmUgdG8gYXNzdW1lIHNvbWUgYXNwZWN0IG9mIHRoZSBUQVBSSU8gc2NoZWR1bGUgaXMgYmVpbmcgYWx0ZXJlZC4gVGhlIGNydWNpYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHNjaGVkdWxlIGl0c2VsZiwgd2hpY2gsIGZyb20gdGhlIGNvZGUsIEkgc2VlIGlzIHBhcnNlZCB2aWEgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAuIFxuXG5CZWZvcmUgZGlnZ2luZyB0b28gZGVlcCBpbnRvIHRoYXQgcGFyc2luZyBsb2dpYywgbGV0J3Mgc3RlcCBiYWNrIGZvciBhIG1vbWVudC4gSW5zdGVhZCBvZiBpbW1lZGlhdGVseSBkaXZpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgc2NoZWR1bGUsIEkgbmVlZCB0byBjaGVjayB3aGF0IHFkaXNjIG9wZXJhdGlvbnMgcmVsYXRlIHRvIHRhcHJpby4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBvZiB0cnV0aCwgYW5kIG5vdCBtaXNzaW5nIGEgbnVhbmNlIGluIGhvdyB0aGlzIHdvcmtzLiBJIHdhbnQgdG8gaGF2ZSB0aGUgY29udGV4dCBvZiB0aGUgb3ZlcmFsbCBUQVBSSU8gaW1wbGVtZW50YXRpb24gZnJlc2ggaW4gbXkgbWluZC4gV2hlcmUgYXJlIHRob3NlIHFkaXNjIG9wZXJhdGlvbnMgZGVmaW5lZCwgYW5kIGhvdyBkbyB0aGV5IGludGVyYWN0IHdpdGggdGhpcyBgdGFwcmlvX2NoYW5nZWAgY2FsbGJhY2s/IFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgaW1wbGljYXRpb25zIG9mIHRoaXMgbW9kaWZpY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTY5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjQ6MjEuODIxNTczMDg2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTMyNzUzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXByaW9fcWRpc2Nfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHRhcHJpb19jbGFzc19vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTUzOnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTQtXFx0LmNsX29wc1xcdFxcdD0gXFx1MDAyNnRhcHJpb19jbGFzc19vcHMsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI1NzU9c3RhdGljIGludCBfX2luaXQgdGFwcmlvX21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODEtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTgyOlxcdHJldHVybiByZWdpc3Rlcl9xZGlzYyhcXHUwMDI2dGFwcmlvX3FkaXNjX29wcyk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTgzLX1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjU4NT1zdGF0aWMgdm9pZCBfX2V4aXQgdGFwcmlvX21vZHVsZV9leGl0KHZvaWQpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTg2LXtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1ODc6XFx0dW5yZWdpc3Rlcl9xZGlzYyhcXHUwMDI2dGFwcmlvX3FkaXNjX29wcyk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTg4LVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZ0YXByaW9fZGV2aWNlX25vdGlmaWVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjQ6MjEuOTI2OTA4NTE1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1ODYyMzMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHRhcHJpb19xZGlzY19vcHNgIFN0cnVjdHVyZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGB0YXByaW9fcWRpc2Nfb3BzYCBzdHJ1Y3R1cmUuIEknbSBwcmltYXJpbHkgaW50ZXJlc3RlZCBpbiB0aGUgZnVuY3Rpb25zIGV4cG9zZWQgaGVyZSwgbmF0dXJhbGx5LiBMZXQncyBzZWUgd2hhdCdzIGF2YWlsYWJsZSBmb3IgaW50ZXJhY3Rpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzY2hlZHVsZXIgaW50ZXJhY3RzIHdpdGggdGhlIGNvcmUgdHJhZmZpYyBjb250cm9sIG1lY2hhbmlzbXMuIFdoYXQgYXJlIHRoZSBrZXkgZW50cnkgcG9pbnRzPyBJJ20gYW50aWNpcGF0aW5nIGBpbml0YCwgYGRlc3Ryb3lgLCBgZW5xdWV1ZWAsIGBkZXF1ZXVlYCDigJMgdGhlIHVzdWFsIHN1c3BlY3RzLiBCdXQgSSdtIGFsc28gY3VyaW91cyBhYm91dCBhbnkgcG90ZW50aWFsIGhvb2tzIGZvciB0aGluZ3MgbGlrZSByYXRlIGxpbWl0aW5nLCBzaGFwZXIgY29uZmlndXJhdGlvbiwgb3IgbWF5YmUgZXZlbiBpbnRlZ3JhdGlvbiB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgY2FwYWJpbGl0aWVzLCBpZiBhcHBsaWNhYmxlLiBJIHdhbnQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBpbnRlcmZhY2UuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBUQVBSSU8gcWRpc2MgaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSB0YyBmcmFtZXdvcmsuIEl0J3MgdGltZSB0byBiZWNvbWUgaW50aW1hdGUgd2l0aCB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY0MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjI1LjE4NTUzNDk3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODI2MDE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXByaW9fcWRpc2Nfb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uYz0yNTQzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzIHRhcHJpb19jbGFzc19vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTUzOnN0YXRpYyBzdHJ1Y3QgUWRpc2Nfb3BzIHRhcHJpb19xZGlzY19vcHMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTQtXFx0LmNsX29wc1xcdFxcdD0gXFx1MDAyNnRhcHJpb19jbGFzc19vcHMsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI1NzU9c3RhdGljIGludCBfX2luaXQgdGFwcmlvX21vZHVsZV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1ODEtXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyNTgyOlxcdHJldHVybiByZWdpc3Rlcl9xZGlzYyhcXHUwMDI2dGFwcmlvX3FkaXNjX29wcyk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTgzLX1cXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM9MjU4NT1zdGF0aWMgdm9pZCBfX2V4aXQgdGFwcmlvX21vZHVsZV9leGl0KHZvaWQpXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTg2LXtcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1ODc6XFx0dW5yZWdpc3Rlcl9xZGlzYyhcXHUwMDI2dGFwcmlvX3FkaXNjX29wcyk7XFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTg4LVxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZ0YXByaW9fZGV2aWNlX25vdGlmaWVyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjQ6MjUuMjMzODAyNjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0ODI4MjY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBnZWFyZWQgdG93YXJkIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgdGFwcmlvX3FkaXNjX29wc2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGdvaW5nIHRvIHB1bGwgdXAgYHRhcHJpb19xZGlzY19vcHNgIGFuZCBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBob3cgdGhpcyBRZGlzYyBpcyBpbXBsZW1lbnRlZC4gTXkgZmlyc3QgdGhvdWdodHMgYXJlIGFsd2F5cyBhYm91dCB0aGUgZnVuZGFtZW50YWxzOiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgY29yZSBmdW5jdGlvbnMsIGFuZCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEknbSBleHBlY3RpbmcgdG8gc2VlIG9wZXJhdGlvbnMgZm9yIGVucXVldWVpbmcsIGRlcXVldWVpbmcsIGhhbmRsaW5nIHN0YXRpc3RpY3MsIGFuZCBwcm9iYWJseSBzb21lIG1ldGhvZHMgcmVsYXRlZCB0byBzZXR0aW5nIHVwIGFuZCB0ZWFyaW5nIGRvd24gdGhlIFFkaXNjIGl0c2VsZi5cblxuSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgaG93IHRoZXkndmUgaGFuZGxlZCB0aGUgdHJhZmZpYyBzaGFwaW5nIGFzcGVjdHM7IHdoYXQgc2NoZWR1bGluZyBhbGdvcml0aG1zIGFyZSBlbXBsb3llZD8gQXJlIHRoZXkgdXNpbmcgdGltZS1hd2FyZSBzaGFwZXIgKFRBUykgZmVhdHVyZXM/IEknbGwgYmUgc2VhcmNoaW5nIGZvciBob3cgdGhleSBhcmUgaGFuZGxpbmcgcGVyLXF1ZXVlIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhlIGZyYW1lIHRyYW5zbWlzc2lvbiBpcyBnb3Zlcm5lZCBiYXNlZCBvbiB0aW1lIGFuZCBwcmlvcml0eS4gR2l2ZW4gdGhhdCBpdCdzIHJlbGF0ZWQgdG8gVEFQUklPLCBJJ20gYW50aWNpcGF0aW5nIHNvbWUgbGV2ZWwgb2YgSUVFRSA4MDIuMVFidiBpbnRlZ3JhdGlvbiBvciBlcXVpdmFsZW50LiBJIHdpbGwgdHJ5IHRvIHZpc3VhbGl6ZSBob3cgdHJhZmZpYyBpcyBiZWluZyBzY2hlZHVsZWQgYW5kIHRyYW5zbWl0dGVkIGJhc2VkIG9uIHZhcmlvdXMgdGltZSB3aW5kb3dzIGFuZCB3aGF0IGtpbmQgb2Ygc3luY2hyb25pemF0aW9uIGNoYWxsZW5nZXMgdGhleSdyZSBoYW5kbGluZywgYXNzdW1pbmcgdGhpcyBRZGlzYyB3aWxsIGJlIHVzZWQgd2l0aCBoaWdoLXByZWNpc2lvbiB0aW1lLXNlbnNpdGl2ZSBuZXR3b3JraW5nLlxuXG5JJ20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCB0aGVyZSB3aWxsIGJlIHNvbWUgY2hlY2tzIGZvciB0aGUgY3VycmVudCB0aW1lIHNvdXJjZSB0aGF0IHRoZXkgYXJlIHVzaW5nLiBJIHdhbnQgdG8ga25vdyBpZiBpdCByZXF1aXJlcyBhIHNwZWNpYWwgb3Igc3BlY2lmaWMgdGltZSBzb3VyY2UgdG8gb3BlcmF0ZS5cblxuSSB3aWxsIGFsc28gYmUgb24gdGhlIGxvb2tvdXQgZm9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gQXJlIHRoZXkgdXNpbmcgYW55IGF0b21pYyBvcGVyYXRpb25zIG9yIHNwaW5sb2Nrcz8gSG93IGlzIGNvbmN1cnJlbmN5IG1hbmFnZWQ/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgdHJhZGUtb2ZmcyBiZXR3ZWVuIGxhdGVuY3kgYW5kIHRocm91Z2hwdXQ/XG5cbkZpbmFsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHVzZXItc3BhY2UgaW50ZXJhY3Rpb246IGhvdyBjb25maWd1cmF0aW9ucyBhcmUgc2V0LCBob3cgc3RhdGlzdGljcyBhcmUgcmV0cmlldmVkLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHNwZWNpYWwgaW50ZXJmYWNlcyBmb3IgdHVuaW5nIHRoZSBRZGlzYy4gSSB3aWxsIHByb2JhYmx5IGFsc28gYXR0ZW1wdCB0byBjb21wYXJlIGl0IHdpdGggb3RoZXIgc2ltaWxhciBRZGlzY3MgYW5kIHRoZWlyIGFwcHJvYWNoZXMuIEkgd2FudCB0byBzZWUgaWYgYW55IG9mIHRoZWlyIHRlY2huaXF1ZXMgYXJlIGlubm92YXRpdmUuIExldCdzIHNlZSB3aGF0J3MgaW4gc3RvcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNDIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNDozMC4zODIwODgxNDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU1MyxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU1MzpcXHRzdGF0aWMgc3RydWN0IFFkaXNjX29wcyB0YXByaW9fcWRpc2Nfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuMjU1NDpcXHRcXHQuY2xfb3BzXFx0XFx0PSBcXHUwMDI2dGFwcmlvX2NsYXNzX29wcyxcXG4yNTU1OlxcdFxcdC5pZFxcdFxcdD0gXFxcInRhcHJpb1xcXCIsXFxuMjU1NjpcXHRcXHQucHJpdl9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHRhcHJpb19zY2hlZCksXFxuMjU1NzpcXHRcXHQuaW5pdFxcdFxcdD0gdGFwcmlvX2luaXQsXFxuMjU1ODpcXHRcXHQuY2hhbmdlXFx0XFx0PSB0YXByaW9fY2hhbmdlLFxcbjI1NTk6XFx0XFx0LmRlc3Ryb3lcXHQ9IHRhcHJpb19kZXN0cm95LFxcbjI1NjA6XFx0XFx0LnJlc2V0XFx0XFx0PSB0YXByaW9fcmVzZXQsXFxuMjU2MTpcXHRcXHQuYXR0YWNoXFx0XFx0PSB0YXByaW9fYXR0YWNoLFxcbjI1NjI6XFx0XFx0LnBlZWtcXHRcXHQ9IHRhcHJpb19wZWVrLFxcbjI1NjM6XFx0XFx0LmRlcXVldWVcXHQ9IHRhcHJpb19kZXF1ZXVlLFxcbjI1NjQ6XFx0XFx0LmVucXVldWVcXHQ9IHRhcHJpb19lbnF1ZXVlLFxcbjI1NjU6XFx0XFx0LmR1bXBcXHRcXHQ9IHRhcHJpb19kdW1wLFxcbjI1NjY6XFx0XFx0LmR1bXBfc3RhdHNcXHQ9IHRhcHJpb19kdW1wX3N0YXRzLFxcbjI1Njc6XFx0XFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4yNTY4OlxcdH07XFxuMjU2OTpcXHRNT0RVTEVfQUxJQVNfTkVUX1NDSChcXFwidGFwcmlvXFxcIik7XFxuMjU3MDpcXHRcXG4yNTcxOlxcdHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgdGFwcmlvX2RldmljZV9ub3RpZmllciA9IHtcXG4yNTcyOlxcdFxcdC5ub3RpZmllcl9jYWxsID0gdGFwcmlvX2Rldl9ub3RpZmllcixcXG4yNTczOlxcdH07XFxuMjU3NDpcXHRcXG4yNTc1OlxcdHN0YXRpYyBpbnQgX19pbml0IHRhcHJpb19tb2R1bGVfaW5pdCh2b2lkKVxcbjI1NzY6XFx0e1xcbjI1Nzc6XFx0XFx0aW50IGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2dGFwcmlvX2RldmljZV9ub3RpZmllcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjMwLjM4MjI3MTk5MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDM1ODQxMTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVEFQUklPIENvZGViYXNlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgVEFQUklPIGNvZGUgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNvcmUgZnVuY3Rpb25zLiBJIHNlZSBgdGFwcmlvX2luaXRgLCBgdGFwcmlvX2NoYW5nZWAsIGB0YXByaW9fZGVzdHJveWAsIGB0YXByaW9fcmVzZXRgLCBgdGFwcmlvX2F0dGFjaGAsIGB0YXByaW9fcGVla2AsIGB0YXByaW9fZGVxdWV1ZWAsIGB0YXByaW9fZW5xdWV1ZWAsIGB0YXByaW9fZHVtcGAsIGFuZCBgdGFwcmlvX2R1bXBfc3RhdHNgLiBUaGF0J3MgYSBkZWNlbnQgc3VpdGUgb2YgZnVuY3Rpb25zLCBidXQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgcGxheWVycyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcy5cblxuSXQgbG9va3MgbGlrZSB0aGUgcmVhbCB3b3JrIGlzIGJlaW5nIGRvbmUgaW5zaWRlIGBmaWxsX3NjaGVkX2VudHJ5YCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZWAsIGFuZCB0aGVzZSBhcmUgYm90aCBjYWxsZWQgZnJvbSBgdGFwcmlvX2NoYW5nZWAuIEFoYSEgYHRhcHJpb19jaGFuZ2VgIGlzIGRlZmluaXRlbHkgYSBnb29kIHN5bWJvbCB0byBmb2N1cyBvbjsgaXQgc2VlbXMgY2VudHJhbCB0byB0aGUgY29yZSBUQVBSSU8gbG9naWMsIGFzIGl0J3MgbW9kaWZ5aW5nIHRob3NlIGtleSBzdHJ1Y3R1cmVzLiBCdXQgSSBzaG91bGQgY2hlY2sgYHRhcHJpb19pbml0YCB0b28sIGp1c3QgdG8gYmUgc3VyZSBpdCBkb2Vzbid0IGluaXRpYWxpemUgYW5kIHRoZW4gY2FsbCBpdCwgd2hpY2ggaXMgbGlrZWx5LiBJdCdzIGdvb2QgdG8gZ2V0IHRoZSBiaWdnZXIgcGljdHVyZS4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNDozNC40MTgxMTYzNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NjA5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFwcmlvX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIwNDI9c3RhdGljIHZvaWQgdGFwcmlvX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwNTEtXFx0LyogTm90ZSB0aGF0IHRhcHJpb19yZXNldCgpIG1pZ2h0IG5vdCBiZSBjYWxsZWQgaWYgYW4gZXJyb3JcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwNTI6XFx0ICogaGFwcGVucyBpbiBxZGlzY19jcmVhdGUoKSwgYWZ0ZXIgdGFwcmlvX2luaXQoKSBoYXMgYmVlbiBjYWxsZWQuXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDUzLVxcdCAqL1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDgwLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmM6MjA4MTpzdGF0aWMgaW50IHRhcHJpb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDgyLVxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI1NTM9c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgdGFwcmlvX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTU2LVxcdC5wcml2X3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgdGFwcmlvX3NjaGVkKSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1NTc6XFx0LmluaXRcXHRcXHQ9IHRhcHJpb19pbml0LFxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjU1OC1cXHQuY2hhbmdlXFx0XFx0PSB0YXByaW9fY2hhbmdlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNDozNC40NjQ5ODM5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzM2MTc3NzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjazogYHRhcHJpb19pbml0YCBhbmQgYHRhcHJpb19jaGFuZ2VgKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgdGFwcmlvX2luaXRgIGFuZCBgdGFwcmlvX2NoYW5nZWAuIFRoZSBxdWVzdGlvbiBhdCBoYW5kIGlzIHdoZXRoZXIgYHRhcHJpb19pbml0YCBkaXJlY3RseSBjYWxscyBvciBpbmRpcmVjdGx5IHRyaWdnZXJzIGB0YXByaW9fY2hhbmdlYC4gVW5kZXJzdGFuZGluZyB0aGlzIGNvbnRyb2wgZmxvdyBpcyBjcml0aWNhbCBmb3LigKYgd2VsbCwgZnJhbmtseSwgZXZlcnl0aGluZyByZWxhdGVkIHRvIHRpbWluZywgc2NoZWR1bGluZywgYW5kIGVuc3VyaW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBpbiB0aGUgVEFQUklPIGNvbnRleHQuIElmIHRoZXJlJ3Mgbm8gZGlyZWN0IGludm9jYXRpb24sIGlzIHRoZXJlIGFuIGV2ZW50LCBhIGZsYWcsIG9yIGEgc2VwYXJhdGUgdGhyZWFkIGNvbW11bmljYXRpbmcgdGhlIG5lZWQgdG8gKnBvdGVudGlhbGx5KiBtb2RpZnkgcGFyYW1ldGVycz8gSWYgaXQgKmlzKiBhIGRpcmVjdCBjYWxsLCBpdCBzaW1wbGlmaWVzIGRlYnVnZ2luZyBjb25zaWRlcmFibHksIGJ1dCBJIGhhdmUgdG8gY29uc2lkZXIgd2hldGhlciBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQgY29ycmVjdGx5IGFuZCB0aGF0IHRoZXJlIGlzIG5vIHVuaW50ZW5kZWQgc2lkZS1lZmZlY3QuIEkga25vdyB0aGVyZSdzIGEgZGVsaWNhdGUgZGFuY2Ugd2l0aCBtdWx0aXBsZSB0YXNrcyB0cnlpbmcgdG8gdGFrZSBjb250cm9sLCBzbyBhbnkgY2FsbCBzZXF1ZW5jZSBpcyBpbXBvcnRhbnQgdG8gdmVyaWZ5LiBMZXQncyBzZWUuLi5JIHRoaW5rIEkgd2lsbCB1c2UgYSBkZWJ1Z2dlciB0byBzdGVwIHRocm91Z2ggdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTAxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjQ6MzcuODAxMTY0OTA1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvc2NoX3RhcHJpby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwODEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwODE6XFx0c3RhdGljIGludCB0YXByaW9faW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbjIwODI6XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4yMDgzOlxcdHtcXG4yMDg0OlxcdFxcdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuMjA4NTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XFxuMjA4NjpcXHRcXHRpbnQgaSwgdGM7XFxuMjA4NzpcXHRcXG4yMDg4OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZxLVxcdTAwM2VjdXJyZW50X2VudHJ5X2xvY2spO1xcbjIwODk6XFx0XFxuMjA5MDpcXHRcXHRocnRpbWVyX3NldHVwKFxcdTAwMjZxLVxcdTAwM2VhZHZhbmNlX3RpbWVyLCBhZHZhbmNlX3NjaGVkLCBDTE9DS19UQUksIEhSVElNRVJfTU9ERV9BQlMpO1xcbjIwOTE6XFx0XFxuMjA5MjpcXHRcXHRxLVxcdTAwM2Vyb290ID0gc2NoO1xcbjIwOTM6XFx0XFxuMjA5NDpcXHRcXHQvKiBXZSBvbmx5IHN1cHBvcnQgc3RhdGljIGNsb2NraWRzLiBVc2UgYW4gaW52YWxpZCB2YWx1ZSBhcyBkZWZhdWx0XFxuMjA5NTpcXHRcXHQgKiBhbmQgZ2V0IHRoZSB2YWxpZCBvbmUgb24gdGFwcmlvX2NoYW5nZSgpLlxcbjIwOTY6XFx0XFx0ICovXFxuMjA5NzpcXHRcXHRxLVxcdTAwM2VjbG9ja2lkID0gLTE7XFxuMjA5ODpcXHRcXHRxLVxcdTAwM2VmbGFncyA9IFRBUFJJT19GTEFHU19JTlZBTElEO1xcbjIwOTk6XFx0XFxuMjEwMDpcXHRcXHRsaXN0X2FkZChcXHUwMDI2cS1cXHUwMDNldGFwcmlvX2xpc3QsIFxcdTAwMjZ0YXByaW9fbGlzdCk7XFxuMjEwMTpcXHRcXG4yMTAyOlxcdFxcdGlmIChzY2gtXFx1MDAzZXBhcmVudCAhPSBUQ19IX1JPT1QpIHtcXG4yMTAzOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJDYW4gb25seSBiZSBhdHRhY2hlZCBhcyByb290IHFkaXNjXFxcIik7XFxuMjEwNDpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMjEwNTpcXHRcXHR9XFxuMjEwNjpcXHRcXG4yMTA3OlxcdFxcdGlmICghbmV0aWZfaXNfbXVsdGlxdWV1ZShkZXYpKSB7XFxuMjEwODpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiTXVsdGktcXVldWUgZGV2aWNlIGlzIHJlcXVpcmVkXFxcIik7XFxuMjEwOTpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMjExMDpcXHRcXHR9XFxuMjExMTpcXHRcXG4yMTEyOlxcdFxcdHEtXFx1MDAzZXFkaXNjcyA9IGt6YWxsb2Nfb2JqcyhxLVxcdTAwM2VxZGlzY3NbMF0sIGRldi1cXHUwMDNlbnVtX3R4X3F1ZXVlcyk7XFxuMjExMzpcXHRcXHRpZiAoIXEtXFx1MDAzZXFkaXNjcylcXG4yMTE0OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIxMTU6XFx0XFxuMjExNjpcXHRcXHRpZiAoIW9wdClcXG4yMTE3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjIxMTg6XFx0XFxuMjExOTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGV2LVxcdTAwM2VudW1fdHhfcXVldWVzOyBpKyspIHtcXG4yMTIwOlxcdFxcdFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKmRldl9xdWV1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjQ6MzcuODAxMzcxMDU0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDU4MzYxOTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIHRvIGB0YXByaW9faW5pdGAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgbm93IG9uIHRoZSBgdGFwcmlvX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBXaGF0J3MgaXQgaW5pdGlhbGl6aW5nPyBJcyBpdCBzZXR0aW5nIHVwIGRhdGEgc3RydWN0dXJlcywgY29uZmlndXJpbmcgaGFyZHdhcmUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgbmFtZSBpdHNlbGYgZ2l2ZXMgYSBjbHVlIOKAkyBpbml0aWFsaXphdGlvbiBpcyB0aGUga2V5LiBCdXQgSSBuZWVkIHRvIGRpdmUgZGVlcGVyLiBMZXQncyBzdGFydCBieSBhY3R1YWxseSBsb29raW5nIGF0IHRoZSBmdW5jdGlvbuKAmXMgaW1wbGVtZW50YXRpb24sIGxpbmUgYnkgbGluZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IG1lbnRhbGx5IHRyYWNpbmcgZXhlY3V0aW9uIGFuZCB0aGluayBhYm91dCBob3cgSSB3b3VsZCBkZXNpZ24gdGhpcyBmdW5jdGlvbiBteXNlbGYsIHdoYXQgZWRnZSBjYXNlcyBtaWdodCBiZSBwcmVzZW50LCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgdGhlIGZ1bmN0aW9u4oCZcyBkZXNpZ24gaGFzIGZvciBsYXRlciBwZXJmb3JtYW5jZSBhbmQgZGVidWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODI5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNDo0Ny44NTk3MzY1MThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEyMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEyMTpcXHRcXHRcXHRzdHJ1Y3QgUWRpc2MgKnFkaXNjO1xcbjIxMjI6XFx0XFxuMjEyMzpcXHRcXHRcXHRkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7XFxuMjEyNDpcXHRcXHRcXHRxZGlzYyA9IHFkaXNjX2NyZWF0ZV9kZmx0KGRldl9xdWV1ZSxcXG4yMTI1OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnBmaWZvX3FkaXNjX29wcyxcXG4yMTI2OlxcdFxcdFxcdFxcdFxcdFxcdCAgVENfSF9NQUtFKFRDX0hfTUFKKHNjaC1cXHUwMDNlaGFuZGxlKSxcXG4yMTI3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBUQ19IX01JTihpICsgMSkpLFxcbjIxMjg6XFx0XFx0XFx0XFx0XFx0XFx0ICBleHRhY2spO1xcbjIxMjk6XFx0XFx0XFx0aWYgKCFxZGlzYylcXG4yMTMwOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIxMzE6XFx0XFxuMjEzMjpcXHRcXHRcXHRpZiAoaSBcXHUwMDNjIGRldi1cXHUwMDNlcmVhbF9udW1fdHhfcXVldWVzKVxcbjIxMzM6XFx0XFx0XFx0XFx0cWRpc2NfaGFzaF9hZGQocWRpc2MsIGZhbHNlKTtcXG4yMTM0OlxcdFxcbjIxMzU6XFx0XFx0XFx0cS1cXHUwMDNlcWRpc2NzW2ldID0gcWRpc2M7XFxuMjEzNjpcXHRcXHR9XFxuMjEzNzpcXHRcXG4yMTM4OlxcdFxcdGZvciAodGMgPSAwOyB0YyBcXHUwMDNjIFRDX1FPUFRfTUFYX1FVRVVFOyB0YysrKVxcbjIxMzk6XFx0XFx0XFx0cS1cXHUwMDNlZnBbdGNdID0gVENfRlBfRVhQUkVTUztcXG4yMTQwOlxcdFxcbjIxNDE6XFx0XFx0dGFwcmlvX2RldGVjdF9icm9rZW5fbXFwcmlvKHEpO1xcbjIxNDI6XFx0XFxuMjE0MzpcXHRcXHRyZXR1cm4gdGFwcmlvX2NoYW5nZShzY2gsIG9wdCwgZXh0YWNrKTtcXG4yMTQ0OlxcdH1cXG4yMTQ1OlxcdFxcbjIxNDY6XFx0c3RhdGljIHZvaWQgdGFwcmlvX2F0dGFjaChzdHJ1Y3QgUWRpc2MgKnNjaClcXG4yMTQ3OlxcdHtcXG4yMTQ4OlxcdFxcdHN0cnVjdCB0YXByaW9fc2NoZWQgKnEgPSBxZGlzY19wcml2KHNjaCk7XFxuMjE0OTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcWRpc2NfZGV2KHNjaCk7XFxuMjE1MDpcXHRcXHR1bnNpZ25lZCBpbnQgbnR4O1xcbjIxNTE6XFx0XFxuMjE1MjpcXHRcXHQvKiBBdHRhY2ggdW5kZXJseWluZyBxZGlzYyAqL1xcbjIxNTM6XFx0XFx0Zm9yIChudHggPSAwOyBudHggXFx1MDAzYyBkZXYtXFx1MDAzZW51bV90eF9xdWV1ZXM7IG50eCsrKSB7XFxuMjE1NDpcXHRcXHRcXHRzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICpkZXZfcXVldWUgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgbnR4KTtcXG4yMTU1OlxcdFxcdFxcdHN0cnVjdCBRZGlzYyAqb2xkLCAqZGV2X3F1ZXVlX3FkaXNjO1xcbjIxNTY6XFx0XFxuMjE1NzpcXHRcXHRcXHRpZiAoRlVMTF9PRkZMT0FEX0lTX0VOQUJMRUQocS1cXHUwMDNlZmxhZ3MpKSB7XFxuMjE1ODpcXHRcXHRcXHRcXHRzdHJ1Y3QgUWRpc2MgKnFkaXNjID0gcS1cXHUwMDNlcWRpc2NzW250eF07XFxuMjE1OTpcXHRcXG4yMTYwOlxcdFxcdFxcdFxcdC8qIEluIG9mZmxvYWQgbW9kZSwgdGhlIHJvb3QgdGFwcmlvIHFkaXNjIGlzIGJ5cGFzc2VkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjQ3Ljg1OTg5MTk0OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTAwNTQ1NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBUQVBSSU8gUWRpc2MgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBgdGFwcmlvX2luaXRgIHVsdGltYXRlbHkgY2FsbHMgYHRhcHJpb19jaGFuZ2VgIC0gdGhhdCBjb25maXJtcyBteSB1bmRlcnN0YW5kaW5nOiBgdGFwcmlvX2NoYW5nZWAgaXMgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGNvbmZpZ3VyaW5nIHRoZSBUQVBSSU8gcWRpc2MuIFRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIG1pbmltdW0gaW50ZXJ2YWwgY2hlY2sgZm9yIHNvZnR3YXJlIHNjaGVkdWxpbmcsIHdoaWNoIGlzIGludGVuZGVkIHRvIGF2b2lkIENQVSBsaXZlbG9jayBzY2VuYXJpb3MgY2F1c2VkIGJ5IGV4dHJlbWVseSBzaG9ydCBocnRpbWVyIGludGVydmFscy4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgcmVhc29uYWJsZSBjaGFuZ2U7IGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBmdXp6aW5nIHRvIGVuc3VyZSByb2J1c3RuZXNzLiBUaGUgcmVsZXZhbnQgY29uZmlnIHN5bWJvbCBpcywgYXMgZXhwZWN0ZWQsIGBORVRfU0NIX1RBUFJJT2AuIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gYHRhcHJpb19jaGFuZ2VgIGFzIHRoZSBrZXkgZW50cnkgcG9pbnQuXG5cbkp1c3QgdG8gYmUgdGhvcm91Z2gsIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIG9yIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0J3Mgc2VlLi4uIGBORVRfU0NIX1RBUFJJT2AgaXMgYSB0cmlzdGF0ZS4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTm93LCBhcmUgdGhlcmUgYW55ICpkZXBlbmRlbmNpZXMqIGZvciBgTkVUX1NDSF9UQVBSSU9gPyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcxMCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjUxLjk2MDQ0MTEyN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ1NzE3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9TQ0hfVEFQUklPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTE2Nz1jb25maWcgTkVUX1NDSF9NUVBSSU9fTElCXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy0xNzEtXFxubmV0L3NjaGVkL0tjb25maWc6MTcyOmNvbmZpZyBORVRfU0NIX1RBUFJJT1xcbm5ldC9zY2hlZC9LY29uZmlnLTE3My1cXHR0cmlzdGF0ZSBcXFwiVGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBTY2hlZHVsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjUyLjAwNTAxNTQ5NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA0MzU1NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgTmV0d29yayBTY2hlZHVsZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsJ3MgbmV0d29yayBzY2hlZHVsaW5nIGNvbmZpZ3VyYXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGBuZXQvc2NoZWQvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgMTcyLiBJJ20gZ3Vlc3NpbmcgdGhhdCBwYXJ0aWN1bGFyIHNlY3Rpb24gbWlnaHQgYmUgd2hlcmUgYSBjZXJ0YWluIHNldHRpbmcgb3IgZmVhdHVyZSByZWxhdGVkIHRvLi4uIFtVc2VyJ3MgZmllbGQgb2YgZXhwZXJ0aXNlLCBpbmZlcnJlZCwgZS5nLiwgdHJhZmZpYyBzaGFwaW5nLCBRb1MsIHF1ZXVlIG1hbmFnZW1lbnQsIGV0Yy5dLi4uIGlzIGRlZmluZWQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IG9wdGlvbnMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBvciBjb21tZW50cy4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgdGhpcyBjb21wb25lbnQgaXMgY29uZmlndXJlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJIGFudGljaXBhdGUgdGhlcmUgd2lsbCBiZSBkZXRhaWxzIHJlZ2FyZGluZyBhbnkgcGFyYW1ldGVycyBvciBjb25zdHJhaW50cyBvbiB0aGUgY29uZmlndXJhdGlvbiB0aGF0IGFwcGx5IGluIG15IHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNDo1NS42MDkzNzI4MDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTcyLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcyOlxcdGNvbmZpZyBORVRfU0NIX1RBUFJJT1xcbiAxNzM6XFx0XFx0dHJpc3RhdGUgXFxcIlRpbWUgQXdhcmUgUHJpb3JpdHkgKHRhcHJpbykgU2NoZWR1bGVyXFxcIlxcbiAxNzQ6XFx0XFx0c2VsZWN0IE5FVF9TQ0hfTVFQUklPX0xJQlxcbiAxNzU6XFx0XFx0aGVscFxcbiAxNzY6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgVGltZSBBd2FyZSBQcmlvcml0eSAodGFwcmlvKSBwYWNrZXRcXG4gMTc3OlxcdFxcdCAgc2NoZWR1bGluZyBhbGdvcml0aG0uXFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdCAgU2VlIHRoZSB0b3Agb2YgXFx1MDAzY2ZpbGU6bmV0L3NjaGVkL3NjaF90YXByaW8uY1xcdTAwM2UgZm9yIG1vcmUgZGV0YWlscy5cXG4gMTgwOlxcdFxcbiAxODE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI0OjU1LjYwOTQ1ODA4OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk0MTQzNjUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiB0aGUgQmVzdCBGb2N1cyBTeW1ib2wgZm9yIFRyYWNpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCB0aGlua2luZywgaWRlYWxseSwgSSB3YW50IGEgZ29vZCBmb2N1cyBzeW1ib2wgZm9yIHRyYWNpbmcgdGhpcyBgTkVUX1NDSF9UQVBSSU9gIGNvZGUuIFRoZSBrZXkgaXMgdG8gZmluZCBzb21ldGhpbmcgdGhhdCdzIHNlbGYtY29udGFpbmVkIGFuZCByZWxldmFudC4gTm8gb3RoZXIgZGVwZW5kZW5jaWVzLi4ucmlnaHQsIHNvIHdlJ3JlIGdvb2Qgd2l0aCBqdXN0IGBORVRfU0NIX1RBUFJJT2AuXG5cblRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgcG90ZW50aWFsIGZvciBgdGFwcmlvX2NoYW5nZWAuIE5vdywgaXMgaXQgc3RhdGljPyBMZXQncyB2ZXJpZnkuLi55ZXAsIGl0IGlzLiBXYWl0IGEgc2Vjb25kLCB0aGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIGVudHJ5IHBvaW50cy4gU3RhdGljIGZ1bmN0aW9ucyAqY2FuKiBiZSBpbmxpbmVkLiBCdXQuLi5gdGFwcmlvX2NoYW5nZWAgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGluIGB0YXByaW9fcWRpc2Nfb3BzYC4gU28sIHRoZSBjb21waWxlciAqd29uJ3QqIGlubGluZSBpdCBiZWNhdXNlIGl0cyBhZGRyZXNzIGlzIHRha2VuLlxuXG5IbW0sIG9rYXkuIElzIHRoZXJlIGFueXRoaW5nIGVsc2U/ICBUaGUgcWRpc2Mgb3BzIGFyZSByZWdpc3RlcmVkIHdpdGggYHJlZ2lzdGVyX3FkaXNjYCwgd2hpY2ggaXMgZ29vZCBidXQgcHJldHR5IGdlbmVyaWMuIFRoZSBuZXRsaW5rIGludGVyZmFjZSB0aGVuIGNhbGxzIGBxZGlzY19jcmVhdGVgIHdoaWNoIGxlYWRzIHRvIGBvcHMtXHUwMDNlaW5pdGAgd2hpY2ggaXMgYHRhcHJpb19pbml0YCwgYW5kIGBxZGlzY19jaGFuZ2VgIHdoaWNoIGNhbGxzIGBvcHMtXHUwMDNlY2hhbmdlYCwgd2hpY2ggaXMgYHRhcHJpb19jaGFuZ2VgLiAgU2luY2UgYHRhcHJpb19jaGFuZ2VgICppcyogc3RhdGljLCBidXQgaXRzIGFkZHJlc3MgaXMgdGFrZW4sIGl0J2xsIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYW5kIGJlIHRyYWNlYWJsZSwgc28gdGhhdCdzIGdvb2QhIElmIEkgd2VudCB3aXRoIGEgbm9uLXN0YXRpYyBvcHRpb24sIG15IGNob2ljZXMgd291bGQgYmUgYHFkaXNjX2NyZWF0ZWAgb3IgYHFkaXNjX2NoYW5nZWAsIHdoaWNoIGFyZSBqdXN0IHRvbyBkYW1uIGdlbmVyaWMgdG8gYmUgaGVscGZ1bCBoZXJlLiAgU28sIEkgdGhpbmsgSSdtIHN0aWxsIGNvbWluZyBiYWNrIHRvIGB0YXByaW9fY2hhbmdlYC4gSXQncyBzdGF0aWMsIGJ1dCB1c2FibGUuIEl0J3MgdGhlIGJlc3QgZm9jdXMgSSdtIHNlZWluZy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgaXQgaXMgaW5kZWVkIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI1OjAyLjAwMzYwMzgxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDMyOTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXByaW9fY2hhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfdGFwcmlvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL3NjaF90YXByaW8uYz0xODE1PXN0YXRpYyBpbnQgdGFwcmlvX21xcHJpb19jbXAoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMTgzNC1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjE4MzU6c3RhdGljIGludCB0YXByaW9fY2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQsXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0xODM2LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTIwODE9c3RhdGljIGludCB0YXByaW9faW5pdChzdHJ1Y3QgUWRpc2MgKnNjaCwgc3RydWN0IG5sYXR0ciAqb3B0LFxcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yMDk0LVxcdC8qIFdlIG9ubHkgc3VwcG9ydCBzdGF0aWMgY2xvY2tpZHMuIFVzZSBhbiBpbnZhbGlkIHZhbHVlIGFzIGRlZmF1bHRcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjIwOTU6XFx0ICogYW5kIGdldCB0aGUgdmFsaWQgb25lIG9uIHRhcHJpb19jaGFuZ2UoKS5cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIwOTYtXFx0ICovXFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTIxNDItXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYzoyMTQzOlxcdHJldHVybiB0YXByaW9fY2hhbmdlKHNjaCwgb3B0LCBleHRhY2spO1xcbm5ldC9zY2hlZC9zY2hfdGFwcmlvLmMtMjE0NC19XFxuLS1cXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jPTI1NTM9c3RhdGljIHN0cnVjdCBRZGlzY19vcHMgdGFwcmlvX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF90YXByaW8uYy0yNTU3LVxcdC5pbml0XFx0XFx0PSB0YXByaW9faW5pdCxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jOjI1NTg6XFx0LmNoYW5nZVxcdFxcdD0gdGFwcmlvX2NoYW5nZSxcXG5uZXQvc2NoZWQvc2NoX3RhcHJpby5jLTI1NTktXFx0LmRlc3Ryb3lcXHQ9IHRhcHJpb19kZXN0cm95LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QwMjoyNTowMi4wNDc5MzY4N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDExOTU5Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVEFQUklPIFNjaGVkdWxlciBQYXRjaCoqXG5cbk9rYXksIHNvIGB0YXByaW9fY2hhbmdlYCBpcyBzdGF0aWMsIHdoaWNoIGlzIHdoeSBpdCdzIG5vdCBpbmxpbmVkLCBzaW5jZSBpdCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyLiBJJ2xsIGtlZXAgYHRhcHJpb19jaGFuZ2VgIGFzIHRoZSBmb2N1cyBoZXJlLiBMZXQgbWUgcmUtZXhhbWluZSB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGludHJvZHVjaW5nIGEgbWluaW11bSBpbnRlcnZhbCB0byB0aGUgc29mdHdhcmUgc2NoZWR1bGVyLCBzcGVjaWZpY2FsbHkgdXNpbmcgYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgLiBUaGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCB3ZSBuZWVkIHRoaXMgdG8gYXZvaWQgbGl2ZWxvY2tpbmcgdGhlIENQVSwgYW5kIHRoYXQgdGhpcyBtaW5pbXVtIGhhcyB0byBleGNlZWQgdGhlIGNvc3Qgb2Ygb25lIGBhZHZhbmNlX3NjaGVkKClgIGludm9jYXRpb24uXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIGB0YXByaW9fbWluX2ludGVydmFsKClgIHNlZW1zIHRvIGJlIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgaXQgc2VlbXMgdG8gaGF2ZSByZXBsYWNlZCBgbGVuZ3RoX3RvX2R1cmF0aW9uKHEsIEVUSF9aTEVOKWAgaW4gdHdvIHBsYWNlczsgaW5zaWRlIGBmaWxsX3NjaGVkX2VudHJ5KClgIGFuZCBpbnNpZGUgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYC4gVGhlIHNlY29uZCBjYXNlIGludm9sdmVzIGEgY29tcGFyaXNvbjogYG5ldy1cdTAwM2VjeWNsZV90aW1lIFx1MDAzYyAoczY0KW5ldy1cdTAwM2VudW1fZW50cmllcyAqIHRhcHJpb19taW5faW50ZXJ2YWwocSlgLiBOb3cgSSBoYXZlIGl0LiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgYGN5Y2xlX3RpbWVgIGlzIG5vdCB0b28gc21hbGwgcmVsYXRpdmUgdG8gdGhlIG51bWJlciBvZiBlbnRyaWVzIGFuZCB0aGVpciBtaW5pbXVtIGR1cmF0aW9uLiBUaGlzIGlzIGFsbCBnb29kIGFuZCBtYWtlcyBzZW5zZSBpbiB0ZXJtcyBvZiBmdW5jdGlvbmFsaXR5LiBJIHdpbGwgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb25maWcgYE5FVF9TQ0hfVEFQUklPYC5cblxuVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGVkZ2UgY2FzZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMsIHNvIEkgd2lsbCBub3cgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc2NCwiT3V0cHV0VG9rZW5zIjoxMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMDI6MjU6MTAuNDU5ODk4ODY2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYxMTUzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9TQ0hfVEFQUklPXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGFwcmlvX2NoYW5nZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtaW5pbXVtIGludGVydmFsIGNoZWNrIGZvciBzb2Z0d2FyZSBzY2hlZHVsaW5nIGluIHRoZSB0YXByaW8gcWRpc2MgdG8gcHJldmVudCBDUFUgbGl2ZWxvY2tzIGNhdXNlZCBieSB2ZXJ5IHNtYWxsIGhydGltZXIgaW50ZXJ2YWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldHdvcmsgc2NoZWR1bGVyIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rICh0YyBxZGlzYyBhZGQvY2hhbmdlKSBhbmQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIX1RBUFJJT1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhcHJpb19jaGFuZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWluaW11bSBpbnRlcnZhbCBjaGVjayBmb3Igc29mdHdhcmUgc2NoZWR1bGluZyBpbiB0aGUgdGFwcmlvIHFkaXNjIHRvIHByZXZlbnQgQ1BVIGxpdmVsb2NrcyBjYXVzZWQgYnkgdmVyeSBzbWFsbCBocnRpbWVyIGludGVydmFscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayAodGMgcWRpc2MgYWRkL2NoYW5nZSkgYW5kIGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI1OjEwLjUzNjAxOTU2NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyODUzMjc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI1OjEwLjUzNjQzNTAxNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3ODI4MTEyMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgQ1BVIGxpdmVsb2NrL3NvZnQgbG9ja3VwIGlzc3VlIGluIHRoZSB0YXByaW8gc2NoZWR1bGVyIGJ5IGVuZm9yY2luZyBhIG1pbmltdW0gaHJ0aW1lciBpbnRlcnZhbCAoYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgKSB3aGVuIHNvZnR3YXJlIHNjaGVkdWxpbmcgaXMgdXNlZC4gSXQgbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gbG9naWMgZm9yIGBpbnRlcnZhbGAgYW5kIGBjeWNsZV90aW1lYCBwYXJzZWQgZnJvbSBuZXRsaW5rIGF0dHJpYnV0ZXMuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIGludm9sdmluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgcmVsYXRlZCB0byB0aGlzIHBhdGNoIChzdWNoIGFzIHNvZnQgbG9ja3VwcyBvciBvdXQtb2YtYm91bmRzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBsaWtlIHRoZSBzb2Z0IGxvY2t1cCBkZXRlY3RvciBvciBLQVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxODA2OTUwMjM3YTJmMWUyMmNjZmQ5YWU2ODVmNTNkOTBjYWJjNmJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMDI6MjM6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RhcHJpby5jIGIvbmV0L3NjaGVkL3NjaF90YXByaW8uY1xuaW5kZXggNDUyNDUxNTdlMDBhNi4uMmJmNGNhZTE2NGJjMiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbisrKyBiL25ldC9zY2hlZC9zY2hfdGFwcmlvLmNcbkBAIC00OSw2ICs0OSwxMyBAQCBzdGF0aWMgc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgdGFwcmlvX2hhdmVfd29ya2luZ19tcXByaW87XG4gICovXG4gI2RlZmluZSBUQVBSSU9fUElDT1NfUEVSX0JZVEVfTUlOIDE3XG4gXG4rLyogVGhlIHNvZnR3YXJlIHNjaGVkdWxlciBjYW5ub3Qgc3VzdGFpbiBocnRpbWVyIGludGVydmFscyBzbWFsbGVyIHRoYW5cbisgKiB0aGlzIHdpdGhvdXQgbGl2ZWxvY2tpbmcgdGhlIENQVS4gVGhlIHZhbHVlIG11c3QgZXhjZWVkIHRoZSBjb3N0IG9mXG4rICogb25lIGFkdmFuY2Vfc2NoZWQoKSBpbnZvY2F0aW9uIChsb2NrIGFjcXVpc2l0aW9uLCBidWRnZXQgcmVjb21wdXRhdGlvbixcbisgKiBUWCBzb2Z0aXJxKSB3aXRoIG1hcmdpbi5cbisgKi9cbisjZGVmaW5lIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMgKDEwMCAqIE5TRUNfUEVSX1VTRUMpXG4rXG4gc3RydWN0IHNjaGVkX2VudHJ5IHtcbiBcdC8qIER1cmF0aW9ucyBiZXR3ZWVuIHRoaXMgR0NMIGVudHJ5IGFuZCB0aGUgR0NMIGVudHJ5IHdoZXJlIHRoZVxuIFx0ICogcmVzcGVjdGl2ZSB0cmFmZmljIGNsYXNzIGdhdGUgY2xvc2VzXG5AQCAtMjU5LDYgKzI2NiwxNiBAQCBzdGF0aWMgaW50IGxlbmd0aF90b19kdXJhdGlvbihzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBpbnQgbGVuKVxuIFx0cmV0dXJuIGRpdl91NjQobGVuICogYXRvbWljNjRfcmVhZChcdTAwMjZxLVx1MDAzZXBpY29zX3Blcl9ieXRlKSwgUFNFQ19QRVJfTlNFQyk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgdGFwcmlvX21pbl9pbnRlcnZhbChzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxKVxuK3tcbitcdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xuK1xuK1x0aWYgKCFGVUxMX09GRkxPQURfSVNfRU5BQkxFRChxLVx1MDAzZWZsYWdzKSlcbitcdFx0bWluX2R1cmF0aW9uID0gbWF4X3QoaW50LCBtaW5fZHVyYXRpb24sIFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlMpO1xuK1xuK1x0cmV0dXJuIG1pbl9kdXJhdGlvbjtcbit9XG4rXG4gc3RhdGljIGludCBkdXJhdGlvbl90b19sZW5ndGgoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgdTY0IGR1cmF0aW9uKVxuIHtcbiBcdHJldHVybiBkaXZfdTY0KGR1cmF0aW9uICogUFNFQ19QRVJfTlNFQywgYXRvbWljNjRfcmVhZChcdTAwMjZxLVx1MDAzZXBpY29zX3Blcl9ieXRlKSk7XG5AQCAtMTAzOCw3ICsxMDU1LDcgQEAgc3RhdGljIGludCBmaWxsX3NjaGVkX2VudHJ5KHN0cnVjdCB0YXByaW9fc2NoZWQgKnEsIHN0cnVjdCBubGF0dHIgKip0YixcbiBcdFx0XHQgICAgc3RydWN0IHNjaGVkX2VudHJ5ICplbnRyeSxcbiBcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbi1cdGludCBtaW5fZHVyYXRpb24gPSBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pO1xuK1x0aW50IG1pbl9kdXJhdGlvbiA9IHRhcHJpb19taW5faW50ZXJ2YWwocSk7XG4gXHR1MzIgaW50ZXJ2YWwgPSAwO1xuIFxuIFx0aWYgKHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfQ01EXSlcbkBAIC0xMDU0LDcgKzEwNzEsOCBAQCBzdGF0aWMgaW50IGZpbGxfc2NoZWRfZW50cnkoc3RydWN0IHRhcHJpb19zY2hlZCAqcSwgc3RydWN0IG5sYXR0ciAqKnRiLFxuIFx0XHRcdHRiW1RDQV9UQVBSSU9fU0NIRURfRU5UUllfSU5URVJWQUxdKTtcbiBcbiBcdC8qIFRoZSBpbnRlcnZhbCBzaG91bGQgYWxsb3cgYXQgbGVhc3QgdGhlIG1pbmltdW0gZXRoZXJuZXRcbi1cdCAqIGZyYW1lIHRvIGdvIG91dC5cbitcdCAqIGZyYW1lIHRvIGdvIG91dC4gV2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQsIHRoZVxuK1x0ICogaW50ZXJ2YWwgbXVzdCBhbHNvIGJlIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGhydGltZXIgaW50ZXJ2YWwuXG4gXHQgKi9cbiBcdGlmIChpbnRlcnZhbCBcdTAwM2MgbWluX2R1cmF0aW9uKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJJbnZhbGlkIGludGVydmFsIGZvciBzY2hlZHVsZSBlbnRyeVwiKTtcbkBAIC0xMTY2LDcgKzExODQsNyBAQCBzdGF0aWMgaW50IHBhcnNlX3RhcHJpb19zY2hlZHVsZShzdHJ1Y3QgdGFwcmlvX3NjaGVkICpxLCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4gXHRcdG5ldy1cdTAwM2VjeWNsZV90aW1lID0gY3ljbGU7XG4gXHR9XG4gXG4tXHRpZiAobmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIG5ldy1cdTAwM2VudW1fZW50cmllcyAqIGxlbmd0aF90b19kdXJhdGlvbihxLCBFVEhfWkxFTikpIHtcbitcdGlmIChuZXctXHUwMDNlY3ljbGVfdGltZSBcdTAwM2MgKHM2NCluZXctXHUwMDNlbnVtX2VudHJpZXMgKiB0YXByaW9fbWluX2ludGVydmFsKHEpKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCInY3ljbGVfdGltZScgaXMgdG9vIHNtYWxsXCIpO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI1OjEwLjUzNjQzNzgwNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODI4MDg5MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRBUFJJTyBTY2hlZHVsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRha2VuIGEgbG9vayBhdCB0aGlzIHBhdGNoIGZvciBgbmV0L3NjaGVkL3NjaF90YXByaW8uY2AuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0J3MgYSBzb2xpZCwgc3RyYWlnaHRmb3J3YXJkIGJ1ZyBmaXguIEl0IGludHJvZHVjZXMgYFRBUFJJT19NSU5fU1dfSU5URVJWQUxfTlNgIGFuZCBgdGFwcmlvX21pbl9pbnRlcnZhbCgpYCwgYW5kIGludGVsbGlnZW50bHkgcmVwbGFjZXMgdGhlIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGBsZW5ndGhfdG9fZHVyYXRpb24ocSwgRVRIX1pMRU4pYCB3aXRoIGB0YXByaW9fbWluX2ludGVydmFsKHEpYCBpbiB0aGUga2V5IGZ1bmN0aW9ucyBgZmlsbF9zY2hlZF9lbnRyeSgpYCBhbmQgYHBhcnNlX3RhcHJpb19zY2hlZHVsZSgpYC5cblxuVGhlIGNvcmUgaXNzdWUgdGhpcyBhZGRyZXNzZXMgaXMgYSBwb3RlbnRpYWwgQ1BVIGxpdmVsb2NrIHNjZW5hcmlvLiBJZiB0aGUgaGFyZHdhcmUgdGltZXIgaW50ZXJ2YWxzIGJlY29tZSB0b28gc21hbGwsIHRoZSBzb2Z0d2FyZSBzY2hlZHVsZXIgY2FuIGVmZmVjdGl2ZWx5IGxvY2sgdXAgdGhlIENQVSwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIGRlbmlhbC1vZi1zZXJ2aWNlIGNvbmRpdGlvbi4gVGhpcyBwYXRjaCBjb3JyZWN0bHkgZW5mb3JjZXMgYSBtaW5pbXVtIGludGVydmFsLCBwcmV2ZW50aW5nIHRoYXQgZnJvbSBoYXBwZW5pbmcuIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZS5cblxuTXkgZmlyc3QgdGhvdWdodCB3YXMgdG8gaW1tZWRpYXRlbHkgY2hlY2sgZm9yIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucywgdGhhdCdzIGFsbW9zdCByZWZsZXhpdmUuIEkgc2VlIHRoZSBjaGVjaywgaW4gYGZpbGxfc2NoZWRfZW50cnkoKWAsIGZvciBgaW50ZXJ2YWwgXHUwMDNjIG1pbl9kdXJhdGlvbmAuIEFsc28sIGluIGBwYXJzZV90YXByaW9fc2NoZWR1bGUoKWAgdGhlcmUncyBhIGNoZWNrIGZvciBgbmV3LVx1MDAzZWN5Y2xlX3RpbWUgXHUwMDNjIChzNjQpbmV3LVx1MDAzZW51bV9lbnRyaWVzICogdGFwcmlvX21pbl9pbnRlcnZhbChxKWAuIExvb2tpbmcgbW9yZSBjbG9zZWx5IGF0IGB0YXByaW9fbWluX2ludGVydmFsYCBJIHNlZSBpdCdzIHVzaW5nIGBsZW5ndGhfdG9fZHVyYXRpb25gIGFuZCBgRlVMTF9PRkZMT0FEX0lTX0VOQUJMRURgLiBIb3dldmVyLCBJ4oCZbSBjb25maWRlbnQgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgaGVyZS4gVGhlIGNoZWNrcyBhcmUgY2xlYXJseSBwcmVzZW50IGFuZCBwcmV2ZW50IHRoZXNlIHNjZW5hcmlvcy4gSXQncyBlc3NlbnRpYWxseSBhZGRpbmcgYSBzYWZldHkgbmV0IHRvIGNvbnRyb2wgdGhlIHBhcnNlZCBuZXRsaW5rIGF0dHJpYnV0ZXMuXG5cblRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBwcmV2ZW50YXRpdmUsIGFuZCB0aGUgS0FTQU4gb3IgTE9DS0RFUCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIChzdWNoIGFzIHRoZSBzb2Z0IGxvY2t1cCBkZXRlY3RvcikgbWlnaHQgaGF2ZSBjYXVnaHQgdGhpcywgYnV0IEtNU0FOIGlzIGRlZmluaXRpdmVseSBub3QgcmVxdWlyZWQgaGVyZS4gVGhpcyBpcyBhIENQVSBsaXZlbG9jayBhdm9pZGFuY2UsIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUuIEknbSBjb21mb3J0YWJsZSBzZXR0aW5nIGBOZWVkc0tNU0FOPWZhbHNlYCBhbmQgYWRkaW5nIHRoZSByZWFzb25zIGZvciBteSBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzI0LCJPdXRwdXRUb2tlbnMiOjE2MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDAyOjI1OjE4LjM2NDUyOTQwNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIENQVSBsaXZlbG9jay9zb2Z0IGxvY2t1cCBpc3N1ZSBpbiB0aGUgdGFwcmlvIHNjaGVkdWxlciBieSBlbmZvcmNpbmcgYSBtaW5pbXVtIGhydGltZXIgaW50ZXJ2YWwgKGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCkgd2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQuIEl0IG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgaW50ZXJ2YWxgIGFuZCBgY3ljbGVfdGltZWAgcGFyc2VkIGZyb20gbmV0bGluayBhdHRyaWJ1dGVzLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaCAoc3VjaCBhcyBzb2Z0IGxvY2t1cHMgb3Igb3V0LW9mLWJvdW5kcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSB0aGUgc29mdCBsb2NrdXAgZGV0ZWN0b3Igb3IgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIENQVSBsaXZlbG9jay9zb2Z0IGxvY2t1cCBpc3N1ZSBpbiB0aGUgdGFwcmlvIHNjaGVkdWxlciBieSBlbmZvcmNpbmcgYSBtaW5pbXVtIGhydGltZXIgaW50ZXJ2YWwgKGBUQVBSSU9fTUlOX1NXX0lOVEVSVkFMX05TYCkgd2hlbiBzb2Z0d2FyZSBzY2hlZHVsaW5nIGlzIHVzZWQuIEl0IG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIGxvZ2ljIGZvciBgaW50ZXJ2YWxgIGFuZCBgY3ljbGVfdGltZWAgcGFyc2VkIGZyb20gbmV0bGluayBhdHRyaWJ1dGVzLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyBpbnZvbHZpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBwYXRjaCAoc3VjaCBhcyBzb2Z0IGxvY2t1cHMgb3Igb3V0LW9mLWJvdW5kcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSB0aGUgc29mdCBsb2NrdXAgZGV0ZWN0b3Igb3IgS0FTQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xzmx[1] Phase: Succeeded StartedAt: 2026-08-13 02:25:29 +0000 UTC FinishedAt: 2026-08-13 02:25:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 02:25:29 +0000 UTC FinishedAt: 2026-08-13 02:25:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2] Phase: Succeeded StartedAt: 2026-08-13 02:25:29 +0000 UTC FinishedAt: 2026-08-13 06:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:25:29 +0000 UTC FinishedAt: 2026-08-13 06:05:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:25:29 +0000 UTC FinishedAt: 2026-08-13 02:25:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:25:29 +0000 UTC FinishedAt: 2026-08-13 02:25:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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-workflow7xzmx/series-workflow7xzmx-convert-artifact-615011311/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:25:39 +0000 UTC FinishedAt: 2026-08-13 02:42:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:25:39 +0000 UTC FinishedAt: 2026-08-13 02:42:02 +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:*c327bd0f-b725-4e6f-a2c1-0c655930ee2e,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-workflow7xzmx/series-workflow7xzmx-convert-artifact-615011311/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": "ca8f6869-bdc1-4a50-97c9-37ba1300214b", "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-workflow7xzmx/series-workflow7xzmx-build-action-2628194485/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:25:39 +0000 UTC FinishedAt: 2026-08-13 02:41:52 +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:*c327bd0f-b725-4e6f-a2c1-0c655930ee2e,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-workflow7xzmx/series-workflow7xzmx-convert-artifact-615011311/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": "ca8f6869-bdc1-4a50-97c9-37ba1300214b", "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-workflow7xzmx/series-workflow7xzmx-build-action-2628194485/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:42:02 +0000 UTC FinishedAt: 2026-08-13 02:42:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:42:02 +0000 UTC FinishedAt: 2026-08-13 02:42:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:42:02 +0000 UTC FinishedAt: 2026-08-13 02:42:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:42:02 +0000 UTC FinishedAt: 2026-08-13 02:42:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-workflow7xzmx/series-workflow7xzmx-convert-artifact-1862329662/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:42:13 +0000 UTC FinishedAt: 2026-08-13 02:44:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:42:13 +0000 UTC FinishedAt: 2026-08-13 02:43:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ca8f6869-bdc1-4a50-97c9-37ba1300214b,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-workflow7xzmx/series-workflow7xzmx-build-action-2628194485/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-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:44:08 +0000 UTC FinishedAt: 2026-08-13 02:44:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:44:08 +0000 UTC FinishedAt: 2026-08-13 02:44:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:44:08 +0000 UTC FinishedAt: 2026-08-13 03:00:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:44:08 +0000 UTC FinishedAt: 2026-08-13 03:00:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c327bd0f-b725-4e6f-a2c1-0c655930ee2e,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-workflow7xzmx/series-workflow7xzmx-convert-artifact-1862329662/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": "1fbc1410-ff90-44aa-afbb-fab1a36c219e", "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-workflow7xzmx/series-workflow7xzmx-build-action-3915095698/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 02:44:08 +0000 UTC FinishedAt: 2026-08-13 03:00:19 +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:*c327bd0f-b725-4e6f-a2c1-0c655930ee2e,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-workflow7xzmx/series-workflow7xzmx-convert-artifact-1862329662/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": "1fbc1410-ff90-44aa-afbb-fab1a36c219e", "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-workflow7xzmx/series-workflow7xzmx-build-action-3915095698/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 03:00:29 +0000 UTC FinishedAt: 2026-08-13 03:00:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 03:00:29 +0000 UTC FinishedAt: 2026-08-13 03:00:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 03:00:29 +0000 UTC FinishedAt: 2026-08-13 03:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 03:00:29 +0000 UTC FinishedAt: 2026-08-13 03:02:10 +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:*1fbc1410-ff90-44aa-afbb-fab1a36c219e,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-workflow7xzmx/series-workflow7xzmx-build-action-3915095698/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-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 03:02:20 +0000 UTC FinishedAt: 2026-08-13 06:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 03:02:20 +0000 UTC FinishedAt: 2026-08-13 06:05:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"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:*ca8f6869-bdc1-4a50-97c9-37ba1300214b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1fbc1410-ff90-44aa-afbb-fab1a36c219e,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-workflow7xzmx/series-workflow7xzmx-build-action-2628194485/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-workflow7xzmx/series-workflow7xzmx-build-action-3915095698/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 03:02:20 +0000 UTC FinishedAt: 2026-08-13 03:02:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 03:02:20 +0000 UTC FinishedAt: 2026-08-13 03:02:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"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-workflow7xzmx/series-workflow7xzmx-convert-artifact-4230825539/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 03:02:20 +0000 UTC FinishedAt: 2026-08-13 03:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 03:02:20 +0000 UTC FinishedAt: 2026-08-13 03:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 03:02:20 +0000 UTC FinishedAt: 2026-08-13 03:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 03:02:30 +0000 UTC FinishedAt: 2026-08-13 06:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7xzmx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["taprio_change"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCH_TAPRIO"],"series_id":"a3f2cc20-36ff-455a-bf1e-fa526f734b8f","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-08-13 03:02:30 +0000 UTC FinishedAt: 2026-08-13 06:05:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ca8f6869-bdc1-4a50-97c9-37ba1300214b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1fbc1410-ff90-44aa-afbb-fab1a36c219e,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-workflow7xzmx/series-workflow7xzmx-build-action-2628194485/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-workflow7xzmx/series-workflow7xzmx-build-action-3915095698/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-workflow7xzmx/series-workflow7xzmx-convert-artifact-4230825539/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,}