Name: series-workflow42nqt Phase: Succeeded StartedAt: 2026-08-21 07:51:24 +0000 UTC FinishedAt: 2026-08-21 12:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[0] Phase: Succeeded StartedAt: 2026-08-21 07:51:24 +0000 UTC FinishedAt: 2026-08-21 08:45:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 07:51:24 +0000 UTC FinishedAt: 2026-08-21 08:45:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "SMC_DIAG", "INFINIBAND", "DIBS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "SMC_DIAG", "INFINIBAND", "DIBS" ], "series_id": "92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_release", "smc_clcsock_release", "smc_unhash_sk" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtTTUNfRElBRyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtzbWNfY2xjc29ja19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3NtY191bmhhc2hfc2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24gd2hlcmUgYHNtY19kaWFnYCBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBgc21jLVx1MDAzZWNsY3NvY2tgIHdoaWxlIGl0IGlzIGJlaW5nIHJlbGVhc2VkLiBUaGlzIGlzIGEgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Zywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgU01DIHNvY2tldCBkZXN0cnVjdGlvbiB3aGVyZSBzbWNfZGlhZyBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBhIHJlbGVhc2VkIGNsY3NvY2suIEl0IG1vZGlmaWVzIHRoZSBzb2NrZXQgdGVhcmRvd24gZmxvdyBieSBhZGRpbmcgYSAuZGVzdHJveSBjYWxsYmFjayB0byBzbWNfaW5ldF9wcm90IGFuZCBzbWNfaW5ldDZfcHJvdCwgd2hpY2ggdW5oYXNoZXMgdGhlIHNvY2tldCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBjbGNzb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNjJhNWRkMGY4YjQxYTg4ZjkyNjcxZmQ1NTI1Y2U3ZmFhMzhhMTFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDg6NDI6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfaW5ldC5jIGIvbmV0L3NtYy9zbWNfaW5ldC5jXG5pbmRleCBhOTQwODRiNGE0OThlLi41MjBiNjY2ZmRkOGZhIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfaW5ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19pbmV0LmNcbkBAIC0xNSwxMyAmIzQzOzE1LDE2IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7c21jX2luZXQuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3NtYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtY19jbG9zZS5oXCYjMzQ7XG4gXG4gc3RhdGljIGludCBzbWNfaW5ldF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKTtcbiYjNDM7c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4gXG4gc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0ge1xuIFx0Lm5hbWVcdFx0PSBcJiMzNDtJTkVUX1NNQ1wmIzM0OyxcbiBcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIFx0LmluaXRcdFx0PSBzbWNfaW5ldF9pbml0X3NvY2ssXG4mIzQzO1x0LmRlc3Ryb3lcdD0gc21jX2luZXRfZGVzdHJveV9zb2NrLFxuIFx0Lmhhc2hcdFx0PSBzbWNfaGFzaF9zayxcbiBcdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxuIFx0LnJlbGVhc2VfY2JcdD0gc21jX3JlbGVhc2VfY2IsXG5AQCAtNjgsNiAmIzQzOzcxLDcgQEAgc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldDZfcHJvdCA9IHtcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7SU5FVDZfU01DXCYjMzQ7LFxuIFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gXHQuaW5pdFx0XHQ9IHNtY19pbmV0X2luaXRfc29jayxcbiYjNDM7XHQuZGVzdHJveVx0PSBzbWNfaW5ldF9kZXN0cm95X3NvY2ssXG4gXHQuaGFzaFx0XHQ9IHNtY19oYXNoX3NrLFxuIFx0LnVuaGFzaFx0XHQ9IHNtY191bmhhc2hfc2ssXG4gXHQucmVsZWFzZV9jYlx0PSBzbWNfcmVsZWFzZV9jYixcbkBAIC0xMTYsNiAmIzQzOzEyMCwxOCBAQCBzdGF0aWMgaW50IHNtY19pbmV0X2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4gXHRyZXR1cm4gc21jX2NyZWF0ZV9jbGNzayhuZXQsIHNrLCBzay1cdTAwM2Vza19mYW1pbHkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdC8qIFRoZSBzb2NrIGlzIGhhc2hlZCBhbmQgc21jX2RpYWcgZHVtcHMgZGVyZWZlcmVuY2Ugc21jLVx1MDAzZWNsY3NvY2tcbiYjNDM7XHQgKiB3aXRob3V0IGNsY3NvY2tfcmVsZWFzZV9sb2NrLCB3aGlsZSBza19jb21tb25fcmVsZWFzZSgpIGNhbGxzXG4mIzQzO1x0ICogLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2guIFVuaGFzaCBmaXJzdCwgYXMgX19zbWNfcmVsZWFzZSgpIGRvZXMsXG4mIzQzO1x0ICogc28gbm8gZHVtcCBjYW4gb2JzZXJ2ZSB0aGUgY2xjc29jayBiZWluZyByZWxlYXNlZDsgdGhlIHNlY29uZFxuJiM0MztcdCAqIHVuaGFzaCBpcyBhIG5vLW9wLlxuJiM0MztcdCAqL1xuJiM0MztcdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKHNrKTtcbiYjNDM7XHRzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBfX2luaXQgc21jX2luZXRfaW5pdCh2b2lkKVxuIHtcbiBcdGludCByYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O1NNQ19ESUFHJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3NtY19jbGNzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c21jX3VuaGFzaF9zayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBTTUMgc29ja2V0IGRlc3RydWN0aW9uIHdoZXJlIHNtY19kaWFnIGR1bXBzIGNvdWxkIGRlcmVmZXJlbmNlIGEgcmVsZWFzZWQgY2xjc29jay4gSXQgbW9kaWZpZXMgdGhlIHNvY2tldCB0ZWFyZG93biBmbG93IGJ5IGFkZGluZyBhIC5kZXN0cm95IGNhbGxiYWNrIHRvIHNtY19pbmV0X3Byb3QgYW5kIHNtY19pbmV0Nl9wcm90LCB3aGljaCB1bmhhc2hlcyB0aGUgc29ja2V0IGJlZm9yZSByZWxlYXNpbmcgdGhlIGNsY3NvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI2MmE1ZGQwZjhiNDFhODhmOTI2NzFmZDU1MjVjZTdmYWEzOGExMWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwODo0MjoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2luZXQuYyBiL25ldC9zbWMvc21jX2luZXQuYwppbmRleCBhOTQwODRiNGE0OThlLi41MjBiNjY2ZmRkOGZhIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19pbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfaW5ldC5jCkBAIC0xNSwxMyAmIzQzOzE1LDE2IEBACiAKICNpbmNsdWRlICYjMzQ7c21jX2luZXQuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3NtYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtY19jbG9zZS5oJiMzNDsKIAogc3RhdGljIGludCBzbWNfaW5ldF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKJiM0MztzdGF0aWMgdm9pZCBzbWNfaW5ldF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKIAogc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0gewogCS5uYW1lCQk9ICYjMzQ7SU5FVF9TTUMmIzM0OywKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmluaXQJCT0gc21jX2luZXRfaW5pdF9zb2NrLAomIzQzOwkuZGVzdHJveQk9IHNtY19pbmV0X2Rlc3Ryb3lfc29jaywKIAkuaGFzaAkJPSBzbWNfaGFzaF9zaywKIAkudW5oYXNoCQk9IHNtY191bmhhc2hfc2ssCiAJLnJlbGVhc2VfY2IJPSBzbWNfcmVsZWFzZV9jYiwKQEAgLTY4LDYgJiM0Mzs3MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXQ2X3Byb3QgPSB7CiAJLm5hbWUJCT0gJiMzNDtJTkVUNl9TTUMmIzM0OywKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmluaXQJCT0gc21jX2luZXRfaW5pdF9zb2NrLAomIzQzOwkuZGVzdHJveQk9IHNtY19pbmV0X2Rlc3Ryb3lfc29jaywKIAkuaGFzaAkJPSBzbWNfaGFzaF9zaywKIAkudW5oYXNoCQk9IHNtY191bmhhc2hfc2ssCiAJLnJlbGVhc2VfY2IJPSBzbWNfcmVsZWFzZV9jYiwKQEAgLTExNiw2ICYjNDM7MTIwLDE4IEBAIHN0YXRpYyBpbnQgc21jX2luZXRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaykKIAlyZXR1cm4gc21jX2NyZWF0ZV9jbGNzayhuZXQsIHNrLCBzay0mZ3Q7c2tfZmFtaWx5KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwkvKiBUaGUgc29jayBpcyBoYXNoZWQgYW5kIHNtY19kaWFnIGR1bXBzIGRlcmVmZXJlbmNlIHNtYy0mZ3Q7Y2xjc29jawomIzQzOwkgKiB3aXRob3V0IGNsY3NvY2tfcmVsZWFzZV9sb2NrLCB3aGlsZSBza19jb21tb25fcmVsZWFzZSgpIGNhbGxzCiYjNDM7CSAqIC5kZXN0cm95IGJlZm9yZSAudW5oYXNoLiBVbmhhc2ggZmlyc3QsIGFzIF9fc21jX3JlbGVhc2UoKSBkb2VzLAomIzQzOwkgKiBzbyBubyBkdW1wIGNhbiBvYnNlcnZlIHRoZSBjbGNzb2NrIGJlaW5nIHJlbGVhc2VkOyB0aGUgc2Vjb25kCiYjNDM7CSAqIHVuaGFzaCBpcyBhIG5vLW9wLgomIzQzOwkgKi8KJiM0MzsJc2stJmd0O3NrX3Byb3QtJmd0O3VuaGFzaChzayk7CiYjNDM7CXNtY19jbGNzb2NrX3JlbGVhc2Uoc21jX3NrKHNrKSk7CiYjNDM7fQomIzQzOwogaW50IF9faW5pdCBzbWNfaW5ldF9pbml0KHZvaWQpCiB7CiAJaW50IHJjOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU01DIEluZXQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvc21jL3NtY19pbmV0LmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgYSBgLmRlc3Ryb3lgIGNhbGxiYWNrIHRvIGJvdGggYHNtY19pbmV0X3Byb3RgIGFuZCBgc21jX2luZXQ2X3Byb3RgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgdGhlIGNhbGxiYWNrIGl0c2VsZiBpcyBgc21jX2luZXRfZGVzdHJveV9zb2NrYC4gSSBrbm93IHRoYXQgZnVuY3Rpb24g4oCTIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB1bmhhc2hpbmcgdGhlIHNvY2tldCBhbmQgdGhlbiBjYWxsaW5nIGBzbWNfY2xjc29ja19yZWxlYXNlYC4gTWFrZXMgc2Vuc2U7IGNsZWFudXAgaXMgY3J1Y2lhbCwgZXNwZWNpYWxseSBpbiB0aGlzIGFyZWEuCgpOb3csIGJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBuZXQvc21jL3NtY19pbmV0LmNgIGFuZCBhbHNvIGNoZWNrIGBuZXQvc21jL3NtYy5oYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBuZXcgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy4gVGltZSB0byBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYHNtY19pbmV0X3Byb3RgLCBgc21jX2luZXQ2X3Byb3RgLCBhbmQgdGhhdCBkZXN0cnVjdGlvbiBmdW5jdGlvbiwgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgaW50ZWdyYXRlcyBjbGVhbmx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNyb3NzLXJlZmVyZW5jZXMsIGFueSBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMsIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIG92ZXJhbGwgbGlmZWN5Y2xlIG9mIHRoZXNlIHNvY2tldHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZ3JlcCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19pbmV0X2Rlc3Ryb3lfc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19pbmV0LmM9MjA9c3RhdGljIGludCBzbWNfaW5ldF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9zbWMvc21jX2luZXQuYzoyMTpzdGF0aWMgdm9pZCBzbWNfaW5ldF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9zbWMvc21jX2luZXQuYy0yMi1cbm5ldC9zbWMvc21jX2luZXQuYz0yMz1zdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0X3Byb3QgPSB7XG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jLTI2LVx0LmluaXRcdFx0PSBzbWNfaW5ldF9pbml0X3NvY2ssXG5uZXQvc21jL3NtY19pbmV0LmM6Mjc6XHQuZGVzdHJveVx0PSBzbWNfaW5ldF9kZXN0cm95X3NvY2ssXG5uZXQvc21jL3NtY19pbmV0LmMtMjgtXHQuaGFzaFx0XHQ9IHNtY19oYXNoX3NrLFxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz03MD1zdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0Nl9wcm90ID0ge1xuLS1cbm5ldC9zbWMvc21jX2luZXQuYy03My1cdC5pbml0XHRcdD0gc21jX2luZXRfaW5pdF9zb2NrLFxubmV0L3NtYy9zbWNfaW5ldC5jOjc0Olx0LmRlc3Ryb3lcdD0gc21jX2luZXRfZGVzdHJveV9zb2NrLFxubmV0L3NtYy9zbWNfaW5ldC5jLTc1LVx0Lmhhc2hcdFx0PSBzbWNfaGFzaF9zayxcbi0tXG5uZXQvc21jL3NtY19pbmV0LmM9MTEzPXN0YXRpYyBpbnQgc21jX2luZXRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc21jL3NtY19pbmV0LmMtMTIyLVxubmV0L3NtYy9zbWNfaW5ldC5jOjEyMzpzdGF0aWMgdm9pZCBzbWNfaW5ldF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKVxubmV0L3NtYy9zbWNfaW5ldC5jLTEyNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMzNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biB0aGUgU01DIEtjb25maWcqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyBkZWZpbml0ZWx5IGNlbnRlcmVkIGFyb3VuZCB0aGUgU01DLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGUgS2NvbmZpZyBmb3IgaXQ/JiMzNDsgSSBrbm93IHRoZSBhcmNoaXRlY3R1cmUsIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBrZXksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGFzIHNwZWNpZmljIGFzIGFuIFNNQywgb3IgU3lzdGVtIE1hbmFnZW1lbnQgQ29udHJvbGxlci4gSXQmIzM5O3MgYWxtb3N0IGd1YXJhbnRlZWQgdG8gaGF2ZSBpdHMgb3duIEtjb25maWcgZnJhZ21lbnQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgY29uZmlndXJhdGlvbi4gU28sIG15IG1lbnRhbCBjaGVja2xpc3QgYmVnaW5zOiBJIG5lZWQgdG8gbG9jYXRlIHRoaXMgZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBhdmFpbGFibGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgdWx0aW1hdGVseSwgaG93IHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBTTUMgc3VwcG9ydCB3aXRoaW4gdGhlIGJ1aWxkLiBUaW1lIHRvIHRyYWNrIHRoYXQgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xMy1cbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTIyLVxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFNvY2tldCBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpcyBgU01DYCwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUgYSBiaXQuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24uIFNwZWNpZmljYWxseSwgYHNtY19kaWFnYCB3YXMgZGVyZWZlcmVuY2luZyBgc21jLSZndDtjbGNzb2NrYCB3aXRob3V0IGZpcnN0IG9idGFpbmluZyB0aGUgYGNsY3NvY2tfcmVsZWFzZV9sb2NrYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgY29uY3VycmVuY3kgYnVnLCBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBhZGRyZXNzLiBUaGUgZml4IGludHJvZHVjZXMgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AsIHdoaWNoLCBpZiBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHksIGVzc2VudGlhbGx5IGNsZWFucyB1cCB0aGUgc29ja2V0IGJ5IGNhbGxpbmcgYHNrLSZndDtza19wcm90LSZndDt1bmhhc2goc2spYCBhbmQgdGhlbiBgc21jX2NsY3NvY2tfcmVsZWFzZShzbWNfc2soc2spKWAuIEludGVyZXN0aW5nLCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHNvY2tldCB0ZWFyZG93biwgd2hpY2ggc2NyZWFtcyAmIzM0O2Z1enogdGhpcyBhcmVhISYjMzQ7IHRvIG1lLgoKTm93LCBgc21jX2luZXRfZGVzdHJveV9zb2NrYCBpcyBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggaXMgZnJ1c3RyYXRpbmcuIENhbiYjMzk7dCBkaXJlY3RseSB0YXJnZXQgaXQuIExldCBtZSBzZWUuLi4gSSBjb3VsZCBmdXp6IGBzbWNfcmVsZWFzZWAsIGBzbWNfY2xjc29ja19yZWxlYXNlYCBvciBgc21jX2luZXRfaW5pdF9zb2NrYC4gTm8sIHdhaXQuLi4gYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AgaXMgY2FsbGVkIGZyb20gYHNrX2NvbW1vbl9yZWxlYXNlYC4gSGFuZyBvbiwgYHNrX2NvbW1vbl9yZWxlYXNlYCBpcyBjYWxsZWQgYnkgYHNtY19yZWxlYXNlYCwgd2hpY2ggaXMgdGhlIGVudHJ5IHBvaW50LiBCdXQgYHNtY19pbmV0X3Byb3QuZGVzdHJveWAgaXMgY2FsbGVkIGJ5IGBza19jb21tb25fcmVsZWFzZWAuIEdvdCBpdC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZm9jdXMgb24gYHNtY19jbGNzb2NrX3JlbGVhc2VgLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoYXQgb25lLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2NsY3NvY2tfcmVsZWFzZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTI4OD1zdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMTctXHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbm5ldC9zbWMvYWZfc21jLmM6MzE4Olx0XHRcdHNtY19jbGNzb2NrX3JlbGVhc2Uoc21jKTtcbm5ldC9zbWMvYWZfc21jLmMtMzE5LVx0XHRcdGxvY2tfc29jayhzayk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0zMzUzPWludCBzbWNfY3JlYXRlX2NsY3NrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBpbnQgZmFtaWx5KVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzM2Mi1cbm5ldC9zbWMvYWZfc21jLmM6MzM2MzpcdC8qIHNtY19jbGNzb2NrX3JlbGVhc2UoKSBkb2VzIG5vdCB3YWl0IHNtYy1cdTAwM2VjbGNzb2NrLVx1MDAzZXNrJiMzOTtzXG5uZXQvc21jL2FmX3NtYy5jLTMzNjQtXHQgKiBkZXN0cnVjdGlvbjsgIGl0cyBza19zdGF0ZSBtaWdodCBub3QgYmUgVENQX0NMT1NFIGFmdGVyXG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYy0yMy0vKiByZWxlYXNlIHRoZSBjbGNzb2NrIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIHNtY19zb2NrICovXG5uZXQvc21jL3NtY19jbG9zZS5jOjI0OnZvaWQgc21jX2NsY3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMjUte1xuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmM9MTI4PXZvaWQgc21jX2Nsb3NlX2FjdGl2ZV9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jLTE4MS1cdFx0cmVsZWFzZV9zb2NrKHNrKTtcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTgyOlx0XHRzbWNfY2xjc29ja19yZWxlYXNlKHNtYyk7XG5uZXQvc21jL3NtY19jbG9zZS5jLTE4My1cdFx0bG9ja19zb2NrKHNrKTtcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jPTM1Nj1zdGF0aWMgdm9pZCBzbWNfY2xvc2VfcGFzc2l2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jLTQ0Mi1cdGlmIChyZWxlYXNlX2NsY3NvY2spXG5uZXQvc21jL3NtY19jbG9zZS5jOjQ0MzpcdFx0c21jX2NsY3NvY2tfcmVsZWFzZShzbWMpO1xubmV0L3NtYy9zbWNfY2xvc2UuYy00NDQtXHRzb2NrX3B1dChzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgY2xvc2Vfd29yayAqL1xuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmg9MjU9dm9pZCBzbWNfY2xvc2VfaW5pdChzdHJ1Y3Qgc21jX3NvY2sgKnNtYyk7XG5uZXQvc21jL3NtY19jbG9zZS5oOjI2OnZvaWQgc21jX2NsY3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyk7XG5uZXQvc21jL3NtY19jbG9zZS5oLTI3LWludCBzbWNfY2xvc2VfYWJvcnQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbi0tXG5uZXQvc21jL3NtY19pbmV0LmM9MTIzPXN0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jLTEzMS1cdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKHNrKTtcbm5ldC9zbWMvc21jX2luZXQuYzoxMzI6XHRzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpO1xubmV0L3NtYy9zbWNfaW5ldC5jLTEzMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTExNQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgdGhlIFNNQyBTb2NrZXQgUmVsZWFzZSBGbG93KioKClJpZ2h0LCB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgU01DIHNvY2tldCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSByZWxlYXNlIG1lY2hhbmlzbXMuIFRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGhlcmUgaXMgb2J2aW91c2x5IGBTTUNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGBzbWNfY2xjc29ja19yZWxlYXNlYCBhbmQgYHNtY19yZWxlYXNlYCBmdW5jdGlvbnMuIFRob3NlIGFyZSBjbGVhcmx5IHRoZSBjcml0aWNhbCBwb2ludHMgZm9yIHNvY2tldCBjbGVhbnVwLgoKV2FpdCBhIHNlY29uZOKApiBJIHNlZSBgc21jX2luZXRfZGVzdHJveV9zb2NrYCBpcyBjYWxsZWQgZnJvbSBgc2tfY29tbW9uX3JlbGVhc2VgIHdoaWNoICppdHNlbGYqIGlzIGNhbGxlZCBmcm9tIGBzbWNfcmVsZWFzZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCBzdWdnZXN0cyBhIG1vcmUgY29tcGxleCBjaGFpbiBvZiBldmVudHMgdGhhbiBJIGluaXRpYWxseSBhc3N1bWVkLiBJdCYjMzk7cyBub3QganVzdCBhIGRpcmVjdCBjYWxsOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY29tbW9uIHNvY2tldCByZWxlYXNlIHBhdGggdGhhdCYjMzk7cyBiZWluZyBsZXZlcmFnZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIFNvLCBsZXQgbWUgZ2V0IGEgY2xlYXIgcGljdHVyZSBieSBleGFtaW5pbmcgYHNtY19yZWxlYXNlYCBtb3JlIGNsb3NlbHkgYW5kIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIHRoZXJlLiBUaGlzIG5lc3RlZCBmdW5jdGlvbiBjYWxsIGNvdWxkIGV4cGxhaW4gc29tZSBvZiB0aGUgaXNzdWVzIHJhaXNlZCBpbiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfcmVsZWFzZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM9MTA1ND1zdGF0aWMgaW50IGFwcGxlc21jX2NyZWF0ZV9hY2NlbGVyb21ldGVyKHZvaWQpXG4tLVxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTExMDYtLyogUmVsZWFzZSBhbGwgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIGFjY2VsZXJvbWV0ZXIgKi9cbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYzoxMTA3OnN0YXRpYyB2b2lkIGFwcGxlc21jX3JlbGVhc2VfYWNjZWxlcm9tZXRlcih2b2lkKVxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTExMDgte1xuLS1cbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYz0xMTE1PXN0YXRpYyBpbnQgYXBwbGVzbWNfY3JlYXRlX2xpZ2h0X3NlbnNvcih2b2lkKVxuLS1cbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xMTIxLVxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jOjExMjI6c3RhdGljIHZvaWQgYXBwbGVzbWNfcmVsZWFzZV9saWdodF9zZW5zb3Iodm9pZClcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xMTIzLXtcbi0tXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM9MTEyOT1zdGF0aWMgaW50IGFwcGxlc21jX2NyZWF0ZV9rZXlfYmFja2xpZ2h0KHZvaWQpXG4tLVxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTExMzgtXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM6MTEzOTpzdGF0aWMgdm9pZCBhcHBsZXNtY19yZWxlYXNlX2tleV9iYWNrbGlnaHQodm9pZClcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xMTQwLXtcbi0tXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM9MTQxOD1zdGF0aWMgaW50IF9faW5pdCBhcHBsZXNtY19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTE1NjQtb3V0X2xpZ2h0X2xlZGNsYXNzOlxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jOjE1NjU6XHRhcHBsZXNtY19yZWxlYXNlX2tleV9iYWNrbGlnaHQoKTtcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xNTY2LW91dF9saWdodF9zeXNmczpcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYzoxNTY3Olx0YXBwbGVzbWNfcmVsZWFzZV9saWdodF9zZW5zb3IoKTtcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xNTY4LW91dF9hY2NlbGVyb21ldGVyOlxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jOjE1Njk6XHRhcHBsZXNtY19yZWxlYXNlX2FjY2VsZXJvbWV0ZXIoKTtcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xNTcwLW91dF9pbmZvOlxuLS1cbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYz0xNTg2PXN0YXRpYyB2b2lkIF9fZXhpdCBhcHBsZXNtY19leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTE1ODgtXHRod21vbl9kZXZpY2VfdW5yZWdpc3Rlcihod21vbl9kZXYpO1xuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jOjE1ODk6XHRhcHBsZXNtY19yZWxlYXNlX2tleV9iYWNrbGlnaHQoKTtcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYzoxNTkwOlx0YXBwbGVzbWNfcmVsZWFzZV9saWdodF9zZW5zb3IoKTtcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYzoxNTkxOlx0YXBwbGVzbWNfcmVsZWFzZV9hY2NlbGVyb21ldGVyKCk7XG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMtMTU5Mi1cdGFwcGxlc21jX2Rlc3Ryb3lfbm9kZXMoaW5mb19ncm91cCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYz0yMTEwPXN0YXRpYyBpbnQgc21jX3JlcXVlc3RfYXR0cmliKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMTI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYzoyMTI1OnN0YXRpYyB2b2lkIHNtY19yZWxlYXNlX2F0dHJpYihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMTI2LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jPTIxMzU9c3RhdGljIGlubGluZSB2b2lkIHNtY19yZXF1ZXN0X2RhdGFjcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jLTIxNTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jOjIxNTQ6c3RhdGljIHZvaWQgc21jX3JlbGVhc2VfZGF0YWNzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMTU1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jPTIyMjc9c3RhdGljIGludCBzbWNfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMzkxLSBvdXRfcmVsZWFzZV9hdHRyaWI6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jOjIzOTI6XHRzbWNfcmVsZWFzZV9hdHRyaWIocGRldiwgbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jLTIzOTMtIG91dF9yZWxlYXNlX2lvOlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM9MjQwMz1zdGF0aWMgdm9pZCBzbWNfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmMtMjQxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM6MjQxOTpcdHNtY19yZWxlYXNlX2RhdGFjcyhwZGV2LG5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYzoyNDIwOlx0c21jX3JlbGVhc2VfYXR0cmliKHBkZXYsbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jLTI0MjEtXG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yMTQ9dm9pZCBzbWNfdW5oYXNoX3NrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTIyNy0gKi9cbm5ldC9zbWMvYWZfc21jLmM6MjI4OnZvaWQgc21jX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxubmV0L3NtYy9hZl9zbWMuYy0yMjkte1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MjM4PXN0cnVjdCBwcm90byBzbWNfcHJvdG8gPSB7XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yNDMtXHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbm5ldC9zbWMvYWZfc21jLmM6MjQ0Olx0LnJlbGVhc2VfY2JcdD0gc21jX3JlbGVhc2VfY2IsXG5uZXQvc21jL2FmX3NtYy5jLTI0NS1cdC5vYmpfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHNtY19zb2NrKSxcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTI1MT1zdHJ1Y3QgcHJvdG8gc21jX3Byb3RvNiA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI1Ni1cdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxubmV0L3NtYy9hZl9zbWMuYzoyNTc6XHQucmVsZWFzZV9jYlx0PSBzbWNfcmVsZWFzZV9jYixcbm5ldC9zbWMvYWZfc21jLmMtMjU4LVx0Lm9ial9zaXplXHQ9IHNpemVvZihzdHJ1Y3Qgc21jX3NvY2spLFxuLS1cbm5ldC9zbWMvYWZfc21jLmM9Mjc5PXN0YXRpYyB2b2lkIHNtY19yZXN0b3JlX2ZhbGxiYWNrX2NoYW5nZXMoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yODctXG5uZXQvc21jL2FmX3NtYy5jOjI4ODpzdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG5uZXQvc21jL2FmX3NtYy5jLTI4OS17XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMjctXG5uZXQvc21jL2FmX3NtYy5jOjMyODppbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC9zbWMvYWZfc21jLmMtMzI5LXtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTM2MC1cbm5ldC9zbWMvYWZfc21jLmM6MzYxOlx0cmMgPSBfX3NtY19yZWxlYXNlKHNtYyk7XG5uZXQvc21jL2FmX3NtYy5jLTM2Mi1cbi0tXG5uZXQvc21jL2FmX3NtYy5jPTcwMD1zdGF0aWMgdm9pZCBzbWNfY29ubl9zYXZlX3BlZXJfaW5mb19mY2Uoc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy03MjAtXHRzbWMtXHUwMDNlY29ubi5sZ3ItXHUwMDNlcGVlcl9vcyA9IGZjZS1cdTAwM2Vvc190eXBlO1xubmV0L3NtYy9hZl9zbWMuYzo3MjE6XHRzbWMtXHUwMDNlY29ubi5sZ3ItXHUwMDNlcGVlcl9zbWNfcmVsZWFzZSA9IGZjZS1cdTAwM2VyZWxlYXNlO1xubmV0L3NtYy9hZl9zbWMuYy03MjItXHRpZiAoc21jX2lzYXNjaWkoZmNlLVx1MDAzZWhvc3RuYW1lKSlcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTE4NTc9dm9pZCBzbWNfY2xvc2Vfbm9uX2FjY2VwdGVkKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE4NjUtXHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfbGluZ2VydGltZSwgU01DX01BWF9TVFJFQU1fV0FJVF9USU1FT1VUKTtcbm5ldC9zbWMvYWZfc21jLmM6MTg2NjpcdF9fc21jX3JlbGVhc2Uoc21jKTtcbm5ldC9zbWMvYWZfc21jLmMtMTg2Ny1cdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0zMzMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19zb2NrX29wcyA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTMzMzQtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbm5ldC9zbWMvYWZfc21jLmM6MzMzNTpcdC5yZWxlYXNlXHQ9IHNtY19yZWxlYXNlLFxubmV0L3NtYy9hZl9zbWMuYy0zMzM2LVx0LmJpbmRcdFx0PSBzbWNfYmluZCxcbi0tXG5uZXQvc21jL3NtYy5oPTQxPXZvaWQgc21jX3VuaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3NtYy9zbWMuaDo0Mjp2b2lkIHNtY19yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvc21jL3NtYy5oLTQzLVxubmV0L3NtYy9zbWMuaDo0NDppbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7XG5uZXQvc21jL3NtYy5oLTQ1LWludCBzbWNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9MjY9c3RhdGljIHZvaWQgc21jX2NkY190eF9oYW5kbGVyKHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwbmRfc25kLFxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTU2LVx0XHQgKiBVc2VyIGNvbnRleHQgd2lsbCBsYXRlciB0cnkgdG8gc2VuZCB3aGVuIGl0IHJlbGVhc2Ugc29ja19sb2NrXG5uZXQvc21jL3NtY19jZGMuYzo1NzpcdFx0ICogaW4gc21jX3JlbGVhc2VfY2IoKVxubmV0L3NtYy9zbWNfY2RjLmMtNTgtXHRcdCAqL1xuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmM9MzU2PXN0YXRpYyB2b2lkIHNtY19jbG9zZV9wYXNzaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmMtMzk5LVx0XHQgICAgc21jX2Nsb3NlX3NlbnRfYW55X2Nsb3NlKGNvbm4pKSB7XG5uZXQvc21jL3NtY19jbG9zZS5jOjQwMDpcdFx0XHQvKiBzbWNfcmVsZWFzZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBsb2NhbGx5ICovXG5uZXQvc21jL3NtY19jbG9zZS5jLTQwMS1cdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFNNQ19DTE9TRUQ7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTMwOT1zdGF0aWMgaW50IHNtY19ubF9maWxsX2xncl92Ml9jb21tb24oc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTMxOC1cdFx0Z290byBlcnJ2MmF0dHI7XG5uZXQvc21jL3NtY19jb3JlLmM6MzE5Olx0aWYgKG5sYV9wdXRfdTgoc2tiLCBTTUNfTkxBX0xHUl9WMl9SRUwsIGxnci1cdTAwM2VwZWVyX3NtY19yZWxlYXNlKSlcbm5ldC9zbWMvc21jX2NvcmUuYy0zMjAtXHRcdGdvdG8gZXJydjJhdHRyO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaD0yODY9c3RydWN0IHNtY19saW5rX2dyb3VwIHtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmgtMzEyLVx0dThcdFx0XHRwZWVyX29zO1x0LyogcGVlciBvcGVyYXRpbmcgc3lzdGVtICovXG5uZXQvc21jL3NtY19jb3JlLmg6MzEzOlx0dThcdFx0XHRwZWVyX3NtY19yZWxlYXNlO1xubmV0L3NtYy9zbWNfY29yZS5oLTMxNC1cdHU4XHRcdFx0cGVlcl9ob3N0bmFtZVtTTUNfTUFYX0hPU1ROQU1FX0xFTl07XG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jPTIzPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXRfcHJvdCA9IHtcbi0tXG5uZXQvc21jL3NtY19pbmV0LmMtMjktXHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbm5ldC9zbWMvc21jX2luZXQuYzozMDpcdC5yZWxlYXNlX2NiXHQ9IHNtY19yZWxlYXNlX2NiLFxubmV0L3NtYy9zbWNfaW5ldC5jLTMxLVx0Lm9ial9zaXplXHQ9IHNpemVvZihzdHJ1Y3Qgc21jX3NvY2spLFxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz0zNj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzbWNfaW5ldF9zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC9zbWMvc21jX2luZXQuYy0zOC1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxubmV0L3NtYy9zbWNfaW5ldC5jOjM5Olx0LnJlbGVhc2VcdD0gc21jX3JlbGVhc2UsXG5uZXQvc21jL3NtY19pbmV0LmMtNDAtXHQuYmluZFx0XHQ9IHNtY19iaW5kLFxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz03MD1zdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0Nl9wcm90ID0ge1xuLS1cbm5ldC9zbWMvc21jX2luZXQuYy03Ni1cdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxubmV0L3NtYy9zbWNfaW5ldC5jOjc3Olx0LnJlbGVhc2VfY2JcdD0gc21jX3JlbGVhc2VfY2IsXG5uZXQvc21jL3NtY19pbmV0LmMtNzgtXHQub2JqX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBzbWM2X3NvY2spLFxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz04ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzbWNfaW5ldDZfc3RyZWFtX29wcyA9IHtcbi0tXG5uZXQvc21jL3NtY19pbmV0LmMtODYtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbm5ldC9zbWMvc21jX2luZXQuYzo4NzpcdC5yZWxlYXNlXHQ9IHNtY19yZWxlYXNlLFxubmV0L3NtYy9zbWNfaW5ldC5jLTg4LVx0LmJpbmRcdFx0PSBzbWNfYmluZCxcbi0tXG5uZXQvc21jL3NtY19pbmV0LmM9MTIzPXN0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jLTEyNi1cdCAqIHdpdGhvdXQgY2xjc29ja19yZWxlYXNlX2xvY2ssIHdoaWxlIHNrX2NvbW1vbl9yZWxlYXNlKCkgY2FsbHNcbm5ldC9zbWMvc21jX2luZXQuYzoxMjc6XHQgKiAuZGVzdHJveSBiZWZvcmUgLnVuaGFzaC4gVW5oYXNoIGZpcnN0LCBhcyBfX3NtY19yZWxlYXNlKCkgZG9lcyxcbm5ldC9zbWMvc21jX2luZXQuYy0xMjgtXHQgKiBzbyBubyBkdW1wIGNhbiBvYnNlcnZlIHRoZSBjbGNzb2NrIGJlaW5nIHJlbGVhc2VkOyB0aGUgc2Vjb25kXG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9NDQ3PWludCBzbWNfbGxjX3NlbmRfY29uZmlybV9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY19sbGMuYy00NzQtXHRpZiAobGluay1cdTAwM2VsZ3ItXHUwMDNlc21jX3ZlcnNpb24gPT0gU01DX1YyIFx1MDAyNlx1MDAyNlxubmV0L3NtYy9zbWNfbGxjLmM6NDc1Olx0ICAgIGxpbmstXHUwMDNlbGdyLVx1MDAzZXBlZXJfc21jX3JlbGVhc2UgXHUwMDNlPSBTTUNfUkVMRUFTRV8xKSB7XG5uZXQvc21jL3NtY19sbGMuYy00NzYtXHRcdGNvbmZsbGMtXHUwMDNlbWF4X2Nvbm5zID0gbGluay1cdTAwM2VsZ3ItXHUwMDNlbWF4X2Nvbm5zO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfc21jLmM9NDA9aW50IGZhbGxiYWNrX2NudCA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3NtYy5jLTQxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9zbWMuYzo0MjpTRUMoXCYjMzQ7ZmVudHJ5L3NtY19yZWxlYXNlXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9zbWMuYzo0MzppbnQgQlBGX1BST0coYnBmX3NtY19yZWxlYXNlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9zbWMuYy00NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyOTgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gU01DIFNvY2tldCBMaWZlY3ljbGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zOiBgc21jX3JlbGVhc2VgLCBgc21jX2NsY3NvY2tfcmVsZWFzZWAsIGFuZCBgc21jX2luZXRfaW5pdF9zb2NrYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgcGllY2VzIHJlbGF0ZWQgdG8gbWFuYWdpbmcgdGhlIFNNQyBzb2NrZXQgbGlmZWN5Y2xlLiBIbW0sIGJ1dCBJIHNob3VsZCBwYXVzZS4gSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSBkZXN0cnVjdGlvbiBwcm9jZXNzLiBJIHJlY2FsbCBgc21jX2luZXRfZGVzdHJveV9zb2NrYCBiZWluZyBjYWxsZWQgZnJvbSBgc2tfY29tbW9uX3JlbGVhc2VgLiBOb3csIGlzICp0aGF0KiBjYWxsZWQgZnJvbSBgaW5ldF9yZWxlYXNlYCBvciBgaW5ldDZfcmVsZWFzZWA/IEl0JiMzOTtzIGVhc3kgdG8gZ2V0IGxvc3QgaW4gdGhlc2UgbGF5ZXJzLi4uTm8gd2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBjb250ZXh0LiBgc21jX2luZXRfcHJvdGAgaXMgdGhlIHN0cnVjdHVyZSB1c2VkIGZvciBgQUZfSU5FVGAgc29ja2V0cyBjcmVhdGVkIHdpdGggYElQUFJPVE9fU01DYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBgc21jX2luZXRfcHJvdGAsIHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QgYW5kIHRoYXQgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIHRlYXJkb3duIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgaG93IGl0IGlzIGFsbCBjb25uZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19pbmV0X3Byb3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfaW5ldC5jPTIxPXN0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3NtYy9zbWNfaW5ldC5jLTIyLVxubmV0L3NtYy9zbWNfaW5ldC5jOjIzOnN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXRfcHJvdCA9IHtcbm5ldC9zbWMvc21jX2luZXQuYy0yNC1cdC5uYW1lXHRcdD0gXCYjMzQ7SU5FVF9TTUNcJiMzNDssXG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jPTM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19pbmV0X3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jLTU2LVxubmV0L3NtYy9zbWNfaW5ldC5jOjU3OnN0YXRpYyBzdHJ1Y3QgaW5ldF9wcm90b3N3IHNtY19pbmV0X3Byb3Rvc3cgPSB7XG5uZXQvc21jL3NtY19pbmV0LmMtNTgtXHQudHlwZVx0XHQ9IFNPQ0tfU1RSRUFNLFxubmV0L3NtYy9zbWNfaW5ldC5jLTU5LVx0LnByb3RvY29sXHQ9IElQUFJPVE9fU01DLFxubmV0L3NtYy9zbWNfaW5ldC5jOjYwOlx0LnByb3RcdFx0PSBcdTAwMjZzbWNfaW5ldF9wcm90LFxubmV0L3NtYy9zbWNfaW5ldC5jLTYxLVx0Lm9wc1x0XHQ9IFx1MDAyNnNtY19pbmV0X3N0cmVhbV9vcHMsXG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jPTEzNT1pbnQgX19pbml0IHNtY19pbmV0X2luaXQodm9pZClcbi0tXG5uZXQvc21jL3NtY19pbmV0LmMtMTM4LVxubmV0L3NtYy9zbWNfaW5ldC5jOjEzOTpcdHJjID0gcHJvdG9fcmVnaXN0ZXIoXHUwMDI2c21jX2luZXRfcHJvdCwgMSk7XG5uZXQvc21jL3NtY19pbmV0LmMtMTQwLVx0aWYgKHJjKSB7XG5uZXQvc21jL3NtY19pbmV0LmM6MTQxOlx0XHRwcl9lcnIoXCYjMzQ7JXM6IHByb3RvX3JlZ2lzdGVyIHNtY19pbmV0X3Byb3QgZmFpbHMgd2l0aCAlZFxcblwmIzM0Oyxcbm5ldC9zbWMvc21jX2luZXQuYy0xNDItXHRcdCAgICAgICBfX2Z1bmNfXywgcmMpO1xuLS1cbm5ldC9zbWMvc21jX2luZXQuYy0xNDUtXHQvKiBubyByZXR1cm4gdmFsdWUgKi9cbm5ldC9zbWMvc21jX2luZXQuYzoxNDY6XHRpbmV0X3JlZ2lzdGVyX3Byb3Rvc3coXHUwMDI2c21jX2luZXRfcHJvdG9zdyk7XG5uZXQvc21jL3NtY19pbmV0LmMtMTQ3LVxuLS1cbm5ldC9zbWMvc21jX2luZXQuYy0xNjQtb3V0X2luZXQ2X3Byb3Q6XG5uZXQvc21jL3NtY19pbmV0LmM6MTY1Olx0aW5ldF91bnJlZ2lzdGVyX3Byb3Rvc3coXHUwMDI2c21jX2luZXRfcHJvdG9zdyk7XG5uZXQvc21jL3NtY19pbmV0LmM6MTY2Olx0cHJvdG9fdW5yZWdpc3RlcihcdTAwMjZzbWNfaW5ldF9wcm90KTtcbm5ldC9zbWMvc21jX2luZXQuYy0xNjctI2VuZGlmIC8qIENPTkZJR19JUFY2ICovXG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jPTE3MT12b2lkIHNtY19pbmV0X2V4aXQodm9pZClcbi0tXG5uZXQvc21jL3NtY19pbmV0LmMtMTc2LSNlbmRpZiAvKiBDT05GSUdfSVBWNiAqL1xubmV0L3NtYy9zbWNfaW5ldC5jOjE3NzpcdGluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KFx1MDAyNnNtY19pbmV0X3Byb3Rvc3cpO1xubmV0L3NtYy9zbWNfaW5ldC5jOjE3ODpcdHByb3RvX3VucmVnaXN0ZXIoXHUwMDI2c21jX2luZXRfcHJvdCk7XG5uZXQvc21jL3NtY19pbmV0LmMtMTc5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NTYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNNQyBTb2NrZXQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYHNtY19pbmV0X3Byb3RgIGlzIGluZGVlZCB0aGUgcHJvdG9jb2wgc3RydWN0dXJlIHVzZWQgZm9yIHNvY2tldHMgZW1wbG95aW5nIGBJUFBST1RPX1NNQ2AuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgbGV0JiMzOTtzIHNlZS4uLiB0aGUgYHNtY19pbmV0X3N0cmVhbV9vcHNgIHN0cnVjdHVyZSBoYXMgYSBgLnJlbGVhc2VgIGZ1bmN0aW9uIHBvaW50ZXIgc2V0IHRvIGBzbWNfcmVsZWFzZWAuIFRoYXQgbG9va3MgcmlnaHQsIHRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHN0cnVjdHVyZS4gSG1tLCBidXQgd2hlcmUgaXMgYHNtY19yZWxlYXNlYCBkZWZpbmVkPyBBaCwgeWVzLCBpdOKAmXMgaW4gYGFmX3NtYy5jYC4gT2theSwgZ29vZC4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGludG8gYGFmX3NtYy5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgYHNtY19yZWxlYXNlYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBzbWNfcmVsZWFzZVxcKHN0cnVjdCBzb2NrZXQgXFwqc29ja1xcKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTI4OD1zdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMjctXG5uZXQvc21jL2FmX3NtYy5jOjMyODppbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC9zbWMvYWZfc21jLmMtMzI5LXtcbi0tXG5uZXQvc21jL3NtYy5oPTQyPXZvaWQgc21jX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9zbWMvc21jLmgtNDMtXG5uZXQvc21jL3NtYy5oOjQ0OmludCBzbWNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTtcbm5ldC9zbWMvc21jLmgtNDUtaW50IHNtY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNNQyBTb2NrZXQgUmVsZWFzZSBNZWNoYW5pc20qKgoKT2theSwgc28gYHNtY19yZWxlYXNlYCBpcywgYXMgSSByZWNhbGwsIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIGEgc29ja2V0IGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIGZyYW1ld29yay4gVGhlIHBhdGNoIG5vdGVzIHRlbGwgbWUgaXQmIzM5O3MgYWRkaW5nIGEgYC5kZXN0cm95YCBmdW5jdGlvbiBwb2ludGVyIHRvIGJvdGggYHNtY19pbmV0X3Byb3RgIGFuZCBgc21jX2luZXQ2X3Byb3RgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCByaWdodCwgYSBjbGVhbnVwIGZ1bmN0aW9uLiYjMzQ7CgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzICpob3cqIGlzIHRoaXMgYC5kZXN0cm95YCBjYWxsYmFjayBhY3R1YWxseSBpbnZva2VkPyBUaGUgcGF0Y2ggcmVmZXJlbmNlcyBgc2tfY29tbW9uX3JlbGVhc2VgLiBNeSBtZW1vcnkmIzM5O3MgZnV6enksIGJ1dCBJJiMzOTttIHByZXR0eSBzdXJlIGBza19jb21tb25fcmVsZWFzZWAgaXMgcGFydCBvZiB0aGUgc3RhbmRhcmQgTGludXggbmV0d29ya2luZyBzdGFjaywgYW5kIGl0JiMzOTtzIHVzZWQgZm9yIHJlbGVhc2luZyB0aGUgY29tbW9uIHNvY2tldCBlbGVtZW50cy4gQW5kIGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgaXQmIzM5O3MgY2FsbGVkIGJ5IHRoZSBnZW5lcmFsIHNvY2tldCByZWxlYXNlIGZ1bmN0aW9uLCB3aGljaCBoZXJlIGlzIGBzbWNfcmVsZWFzZWAuIEJ1dCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQuICBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNvZGUgZm9yIGBzbWNfcmVsZWFzZWAgdG8gY29uZmlybSB0aGlzIHNlcXVlbmNlIGFuZCBlbnN1cmUgdGhlcmUgaXNuJiMzOTt0IHNvbWUgb3RoZXIgaW5kaXJlY3QgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IHBvaW50IGF0IHdoaWNoIGAuZGVzdHJveWAgaXMgY2FsbGVkIHdpdGhpbiB0aGUgcmVsZWFzZSBwcm9jZXNzIHRvIGZ1bGx5IGdyYXNwIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX2NvbW1vbl9yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTMzNzM9c3RhdGljIGludCBzbWNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzM5Ni1cdGlmIChyYykge1xubmV0L3NtYy9hZl9zbWMuYzozMzk3Olx0XHRza19jb21tb25fcmVsZWFzZShzayk7XG5uZXQvc21jL2FmX3NtYy5jLTMzOTgtXHRcdHNvY2stXHUwMDNlc2sgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBSZWxlYXNlIFByb2NlZHVyZXMqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgc2tfY29tbW9uX3JlbGVhc2VgIHdhcyBkaXJlY3RseSBjYWxsZWQgYnkgYHNtY19yZWxlYXNlYCwgYnV0IHNvbWV0aGluZyBmZWVscyBvZmYuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBjb25uZWN0aW9uLiBMZXQmIzM5O3Mgbm90IGFzc3VtZSBhbnl0aGluZyBoZXJlLCBsZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGltZSB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgX19zbWNfcmVsZWFzZWAgYW5kIHNlZSBob3cgdGhlIGZ1bmN0aW9ucyBpbnRlcmFjdC4gSSBuZWVkIHRvIGtub3cgdGhlIGNhbGwgc3RhY2suIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBiZWZvcmUgbWFraW5nIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmVsZWFzZSBwcm9jZWR1cmUuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxlIGRpZmZlcmVuY2VzIGZyb20gd2hhdCBJIGluaXRpYWxseSB1bmRlcnN0b29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NtY19yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTI3OT1zdGF0aWMgdm9pZCBzbWNfcmVzdG9yZV9mYWxsYmFja19jaGFuZ2VzKHN0cnVjdCBzbWNfc29jayAqc21jKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjg3LVxubmV0L3NtYy9hZl9zbWMuYzoyODg6c3RhdGljIGludCBfX3NtY19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxubmV0L3NtYy9hZl9zbWMuYy0yODkte1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MzI4PWludCBzbWNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzYwLVxubmV0L3NtYy9hZl9zbWMuYzozNjE6XHRyYyA9IF9fc21jX3JlbGVhc2Uoc21jKTtcbm5ldC9zbWMvYWZfc21jLmMtMzYyLVxuLS1cbm5ldC9zbWMvYWZfc21jLmM9MTg1Nz12b2lkIHNtY19jbG9zZV9ub25fYWNjZXB0ZWQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTg2NS1cdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19saW5nZXJ0aW1lLCBTTUNfTUFYX1NUUkVBTV9XQUlUX1RJTUVPVVQpO1xubmV0L3NtYy9hZl9zbWMuYzoxODY2Olx0X19zbWNfcmVsZWFzZShzbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0xODY3LVx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMjAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnk6CgoqKkRlY29uc3RydWN0aW5nIFNvY2tldCBEZXN0cnVjdGlvbjogQSBEZWVwIERpdmUgaW50byBgX19zbWNfcmVsZWFzZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc29ja2V0IGlzIGJlaW5nIGRlbW9saXNoZWQuIFRoaXMgbWVhbnMgY3JhY2tpbmcgb3BlbiB0aGUgYF9fc21jX3JlbGVhc2VgIGZ1bmN0aW9uIGFuZCBnZXR0aW5nIGRvd24gdG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBpdHMgaW5uZXIgd29ya2luZ3MuIEkgbmVlZCB0byBvYnNlcnZlIGl0cyBwcmVjaXNlIHN0ZXBzIGluIHRlYXJpbmcgZG93biB0aGUgY29ubmVjdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgbWVtb3J5IGRlYWxsb2NhdGlvbiwgY29ubmVjdGlvbiB0ZXJtaW5hdGlvbiBzZXF1ZW5jZXMsIHN0YXRlIHJlc2V0cywgcmVzb3VyY2UgY2xlYW51cCwgYW5kIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBjb250cmlidXRlIHRvIGEgY29tcGxldGUgYW5kIGNsZWFuIHNodXRkb3duLiBJJiMzOTtsbCBsb29rIGZvciBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBwb3RlbnRpYWwgZm9yIG9ycGhhbmVkIGRhdGEgb3IgcGVuZGluZyBvcGVyYXRpb25zLiBJIGV4cGVjdCB0aGlzIHdpbGwgYmUgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIGFuZCBhIHRob3JvdWdoIGFuYWx5c2lzIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBjbGFyaWZ5IHRoZSBzb2NrZXQmIzM5O3MgbGlmZWN5Y2xlIGR1cmluZyBpdHMgZmluYWwgbW9tZW50cy4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIHBpY3R1cmUgb2YgdGhpcyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4ODpcdHN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbiAyODk6XHR7XG4gMjkwOlx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZzbWMtXHUwMDNlc2s7XG4gMjkxOlx0XHRpbnQgcmMgPSAwO1xuIDI5MjpcdFxuIDI5MzpcdFx0aWYgKCFzbWMtXHUwMDNldXNlX2ZhbGxiYWNrKSB7XG4gMjk0Olx0XHRcdHJjID0gc21jX2Nsb3NlX2FjdGl2ZShzbWMpO1xuIDI5NTpcdFx0XHRzbWNfc29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcbiAyOTY6XHRcdFx0c2stXHUwMDNlc2tfc2h1dGRvd24gfD0gU0hVVERPV05fTUFTSztcbiAyOTc6XHRcdH0gZWxzZSB7XG4gMjk4Olx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBTTUNfQ0xPU0VEKSB7XG4gMjk5Olx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFNNQ19MSVNURU4gXHUwMDI2XHUwMDI2XG4gMzAwOlx0XHRcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlICE9IFNNQ19JTklUKVxuIDMwMTpcdFx0XHRcdFx0c29ja19wdXQoc2spOyAvKiBwYXNzaXZlIGNsb3NpbmcgKi9cbiAzMDI6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gU01DX0xJU1RFTikge1xuIDMwMzpcdFx0XHRcdFx0Lyogd2FrZSB1cCBjbGNzb2NrIGFjY2VwdCAqL1xuIDMwNDpcdFx0XHRcdFx0cmMgPSBrZXJuZWxfc29ja19zaHV0ZG93bihzbWMtXHUwMDNlY2xjc29jayxcbiAzMDU6XHRcdFx0XHRcdFx0XHRcdCAgU0hVVF9SRFdSKTtcbiAzMDY6XHRcdFx0XHR9XG4gMzA3Olx0XHRcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBTTUNfQ0xPU0VEO1xuIDMwODpcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4gMzA5Olx0XHRcdH1cbiAzMTA6XHRcdFx0c21jX3Jlc3RvcmVfZmFsbGJhY2tfY2hhbmdlcyhzbWMpO1xuIDMxMTpcdFx0fVxuIDMxMjpcdFxuIDMxMzpcdFx0c2stXHUwMDNlc2tfcHJvdC1cdTAwM2V1bmhhc2goc2spO1xuIDMxNDpcdFxuIDMxNTpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFNNQ19DTE9TRUQpIHtcbiAzMTY6XHRcdFx0aWYgKHNtYy1cdTAwM2VjbGNzb2NrKSB7XG4gMzE3Olx0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiAzMTg6XHRcdFx0XHRzbWNfY2xjc29ja19yZWxlYXNlKHNtYyk7XG4gMzE5Olx0XHRcdFx0bG9ja19zb2NrKHNrKTtcbiAzMjA6XHRcdFx0fVxuIDMyMTpcdFx0XHRpZiAoIXNtYy1cdTAwM2V1c2VfZmFsbGJhY2spXG4gMzIyOlx0XHRcdFx0c21jX2Nvbm5fZnJlZShcdTAwMjZzbWMtXHUwMDNlY29ubik7XG4gMzIzOlx0XHR9XG4gMzI0Olx0XG4gMzI1Olx0XHRyZXR1cm4gcmM7XG4gMzI2Olx0fVxuIDMyNzpcdFxuIDMyODpcdGludCBzbWNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIDMyOTpcdHtcbiAzMzA6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gMzMxOlx0XHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYztcbiAzMzI6XHRcdGludCBvbGRfc3RhdGUsIHJjID0gMDtcbiAzMzM6XHRcbiAzMzQ6XHRcdGlmICghc2spXG4gMzM1Olx0XHRcdGdvdG8gb3V0O1xuIDMzNjpcdFxuIDMzNzpcdFx0c29ja19ob2xkKHNrKTsgLyogc29ja19wdXQgYmVsb3cgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5ODIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTUMgU29ja2V0IFJlbGVhc2UgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBfX3NtY19yZWxlYXNlYCBmdW5jdGlvbiBhbmQgaXQmIzM5O3MgY2FsbGluZyBgc2stJmd0O3NrX3Byb3QtJmd0O3VuaGFzaChzaylgIGFuZCBhbHNvIGBzbWNfY2xjc29ja19yZWxlYXNlKHNtYylgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgLmRlc3Ryb3lgIG1ldGhvZCBpbnRvIGBzbWNfaW5ldF9wcm90YCBhbmQgYHNtY19pbmV0Nl9wcm90YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYF9fc21jX3JlbGVhc2VgIGV2ZW4gKnVzZXMqIHRob3NlIGluZXQgcHJvdG9jb2xzLgoKSGFuZyBvbi4gYF9fc21jX3JlbGVhc2VgIGlzIGFjdHVhbGx5IHVzZWQgZm9yIGBzbWNfcHJvdG9gIGFuZCBgc21jX3Byb3RvNmAsIHdoaWNoIGFyZSBmb3IgYEFGX1NNQ2Agc29ja2V0cy4gVGhhdCBtYWtlcyBzZW5zZS4gQnV0IHRoZSBgc21jX2luZXRfcHJvdGAgcHJvdG9jb2xzIGFyZSB1c2VkIGZvciBgSVBQUk9UT19TTUNgIHdpdGhpbiBgQUZfSU5FVGAgYW5kIGBBRl9JTkVUNmAuIE9rYXksIHNvIGBfX3NtY19yZWxlYXNlYCBpc24mIzM5O3QgZGlyZWN0bHkgcmVsYXRlZCB0byB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgd2l0aCB0aG9zZSBzcGVjaWZpYyBpbmV0IHByb3RvY29scy4KClRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgcHJvdG9jb2xzIGFuZCBob3cgdGhleSYjMzk7cmUgcmVsZWFzZWQgSSYjMzk7bGwgY2hlY2sgYHNtY19pbmV0X3Byb3RgIGluIGBuZXQvc21jL3NtY19pbmV0LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2luZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjM6XHRzdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0X3Byb3QgPSB7XG4gIDI0Olx0XHQubmFtZVx0XHQ9IFwmIzM0O0lORVRfU01DXCYjMzQ7LFxuICAyNTpcdFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gIDI2Olx0XHQuaW5pdFx0XHQ9IHNtY19pbmV0X2luaXRfc29jayxcbiAgMjc6XHRcdC5kZXN0cm95XHQ9IHNtY19pbmV0X2Rlc3Ryb3lfc29jayxcbiAgMjg6XHRcdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG4gIDI5Olx0XHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbiAgMzA6XHRcdC5yZWxlYXNlX2NiXHQ9IHNtY19yZWxlYXNlX2NiLFxuICAzMTpcdFx0Lm9ial9zaXplXHQ9IHNpemVvZihzdHJ1Y3Qgc21jX3NvY2spLFxuICAzMjpcdFx0Lmguc21jX2hhc2hcdD0gXHUwMDI2c21jX3Y0X2hhc2hpbmZvLFxuICAzMzpcdFx0LnNsYWJfZmxhZ3NcdD0gU0xBQl9UWVBFU0FGRV9CWV9SQ1UsXG4gIDM0Olx0fTtcbiAgMzU6XHRcbiAgMzY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzbWNfaW5ldF9zdHJlYW1fb3BzID0ge1xuICAzNzpcdFx0LmZhbWlseVx0XHQ9IFBGX0lORVQsXG4gIDM4Olx0XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiAgMzk6XHRcdC5yZWxlYXNlXHQ9IHNtY19yZWxlYXNlLFxuICA0MDpcdFx0LmJpbmRcdFx0PSBzbWNfYmluZCxcbiAgNDE6XHRcdC5jb25uZWN0XHQ9IHNtY19jb25uZWN0LFxuICA0MjpcdFx0LnNvY2tldHBhaXJcdD0gc29ja19ub19zb2NrZXRwYWlyLFxuICA0MzpcdFx0LmFjY2VwdFx0XHQ9IHNtY19hY2NlcHQsXG4gIDQ0Olx0XHQuZ2V0bmFtZVx0PSBzbWNfZ2V0bmFtZSxcbiAgNDU6XHRcdC5wb2xsXHRcdD0gc21jX3BvbGwsXG4gIDQ2Olx0XHQuaW9jdGxcdFx0PSBzbWNfaW9jdGwsXG4gIDQ3Olx0XHQubGlzdGVuXHRcdD0gc21jX2xpc3RlbixcbiAgNDg6XHRcdC5zaHV0ZG93blx0PSBzbWNfc2h1dGRvd24sXG4gIDQ5Olx0XHQuc2V0c29ja29wdFx0PSBzbWNfc2V0c29ja29wdCxcbiAgNTA6XHRcdC5nZXRzb2Nrb3B0XHQ9IHNtY19nZXRzb2Nrb3B0LFxuICA1MTpcdFx0LnNlbmRtc2dcdD0gc21jX3NlbmRtc2csXG4gIDUyOlx0XHQucmVjdm1zZ1x0PSBzbWNfcmVjdm1zZyxcbiAgNTM6XHRcdC5tbWFwXHRcdD0gc29ja19ub19tbWFwLFxuICA1NDpcdFx0LnNwbGljZV9yZWFkXHQ9IHNtY19zcGxpY2VfcmVhZCxcbiAgNTU6XHR9O1xuICA1NjpcdFxuICA1NzpcdHN0YXRpYyBzdHJ1Y3QgaW5ldF9wcm90b3N3IHNtY19pbmV0X3Byb3Rvc3cgPSB7XG4gIDU4Olx0XHQudHlwZVx0XHQ9IFNPQ0tfU1RSRUFNLFxuICA1OTpcdFx0LnByb3RvY29sXHQ9IElQUFJPVE9fU01DLFxuICA2MDpcdFx0LnByb3RcdFx0PSBcdTAwMjZzbWNfaW5ldF9wcm90LFxuICA2MTpcdFx0Lm9wc1x0XHQ9IFx1MDAyNnNtY19pbmV0X3N0cmVhbV9vcHMsXG4gIDYyOlx0fTtcbiAgNjM6XHRcbiAgNjQ6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiAgNjU6XHRzdHJ1Y3Qgc21jNl9zb2NrIHtcbiAgNjY6XHRcdHN0cnVjdCBzbWNfc29ja1x0XHRzbWM7XG4gIDY3Olx0XHRzdHJ1Y3QgaXB2Nl9waW5mb1x0aW5ldDY7XG4gIDY4Olx0fTtcbiAgNjk6XHRcbiAgNzA6XHRzdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0Nl9wcm90ID0ge1xuICA3MTpcdFx0Lm5hbWVcdFx0PSBcJiMzNDtJTkVUNl9TTUNcJiMzNDssXG4gIDcyOlx0XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNNQyBTb2NrZXQgUmVsZWFzZSBQcm9jZXNzKioKCk9rYXksIGxldCBtZSB0cmFjZSB0aGlzIGBzbWNfaW5ldF9zdHJlYW1fb3BzLnJlbGVhc2VgIGZ1bmN0aW9uLiBBaCwgaXQmIzM5O3MganVzdCBhIHBvaW50ZXIgdG8gYHNtY19yZWxlYXNlYC4gVGhhdCYjMzk7cyBnb29kOyBrZWVwcyBpdCBjbGVhbi4gU28sIGBzbWNfcmVsZWFzZWAgaXMgdGhlIGhlYXJ0IG9mIHRoZSBzb2NrZXQgY2xvc3VyZS4gSXQgbWVhbnMgdGhpcyBpcyB3aGF0IGdldHMgY2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIGlzIHRlcm1pbmF0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBoZXJlLiBSaWdodCwgYHNtY19yZWxlYXNlYCBjYWxscyBgX19zbWNfcmVsZWFzZWAsIHdoaWNoIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLiBXaXRoaW4gYF9fc21jX3JlbGVhc2VgIEkgc2VlIGBzay0mZ3Q7c2tfcHJvdC0mZ3Q7dW5oYXNoKHNrKWAg4oCTIHRoYXQmIzM5O3MgZXhwZWN0ZWQsIHVubGlua2luZyB0aGUgc29ja2V0IGZyb20gdGhlIG5ldHdvcmsgaGFzaCB0YWJsZSDigJMgYW5kIGBzbWNfY2xjc29ja19yZWxlYXNlKHNtYylgLCB3aGljaCBJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIG1vcmUgdGhvcm91Z2hseS4KCkJ1dCBob2xkIG9uLCBgc21jX3JlbGVhc2VgICphbHNvKiBjYWxscyBgc29ja19wdXQoc2spYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGNvbWVzIGluLiBXaGVuIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIHNvY2tldCwgYHNrYCwgZHJvcHMgdG8gemVybywgYHNrX2ZyZWVgIGlzIHRyaWdnZXJlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG9uIHRoZSByaWdodCBwYXRoLiBOb3csIEkgdGhvdWdodCBpdCB3YXMgYHNrX2NvbW1vbl9yZWxlYXNlYCBjYWxsaW5nIGBza19wcm90LSZndDtkZXN0cm95KHNrKWAgYnV0IGBza19kZXN0cnVjdGAgY2FsbHMgYHNrX3Byb3QtJmd0O2Rlc3Ryb3lgLiBJdCYjMzk7cyBhbGwgY29ubmVjdGVkLiBMZXQgbWUganVzdCBjb25maXJtIGV4YWN0bHkgaG93IGBza19jb21tb25fcmVsZWFzZWAgZnVuY3Rpb25zIHRvIHByb3ZpZGUgYSBmaXJtIHVuZGVyc3RhbmRpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiBub3cgdG8gYmUgc3VyZSBJIGFtIHRyYWNpbmcgdGhpcyBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfY29tbW9uX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29jay5jPTQwMzU9RVhQT1JUX1NZTUJPTChzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0KTtcbm5ldC9jb3JlL3NvY2suYy00MDM2LVxubmV0L2NvcmUvc29jay5jOjQwMzc6dm9pZCBza19jb21tb25fcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrLmMtNDAzOC17XG4tLVxubmV0L2NvcmUvc29jay5jLTQwNDItXHQvKlxubmV0L2NvcmUvc29jay5jOjQwNDM6XHQgKiBPYnNlcnZhdGlvbjogd2hlbiBza19jb21tb25fcmVsZWFzZSBpcyBjYWxsZWQsIHByb2Nlc3NlcyBoYXZlXG5uZXQvY29yZS9zb2NrLmMtNDA0NC1cdCAqIG5vIGFjY2VzcyB0byBzb2NrZXQuIEJ1dCBuZXQgc3RpbGwgaGFzLlxuLS1cbm5ldC9jb3JlL3NvY2suYy00MDY5LX1cbm5ldC9jb3JlL3NvY2suYzo0MDcwOkVYUE9SVF9TWU1CT0woc2tfY29tbW9uX3JlbGVhc2UpO1xubmV0L2NvcmUvc29jay5jLTQwNzEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTk5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBgc2tfY29tbW9uX3JlbGVhc2VgKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBza19jb21tb25fcmVsZWFzZWAuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB3aGF0JiMzOTtzIGluY2x1ZGVkIGhlcmUuIEdpdmVuIGl0cyBuYW1lLCAmIzM0O2NvbW1vbiByZWxlYXNlLCYjMzQ7IEkmIzM5O20gZXhwZWN0aW5nIGEgY29sbGVjdGlvbiBvZiBmb3VuZGF0aW9uYWwgb3Igc2hhcmVkIGNvbXBvbmVudHMuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBjb3JlIGxpYnJhcmllcyBhbmQgdXRpbGl0eSBmdW5jdGlvbnMgdG8gY3J1Y2lhbCBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGV2ZW4gc29tZSBlc3NlbnRpYWwgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4gS25vd2luZyB0aGlzIHJlbGVhc2UgaXMgJiMzNDtjb21tb24mIzM0OyBpdCBpcyBsaWtlbHkgYSBzb3VyY2Ugb2YgZGVwZW5kZW5jeSBmb3IgbXVsdGlwbGUgb3RoZXIgcHJvamVjdHMsIG1ha2luZyB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIGNoYW5nZXMgY3JpdGljYWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB0YXJnZXQgYXVkaWVuY2UgYW5kIHdoYXQgYXJlYXMgaXQgaXMgYWZmZWN0aW5nIHNvIEkgYW0gbm90IG1pc3NpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAzNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MDM3Olx0dm9pZCBza19jb21tb25fcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXG40MDM4Olx0e1xuNDAzOTpcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGVzdHJveSlcbjQwNDA6XHRcdFx0c2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkZXN0cm95KHNrKTtcbjQwNDE6XHRcbjQwNDI6XHRcdC8qXG40MDQzOlx0XHQgKiBPYnNlcnZhdGlvbjogd2hlbiBza19jb21tb25fcmVsZWFzZSBpcyBjYWxsZWQsIHByb2Nlc3NlcyBoYXZlXG40MDQ0Olx0XHQgKiBubyBhY2Nlc3MgdG8gc29ja2V0LiBCdXQgbmV0IHN0aWxsIGhhcy5cbjQwNDU6XHRcdCAqIFN0ZXAgb25lLCBkZXRhY2ggaXQgZnJvbSBuZXR3b3JraW5nOlxuNDA0NjpcdFx0ICpcbjQwNDc6XHRcdCAqIEEuIFJlbW92ZSBmcm9tIGhhc2ggdGFibGVzLlxuNDA0ODpcdFx0ICovXG40MDQ5Olx0XG40MDUwOlx0XHRzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzayk7XG40MDUxOlx0XG40MDUyOlx0XHQvKlxuNDA1MzpcdFx0ICogSW4gdGhpcyBwb2ludCBzb2NrZXQgY2Fubm90IHJlY2VpdmUgbmV3IHBhY2tldHMsIGJ1dCBpdCBpcyBwb3NzaWJsZVxuNDA1NDpcdFx0ICogdGhhdCBzb21lIHBhY2tldHMgYXJlIGluIGZsaWdodCBiZWNhdXNlIHNvbWUgQ1BVIHJ1bnMgcmVjZWl2ZXIgYW5kXG40MDU1Olx0XHQgKiBkaWQgaGFzaCB0YWJsZSBsb29rdXAgYmVmb3JlIHdlIHVuaGFzaGVkIHNvY2tldC4gVGhleSB3aWxsIGFjaGlldmVcbjQwNTY6XHRcdCAqIHJlY2VpdmUgcXVldWUgYW5kIHdpbGwgYmUgcHVyZ2VkIGJ5IHNvY2tldCBkZXN0cnVjdG9yLlxuNDA1NzpcdFx0ICpcbjQwNTg6XHRcdCAqIEFsc28gd2Ugc3RpbGwgaGF2ZSBwYWNrZXRzIHBlbmRpbmcgb24gcmVjZWl2ZSBxdWV1ZSBhbmQgcHJvYmFibHksXG40MDU5Olx0XHQgKiBvdXIgb3duIHBhY2tldHMgd2FpdGluZyBpbiBkZXZpY2UgcXVldWVzLiBzb2NrX2Rlc3Ryb3kgd2lsbCBkcmFpblxuNDA2MDpcdFx0ICogcmVjZWl2ZSBxdWV1ZSwgYnV0IHRyYW5zbWl0dGVkIHBhY2tldHMgd2lsbCBkZWxheSBzb2NrZXQgZGVzdHJ1Y3Rpb25cbjQwNjE6XHRcdCAqIHVudGlsIHRoZSBsYXN0IHJlZmVyZW5jZSB3aWxsIGJlIHJlbGVhc2VkLlxuNDA2MjpcdFx0ICovXG40MDYzOlx0XG40MDY0Olx0XHRzb2NrX29ycGhhbihzayk7XG40MDY1Olx0XG40MDY2Olx0XHR4ZnJtX3NrX2ZyZWVfcG9saWN5KHNrKTtcbjQwNjc6XHRcbjQwNjg6XHRcdHNvY2tfcHV0KHNrKTtcbjQwNjk6XHR9XG40MDcwOlx0RVhQT1JUX1NZTUJPTChza19jb21tb25fcmVsZWFzZSk7XG40MDcxOlx0XG40MDcyOlx0dm9pZCBza19nZXRfbWVtaW5mbyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHUzMiAqbWVtKVxuNDA3MzpcdHtcbjQwNzQ6XHRcdG1lbXNldChtZW0sIDAsIHNpemVvZigqbWVtKSAqIFNLX01FTUlORk9fVkFSUyk7XG40MDc1Olx0XG40MDc2Olx0XHRtZW1bU0tfTUVNSU5GT19STUVNX0FMTE9DXSA9IHNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcbjQwNzc6XHRcdG1lbVtTS19NRU1JTkZPX1JDVkJVRl0gPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbjQwNzg6XHRcdG1lbVtTS19NRU1JTkZPX1dNRU1fQUxMT0NdID0gc2tfd21lbV9hbGxvY19nZXQoc2spO1xuNDA3OTpcdFx0bWVtW1NLX01FTUlORk9fU05EQlVGXSA9IFJFQURfT05DRShzay1cdTAwM2Vza19zbmRidWYpO1xuNDA4MDpcdFx0bWVtW1NLX01FTUlORk9fRldEX0FMTE9DXSA9IFJFQURfT05DRShzay1cdTAwM2Vza19mb3J3YXJkX2FsbG9jKTtcbjQwODE6XHRcdG1lbVtTS19NRU1JTkZPX1dNRU1fUVVFVUVEXSA9IFJFQURfT05DRShzay1cdTAwM2Vza193bWVtX3F1ZXVlZCk7XG40MDgyOlx0XHRtZW1bU0tfTUVNSU5GT19PUFRNRU1dID0gYXRvbWljX3JlYWQoXHUwMDI2c2stXHUwMDNlc2tfb21lbV9hbGxvYyk7XG40MDgzOlx0XHRtZW1bU0tfTUVNSU5GT19CQUNLTE9HXSA9IFJFQURfT05DRShzay1cdTAwM2Vza19iYWNrbG9nLmxlbik7XG40MDg0Olx0XHRtZW1bU0tfTUVNSU5GT19EUk9QU10gPSBza19kcm9wc19yZWFkKHNrKTtcbjQwODU6XHR9XG40MDg2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDczCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJhY2UgQ29uZGl0aW9uIEZpeCBpbiBTTUMgU29ja2V0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4gZ29lcyB0byB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzLiBgc2tfY29tbW9uX3JlbGVhc2VgIGNhbGxzIGBzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGVzdHJveShzaylgIHRoZW4gYHNrLSZndDtza19wcm90LSZndDt1bmhhc2goc2spYC4gVGhpcyBwYXRjaCBhZGRzIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLCB3aGljaCwgY3J1Y2lhbGx5LCBjYWxscyBgc2stJmd0O3NrX3Byb3QtJmd0O3VuaGFzaChzaylgICpiZWZvcmUqIGBzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpYC4gVGhlIGNvbW1lbnQgaXMga2V5IGhlcmUuIEl0JiMzOTtzIGhpZ2hsaWdodGluZyBhIHBvdGVudGlhbCByYWNlLiBgc21jX2RpYWdgIGNhbiBkdW1wIGRhdGEgdGhhdCBkZXJlZmVyZW5jZXMgYHNtYy0mZ3Q7Y2xjc29ja2Agd2l0aG91dCB0aGUgYGNsY3NvY2tfcmVsZWFzZV9sb2NrYCwgd2hpbGUgdGhlIHN0YW5kYXJkIGBza19jb21tb25fcmVsZWFzZSgpYCBkZXN0cm95cyB0aGluZ3MgaW4gdGhlIHdyb25nIG9yZGVyICguZGVzdHJveSBiZWZvcmUgLnVuaGFzaCkuCgpUaGlzIG5ldyBvcmRlcmluZywgdW5oYXNoaW5nICpiZWZvcmUqIGFueSB0ZWFyZG93biwgaXMgZGVzaWduZWQgdG8gcHJldmVudCBhIGR1bXAgZnJvbSBvYnNlcnZpbmcgdGhlIHNvY2tldCBiZWluZyBmcmVlZC4gVGhlIHNlY29uZCB1bmhhc2ggaXMsIG9mIGNvdXJzZSwgYSBuby1vcCwgYnV0IGl0JiMzOTtzIHRoZSBmaXJzdCBvbmUgdGhhdCBtYXR0ZXJzLiBTbywgaXQmIzM5O3MgYSByYWNlIGNvbmRpdGlvbiBmaXguIEkgc2VlIGl0IG5vdy4KCkJlY2F1c2UgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AgaXMgc3RhdGljLCBJIGNhbiYjMzk7dCByZWFsbHkgZGlnIGludG8gdGhhdCBkaXJlY3RseSwgYnV0IGl0IG1ha2VzIG1lIGNvbnNpZGVyIHRoZSByZWxhdGVkIGZ1bmN0aW9uczogYHNtY19yZWxlYXNlYCwgYHNtY19jbGNzb2NrX3JlbGVhc2VgLCBgc21jX2luZXRfaW5pdF9zb2NrYCwgYW5kLCBlc3BlY2lhbGx5LCBgc21jX2RpYWdfZHVtcGAuIFdoZXJlIGlzIHRoYXQ/IEFoLCB5ZXMsIGBuZXQvc21jL3NtY19kaWFnLmNgLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc21jX2RpYWdfZHVtcGAgbm93IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHZ1bG5lcmFiaWxpdHkgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfZGlhZ19kdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2RpYWcuYy0yNS1cbm5ldC9zbWMvc21jX2RpYWcuYzoyNjpzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHgge1xubmV0L3NtYy9zbWNfZGlhZy5jLTI3LVx0aW50IHBvc1syXTtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjktXG5uZXQvc21jL3NtY19kaWFnLmM6MzA6c3RhdGljIHN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCAqc21jX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvc21jL3NtY19kaWFnLmMtMzEte1xubmV0L3NtYy9zbWNfZGlhZy5jOjMyOlx0cmV0dXJuIChzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKiljYi1cdTAwM2VjdHg7XG5uZXQvc21jL3NtY19kaWFnLmMtMzMtfVxuLS1cbm5ldC9zbWMvc21jX2RpYWcuYz02MD1zdGF0aWMgaW50IHNtY19kaWFnX21zZ19hdHRyc19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtNzEtXG5uZXQvc21jL3NtY19kaWFnLmM6NzI6c3RhdGljIGludCBfX3NtY19kaWFnX2R1bXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NtYy9zbWNfZGlhZy5jLTczLVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMTk1LVxubmV0L3NtYy9zbWNfZGlhZy5jOjE5NjpzdGF0aWMgaW50IHNtY19kaWFnX2R1bXBfcHJvdG8oc3RydWN0IHByb3RvICpwcm90LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NtYy9zbWNfZGlhZy5jLTE5Ny1cdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgcF90eXBlKVxubmV0L3NtYy9zbWNfZGlhZy5jLTE5OC17XG5uZXQvc21jL3NtY19kaWFnLmM6MTk5Olx0c3RydWN0IHNtY19kaWFnX2R1bXBfY3R4ICpjYl9jdHggPSBzbWNfZHVtcF9jb250ZXh0KGNiKTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yMDAtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0yMTYtXHRcdFx0Z290byBuZXh0O1xubmV0L3NtYy9zbWNfZGlhZy5jOjIxNzpcdFx0cmMgPSBfX3NtY19kaWFnX2R1bXAoc2ssIHNrYiwgY2IsIG5sbXNnX2RhdGEoY2ItXHUwMDNlbmxoKSwgYmMpO1xubmV0L3NtYy9zbWNfZGlhZy5jLTIxOC1cdFx0aWYgKHJjIFx1MDAzYyAwKVxuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0yMjktXG5uZXQvc21jL3NtY19kaWFnLmM6MjMwOnN0YXRpYyBpbnQgc21jX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvc21jL3NtY19kaWFnLmMtMjMxLXtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjMzLVxubmV0L3NtYy9zbWNfZGlhZy5jOjIzNDpcdHJjID0gc21jX2RpYWdfZHVtcF9wcm90byhcdTAwMjZzbWNfcHJvdG8sIHNrYiwgY2IsIFNNQ1BST1RPX1NNQyk7XG5uZXQvc21jL3NtY19kaWFnLmMtMjM1LVx0aWYgKCFyYylcbm5ldC9zbWMvc21jX2RpYWcuYzoyMzY6XHRcdHNtY19kaWFnX2R1bXBfcHJvdG8oXHUwMDI2c21jX3Byb3RvNiwgc2tiLCBjYiwgU01DUFJPVE9fU01DNik7XG5uZXQvc21jL3NtY19kaWFnLmMtMjM3LVx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jPTI0MD1zdGF0aWMgaW50IHNtY19kaWFnX2hhbmRsZXJfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKmgpXG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTI0Ny1cdFx0XHRzdHJ1Y3QgbmV0bGlua19kdW1wX2NvbnRyb2wgYyA9IHtcbm5ldC9zbWMvc21jX2RpYWcuYzoyNDg6XHRcdFx0XHQuZHVtcCA9IHNtY19kaWFnX2R1bXAsXG5uZXQvc21jL3NtY19kaWFnLmMtMjQ5LVx0XHRcdFx0Lm1pbl9kdW1wX2FsbG9jID0gU0tCX1dJVEhfT1ZFUkhFQUQoMzI3NjgpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc3OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBjb25maWdzIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgSSYjMzk7bSBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgYm90aCBgU01DYCBhbmQgYFNNQ19ESUFHYC4gQnV0IGhhbmcgb24gYSBzZWNvbmQuLi4gd2hlbiBJIGxvb2sgYXQgd2hhdCBgc21jX2RpYWdfZHVtcGAgYWN0dWFsbHkgKmR1bXBzKiwgaXQmIzM5O3MgbGlzdGluZyBgc21jX3Byb3RvYCBhbmQgYHNtY19wcm90bzZgLiBXaGVyZSYjMzk7cyBgc21jX2luZXRfcHJvdGAgaW4gdGhhdCBtaXg/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgc21jX2RpYWdfZHVtcGAgcHJvY2VzcyBhZ2FpbiB0byBlbnN1cmUgSSYjMzk7bSBjYXB0dXJpbmcgZXZlcnl0aGluZyByZWxldmFudC4gU29tZXRoaW5nIGZlZWxzIG9mZiwgc28gYmV0dGVyIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2RpYWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjMwOlx0c3RhdGljIGludCBzbWNfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiAyMzE6XHR7XG4gMjMyOlx0XHRpbnQgcmMgPSAwO1xuIDIzMzpcdFxuIDIzNDpcdFx0cmMgPSBzbWNfZGlhZ19kdW1wX3Byb3RvKFx1MDAyNnNtY19wcm90bywgc2tiLCBjYiwgU01DUFJPVE9fU01DKTtcbiAyMzU6XHRcdGlmICghcmMpXG4gMjM2Olx0XHRcdHNtY19kaWFnX2R1bXBfcHJvdG8oXHUwMDI2c21jX3Byb3RvNiwgc2tiLCBjYiwgU01DUFJPVE9fU01DNik7XG4gMjM3Olx0XHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiAyMzg6XHR9XG4gMjM5Olx0XG4gMjQwOlx0c3RhdGljIGludCBzbWNfZGlhZ19oYW5kbGVyX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpoKVxuIDI0MTpcdHtcbiAyNDI6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gMjQzOlx0XG4gMjQ0Olx0XHRpZiAoaC1cdTAwM2VubG1zZ190eXBlID09IFNPQ0tfRElBR19CWV9GQU1JTFkgXHUwMDI2XHUwMDI2XG4gMjQ1Olx0XHQgICAgaC1cdTAwM2VubG1zZ19mbGFncyBcdTAwMjYgTkxNX0ZfRFVNUCkge1xuIDI0NjpcdFx0XHR7XG4gMjQ3Olx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZHVtcF9jb250cm9sIGMgPSB7XG4gMjQ4Olx0XHRcdFx0XHQuZHVtcCA9IHNtY19kaWFnX2R1bXAsXG4gMjQ5Olx0XHRcdFx0XHQubWluX2R1bXBfYWxsb2MgPSBTS0JfV0lUSF9PVkVSSEVBRCgzMjc2OCksXG4gMjUwOlx0XHRcdFx0fTtcbiAyNTE6XHRcdFx0XHRyZXR1cm4gbmV0bGlua19kdW1wX3N0YXJ0KG5ldC1cdTAwM2VkaWFnX25sc2ssIHNrYiwgaCwgXHUwMDI2Yyk7XG4gMjUyOlx0XHRcdH1cbiAyNTM6XHRcdH1cbiAyNTQ6XHRcdHJldHVybiAwO1xuIDI1NTpcdH1cbiAyNTY6XHRcbiAyNTc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHNvY2tfZGlhZ19oYW5kbGVyIHNtY19kaWFnX2hhbmRsZXIgPSB7XG4gMjU4Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiAyNTk6XHRcdC5mYW1pbHkgPSBBRl9TTUMsXG4gMjYwOlx0XHQuZHVtcCA9IHNtY19kaWFnX2hhbmRsZXJfZHVtcCxcbiAyNjE6XHR9O1xuIDI2MjpcdFxuIDI2MzpcdHN0YXRpYyBpbnQgX19pbml0IHNtY19kaWFnX2luaXQodm9pZClcbiAyNjQ6XHR7XG4gMjY1Olx0XHRyZXR1cm4gc29ja19kaWFnX3JlZ2lzdGVyKFx1MDAyNnNtY19kaWFnX2hhbmRsZXIpO1xuIDI2NjpcdH1cbiAyNjc6XHRcbiAyNjg6XHRzdGF0aWMgdm9pZCBfX2V4aXQgc21jX2RpYWdfZXhpdCh2b2lkKVxuIDI2OTpcdHtcbiAyNzA6XHRcdHNvY2tfZGlhZ191bnJlZ2lzdGVyKFx1MDAyNnNtY19kaWFnX2hhbmRsZXIpO1xuIDI3MTpcdH1cbiAyNzI6XHRcbiAyNzM6XHRtb2R1bGVfaW5pdChzbWNfZGlhZ19pbml0KTtcbiAyNzQ6XHRtb2R1bGVfZXhpdChzbWNfZGlhZ19leGl0KTtcbiAyNzU6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuIDI3NjpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTTUMgc29ja2V0IG1vbml0b3JpbmcgdmlhIFNPQ0tfRElBR1wmIzM0Oyk7XG4gMjc3Olx0TU9EVUxFX0FMSUFTX05FVF9QRl9QUk9UT19UWVBFKFBGX05FVExJTkssIE5FVExJTktfU09DS19ESUFHLCA0MyAvKiBBRl9TTUMgKi8pO1xuIDI3ODpcdE1PRFVMRV9BTElBU19HRU5MX0ZBTUlMWShTTUNSX0dFTkxfRkFNSUxZX05BTUUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgyNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnkgUmVnYXJkaW5nIFNNQyBEaWFnbm9zdGljcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgd2UmIzM5O3JlIGRpYWdub3NpbmcgU01DIGNvbm5lY3Rpb25zIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2Ygd2hhdCB3ZSYjMzk7cmUgZHVtcGluZy4gVGhlIGBzbWNfZGlhZ19kdW1wYCB0b29s4oCmIHJpZ2h0LCBpdCBjbGVhcmx5IGNhcHR1cmVzIGRhdGEgZnJvbSBgc21jX3Byb3RvYCBhbmQgYHNtY19wcm90bzZgLiBHb29kLiBCdXQgd2FpdOKApiB3aGF0IGFib3V0IGBzbWNfaW5ldF9wcm90YD8gRG9lcyBgc21jX2RpYWdfZHVtcGAgYWN0dWFsbHkgaW5jbHVkZSB0aGF0IGluZm9ybWF0aW9uPyBObywgaXQgZG9lc24mIzM5O3Qgc2VlbSB0bywgd2hpY2ggaXMgYSBrZXkgcG9pbnQgb2YgY2xhcmlmaWNhdGlvbi4KClRoaW5raW5nIGl0IHRocm91Z2gsIGBzbWNfaW5ldF9wcm90YCBpcyBzcGVjaWZpYyB0byBgSVBQUk9UT19TTUNgIHNvY2tldHMsIGFuZCBJIG5lZWQgdG8ga25vdyBpZiB3ZSBhcmUgZ2V0dGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgd2l0aCBgc21jX2RpYWdfZHVtcGAuIFNvLCB0byBiZSB0aG9yb3VnaCBhbmQgY29ycmVjdCwgSSBzaG91bGQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIHNwZWNpZmljYWxseSBgc21jX2RpYWdfZHVtcF9wcm90b2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gY29uZmlybSBteSBpbml0aWFsIHRob3VnaHRzIGFib3V0IHRoZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19kaWFnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NjpcdHN0YXRpYyBpbnQgc21jX2RpYWdfZHVtcF9wcm90byhzdHJ1Y3QgcHJvdG8gKnByb3QsIHN0cnVjdCBza19idWZmICpza2IsXG4gMTk3Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IHBfdHlwZSlcbiAxOTg6XHR7XG4gMTk5Olx0XHRzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKmNiX2N0eCA9IHNtY19kdW1wX2NvbnRleHQoY2IpO1xuIDIwMDpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbiAyMDE6XHRcdGludCBzbnVtID0gY2JfY3R4LVx1MDAzZXBvc1twX3R5cGVdO1xuIDIwMjpcdFx0c3RydWN0IG5sYXR0ciAqYmMgPSBOVUxMO1xuIDIwMzpcdFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7XG4gMjA0Olx0XHRpbnQgcmMgPSAwLCBudW0gPSAwO1xuIDIwNTpcdFx0c3RydWN0IHNvY2sgKnNrO1xuIDIwNjpcdFxuIDIwNzpcdFx0cmVhZF9sb2NrKFx1MDAyNnByb3QtXHUwMDNlaC5zbWNfaGFzaC1cdTAwM2Vsb2NrKTtcbiAyMDg6XHRcdGhlYWQgPSBcdTAwMjZwcm90LVx1MDAzZWguc21jX2hhc2gtXHUwMDNlaHQ7XG4gMjA5Olx0XHRpZiAoaGxpc3RfZW1wdHkoaGVhZCkpXG4gMjEwOlx0XHRcdGdvdG8gb3V0O1xuIDIxMTpcdFxuIDIxMjpcdFx0c2tfZm9yX2VhY2goc2ssIGhlYWQpIHtcbiAyMTM6XHRcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuIDIxNDpcdFx0XHRcdGNvbnRpbnVlO1xuIDIxNTpcdFx0XHRpZiAobnVtIFx1MDAzYyBzbnVtKVxuIDIxNjpcdFx0XHRcdGdvdG8gbmV4dDtcbiAyMTc6XHRcdFx0cmMgPSBfX3NtY19kaWFnX2R1bXAoc2ssIHNrYiwgY2IsIG5sbXNnX2RhdGEoY2ItXHUwMDNlbmxoKSwgYmMpO1xuIDIxODpcdFx0XHRpZiAocmMgXHUwMDNjIDApXG4gMjE5Olx0XHRcdFx0Z290byBvdXQ7XG4gMjIwOlx0bmV4dDpcbiAyMjE6XHRcdFx0bnVtJiM0MzsmIzQzOztcbiAyMjI6XHRcdH1cbiAyMjM6XHRcbiAyMjQ6XHRvdXQ6XG4gMjI1Olx0XHRyZWFkX3VubG9jayhcdTAwMjZwcm90LVx1MDAzZWguc21jX2hhc2gtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjY2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgU01DIFByb3RvY29sIEhhc2ggVGFibGUgVXNhZ2UqKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYHNtY19wcm90b2AgYW5kIGBzbWNfcHJvdG82YCBhcmUgbGlrZWx5IHNoYXJpbmcgYSBoYXNoIHRhYmxlIHdpdGggYHNtY19pbmV0X3Byb3RgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIGFyY2hpdGVjdHVyYWwgY2hvaWNlLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgY29udGVudGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZS4gTXkgZ3V0IGZlZWxpbmcgaXMgaXQmIzM5O3MgcHJvYmFibHkgYmVzdCB0byB2ZXJpZnkgdGhlIGNvZGUgZGlyZWN0bHkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBgbmV0L3NtYy9hZl9zbWMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29ubmVjdGlvbiBhbmQgc29ja2V0IG1hbmFnZW1lbnQgZm9yIFNNQywgYW5kIFNNQ3Y2IGFyZSBzdHJ1Y3R1cmVkIGFuZCB2ZXJpZnkgaWYgbXkgaW50dWl0aW9uIGlzIHJpZ2h0LiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCB2aWV3IG9uIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBtYWtlcyBsb2dpY2FsIHNlbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzODpcdHN0cnVjdCBwcm90byBzbWNfcHJvdG8gPSB7XG4gMjM5Olx0XHQubmFtZVx0XHQ9IFwmIzM0O1NNQ1wmIzM0OyxcbiAyNDA6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIDI0MTpcdFx0LmtlZXBhbGl2ZVx0PSBzbWNfc2V0X2tlZXBhbGl2ZSxcbiAyNDI6XHRcdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG4gMjQzOlx0XHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbiAyNDQ6XHRcdC5yZWxlYXNlX2NiXHQ9IHNtY19yZWxlYXNlX2NiLFxuIDI0NTpcdFx0Lm9ial9zaXplXHQ9IHNpemVvZihzdHJ1Y3Qgc21jX3NvY2spLFxuIDI0NjpcdFx0Lmguc21jX2hhc2hcdD0gXHUwMDI2c21jX3Y0X2hhc2hpbmZvLFxuIDI0NzpcdFx0LnNsYWJfZmxhZ3NcdD0gU0xBQl9UWVBFU0FGRV9CWV9SQ1UsXG4gMjQ4Olx0fTtcbiAyNDk6XHRFWFBPUlRfU1lNQk9MX0dQTChzbWNfcHJvdG8pO1xuIDI1MDpcdFxuIDI1MTpcdHN0cnVjdCBwcm90byBzbWNfcHJvdG82ID0ge1xuIDI1MjpcdFx0Lm5hbWVcdFx0PSBcJiMzNDtTTUM2XCYjMzQ7LFxuIDI1MzpcdFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gMjU0Olx0XHQua2VlcGFsaXZlXHQ9IHNtY19zZXRfa2VlcGFsaXZlLFxuIDI1NTpcdFx0Lmhhc2hcdFx0PSBzbWNfaGFzaF9zayxcbiAyNTY6XHRcdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxuIDI1NzpcdFx0LnJlbGVhc2VfY2JcdD0gc21jX3JlbGVhc2VfY2IsXG4gMjU4Olx0XHQub2JqX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBzbWNfc29jayksXG4gMjU5Olx0XHQuaC5zbWNfaGFzaFx0PSBcdTAwMjZzbWNfdjZfaGFzaGluZm8sXG4gMjYwOlx0XHQuc2xhYl9mbGFnc1x0PSBTTEFCX1RZUEVTQUZFX0JZX1JDVSxcbiAyNjE6XHR9O1xuIDI2MjpcdEVYUE9SVF9TWU1CT0xfR1BMKHNtY19wcm90bzYpO1xuIDI2MzpcdFxuIDI2NDpcdHN0YXRpYyB2b2lkIHNtY19mYmFja19yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbiAyNjU6XHR7XG4gMjY2Olx0XHRzdHJ1Y3Qgc29jayAqY2xjc2sgPSBzbWMtXHUwMDNlY2xjc29jay1cdTAwM2VzaztcbiAyNjc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0NzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29uY3VycmVuY3kgQnVnIGluIFNNQyBEaWFnbm9zdGljIER1bXBzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGBzbWNfcHJvdG9gIGNvZGUgdXRpbGl6ZXMgYHNtY192NF9oYXNoaW5mb2AsIHdoaWxlIGBzbWNfcHJvdG82YCB1c2VzIGBzbWNfdjZfaGFzaGluZm9gLiBTaW1pbGFybHksIGBzbWNfaW5ldF9wcm90YCB1c2VzIGBzbWNfdjRfaGFzaGluZm9gIGFuZCBgc21jX2luZXQ2X3Byb3RgIHVzZXMgYHNtY192Nl9oYXNoaW5mb2AuIEFuZCwgYHNtY19kaWFnX2R1bXBfcHJvdG9gIGNvdmVycyBhbGwgb2YgdGhlc2UuIFRoZSBjcml0aWNhbCBpc3N1ZSBpcyBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgZGlhZ25vc3RpYyBkdW1wIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgYHNtY19kaWFnX2R1bXBgIGlzIGRlcmVmZXJlbmNpbmcgYHNtYy0mZ3Q7Y2xjc29ja2Agd2l0aG91dCB0aGUgbmVjZXNzYXJ5IGBjbGNzb2NrX3JlbGVhc2VfbG9ja2AsIHJpZ2h0PyBUaGlzIGlzIGhhcHBlbmluZyB3aGlsZSBgc2tfY29tbW9uX3JlbGVhc2VgIGlzIGdvaW5nIHRocm91Z2ggaXRzIHN0ZXBzLCBjYWxsaW5nIHRoZSBgLmRlc3Ryb3lgIG1ldGhvZCAqYmVmb3JlKiBgLnVuaGFzaGAuCgpTbywgd2UmIzM5O3ZlIGdvdCBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgc29ja2V0IGlzIHN0aWxsIGluIHRoZSBoYXNoIHRhYmxlIHdoZW4gYC5kZXN0cm95YCBnZXRzIGNhbGxlZC4gVGhlIGAuZGVzdHJveWAgZnVuY3Rpb24gaW4gdGhpcyBjb250ZXh0IGlzIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLCB3aGljaCBpdHNlbGYgY2FsbHMgYHNtY19jbGNzb2NrX3JlbGVhc2Uoc21jX3NrKHNrKSlgLiBUaGlzIGBzbWNfY2xjc29ja19yZWxlYXNlYCBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgcHJvYmxlbSBpcyBtb3N0IGxpa2VseSBjb21pbmcgZnJvbSwgYXMgaXQgZWl0aGVyIHNldHMgYHNtYy0mZ3Q7Y2xjc29ja2AgdG8gTlVMTCBvciBmcmVlcyBpdCBjb21wbGV0ZWx5LiBUaGUgcmFjZSBpcyB0aGF0IGlmIGBzbWNfZGlhZ19kdW1wYCBydW5zIGNvbmN1cnJlbnRseSwgaXQgY291bGQgcG90ZW50aWFsbHkgc2VlIGBzbWMtJmd0O2NsY3NvY2tgIGJlaW5nIHJlbGVhc2VkIHJpZ2h0IG91dCBmcm9tIHVuZGVyIGl0LgoKVGhlIGltbWVkaWF0ZSBmaXggaXMgY2xlYXI6IHVuaGFzaCB0aGUgc29ja2V0ICpiZWZvcmUqIGRlc3Ryb3lpbmcgaXQgaW4gYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBzb2NrZXQgdGVhcmRvd24sIHNvIGl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBgU01DYCBhbmQgYFNNQ19ESUFHYC4gTXkgZm9jdXMgbm93IHdpbGwgYmUgb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgbmFtZWx5IGBzbWNfcmVsZWFzZWAsIGBzbWNfY2xjc29ja19yZWxlYXNlYCwgYHNtY19kaWFnX2R1bXBgLCBhbmQgYHNtY19kaWFnX2R1bXBfcHJvdG9gLgoKV2FpdC4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSGFuZyBvbiwgYHNtY19kaWFnX2R1bXBgIGFuZCBgc21jX2RpYWdfaGFuZGxlcl9kdW1wYCBhcmUgYm90aCBzdGF0aWMsIHJpZ2h0PyBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCBzaG91bGQgSSBzdGlsbCBmb2N1cyBvbiB0aGVtPyBUaGUgbW9yZSBsaWtlbHkgY2FuZGlkYXRlIHNlZW1zIHRvIGJlIGBzbWNfcmVsZWFzZWAgYW5kIGBzbWNfY2xjc29ja19yZWxlYXNlYC4gWWVwLCBgc21jX3JlbGVhc2VgIGFuZCBgc21jX2NsY3NvY2tfcmVsZWFzZWAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHdhdGNoLiBIYW5nIG9uLCB3YWl0IGEgc2Vjb25kLiBgc21jX2NsY3NvY2tfcmVsZWFzZWAgaXMgbm90IHN0YXRpYyEgUGVyZmVjdCEgTm93LCB0aW1lIHRvIGp1c3QgY2hlY2sgaWYgYHNtY19jbGNzb2NrX3JlbGVhc2VgIGlzIGV4cG9ydGVkIG9yIGp1c3QgZ2xvYmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHNtY19jbGNzb2NrX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jbG9zZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2Nsb3NlLmMtMjMtLyogcmVsZWFzZSB0aGUgY2xjc29jayB0aGF0IGlzIGFzc2lnbmVkIHRvIHRoZSBzbWNfc29jayAqL1xubmV0L3NtYy9zbWNfY2xvc2UuYzoyNDp2b2lkIHNtY19jbGNzb2NrX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG5uZXQvc21jL3NtY19jbG9zZS5jLTI1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2NzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNNQyBEaWFnbm9zdGljIENvbnRleHQqKgoKT2theSwgc28gdGhpcyBpcyBhIGdsb2JhbCBpc3N1ZSwgZ290IGl0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGBzbWNfZGlhZ19kdW1wYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgc3RhdGljLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG5hcnJvd2luZyBkb3duIHRoZSBzY29wZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgdGhlIG9yaWdpbiBhbmQgdXNlLgoKTmV4dCBzdGVwOiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55IGV4cG9ydGVkIGZ1bmN0aW9ucyB3aXRoaW4gYHNtY19kaWFnLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhpcyBmaWxlIG9mZmVycyB0byB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIEtub3dpbmcgd2hhdCYjMzk7cyBhdmFpbGFibGUgZm9yIG90aGVyIGNvbXBvbmVudHMgdG8gY2FsbCBpbnRvIGhlcmUgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBpbXBhY3Qgb2YgYHNtY19kaWFnX2R1bXBgLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFuIGludGVyZmFjZSBJIGNhbiBsZXZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5MjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipBbmFseXppbmcgU01DIFNvY2tldCBJbml0aWFsaXphdGlvbiBhbmQgUmVsZWFzZSBGdW5jdGlvbnMqKgoKSG1tLCBubywgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHNtY19pbmV0X2luaXRfc29ja2AuIE5vdywgKnRoYXQqIG9uZSBpcyBzdGF0aWMsIGlzbiYjMzk7dCBpdD8gTGV0JiMzOTtzIGtlZXAgdGhhdCBpbiBtaW5kLiBPa2F5LCB3aGF0IGFib3V0IGBzbWNfaW5ldF9pbml0YD8gQWgsIHllcywgYF9faW5pdGAuIFRoYXQmIzM5O3MgYSBkaWZmZXJlbnQgYmVhc3QgZW50aXJlbHkuIFdlJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGhvdyB0aGF0IGltcGFjdHMgbGlmZWN5Y2xlLiBOb3cgdGhlIGJpZyBwaWN0dXJlLi4uIGBzbWNfcmVsZWFzZWAuIFRoYXQmIzM5O3MgYSBnbG9iYWwgZnVuY3Rpb24uIE5vdywgYSBsaWdodGJ1bGIuLi5pcyBgc21jX3JlbGVhc2VgIGV4cG9ydGVkLCBvciBpcyBpdCBoaWRkZW4/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZGlnIGludG8uIFdlIG5lZWQgdG8gYmUgYWJsZSB0byB1c2UgaXQsIHRvIHdvcmsgd2l0aCBpdC4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qc21jX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyMjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgU2NvcGUgYW5kIEZ1bmN0aW9uYWxpdHkqKgoKQWxyaWdodCwgc28gdGhlIHZhcmlhYmxlIGluIHF1ZXN0aW9uLCB3aGF0ZXZlciBpdCBpcywgaXNuJiMzOTt0ICpleHBsaWNpdGx5KiBleHBvcnRlZCwgbWVhbmluZyBpdCBsaWtlbHkgaXNuJiMzOTt0IHBhcnQgb2YgYSBkaXJlY3QgQVBJIGV4cG9zZWQgdG8gb3RoZXIgbW9kdWxlcyBvciBjb21wb25lbnRzIGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZS4gSG93ZXZlciwgdGhlIHVzZSBvZiB0aGUgdGVybSAmIzM0O2dsb2JhbCYjMzQ7IHN1Z2dlc3RzIGl0JiMzOTtzIGFjY2Vzc2libGUgYW5kIHBvdGVudGlhbGx5IG1vZGlmaWFibGUgZnJvbSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhpcyBpbXBsaWVzIGEgc2NvcGUgY29uY2VybiwgbGlrZWx5IG5lZWRpbmcgc3BlY2lhbCBjb25zaWRlcmF0aW9uIHRvIHByb3RlY3QgYWdhaW5zdCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvciBjb25mbGljdHMuCgpNeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgYHNtY19jbG9zZV9hY3RpdmVgLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBjb250ZXh0dWFsIGluZm9ybWF0aW9uLiBUaGlzIGxpa2VseSBhIGZ1bmN0aW9uIG9yIGEgbWFjcm8gd2hpY2ggY291bGQgYmUgdXNlZCB0byBkaXNjb3ZlciBob3cgdG8gbWFuYWdlIHRoaXMgc3BlY2lmaWMgY29tcG9uZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSAmIzM0O2dsb2JhbCYjMzQ7IHZhcmlhYmxlLiBJcyBpdCB1c2VkIHRvICpzZXQqLCAqcmVhZCosIG9yICptYW5hZ2UqIHRoaXMgJiMzNDtnbG9iYWwmIzM0OyB2YWx1ZT8gS25vd2luZyB0aGUgaW50ZXJhY3Rpb24gd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IGl0IGlzIHNldCBhbmQgY2xlYXJlZCwgYXMgd2VsbCBhcyBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucyBvbiBpdHMgdXNlLCB0aGF0IG1heSBjYXVzZSBhIG1hbGZ1bmN0aW9uLiBUaGF0IHdpbGwgc2hlZCBsaWdodCBvbiBob3cgdGhlIHZhcmlhYmxlJiMzOTtzIHNjb3BlIGFuZCBhY2Nlc3MgYXJlICppbnRlbmRlZCogdG8gd29yaywgYW5kIGlmIGl0JiMzOTtzIHBsYXlpbmcgbmljZWx5IHdpdGggdGhlIHJlc3Qgb2YgdGhlIGFwcGxpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfY2xvc2VfYWN0aXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY2xvc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jbG9zZS5jPTExND1zdGF0aWMgdm9pZCBzbWNfY2xvc2VfY2FuY2VsX3dvcmsoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYy0xMjctICovXG5uZXQvc21jL3NtY19jbG9zZS5jOjEyODp2b2lkIHNtY19jbG9zZV9hY3RpdmVfYWJvcnQoc3RydWN0IHNtY19zb2NrICpzbWMpXG5uZXQvc21jL3NtY19jbG9zZS5jLTEyOS17XG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYz0xODc9c3RhdGljIGlubGluZSBib29sIHNtY19jbG9zZV9zZW50X2FueV9jbG9zZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYy0xOTItXG5uZXQvc21jL3NtY19jbG9zZS5jOjE5MzppbnQgc21jX2Nsb3NlX2FjdGl2ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTk0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3OTEKCQkJCQkJCW91dHB1dDogNjgKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNNQyBEaWFnbm9zdGljIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHNtY19kaWFnYCBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgc21jX2Nsb3NlX2FjdGl2ZWAgaXMgYSBnbG9iYWwgdmFyaWFibGUuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgYXJlYSBmb3IgY29udGVudGlvbiBhbmQgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCYjMzk7cyB1c2VkIGFjcm9zcyB0aGUgc3lzdGVtLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSB3aGF0IHRoZSBkaWFnbm9zdGljIGhhbmRsZXJzIGFjdHVhbGx5ICpkbyouIEkmIzM5O2xsIGNoZWNrIGBzbWNfZGlhZ19oYW5kbGVyX2R1bXBgIGFuZCBgc21jX2RpYWdfZHVtcGAuIEkgYmVsaWV2ZSB0aGV5JiMzOTtyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBzaG91bGQgbGltaXQgdGhlaXIgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBjb25mbGljdHMsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgaGFuZGxlciBmdW5jdGlvbnMuCgpGaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB0byBidWlsZCBhIGdvb2QgbWVudGFsIG1vZGVsIG9mIHRoZSBtb2R1bGUsIEkmIzM5O2xsIHNjYW4gdGhyb3VnaCBgc21jX2RpYWcuY2AgZm9yIGFueSAqb3RoZXIqIGdsb2JhbCBmdW5jdGlvbnMuIEl0JiMzOTtzIGdvb2QgcHJhY3RpY2UgdG8gaWRlbnRpZnkgYWxsIGVudHJ5IHBvaW50cyBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBpbiBhIGNvZGUgYmxvY2sgZWFybHkgb24gdG8gYXZvaWQgdW5wbGVhc2FudCBzdXJwcmlzZXMgZG93biB0aGUgbGluZS4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIHJlYXNvbiBhYm91dCB0aGlzIGNvZGUgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2RpYWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTYxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFNNQyBTb2NrZXQgUmVsZWFzZSBhbmQgRGlhZ25vc3RpYyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHJlbGVhc2luZyBhbmQgbWFuYWdpbmcgU01DIHNvY2tldHMgYW5kIGFzc29jaWF0ZWQgZGlhZ25vc3RpY3MuIEluaXRpYWxseSwgSSB0aG91Z2h0IGZvY3VzaW5nIG9uIGBzbWNfcmVsZWFzZWAgYW5kIGBzbWNfY2xjc29ja19yZWxlYXNlYCB3b3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCB0aGF0IHNlZW1zIGNvcnJlY3QsIGdpdmVuIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRjaC4gVGhlIHBhdGNoIGlzIGFib3V0IGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLCBidXQgaG93IGRvIHdlIHRyaWdnZXIgdGhhdD8KCkFoLCByaWdodCwgY3JlYXRlIGFuIGBBRl9JTkVUYCBzb2NrZXQgdXNpbmcgYElQUFJPVE9fU01DYCBhbmQgdGhlbiBzaW1wbHkgY2xvc2UgaXQuIFRoYXQgc2hvdWxkIHRyaWdnZXIgaXQuIFRoZSBzb2NrZXQgY3JlYXRpb24gaXRzZWxmIHVzZXMgYHNtY19pbmV0X2luaXRfc29ja2AsIHdoaWNoIGlzIHN0YXRpYywgc28gbm90IGFuIGludGVyZXN0aW5nIGVudHJ5IHBvaW50LiBCdXQgbG9va2luZyBmdXJ0aGVyLCBgc21jX2luZXRfc3RyZWFtX29wc2AgaGFzIGAucmVsZWFzZSA9IHNtY19yZWxlYXNlYCwgd2hpY2ggbWVhbnMgd2hlbiB0aGUgc29ja2V0IGlzIGNsb3NlZCwgYHNtY19yZWxlYXNlYCBnZXRzIGNhbGxlZCwgYW5kIHRoZW4gYHNrX2NvbW1vbl9yZWxlYXNlYCB3aGVuIHRoZSBzb2NrZXQgaXRzZWxmIGlzIGZyZWVkLiBgc21jX3JlbGVhc2VgIGRlZmluaXRlbHkgbG9va3MgbGlrZSBhIHNvbGlkIGZvY3VzIHN5bWJvbC4KCkFsc28sIGBzbWNfY2xjc29ja19yZWxlYXNlYCBpcyBjYWxsZWQgZnJvbSBgc21jX2luZXRfZGVzdHJveV9zb2NrYCwgd2hpY2ggaXMgYWxzbyBpbXBvcnRhbnQuIFNvIGBzbWNfY2xjc29ja19yZWxlYXNlYCBpcyBhIGtleSBmdW5jdGlvbiB0byBleGFtaW5lIGFzIHdlbGwuCgpJIGxvb2tlZCBhdCBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQgd2l0aCBTTUMuIGBzbWNfZGlhZ19kdW1wYCBpcyBpbnZva2VkIGJ5IG5ldGxpbmsgYFNPQ0tfRElBR19CWV9GQU1JTFlgIGZvciBgQUZfU01DYC4gQWgsIGJ1dCBgc21jX2RpYWdfaGFuZGxlcl9kdW1wYCBpcyByZWdpc3RlcmVkIGZvciBgQUZfU01DYCwgc28gYHNvY2tfZGlhZ19yY3ZfbXNnYCBjYWxscyBgc21jX2RpYWdfaGFuZGxlcl9kdW1wYC4gSG93ZXZlciwgdGhhdCBvbmUgaXMgc3RhdGljLCBzbyBpdCYjMzk7cyBub3QgdXNlZnVsIGFzIGEgZm9jdXMgc3ltYm9sLgoKTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZSBgc21jX3JlbGVhc2VgIGFuZCBgc21jX2NsY3NvY2tfcmVsZWFzZWAgZnVuY3Rpb25zLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L3NtYy9LY29uZmlnYCBmaWxlIHRvIHNlZSBob3cgYFNNQ2AgYW5kIGBTTUNfRElBR2AgZGVwZW5kIG9uIGVhY2ggb3RoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNNQ1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBTTUMtUiBwcm92aWRlcyBhIFwmIzM0O3NvY2tldHMgb3ZlciBSRE1BXCYjMzQ7IHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcbiAgIDc6XHRcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXG4gICA4Olx0XHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXG4gICA5Olx0XHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcbiAgMTA6XHRcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBTTUNfRElBR1xuICAxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gU01DXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFN1cHBvcnQgZm9yIFNNQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0b29scyBzdWNoIGFzXG4gIDE5Olx0XHQgIHNtY3NzLlxuICAyMDpcdFxuICAyMTpcdFx0ICBpZiB1bnN1cmUsIHNheSBZLlxuICAyMjpcdFxuICAyMzpcdGNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbiAgMjQ6XHRcdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuICAyNTpcdFx0ZGVwZW5kcyBvbiBTTUMgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9TWVNDQUxMXG4gIDI2Olx0XHRkZWZhdWx0IHlcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgU01DX0hTX0NUUkxfQlBGIGVuYWJsZXMgc3VwcG9ydCB0byByZWdpc3RlciBnZW5lcmljIGVCUEYgaG9vayBmb3IgU01DXG4gIDI5Olx0XHQgIGhhbmRzaGFrZSBmbG93LCB3aGljaCBvZmZlciBtdWNoIGdyZWF0ZXIgZmxleGliaWxpdHkgaW4gbW9kaWZ5aW5nIHRoZSBiZWhhdmlvclxuICAzMDpcdFx0ICBvZiB0aGUgU01DIHByb3RvY29sIHN0YWNrIGNvbXBhcmVkIHRvIGEgY29tcGxldGUga2VybmVsLWJhc2VkIGFwcHJvYWNoLiBTZWxlY3RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0NDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgU01DIERlcGVuZGVuY3kgQ29uZnVzaW9uKioKCk9rYXksIHNvIEkgd2FzIGxvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY3kgdHJlZSBmb3IgYFNNQ2AuIEluaXRpYWxseSwgSSB0aG91Z2h0IGl0IHdhcyByZWxpYW50IG9uIGBJTkVUYCwgYElORklOSUJBTkRgLCAqYW5kKiBgRElCU2AuIEJ1dCwgd2FpdCwgYERJQlNgPyBUaGF0IGRvZXNuJiMzOTt0IHNvdW5kIHJpZ2h0IGF0IGFsbC4gSXQmIzM5O3Mgbm90IGEgc3RhbmRhcmQgcmVxdWlyZW1lbnQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIG91dHB1dC4gTm9wZSwgaXQgc2F5cyBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5k4oCmICBgRElCU2A/IFRoaXMgaXMgdGhyb3dpbmcgbWUgb2ZmISBPa2F5LCBJIG11c3QgaGF2ZSBtaXNyZWFkIHNvbWV0aGluZy4gTGV0IG1lIGdvIGJhY2sgYW5kIHJlLXJlYWQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gYWdhaW4uIEFoLCBmaW5hbGx5ISBJdCYjMzk7cyBgSU5FVGAgYW5kIGBJTkZJTklCQU5EYC4gV2FpdOKApiBXaHkgYW0gSSBzZWVpbmcgYERJQlNgPyBUaW1lIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBgbmV0L3NtYy9LY29uZmlnYCBmaWxlIGFnYWluIHRvIHNlZSBpZiBJIGFtIG1pc3Npbmcgc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZz0yPWNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG5uZXQvc21jL0tjb25maWctNS1cdGhlbHBcbi0tXG5uZXQvc21jL0tjb25maWc9MTQ9Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xubmV0L3NtYy9LY29uZmlnOjE2Olx0ZGVwZW5kcyBvbiBTTUNcbm5ldC9zbWMvS2NvbmZpZy0xNy1cdGhlbHBcbi0tXG5uZXQvc21jL0tjb25maWc9MjM9Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6MjU6XHRkZXBlbmRzIG9uIFNNQyBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTExcbm5ldC9zbWMvS2NvbmZpZy0yNi1cdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTAxMwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIE15c3RlcmlvdXMgRElCUyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uICYjMzQ7RElCUyYjMzQ7PyBJIGhhdmVuJiMzOTt0IHNlZW4gdGhhdCB0ZXJtIHRocm93biBhcm91bmQgaW4gYSB3aGlsZS4gV2hhdCBleGFjdGx5IGFyZSB3ZSB0YWxraW5nIGFib3V0IGhlcmU/IEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJdCYjMzk7cyB0aW1lIHRvIGZpcmUgdXAgdGhlIG1lbnRhbCBtYWNoaW5lcnkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBkaXJlY3RseSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGEgbWFjcm8sIG9yIHBvdGVudGlhbGx5IHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCBLY29uZmlnIGhhcyB0byBzYXkgYWJvdXQgYERJQlNgLiBUaW1lIHRvIGdvIGh1bnRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBESUJTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xuZHJpdmVycy9kaWJzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTMyMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSBmb3IgU01DKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIGBESUJTYCBpcyBhIGN1c3RvbSBjb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIHRoaXMga2VybmVsIHRyZWUuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBOb3csIGBTTUNgIGFwcGVhcnMgdG8gYmUgZGVwZW5kZW50IG9uIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgLiBBbHJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBhbGwgZW5hYmxlZCBmb3IgZnV6emluZyB0aGlzLiBUaGVyZWZvcmUsIEkmIzM5O2xsIGFkZCBgU01DYCwgYFNNQ19ESUFHYCwgYElORVRgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LgoKSG9sZCBvbiwgdGhvdWdoLiBgSU5FVGAgaXMgZ2VuZXJhbGx5IGEgZ2l2ZW4sIGFuZCBgSU5GSU5JQkFORGAgaXMgcHJldHR5IHN0YW5kYXJkLiBObyBuZWVkIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSB0aG9zZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgU01DYCBhbmQgYFNNQ19ESUFHYCBhcmUgZW5hYmxlZCwgdGhvdWdoLgoKUmlnaHQsIHRoZSBwYXRjaCBpdHNlbGYgdGFyZ2V0cyBhIHJhY2UgY29uZGl0aW9uIGluIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLCBhbmQgdGhhdCBoYXBwZW5zIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24uIFNvdW5kcyBsaWtlIGEgdGV4dGJvb2sgcmFjZSBjb25kaXRpb24sIHNvIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nIGF0dGVudGlvbi4KCk9rYXksIGxldCYjMzk7cyBjb25zb2xpZGF0ZSB0aGlzOgoKYFdvcnRoRnV6emluZzogdHJ1ZWAuIEFic29sdXRlbHkuCgpgRm9jdXNTeW1ib2xzOiBzbWNfcmVsZWFzZSwgc21jX2NsY3NvY2tfcmVsZWFzZWAuIFRob3NlIHR3byBmdW5jdGlvbnMgc291bmQgbGlrZSBwcmltZSB0YXJnZXRzLCBjb25zaWRlcmluZyB0aGUgcmFjZSBjb25kaXRpb24uCgpgRW5hYmxlQ29uZmlnczogU01DLCBTTUNfRElBRywgSU5GSU5JQkFORCwgRElCU2AuIE1ha2luZyBzdXJlIHRob3NlIGRlcGVuZGVuY2llcyBhcmUgbWV0LgoKTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gYHNtY19pbmV0X2luaXRgIGlzIG1hcmtlZCBhcyBgX19pbml0YCwgc28gcHJvYmFibHkgbm90IGFzIGludGVyZXN0aW5nIGZvciB0aGlzLiBBbmQgYHNtY19pbmV0X2V4aXRgIGlzIHNpbWlsYXIuIEhvdyBhYm91dCBgc21jX2hhc2hfc2tgIGFuZCBgc21jX3VuaGFzaF9za2A/IEkmIzM5O2xsIGtlZXAgdGhvc2UgaW4gbWluZCwgYnV0IHRoZXkmIzM5O3JlIG5vdCB0aGUgKnByaW1hcnkqIGZvY3VzIHJpZ2h0IG5vdy4gR29vZCBlbm91Z2ggZm9yIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3VuaGFzaF9zayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYz0xOTk9aW50IHNtY19oYXNoX3NrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTIxMy1cbm5ldC9zbWMvYWZfc21jLmM6MjE0OnZvaWQgc21jX3VuaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvc21jL2FmX3NtYy5jLTIxNS17XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yMzg9c3RydWN0IHByb3RvIHNtY19wcm90byA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI0Mi1cdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG5uZXQvc21jL2FmX3NtYy5jOjI0MzpcdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxubmV0L3NtYy9hZl9zbWMuYy0yNDQtXHQucmVsZWFzZV9jYlx0PSBzbWNfcmVsZWFzZV9jYixcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTI1MT1zdHJ1Y3QgcHJvdG8gc21jX3Byb3RvNiA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI1NS1cdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG5uZXQvc21jL2FmX3NtYy5jOjI1NjpcdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxubmV0L3NtYy9hZl9zbWMuYy0yNTctXHQucmVsZWFzZV9jYlx0PSBzbWNfcmVsZWFzZV9jYixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzNjAKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgTW9kdWxlJiMzOTtzIFN5bWJvbCBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdCBzbyBmYXIuIEkmIzM5O20gZm9jdXNpbmcgb24gY2xlYW5pbmcgdXAgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIFNNQyBtb2R1bGUuIEl0IGxvb2tzIGxpa2UgYHNtY191bmhhc2hfc2tgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlIGFuZCBJIHNlZSB0aGF0IGl0JiMzOTtzIGNhbGxlZCB3aXRoaW4gYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBzay0mZ3Q7c2tfcHJvdC0mZ3Q7dW5oYXNoKHNrKWAuIFRoaXMgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGluY2x1c2lvbiBpbiBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBwb2ludCBvZiBpbnRlcmFjdGlvbi4KCkkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgc21jX2luZXRfZGVzdHJveV9zb2NrYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb247IHRoaXMgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgc2NvcGUuIFRoZW4sIEkgY2hlY2tlZCB0aGF0IGJvdGggYHNtY19jbGNzb2NrX3JlbGVhc2VgIGFuZCBgc21jX3JlbGVhc2VgIGFyZSBnbG9iYWxseSBhY2Nlc3NpYmxlLiBTbyBteSBmaW5hbCBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIGxvb2tpbmcgbGlrZToKCi0gICBgc21jX3JlbGVhc2VgCi0gICBgc21jX2NsY3NvY2tfcmVsZWFzZWAKLSAgIGBzbWNfdW5oYXNoX3NrYAoKTmV4dCwgSSYjMzk7dmUgZ290IHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBjb3JyZWN0LiBNeSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBjdXJyZW50bHk6CgotICAgYFNNQ2AKLSAgIGBTTUNfRElBR2AKLSAgIGBJTkZJTklCQU5EYAotICAgYERJQlNgCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgbmVlZCBmb3IgYERJQlNgLiBUaGUgZGVwZW5kZW5jeSBpcyBzaG93biBhczogYGRlcGVuZHMgb24gSU5FVCAmYW1wOyZhbXA7IElORklOSUJBTkQgJmFtcDsmYW1wOyBESUJTYC4gWWVzLCBnaXZlbiB0aGUgY29udGV4dCwgYERJQlNgIGlzIGFic29sdXRlbHkgcmVxdWlyZWQuCgpBbHJpZ2h0LCBJJiMzOTttIHNhdGlzZmllZCB3aXRoIHRoaXMuIFRpbWUgdG8gZXhlY3V0ZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O1NNQ19ESUFHJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3NtY19jbGNzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c21jX3VuaGFzaF9zayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBTTUMgc29ja2V0IGRlc3RydWN0aW9uIHdoZXJlIHNtY19kaWFnIGR1bXBzIGNvdWxkIGRlcmVmZXJlbmNlIGEgcmVsZWFzZWQgY2xjc29jay4gSXQgbW9kaWZpZXMgdGhlIHNvY2tldCB0ZWFyZG93biBmbG93IGJ5IGFkZGluZyBhIC5kZXN0cm95IGNhbGxiYWNrIHRvIHNtY19pbmV0X3Byb3QgYW5kIHNtY19pbmV0Nl9wcm90LCB3aGljaCB1bmhhc2hlcyB0aGUgc29ja2V0IGJlZm9yZSByZWxlYXNpbmcgdGhlIGNsY3NvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O1NNQ19ESUFHJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3NtY19jbGNzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c21jX3VuaGFzaF9zayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBTTUMgc29ja2V0IGRlc3RydWN0aW9uIHdoZXJlIHNtY19kaWFnIGR1bXBzIGNvdWxkIGRlcmVmZXJlbmNlIGEgcmVsZWFzZWQgY2xjc29jay4gSXQgbW9kaWZpZXMgdGhlIHNvY2tldCB0ZWFyZG93biBmbG93IGJ5IGFkZGluZyBhIC5kZXN0cm95IGNhbGxiYWNrIHRvIHNtY19pbmV0X3Byb3QgYW5kIHNtY19pbmV0Nl9wcm90LCB3aGljaCB1bmhhc2hlcyB0aGUgc29ja2V0IGJlZm9yZSByZWxlYXNpbmcgdGhlIGNsY3NvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24gd2hlcmUgYHNtY19kaWFnYCBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBgc21jLVx1MDAzZWNsY3NvY2tgIHdoaWxlIGl0IGlzIGJlaW5nIHJlbGVhc2VkLiBUaGlzIGlzIGEgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Zywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjYyYTVkZDBmOGI0MWE4OGY5MjY3MWZkNTUyNWNlN2ZhYTM4YTExZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDA4OjQyOjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfaW5ldC5jIGIvbmV0L3NtYy9zbWNfaW5ldC5jCmluZGV4IGE5NDA4NGI0YTQ5OGUuLjUyMGI2NjZmZGQ4ZmEgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2luZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19pbmV0LmMKQEAgLTE1LDEzICYjNDM7MTUsMTYgQEAKIAogI2luY2x1ZGUgJiMzNDtzbWNfaW5ldC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c21jLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21jX2Nsb3NlLmgmIzM0OwogCiBzdGF0aWMgaW50IHNtY19pbmV0X2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spOwomIzQzO3N0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spOwogCiBzdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0X3Byb3QgPSB7CiAJLm5hbWUJCT0gJiMzNDtJTkVUX1NNQyYjMzQ7LAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaW5pdAkJPSBzbWNfaW5ldF9pbml0X3NvY2ssCiYjNDM7CS5kZXN0cm95CT0gc21jX2luZXRfZGVzdHJveV9zb2NrLAogCS5oYXNoCQk9IHNtY19oYXNoX3NrLAogCS51bmhhc2gJCT0gc21jX3VuaGFzaF9zaywKIAkucmVsZWFzZV9jYgk9IHNtY19yZWxlYXNlX2NiLApAQCAtNjgsNiAmIzQzOzcxLDcgQEAgc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldDZfcHJvdCA9IHsKIAkubmFtZQkJPSAmIzM0O0lORVQ2X1NNQyYjMzQ7LAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaW5pdAkJPSBzbWNfaW5ldF9pbml0X3NvY2ssCiYjNDM7CS5kZXN0cm95CT0gc21jX2luZXRfZGVzdHJveV9zb2NrLAogCS5oYXNoCQk9IHNtY19oYXNoX3NrLAogCS51bmhhc2gJCT0gc21jX3VuaGFzaF9zaywKIAkucmVsZWFzZV9jYgk9IHNtY19yZWxlYXNlX2NiLApAQCAtMTE2LDYgJiM0MzsxMjAsMTggQEAgc3RhdGljIGludCBzbWNfaW5ldF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKQogCXJldHVybiBzbWNfY3JlYXRlX2NsY3NrKG5ldCwgc2ssIHNrLSZndDtza19mYW1pbHkpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CS8qIFRoZSBzb2NrIGlzIGhhc2hlZCBhbmQgc21jX2RpYWcgZHVtcHMgZGVyZWZlcmVuY2Ugc21jLSZndDtjbGNzb2NrCiYjNDM7CSAqIHdpdGhvdXQgY2xjc29ja19yZWxlYXNlX2xvY2ssIHdoaWxlIHNrX2NvbW1vbl9yZWxlYXNlKCkgY2FsbHMKJiM0MzsJICogLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2guIFVuaGFzaCBmaXJzdCwgYXMgX19zbWNfcmVsZWFzZSgpIGRvZXMsCiYjNDM7CSAqIHNvIG5vIGR1bXAgY2FuIG9ic2VydmUgdGhlIGNsY3NvY2sgYmVpbmcgcmVsZWFzZWQ7IHRoZSBzZWNvbmQKJiM0MzsJICogdW5oYXNoIGlzIGEgbm8tb3AuCiYjNDM7CSAqLwomIzQzOwlzay0mZ3Q7c2tfcHJvdC0mZ3Q7dW5oYXNoKHNrKTsKJiM0MzsJc21jX2NsY3NvY2tfcmVsZWFzZShzbWNfc2soc2spKTsKJiM0Mzt9CiYjNDM7CiBpbnQgX19pbml0IHNtY19pbmV0X2luaXQodm9pZCkKIHsKIAlpbnQgcmM7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM3CgkJCQkJCQlvdXRwdXQ6IDEzMQoJCQkJCQkJdGhvdWdodHM6IDMwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTTUMgU29ja2V0IERlc3RydWN0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBjbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlIGluIHRoZSBTTUMgbmV0d29ya2luZyBjb2RlLiBJdCYjMzk7cyBhZGRpbmcgYSBgZGVzdHJveWAgY2FsbGJhY2sgdG8gYHNtY19pbmV0X3Byb3RgIGFuZCBgc21jX2luZXQ2X3Byb3RgLCB3aGljaCBpcyBnb2luZyB0byBjYWxsIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLiBUaGF0IGZ1bmN0aW9uIHRoZW4gZG9lcyB0aGUgY3J1Y2lhbCBzdGVwIG9mIHVuaGFzaGluZyB0aGUgc29ja2V0IGJlZm9yZSBjYWxsaW5nIGBzbWNfY2xjc29ja19yZWxlYXNlYC4gVGhlIGNvbW1lbnRzIGV4cGxpY2l0bHkgcG9pbnQgb3V0IHRoYXQgdGhpcyBvcmRlciBjaGFuZ2UgaXMgdG8gcHJldmVudCBhIHVzZS1hZnRlci1mcmVlIG9yLCBldmVuIHdvcnNlLCBhIG51bGwtcG9pbnRlciBkZXJlZmVyZW5jZS4gRXNzZW50aWFsbHksIGBzbWNfZGlhZ2Agd2FzIHRyeWluZyB0byBhY2Nlc3MgYHNtYy0mZ3Q7Y2xjc29ja2AgZHVyaW5nIGEgZGVidWcgZHVtcCAqd2hpbGUqIGBjbGNzb2NrYCB3YXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcmVsZWFzZWQuIFRoZSBLQVNBTiBoYXMgYWxyZWFkeSBjYXVnaHQgdGhpcywgd2hpY2ggaXMgZ3JlYXQuCgpUaGUgY29yZSBvZiB0aGUgZml4IGlzIHRvIG1ha2Ugc3VyZSB0aGUgc29ja2V0IGlzIHVuaGFzaGVkICpiZWZvcmUqIGBzbWNfY2xjc29ja19yZWxlYXNlYCBpcyBjYWxsZWQsIGVuc3VyaW5nIHRoYXQgZGVidWcgZHVtcHMgY2FuJiMzOTt0IG9ic2VydmUgdGhlIGBjbGNzb2NrYCBiZWluZyByZWxlYXNlZC4gSXQmIzM5O3MgYSByYWNlIGNvbmRpdGlvbiBmaXgg4oCTIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgeW91JiMzOTtkIGV4cGVjdCB0byBzZWUuIFRoZSBwYXRjaCBpcyBzaW1wbHkgcmUtb3JkZXJpbmcgZXhpc3Rpbmcgb3BlcmF0aW9ucywgbm8gbmV3IGFsbG9jYXRpb25zLCBib3VuZHMgY2hlY2tzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgY29uY3VycmVuY3kgaXNzdWUuCgpJIHdpbGwgZG91YmxlLWNoZWNrLCBidXQgSSBkb24mIzM5O3Qgc2VlIGFueSByaXNrIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIGhlcmUuIFRoaXMgaXMgcHVyZWx5IGFib3V0IHByb3RlY3RpbmcgYWdhaW5zdCBhIHJhY2UgZHVyaW5nIHNvY2tldCB0ZWFyZG93bi4KCkdpdmVuIHRoZSBzdHJhaWdodGZvcndhcmQgbmF0dXJlIG9mIHRoZSBmaXggYW5kIHRoZSBmYWN0IHRoYXQgaXQgcmVzb2x2ZXMgYSBkZXRlY3RlZCBjb25jdXJyZW5jeSBidWcsIEkmIzM5O2xsIHNldCBOZWVkc0tNU0FOIHRvIGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24gd2hlcmUgYHNtY19kaWFnYCBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBgc21jLVx1MDAzZWNsY3NvY2tgIHdoaWxlIGl0IGlzIGJlaW5nIHJlbGVhc2VkLiBUaGlzIGlzIGEgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Zywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIHNvY2tldCBkZXN0cnVjdGlvbiB3aGVyZSBgc21jX2RpYWdgIGR1bXBzIGNvdWxkIGRlcmVmZXJlbmNlIGBzbWMtXHUwMDNlY2xjc29ja2Agd2hpbGUgaXQgaXMgYmVpbmcgcmVsZWFzZWQuIFRoaXMgaXMgYSB1c2UtYWZ0ZXItZnJlZSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnLCB3aGljaCBpcyBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MjoyOS4wMDQwMTY1MDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAxNDUxNDIzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJTTUNfRElBR1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19yZWxlYXNlXCIsXG4gICAgXCJzbWNfY2xjc29ja19yZWxlYXNlXCIsXG4gICAgXCJzbWNfdW5oYXNoX3NrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24gd2hlcmUgYHNtY19kaWFnYCBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBgc21jLVxcdTAwM2VjbGNzb2NrYCB3aGlsZSBpdCBpcyBiZWluZyByZWxlYXNlZC4gVGhpcyBpcyBhIHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgU01DIHNvY2tldCBkZXN0cnVjdGlvbiB3aGVyZSBzbWNfZGlhZyBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBhIHJlbGVhc2VkIGNsY3NvY2suIEl0IG1vZGlmaWVzIHRoZSBzb2NrZXQgdGVhcmRvd24gZmxvdyBieSBhZGRpbmcgYSAuZGVzdHJveSBjYWxsYmFjayB0byBzbWNfaW5ldF9wcm90IGFuZCBzbWNfaW5ldDZfcHJvdCwgd2hpY2ggdW5oYXNoZXMgdGhlIHNvY2tldCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBjbGNzb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQyOjI5LjAwNDAyODIxMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5ODI3NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjYyYTVkZDBmOGI0MWE4OGY5MjY3MWZkNTUyNWNlN2ZhYTM4YTExZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwODo0MjoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19pbmV0LmMgYi9uZXQvc21jL3NtY19pbmV0LmNcXG5pbmRleCBhOTQwODRiNGE0OThlLi41MjBiNjY2ZmRkOGZhIDEwMDY0NFxcbi0tLSBhL25ldC9zbWMvc21jX2luZXQuY1xcbisrKyBiL25ldC9zbWMvc21jX2luZXQuY1xcbkBAIC0xNSwxMyArMTUsMTYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJzbWNfaW5ldC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic21jLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWNfY2xvc2UuaFxcXCJcXG4gXFxuIHN0YXRpYyBpbnQgc21jX2luZXRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzayk7XFxuK3N0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xcbiBcXG4gc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0ge1xcbiBcXHQubmFtZVxcdFxcdD0gXFxcIklORVRfU01DXFxcIixcXG4gXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4gXFx0LmluaXRcXHRcXHQ9IHNtY19pbmV0X2luaXRfc29jayxcXG4rXFx0LmRlc3Ryb3lcXHQ9IHNtY19pbmV0X2Rlc3Ryb3lfc29jayxcXG4gXFx0Lmhhc2hcXHRcXHQ9IHNtY19oYXNoX3NrLFxcbiBcXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbiBcXHQucmVsZWFzZV9jYlxcdD0gc21jX3JlbGVhc2VfY2IsXFxuQEAgLTY4LDYgKzcxLDcgQEAgc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldDZfcHJvdCA9IHtcXG4gXFx0Lm5hbWVcXHRcXHQ9IFxcXCJJTkVUNl9TTUNcXFwiLFxcbiBcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiBcXHQuaW5pdFxcdFxcdD0gc21jX2luZXRfaW5pdF9zb2NrLFxcbitcXHQuZGVzdHJveVxcdD0gc21jX2luZXRfZGVzdHJveV9zb2NrLFxcbiBcXHQuaGFzaFxcdFxcdD0gc21jX2hhc2hfc2ssXFxuIFxcdC51bmhhc2hcXHRcXHQ9IHNtY191bmhhc2hfc2ssXFxuIFxcdC5yZWxlYXNlX2NiXFx0PSBzbWNfcmVsZWFzZV9jYixcXG5AQCAtMTE2LDYgKzEyMCwxOCBAQCBzdGF0aWMgaW50IHNtY19pbmV0X2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHJldHVybiBzbWNfY3JlYXRlX2NsY3NrKG5ldCwgc2ssIHNrLVxcdTAwM2Vza19mYW1pbHkpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBzbWNfaW5ldF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdC8qIFRoZSBzb2NrIGlzIGhhc2hlZCBhbmQgc21jX2RpYWcgZHVtcHMgZGVyZWZlcmVuY2Ugc21jLVxcdTAwM2VjbGNzb2NrXFxuK1xcdCAqIHdpdGhvdXQgY2xjc29ja19yZWxlYXNlX2xvY2ssIHdoaWxlIHNrX2NvbW1vbl9yZWxlYXNlKCkgY2FsbHNcXG4rXFx0ICogLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2guIFVuaGFzaCBmaXJzdCwgYXMgX19zbWNfcmVsZWFzZSgpIGRvZXMsXFxuK1xcdCAqIHNvIG5vIGR1bXAgY2FuIG9ic2VydmUgdGhlIGNsY3NvY2sgYmVpbmcgcmVsZWFzZWQ7IHRoZSBzZWNvbmRcXG4rXFx0ICogdW5oYXNoIGlzIGEgbm8tb3AuXFxuK1xcdCAqL1xcbitcXHRzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNldW5oYXNoKHNrKTtcXG4rXFx0c21jX2NsY3NvY2tfcmVsZWFzZShzbWNfc2soc2spKTtcXG4rfVxcbitcXG4gaW50IF9faW5pdCBzbWNfaW5ldF9pbml0KHZvaWQpXFxuIHtcXG4gXFx0aW50IHJjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MjoyOS40OTQ2MDE3ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzEzOTc3NTYxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJTTUNfRElBR1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19yZWxlYXNlXCIsXG4gICAgXCJzbWNfY2xjc29ja19yZWxlYXNlXCIsXG4gICAgXCJzbWNfdW5oYXNoX3NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgU01DIHNvY2tldCBkZXN0cnVjdGlvbiB3aGVyZSBzbWNfZGlhZyBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBhIHJlbGVhc2VkIGNsY3NvY2suIEl0IG1vZGlmaWVzIHRoZSBzb2NrZXQgdGVhcmRvd24gZmxvdyBieSBhZGRpbmcgYSAuZGVzdHJveSBjYWxsYmFjayB0byBzbWNfaW5ldF9wcm90IGFuZCBzbWNfaW5ldDZfcHJvdCwgd2hpY2ggdW5oYXNoZXMgdGhlIHNvY2tldCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBjbGNzb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI2MmE1ZGQwZjhiNDFhODhmOTI2NzFmZDU1MjVjZTdmYWEzOGExMWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwODo0MjoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2luZXQuYyBiL25ldC9zbWMvc21jX2luZXQuY1xuaW5kZXggYTk0MDg0YjRhNDk4ZS4uNTIwYjY2NmZkZDhmYSAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2luZXQuY1xuKysrIGIvbmV0L3NtYy9zbWNfaW5ldC5jXG5AQCAtMTUsMTMgKzE1LDE2IEBAXG4gXG4gI2luY2x1ZGUgXCJzbWNfaW5ldC5oXCJcbiAjaW5jbHVkZSBcInNtYy5oXCJcbisjaW5jbHVkZSBcInNtY19jbG9zZS5oXCJcbiBcbiBzdGF0aWMgaW50IHNtY19pbmV0X2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xuK3N0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXRfcHJvdCA9IHtcbiBcdC5uYW1lXHRcdD0gXCJJTkVUX1NNQ1wiLFxuIFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gXHQuaW5pdFx0XHQ9IHNtY19pbmV0X2luaXRfc29jayxcbitcdC5kZXN0cm95XHQ9IHNtY19pbmV0X2Rlc3Ryb3lfc29jayxcbiBcdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG4gXHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbiBcdC5yZWxlYXNlX2NiXHQ9IHNtY19yZWxlYXNlX2NiLFxuQEAgLTY4LDYgKzcxLDcgQEAgc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldDZfcHJvdCA9IHtcbiBcdC5uYW1lXHRcdD0gXCJJTkVUNl9TTUNcIixcbiBcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIFx0LmluaXRcdFx0PSBzbWNfaW5ldF9pbml0X3NvY2ssXG4rXHQuZGVzdHJveVx0PSBzbWNfaW5ldF9kZXN0cm95X3NvY2ssXG4gXHQuaGFzaFx0XHQ9IHNtY19oYXNoX3NrLFxuIFx0LnVuaGFzaFx0XHQ9IHNtY191bmhhc2hfc2ssXG4gXHQucmVsZWFzZV9jYlx0PSBzbWNfcmVsZWFzZV9jYixcbkBAIC0xMTYsNiArMTIwLDE4IEBAIHN0YXRpYyBpbnQgc21jX2luZXRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiBcdHJldHVybiBzbWNfY3JlYXRlX2NsY3NrKG5ldCwgc2ssIHNrLVx1MDAzZXNrX2ZhbWlseSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0LyogVGhlIHNvY2sgaXMgaGFzaGVkIGFuZCBzbWNfZGlhZyBkdW1wcyBkZXJlZmVyZW5jZSBzbWMtXHUwMDNlY2xjc29ja1xuK1x0ICogd2l0aG91dCBjbGNzb2NrX3JlbGVhc2VfbG9jaywgd2hpbGUgc2tfY29tbW9uX3JlbGVhc2UoKSBjYWxsc1xuK1x0ICogLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2guIFVuaGFzaCBmaXJzdCwgYXMgX19zbWNfcmVsZWFzZSgpIGRvZXMsXG4rXHQgKiBzbyBubyBkdW1wIGNhbiBvYnNlcnZlIHRoZSBjbGNzb2NrIGJlaW5nIHJlbGVhc2VkOyB0aGUgc2Vjb25kXG4rXHQgKiB1bmhhc2ggaXMgYSBuby1vcC5cbitcdCAqL1xuK1x0c2stXHUwMDNlc2tfcHJvdC1cdTAwM2V1bmhhc2goc2spO1xuK1x0c21jX2NsY3NvY2tfcmVsZWFzZShzbWNfc2soc2spKTtcbit9XG4rXG4gaW50IF9faW5pdCBzbWNfaW5ldF9pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJjO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDI6MjkuNDk0NjAzNTI1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1MDY3OTYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBJbmV0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zbWMvc21jX2luZXQuY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgYWRkaW5nIGEgYC5kZXN0cm95YCBjYWxsYmFjayB0byBib3RoIGBzbWNfaW5ldF9wcm90YCBhbmQgYHNtY19pbmV0Nl9wcm90YC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgdGhlIGNhbGxiYWNrIGl0c2VsZiBpcyBgc21jX2luZXRfZGVzdHJveV9zb2NrYC4gSSBrbm93IHRoYXQgZnVuY3Rpb24g4oCTIGl0J3MgcmVzcG9uc2libGUgZm9yIHVuaGFzaGluZyB0aGUgc29ja2V0IGFuZCB0aGVuIGNhbGxpbmcgYHNtY19jbGNzb2NrX3JlbGVhc2VgLiBNYWtlcyBzZW5zZTsgY2xlYW51cCBpcyBjcnVjaWFsLCBlc3BlY2lhbGx5IGluIHRoaXMgYXJlYS5cblxuTm93LCBiZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGJldHRlci4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBuZXQvc21jL3NtY19pbmV0LmNgIGFuZCBhbHNvIGNoZWNrIGBuZXQvc21jL3NtYy5oYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBuZXcgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy4gVGltZSB0byBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYHNtY19pbmV0X3Byb3RgLCBgc21jX2luZXQ2X3Byb3RgLCBhbmQgdGhhdCBkZXN0cnVjdGlvbiBmdW5jdGlvbiwgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgaW50ZWdyYXRlcyBjbGVhbmx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci4gSSdsbCBiZSBsb29raW5nIGZvciBjcm9zcy1yZWZlcmVuY2VzLCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgaXNzdWVzLCBhbmQgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBvZiB0aGVzZSBzb2NrZXRzLiBMZXQncyBzZWUgd2hhdCB0aGUgZ3JlcCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDI6MzMuOTQ1Mjg1ODUyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTU3NTc0ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2luZXRfZGVzdHJveV9zb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2luZXQuYz0yMD1zdGF0aWMgaW50IHNtY19pbmV0X2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9zbWMvc21jX2luZXQuYzoyMTpzdGF0aWMgdm9pZCBzbWNfaW5ldF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvc21jL3NtY19pbmV0LmMtMjItXFxubmV0L3NtYy9zbWNfaW5ldC5jPTIzPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXRfcHJvdCA9IHtcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy0yNi1cXHQuaW5pdFxcdFxcdD0gc21jX2luZXRfaW5pdF9zb2NrLFxcbm5ldC9zbWMvc21jX2luZXQuYzoyNzpcXHQuZGVzdHJveVxcdD0gc21jX2luZXRfZGVzdHJveV9zb2NrLFxcbm5ldC9zbWMvc21jX2luZXQuYy0yOC1cXHQuaGFzaFxcdFxcdD0gc21jX2hhc2hfc2ssXFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9NzA9c3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldDZfcHJvdCA9IHtcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy03My1cXHQuaW5pdFxcdFxcdD0gc21jX2luZXRfaW5pdF9zb2NrLFxcbm5ldC9zbWMvc21jX2luZXQuYzo3NDpcXHQuZGVzdHJveVxcdD0gc21jX2luZXRfZGVzdHJveV9zb2NrLFxcbm5ldC9zbWMvc21jX2luZXQuYy03NS1cXHQuaGFzaFxcdFxcdD0gc21jX2hhc2hfc2ssXFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9MTEzPXN0YXRpYyBpbnQgc21jX2luZXRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy0xMjItXFxubmV0L3NtYy9zbWNfaW5ldC5jOjEyMzpzdGF0aWMgdm9pZCBzbWNfaW5ldF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9zbWMvc21jX2luZXQuYy0xMjQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MjozNS42NjEwNTMwNzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzExOTYzMTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gdGhlIFNNQyBLY29uZmlnKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyBkZWZpbml0ZWx5IGNlbnRlcmVkIGFyb3VuZCB0aGUgU01DLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoZSBLY29uZmlnIGZvciBpdD9cIiBJIGtub3cgdGhlIGFyY2hpdGVjdHVyZSwgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYW5kIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGtleSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgYXMgc3BlY2lmaWMgYXMgYW4gU01DLCBvciBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyLiBJdCdzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGhhdmUgaXRzIG93biBLY29uZmlnIGZyYWdtZW50IHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24uIFNvLCBteSBtZW50YWwgY2hlY2tsaXN0IGJlZ2luczogSSBuZWVkIHRvIGxvY2F0ZSB0aGlzIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHksIGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgU01DIHN1cHBvcnQgd2l0aGluIHRoZSBidWlsZC4gVGltZSB0byB0cmFjayB0aGF0IGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MjozOC45NzMwMjAwNjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3OTcxODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNNQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MjozOS4wMjI4MjM3NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjI0NTkxNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBTb2NrZXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpcyBgU01DYCwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUgYSBiaXQuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24uIFNwZWNpZmljYWxseSwgYHNtY19kaWFnYCB3YXMgZGVyZWZlcmVuY2luZyBgc21jLVx1MDAzZWNsY3NvY2tgIHdpdGhvdXQgZmlyc3Qgb2J0YWluaW5nIHRoZSBgY2xjc29ja19yZWxlYXNlX2xvY2tgLiBUaGF0J3MgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGJ1ZywgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gYWRkcmVzcy4gVGhlIGZpeCBpbnRyb2R1Y2VzIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLCB3aGljaCwgaWYgSSB1bmRlcnN0YW5kIHRoaXMgY29ycmVjdGx5LCBlc3NlbnRpYWxseSBjbGVhbnMgdXAgdGhlIHNvY2tldCBieSBjYWxsaW5nIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzaylgIGFuZCB0aGVuIGBzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpYC4gSW50ZXJlc3RpbmcsIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gc29ja2V0IHRlYXJkb3duLCB3aGljaCBzY3JlYW1zIFwiZnV6eiB0aGlzIGFyZWEhXCIgdG8gbWUuXG5cbk5vdywgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIHdoaWNoIGlzIGZydXN0cmF0aW5nLiBDYW4ndCBkaXJlY3RseSB0YXJnZXQgaXQuIExldCBtZSBzZWUuLi4gSSBjb3VsZCBmdXp6IGBzbWNfcmVsZWFzZWAsIGBzbWNfY2xjc29ja19yZWxlYXNlYCBvciBgc21jX2luZXRfaW5pdF9zb2NrYC4gTm8sIHdhaXQuLi4gYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AgaXMgY2FsbGVkIGZyb20gYHNrX2NvbW1vbl9yZWxlYXNlYC4gSGFuZyBvbiwgYHNrX2NvbW1vbl9yZWxlYXNlYCBpcyBjYWxsZWQgYnkgYHNtY19yZWxlYXNlYCwgd2hpY2ggaXMgdGhlIGVudHJ5IHBvaW50LiBCdXQgYHNtY19pbmV0X3Byb3QuZGVzdHJveWAgaXMgY2FsbGVkIGJ5IGBza19jb21tb25fcmVsZWFzZWAuIEdvdCBpdC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZm9jdXMgb24gYHNtY19jbGNzb2NrX3JlbGVhc2VgLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhhdCBvbmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxMywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mjo0NC42NDc0MTg0NDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwODIzOTk4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfY2xjc29ja19yZWxlYXNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9Mjg4PXN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzE3LVxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxubmV0L3NtYy9hZl9zbWMuYzozMTg6XFx0XFx0XFx0c21jX2NsY3NvY2tfcmVsZWFzZShzbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMzE5LVxcdFxcdFxcdGxvY2tfc29jayhzayk7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTMzNTM9aW50IHNtY19jcmVhdGVfY2xjc2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHkpXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMzNjItXFxubmV0L3NtYy9hZl9zbWMuYzozMzYzOlxcdC8qIHNtY19jbGNzb2NrX3JlbGVhc2UoKSBkb2VzIG5vdCB3YWl0IHNtYy1cXHUwMDNlY2xjc29jay1cXHUwMDNlc2snc1xcbm5ldC9zbWMvYWZfc21jLmMtMzM2NC1cXHQgKiBkZXN0cnVjdGlvbjsgIGl0cyBza19zdGF0ZSBtaWdodCBub3QgYmUgVENQX0NMT1NFIGFmdGVyXFxuLS1cXG5uZXQvc21jL3NtY19jbG9zZS5jLTIzLS8qIHJlbGVhc2UgdGhlIGNsY3NvY2sgdGhhdCBpcyBhc3NpZ25lZCB0byB0aGUgc21jX3NvY2sgKi9cXG5uZXQvc21jL3NtY19jbG9zZS5jOjI0OnZvaWQgc21jX2NsY3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG5uZXQvc21jL3NtY19jbG9zZS5jLTI1LXtcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmM9MTI4PXZvaWQgc21jX2Nsb3NlX2FjdGl2ZV9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTgxLVxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxubmV0L3NtYy9zbWNfY2xvc2UuYzoxODI6XFx0XFx0c21jX2NsY3NvY2tfcmVsZWFzZShzbWMpO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTgzLVxcdFxcdGxvY2tfc29jayhzayk7XFxuLS1cXG5uZXQvc21jL3NtY19jbG9zZS5jPTM1Nj1zdGF0aWMgdm9pZCBzbWNfY2xvc2VfcGFzc2l2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmMtNDQyLVxcdGlmIChyZWxlYXNlX2NsY3NvY2spXFxubmV0L3NtYy9zbWNfY2xvc2UuYzo0NDM6XFx0XFx0c21jX2NsY3NvY2tfcmVsZWFzZShzbWMpO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmMtNDQ0LVxcdHNvY2tfcHV0KHNrKTsgLyogc29ja19ob2xkIGRvbmUgYnkgc2NoZWR1bGVycyBvZiBjbG9zZV93b3JrICovXFxuLS1cXG5uZXQvc21jL3NtY19jbG9zZS5oPTI1PXZvaWQgc21jX2Nsb3NlX2luaXQoc3RydWN0IHNtY19zb2NrICpzbWMpO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmg6MjY6dm9pZCBzbWNfY2xjc29ja19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKTtcXG5uZXQvc21jL3NtY19jbG9zZS5oLTI3LWludCBzbWNfY2xvc2VfYWJvcnQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYz0xMjM9c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy0xMzEtXFx0c2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZXVuaGFzaChzayk7XFxubmV0L3NtYy9zbWNfaW5ldC5jOjEzMjpcXHRzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpO1xcbm5ldC9zbWMvc21jX2luZXQuYy0xMzMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mjo0Ni4zNTU2NjI5OTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzIwMjQxMTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIHRoZSBTTUMgU29ja2V0IFJlbGVhc2UgRmxvdyoqXG5cblJpZ2h0LCB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgU01DIHNvY2tldCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSByZWxlYXNlIG1lY2hhbmlzbXMuIFRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGhlcmUgaXMgb2J2aW91c2x5IGBTTUNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGBzbWNfY2xjc29ja19yZWxlYXNlYCBhbmQgYHNtY19yZWxlYXNlYCBmdW5jdGlvbnMuIFRob3NlIGFyZSBjbGVhcmx5IHRoZSBjcml0aWNhbCBwb2ludHMgZm9yIHNvY2tldCBjbGVhbnVwLlxuXG5XYWl0IGEgc2Vjb25k4oCmIEkgc2VlIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgIGlzIGNhbGxlZCBmcm9tIGBza19jb21tb25fcmVsZWFzZWAgd2hpY2ggKml0c2VsZiogaXMgY2FsbGVkIGZyb20gYHNtY19yZWxlYXNlYC4gVGhhdCdzIGltcG9ydGFudC4gSXQgc3VnZ2VzdHMgYSBtb3JlIGNvbXBsZXggY2hhaW4gb2YgZXZlbnRzIHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC4gSXQncyBub3QganVzdCBhIGRpcmVjdCBjYWxsOyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjb21tb24gc29ja2V0IHJlbGVhc2UgcGF0aCB0aGF0J3MgYmVpbmcgbGV2ZXJhZ2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBTbywgbGV0IG1lIGdldCBhIGNsZWFyIHBpY3R1cmUgYnkgZXhhbWluaW5nIGBzbWNfcmVsZWFzZWAgbW9yZSBjbG9zZWx5IGFuZCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGVyZS4gVGhpcyBuZXN0ZWQgZnVuY3Rpb24gY2FsbCBjb3VsZCBleHBsYWluIHNvbWUgb2YgdGhlIGlzc3VlcyByYWlzZWQgaW4gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTExNSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQyOjUwLjA3NTkwOTQ4N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMjIyNDI5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfcmVsZWFzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM9MTA1ND1zdGF0aWMgaW50IGFwcGxlc21jX2NyZWF0ZV9hY2NlbGVyb21ldGVyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMtMTEwNi0vKiBSZWxlYXNlIGFsbCByZXNvdXJjZXMgdXNlZCBieSB0aGUgYWNjZWxlcm9tZXRlciAqL1xcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYzoxMTA3OnN0YXRpYyB2b2lkIGFwcGxlc21jX3JlbGVhc2VfYWNjZWxlcm9tZXRlcih2b2lkKVxcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xMTA4LXtcXG4tLVxcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYz0xMTE1PXN0YXRpYyBpbnQgYXBwbGVzbWNfY3JlYXRlX2xpZ2h0X3NlbnNvcih2b2lkKVxcbi0tXFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTExMjEtXFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jOjExMjI6c3RhdGljIHZvaWQgYXBwbGVzbWNfcmVsZWFzZV9saWdodF9zZW5zb3Iodm9pZClcXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMtMTEyMy17XFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM9MTEyOT1zdGF0aWMgaW50IGFwcGxlc21jX2NyZWF0ZV9rZXlfYmFja2xpZ2h0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMtMTEzOC1cXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM6MTEzOTpzdGF0aWMgdm9pZCBhcHBsZXNtY19yZWxlYXNlX2tleV9iYWNrbGlnaHQodm9pZClcXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMtMTE0MC17XFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM9MTQxOD1zdGF0aWMgaW50IF9faW5pdCBhcHBsZXNtY19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMtMTU2NC1vdXRfbGlnaHRfbGVkY2xhc3M6XFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jOjE1NjU6XFx0YXBwbGVzbWNfcmVsZWFzZV9rZXlfYmFja2xpZ2h0KCk7XFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTE1NjYtb3V0X2xpZ2h0X3N5c2ZzOlxcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYzoxNTY3OlxcdGFwcGxlc21jX3JlbGVhc2VfbGlnaHRfc2Vuc29yKCk7XFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTE1Njgtb3V0X2FjY2VsZXJvbWV0ZXI6XFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jOjE1Njk6XFx0YXBwbGVzbWNfcmVsZWFzZV9hY2NlbGVyb21ldGVyKCk7XFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTE1NzAtb3V0X2luZm86XFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM9MTU4Nj1zdGF0aWMgdm9pZCBfX2V4aXQgYXBwbGVzbWNfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTE1ODgtXFx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoaHdtb25fZGV2KTtcXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM6MTU4OTpcXHRhcHBsZXNtY19yZWxlYXNlX2tleV9iYWNrbGlnaHQoKTtcXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM6MTU5MDpcXHRhcHBsZXNtY19yZWxlYXNlX2xpZ2h0X3NlbnNvcigpO1xcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYzoxNTkxOlxcdGFwcGxlc21jX3JlbGVhc2VfYWNjZWxlcm9tZXRlcigpO1xcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xNTkyLVxcdGFwcGxlc21jX2Rlc3Ryb3lfbm9kZXMoaW5mb19ncm91cCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jPTIxMTA9c3RhdGljIGludCBzbWNfcmVxdWVzdF9hdHRyaWIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmMtMjEyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jOjIxMjU6c3RhdGljIHZvaWQgc21jX3JlbGVhc2VfYXR0cmliKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMTI2LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM9MjEzNT1zdGF0aWMgaW5saW5lIHZvaWQgc21jX3JlcXVlc3RfZGF0YWNzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMTUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM6MjE1NDpzdGF0aWMgdm9pZCBzbWNfcmVsZWFzZV9kYXRhY3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMTU1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM9MjIyNz1zdGF0aWMgaW50IHNtY19kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmMtMjM5MS0gb3V0X3JlbGVhc2VfYXR0cmliOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM6MjM5MjpcXHRzbWNfcmVsZWFzZV9hdHRyaWIocGRldiwgbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMzkzLSBvdXRfcmVsZWFzZV9pbzpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM9MjQwMz1zdGF0aWMgdm9pZCBzbWNfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yNDE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM6MjQxOTpcXHRzbWNfcmVsZWFzZV9kYXRhY3MocGRldixuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jOjI0MjA6XFx0c21jX3JlbGVhc2VfYXR0cmliKHBkZXYsbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yNDIxLVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yMTQ9dm9pZCBzbWNfdW5oYXNoX3NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjI3LSAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MjI4OnZvaWQgc21jX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9zbWMvYWZfc21jLmMtMjI5LXtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MjM4PXN0cnVjdCBwcm90byBzbWNfcHJvdG8gPSB7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI0My1cXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbm5ldC9zbWMvYWZfc21jLmM6MjQ0OlxcdC5yZWxlYXNlX2NiXFx0PSBzbWNfcmVsZWFzZV9jYixcXG5uZXQvc21jL2FmX3NtYy5jLTI0NS1cXHQub2JqX3NpemVcXHQ9IHNpemVvZihzdHJ1Y3Qgc21jX3NvY2spLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yNTE9c3RydWN0IHByb3RvIHNtY19wcm90bzYgPSB7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI1Ni1cXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbm5ldC9zbWMvYWZfc21jLmM6MjU3OlxcdC5yZWxlYXNlX2NiXFx0PSBzbWNfcmVsZWFzZV9jYixcXG5uZXQvc21jL2FmX3NtYy5jLTI1OC1cXHQub2JqX3NpemVcXHQ9IHNpemVvZihzdHJ1Y3Qgc21jX3NvY2spLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yNzk9c3RhdGljIHZvaWQgc21jX3Jlc3RvcmVfZmFsbGJhY2tfY2hhbmdlcyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjg3LVxcbm5ldC9zbWMvYWZfc21jLmM6Mjg4OnN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG5uZXQvc21jL2FmX3NtYy5jLTI4OS17XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMyNy1cXG5uZXQvc21jL2FmX3NtYy5jOjMyODppbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvc21jL2FmX3NtYy5jLTMyOS17XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTM2MC1cXG5uZXQvc21jL2FmX3NtYy5jOjM2MTpcXHRyYyA9IF9fc21jX3JlbGVhc2Uoc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTM2Mi1cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9NzAwPXN0YXRpYyB2b2lkIHNtY19jb25uX3NhdmVfcGVlcl9pbmZvX2ZjZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtNzIwLVxcdHNtYy1cXHUwMDNlY29ubi5sZ3ItXFx1MDAzZXBlZXJfb3MgPSBmY2UtXFx1MDAzZW9zX3R5cGU7XFxubmV0L3NtYy9hZl9zbWMuYzo3MjE6XFx0c21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlcGVlcl9zbWNfcmVsZWFzZSA9IGZjZS1cXHUwMDNlcmVsZWFzZTtcXG5uZXQvc21jL2FmX3NtYy5jLTcyMi1cXHRpZiAoc21jX2lzYXNjaWkoZmNlLVxcdTAwM2Vob3N0bmFtZSkpXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTE4NTc9dm9pZCBzbWNfY2xvc2Vfbm9uX2FjY2VwdGVkKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTg2NS1cXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19saW5nZXJ0aW1lLCBTTUNfTUFYX1NUUkVBTV9XQUlUX1RJTUVPVVQpO1xcbm5ldC9zbWMvYWZfc21jLmM6MTg2NjpcXHRfX3NtY19yZWxlYXNlKHNtYyk7XFxubmV0L3NtYy9hZl9zbWMuYy0xODY3LVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTMzMzI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc21jX3NvY2tfb3BzID0ge1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0zMzM0LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxubmV0L3NtYy9hZl9zbWMuYzozMzM1OlxcdC5yZWxlYXNlXFx0PSBzbWNfcmVsZWFzZSxcXG5uZXQvc21jL2FmX3NtYy5jLTMzMzYtXFx0LmJpbmRcXHRcXHQ9IHNtY19iaW5kLFxcbi0tXFxubmV0L3NtYy9zbWMuaD00MT12b2lkIHNtY191bmhhc2hfc2soc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvc21jL3NtYy5oOjQyOnZvaWQgc21jX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvc21jL3NtYy5oLTQzLVxcbm5ldC9zbWMvc21jLmg6NDQ6aW50IHNtY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xcbm5ldC9zbWMvc21jLmgtNDUtaW50IHNtY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTI2PXN0YXRpYyB2b2lkIHNtY19jZGNfdHhfaGFuZGxlcihzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcG5kX3NuZCxcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTU2LVxcdFxcdCAqIFVzZXIgY29udGV4dCB3aWxsIGxhdGVyIHRyeSB0byBzZW5kIHdoZW4gaXQgcmVsZWFzZSBzb2NrX2xvY2tcXG5uZXQvc21jL3NtY19jZGMuYzo1NzpcXHRcXHQgKiBpbiBzbWNfcmVsZWFzZV9jYigpXFxubmV0L3NtYy9zbWNfY2RjLmMtNTgtXFx0XFx0ICovXFxuLS1cXG5uZXQvc21jL3NtY19jbG9zZS5jPTM1Nj1zdGF0aWMgdm9pZCBzbWNfY2xvc2VfcGFzc2l2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMzk5LVxcdFxcdCAgICBzbWNfY2xvc2Vfc2VudF9hbnlfY2xvc2UoY29ubikpIHtcXG5uZXQvc21jL3NtY19jbG9zZS5jOjQwMDpcXHRcXHRcXHQvKiBzbWNfcmVsZWFzZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBsb2NhbGx5ICovXFxubmV0L3NtYy9zbWNfY2xvc2UuYy00MDEtXFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gU01DX0NMT1NFRDtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0zMDk9c3RhdGljIGludCBzbWNfbmxfZmlsbF9sZ3JfdjJfY29tbW9uKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTMxOC1cXHRcXHRnb3RvIGVycnYyYXR0cjtcXG5uZXQvc21jL3NtY19jb3JlLmM6MzE5OlxcdGlmIChubGFfcHV0X3U4KHNrYiwgU01DX05MQV9MR1JfVjJfUkVMLCBsZ3ItXFx1MDAzZXBlZXJfc21jX3JlbGVhc2UpKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0zMjAtXFx0XFx0Z290byBlcnJ2MmF0dHI7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmg9Mjg2PXN0cnVjdCBzbWNfbGlua19ncm91cCB7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmgtMzEyLVxcdHU4XFx0XFx0XFx0cGVlcl9vcztcXHQvKiBwZWVyIG9wZXJhdGluZyBzeXN0ZW0gKi9cXG5uZXQvc21jL3NtY19jb3JlLmg6MzEzOlxcdHU4XFx0XFx0XFx0cGVlcl9zbWNfcmVsZWFzZTtcXG5uZXQvc21jL3NtY19jb3JlLmgtMzE0LVxcdHU4XFx0XFx0XFx0cGVlcl9ob3N0bmFtZVtTTUNfTUFYX0hPU1ROQU1FX0xFTl07XFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9MjM9c3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0ge1xcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jLTI5LVxcdC51bmhhc2hcXHRcXHQ9IHNtY191bmhhc2hfc2ssXFxubmV0L3NtYy9zbWNfaW5ldC5jOjMwOlxcdC5yZWxlYXNlX2NiXFx0PSBzbWNfcmVsZWFzZV9jYixcXG5uZXQvc21jL3NtY19pbmV0LmMtMzEtXFx0Lm9ial9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHNtY19zb2NrKSxcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYz0zNj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzbWNfaW5ldF9zdHJlYW1fb3BzID0ge1xcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jLTM4LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxubmV0L3NtYy9zbWNfaW5ldC5jOjM5OlxcdC5yZWxlYXNlXFx0PSBzbWNfcmVsZWFzZSxcXG5uZXQvc21jL3NtY19pbmV0LmMtNDAtXFx0LmJpbmRcXHRcXHQ9IHNtY19iaW5kLFxcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jPTcwPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXQ2X3Byb3QgPSB7XFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmMtNzYtXFx0LnVuaGFzaFxcdFxcdD0gc21jX3VuaGFzaF9zayxcXG5uZXQvc21jL3NtY19pbmV0LmM6Nzc6XFx0LnJlbGVhc2VfY2JcXHQ9IHNtY19yZWxlYXNlX2NiLFxcbm5ldC9zbWMvc21jX2luZXQuYy03OC1cXHQub2JqX3NpemVcXHQ9IHNpemVvZihzdHJ1Y3Qgc21jNl9zb2NrKSxcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYz04ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzbWNfaW5ldDZfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy04Ni1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbm5ldC9zbWMvc21jX2luZXQuYzo4NzpcXHQucmVsZWFzZVxcdD0gc21jX3JlbGVhc2UsXFxubmV0L3NtYy9zbWNfaW5ldC5jLTg4LVxcdC5iaW5kXFx0XFx0PSBzbWNfYmluZCxcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYz0xMjM9c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy0xMjYtXFx0ICogd2l0aG91dCBjbGNzb2NrX3JlbGVhc2VfbG9jaywgd2hpbGUgc2tfY29tbW9uX3JlbGVhc2UoKSBjYWxsc1xcbm5ldC9zbWMvc21jX2luZXQuYzoxMjc6XFx0ICogLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2guIFVuaGFzaCBmaXJzdCwgYXMgX19zbWNfcmVsZWFzZSgpIGRvZXMsXFxubmV0L3NtYy9zbWNfaW5ldC5jLTEyOC1cXHQgKiBzbyBubyBkdW1wIGNhbiBvYnNlcnZlIHRoZSBjbGNzb2NrIGJlaW5nIHJlbGVhc2VkOyB0aGUgc2Vjb25kXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz00NDc9aW50IHNtY19sbGNfc2VuZF9jb25maXJtX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtNDc0LVxcdGlmIChsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zbWMvc21jX2xsYy5jOjQ3NTpcXHQgICAgbGluay1cXHUwMDNlbGdyLVxcdTAwM2VwZWVyX3NtY19yZWxlYXNlIFxcdTAwM2U9IFNNQ19SRUxFQVNFXzEpIHtcXG5uZXQvc21jL3NtY19sbGMuYy00NzYtXFx0XFx0Y29uZmxsYy1cXHUwMDNlbWF4X2Nvbm5zID0gbGluay1cXHUwMDNlbGdyLVxcdTAwM2VtYXhfY29ubnM7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3NtYy5jPTQwPWludCBmYWxsYmFja19jbnQgPSAwO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfc21jLmMtNDEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9zbWMuYzo0MjpTRUMoXFxcImZlbnRyeS9zbWNfcmVsZWFzZVxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9zbWMuYzo0MzppbnQgQlBGX1BST0coYnBmX3NtY19yZWxlYXNlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfc21jLmMtNDQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mjo1MS42MDgxNDIyNzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NTgwNjAxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBTTUMgU29ja2V0IExpZmVjeWNsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9uczogYHNtY19yZWxlYXNlYCwgYHNtY19jbGNzb2NrX3JlbGVhc2VgLCBhbmQgYHNtY19pbmV0X2luaXRfc29ja2AuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIHBpZWNlcyByZWxhdGVkIHRvIG1hbmFnaW5nIHRoZSBTTUMgc29ja2V0IGxpZmVjeWNsZS4gSG1tLCBidXQgSSBzaG91bGQgcGF1c2UuIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgZGVzdHJ1Y3Rpb24gcHJvY2Vzcy4gSSByZWNhbGwgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AgYmVpbmcgY2FsbGVkIGZyb20gYHNrX2NvbW1vbl9yZWxlYXNlYC4gTm93LCBpcyAqdGhhdCogY2FsbGVkIGZyb20gYGluZXRfcmVsZWFzZWAgb3IgYGluZXQ2X3JlbGVhc2VgPyBJdCdzIGVhc3kgdG8gZ2V0IGxvc3QgaW4gdGhlc2UgbGF5ZXJzLi4uTm8gd2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBjb250ZXh0LiBgc21jX2luZXRfcHJvdGAgaXMgdGhlIHN0cnVjdHVyZSB1c2VkIGZvciBgQUZfSU5FVGAgc29ja2V0cyBjcmVhdGVkIHdpdGggYElQUFJPVE9fU01DYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBgc21jX2luZXRfcHJvdGAsIHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QgYW5kIHRoYXQgaXQncyBoYW5kbGluZyB0aGUgdGVhcmRvd24gYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIGhvdyBpdCBpcyBhbGwgY29ubmVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjk4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQyOjU1LjM2Mzk1MTM3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NDIyNzY5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfaW5ldF9wcm90XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2luZXQuYz0yMT1zdGF0aWMgdm9pZCBzbWNfaW5ldF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvc21jL3NtY19pbmV0LmMtMjItXFxubmV0L3NtYy9zbWNfaW5ldC5jOjIzOnN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXRfcHJvdCA9IHtcXG5uZXQvc21jL3NtY19pbmV0LmMtMjQtXFx0Lm5hbWVcXHRcXHQ9IFxcXCJJTkVUX1NNQ1xcXCIsXFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc21jX2luZXRfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy01Ni1cXG5uZXQvc21jL3NtY19pbmV0LmM6NTc6c3RhdGljIHN0cnVjdCBpbmV0X3Byb3Rvc3cgc21jX2luZXRfcHJvdG9zdyA9IHtcXG5uZXQvc21jL3NtY19pbmV0LmMtNTgtXFx0LnR5cGVcXHRcXHQ9IFNPQ0tfU1RSRUFNLFxcbm5ldC9zbWMvc21jX2luZXQuYy01OS1cXHQucHJvdG9jb2xcXHQ9IElQUFJPVE9fU01DLFxcbm5ldC9zbWMvc21jX2luZXQuYzo2MDpcXHQucHJvdFxcdFxcdD0gXFx1MDAyNnNtY19pbmV0X3Byb3QsXFxubmV0L3NtYy9zbWNfaW5ldC5jLTYxLVxcdC5vcHNcXHRcXHQ9IFxcdTAwMjZzbWNfaW5ldF9zdHJlYW1fb3BzLFxcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jPTEzNT1pbnQgX19pbml0IHNtY19pbmV0X2luaXQodm9pZClcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy0xMzgtXFxubmV0L3NtYy9zbWNfaW5ldC5jOjEzOTpcXHRyYyA9IHByb3RvX3JlZ2lzdGVyKFxcdTAwMjZzbWNfaW5ldF9wcm90LCAxKTtcXG5uZXQvc21jL3NtY19pbmV0LmMtMTQwLVxcdGlmIChyYykge1xcbm5ldC9zbWMvc21jX2luZXQuYzoxNDE6XFx0XFx0cHJfZXJyKFxcXCIlczogcHJvdG9fcmVnaXN0ZXIgc21jX2luZXRfcHJvdCBmYWlscyB3aXRoICVkXFxcXG5cXFwiLFxcbm5ldC9zbWMvc21jX2luZXQuYy0xNDItXFx0XFx0ICAgICAgIF9fZnVuY19fLCByYyk7XFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmMtMTQ1LVxcdC8qIG5vIHJldHVybiB2YWx1ZSAqL1xcbm5ldC9zbWMvc21jX2luZXQuYzoxNDY6XFx0aW5ldF9yZWdpc3Rlcl9wcm90b3N3KFxcdTAwMjZzbWNfaW5ldF9wcm90b3N3KTtcXG5uZXQvc21jL3NtY19pbmV0LmMtMTQ3LVxcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jLTE2NC1vdXRfaW5ldDZfcHJvdDpcXG5uZXQvc21jL3NtY19pbmV0LmM6MTY1OlxcdGluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KFxcdTAwMjZzbWNfaW5ldF9wcm90b3N3KTtcXG5uZXQvc21jL3NtY19pbmV0LmM6MTY2OlxcdHByb3RvX3VucmVnaXN0ZXIoXFx1MDAyNnNtY19pbmV0X3Byb3QpO1xcbm5ldC9zbWMvc21jX2luZXQuYy0xNjctI2VuZGlmIC8qIENPTkZJR19JUFY2ICovXFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9MTcxPXZvaWQgc21jX2luZXRfZXhpdCh2b2lkKVxcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jLTE3Ni0jZW5kaWYgLyogQ09ORklHX0lQVjYgKi9cXG5uZXQvc21jL3NtY19pbmV0LmM6MTc3OlxcdGluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KFxcdTAwMjZzbWNfaW5ldF9wcm90b3N3KTtcXG5uZXQvc21jL3NtY19pbmV0LmM6MTc4OlxcdHByb3RvX3VucmVnaXN0ZXIoXFx1MDAyNnNtY19pbmV0X3Byb3QpO1xcbm5ldC9zbWMvc21jX2luZXQuYy0xNzktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mjo1Ni45MDgyMDYyOTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0NDgxMzg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBTb2NrZXQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gY29uZmlybWluZyB0aGF0IGBzbWNfaW5ldF9wcm90YCBpcyBpbmRlZWQgdGhlIHByb3RvY29sIHN0cnVjdHVyZSB1c2VkIGZvciBzb2NrZXRzIGVtcGxveWluZyBgSVBQUk9UT19TTUNgLiBUaGF0J3MgdGhlIGZpcnN0IHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgbGV0J3Mgc2VlLi4uIHRoZSBgc21jX2luZXRfc3RyZWFtX29wc2Agc3RydWN0dXJlIGhhcyBhIGAucmVsZWFzZWAgZnVuY3Rpb24gcG9pbnRlciBzZXQgdG8gYHNtY19yZWxlYXNlYC4gVGhhdCBsb29rcyByaWdodCwgdGhhdCdzIHRoZSBleHBlY3RlZCBzdHJ1Y3R1cmUuIEhtbSwgYnV0IHdoZXJlIGlzIGBzbWNfcmVsZWFzZWAgZGVmaW5lZD8gQWgsIHllcywgaXTigJlzIGluIGBhZl9zbWMuY2AuIE9rYXksIGdvb2QuIEl0J3MgdGltZSB0byBkaXZlIGludG8gYGFmX3NtYy5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgYHNtY19yZWxlYXNlYC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NTYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MzowMC4wNTMwMjMwODVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDU2MzMwMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHNtY19yZWxlYXNlXFxcXChzdHJ1Y3Qgc29ja2V0IFxcXFwqc29ja1xcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9Mjg4PXN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzI3LVxcbm5ldC9zbWMvYWZfc21jLmM6MzI4OmludCBzbWNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC9zbWMvYWZfc21jLmMtMzI5LXtcXG4tLVxcbm5ldC9zbWMvc21jLmg9NDI9dm9pZCBzbWNfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9zbWMvc21jLmgtNDMtXFxubmV0L3NtYy9zbWMuaDo0NDppbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7XFxubmV0L3NtYy9zbWMuaC00NS1pbnQgc21jX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MzowMi40OTg2NjIwMzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAxMzc1MzI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFNNQyBTb2NrZXQgUmVsZWFzZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBgc21jX3JlbGVhc2VgIGlzLCBhcyBJIHJlY2FsbCwgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgYSBzb2NrZXQgaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgZnJhbWV3b3JrLiBUaGUgcGF0Y2ggbm90ZXMgdGVsbCBtZSBpdCdzIGFkZGluZyBhIGAuZGVzdHJveWAgZnVuY3Rpb24gcG9pbnRlciB0byBib3RoIGBzbWNfaW5ldF9wcm90YCBhbmQgYHNtY19pbmV0Nl9wcm90YC4gIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgcmlnaHQsIGEgY2xlYW51cCBmdW5jdGlvbi5cIlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzICpob3cqIGlzIHRoaXMgYC5kZXN0cm95YCBjYWxsYmFjayBhY3R1YWxseSBpbnZva2VkPyBUaGUgcGF0Y2ggcmVmZXJlbmNlcyBgc2tfY29tbW9uX3JlbGVhc2VgLiBNeSBtZW1vcnkncyBmdXp6eSwgYnV0IEknbSBwcmV0dHkgc3VyZSBgc2tfY29tbW9uX3JlbGVhc2VgIGlzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIExpbnV4IG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBpdCdzIHVzZWQgZm9yIHJlbGVhc2luZyB0aGUgY29tbW9uIHNvY2tldCBlbGVtZW50cy4gQW5kIGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCBpdCdzIGNhbGxlZCBieSB0aGUgZ2VuZXJhbCBzb2NrZXQgcmVsZWFzZSBmdW5jdGlvbiwgd2hpY2ggaGVyZSBpcyBgc21jX3JlbGVhc2VgLiBCdXQgbGV0J3MgdmVyaWZ5IHRoYXQuICBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgY29kZSBmb3IgYHNtY19yZWxlYXNlYCB0byBjb25maXJtIHRoaXMgc2VxdWVuY2UgYW5kIGVuc3VyZSB0aGVyZSBpc24ndCBzb21lIG90aGVyIGluZGlyZWN0IHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBwb2ludCBhdCB3aGljaCBgLmRlc3Ryb3lgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIHJlbGVhc2UgcHJvY2VzcyB0byBmdWxseSBncmFzcCB0aGUgcGF0Y2gncyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTQ1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MDYuNTEyNDE4MTg0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk3OTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19jb21tb25fcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL2FmX3NtYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9MzM3Mz1zdGF0aWMgaW50IHNtY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMzOTYtXFx0aWYgKHJjKSB7XFxubmV0L3NtYy9hZl9zbWMuYzozMzk3OlxcdFxcdHNrX2NvbW1vbl9yZWxlYXNlKHNrKTtcXG5uZXQvc21jL2FmX3NtYy5jLTMzOTgtXFx0XFx0c29jay1cXHUwMDNlc2sgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MzowNi41NjM0MDYyMzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3MzA2ODI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIFJlbGVhc2UgUHJvY2VkdXJlcyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYHNrX2NvbW1vbl9yZWxlYXNlYCB3YXMgZGlyZWN0bHkgY2FsbGVkIGJ5IGBzbWNfcmVsZWFzZWAsIGJ1dCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgY29ubmVjdGlvbi4gTGV0J3Mgbm90IGFzc3VtZSBhbnl0aGluZyBoZXJlLCBsZXQncyBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBfX3NtY19yZWxlYXNlYCBhbmQgc2VlIGhvdyB0aGUgZnVuY3Rpb25zIGludGVyYWN0LiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbCBzdGFjay4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBiZWZvcmUgbWFraW5nIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmVsZWFzZSBwcm9jZWR1cmUuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxlIGRpZmZlcmVuY2VzIGZyb20gd2hhdCBJIGluaXRpYWxseSB1bmRlcnN0b29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQzOjA5LjYzNjQ3ODQzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTI4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zbWNfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL2FmX3NtYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9Mjc5PXN0YXRpYyB2b2lkIHNtY19yZXN0b3JlX2ZhbGxiYWNrX2NoYW5nZXMoc3RydWN0IHNtY19zb2NrICpzbWMpXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI4Ny1cXG5uZXQvc21jL2FmX3NtYy5jOjI4ODpzdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXFxubmV0L3NtYy9hZl9zbWMuYy0yODkte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0zMjg9aW50IHNtY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTM2MC1cXG5uZXQvc21jL2FmX3NtYy5jOjM2MTpcXHRyYyA9IF9fc21jX3JlbGVhc2Uoc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTM2Mi1cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTg1Nz12b2lkIHNtY19jbG9zZV9ub25fYWNjZXB0ZWQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xODY1LVxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX2xpbmdlcnRpbWUsIFNNQ19NQVhfU1RSRUFNX1dBSVRfVElNRU9VVCk7XFxubmV0L3NtYy9hZl9zbWMuYzoxODY2OlxcdF9fc21jX3JlbGVhc2Uoc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTE4NjctXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MDkuNjgyODI2MTE0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODc1NjUwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnk6XG5cbioqRGVjb25zdHJ1Y3RpbmcgU29ja2V0IERlc3RydWN0aW9uOiBBIERlZXAgRGl2ZSBpbnRvIGBfX3NtY19yZWxlYXNlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc29ja2V0IGlzIGJlaW5nIGRlbW9saXNoZWQuIFRoaXMgbWVhbnMgY3JhY2tpbmcgb3BlbiB0aGUgYF9fc21jX3JlbGVhc2VgIGZ1bmN0aW9uIGFuZCBnZXR0aW5nIGRvd24gdG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBpdHMgaW5uZXIgd29ya2luZ3MuIEkgbmVlZCB0byBvYnNlcnZlIGl0cyBwcmVjaXNlIHN0ZXBzIGluIHRlYXJpbmcgZG93biB0aGUgY29ubmVjdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBtZW1vcnkgZGVhbGxvY2F0aW9uLCBjb25uZWN0aW9uIHRlcm1pbmF0aW9uIHNlcXVlbmNlcywgc3RhdGUgcmVzZXRzLCByZXNvdXJjZSBjbGVhbnVwLCBhbmQgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGNvbnRyaWJ1dGUgdG8gYSBjb21wbGV0ZSBhbmQgY2xlYW4gc2h1dGRvd24uIEknbGwgbG9vayBmb3IgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgcG90ZW50aWFsIGZvciBvcnBoYW5lZCBkYXRhIG9yIHBlbmRpbmcgb3BlcmF0aW9ucy4gSSBleHBlY3QgdGhpcyB3aWxsIGJlIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhbmQgYSB0aG9yb3VnaCBhbmFseXNpcyBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgY2xhcmlmeSB0aGUgc29ja2V0J3MgbGlmZWN5Y2xlIGR1cmluZyBpdHMgZmluYWwgbW9tZW50cy4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIHBpY3R1cmUgb2YgdGhpcyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAyMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQzOjEyLjY3MDM5NDA2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9hZl9zbWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODg6XFx0c3RhdGljIGludCBfX3NtY19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbiAyODk6XFx0e1xcbiAyOTA6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gXFx1MDAyNnNtYy1cXHUwMDNlc2s7XFxuIDI5MTpcXHRcXHRpbnQgcmMgPSAwO1xcbiAyOTI6XFx0XFxuIDI5MzpcXHRcXHRpZiAoIXNtYy1cXHUwMDNldXNlX2ZhbGxiYWNrKSB7XFxuIDI5NDpcXHRcXHRcXHRyYyA9IHNtY19jbG9zZV9hY3RpdmUoc21jKTtcXG4gMjk1OlxcdFxcdFxcdHNtY19zb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xcbiAyOTY6XFx0XFx0XFx0c2stXFx1MDAzZXNrX3NodXRkb3duIHw9IFNIVVRET1dOX01BU0s7XFxuIDI5NzpcXHRcXHR9IGVsc2Uge1xcbiAyOTg6XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBTTUNfQ0xPU0VEKSB7XFxuIDI5OTpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFNNQ19MSVNURU4gXFx1MDAyNlxcdTAwMjZcXG4gMzAwOlxcdFxcdFxcdFxcdCAgICBzay1cXHUwMDNlc2tfc3RhdGUgIT0gU01DX0lOSVQpXFxuIDMwMTpcXHRcXHRcXHRcXHRcXHRzb2NrX3B1dChzayk7IC8qIHBhc3NpdmUgY2xvc2luZyAqL1xcbiAzMDI6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBTTUNfTElTVEVOKSB7XFxuIDMwMzpcXHRcXHRcXHRcXHRcXHQvKiB3YWtlIHVwIGNsY3NvY2sgYWNjZXB0ICovXFxuIDMwNDpcXHRcXHRcXHRcXHRcXHRyYyA9IGtlcm5lbF9zb2NrX3NodXRkb3duKHNtYy1cXHUwMDNlY2xjc29jayxcXG4gMzA1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgU0hVVF9SRFdSKTtcXG4gMzA2OlxcdFxcdFxcdFxcdH1cXG4gMzA3OlxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IFNNQ19DTE9TRUQ7XFxuIDMwODpcXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcXG4gMzA5OlxcdFxcdFxcdH1cXG4gMzEwOlxcdFxcdFxcdHNtY19yZXN0b3JlX2ZhbGxiYWNrX2NoYW5nZXMoc21jKTtcXG4gMzExOlxcdFxcdH1cXG4gMzEyOlxcdFxcbiAzMTM6XFx0XFx0c2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZXVuaGFzaChzayk7XFxuIDMxNDpcXHRcXG4gMzE1OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gU01DX0NMT1NFRCkge1xcbiAzMTY6XFx0XFx0XFx0aWYgKHNtYy1cXHUwMDNlY2xjc29jaykge1xcbiAzMTc6XFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gMzE4OlxcdFxcdFxcdFxcdHNtY19jbGNzb2NrX3JlbGVhc2Uoc21jKTtcXG4gMzE5OlxcdFxcdFxcdFxcdGxvY2tfc29jayhzayk7XFxuIDMyMDpcXHRcXHRcXHR9XFxuIDMyMTpcXHRcXHRcXHRpZiAoIXNtYy1cXHUwMDNldXNlX2ZhbGxiYWNrKVxcbiAzMjI6XFx0XFx0XFx0XFx0c21jX2Nvbm5fZnJlZShcXHUwMDI2c21jLVxcdTAwM2Vjb25uKTtcXG4gMzIzOlxcdFxcdH1cXG4gMzI0OlxcdFxcbiAzMjU6XFx0XFx0cmV0dXJuIHJjO1xcbiAzMjY6XFx0fVxcbiAzMjc6XFx0XFxuIDMyODpcXHRpbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4gMzI5OlxcdHtcXG4gMzMwOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiAzMzE6XFx0XFx0c3RydWN0IHNtY19zb2NrICpzbWM7XFxuIDMzMjpcXHRcXHRpbnQgb2xkX3N0YXRlLCByYyA9IDA7XFxuIDMzMzpcXHRcXG4gMzM0OlxcdFxcdGlmICghc2spXFxuIDMzNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMzM2OlxcdFxcbiAzMzc6XFx0XFx0c29ja19ob2xkKHNrKTsgLyogc29ja19wdXQgYmVsb3cgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MTIuNjcwNTYxMDQyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjMxODIzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTUMgU29ja2V0IFJlbGVhc2UgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgX19zbWNfcmVsZWFzZWAgZnVuY3Rpb24gYW5kIGl0J3MgY2FsbGluZyBgc2stXHUwMDNlc2tfcHJvdC1cdTAwM2V1bmhhc2goc2spYCBhbmQgYWxzbyBgc21jX2NsY3NvY2tfcmVsZWFzZShzbWMpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYC5kZXN0cm95YCBtZXRob2QgaW50byBgc21jX2luZXRfcHJvdGAgYW5kIGBzbWNfaW5ldDZfcHJvdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBfX3NtY19yZWxlYXNlYCBldmVuICp1c2VzKiB0aG9zZSBpbmV0IHByb3RvY29scy5cblxuSGFuZyBvbi4gYF9fc21jX3JlbGVhc2VgIGlzIGFjdHVhbGx5IHVzZWQgZm9yIGBzbWNfcHJvdG9gIGFuZCBgc21jX3Byb3RvNmAsIHdoaWNoIGFyZSBmb3IgYEFGX1NNQ2Agc29ja2V0cy4gVGhhdCBtYWtlcyBzZW5zZS4gQnV0IHRoZSBgc21jX2luZXRfcHJvdGAgcHJvdG9jb2xzIGFyZSB1c2VkIGZvciBgSVBQUk9UT19TTUNgIHdpdGhpbiBgQUZfSU5FVGAgYW5kIGBBRl9JTkVUNmAuIE9rYXksIHNvIGBfX3NtY19yZWxlYXNlYCBpc24ndCBkaXJlY3RseSByZWxhdGVkIHRvIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyB3aXRoIHRob3NlIHNwZWNpZmljIGluZXQgcHJvdG9jb2xzLlxuXG5UbyBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHByb3RvY29scyBhbmQgaG93IHRoZXkncmUgcmVsZWFzZWQgSSdsbCBjaGVjayBgc21jX2luZXRfcHJvdGAgaW4gYG5ldC9zbWMvc21jX2luZXQuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTgyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MTcuNzkzNzQ2MDU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL3NtY19pbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjM6XFx0c3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0ge1xcbiAgMjQ6XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJJTkVUX1NNQ1xcXCIsXFxuICAyNTpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAgMjY6XFx0XFx0LmluaXRcXHRcXHQ9IHNtY19pbmV0X2luaXRfc29jayxcXG4gIDI3OlxcdFxcdC5kZXN0cm95XFx0PSBzbWNfaW5ldF9kZXN0cm95X3NvY2ssXFxuICAyODpcXHRcXHQuaGFzaFxcdFxcdD0gc21jX2hhc2hfc2ssXFxuICAyOTpcXHRcXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbiAgMzA6XFx0XFx0LnJlbGVhc2VfY2JcXHQ9IHNtY19yZWxlYXNlX2NiLFxcbiAgMzE6XFx0XFx0Lm9ial9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHNtY19zb2NrKSxcXG4gIDMyOlxcdFxcdC5oLnNtY19oYXNoXFx0PSBcXHUwMDI2c21jX3Y0X2hhc2hpbmZvLFxcbiAgMzM6XFx0XFx0LnNsYWJfZmxhZ3NcXHQ9IFNMQUJfVFlQRVNBRkVfQllfUkNVLFxcbiAgMzQ6XFx0fTtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc21jX2luZXRfc3RyZWFtX29wcyA9IHtcXG4gIDM3OlxcdFxcdC5mYW1pbHlcXHRcXHQ9IFBGX0lORVQsXFxuICAzODpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAgMzk6XFx0XFx0LnJlbGVhc2VcXHQ9IHNtY19yZWxlYXNlLFxcbiAgNDA6XFx0XFx0LmJpbmRcXHRcXHQ9IHNtY19iaW5kLFxcbiAgNDE6XFx0XFx0LmNvbm5lY3RcXHQ9IHNtY19jb25uZWN0LFxcbiAgNDI6XFx0XFx0LnNvY2tldHBhaXJcXHQ9IHNvY2tfbm9fc29ja2V0cGFpcixcXG4gIDQzOlxcdFxcdC5hY2NlcHRcXHRcXHQ9IHNtY19hY2NlcHQsXFxuICA0NDpcXHRcXHQuZ2V0bmFtZVxcdD0gc21jX2dldG5hbWUsXFxuICA0NTpcXHRcXHQucG9sbFxcdFxcdD0gc21jX3BvbGwsXFxuICA0NjpcXHRcXHQuaW9jdGxcXHRcXHQ9IHNtY19pb2N0bCxcXG4gIDQ3OlxcdFxcdC5saXN0ZW5cXHRcXHQ9IHNtY19saXN0ZW4sXFxuICA0ODpcXHRcXHQuc2h1dGRvd25cXHQ9IHNtY19zaHV0ZG93bixcXG4gIDQ5OlxcdFxcdC5zZXRzb2Nrb3B0XFx0PSBzbWNfc2V0c29ja29wdCxcXG4gIDUwOlxcdFxcdC5nZXRzb2Nrb3B0XFx0PSBzbWNfZ2V0c29ja29wdCxcXG4gIDUxOlxcdFxcdC5zZW5kbXNnXFx0PSBzbWNfc2VuZG1zZyxcXG4gIDUyOlxcdFxcdC5yZWN2bXNnXFx0PSBzbWNfcmVjdm1zZyxcXG4gIDUzOlxcdFxcdC5tbWFwXFx0XFx0PSBzb2NrX25vX21tYXAsXFxuICA1NDpcXHRcXHQuc3BsaWNlX3JlYWRcXHQ9IHNtY19zcGxpY2VfcmVhZCxcXG4gIDU1OlxcdH07XFxuICA1NjpcXHRcXG4gIDU3OlxcdHN0YXRpYyBzdHJ1Y3QgaW5ldF9wcm90b3N3IHNtY19pbmV0X3Byb3Rvc3cgPSB7XFxuICA1ODpcXHRcXHQudHlwZVxcdFxcdD0gU09DS19TVFJFQU0sXFxuICA1OTpcXHRcXHQucHJvdG9jb2xcXHQ9IElQUFJPVE9fU01DLFxcbiAgNjA6XFx0XFx0LnByb3RcXHRcXHQ9IFxcdTAwMjZzbWNfaW5ldF9wcm90LFxcbiAgNjE6XFx0XFx0Lm9wc1xcdFxcdD0gXFx1MDAyNnNtY19pbmV0X3N0cmVhbV9vcHMsXFxuICA2MjpcXHR9O1xcbiAgNjM6XFx0XFxuICA2NDpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gIDY1OlxcdHN0cnVjdCBzbWM2X3NvY2sge1xcbiAgNjY6XFx0XFx0c3RydWN0IHNtY19zb2NrXFx0XFx0c21jO1xcbiAgNjc6XFx0XFx0c3RydWN0IGlwdjZfcGluZm9cXHRpbmV0NjtcXG4gIDY4OlxcdH07XFxuICA2OTpcXHRcXG4gIDcwOlxcdHN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXQ2X3Byb3QgPSB7XFxuICA3MTpcXHRcXHQubmFtZVxcdFxcdD0gXFxcIklORVQ2X1NNQ1xcXCIsXFxuICA3MjpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MzoxNy43OTM4NTgzNDZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk5MzE0NzM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU01DIFNvY2tldCBSZWxlYXNlIFByb2Nlc3MqKlxuXG5Pa2F5LCBsZXQgbWUgdHJhY2UgdGhpcyBgc21jX2luZXRfc3RyZWFtX29wcy5yZWxlYXNlYCBmdW5jdGlvbi4gQWgsIGl0J3MganVzdCBhIHBvaW50ZXIgdG8gYHNtY19yZWxlYXNlYC4gVGhhdCdzIGdvb2Q7IGtlZXBzIGl0IGNsZWFuLiBTbywgYHNtY19yZWxlYXNlYCBpcyB0aGUgaGVhcnQgb2YgdGhlIHNvY2tldCBjbG9zdXJlLiBJdCBtZWFucyB0aGlzIGlzIHdoYXQgZ2V0cyBjYWxsZWQgd2hlbiBhIGNvbm5lY3Rpb24gaXMgdGVybWluYXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGhlcmUuIFJpZ2h0LCBgc21jX3JlbGVhc2VgIGNhbGxzIGBfX3NtY19yZWxlYXNlYCwgd2hpY2ggaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuIFdpdGhpbiBgX19zbWNfcmVsZWFzZWAgSSBzZWUgYHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKHNrKWAg4oCTIHRoYXQncyBleHBlY3RlZCwgdW5saW5raW5nIHRoZSBzb2NrZXQgZnJvbSB0aGUgbmV0d29yayBoYXNoIHRhYmxlIOKAkyBhbmQgYHNtY19jbGNzb2NrX3JlbGVhc2Uoc21jKWAsIHdoaWNoIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBtb3JlIHRob3JvdWdobHkuXG5cbkJ1dCBob2xkIG9uLCBgc21jX3JlbGVhc2VgICphbHNvKiBjYWxscyBgc29ja19wdXQoc2spYC4gVGhhdCdzIHdoZXJlIHRoZSByZWZlcmVuY2UgY291bnRpbmcgY29tZXMgaW4uIFdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgc29ja2V0LCBgc2tgLCBkcm9wcyB0byB6ZXJvLCBgc2tfZnJlZWAgaXMgdHJpZ2dlcmVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gb24gdGhlIHJpZ2h0IHBhdGguIE5vdywgSSB0aG91Z2h0IGl0IHdhcyBgc2tfY29tbW9uX3JlbGVhc2VgIGNhbGxpbmcgYHNrX3Byb3QtXHUwMDNlZGVzdHJveShzaylgIGJ1dCBgc2tfZGVzdHJ1Y3RgIGNhbGxzIGBza19wcm90LVx1MDAzZWRlc3Ryb3lgLiBJdCdzIGFsbCBjb25uZWN0ZWQuIExldCBtZSBqdXN0IGNvbmZpcm0gZXhhY3RseSBob3cgYHNrX2NvbW1vbl9yZWxlYXNlYCBmdW5jdGlvbnMgdG8gcHJvdmlkZSBhIGZpcm0gdW5kZXJzdGFuZGluZy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gbm93IHRvIGJlIHN1cmUgSSBhbSB0cmFjaW5nIHRoaXMgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjUyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MjIuNzg3MDA4NzA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTgyODkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19jb21tb25fcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29jay5jPTQwMzU9RVhQT1JUX1NZTUJPTChzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0KTtcXG5uZXQvY29yZS9zb2NrLmMtNDAzNi1cXG5uZXQvY29yZS9zb2NrLmM6NDAzNzp2b2lkIHNrX2NvbW1vbl9yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrLmMtNDAzOC17XFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtNDA0Mi1cXHQvKlxcbm5ldC9jb3JlL3NvY2suYzo0MDQzOlxcdCAqIE9ic2VydmF0aW9uOiB3aGVuIHNrX2NvbW1vbl9yZWxlYXNlIGlzIGNhbGxlZCwgcHJvY2Vzc2VzIGhhdmVcXG5uZXQvY29yZS9zb2NrLmMtNDA0NC1cXHQgKiBubyBhY2Nlc3MgdG8gc29ja2V0LiBCdXQgbmV0IHN0aWxsIGhhcy5cXG4tLVxcbm5ldC9jb3JlL3NvY2suYy00MDY5LX1cXG5uZXQvY29yZS9zb2NrLmM6NDA3MDpFWFBPUlRfU1lNQk9MKHNrX2NvbW1vbl9yZWxlYXNlKTtcXG5uZXQvY29yZS9zb2NrLmMtNDA3MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MjIuODM2ODQxNTU0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTIzNjM0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBgc2tfY29tbW9uX3JlbGVhc2VgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYHNrX2NvbW1vbl9yZWxlYXNlYC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgY2hhbmdlZCBhbmQgd2hhdCdzIGluY2x1ZGVkIGhlcmUuIEdpdmVuIGl0cyBuYW1lLCBcImNvbW1vbiByZWxlYXNlLFwiIEknbSBleHBlY3RpbmcgYSBjb2xsZWN0aW9uIG9mIGZvdW5kYXRpb25hbCBvciBzaGFyZWQgY29tcG9uZW50cy4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGNvcmUgbGlicmFyaWVzIGFuZCB1dGlsaXR5IGZ1bmN0aW9ucyB0byBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gZmlsZXMgb3IgZXZlbiBzb21lIGVzc2VudGlhbCB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiBLbm93aW5nIHRoaXMgcmVsZWFzZSBpcyBcImNvbW1vblwiIGl0IGlzIGxpa2VseSBhIHNvdXJjZSBvZiBkZXBlbmRlbmN5IGZvciBtdWx0aXBsZSBvdGhlciBwcm9qZWN0cywgbWFraW5nIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgY2hhbmdlcyBjcml0aWNhbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHRhcmdldCBhdWRpZW5jZSBhbmQgd2hhdCBhcmVhcyBpdCBpcyBhZmZlY3Rpbmcgc28gSSBhbSBub3QgbWlzc2luZyBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MjYuNzI5MjA4ODRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDM3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MDM3OlxcdHZvaWQgc2tfY29tbW9uX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxcbjQwMzg6XFx0e1xcbjQwMzk6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkZXN0cm95KVxcbjQwNDA6XFx0XFx0XFx0c2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRlc3Ryb3koc2spO1xcbjQwNDE6XFx0XFxuNDA0MjpcXHRcXHQvKlxcbjQwNDM6XFx0XFx0ICogT2JzZXJ2YXRpb246IHdoZW4gc2tfY29tbW9uX3JlbGVhc2UgaXMgY2FsbGVkLCBwcm9jZXNzZXMgaGF2ZVxcbjQwNDQ6XFx0XFx0ICogbm8gYWNjZXNzIHRvIHNvY2tldC4gQnV0IG5ldCBzdGlsbCBoYXMuXFxuNDA0NTpcXHRcXHQgKiBTdGVwIG9uZSwgZGV0YWNoIGl0IGZyb20gbmV0d29ya2luZzpcXG40MDQ2OlxcdFxcdCAqXFxuNDA0NzpcXHRcXHQgKiBBLiBSZW1vdmUgZnJvbSBoYXNoIHRhYmxlcy5cXG40MDQ4OlxcdFxcdCAqL1xcbjQwNDk6XFx0XFxuNDA1MDpcXHRcXHRzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNldW5oYXNoKHNrKTtcXG40MDUxOlxcdFxcbjQwNTI6XFx0XFx0LypcXG40MDUzOlxcdFxcdCAqIEluIHRoaXMgcG9pbnQgc29ja2V0IGNhbm5vdCByZWNlaXZlIG5ldyBwYWNrZXRzLCBidXQgaXQgaXMgcG9zc2libGVcXG40MDU0OlxcdFxcdCAqIHRoYXQgc29tZSBwYWNrZXRzIGFyZSBpbiBmbGlnaHQgYmVjYXVzZSBzb21lIENQVSBydW5zIHJlY2VpdmVyIGFuZFxcbjQwNTU6XFx0XFx0ICogZGlkIGhhc2ggdGFibGUgbG9va3VwIGJlZm9yZSB3ZSB1bmhhc2hlZCBzb2NrZXQuIFRoZXkgd2lsbCBhY2hpZXZlXFxuNDA1NjpcXHRcXHQgKiByZWNlaXZlIHF1ZXVlIGFuZCB3aWxsIGJlIHB1cmdlZCBieSBzb2NrZXQgZGVzdHJ1Y3Rvci5cXG40MDU3OlxcdFxcdCAqXFxuNDA1ODpcXHRcXHQgKiBBbHNvIHdlIHN0aWxsIGhhdmUgcGFja2V0cyBwZW5kaW5nIG9uIHJlY2VpdmUgcXVldWUgYW5kIHByb2JhYmx5LFxcbjQwNTk6XFx0XFx0ICogb3VyIG93biBwYWNrZXRzIHdhaXRpbmcgaW4gZGV2aWNlIHF1ZXVlcy4gc29ja19kZXN0cm95IHdpbGwgZHJhaW5cXG40MDYwOlxcdFxcdCAqIHJlY2VpdmUgcXVldWUsIGJ1dCB0cmFuc21pdHRlZCBwYWNrZXRzIHdpbGwgZGVsYXkgc29ja2V0IGRlc3RydWN0aW9uXFxuNDA2MTpcXHRcXHQgKiB1bnRpbCB0aGUgbGFzdCByZWZlcmVuY2Ugd2lsbCBiZSByZWxlYXNlZC5cXG40MDYyOlxcdFxcdCAqL1xcbjQwNjM6XFx0XFxuNDA2NDpcXHRcXHRzb2NrX29ycGhhbihzayk7XFxuNDA2NTpcXHRcXG40MDY2OlxcdFxcdHhmcm1fc2tfZnJlZV9wb2xpY3koc2spO1xcbjQwNjc6XFx0XFxuNDA2ODpcXHRcXHRzb2NrX3B1dChzayk7XFxuNDA2OTpcXHR9XFxuNDA3MDpcXHRFWFBPUlRfU1lNQk9MKHNrX2NvbW1vbl9yZWxlYXNlKTtcXG40MDcxOlxcdFxcbjQwNzI6XFx0dm9pZCBza19nZXRfbWVtaW5mbyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHUzMiAqbWVtKVxcbjQwNzM6XFx0e1xcbjQwNzQ6XFx0XFx0bWVtc2V0KG1lbSwgMCwgc2l6ZW9mKCptZW0pICogU0tfTUVNSU5GT19WQVJTKTtcXG40MDc1OlxcdFxcbjQwNzY6XFx0XFx0bWVtW1NLX01FTUlORk9fUk1FTV9BTExPQ10gPSBza19ybWVtX2FsbG9jX2dldChzayk7XFxuNDA3NzpcXHRcXHRtZW1bU0tfTUVNSU5GT19SQ1ZCVUZdID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpO1xcbjQwNzg6XFx0XFx0bWVtW1NLX01FTUlORk9fV01FTV9BTExPQ10gPSBza193bWVtX2FsbG9jX2dldChzayk7XFxuNDA3OTpcXHRcXHRtZW1bU0tfTUVNSU5GT19TTkRCVUZdID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19zbmRidWYpO1xcbjQwODA6XFx0XFx0bWVtW1NLX01FTUlORk9fRldEX0FMTE9DXSA9IFJFQURfT05DRShzay1cXHUwMDNlc2tfZm9yd2FyZF9hbGxvYyk7XFxuNDA4MTpcXHRcXHRtZW1bU0tfTUVNSU5GT19XTUVNX1FVRVVFRF0gPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3dtZW1fcXVldWVkKTtcXG40MDgyOlxcdFxcdG1lbVtTS19NRU1JTkZPX09QVE1FTV0gPSBhdG9taWNfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX29tZW1fYWxsb2MpO1xcbjQwODM6XFx0XFx0bWVtW1NLX01FTUlORk9fQkFDS0xPR10gPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2JhY2tsb2cubGVuKTtcXG40MDg0OlxcdFxcdG1lbVtTS19NRU1JTkZPX0RST1BTXSA9IHNrX2Ryb3BzX3JlYWQoc2spO1xcbjQwODU6XFx0fVxcbjQwODY6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQzOjI2LjcyOTM5NTE4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNjg5MzgxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmFjZSBDb25kaXRpb24gRml4IGluIFNNQyBTb2NrZXQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4gZ29lcyB0byB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzLiBgc2tfY29tbW9uX3JlbGVhc2VgIGNhbGxzIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRlc3Ryb3koc2spYCB0aGVuIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzaylgLiBUaGlzIHBhdGNoIGFkZHMgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AsIHdoaWNoLCBjcnVjaWFsbHksIGNhbGxzIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzaylgICpiZWZvcmUqIGBzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpYC4gVGhlIGNvbW1lbnQgaXMga2V5IGhlcmUuIEl0J3MgaGlnaGxpZ2h0aW5nIGEgcG90ZW50aWFsIHJhY2UuIGBzbWNfZGlhZ2AgY2FuIGR1bXAgZGF0YSB0aGF0IGRlcmVmZXJlbmNlcyBgc21jLVx1MDAzZWNsY3NvY2tgIHdpdGhvdXQgdGhlIGBjbGNzb2NrX3JlbGVhc2VfbG9ja2AsIHdoaWxlIHRoZSBzdGFuZGFyZCBgc2tfY29tbW9uX3JlbGVhc2UoKWAgZGVzdHJveXMgdGhpbmdzIGluIHRoZSB3cm9uZyBvcmRlciAoLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2gpLlxuXG5UaGlzIG5ldyBvcmRlcmluZywgdW5oYXNoaW5nICpiZWZvcmUqIGFueSB0ZWFyZG93biwgaXMgZGVzaWduZWQgdG8gcHJldmVudCBhIGR1bXAgZnJvbSBvYnNlcnZpbmcgdGhlIHNvY2tldCBiZWluZyBmcmVlZC4gVGhlIHNlY29uZCB1bmhhc2ggaXMsIG9mIGNvdXJzZSwgYSBuby1vcCwgYnV0IGl0J3MgdGhlIGZpcnN0IG9uZSB0aGF0IG1hdHRlcnMuIFNvLCBpdCdzIGEgcmFjZSBjb25kaXRpb24gZml4LiBJIHNlZSBpdCBub3cuXG5cbkJlY2F1c2UgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AgaXMgc3RhdGljLCBJIGNhbid0IHJlYWxseSBkaWcgaW50byB0aGF0IGRpcmVjdGx5LCBidXQgaXQgbWFrZXMgbWUgY29uc2lkZXIgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zOiBgc21jX3JlbGVhc2VgLCBgc21jX2NsY3NvY2tfcmVsZWFzZWAsIGBzbWNfaW5ldF9pbml0X3NvY2tgLCBhbmQsIGVzcGVjaWFsbHksIGBzbWNfZGlhZ19kdW1wYC4gV2hlcmUgaXMgdGhhdD8gQWgsIHllcywgYG5ldC9zbWMvc21jX2RpYWcuY2AuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNtY19kaWFnX2R1bXBgIG5vdyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSB2dWxuZXJhYmlsaXR5IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MzozMi43OTgzMzY3NDJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjI0NTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfZGlhZ19kdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvc21jX2RpYWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19kaWFnLmMtMjUtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjI2OnN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCB7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTI3LVxcdGludCBwb3NbMl07XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMjktXFxubmV0L3NtYy9zbWNfZGlhZy5jOjMwOnN0YXRpYyBzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKnNtY19kdW1wX2NvbnRleHQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9zbWMvc21jX2RpYWcuYy0zMS17XFxubmV0L3NtYy9zbWNfZGlhZy5jOjMyOlxcdHJldHVybiAoc3RydWN0IHNtY19kaWFnX2R1bXBfY3R4ICopY2ItXFx1MDAzZWN0eDtcXG5uZXQvc21jL3NtY19kaWFnLmMtMzMtfVxcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jPTYwPXN0YXRpYyBpbnQgc21jX2RpYWdfbXNnX2F0dHJzX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTcxLVxcbm5ldC9zbWMvc21jX2RpYWcuYzo3MjpzdGF0aWMgaW50IF9fc21jX2RpYWdfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTczLVxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xOTUtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjE5NjpzdGF0aWMgaW50IHNtY19kaWFnX2R1bXBfcHJvdG8oc3RydWN0IHByb3RvICpwcm90LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zbWMvc21jX2RpYWcuYy0xOTctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IHBfdHlwZSlcXG5uZXQvc21jL3NtY19kaWFnLmMtMTk4LXtcXG5uZXQvc21jL3NtY19kaWFnLmM6MTk5OlxcdHN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCAqY2JfY3R4ID0gc21jX2R1bXBfY29udGV4dChjYik7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTIwMC1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMTYtXFx0XFx0XFx0Z290byBuZXh0O1xcbm5ldC9zbWMvc21jX2RpYWcuYzoyMTc6XFx0XFx0cmMgPSBfX3NtY19kaWFnX2R1bXAoc2ssIHNrYiwgY2IsIG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCksIGJjKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjE4LVxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMjI5LVxcbm5ldC9zbWMvc21jX2RpYWcuYzoyMzA6c3RhdGljIGludCBzbWNfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvc21jL3NtY19kaWFnLmMtMjMxLXtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzMtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjIzNDpcXHRyYyA9IHNtY19kaWFnX2R1bXBfcHJvdG8oXFx1MDAyNnNtY19wcm90bywgc2tiLCBjYiwgU01DUFJPVE9fU01DKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjM1LVxcdGlmICghcmMpXFxubmV0L3NtYy9zbWNfZGlhZy5jOjIzNjpcXHRcXHRzbWNfZGlhZ19kdW1wX3Byb3RvKFxcdTAwMjZzbWNfcHJvdG82LCBza2IsIGNiLCBTTUNQUk9UT19TTUM2KTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjM3LVxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYz0yNDA9c3RhdGljIGludCBzbWNfZGlhZ19oYW5kbGVyX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpoKVxcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI0Ny1cXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19kdW1wX2NvbnRyb2wgYyA9IHtcXG5uZXQvc21jL3NtY19kaWFnLmM6MjQ4OlxcdFxcdFxcdFxcdC5kdW1wID0gc21jX2RpYWdfZHVtcCxcXG5uZXQvc21jL3NtY19kaWFnLmMtMjQ5LVxcdFxcdFxcdFxcdC5taW5fZHVtcF9hbGxvYyA9IFNLQl9XSVRIX09WRVJIRUFEKDMyNzY4KSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MzMuMjM0NTkxMDk3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDQyODA0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgY29uZmlncyBlbmFibGVkLiBJdCBsb29rcyBsaWtlIEknbSBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgYm90aCBgU01DYCBhbmQgYFNNQ19ESUFHYC4gQnV0IGhhbmcgb24gYSBzZWNvbmQuLi4gd2hlbiBJIGxvb2sgYXQgd2hhdCBgc21jX2RpYWdfZHVtcGAgYWN0dWFsbHkgKmR1bXBzKiwgaXQncyBsaXN0aW5nIGBzbWNfcHJvdG9gIGFuZCBgc21jX3Byb3RvNmAuIFdoZXJlJ3MgYHNtY19pbmV0X3Byb3RgIGluIHRoYXQgbWl4PyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHNtY19kaWFnX2R1bXBgIHByb2Nlc3MgYWdhaW4gdG8gZW5zdXJlIEknbSBjYXB0dXJpbmcgZXZlcnl0aGluZyByZWxldmFudC4gU29tZXRoaW5nIGZlZWxzIG9mZiwgc28gYmV0dGVyIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc3OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQzOjM2LjY3ODg3NDQ3OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL3NtY19kaWFnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjMwOlxcdHN0YXRpYyBpbnQgc21jX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIDIzMTpcXHR7XFxuIDIzMjpcXHRcXHRpbnQgcmMgPSAwO1xcbiAyMzM6XFx0XFxuIDIzNDpcXHRcXHRyYyA9IHNtY19kaWFnX2R1bXBfcHJvdG8oXFx1MDAyNnNtY19wcm90bywgc2tiLCBjYiwgU01DUFJPVE9fU01DKTtcXG4gMjM1OlxcdFxcdGlmICghcmMpXFxuIDIzNjpcXHRcXHRcXHRzbWNfZGlhZ19kdW1wX3Byb3RvKFxcdTAwMjZzbWNfcHJvdG82LCBza2IsIGNiLCBTTUNQUk9UT19TTUM2KTtcXG4gMjM3OlxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4gMjM4OlxcdH1cXG4gMjM5OlxcdFxcbiAyNDA6XFx0c3RhdGljIGludCBzbWNfZGlhZ19oYW5kbGVyX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpoKVxcbiAyNDE6XFx0e1xcbiAyNDI6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdFxcdGlmIChoLVxcdTAwM2VubG1zZ190eXBlID09IFNPQ0tfRElBR19CWV9GQU1JTFkgXFx1MDAyNlxcdTAwMjZcXG4gMjQ1OlxcdFxcdCAgICBoLVxcdTAwM2VubG1zZ19mbGFncyBcXHUwMDI2IE5MTV9GX0RVTVApIHtcXG4gMjQ2OlxcdFxcdFxcdHtcXG4gMjQ3OlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xcbiAyNDg6XFx0XFx0XFx0XFx0XFx0LmR1bXAgPSBzbWNfZGlhZ19kdW1wLFxcbiAyNDk6XFx0XFx0XFx0XFx0XFx0Lm1pbl9kdW1wX2FsbG9jID0gU0tCX1dJVEhfT1ZFUkhFQUQoMzI3NjgpLFxcbiAyNTA6XFx0XFx0XFx0XFx0fTtcXG4gMjUxOlxcdFxcdFxcdFxcdHJldHVybiBuZXRsaW5rX2R1bXBfc3RhcnQobmV0LVxcdTAwM2VkaWFnX25sc2ssIHNrYiwgaCwgXFx1MDAyNmMpO1xcbiAyNTI6XFx0XFx0XFx0fVxcbiAyNTM6XFx0XFx0fVxcbiAyNTQ6XFx0XFx0cmV0dXJuIDA7XFxuIDI1NTpcXHR9XFxuIDI1NjpcXHRcXG4gMjU3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja19kaWFnX2hhbmRsZXIgc21jX2RpYWdfaGFuZGxlciA9IHtcXG4gMjU4OlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbiAyNTk6XFx0XFx0LmZhbWlseSA9IEFGX1NNQyxcXG4gMjYwOlxcdFxcdC5kdW1wID0gc21jX2RpYWdfaGFuZGxlcl9kdW1wLFxcbiAyNjE6XFx0fTtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0c3RhdGljIGludCBfX2luaXQgc21jX2RpYWdfaW5pdCh2b2lkKVxcbiAyNjQ6XFx0e1xcbiAyNjU6XFx0XFx0cmV0dXJuIHNvY2tfZGlhZ19yZWdpc3RlcihcXHUwMDI2c21jX2RpYWdfaGFuZGxlcik7XFxuIDI2NjpcXHR9XFxuIDI2NzpcXHRcXG4gMjY4OlxcdHN0YXRpYyB2b2lkIF9fZXhpdCBzbWNfZGlhZ19leGl0KHZvaWQpXFxuIDI2OTpcXHR7XFxuIDI3MDpcXHRcXHRzb2NrX2RpYWdfdW5yZWdpc3RlcihcXHUwMDI2c21jX2RpYWdfaGFuZGxlcik7XFxuIDI3MTpcXHR9XFxuIDI3MjpcXHRcXG4gMjczOlxcdG1vZHVsZV9pbml0KHNtY19kaWFnX2luaXQpO1xcbiAyNzQ6XFx0bW9kdWxlX2V4aXQoc21jX2RpYWdfZXhpdCk7XFxuIDI3NTpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIDI3NjpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlNNQyBzb2NrZXQgbW9uaXRvcmluZyB2aWEgU09DS19ESUFHXFxcIik7XFxuIDI3NzpcXHRNT0RVTEVfQUxJQVNfTkVUX1BGX1BST1RPX1RZUEUoUEZfTkVUTElOSywgTkVUTElOS19TT0NLX0RJQUcsIDQzIC8qIEFGX1NNQyAqLyk7XFxuIDI3ODpcXHRNT0RVTEVfQUxJQVNfR0VOTF9GQU1JTFkoU01DUl9HRU5MX0ZBTUlMWV9OQU1FKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MzYuNjc4OTUzNzc4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTQ2NDA2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5IFJlZ2FyZGluZyBTTUMgRGlhZ25vc3RpY3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB3ZSdyZSBkaWFnbm9zaW5nIFNNQyBjb25uZWN0aW9ucyBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHdoYXQgd2UncmUgZHVtcGluZy4gVGhlIGBzbWNfZGlhZ19kdW1wYCB0b29s4oCmIHJpZ2h0LCBpdCBjbGVhcmx5IGNhcHR1cmVzIGRhdGEgZnJvbSBgc21jX3Byb3RvYCBhbmQgYHNtY19wcm90bzZgLiBHb29kLiBCdXQgd2FpdOKApiB3aGF0IGFib3V0IGBzbWNfaW5ldF9wcm90YD8gRG9lcyBgc21jX2RpYWdfZHVtcGAgYWN0dWFsbHkgaW5jbHVkZSB0aGF0IGluZm9ybWF0aW9uPyBObywgaXQgZG9lc24ndCBzZWVtIHRvLCB3aGljaCBpcyBhIGtleSBwb2ludCBvZiBjbGFyaWZpY2F0aW9uLlxuXG5UaGlua2luZyBpdCB0aHJvdWdoLCBgc21jX2luZXRfcHJvdGAgaXMgc3BlY2lmaWMgdG8gYElQUFJPVE9fU01DYCBzb2NrZXRzLCBhbmQgSSBuZWVkIHRvIGtub3cgaWYgd2UgYXJlIGdldHRpbmcgYSBjb21wbGV0ZSBwaWN0dXJlIHdpdGggYHNtY19kaWFnX2R1bXBgLiBTbywgdG8gYmUgdGhvcm91Z2ggYW5kIGNvcnJlY3QsIEkgc2hvdWxkIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBzcGVjaWZpY2FsbHkgYHNtY19kaWFnX2R1bXBfcHJvdG9gLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCB0aG91Z2h0cyBhYm91dCB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODI0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6NDAuODMzNTk4MTc1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX2RpYWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTYsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTY6XFx0c3RhdGljIGludCBzbWNfZGlhZ19kdW1wX3Byb3RvKHN0cnVjdCBwcm90byAqcHJvdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMTk3OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCBwX3R5cGUpXFxuIDE5ODpcXHR7XFxuIDE5OTpcXHRcXHRzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKmNiX2N0eCA9IHNtY19kdW1wX2NvbnRleHQoY2IpO1xcbiAyMDA6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuIDIwMTpcXHRcXHRpbnQgc251bSA9IGNiX2N0eC1cXHUwMDNlcG9zW3BfdHlwZV07XFxuIDIwMjpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpiYyA9IE5VTEw7XFxuIDIwMzpcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcXG4gMjA0OlxcdFxcdGludCByYyA9IDAsIG51bSA9IDA7XFxuIDIwNTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuIDIwNjpcXHRcXG4gMjA3OlxcdFxcdHJlYWRfbG9jayhcXHUwMDI2cHJvdC1cXHUwMDNlaC5zbWNfaGFzaC1cXHUwMDNlbG9jayk7XFxuIDIwODpcXHRcXHRoZWFkID0gXFx1MDAyNnByb3QtXFx1MDAzZWguc21jX2hhc2gtXFx1MDAzZWh0O1xcbiAyMDk6XFx0XFx0aWYgKGhsaXN0X2VtcHR5KGhlYWQpKVxcbiAyMTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdHNrX2Zvcl9lYWNoKHNrLCBoZWFkKSB7XFxuIDIxMzpcXHRcXHRcXHRpZiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpXFxuIDIxNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMjE1OlxcdFxcdFxcdGlmIChudW0gXFx1MDAzYyBzbnVtKVxcbiAyMTY6XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbiAyMTc6XFx0XFx0XFx0cmMgPSBfX3NtY19kaWFnX2R1bXAoc2ssIHNrYiwgY2IsIG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCksIGJjKTtcXG4gMjE4OlxcdFxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuIDIxOTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjIwOlxcdG5leHQ6XFxuIDIyMTpcXHRcXHRcXHRudW0rKztcXG4gMjIyOlxcdFxcdH1cXG4gMjIzOlxcdFxcbiAyMjQ6XFx0b3V0OlxcbiAyMjU6XFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNnByb3QtXFx1MDAzZWguc21jX2hhc2gtXFx1MDAzZWxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mzo0MC44MzM2Nzc2NDVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMjY4NjM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgU01DIFByb3RvY29sIEhhc2ggVGFibGUgVXNhZ2UqKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyB0aGF0IGBzbWNfcHJvdG9gIGFuZCBgc21jX3Byb3RvNmAgYXJlIGxpa2VseSBzaGFyaW5nIGEgaGFzaCB0YWJsZSB3aXRoIGBzbWNfaW5ldF9wcm90YC4gVGhhdCdzIGFuIGludGVyZXN0aW5nIGFyY2hpdGVjdHVyYWwgY2hvaWNlLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgY29udGVudGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZS4gTXkgZ3V0IGZlZWxpbmcgaXMgaXQncyBwcm9iYWJseSBiZXN0IHRvIHZlcmlmeSB0aGUgY29kZSBkaXJlY3RseS4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGBuZXQvc21jL2FmX3NtYy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb25uZWN0aW9uIGFuZCBzb2NrZXQgbWFuYWdlbWVudCBmb3IgU01DLCBhbmQgU01DdjYgYXJlIHN0cnVjdHVyZWQgYW5kIHZlcmlmeSBpZiBteSBpbnR1aXRpb24gaXMgcmlnaHQuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBiZXN0IHZpZXcgb24gaWYgdGhlIGltcGxlbWVudGF0aW9uIG1ha2VzIGxvZ2ljYWwgc2Vuc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjY2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mzo0NC40NjYzNjY4MTFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvYWZfc21jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM4LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM4OlxcdHN0cnVjdCBwcm90byBzbWNfcHJvdG8gPSB7XFxuIDIzOTpcXHRcXHQubmFtZVxcdFxcdD0gXFxcIlNNQ1xcXCIsXFxuIDI0MDpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAyNDE6XFx0XFx0LmtlZXBhbGl2ZVxcdD0gc21jX3NldF9rZWVwYWxpdmUsXFxuIDI0MjpcXHRcXHQuaGFzaFxcdFxcdD0gc21jX2hhc2hfc2ssXFxuIDI0MzpcXHRcXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbiAyNDQ6XFx0XFx0LnJlbGVhc2VfY2JcXHQ9IHNtY19yZWxlYXNlX2NiLFxcbiAyNDU6XFx0XFx0Lm9ial9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHNtY19zb2NrKSxcXG4gMjQ2OlxcdFxcdC5oLnNtY19oYXNoXFx0PSBcXHUwMDI2c21jX3Y0X2hhc2hpbmZvLFxcbiAyNDc6XFx0XFx0LnNsYWJfZmxhZ3NcXHQ9IFNMQUJfVFlQRVNBRkVfQllfUkNVLFxcbiAyNDg6XFx0fTtcXG4gMjQ5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHNtY19wcm90byk7XFxuIDI1MDpcXHRcXG4gMjUxOlxcdHN0cnVjdCBwcm90byBzbWNfcHJvdG82ID0ge1xcbiAyNTI6XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJTTUM2XFxcIixcXG4gMjUzOlxcdFxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuIDI1NDpcXHRcXHQua2VlcGFsaXZlXFx0PSBzbWNfc2V0X2tlZXBhbGl2ZSxcXG4gMjU1OlxcdFxcdC5oYXNoXFx0XFx0PSBzbWNfaGFzaF9zayxcXG4gMjU2OlxcdFxcdC51bmhhc2hcXHRcXHQ9IHNtY191bmhhc2hfc2ssXFxuIDI1NzpcXHRcXHQucmVsZWFzZV9jYlxcdD0gc21jX3JlbGVhc2VfY2IsXFxuIDI1ODpcXHRcXHQub2JqX3NpemVcXHQ9IHNpemVvZihzdHJ1Y3Qgc21jX3NvY2spLFxcbiAyNTk6XFx0XFx0Lmguc21jX2hhc2hcXHQ9IFxcdTAwMjZzbWNfdjZfaGFzaGluZm8sXFxuIDI2MDpcXHRcXHQuc2xhYl9mbGFnc1xcdD0gU0xBQl9UWVBFU0FGRV9CWV9SQ1UsXFxuIDI2MTpcXHR9O1xcbiAyNjI6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc21jX3Byb3RvNik7XFxuIDI2MzpcXHRcXG4gMjY0OlxcdHN0YXRpYyB2b2lkIHNtY19mYmFja19yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4gMjY1OlxcdHtcXG4gMjY2OlxcdFxcdHN0cnVjdCBzb2NrICpjbGNzayA9IHNtYy1cXHUwMDNlY2xjc29jay1cXHUwMDNlc2s7XFxuIDI2NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6NDQuNDY2NTI2NjQxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4OTkwMjI0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29uY3VycmVuY3kgQnVnIGluIFNNQyBEaWFnbm9zdGljIER1bXBzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBgc21jX3Byb3RvYCBjb2RlIHV0aWxpemVzIGBzbWNfdjRfaGFzaGluZm9gLCB3aGlsZSBgc21jX3Byb3RvNmAgdXNlcyBgc21jX3Y2X2hhc2hpbmZvYC4gU2ltaWxhcmx5LCBgc21jX2luZXRfcHJvdGAgdXNlcyBgc21jX3Y0X2hhc2hpbmZvYCBhbmQgYHNtY19pbmV0Nl9wcm90YCB1c2VzIGBzbWNfdjZfaGFzaGluZm9gLiBBbmQsIGBzbWNfZGlhZ19kdW1wX3Byb3RvYCBjb3ZlcnMgYWxsIG9mIHRoZXNlLiBUaGUgY3JpdGljYWwgaXNzdWUgaXMgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGRpYWdub3N0aWMgZHVtcCBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIGBzbWNfZGlhZ19kdW1wYCBpcyBkZXJlZmVyZW5jaW5nIGBzbWMtXHUwMDNlY2xjc29ja2Agd2l0aG91dCB0aGUgbmVjZXNzYXJ5IGBjbGNzb2NrX3JlbGVhc2VfbG9ja2AsIHJpZ2h0PyBUaGlzIGlzIGhhcHBlbmluZyB3aGlsZSBgc2tfY29tbW9uX3JlbGVhc2VgIGlzIGdvaW5nIHRocm91Z2ggaXRzIHN0ZXBzLCBjYWxsaW5nIHRoZSBgLmRlc3Ryb3lgIG1ldGhvZCAqYmVmb3JlKiBgLnVuaGFzaGAuXG5cblNvLCB3ZSd2ZSBnb3QgYSBzaXR1YXRpb24gd2hlcmUgdGhlIHNvY2tldCBpcyBzdGlsbCBpbiB0aGUgaGFzaCB0YWJsZSB3aGVuIGAuZGVzdHJveWAgZ2V0cyBjYWxsZWQuIFRoZSBgLmRlc3Ryb3lgIGZ1bmN0aW9uIGluIHRoaXMgY29udGV4dCBpcyBgc21jX2luZXRfZGVzdHJveV9zb2NrYCwgd2hpY2ggaXRzZWxmIGNhbGxzIGBzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpYC4gVGhpcyBgc21jX2NsY3NvY2tfcmVsZWFzZWAgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIHByb2JsZW0gaXMgbW9zdCBsaWtlbHkgY29taW5nIGZyb20sIGFzIGl0IGVpdGhlciBzZXRzIGBzbWMtXHUwMDNlY2xjc29ja2AgdG8gTlVMTCBvciBmcmVlcyBpdCBjb21wbGV0ZWx5LiBUaGUgcmFjZSBpcyB0aGF0IGlmIGBzbWNfZGlhZ19kdW1wYCBydW5zIGNvbmN1cnJlbnRseSwgaXQgY291bGQgcG90ZW50aWFsbHkgc2VlIGBzbWMtXHUwMDNlY2xjc29ja2AgYmVpbmcgcmVsZWFzZWQgcmlnaHQgb3V0IGZyb20gdW5kZXIgaXQuXG5cblRoZSBpbW1lZGlhdGUgZml4IGlzIGNsZWFyOiB1bmhhc2ggdGhlIHNvY2tldCAqYmVmb3JlKiBkZXN0cm95aW5nIGl0IGluIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gc29ja2V0IHRlYXJkb3duLCBzbyBpdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBgU01DYCBhbmQgYFNNQ19ESUFHYC4gTXkgZm9jdXMgbm93IHdpbGwgYmUgb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgbmFtZWx5IGBzbWNfcmVsZWFzZWAsIGBzbWNfY2xjc29ja19yZWxlYXNlYCwgYHNtY19kaWFnX2R1bXBgLCBhbmQgYHNtY19kaWFnX2R1bXBfcHJvdG9gLlxuXG5XYWl0Li4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBIYW5nIG9uLCBgc21jX2RpYWdfZHVtcGAgYW5kIGBzbWNfZGlhZ19oYW5kbGVyX2R1bXBgIGFyZSBib3RoIHN0YXRpYywgcmlnaHQ/IElmIHRoYXQncyB0aGUgY2FzZSwgc2hvdWxkIEkgc3RpbGwgZm9jdXMgb24gdGhlbT8gVGhlIG1vcmUgbGlrZWx5IGNhbmRpZGF0ZSBzZWVtcyB0byBiZSBgc21jX3JlbGVhc2VgIGFuZCBgc21jX2NsY3NvY2tfcmVsZWFzZWAuIFllcCwgYHNtY19yZWxlYXNlYCBhbmQgYHNtY19jbGNzb2NrX3JlbGVhc2VgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB3YXRjaC4gSGFuZyBvbiwgd2FpdCBhIHNlY29uZC4gYHNtY19jbGNzb2NrX3JlbGVhc2VgIGlzIG5vdCBzdGF0aWMhIFBlcmZlY3QhIE5vdywgdGltZSB0byBqdXN0IGNoZWNrIGlmIGBzbWNfY2xjc29ja19yZWxlYXNlYCBpcyBleHBvcnRlZCBvciBqdXN0IGdsb2JhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0NzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mzo1My4zNjU1NTE4NTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODk3NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgc21jX2NsY3NvY2tfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19jbG9zZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2Nsb3NlLmMtMjMtLyogcmVsZWFzZSB0aGUgY2xjc29jayB0aGF0IGlzIGFzc2lnbmVkIHRvIHRoZSBzbWNfc29jayAqL1xcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MjQ6dm9pZCBzbWNfY2xjc29ja19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mzo1My40MzQ0NTc5MzNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxMDk0MjgyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBEaWFnbm9zdGljIENvbnRleHQqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGEgZ2xvYmFsIGlzc3VlLCBnb3QgaXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYHNtY19kaWFnX2R1bXBgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSBzdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgbmFycm93aW5nIGRvd24gdGhlIHNjb3BlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8ga25vdyB0aGUgb3JpZ2luIGFuZCB1c2UuXG5cbk5leHQgc3RlcDogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSBleHBvcnRlZCBmdW5jdGlvbnMgd2l0aGluIGBzbWNfZGlhZy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IHRoaXMgZmlsZSBvZmZlcnMgdG8gdGhlIHN5c3RlbSBhcyBhIHdob2xlLiBLbm93aW5nIHdoYXQncyBhdmFpbGFibGUgZm9yIG90aGVyIGNvbXBvbmVudHMgdG8gY2FsbCBpbnRvIGhlcmUgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBpbXBhY3Qgb2YgYHNtY19kaWFnX2R1bXBgLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlJ3MgYW4gaW50ZXJmYWNlIEkgY2FuIGxldmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY3NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQzOjU4Ljk0NTQwNDM3M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMDE4OTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mzo1OC45OTQ3MTU1NzJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMDg0ODI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQW5hbHl6aW5nIFNNQyBTb2NrZXQgSW5pdGlhbGl6YXRpb24gYW5kIFJlbGVhc2UgRnVuY3Rpb25zKipcblxuSG1tLCBubywgdGhhdCdzIG5vdCBxdWl0ZSByaWdodC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgc21jX2luZXRfaW5pdF9zb2NrYC4gTm93LCAqdGhhdCogb25lIGlzIHN0YXRpYywgaXNuJ3QgaXQ/IExldCdzIGtlZXAgdGhhdCBpbiBtaW5kLiBPa2F5LCB3aGF0IGFib3V0IGBzbWNfaW5ldF9pbml0YD8gQWgsIHllcywgYF9faW5pdGAuIFRoYXQncyBhIGRpZmZlcmVudCBiZWFzdCBlbnRpcmVseS4gV2UnbGwgbmVlZCB0byByZW1lbWJlciBob3cgdGhhdCBpbXBhY3RzIGxpZmVjeWNsZS4gTm93IHRoZSBiaWcgcGljdHVyZS4uLiBgc21jX3JlbGVhc2VgLiBUaGF0J3MgYSBnbG9iYWwgZnVuY3Rpb24uIE5vdywgYSBsaWdodGJ1bGIuLi5pcyBgc21jX3JlbGVhc2VgIGV4cG9ydGVkLCBvciBpcyBpdCBoaWRkZW4/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBkaWcgaW50by4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIHVzZSBpdCwgdG8gd29yayB3aXRoIGl0LiBMZXQncyBzZWUgaWYgdGhhdCdzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTI4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDQ6MDIuODE1NTY2NDlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDkxMjk5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzbWNfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL2FmX3NtYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDowMi44NjIwNjYwNDhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5NTkyMTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIFNjb3BlIGFuZCBGdW5jdGlvbmFsaXR5KipcblxuQWxyaWdodCwgc28gdGhlIHZhcmlhYmxlIGluIHF1ZXN0aW9uLCB3aGF0ZXZlciBpdCBpcywgaXNuJ3QgKmV4cGxpY2l0bHkqIGV4cG9ydGVkLCBtZWFuaW5nIGl0IGxpa2VseSBpc24ndCBwYXJ0IG9mIGEgZGlyZWN0IEFQSSBleHBvc2VkIHRvIG90aGVyIG1vZHVsZXMgb3IgY29tcG9uZW50cyBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIEhvd2V2ZXIsIHRoZSB1c2Ugb2YgdGhlIHRlcm0gXCJnbG9iYWxcIiBzdWdnZXN0cyBpdCdzIGFjY2Vzc2libGUgYW5kIHBvdGVudGlhbGx5IG1vZGlmaWFibGUgZnJvbSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhpcyBpbXBsaWVzIGEgc2NvcGUgY29uY2VybiwgbGlrZWx5IG5lZWRpbmcgc3BlY2lhbCBjb25zaWRlcmF0aW9uIHRvIHByb3RlY3QgYWdhaW5zdCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvciBjb25mbGljdHMuXG5cbk15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSBgc21jX2Nsb3NlX2FjdGl2ZWAuIEl0J3MgYSBrZXkgcGllY2Ugb2YgY29udGV4dHVhbCBpbmZvcm1hdGlvbi4gVGhpcyBsaWtlbHkgYSBmdW5jdGlvbiBvciBhIG1hY3JvIHdoaWNoIGNvdWxkIGJlIHVzZWQgdG8gZGlzY292ZXIgaG93IHRvIG1hbmFnZSB0aGlzIHNwZWNpZmljIGNvbXBvbmVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgXCJnbG9iYWxcIiB2YXJpYWJsZS4gSXMgaXQgdXNlZCB0byAqc2V0KiwgKnJlYWQqLCBvciAqbWFuYWdlKiB0aGlzIFwiZ2xvYmFsXCIgdmFsdWU/IEtub3dpbmcgdGhlIGludGVyYWN0aW9uIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpcyBzZXQgYW5kIGNsZWFyZWQsIGFzIHdlbGwgYXMgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgb24gaXRzIHVzZSwgdGhhdCBtYXkgY2F1c2UgYSBtYWxmdW5jdGlvbi4gVGhhdCB3aWxsIHNoZWQgbGlnaHQgb24gaG93IHRoZSB2YXJpYWJsZSdzIHNjb3BlIGFuZCBhY2Nlc3MgYXJlICppbnRlbmRlZCogdG8gd29yaywgYW5kIGlmIGl0J3MgcGxheWluZyBuaWNlbHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgYXBwbGljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjI4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDQ6MDYuMzU3OTkwODc5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk3OTg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfY2xvc2VfYWN0aXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvc21jX2Nsb3NlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfY2xvc2UuYz0xMTQ9c3RhdGljIHZvaWQgc21jX2Nsb3NlX2NhbmNlbF93b3JrKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xMjctICovXFxubmV0L3NtYy9zbWNfY2xvc2UuYzoxMjg6dm9pZCBzbWNfY2xvc2VfYWN0aXZlX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jKVxcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTI5LXtcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmM9MTg3PXN0YXRpYyBpbmxpbmUgYm9vbCBzbWNfY2xvc2Vfc2VudF9hbnlfY2xvc2Uoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xOTItXFxubmV0L3NtYy9zbWNfY2xvc2UuYzoxOTM6aW50IHNtY19jbG9zZV9hY3RpdmUoc3RydWN0IHNtY19zb2NrICpzbWMpXFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xOTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDowNi40MDM5NzUwOTdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzMjk2OTE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNNQyBEaWFnbm9zdGljIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzbWNfZGlhZ2AgY29kZSBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHNtY19jbG9zZV9hY3RpdmVgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiBUaGF0J3MgYSBwb3RlbnRpYWwgYXJlYSBmb3IgY29udGVudGlvbiBhbmQgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIHVzZWQgYWNyb3NzIHRoZSBzeXN0ZW0uXG5cbk15IG5leHQgc3RlcCBpcyB0byBzZWUgd2hhdCB0aGUgZGlhZ25vc3RpYyBoYW5kbGVycyBhY3R1YWxseSAqZG8qLiBJJ2xsIGNoZWNrIGBzbWNfZGlhZ19oYW5kbGVyX2R1bXBgIGFuZCBgc21jX2RpYWdfZHVtcGAuIEkgYmVsaWV2ZSB0aGV5J3JlIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIHNob3VsZCBsaW1pdCB0aGVpciB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0cywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBoYW5kbGVyIGZ1bmN0aW9ucy5cblxuRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdG8gYnVpbGQgYSBnb29kIG1lbnRhbCBtb2RlbCBvZiB0aGUgbW9kdWxlLCBJJ2xsIHNjYW4gdGhyb3VnaCBgc21jX2RpYWcuY2AgZm9yIGFueSAqb3RoZXIqIGdsb2JhbCBmdW5jdGlvbnMuIEl0J3MgZ29vZCBwcmFjdGljZSB0byBpZGVudGlmeSBhbGwgZW50cnkgcG9pbnRzIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGluIGEgY29kZSBibG9jayBlYXJseSBvbiB0byBhdm9pZCB1bnBsZWFzYW50IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gcmVhc29uIGFib3V0IHRoaXMgY29kZSBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3OTEsIk91dHB1dFRva2VucyI6NjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDoxMS4zMzY5NDk2MDhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDg3MTg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDoxMS4zODYwNDM5MjdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc0Mzk2MzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBTTUMgU29ja2V0IFJlbGVhc2UgYW5kIERpYWdub3N0aWMgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gcmVsZWFzaW5nIGFuZCBtYW5hZ2luZyBTTUMgc29ja2V0cyBhbmQgYXNzb2NpYXRlZCBkaWFnbm9zdGljcy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgZm9jdXNpbmcgb24gYHNtY19yZWxlYXNlYCBhbmQgYHNtY19jbGNzb2NrX3JlbGVhc2VgIHdvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIHRoYXQgc2VlbXMgY29ycmVjdCwgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLiBUaGUgcGF0Y2ggaXMgYWJvdXQgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AsIGJ1dCBob3cgZG8gd2UgdHJpZ2dlciB0aGF0P1xuXG5BaCwgcmlnaHQsIGNyZWF0ZSBhbiBgQUZfSU5FVGAgc29ja2V0IHVzaW5nIGBJUFBST1RPX1NNQ2AgYW5kIHRoZW4gc2ltcGx5IGNsb3NlIGl0LiBUaGF0IHNob3VsZCB0cmlnZ2VyIGl0LiBUaGUgc29ja2V0IGNyZWF0aW9uIGl0c2VsZiB1c2VzIGBzbWNfaW5ldF9pbml0X3NvY2tgLCB3aGljaCBpcyBzdGF0aWMsIHNvIG5vdCBhbiBpbnRlcmVzdGluZyBlbnRyeSBwb2ludC4gQnV0IGxvb2tpbmcgZnVydGhlciwgYHNtY19pbmV0X3N0cmVhbV9vcHNgIGhhcyBgLnJlbGVhc2UgPSBzbWNfcmVsZWFzZWAsIHdoaWNoIG1lYW5zIHdoZW4gdGhlIHNvY2tldCBpcyBjbG9zZWQsIGBzbWNfcmVsZWFzZWAgZ2V0cyBjYWxsZWQsIGFuZCB0aGVuIGBza19jb21tb25fcmVsZWFzZWAgd2hlbiB0aGUgc29ja2V0IGl0c2VsZiBpcyBmcmVlZC4gYHNtY19yZWxlYXNlYCBkZWZpbml0ZWx5IGxvb2tzIGxpa2UgYSBzb2xpZCBmb2N1cyBzeW1ib2wuXG5cbkFsc28sIGBzbWNfY2xjc29ja19yZWxlYXNlYCBpcyBjYWxsZWQgZnJvbSBgc21jX2luZXRfZGVzdHJveV9zb2NrYCwgd2hpY2ggaXMgYWxzbyBpbXBvcnRhbnQuIFNvIGBzbWNfY2xjc29ja19yZWxlYXNlYCBpcyBhIGtleSBmdW5jdGlvbiB0byBleGFtaW5lIGFzIHdlbGwuXG5cbkkgbG9va2VkIGF0IG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZCB3aXRoIFNNQy4gYHNtY19kaWFnX2R1bXBgIGlzIGludm9rZWQgYnkgbmV0bGluayBgU09DS19ESUFHX0JZX0ZBTUlMWWAgZm9yIGBBRl9TTUNgLiBBaCwgYnV0IGBzbWNfZGlhZ19oYW5kbGVyX2R1bXBgIGlzIHJlZ2lzdGVyZWQgZm9yIGBBRl9TTUNgLCBzbyBgc29ja19kaWFnX3Jjdl9tc2dgIGNhbGxzIGBzbWNfZGlhZ19oYW5kbGVyX2R1bXBgLiBIb3dldmVyLCB0aGF0IG9uZSBpcyBzdGF0aWMsIHNvIGl0J3Mgbm90IHVzZWZ1bCBhcyBhIGZvY3VzIHN5bWJvbC5cblxuTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZSBgc21jX3JlbGVhc2VgIGFuZCBgc21jX2NsY3NvY2tfcmVsZWFzZWAgZnVuY3Rpb25zLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L3NtYy9LY29uZmlnYCBmaWxlIHRvIHNlZSBob3cgYFNNQ2AgYW5kIGBTTUNfRElBR2AgZGVwZW5kIG9uIGVhY2ggb3RoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTYxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQ0OjE4LjEzMDAxMDQ1NVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBTTUNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IERJQlNcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgU01DLVIgcHJvdmlkZXMgYSBcXFwic29ja2V0cyBvdmVyIFJETUFcXFwiIHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcXG4gICA3OlxcdFxcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXFxuICAgODpcXHRcXHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXFxuICAgOTpcXHRcXHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcXG4gIDEwOlxcdFxcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBTTUNfRElBR1xcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBTTUNcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgU3VwcG9ydCBmb3IgU01DIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXNcXG4gIDE5OlxcdFxcdCAgc21jc3MuXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgaWYgdW5zdXJlLCBzYXkgWS5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbiAgMjQ6XFx0XFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gU01DIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX1NZU0NBTExcXG4gIDI2OlxcdFxcdGRlZmF1bHQgeVxcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBTTUNfSFNfQ1RSTF9CUEYgZW5hYmxlcyBzdXBwb3J0IHRvIHJlZ2lzdGVyIGdlbmVyaWMgZUJQRiBob29rIGZvciBTTUNcXG4gIDI5OlxcdFxcdCAgaGFuZHNoYWtlIGZsb3csIHdoaWNoIG9mZmVyIG11Y2ggZ3JlYXRlciBmbGV4aWJpbGl0eSBpbiBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yXFxuICAzMDpcXHRcXHQgIG9mIHRoZSBTTUMgcHJvdG9jb2wgc3RhY2sgY29tcGFyZWQgdG8gYSBjb21wbGV0ZSBrZXJuZWwtYmFzZWQgYXBwcm9hY2guIFNlbGVjdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDoxOC4xMzAwODAwNTVaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgxMzU2MDQxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBTTUMgRGVwZW5kZW5jeSBDb25mdXNpb24qKlxuXG5Pa2F5LCBzbyBJIHdhcyBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmN5IHRyZWUgZm9yIGBTTUNgLiBJbml0aWFsbHksIEkgdGhvdWdodCBpdCB3YXMgcmVsaWFudCBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgKmFuZCogYERJQlNgLiBCdXQsIHdhaXQsIGBESUJTYD8gVGhhdCBkb2Vzbid0IHNvdW5kIHJpZ2h0IGF0IGFsbC4gSXQncyBub3QgYSBzdGFuZGFyZCByZXF1aXJlbWVudC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgb3V0cHV0LiBOb3BlLCBpdCBzYXlzIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmTigKYgIGBESUJTYD8gVGhpcyBpcyB0aHJvd2luZyBtZSBvZmYhIE9rYXksIEkgbXVzdCBoYXZlIG1pc3JlYWQgc29tZXRoaW5nLiBMZXQgbWUgZ28gYmFjayBhbmQgcmUtcmVhZCB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBhZ2Fpbi4gQWgsIGZpbmFsbHkhIEl0J3MgYElORVRgIGFuZCBgSU5GSU5JQkFORGAuIFdhaXTigKYgV2h5IGFtIEkgc2VlaW5nIGBESUJTYD8gVGltZSB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgYG5ldC9zbWMvS2NvbmZpZ2AgZmlsZSBhZ2FpbiB0byBzZWUgaWYgSSBhbSBtaXNzaW5nIHNvbWV0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NDMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDoyMi45NDM2NDM0NVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyODA4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG5uZXQvc21jL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxubmV0L3NtYy9LY29uZmlnLTUtXFx0aGVscFxcbi0tXFxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3NtYy9LY29uZmlnOjE2OlxcdGRlcGVuZHMgb24gU01DXFxubmV0L3NtYy9LY29uZmlnLTE3LVxcdGhlbHBcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZz0yMz1jb25maWcgU01DX0hTX0NUUkxfQlBGXFxubmV0L3NtYy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxubmV0L3NtYy9LY29uZmlnOjI1OlxcdGRlcGVuZHMgb24gU01DIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX1NZU0NBTExcXG5uZXQvc21jL0tjb25maWctMjYtXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQ0OjIyLjk5MzkyODcyOFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjk4NzYwMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBNeXN0ZXJpb3VzIERJQlMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIFwiRElCU1wiPyBJIGhhdmVuJ3Qgc2VlbiB0aGF0IHRlcm0gdGhyb3duIGFyb3VuZCBpbiBhIHdoaWxlLiBXaGF0IGV4YWN0bHkgYXJlIHdlIHRhbGtpbmcgYWJvdXQgaGVyZT8gSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEl0J3MgdGltZSB0byBmaXJlIHVwIHRoZSBtZW50YWwgbWFjaGluZXJ5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgZGlyZWN0bHkgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyBzb3VuZHMgbGlrZSBpdCBjb3VsZCBiZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhIG1hY3JvLCBvciBwb3RlbnRpYWxseSBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IEtjb25maWcgaGFzIHRvIHNheSBhYm91dCBgRElCU2AuIFRpbWUgdG8gZ28gaHVudGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwMTMsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDoyNS42OTI2OTIzMjVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjAyNjMwNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERJQlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQ0OjI3LjI1Mjk2MzU0MloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTA0NTEwMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5IGZvciBTTUMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIGBESUJTYCBpcyBhIGN1c3RvbSBjb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIHRoaXMga2VybmVsIHRyZWUuIFRoYXQncyBnb29kIHRvIGtub3cuIE5vdywgYFNNQ2AgYXBwZWFycyB0byBiZSBkZXBlbmRlbnQgb24gYElORVRgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuIEFscmlnaHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGFsbCBlbmFibGVkIGZvciBmdXp6aW5nIHRoaXMuIFRoZXJlZm9yZSwgSSdsbCBhZGQgYFNNQ2AsIGBTTUNfRElBR2AsIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC5cblxuSG9sZCBvbiwgdGhvdWdoLiBgSU5FVGAgaXMgZ2VuZXJhbGx5IGEgZ2l2ZW4sIGFuZCBgSU5GSU5JQkFORGAgaXMgcHJldHR5IHN0YW5kYXJkLiBObyBuZWVkIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSB0aG9zZS4gTGV0J3MgbWFrZSBzdXJlIGBTTUNgIGFuZCBgU01DX0RJQUdgIGFyZSBlbmFibGVkLCB0aG91Z2guXG5cblJpZ2h0LCB0aGUgcGF0Y2ggaXRzZWxmIHRhcmdldHMgYSByYWNlIGNvbmRpdGlvbiBpbiBgc21jX2luZXRfZGVzdHJveV9zb2NrYCwgYW5kIHRoYXQgaGFwcGVucyBkdXJpbmcgc29ja2V0IGRlc3RydWN0aW9uLiBTb3VuZHMgbGlrZSBhIHRleHRib29rIHJhY2UgY29uZGl0aW9uLCBzbyB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyBhdHRlbnRpb24uXG5cbk9rYXksIGxldCdzIGNvbnNvbGlkYXRlIHRoaXM6XG5cbmBXb3J0aEZ1enppbmc6IHRydWVgLiBBYnNvbHV0ZWx5LlxuXG5gRm9jdXNTeW1ib2xzOiBzbWNfcmVsZWFzZSwgc21jX2NsY3NvY2tfcmVsZWFzZWAuIFRob3NlIHR3byBmdW5jdGlvbnMgc291bmQgbGlrZSBwcmltZSB0YXJnZXRzLCBjb25zaWRlcmluZyB0aGUgcmFjZSBjb25kaXRpb24uXG5cbmBFbmFibGVDb25maWdzOiBTTUMsIFNNQ19ESUFHLCBJTkZJTklCQU5ELCBESUJTYC4gTWFraW5nIHN1cmUgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBtZXQuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIGBzbWNfaW5ldF9pbml0YCBpcyBtYXJrZWQgYXMgYF9faW5pdGAsIHNvIHByb2JhYmx5IG5vdCBhcyBpbnRlcmVzdGluZyBmb3IgdGhpcy4gQW5kIGBzbWNfaW5ldF9leGl0YCBpcyBzaW1pbGFyLiBIb3cgYWJvdXQgYHNtY19oYXNoX3NrYCBhbmQgYHNtY191bmhhc2hfc2tgPyBJJ2xsIGtlZXAgdGhvc2UgaW4gbWluZCwgYnV0IHRoZXkncmUgbm90IHRoZSAqcHJpbWFyeSogZm9jdXMgcmlnaHQgbm93LiBHb29kIGVub3VnaCBmb3Igbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTMyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDozMy43NTc0NzcwMzlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTM3NTgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfdW5oYXNoX3NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvYWZfc21jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz0xOTk9aW50IHNtY19oYXNoX3NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjEzLVxcbm5ldC9zbWMvYWZfc21jLmM6MjE0OnZvaWQgc21jX3VuaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3NtYy9hZl9zbWMuYy0yMTUte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yMzg9c3RydWN0IHByb3RvIHNtY19wcm90byA9IHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjQyLVxcdC5oYXNoXFx0XFx0PSBzbWNfaGFzaF9zayxcXG5uZXQvc21jL2FmX3NtYy5jOjI0MzpcXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbm5ldC9zbWMvYWZfc21jLmMtMjQ0LVxcdC5yZWxlYXNlX2NiXFx0PSBzbWNfcmVsZWFzZV9jYixcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MjUxPXN0cnVjdCBwcm90byBzbWNfcHJvdG82ID0ge1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yNTUtXFx0Lmhhc2hcXHRcXHQ9IHNtY19oYXNoX3NrLFxcbm5ldC9zbWMvYWZfc21jLmM6MjU2OlxcdC51bmhhc2hcXHRcXHQ9IHNtY191bmhhc2hfc2ssXFxubmV0L3NtYy9hZl9zbWMuYy0yNTctXFx0LnJlbGVhc2VfY2JcXHQ9IHNtY19yZWxlYXNlX2NiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDozNC4yMDI4NTkyNjRaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYxNzQzNTA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU01DIE1vZHVsZSdzIFN5bWJvbCBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdCBzbyBmYXIuIEknbSBmb2N1c2luZyBvbiBjbGVhbmluZyB1cCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgU01DIG1vZHVsZS4gSXQgbG9va3MgbGlrZSBgc21jX3VuaGFzaF9za2AgaXMgYSBnbG9iYWwgdmFyaWFibGUgYW5kIEkgc2VlIHRoYXQgaXQncyBjYWxsZWQgd2l0aGluIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgc2stXHUwMDNlc2tfcHJvdC1cdTAwM2V1bmhhc2goc2spYC4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgaW5jbHVzaW9uIGluIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QsIHRoYXQncyBkZWZpbml0ZWx5IGEgcG9pbnQgb2YgaW50ZXJhY3Rpb24uXG5cbkkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgc21jX2luZXRfZGVzdHJveV9zb2NrYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb247IHRoaXMgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgc2NvcGUuIFRoZW4sIEkgY2hlY2tlZCB0aGF0IGJvdGggYHNtY19jbGNzb2NrX3JlbGVhc2VgIGFuZCBgc21jX3JlbGVhc2VgIGFyZSBnbG9iYWxseSBhY2Nlc3NpYmxlLiBTbyBteSBmaW5hbCBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIGxvb2tpbmcgbGlrZTpcblxuLSAgIGBzbWNfcmVsZWFzZWBcbi0gICBgc21jX2NsY3NvY2tfcmVsZWFzZWBcbi0gICBgc21jX3VuaGFzaF9za2BcblxuTmV4dCwgSSd2ZSBnb3QgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGNvcnJlY3QuIE15IGBFbmFibGVDb25maWdzYCBsaXN0IGlzIGN1cnJlbnRseTpcblxuLSAgIGBTTUNgXG4tICAgYFNNQ19ESUFHYFxuLSAgIGBJTkZJTklCQU5EYFxuLSAgIGBESUJTYFxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgbmVlZCBmb3IgYERJQlNgLiBUaGUgZGVwZW5kZW5jeSBpcyBzaG93biBhczogYGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU2AuIFllcywgZ2l2ZW4gdGhlIGNvbnRleHQsIGBESUJTYCBpcyBhYnNvbHV0ZWx5IHJlcXVpcmVkLlxuXG5BbHJpZ2h0LCBJJ20gc2F0aXNmaWVkIHdpdGggdGhpcy4gVGltZSB0byBleGVjdXRlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzYwLCJPdXRwdXRUb2tlbnMiOjE2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDo0MC44MjAyOTY4NDdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjA1ODU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJTTUNfRElBR1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19yZWxlYXNlXCIsXG4gICAgXCJzbWNfY2xjc29ja19yZWxlYXNlXCIsXG4gICAgXCJzbWNfdW5oYXNoX3NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgU01DIHNvY2tldCBkZXN0cnVjdGlvbiB3aGVyZSBzbWNfZGlhZyBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBhIHJlbGVhc2VkIGNsY3NvY2suIEl0IG1vZGlmaWVzIHRoZSBzb2NrZXQgdGVhcmRvd24gZmxvdyBieSBhZGRpbmcgYSAuZGVzdHJveSBjYWxsYmFjayB0byBzbWNfaW5ldF9wcm90IGFuZCBzbWNfaW5ldDZfcHJvdCwgd2hpY2ggdW5oYXNoZXMgdGhlIHNvY2tldCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBjbGNzb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJTTUNfRElBR1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19yZWxlYXNlXCIsXG4gICAgXCJzbWNfY2xjc29ja19yZWxlYXNlXCIsXG4gICAgXCJzbWNfdW5oYXNoX3NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgU01DIHNvY2tldCBkZXN0cnVjdGlvbiB3aGVyZSBzbWNfZGlhZyBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBhIHJlbGVhc2VkIGNsY3NvY2suIEl0IG1vZGlmaWVzIHRoZSBzb2NrZXQgdGVhcmRvd24gZmxvdyBieSBhZGRpbmcgYSAuZGVzdHJveSBjYWxsYmFjayB0byBzbWNfaW5ldF9wcm90IGFuZCBzbWNfaW5ldDZfcHJvdCwgd2hpY2ggdW5oYXNoZXMgdGhlIHNvY2tldCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBjbGNzb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQ0OjQwLjg5MjM2MTgwNVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1Njc4NjE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQ0OjQwLjg5MjkxNzkxNVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MjU2MjI1MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24gd2hlcmUgYHNtY19kaWFnYCBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBgc21jLVxcdTAwM2VjbGNzb2NrYCB3aGlsZSBpdCBpcyBiZWluZyByZWxlYXNlZC4gVGhpcyBpcyBhIHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjYyYTVkZDBmOGI0MWE4OGY5MjY3MWZkNTUyNWNlN2ZhYTM4YTExZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA4OjQyOjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfaW5ldC5jIGIvbmV0L3NtYy9zbWNfaW5ldC5jXG5pbmRleCBhOTQwODRiNGE0OThlLi41MjBiNjY2ZmRkOGZhIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfaW5ldC5jXG4rKysgYi9uZXQvc21jL3NtY19pbmV0LmNcbkBAIC0xNSwxMyArMTUsMTYgQEBcbiBcbiAjaW5jbHVkZSBcInNtY19pbmV0LmhcIlxuICNpbmNsdWRlIFwic21jLmhcIlxuKyNpbmNsdWRlIFwic21jX2Nsb3NlLmhcIlxuIFxuIHN0YXRpYyBpbnQgc21jX2luZXRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4rc3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4gXG4gc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0ge1xuIFx0Lm5hbWVcdFx0PSBcIklORVRfU01DXCIsXG4gXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiBcdC5pbml0XHRcdD0gc21jX2luZXRfaW5pdF9zb2NrLFxuK1x0LmRlc3Ryb3lcdD0gc21jX2luZXRfZGVzdHJveV9zb2NrLFxuIFx0Lmhhc2hcdFx0PSBzbWNfaGFzaF9zayxcbiBcdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxuIFx0LnJlbGVhc2VfY2JcdD0gc21jX3JlbGVhc2VfY2IsXG5AQCAtNjgsNiArNzEsNyBAQCBzdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0Nl9wcm90ID0ge1xuIFx0Lm5hbWVcdFx0PSBcIklORVQ2X1NNQ1wiLFxuIFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gXHQuaW5pdFx0XHQ9IHNtY19pbmV0X2luaXRfc29jayxcbitcdC5kZXN0cm95XHQ9IHNtY19pbmV0X2Rlc3Ryb3lfc29jayxcbiBcdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG4gXHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbiBcdC5yZWxlYXNlX2NiXHQ9IHNtY19yZWxlYXNlX2NiLFxuQEAgLTExNiw2ICsxMjAsMTggQEAgc3RhdGljIGludCBzbWNfaW5ldF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuIFx0cmV0dXJuIHNtY19jcmVhdGVfY2xjc2sobmV0LCBzaywgc2stXHUwMDNlc2tfZmFtaWx5KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHQvKiBUaGUgc29jayBpcyBoYXNoZWQgYW5kIHNtY19kaWFnIGR1bXBzIGRlcmVmZXJlbmNlIHNtYy1cdTAwM2VjbGNzb2NrXG4rXHQgKiB3aXRob3V0IGNsY3NvY2tfcmVsZWFzZV9sb2NrLCB3aGlsZSBza19jb21tb25fcmVsZWFzZSgpIGNhbGxzXG4rXHQgKiAuZGVzdHJveSBiZWZvcmUgLnVuaGFzaC4gVW5oYXNoIGZpcnN0LCBhcyBfX3NtY19yZWxlYXNlKCkgZG9lcyxcbitcdCAqIHNvIG5vIGR1bXAgY2FuIG9ic2VydmUgdGhlIGNsY3NvY2sgYmVpbmcgcmVsZWFzZWQ7IHRoZSBzZWNvbmRcbitcdCAqIHVuaGFzaCBpcyBhIG5vLW9wLlxuK1x0ICovXG4rXHRzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzayk7XG4rXHRzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpO1xuK31cbitcbiBpbnQgX19pbml0IHNtY19pbmV0X2luaXQodm9pZClcbiB7XG4gXHRpbnQgcmM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDo0MC44OTI5MjEzODVaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1NjE5MjU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTTUMgU29ja2V0IERlc3RydWN0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IGNsYXNzaWMgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIFNNQyBuZXR3b3JraW5nIGNvZGUuIEl0J3MgYWRkaW5nIGEgYGRlc3Ryb3lgIGNhbGxiYWNrIHRvIGBzbWNfaW5ldF9wcm90YCBhbmQgYHNtY19pbmV0Nl9wcm90YCwgd2hpY2ggaXMgZ29pbmcgdG8gY2FsbCBgc21jX2luZXRfZGVzdHJveV9zb2NrYC4gVGhhdCBmdW5jdGlvbiB0aGVuIGRvZXMgdGhlIGNydWNpYWwgc3RlcCBvZiB1bmhhc2hpbmcgdGhlIHNvY2tldCBiZWZvcmUgY2FsbGluZyBgc21jX2NsY3NvY2tfcmVsZWFzZWAuIFRoZSBjb21tZW50cyBleHBsaWNpdGx5IHBvaW50IG91dCB0aGF0IHRoaXMgb3JkZXIgY2hhbmdlIGlzIHRvIHByZXZlbnQgYSB1c2UtYWZ0ZXItZnJlZSBvciwgZXZlbiB3b3JzZSwgYSBudWxsLXBvaW50ZXIgZGVyZWZlcmVuY2UuIEVzc2VudGlhbGx5LCBgc21jX2RpYWdgIHdhcyB0cnlpbmcgdG8gYWNjZXNzIGBzbWMtXHUwMDNlY2xjc29ja2AgZHVyaW5nIGEgZGVidWcgZHVtcCAqd2hpbGUqIGBjbGNzb2NrYCB3YXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcmVsZWFzZWQuIFRoZSBLQVNBTiBoYXMgYWxyZWFkeSBjYXVnaHQgdGhpcywgd2hpY2ggaXMgZ3JlYXQuXG5cblRoZSBjb3JlIG9mIHRoZSBmaXggaXMgdG8gbWFrZSBzdXJlIHRoZSBzb2NrZXQgaXMgdW5oYXNoZWQgKmJlZm9yZSogYHNtY19jbGNzb2NrX3JlbGVhc2VgIGlzIGNhbGxlZCwgZW5zdXJpbmcgdGhhdCBkZWJ1ZyBkdW1wcyBjYW4ndCBvYnNlcnZlIHRoZSBgY2xjc29ja2AgYmVpbmcgcmVsZWFzZWQuIEl0J3MgYSByYWNlIGNvbmRpdGlvbiBmaXgg4oCTIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgeW91J2QgZXhwZWN0IHRvIHNlZS4gVGhlIHBhdGNoIGlzIHNpbXBseSByZS1vcmRlcmluZyBleGlzdGluZyBvcGVyYXRpb25zLCBubyBuZXcgYWxsb2NhdGlvbnMsIGJvdW5kcyBjaGVja3MsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBjb25jdXJyZW5jeSBpc3N1ZS5cblxuSSB3aWxsIGRvdWJsZS1jaGVjaywgYnV0IEkgZG9uJ3Qgc2VlIGFueSByaXNrIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIGhlcmUuIFRoaXMgaXMgcHVyZWx5IGFib3V0IHByb3RlY3RpbmcgYWdhaW5zdCBhIHJhY2UgZHVyaW5nIHNvY2tldCB0ZWFyZG93bi5cblxuR2l2ZW4gdGhlIHN0cmFpZ2h0Zm9yd2FyZCBuYXR1cmUgb2YgdGhlIGZpeCBhbmQgdGhlIGZhY3QgdGhhdCBpdCByZXNvbHZlcyBhIGRldGVjdGVkIGNvbmN1cnJlbmN5IGJ1ZywgSSdsbCBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzNywiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDo0OS4xNDkxMTc5NTFaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIHNvY2tldCBkZXN0cnVjdGlvbiB3aGVyZSBgc21jX2RpYWdgIGR1bXBzIGNvdWxkIGRlcmVmZXJlbmNlIGBzbWMtXFx1MDAzZWNsY3NvY2tgIHdoaWxlIGl0IGlzIGJlaW5nIHJlbGVhc2VkLiBUaGlzIGlzIGEgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Zywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24gd2hlcmUgYHNtY19kaWFnYCBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBgc21jLVxcdTAwM2VjbGNzb2NrYCB3aGlsZSBpdCBpcyBiZWluZyByZWxlYXNlZC4gVGhpcyBpcyBhIHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow42nqt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 07:51:24 +0000 UTC FinishedAt: 2026-08-21 08:44:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "SMC_DIAG", "INFINIBAND", "DIBS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SMC", "SMC_DIAG", "INFINIBAND", "DIBS" ], "series_id": "92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "smc_release", "smc_clcsock_release", "smc_unhash_sk" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NNQyYjMzQ7LAogICAgJiMzNDtTTUNfRElBRyYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0RJQlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzbWNfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtzbWNfY2xjc29ja19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3NtY191bmhhc2hfc2smIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24gd2hlcmUgYHNtY19kaWFnYCBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBgc21jLVx1MDAzZWNsY3NvY2tgIHdoaWxlIGl0IGlzIGJlaW5nIHJlbGVhc2VkLiBUaGlzIGlzIGEgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Zywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgU01DIHNvY2tldCBkZXN0cnVjdGlvbiB3aGVyZSBzbWNfZGlhZyBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBhIHJlbGVhc2VkIGNsY3NvY2suIEl0IG1vZGlmaWVzIHRoZSBzb2NrZXQgdGVhcmRvd24gZmxvdyBieSBhZGRpbmcgYSAuZGVzdHJveSBjYWxsYmFjayB0byBzbWNfaW5ldF9wcm90IGFuZCBzbWNfaW5ldDZfcHJvdCwgd2hpY2ggdW5oYXNoZXMgdGhlIHNvY2tldCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBjbGNzb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNjJhNWRkMGY4YjQxYTg4ZjkyNjcxZmQ1NTI1Y2U3ZmFhMzhhMTFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDg6NDI6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfaW5ldC5jIGIvbmV0L3NtYy9zbWNfaW5ldC5jXG5pbmRleCBhOTQwODRiNGE0OThlLi41MjBiNjY2ZmRkOGZhIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfaW5ldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19pbmV0LmNcbkBAIC0xNSwxMyAmIzQzOzE1LDE2IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7c21jX2luZXQuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3NtYy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3NtY19jbG9zZS5oXCYjMzQ7XG4gXG4gc3RhdGljIGludCBzbWNfaW5ldF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKTtcbiYjNDM7c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4gXG4gc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0ge1xuIFx0Lm5hbWVcdFx0PSBcJiMzNDtJTkVUX1NNQ1wmIzM0OyxcbiBcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIFx0LmluaXRcdFx0PSBzbWNfaW5ldF9pbml0X3NvY2ssXG4mIzQzO1x0LmRlc3Ryb3lcdD0gc21jX2luZXRfZGVzdHJveV9zb2NrLFxuIFx0Lmhhc2hcdFx0PSBzbWNfaGFzaF9zayxcbiBcdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxuIFx0LnJlbGVhc2VfY2JcdD0gc21jX3JlbGVhc2VfY2IsXG5AQCAtNjgsNiAmIzQzOzcxLDcgQEAgc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldDZfcHJvdCA9IHtcbiBcdC5uYW1lXHRcdD0gXCYjMzQ7SU5FVDZfU01DXCYjMzQ7LFxuIFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gXHQuaW5pdFx0XHQ9IHNtY19pbmV0X2luaXRfc29jayxcbiYjNDM7XHQuZGVzdHJveVx0PSBzbWNfaW5ldF9kZXN0cm95X3NvY2ssXG4gXHQuaGFzaFx0XHQ9IHNtY19oYXNoX3NrLFxuIFx0LnVuaGFzaFx0XHQ9IHNtY191bmhhc2hfc2ssXG4gXHQucmVsZWFzZV9jYlx0PSBzbWNfcmVsZWFzZV9jYixcbkBAIC0xMTYsNiAmIzQzOzEyMCwxOCBAQCBzdGF0aWMgaW50IHNtY19pbmV0X2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4gXHRyZXR1cm4gc21jX2NyZWF0ZV9jbGNzayhuZXQsIHNrLCBzay1cdTAwM2Vza19mYW1pbHkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiYjNDM7e1xuJiM0MztcdC8qIFRoZSBzb2NrIGlzIGhhc2hlZCBhbmQgc21jX2RpYWcgZHVtcHMgZGVyZWZlcmVuY2Ugc21jLVx1MDAzZWNsY3NvY2tcbiYjNDM7XHQgKiB3aXRob3V0IGNsY3NvY2tfcmVsZWFzZV9sb2NrLCB3aGlsZSBza19jb21tb25fcmVsZWFzZSgpIGNhbGxzXG4mIzQzO1x0ICogLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2guIFVuaGFzaCBmaXJzdCwgYXMgX19zbWNfcmVsZWFzZSgpIGRvZXMsXG4mIzQzO1x0ICogc28gbm8gZHVtcCBjYW4gb2JzZXJ2ZSB0aGUgY2xjc29jayBiZWluZyByZWxlYXNlZDsgdGhlIHNlY29uZFxuJiM0MztcdCAqIHVuaGFzaCBpcyBhIG5vLW9wLlxuJiM0MztcdCAqL1xuJiM0MztcdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKHNrKTtcbiYjNDM7XHRzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBfX2luaXQgc21jX2luZXRfaW5pdCh2b2lkKVxuIHtcbiBcdGludCByYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O1NNQ19ESUFHJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3NtY19jbGNzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c21jX3VuaGFzaF9zayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBTTUMgc29ja2V0IGRlc3RydWN0aW9uIHdoZXJlIHNtY19kaWFnIGR1bXBzIGNvdWxkIGRlcmVmZXJlbmNlIGEgcmVsZWFzZWQgY2xjc29jay4gSXQgbW9kaWZpZXMgdGhlIHNvY2tldCB0ZWFyZG93biBmbG93IGJ5IGFkZGluZyBhIC5kZXN0cm95IGNhbGxiYWNrIHRvIHNtY19pbmV0X3Byb3QgYW5kIHNtY19pbmV0Nl9wcm90LCB3aGljaCB1bmhhc2hlcyB0aGUgc29ja2V0IGJlZm9yZSByZWxlYXNpbmcgdGhlIGNsY3NvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI2MmE1ZGQwZjhiNDFhODhmOTI2NzFmZDU1MjVjZTdmYWEzOGExMWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwODo0MjoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2luZXQuYyBiL25ldC9zbWMvc21jX2luZXQuYwppbmRleCBhOTQwODRiNGE0OThlLi41MjBiNjY2ZmRkOGZhIDEwMDY0NAotLS0gYS9uZXQvc21jL3NtY19pbmV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NtYy9zbWNfaW5ldC5jCkBAIC0xNSwxMyAmIzQzOzE1LDE2IEBACiAKICNpbmNsdWRlICYjMzQ7c21jX2luZXQuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3NtYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3NtY19jbG9zZS5oJiMzNDsKIAogc3RhdGljIGludCBzbWNfaW5ldF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKJiM0MztzdGF0aWMgdm9pZCBzbWNfaW5ldF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTsKIAogc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0gewogCS5uYW1lCQk9ICYjMzQ7SU5FVF9TTUMmIzM0OywKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmluaXQJCT0gc21jX2luZXRfaW5pdF9zb2NrLAomIzQzOwkuZGVzdHJveQk9IHNtY19pbmV0X2Rlc3Ryb3lfc29jaywKIAkuaGFzaAkJPSBzbWNfaGFzaF9zaywKIAkudW5oYXNoCQk9IHNtY191bmhhc2hfc2ssCiAJLnJlbGVhc2VfY2IJPSBzbWNfcmVsZWFzZV9jYiwKQEAgLTY4LDYgJiM0Mzs3MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXQ2X3Byb3QgPSB7CiAJLm5hbWUJCT0gJiMzNDtJTkVUNl9TTUMmIzM0OywKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmluaXQJCT0gc21jX2luZXRfaW5pdF9zb2NrLAomIzQzOwkuZGVzdHJveQk9IHNtY19pbmV0X2Rlc3Ryb3lfc29jaywKIAkuaGFzaAkJPSBzbWNfaGFzaF9zaywKIAkudW5oYXNoCQk9IHNtY191bmhhc2hfc2ssCiAJLnJlbGVhc2VfY2IJPSBzbWNfcmVsZWFzZV9jYiwKQEAgLTExNiw2ICYjNDM7MTIwLDE4IEBAIHN0YXRpYyBpbnQgc21jX2luZXRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaykKIAlyZXR1cm4gc21jX2NyZWF0ZV9jbGNzayhuZXQsIHNrLCBzay0mZ3Q7c2tfZmFtaWx5KTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwkvKiBUaGUgc29jayBpcyBoYXNoZWQgYW5kIHNtY19kaWFnIGR1bXBzIGRlcmVmZXJlbmNlIHNtYy0mZ3Q7Y2xjc29jawomIzQzOwkgKiB3aXRob3V0IGNsY3NvY2tfcmVsZWFzZV9sb2NrLCB3aGlsZSBza19jb21tb25fcmVsZWFzZSgpIGNhbGxzCiYjNDM7CSAqIC5kZXN0cm95IGJlZm9yZSAudW5oYXNoLiBVbmhhc2ggZmlyc3QsIGFzIF9fc21jX3JlbGVhc2UoKSBkb2VzLAomIzQzOwkgKiBzbyBubyBkdW1wIGNhbiBvYnNlcnZlIHRoZSBjbGNzb2NrIGJlaW5nIHJlbGVhc2VkOyB0aGUgc2Vjb25kCiYjNDM7CSAqIHVuaGFzaCBpcyBhIG5vLW9wLgomIzQzOwkgKi8KJiM0MzsJc2stJmd0O3NrX3Byb3QtJmd0O3VuaGFzaChzayk7CiYjNDM7CXNtY19jbGNzb2NrX3JlbGVhc2Uoc21jX3NrKHNrKSk7CiYjNDM7fQomIzQzOwogaW50IF9faW5pdCBzbWNfaW5ldF9pbml0KHZvaWQpCiB7CiAJaW50IHJjOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU01DIEluZXQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvc21jL3NtY19pbmV0LmNgLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRpbmcgYSBgLmRlc3Ryb3lgIGNhbGxiYWNrIHRvIGJvdGggYHNtY19pbmV0X3Byb3RgIGFuZCBgc21jX2luZXQ2X3Byb3RgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgdGhlIGNhbGxiYWNrIGl0c2VsZiBpcyBgc21jX2luZXRfZGVzdHJveV9zb2NrYC4gSSBrbm93IHRoYXQgZnVuY3Rpb24g4oCTIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB1bmhhc2hpbmcgdGhlIHNvY2tldCBhbmQgdGhlbiBjYWxsaW5nIGBzbWNfY2xjc29ja19yZWxlYXNlYC4gTWFrZXMgc2Vuc2U7IGNsZWFudXAgaXMgY3J1Y2lhbCwgZXNwZWNpYWxseSBpbiB0aGlzIGFyZWEuCgpOb3csIGJlZm9yZSBJIHNpZ24gb2ZmIG9uIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgYmV0dGVyLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBuZXQvc21jL3NtY19pbmV0LmNgIGFuZCBhbHNvIGNoZWNrIGBuZXQvc21jL3NtYy5oYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBuZXcgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy4gVGltZSB0byBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYHNtY19pbmV0X3Byb3RgLCBgc21jX2luZXQ2X3Byb3RgLCBhbmQgdGhhdCBkZXN0cnVjdGlvbiBmdW5jdGlvbiwgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgaW50ZWdyYXRlcyBjbGVhbmx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNyb3NzLXJlZmVyZW5jZXMsIGFueSBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMsIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIG92ZXJhbGwgbGlmZWN5Y2xlIG9mIHRoZXNlIHNvY2tldHMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgZ3JlcCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19pbmV0X2Rlc3Ryb3lfc29jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19pbmV0LmM9MjA9c3RhdGljIGludCBzbWNfaW5ldF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9zbWMvc21jX2luZXQuYzoyMTpzdGF0aWMgdm9pZCBzbWNfaW5ldF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9zbWMvc21jX2luZXQuYy0yMi1cbm5ldC9zbWMvc21jX2luZXQuYz0yMz1zdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0X3Byb3QgPSB7XG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jLTI2LVx0LmluaXRcdFx0PSBzbWNfaW5ldF9pbml0X3NvY2ssXG5uZXQvc21jL3NtY19pbmV0LmM6Mjc6XHQuZGVzdHJveVx0PSBzbWNfaW5ldF9kZXN0cm95X3NvY2ssXG5uZXQvc21jL3NtY19pbmV0LmMtMjgtXHQuaGFzaFx0XHQ9IHNtY19oYXNoX3NrLFxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz03MD1zdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0Nl9wcm90ID0ge1xuLS1cbm5ldC9zbWMvc21jX2luZXQuYy03My1cdC5pbml0XHRcdD0gc21jX2luZXRfaW5pdF9zb2NrLFxubmV0L3NtYy9zbWNfaW5ldC5jOjc0Olx0LmRlc3Ryb3lcdD0gc21jX2luZXRfZGVzdHJveV9zb2NrLFxubmV0L3NtYy9zbWNfaW5ldC5jLTc1LVx0Lmhhc2hcdFx0PSBzbWNfaGFzaF9zayxcbi0tXG5uZXQvc21jL3NtY19pbmV0LmM9MTEzPXN0YXRpYyBpbnQgc21jX2luZXRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc21jL3NtY19pbmV0LmMtMTIyLVxubmV0L3NtYy9zbWNfaW5ldC5jOjEyMzpzdGF0aWMgdm9pZCBzbWNfaW5ldF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKVxubmV0L3NtYy9zbWNfaW5ldC5jLTEyNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMzNwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biB0aGUgU01DIEtjb25maWcqKgoKQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyBkZWZpbml0ZWx5IGNlbnRlcmVkIGFyb3VuZCB0aGUgU01DLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGVyZSYjMzk7cyB0aGUgS2NvbmZpZyBmb3IgaXQ/JiMzNDsgSSBrbm93IHRoZSBhcmNoaXRlY3R1cmUsIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBrZXksIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGFzIHNwZWNpZmljIGFzIGFuIFNNQywgb3IgU3lzdGVtIE1hbmFnZW1lbnQgQ29udHJvbGxlci4gSXQmIzM5O3MgYWxtb3N0IGd1YXJhbnRlZWQgdG8gaGF2ZSBpdHMgb3duIEtjb25maWcgZnJhZ21lbnQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgY29uZmlndXJhdGlvbi4gU28sIG15IG1lbnRhbCBjaGVja2xpc3QgYmVnaW5zOiBJIG5lZWQgdG8gbG9jYXRlIHRoaXMgZmlsZSB0byB1bmRlcnN0YW5kIHRoZSBhdmFpbGFibGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgdWx0aW1hdGVseSwgaG93IHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBTTUMgc3VwcG9ydCB3aXRoaW4gdGhlIGJ1aWxkLiBUaW1lIHRvIHRyYWNrIHRoYXQgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU01DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xubmV0L3NtYy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVwmIzM0O1xuLS1cbm5ldC9zbWMvS2NvbmZpZy0xMy1cbm5ldC9zbWMvS2NvbmZpZzoxNDpjb25maWcgU01DX0RJQUdcbm5ldC9zbWMvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubmV0L3NtYy9LY29uZmlnLTIyLVxubmV0L3NtYy9LY29uZmlnOjIzOmNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbm5ldC9zbWMvS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFNvY2tldCBQYXRjaCoqCgpPa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpcyBgU01DYCwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUgYSBiaXQuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24uIFNwZWNpZmljYWxseSwgYHNtY19kaWFnYCB3YXMgZGVyZWZlcmVuY2luZyBgc21jLSZndDtjbGNzb2NrYCB3aXRob3V0IGZpcnN0IG9idGFpbmluZyB0aGUgYGNsY3NvY2tfcmVsZWFzZV9sb2NrYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgY29uY3VycmVuY3kgYnVnLCBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBhZGRyZXNzLiBUaGUgZml4IGludHJvZHVjZXMgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AsIHdoaWNoLCBpZiBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHksIGVzc2VudGlhbGx5IGNsZWFucyB1cCB0aGUgc29ja2V0IGJ5IGNhbGxpbmcgYHNrLSZndDtza19wcm90LSZndDt1bmhhc2goc2spYCBhbmQgdGhlbiBgc21jX2NsY3NvY2tfcmVsZWFzZShzbWNfc2soc2spKWAuIEludGVyZXN0aW5nLCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHNvY2tldCB0ZWFyZG93biwgd2hpY2ggc2NyZWFtcyAmIzM0O2Z1enogdGhpcyBhcmVhISYjMzQ7IHRvIG1lLgoKTm93LCBgc21jX2luZXRfZGVzdHJveV9zb2NrYCBpcyBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggaXMgZnJ1c3RyYXRpbmcuIENhbiYjMzk7dCBkaXJlY3RseSB0YXJnZXQgaXQuIExldCBtZSBzZWUuLi4gSSBjb3VsZCBmdXp6IGBzbWNfcmVsZWFzZWAsIGBzbWNfY2xjc29ja19yZWxlYXNlYCBvciBgc21jX2luZXRfaW5pdF9zb2NrYC4gTm8sIHdhaXQuLi4gYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AgaXMgY2FsbGVkIGZyb20gYHNrX2NvbW1vbl9yZWxlYXNlYC4gSGFuZyBvbiwgYHNrX2NvbW1vbl9yZWxlYXNlYCBpcyBjYWxsZWQgYnkgYHNtY19yZWxlYXNlYCwgd2hpY2ggaXMgdGhlIGVudHJ5IHBvaW50LiBCdXQgYHNtY19pbmV0X3Byb3QuZGVzdHJveWAgaXMgY2FsbGVkIGJ5IGBza19jb21tb25fcmVsZWFzZWAuIEdvdCBpdC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZm9jdXMgb24gYHNtY19jbGNzb2NrX3JlbGVhc2VgLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoYXQgb25lLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2NsY3NvY2tfcmVsZWFzZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTI4OD1zdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMTctXHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbm5ldC9zbWMvYWZfc21jLmM6MzE4Olx0XHRcdHNtY19jbGNzb2NrX3JlbGVhc2Uoc21jKTtcbm5ldC9zbWMvYWZfc21jLmMtMzE5LVx0XHRcdGxvY2tfc29jayhzayk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0zMzUzPWludCBzbWNfY3JlYXRlX2NsY3NrKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBpbnQgZmFtaWx5KVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzM2Mi1cbm5ldC9zbWMvYWZfc21jLmM6MzM2MzpcdC8qIHNtY19jbGNzb2NrX3JlbGVhc2UoKSBkb2VzIG5vdCB3YWl0IHNtYy1cdTAwM2VjbGNzb2NrLVx1MDAzZXNrJiMzOTtzXG5uZXQvc21jL2FmX3NtYy5jLTMzNjQtXHQgKiBkZXN0cnVjdGlvbjsgIGl0cyBza19zdGF0ZSBtaWdodCBub3QgYmUgVENQX0NMT1NFIGFmdGVyXG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYy0yMy0vKiByZWxlYXNlIHRoZSBjbGNzb2NrIHRoYXQgaXMgYXNzaWduZWQgdG8gdGhlIHNtY19zb2NrICovXG5uZXQvc21jL3NtY19jbG9zZS5jOjI0OnZvaWQgc21jX2NsY3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMjUte1xuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmM9MTI4PXZvaWQgc21jX2Nsb3NlX2FjdGl2ZV9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jLTE4MS1cdFx0cmVsZWFzZV9zb2NrKHNrKTtcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MTgyOlx0XHRzbWNfY2xjc29ja19yZWxlYXNlKHNtYyk7XG5uZXQvc21jL3NtY19jbG9zZS5jLTE4My1cdFx0bG9ja19zb2NrKHNrKTtcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jPTM1Nj1zdGF0aWMgdm9pZCBzbWNfY2xvc2VfcGFzc2l2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc21jL3NtY19jbG9zZS5jLTQ0Mi1cdGlmIChyZWxlYXNlX2NsY3NvY2spXG5uZXQvc21jL3NtY19jbG9zZS5jOjQ0MzpcdFx0c21jX2NsY3NvY2tfcmVsZWFzZShzbWMpO1xubmV0L3NtYy9zbWNfY2xvc2UuYy00NDQtXHRzb2NrX3B1dChzayk7IC8qIHNvY2tfaG9sZCBkb25lIGJ5IHNjaGVkdWxlcnMgb2YgY2xvc2Vfd29yayAqL1xuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmg9MjU9dm9pZCBzbWNfY2xvc2VfaW5pdChzdHJ1Y3Qgc21jX3NvY2sgKnNtYyk7XG5uZXQvc21jL3NtY19jbG9zZS5oOjI2OnZvaWQgc21jX2NsY3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyk7XG5uZXQvc21jL3NtY19jbG9zZS5oLTI3LWludCBzbWNfY2xvc2VfYWJvcnQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcbi0tXG5uZXQvc21jL3NtY19pbmV0LmM9MTIzPXN0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jLTEzMS1cdHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKHNrKTtcbm5ldC9zbWMvc21jX2luZXQuYzoxMzI6XHRzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpO1xubmV0L3NtYy9zbWNfaW5ldC5jLTEzMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTExNQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gcmVhc29uaW5nOgoKKipBbmFseXppbmcgdGhlIFNNQyBTb2NrZXQgUmVsZWFzZSBGbG93KioKClJpZ2h0LCB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgU01DIHNvY2tldCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSByZWxlYXNlIG1lY2hhbmlzbXMuIFRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGhlcmUgaXMgb2J2aW91c2x5IGBTTUNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGBzbWNfY2xjc29ja19yZWxlYXNlYCBhbmQgYHNtY19yZWxlYXNlYCBmdW5jdGlvbnMuIFRob3NlIGFyZSBjbGVhcmx5IHRoZSBjcml0aWNhbCBwb2ludHMgZm9yIHNvY2tldCBjbGVhbnVwLgoKV2FpdCBhIHNlY29uZOKApiBJIHNlZSBgc21jX2luZXRfZGVzdHJveV9zb2NrYCBpcyBjYWxsZWQgZnJvbSBgc2tfY29tbW9uX3JlbGVhc2VgIHdoaWNoICppdHNlbGYqIGlzIGNhbGxlZCBmcm9tIGBzbWNfcmVsZWFzZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCBzdWdnZXN0cyBhIG1vcmUgY29tcGxleCBjaGFpbiBvZiBldmVudHMgdGhhbiBJIGluaXRpYWxseSBhc3N1bWVkLiBJdCYjMzk7cyBub3QganVzdCBhIGRpcmVjdCBjYWxsOyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgY29tbW9uIHNvY2tldCByZWxlYXNlIHBhdGggdGhhdCYjMzk7cyBiZWluZyBsZXZlcmFnZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQuIFNvLCBsZXQgbWUgZ2V0IGEgY2xlYXIgcGljdHVyZSBieSBleGFtaW5pbmcgYHNtY19yZWxlYXNlYCBtb3JlIGNsb3NlbHkgYW5kIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBmcm9tIHRoZXJlLiBUaGlzIG5lc3RlZCBmdW5jdGlvbiBjYWxsIGNvdWxkIGV4cGxhaW4gc29tZSBvZiB0aGUgaXNzdWVzIHJhaXNlZCBpbiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfcmVsZWFzZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM9MTA1ND1zdGF0aWMgaW50IGFwcGxlc21jX2NyZWF0ZV9hY2NlbGVyb21ldGVyKHZvaWQpXG4tLVxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTExMDYtLyogUmVsZWFzZSBhbGwgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIGFjY2VsZXJvbWV0ZXIgKi9cbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYzoxMTA3OnN0YXRpYyB2b2lkIGFwcGxlc21jX3JlbGVhc2VfYWNjZWxlcm9tZXRlcih2b2lkKVxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTExMDgte1xuLS1cbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYz0xMTE1PXN0YXRpYyBpbnQgYXBwbGVzbWNfY3JlYXRlX2xpZ2h0X3NlbnNvcih2b2lkKVxuLS1cbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xMTIxLVxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jOjExMjI6c3RhdGljIHZvaWQgYXBwbGVzbWNfcmVsZWFzZV9saWdodF9zZW5zb3Iodm9pZClcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xMTIzLXtcbi0tXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM9MTEyOT1zdGF0aWMgaW50IGFwcGxlc21jX2NyZWF0ZV9rZXlfYmFja2xpZ2h0KHZvaWQpXG4tLVxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTExMzgtXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM6MTEzOTpzdGF0aWMgdm9pZCBhcHBsZXNtY19yZWxlYXNlX2tleV9iYWNrbGlnaHQodm9pZClcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xMTQwLXtcbi0tXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM9MTQxOD1zdGF0aWMgaW50IF9faW5pdCBhcHBsZXNtY19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTE1NjQtb3V0X2xpZ2h0X2xlZGNsYXNzOlxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jOjE1NjU6XHRhcHBsZXNtY19yZWxlYXNlX2tleV9iYWNrbGlnaHQoKTtcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xNTY2LW91dF9saWdodF9zeXNmczpcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYzoxNTY3Olx0YXBwbGVzbWNfcmVsZWFzZV9saWdodF9zZW5zb3IoKTtcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xNTY4LW91dF9hY2NlbGVyb21ldGVyOlxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jOjE1Njk6XHRhcHBsZXNtY19yZWxlYXNlX2FjY2VsZXJvbWV0ZXIoKTtcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xNTcwLW91dF9pbmZvOlxuLS1cbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYz0xNTg2PXN0YXRpYyB2b2lkIF9fZXhpdCBhcHBsZXNtY19leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTE1ODgtXHRod21vbl9kZXZpY2VfdW5yZWdpc3Rlcihod21vbl9kZXYpO1xuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jOjE1ODk6XHRhcHBsZXNtY19yZWxlYXNlX2tleV9iYWNrbGlnaHQoKTtcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYzoxNTkwOlx0YXBwbGVzbWNfcmVsZWFzZV9saWdodF9zZW5zb3IoKTtcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYzoxNTkxOlx0YXBwbGVzbWNfcmVsZWFzZV9hY2NlbGVyb21ldGVyKCk7XG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMtMTU5Mi1cdGFwcGxlc21jX2Rlc3Ryb3lfbm9kZXMoaW5mb19ncm91cCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYz0yMTEwPXN0YXRpYyBpbnQgc21jX3JlcXVlc3RfYXR0cmliKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMTI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYzoyMTI1OnN0YXRpYyB2b2lkIHNtY19yZWxlYXNlX2F0dHJpYihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMTI2LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jPTIxMzU9c3RhdGljIGlubGluZSB2b2lkIHNtY19yZXF1ZXN0X2RhdGFjcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jLTIxNTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jOjIxNTQ6c3RhdGljIHZvaWQgc21jX3JlbGVhc2VfZGF0YWNzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMTU1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jPTIyMjc9c3RhdGljIGludCBzbWNfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMzkxLSBvdXRfcmVsZWFzZV9hdHRyaWI6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jOjIzOTI6XHRzbWNfcmVsZWFzZV9hdHRyaWIocGRldiwgbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jLTIzOTMtIG91dF9yZWxlYXNlX2lvOlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM9MjQwMz1zdGF0aWMgdm9pZCBzbWNfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmMtMjQxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM6MjQxOTpcdHNtY19yZWxlYXNlX2RhdGFjcyhwZGV2LG5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYzoyNDIwOlx0c21jX3JlbGVhc2VfYXR0cmliKHBkZXYsbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jLTI0MjEtXG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yMTQ9dm9pZCBzbWNfdW5oYXNoX3NrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTIyNy0gKi9cbm5ldC9zbWMvYWZfc21jLmM6MjI4OnZvaWQgc21jX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxubmV0L3NtYy9hZl9zbWMuYy0yMjkte1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MjM4PXN0cnVjdCBwcm90byBzbWNfcHJvdG8gPSB7XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yNDMtXHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbm5ldC9zbWMvYWZfc21jLmM6MjQ0Olx0LnJlbGVhc2VfY2JcdD0gc21jX3JlbGVhc2VfY2IsXG5uZXQvc21jL2FmX3NtYy5jLTI0NS1cdC5vYmpfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHNtY19zb2NrKSxcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTI1MT1zdHJ1Y3QgcHJvdG8gc21jX3Byb3RvNiA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI1Ni1cdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxubmV0L3NtYy9hZl9zbWMuYzoyNTc6XHQucmVsZWFzZV9jYlx0PSBzbWNfcmVsZWFzZV9jYixcbm5ldC9zbWMvYWZfc21jLmMtMjU4LVx0Lm9ial9zaXplXHQ9IHNpemVvZihzdHJ1Y3Qgc21jX3NvY2spLFxuLS1cbm5ldC9zbWMvYWZfc21jLmM9Mjc5PXN0YXRpYyB2b2lkIHNtY19yZXN0b3JlX2ZhbGxiYWNrX2NoYW5nZXMoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0yODctXG5uZXQvc21jL2FmX3NtYy5jOjI4ODpzdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG5uZXQvc21jL2FmX3NtYy5jLTI4OS17XG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMjctXG5uZXQvc21jL2FmX3NtYy5jOjMyODppbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC9zbWMvYWZfc21jLmMtMzI5LXtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTM2MC1cbm5ldC9zbWMvYWZfc21jLmM6MzYxOlx0cmMgPSBfX3NtY19yZWxlYXNlKHNtYyk7XG5uZXQvc21jL2FmX3NtYy5jLTM2Mi1cbi0tXG5uZXQvc21jL2FmX3NtYy5jPTcwMD1zdGF0aWMgdm9pZCBzbWNfY29ubl9zYXZlX3BlZXJfaW5mb19mY2Uoc3RydWN0IHNtY19zb2NrICpzbWMsXG4tLVxubmV0L3NtYy9hZl9zbWMuYy03MjAtXHRzbWMtXHUwMDNlY29ubi5sZ3ItXHUwMDNlcGVlcl9vcyA9IGZjZS1cdTAwM2Vvc190eXBlO1xubmV0L3NtYy9hZl9zbWMuYzo3MjE6XHRzbWMtXHUwMDNlY29ubi5sZ3ItXHUwMDNlcGVlcl9zbWNfcmVsZWFzZSA9IGZjZS1cdTAwM2VyZWxlYXNlO1xubmV0L3NtYy9hZl9zbWMuYy03MjItXHRpZiAoc21jX2lzYXNjaWkoZmNlLVx1MDAzZWhvc3RuYW1lKSlcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTE4NTc9dm9pZCBzbWNfY2xvc2Vfbm9uX2FjY2VwdGVkKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTE4NjUtXHRcdFdSSVRFX09OQ0Uoc2stXHUwMDNlc2tfbGluZ2VydGltZSwgU01DX01BWF9TVFJFQU1fV0FJVF9USU1FT1VUKTtcbm5ldC9zbWMvYWZfc21jLmM6MTg2NjpcdF9fc21jX3JlbGVhc2Uoc21jKTtcbm5ldC9zbWMvYWZfc21jLmMtMTg2Ny1cdHJlbGVhc2Vfc29jayhzayk7XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0zMzMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19zb2NrX29wcyA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTMzMzQtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbm5ldC9zbWMvYWZfc21jLmM6MzMzNTpcdC5yZWxlYXNlXHQ9IHNtY19yZWxlYXNlLFxubmV0L3NtYy9hZl9zbWMuYy0zMzM2LVx0LmJpbmRcdFx0PSBzbWNfYmluZCxcbi0tXG5uZXQvc21jL3NtYy5oPTQxPXZvaWQgc21jX3VuaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3NtYy9zbWMuaDo0Mjp2b2lkIHNtY19yZWxlYXNlX2NiKHN0cnVjdCBzb2NrICpzayk7XG5uZXQvc21jL3NtYy5oLTQzLVxubmV0L3NtYy9zbWMuaDo0NDppbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7XG5uZXQvc21jL3NtYy5oLTQ1LWludCBzbWNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsXG4tLVxubmV0L3NtYy9zbWNfY2RjLmM9MjY9c3RhdGljIHZvaWQgc21jX2NkY190eF9oYW5kbGVyKHN0cnVjdCBzbWNfd3JfdHhfcGVuZF9wcml2ICpwbmRfc25kLFxuLS1cbm5ldC9zbWMvc21jX2NkYy5jLTU2LVx0XHQgKiBVc2VyIGNvbnRleHQgd2lsbCBsYXRlciB0cnkgdG8gc2VuZCB3aGVuIGl0IHJlbGVhc2Ugc29ja19sb2NrXG5uZXQvc21jL3NtY19jZGMuYzo1NzpcdFx0ICogaW4gc21jX3JlbGVhc2VfY2IoKVxubmV0L3NtYy9zbWNfY2RjLmMtNTgtXHRcdCAqL1xuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmM9MzU2PXN0YXRpYyB2b2lkIHNtY19jbG9zZV9wYXNzaXZlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zbWMvc21jX2Nsb3NlLmMtMzk5LVx0XHQgICAgc21jX2Nsb3NlX3NlbnRfYW55X2Nsb3NlKGNvbm4pKSB7XG5uZXQvc21jL3NtY19jbG9zZS5jOjQwMDpcdFx0XHQvKiBzbWNfcmVsZWFzZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBsb2NhbGx5ICovXG5uZXQvc21jL3NtY19jbG9zZS5jLTQwMS1cdFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFNNQ19DTE9TRUQ7XG4tLVxubmV0L3NtYy9zbWNfY29yZS5jPTMwOT1zdGF0aWMgaW50IHNtY19ubF9maWxsX2xncl92Ml9jb21tb24oc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsXG4tLVxubmV0L3NtYy9zbWNfY29yZS5jLTMxOC1cdFx0Z290byBlcnJ2MmF0dHI7XG5uZXQvc21jL3NtY19jb3JlLmM6MzE5Olx0aWYgKG5sYV9wdXRfdTgoc2tiLCBTTUNfTkxBX0xHUl9WMl9SRUwsIGxnci1cdTAwM2VwZWVyX3NtY19yZWxlYXNlKSlcbm5ldC9zbWMvc21jX2NvcmUuYy0zMjAtXHRcdGdvdG8gZXJydjJhdHRyO1xuLS1cbm5ldC9zbWMvc21jX2NvcmUuaD0yODY9c3RydWN0IHNtY19saW5rX2dyb3VwIHtcbi0tXG5uZXQvc21jL3NtY19jb3JlLmgtMzEyLVx0dThcdFx0XHRwZWVyX29zO1x0LyogcGVlciBvcGVyYXRpbmcgc3lzdGVtICovXG5uZXQvc21jL3NtY19jb3JlLmg6MzEzOlx0dThcdFx0XHRwZWVyX3NtY19yZWxlYXNlO1xubmV0L3NtYy9zbWNfY29yZS5oLTMxNC1cdHU4XHRcdFx0cGVlcl9ob3N0bmFtZVtTTUNfTUFYX0hPU1ROQU1FX0xFTl07XG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jPTIzPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXRfcHJvdCA9IHtcbi0tXG5uZXQvc21jL3NtY19pbmV0LmMtMjktXHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbm5ldC9zbWMvc21jX2luZXQuYzozMDpcdC5yZWxlYXNlX2NiXHQ9IHNtY19yZWxlYXNlX2NiLFxubmV0L3NtYy9zbWNfaW5ldC5jLTMxLVx0Lm9ial9zaXplXHQ9IHNpemVvZihzdHJ1Y3Qgc21jX3NvY2spLFxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz0zNj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzbWNfaW5ldF9zdHJlYW1fb3BzID0ge1xuLS1cbm5ldC9zbWMvc21jX2luZXQuYy0zOC1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxubmV0L3NtYy9zbWNfaW5ldC5jOjM5Olx0LnJlbGVhc2VcdD0gc21jX3JlbGVhc2UsXG5uZXQvc21jL3NtY19pbmV0LmMtNDAtXHQuYmluZFx0XHQ9IHNtY19iaW5kLFxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz03MD1zdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0Nl9wcm90ID0ge1xuLS1cbm5ldC9zbWMvc21jX2luZXQuYy03Ni1cdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxubmV0L3NtYy9zbWNfaW5ldC5jOjc3Olx0LnJlbGVhc2VfY2JcdD0gc21jX3JlbGVhc2VfY2IsXG5uZXQvc21jL3NtY19pbmV0LmMtNzgtXHQub2JqX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBzbWM2X3NvY2spLFxuLS1cbm5ldC9zbWMvc21jX2luZXQuYz04ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzbWNfaW5ldDZfc3RyZWFtX29wcyA9IHtcbi0tXG5uZXQvc21jL3NtY19pbmV0LmMtODYtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbm5ldC9zbWMvc21jX2luZXQuYzo4NzpcdC5yZWxlYXNlXHQ9IHNtY19yZWxlYXNlLFxubmV0L3NtYy9zbWNfaW5ldC5jLTg4LVx0LmJpbmRcdFx0PSBzbWNfYmluZCxcbi0tXG5uZXQvc21jL3NtY19pbmV0LmM9MTIzPXN0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jLTEyNi1cdCAqIHdpdGhvdXQgY2xjc29ja19yZWxlYXNlX2xvY2ssIHdoaWxlIHNrX2NvbW1vbl9yZWxlYXNlKCkgY2FsbHNcbm5ldC9zbWMvc21jX2luZXQuYzoxMjc6XHQgKiAuZGVzdHJveSBiZWZvcmUgLnVuaGFzaC4gVW5oYXNoIGZpcnN0LCBhcyBfX3NtY19yZWxlYXNlKCkgZG9lcyxcbm5ldC9zbWMvc21jX2luZXQuYy0xMjgtXHQgKiBzbyBubyBkdW1wIGNhbiBvYnNlcnZlIHRoZSBjbGNzb2NrIGJlaW5nIHJlbGVhc2VkOyB0aGUgc2Vjb25kXG4tLVxubmV0L3NtYy9zbWNfbGxjLmM9NDQ3PWludCBzbWNfbGxjX3NlbmRfY29uZmlybV9saW5rKHN0cnVjdCBzbWNfbGluayAqbGluayxcbi0tXG5uZXQvc21jL3NtY19sbGMuYy00NzQtXHRpZiAobGluay1cdTAwM2VsZ3ItXHUwMDNlc21jX3ZlcnNpb24gPT0gU01DX1YyIFx1MDAyNlx1MDAyNlxubmV0L3NtYy9zbWNfbGxjLmM6NDc1Olx0ICAgIGxpbmstXHUwMDNlbGdyLVx1MDAzZXBlZXJfc21jX3JlbGVhc2UgXHUwMDNlPSBTTUNfUkVMRUFTRV8xKSB7XG5uZXQvc21jL3NtY19sbGMuYy00NzYtXHRcdGNvbmZsbGMtXHUwMDNlbWF4X2Nvbm5zID0gbGluay1cdTAwM2VsZ3ItXHUwMDNlbWF4X2Nvbm5zO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfc21jLmM9NDA9aW50IGZhbGxiYWNrX2NudCA9IDA7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3NtYy5jLTQxLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9zbWMuYzo0MjpTRUMoXCYjMzQ7ZmVudHJ5L3NtY19yZWxlYXNlXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9zbWMuYzo0MzppbnQgQlBGX1BST0coYnBmX3NtY19yZWxlYXNlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9zbWMuYy00NC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyOTgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gU01DIFNvY2tldCBMaWZlY3ljbGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zOiBgc21jX3JlbGVhc2VgLCBgc21jX2NsY3NvY2tfcmVsZWFzZWAsIGFuZCBgc21jX2luZXRfaW5pdF9zb2NrYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY3JpdGljYWwgcGllY2VzIHJlbGF0ZWQgdG8gbWFuYWdpbmcgdGhlIFNNQyBzb2NrZXQgbGlmZWN5Y2xlLiBIbW0sIGJ1dCBJIHNob3VsZCBwYXVzZS4gSSBuZWVkIHRvIGNsYXJpZnkgc29tZXRoaW5nIGFib3V0IHRoZSBkZXN0cnVjdGlvbiBwcm9jZXNzLiBJIHJlY2FsbCBgc21jX2luZXRfZGVzdHJveV9zb2NrYCBiZWluZyBjYWxsZWQgZnJvbSBgc2tfY29tbW9uX3JlbGVhc2VgLiBOb3csIGlzICp0aGF0KiBjYWxsZWQgZnJvbSBgaW5ldF9yZWxlYXNlYCBvciBgaW5ldDZfcmVsZWFzZWA/IEl0JiMzOTtzIGVhc3kgdG8gZ2V0IGxvc3QgaW4gdGhlc2UgbGF5ZXJzLi4uTm8gd2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBjb250ZXh0LiBgc21jX2luZXRfcHJvdGAgaXMgdGhlIHN0cnVjdHVyZSB1c2VkIGZvciBgQUZfSU5FVGAgc29ja2V0cyBjcmVhdGVkIHdpdGggYElQUFJPVE9fU01DYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBgc21jX2luZXRfcHJvdGAsIHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QgYW5kIHRoYXQgaXQmIzM5O3MgaGFuZGxpbmcgdGhlIHRlYXJkb3duIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgaG93IGl0IGlzIGFsbCBjb25uZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtY19pbmV0X3Byb3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfaW5ldC5jPTIxPXN0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xubmV0L3NtYy9zbWNfaW5ldC5jLTIyLVxubmV0L3NtYy9zbWNfaW5ldC5jOjIzOnN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXRfcHJvdCA9IHtcbm5ldC9zbWMvc21jX2luZXQuYy0yNC1cdC5uYW1lXHRcdD0gXCYjMzQ7SU5FVF9TTUNcJiMzNDssXG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jPTM2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHNtY19pbmV0X3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jLTU2LVxubmV0L3NtYy9zbWNfaW5ldC5jOjU3OnN0YXRpYyBzdHJ1Y3QgaW5ldF9wcm90b3N3IHNtY19pbmV0X3Byb3Rvc3cgPSB7XG5uZXQvc21jL3NtY19pbmV0LmMtNTgtXHQudHlwZVx0XHQ9IFNPQ0tfU1RSRUFNLFxubmV0L3NtYy9zbWNfaW5ldC5jLTU5LVx0LnByb3RvY29sXHQ9IElQUFJPVE9fU01DLFxubmV0L3NtYy9zbWNfaW5ldC5jOjYwOlx0LnByb3RcdFx0PSBcdTAwMjZzbWNfaW5ldF9wcm90LFxubmV0L3NtYy9zbWNfaW5ldC5jLTYxLVx0Lm9wc1x0XHQ9IFx1MDAyNnNtY19pbmV0X3N0cmVhbV9vcHMsXG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jPTEzNT1pbnQgX19pbml0IHNtY19pbmV0X2luaXQodm9pZClcbi0tXG5uZXQvc21jL3NtY19pbmV0LmMtMTM4LVxubmV0L3NtYy9zbWNfaW5ldC5jOjEzOTpcdHJjID0gcHJvdG9fcmVnaXN0ZXIoXHUwMDI2c21jX2luZXRfcHJvdCwgMSk7XG5uZXQvc21jL3NtY19pbmV0LmMtMTQwLVx0aWYgKHJjKSB7XG5uZXQvc21jL3NtY19pbmV0LmM6MTQxOlx0XHRwcl9lcnIoXCYjMzQ7JXM6IHByb3RvX3JlZ2lzdGVyIHNtY19pbmV0X3Byb3QgZmFpbHMgd2l0aCAlZFxcblwmIzM0Oyxcbm5ldC9zbWMvc21jX2luZXQuYy0xNDItXHRcdCAgICAgICBfX2Z1bmNfXywgcmMpO1xuLS1cbm5ldC9zbWMvc21jX2luZXQuYy0xNDUtXHQvKiBubyByZXR1cm4gdmFsdWUgKi9cbm5ldC9zbWMvc21jX2luZXQuYzoxNDY6XHRpbmV0X3JlZ2lzdGVyX3Byb3Rvc3coXHUwMDI2c21jX2luZXRfcHJvdG9zdyk7XG5uZXQvc21jL3NtY19pbmV0LmMtMTQ3LVxuLS1cbm5ldC9zbWMvc21jX2luZXQuYy0xNjQtb3V0X2luZXQ2X3Byb3Q6XG5uZXQvc21jL3NtY19pbmV0LmM6MTY1Olx0aW5ldF91bnJlZ2lzdGVyX3Byb3Rvc3coXHUwMDI2c21jX2luZXRfcHJvdG9zdyk7XG5uZXQvc21jL3NtY19pbmV0LmM6MTY2Olx0cHJvdG9fdW5yZWdpc3RlcihcdTAwMjZzbWNfaW5ldF9wcm90KTtcbm5ldC9zbWMvc21jX2luZXQuYy0xNjctI2VuZGlmIC8qIENPTkZJR19JUFY2ICovXG4tLVxubmV0L3NtYy9zbWNfaW5ldC5jPTE3MT12b2lkIHNtY19pbmV0X2V4aXQodm9pZClcbi0tXG5uZXQvc21jL3NtY19pbmV0LmMtMTc2LSNlbmRpZiAvKiBDT05GSUdfSVBWNiAqL1xubmV0L3NtYy9zbWNfaW5ldC5jOjE3NzpcdGluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KFx1MDAyNnNtY19pbmV0X3Byb3Rvc3cpO1xubmV0L3NtYy9zbWNfaW5ldC5jOjE3ODpcdHByb3RvX3VucmVnaXN0ZXIoXHUwMDI2c21jX2luZXRfcHJvdCk7XG5uZXQvc21jL3NtY19pbmV0LmMtMTc5LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NTYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNNQyBTb2NrZXQgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBjb25maXJtaW5nIHRoYXQgYHNtY19pbmV0X3Byb3RgIGlzIGluZGVlZCB0aGUgcHJvdG9jb2wgc3RydWN0dXJlIHVzZWQgZm9yIHNvY2tldHMgZW1wbG95aW5nIGBJUFBST1RPX1NNQ2AuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgbGV0JiMzOTtzIHNlZS4uLiB0aGUgYHNtY19pbmV0X3N0cmVhbV9vcHNgIHN0cnVjdHVyZSBoYXMgYSBgLnJlbGVhc2VgIGZ1bmN0aW9uIHBvaW50ZXIgc2V0IHRvIGBzbWNfcmVsZWFzZWAuIFRoYXQgbG9va3MgcmlnaHQsIHRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIHN0cnVjdHVyZS4gSG1tLCBidXQgd2hlcmUgaXMgYHNtY19yZWxlYXNlYCBkZWZpbmVkPyBBaCwgeWVzLCBpdOKAmXMgaW4gYGFmX3NtYy5jYC4gT2theSwgZ29vZC4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGludG8gYGFmX3NtYy5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgYHNtY19yZWxlYXNlYC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZnVuY3Rpb24gaXMgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBzbWNfcmVsZWFzZVxcKHN0cnVjdCBzb2NrZXQgXFwqc29ja1xcKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTI4OD1zdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9hZl9zbWMuYy0zMjctXG5uZXQvc21jL2FmX3NtYy5jOjMyODppbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbm5ldC9zbWMvYWZfc21jLmMtMzI5LXtcbi0tXG5uZXQvc21jL3NtYy5oPTQyPXZvaWQgc21jX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKTtcbm5ldC9zbWMvc21jLmgtNDMtXG5uZXQvc21jL3NtYy5oOjQ0OmludCBzbWNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTtcbm5ldC9zbWMvc21jLmgtNDUtaW50IHNtY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFNNQyBTb2NrZXQgUmVsZWFzZSBNZWNoYW5pc20qKgoKT2theSwgc28gYHNtY19yZWxlYXNlYCBpcywgYXMgSSByZWNhbGwsIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIGEgc29ja2V0IGluIHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIGZyYW1ld29yay4gVGhlIHBhdGNoIG5vdGVzIHRlbGwgbWUgaXQmIzM5O3MgYWRkaW5nIGEgYC5kZXN0cm95YCBmdW5jdGlvbiBwb2ludGVyIHRvIGJvdGggYHNtY19pbmV0X3Byb3RgIGFuZCBgc21jX2luZXQ2X3Byb3RgLiAgTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCByaWdodCwgYSBjbGVhbnVwIGZ1bmN0aW9uLiYjMzQ7CgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzICpob3cqIGlzIHRoaXMgYC5kZXN0cm95YCBjYWxsYmFjayBhY3R1YWxseSBpbnZva2VkPyBUaGUgcGF0Y2ggcmVmZXJlbmNlcyBgc2tfY29tbW9uX3JlbGVhc2VgLiBNeSBtZW1vcnkmIzM5O3MgZnV6enksIGJ1dCBJJiMzOTttIHByZXR0eSBzdXJlIGBza19jb21tb25fcmVsZWFzZWAgaXMgcGFydCBvZiB0aGUgc3RhbmRhcmQgTGludXggbmV0d29ya2luZyBzdGFjaywgYW5kIGl0JiMzOTtzIHVzZWQgZm9yIHJlbGVhc2luZyB0aGUgY29tbW9uIHNvY2tldCBlbGVtZW50cy4gQW5kIGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgaXQmIzM5O3MgY2FsbGVkIGJ5IHRoZSBnZW5lcmFsIHNvY2tldCByZWxlYXNlIGZ1bmN0aW9uLCB3aGljaCBoZXJlIGlzIGBzbWNfcmVsZWFzZWAuIEJ1dCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQuICBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNvZGUgZm9yIGBzbWNfcmVsZWFzZWAgdG8gY29uZmlybSB0aGlzIHNlcXVlbmNlIGFuZCBlbnN1cmUgdGhlcmUgaXNuJiMzOTt0IHNvbWUgb3RoZXIgaW5kaXJlY3QgcGF0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IHBvaW50IGF0IHdoaWNoIGAuZGVzdHJveWAgaXMgY2FsbGVkIHdpdGhpbiB0aGUgcmVsZWFzZSBwcm9jZXNzIHRvIGZ1bGx5IGdyYXNwIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX2NvbW1vbl9yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTMzNzM9c3RhdGljIGludCBzbWNfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywgaW50IHByb3RvY29sLFxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzM5Ni1cdGlmIChyYykge1xubmV0L3NtYy9hZl9zbWMuYzozMzk3Olx0XHRza19jb21tb25fcmVsZWFzZShzayk7XG5uZXQvc21jL2FmX3NtYy5jLTMzOTgtXHRcdHNvY2stXHUwMDNlc2sgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQ2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBSZWxlYXNlIFByb2NlZHVyZXMqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgc2tfY29tbW9uX3JlbGVhc2VgIHdhcyBkaXJlY3RseSBjYWxsZWQgYnkgYHNtY19yZWxlYXNlYCwgYnV0IHNvbWV0aGluZyBmZWVscyBvZmYuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBjb25uZWN0aW9uLiBMZXQmIzM5O3Mgbm90IGFzc3VtZSBhbnl0aGluZyBoZXJlLCBsZXQmIzM5O3MgZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gVGltZSB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgX19zbWNfcmVsZWFzZWAgYW5kIHNlZSBob3cgdGhlIGZ1bmN0aW9ucyBpbnRlcmFjdC4gSSBuZWVkIHRvIGtub3cgdGhlIGNhbGwgc3RhY2suIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBiZWZvcmUgbWFraW5nIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmVsZWFzZSBwcm9jZWR1cmUuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxlIGRpZmZlcmVuY2VzIGZyb20gd2hhdCBJIGluaXRpYWxseSB1bmRlcnN0b29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3NtY19yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jPTI3OT1zdGF0aWMgdm9pZCBzbWNfcmVzdG9yZV9mYWxsYmFja19jaGFuZ2VzKHN0cnVjdCBzbWNfc29jayAqc21jKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMjg3LVxubmV0L3NtYy9hZl9zbWMuYzoyODg6c3RhdGljIGludCBfX3NtY19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxubmV0L3NtYy9hZl9zbWMuYy0yODkte1xuLS1cbm5ldC9zbWMvYWZfc21jLmM9MzI4PWludCBzbWNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMzYwLVxubmV0L3NtYy9hZl9zbWMuYzozNjE6XHRyYyA9IF9fc21jX3JlbGVhc2Uoc21jKTtcbm5ldC9zbWMvYWZfc21jLmMtMzYyLVxuLS1cbm5ldC9zbWMvYWZfc21jLmM9MTg1Nz12b2lkIHNtY19jbG9zZV9ub25fYWNjZXB0ZWQoc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9zbWMvYWZfc21jLmMtMTg2NS1cdFx0V1JJVEVfT05DRShzay1cdTAwM2Vza19saW5nZXJ0aW1lLCBTTUNfTUFYX1NUUkVBTV9XQUlUX1RJTUVPVVQpO1xubmV0L3NtYy9hZl9zbWMuYzoxODY2Olx0X19zbWNfcmVsZWFzZShzbWMpO1xubmV0L3NtYy9hZl9zbWMuYy0xODY3LVx0cmVsZWFzZV9zb2NrKHNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMjAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyB5b3VyIHN1bW1hcnk6CgoqKkRlY29uc3RydWN0aW5nIFNvY2tldCBEZXN0cnVjdGlvbjogQSBEZWVwIERpdmUgaW50byBgX19zbWNfcmVsZWFzZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc29ja2V0IGlzIGJlaW5nIGRlbW9saXNoZWQuIFRoaXMgbWVhbnMgY3JhY2tpbmcgb3BlbiB0aGUgYF9fc21jX3JlbGVhc2VgIGZ1bmN0aW9uIGFuZCBnZXR0aW5nIGRvd24gdG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBpdHMgaW5uZXIgd29ya2luZ3MuIEkgbmVlZCB0byBvYnNlcnZlIGl0cyBwcmVjaXNlIHN0ZXBzIGluIHRlYXJpbmcgZG93biB0aGUgY29ubmVjdGlvbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgbWVtb3J5IGRlYWxsb2NhdGlvbiwgY29ubmVjdGlvbiB0ZXJtaW5hdGlvbiBzZXF1ZW5jZXMsIHN0YXRlIHJlc2V0cywgcmVzb3VyY2UgY2xlYW51cCwgYW5kIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBjb250cmlidXRlIHRvIGEgY29tcGxldGUgYW5kIGNsZWFuIHNodXRkb3duLiBJJiMzOTtsbCBsb29rIGZvciBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBwb3RlbnRpYWwgZm9yIG9ycGhhbmVkIGRhdGEgb3IgcGVuZGluZyBvcGVyYXRpb25zLiBJIGV4cGVjdCB0aGlzIHdpbGwgYmUgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIGFuZCBhIHRob3JvdWdoIGFuYWx5c2lzIG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBjbGFyaWZ5IHRoZSBzb2NrZXQmIzM5O3MgbGlmZWN5Y2xlIGR1cmluZyBpdHMgZmluYWwgbW9tZW50cy4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIHBpY3R1cmUgb2YgdGhpcyBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI4ODpcdHN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbiAyODk6XHR7XG4gMjkwOlx0XHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZzbWMtXHUwMDNlc2s7XG4gMjkxOlx0XHRpbnQgcmMgPSAwO1xuIDI5MjpcdFxuIDI5MzpcdFx0aWYgKCFzbWMtXHUwMDNldXNlX2ZhbGxiYWNrKSB7XG4gMjk0Olx0XHRcdHJjID0gc21jX2Nsb3NlX2FjdGl2ZShzbWMpO1xuIDI5NTpcdFx0XHRzbWNfc29ja19zZXRfZmxhZyhzaywgU09DS19ERUFEKTtcbiAyOTY6XHRcdFx0c2stXHUwMDNlc2tfc2h1dGRvd24gfD0gU0hVVERPV05fTUFTSztcbiAyOTc6XHRcdH0gZWxzZSB7XG4gMjk4Olx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBTTUNfQ0xPU0VEKSB7XG4gMjk5Olx0XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFNNQ19MSVNURU4gXHUwMDI2XHUwMDI2XG4gMzAwOlx0XHRcdFx0ICAgIHNrLVx1MDAzZXNrX3N0YXRlICE9IFNNQ19JTklUKVxuIDMwMTpcdFx0XHRcdFx0c29ja19wdXQoc2spOyAvKiBwYXNzaXZlIGNsb3NpbmcgKi9cbiAzMDI6XHRcdFx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gU01DX0xJU1RFTikge1xuIDMwMzpcdFx0XHRcdFx0Lyogd2FrZSB1cCBjbGNzb2NrIGFjY2VwdCAqL1xuIDMwNDpcdFx0XHRcdFx0cmMgPSBrZXJuZWxfc29ja19zaHV0ZG93bihzbWMtXHUwMDNlY2xjc29jayxcbiAzMDU6XHRcdFx0XHRcdFx0XHRcdCAgU0hVVF9SRFdSKTtcbiAzMDY6XHRcdFx0XHR9XG4gMzA3Olx0XHRcdFx0c2stXHUwMDNlc2tfc3RhdGUgPSBTTUNfQ0xPU0VEO1xuIDMwODpcdFx0XHRcdHNrLVx1MDAzZXNrX3N0YXRlX2NoYW5nZShzayk7XG4gMzA5Olx0XHRcdH1cbiAzMTA6XHRcdFx0c21jX3Jlc3RvcmVfZmFsbGJhY2tfY2hhbmdlcyhzbWMpO1xuIDMxMTpcdFx0fVxuIDMxMjpcdFxuIDMxMzpcdFx0c2stXHUwMDNlc2tfcHJvdC1cdTAwM2V1bmhhc2goc2spO1xuIDMxNDpcdFxuIDMxNTpcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFNNQ19DTE9TRUQpIHtcbiAzMTY6XHRcdFx0aWYgKHNtYy1cdTAwM2VjbGNzb2NrKSB7XG4gMzE3Olx0XHRcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiAzMTg6XHRcdFx0XHRzbWNfY2xjc29ja19yZWxlYXNlKHNtYyk7XG4gMzE5Olx0XHRcdFx0bG9ja19zb2NrKHNrKTtcbiAzMjA6XHRcdFx0fVxuIDMyMTpcdFx0XHRpZiAoIXNtYy1cdTAwM2V1c2VfZmFsbGJhY2spXG4gMzIyOlx0XHRcdFx0c21jX2Nvbm5fZnJlZShcdTAwMjZzbWMtXHUwMDNlY29ubik7XG4gMzIzOlx0XHR9XG4gMzI0Olx0XG4gMzI1Olx0XHRyZXR1cm4gcmM7XG4gMzI2Olx0fVxuIDMyNzpcdFxuIDMyODpcdGludCBzbWNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxuIDMyOTpcdHtcbiAzMzA6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gMzMxOlx0XHRzdHJ1Y3Qgc21jX3NvY2sgKnNtYztcbiAzMzI6XHRcdGludCBvbGRfc3RhdGUsIHJjID0gMDtcbiAzMzM6XHRcbiAzMzQ6XHRcdGlmICghc2spXG4gMzM1Olx0XHRcdGdvdG8gb3V0O1xuIDMzNjpcdFxuIDMzNzpcdFx0c29ja19ob2xkKHNrKTsgLyogc29ja19wdXQgYmVsb3cgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5ODIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTTUMgU29ja2V0IFJlbGVhc2UgTWVjaGFuaXNtKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBfX3NtY19yZWxlYXNlYCBmdW5jdGlvbiBhbmQgaXQmIzM5O3MgY2FsbGluZyBgc2stJmd0O3NrX3Byb3QtJmd0O3VuaGFzaChzaylgIGFuZCBhbHNvIGBzbWNfY2xjc29ja19yZWxlYXNlKHNtYylgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgLmRlc3Ryb3lgIG1ldGhvZCBpbnRvIGBzbWNfaW5ldF9wcm90YCBhbmQgYHNtY19pbmV0Nl9wcm90YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYF9fc21jX3JlbGVhc2VgIGV2ZW4gKnVzZXMqIHRob3NlIGluZXQgcHJvdG9jb2xzLgoKSGFuZyBvbi4gYF9fc21jX3JlbGVhc2VgIGlzIGFjdHVhbGx5IHVzZWQgZm9yIGBzbWNfcHJvdG9gIGFuZCBgc21jX3Byb3RvNmAsIHdoaWNoIGFyZSBmb3IgYEFGX1NNQ2Agc29ja2V0cy4gVGhhdCBtYWtlcyBzZW5zZS4gQnV0IHRoZSBgc21jX2luZXRfcHJvdGAgcHJvdG9jb2xzIGFyZSB1c2VkIGZvciBgSVBQUk9UT19TTUNgIHdpdGhpbiBgQUZfSU5FVGAgYW5kIGBBRl9JTkVUNmAuIE9rYXksIHNvIGBfX3NtY19yZWxlYXNlYCBpc24mIzM5O3QgZGlyZWN0bHkgcmVsYXRlZCB0byB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgd2l0aCB0aG9zZSBzcGVjaWZpYyBpbmV0IHByb3RvY29scy4KClRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgcHJvdG9jb2xzIGFuZCBob3cgdGhleSYjMzk7cmUgcmVsZWFzZWQgSSYjMzk7bGwgY2hlY2sgYHNtY19pbmV0X3Byb3RgIGluIGBuZXQvc21jL3NtY19pbmV0LmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2luZXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjM6XHRzdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0X3Byb3QgPSB7XG4gIDI0Olx0XHQubmFtZVx0XHQ9IFwmIzM0O0lORVRfU01DXCYjMzQ7LFxuICAyNTpcdFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gIDI2Olx0XHQuaW5pdFx0XHQ9IHNtY19pbmV0X2luaXRfc29jayxcbiAgMjc6XHRcdC5kZXN0cm95XHQ9IHNtY19pbmV0X2Rlc3Ryb3lfc29jayxcbiAgMjg6XHRcdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG4gIDI5Olx0XHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbiAgMzA6XHRcdC5yZWxlYXNlX2NiXHQ9IHNtY19yZWxlYXNlX2NiLFxuICAzMTpcdFx0Lm9ial9zaXplXHQ9IHNpemVvZihzdHJ1Y3Qgc21jX3NvY2spLFxuICAzMjpcdFx0Lmguc21jX2hhc2hcdD0gXHUwMDI2c21jX3Y0X2hhc2hpbmZvLFxuICAzMzpcdFx0LnNsYWJfZmxhZ3NcdD0gU0xBQl9UWVBFU0FGRV9CWV9SQ1UsXG4gIDM0Olx0fTtcbiAgMzU6XHRcbiAgMzY6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzbWNfaW5ldF9zdHJlYW1fb3BzID0ge1xuICAzNzpcdFx0LmZhbWlseVx0XHQ9IFBGX0lORVQsXG4gIDM4Olx0XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiAgMzk6XHRcdC5yZWxlYXNlXHQ9IHNtY19yZWxlYXNlLFxuICA0MDpcdFx0LmJpbmRcdFx0PSBzbWNfYmluZCxcbiAgNDE6XHRcdC5jb25uZWN0XHQ9IHNtY19jb25uZWN0LFxuICA0MjpcdFx0LnNvY2tldHBhaXJcdD0gc29ja19ub19zb2NrZXRwYWlyLFxuICA0MzpcdFx0LmFjY2VwdFx0XHQ9IHNtY19hY2NlcHQsXG4gIDQ0Olx0XHQuZ2V0bmFtZVx0PSBzbWNfZ2V0bmFtZSxcbiAgNDU6XHRcdC5wb2xsXHRcdD0gc21jX3BvbGwsXG4gIDQ2Olx0XHQuaW9jdGxcdFx0PSBzbWNfaW9jdGwsXG4gIDQ3Olx0XHQubGlzdGVuXHRcdD0gc21jX2xpc3RlbixcbiAgNDg6XHRcdC5zaHV0ZG93blx0PSBzbWNfc2h1dGRvd24sXG4gIDQ5Olx0XHQuc2V0c29ja29wdFx0PSBzbWNfc2V0c29ja29wdCxcbiAgNTA6XHRcdC5nZXRzb2Nrb3B0XHQ9IHNtY19nZXRzb2Nrb3B0LFxuICA1MTpcdFx0LnNlbmRtc2dcdD0gc21jX3NlbmRtc2csXG4gIDUyOlx0XHQucmVjdm1zZ1x0PSBzbWNfcmVjdm1zZyxcbiAgNTM6XHRcdC5tbWFwXHRcdD0gc29ja19ub19tbWFwLFxuICA1NDpcdFx0LnNwbGljZV9yZWFkXHQ9IHNtY19zcGxpY2VfcmVhZCxcbiAgNTU6XHR9O1xuICA1NjpcdFxuICA1NzpcdHN0YXRpYyBzdHJ1Y3QgaW5ldF9wcm90b3N3IHNtY19pbmV0X3Byb3Rvc3cgPSB7XG4gIDU4Olx0XHQudHlwZVx0XHQ9IFNPQ0tfU1RSRUFNLFxuICA1OTpcdFx0LnByb3RvY29sXHQ9IElQUFJPVE9fU01DLFxuICA2MDpcdFx0LnByb3RcdFx0PSBcdTAwMjZzbWNfaW5ldF9wcm90LFxuICA2MTpcdFx0Lm9wc1x0XHQ9IFx1MDAyNnNtY19pbmV0X3N0cmVhbV9vcHMsXG4gIDYyOlx0fTtcbiAgNjM6XHRcbiAgNjQ6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiAgNjU6XHRzdHJ1Y3Qgc21jNl9zb2NrIHtcbiAgNjY6XHRcdHN0cnVjdCBzbWNfc29ja1x0XHRzbWM7XG4gIDY3Olx0XHRzdHJ1Y3QgaXB2Nl9waW5mb1x0aW5ldDY7XG4gIDY4Olx0fTtcbiAgNjk6XHRcbiAgNzA6XHRzdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0Nl9wcm90ID0ge1xuICA3MTpcdFx0Lm5hbWVcdFx0PSBcJiMzNDtJTkVUNl9TTUNcJiMzNDssXG4gIDcyOlx0XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNTIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNNQyBTb2NrZXQgUmVsZWFzZSBQcm9jZXNzKioKCk9rYXksIGxldCBtZSB0cmFjZSB0aGlzIGBzbWNfaW5ldF9zdHJlYW1fb3BzLnJlbGVhc2VgIGZ1bmN0aW9uLiBBaCwgaXQmIzM5O3MganVzdCBhIHBvaW50ZXIgdG8gYHNtY19yZWxlYXNlYC4gVGhhdCYjMzk7cyBnb29kOyBrZWVwcyBpdCBjbGVhbi4gU28sIGBzbWNfcmVsZWFzZWAgaXMgdGhlIGhlYXJ0IG9mIHRoZSBzb2NrZXQgY2xvc3VyZS4gSXQgbWVhbnMgdGhpcyBpcyB3aGF0IGdldHMgY2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIGlzIHRlcm1pbmF0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyBoZXJlLiBSaWdodCwgYHNtY19yZWxlYXNlYCBjYWxscyBgX19zbWNfcmVsZWFzZWAsIHdoaWNoIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLiBXaXRoaW4gYF9fc21jX3JlbGVhc2VgIEkgc2VlIGBzay0mZ3Q7c2tfcHJvdC0mZ3Q7dW5oYXNoKHNrKWAg4oCTIHRoYXQmIzM5O3MgZXhwZWN0ZWQsIHVubGlua2luZyB0aGUgc29ja2V0IGZyb20gdGhlIG5ldHdvcmsgaGFzaCB0YWJsZSDigJMgYW5kIGBzbWNfY2xjc29ja19yZWxlYXNlKHNtYylgLCB3aGljaCBJJiMzOTtsbCBoYXZlIHRvIGludmVzdGlnYXRlIG1vcmUgdGhvcm91Z2hseS4KCkJ1dCBob2xkIG9uLCBgc21jX3JlbGVhc2VgICphbHNvKiBjYWxscyBgc29ja19wdXQoc2spYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGNvbWVzIGluLiBXaGVuIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIHNvY2tldCwgYHNrYCwgZHJvcHMgdG8gemVybywgYHNrX2ZyZWVgIGlzIHRyaWdnZXJlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIG9uIHRoZSByaWdodCBwYXRoLiBOb3csIEkgdGhvdWdodCBpdCB3YXMgYHNrX2NvbW1vbl9yZWxlYXNlYCBjYWxsaW5nIGBza19wcm90LSZndDtkZXN0cm95KHNrKWAgYnV0IGBza19kZXN0cnVjdGAgY2FsbHMgYHNrX3Byb3QtJmd0O2Rlc3Ryb3lgLiBJdCYjMzk7cyBhbGwgY29ubmVjdGVkLiBMZXQgbWUganVzdCBjb25maXJtIGV4YWN0bHkgaG93IGBza19jb21tb25fcmVsZWFzZWAgZnVuY3Rpb25zIHRvIHByb3ZpZGUgYSBmaXJtIHVuZGVyc3RhbmRpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbiBub3cgdG8gYmUgc3VyZSBJIGFtIHRyYWNpbmcgdGhpcyBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfY29tbW9uX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29jay5jPTQwMzU9RVhQT1JUX1NZTUJPTChzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0KTtcbm5ldC9jb3JlL3NvY2suYy00MDM2LVxubmV0L2NvcmUvc29jay5jOjQwMzc6dm9pZCBza19jb21tb25fcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9zb2NrLmMtNDAzOC17XG4tLVxubmV0L2NvcmUvc29jay5jLTQwNDItXHQvKlxubmV0L2NvcmUvc29jay5jOjQwNDM6XHQgKiBPYnNlcnZhdGlvbjogd2hlbiBza19jb21tb25fcmVsZWFzZSBpcyBjYWxsZWQsIHByb2Nlc3NlcyBoYXZlXG5uZXQvY29yZS9zb2NrLmMtNDA0NC1cdCAqIG5vIGFjY2VzcyB0byBzb2NrZXQuIEJ1dCBuZXQgc3RpbGwgaGFzLlxuLS1cbm5ldC9jb3JlL3NvY2suYy00MDY5LX1cbm5ldC9jb3JlL3NvY2suYzo0MDcwOkVYUE9SVF9TWU1CT0woc2tfY29tbW9uX3JlbGVhc2UpO1xubmV0L2NvcmUvc29jay5jLTQwNzEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTk5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiBteSBkb21haW4gb2YgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byBgc2tfY29tbW9uX3JlbGVhc2VgKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBza19jb21tb25fcmVsZWFzZWAuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCB3aGF0JiMzOTtzIGluY2x1ZGVkIGhlcmUuIEdpdmVuIGl0cyBuYW1lLCAmIzM0O2NvbW1vbiByZWxlYXNlLCYjMzQ7IEkmIzM5O20gZXhwZWN0aW5nIGEgY29sbGVjdGlvbiBvZiBmb3VuZGF0aW9uYWwgb3Igc2hhcmVkIGNvbXBvbmVudHMuIFRoaXMgY291bGQgYmUgYW55dGhpbmcgZnJvbSBjb3JlIGxpYnJhcmllcyBhbmQgdXRpbGl0eSBmdW5jdGlvbnMgdG8gY3J1Y2lhbCBjb25maWd1cmF0aW9uIGZpbGVzIG9yIGV2ZW4gc29tZSBlc3NlbnRpYWwgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4gS25vd2luZyB0aGlzIHJlbGVhc2UgaXMgJiMzNDtjb21tb24mIzM0OyBpdCBpcyBsaWtlbHkgYSBzb3VyY2Ugb2YgZGVwZW5kZW5jeSBmb3IgbXVsdGlwbGUgb3RoZXIgcHJvamVjdHMsIG1ha2luZyB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIGNoYW5nZXMgY3JpdGljYWwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB0YXJnZXQgYXVkaWVuY2UgYW5kIHdoYXQgYXJlYXMgaXQgaXMgYWZmZWN0aW5nIHNvIEkgYW0gbm90IG1pc3NpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBleGFjdGx5IHdoYXQmIzM5O3MgdW5kZXIgdGhlIGhvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc29jay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAzNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MDM3Olx0dm9pZCBza19jb21tb25fcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2spXG40MDM4Olx0e1xuNDAzOTpcdFx0aWYgKHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNlZGVzdHJveSlcbjQwNDA6XHRcdFx0c2stXHUwMDNlc2tfcHJvdC1cdTAwM2VkZXN0cm95KHNrKTtcbjQwNDE6XHRcbjQwNDI6XHRcdC8qXG40MDQzOlx0XHQgKiBPYnNlcnZhdGlvbjogd2hlbiBza19jb21tb25fcmVsZWFzZSBpcyBjYWxsZWQsIHByb2Nlc3NlcyBoYXZlXG40MDQ0Olx0XHQgKiBubyBhY2Nlc3MgdG8gc29ja2V0LiBCdXQgbmV0IHN0aWxsIGhhcy5cbjQwNDU6XHRcdCAqIFN0ZXAgb25lLCBkZXRhY2ggaXQgZnJvbSBuZXR3b3JraW5nOlxuNDA0NjpcdFx0ICpcbjQwNDc6XHRcdCAqIEEuIFJlbW92ZSBmcm9tIGhhc2ggdGFibGVzLlxuNDA0ODpcdFx0ICovXG40MDQ5Olx0XG40MDUwOlx0XHRzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzayk7XG40MDUxOlx0XG40MDUyOlx0XHQvKlxuNDA1MzpcdFx0ICogSW4gdGhpcyBwb2ludCBzb2NrZXQgY2Fubm90IHJlY2VpdmUgbmV3IHBhY2tldHMsIGJ1dCBpdCBpcyBwb3NzaWJsZVxuNDA1NDpcdFx0ICogdGhhdCBzb21lIHBhY2tldHMgYXJlIGluIGZsaWdodCBiZWNhdXNlIHNvbWUgQ1BVIHJ1bnMgcmVjZWl2ZXIgYW5kXG40MDU1Olx0XHQgKiBkaWQgaGFzaCB0YWJsZSBsb29rdXAgYmVmb3JlIHdlIHVuaGFzaGVkIHNvY2tldC4gVGhleSB3aWxsIGFjaGlldmVcbjQwNTY6XHRcdCAqIHJlY2VpdmUgcXVldWUgYW5kIHdpbGwgYmUgcHVyZ2VkIGJ5IHNvY2tldCBkZXN0cnVjdG9yLlxuNDA1NzpcdFx0ICpcbjQwNTg6XHRcdCAqIEFsc28gd2Ugc3RpbGwgaGF2ZSBwYWNrZXRzIHBlbmRpbmcgb24gcmVjZWl2ZSBxdWV1ZSBhbmQgcHJvYmFibHksXG40MDU5Olx0XHQgKiBvdXIgb3duIHBhY2tldHMgd2FpdGluZyBpbiBkZXZpY2UgcXVldWVzLiBzb2NrX2Rlc3Ryb3kgd2lsbCBkcmFpblxuNDA2MDpcdFx0ICogcmVjZWl2ZSBxdWV1ZSwgYnV0IHRyYW5zbWl0dGVkIHBhY2tldHMgd2lsbCBkZWxheSBzb2NrZXQgZGVzdHJ1Y3Rpb25cbjQwNjE6XHRcdCAqIHVudGlsIHRoZSBsYXN0IHJlZmVyZW5jZSB3aWxsIGJlIHJlbGVhc2VkLlxuNDA2MjpcdFx0ICovXG40MDYzOlx0XG40MDY0Olx0XHRzb2NrX29ycGhhbihzayk7XG40MDY1Olx0XG40MDY2Olx0XHR4ZnJtX3NrX2ZyZWVfcG9saWN5KHNrKTtcbjQwNjc6XHRcbjQwNjg6XHRcdHNvY2tfcHV0KHNrKTtcbjQwNjk6XHR9XG40MDcwOlx0RVhQT1JUX1NZTUJPTChza19jb21tb25fcmVsZWFzZSk7XG40MDcxOlx0XG40MDcyOlx0dm9pZCBza19nZXRfbWVtaW5mbyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHUzMiAqbWVtKVxuNDA3MzpcdHtcbjQwNzQ6XHRcdG1lbXNldChtZW0sIDAsIHNpemVvZigqbWVtKSAqIFNLX01FTUlORk9fVkFSUyk7XG40MDc1Olx0XG40MDc2Olx0XHRtZW1bU0tfTUVNSU5GT19STUVNX0FMTE9DXSA9IHNrX3JtZW1fYWxsb2NfZ2V0KHNrKTtcbjQwNzc6XHRcdG1lbVtTS19NRU1JTkZPX1JDVkJVRl0gPSBSRUFEX09OQ0Uoc2stXHUwMDNlc2tfcmN2YnVmKTtcbjQwNzg6XHRcdG1lbVtTS19NRU1JTkZPX1dNRU1fQUxMT0NdID0gc2tfd21lbV9hbGxvY19nZXQoc2spO1xuNDA3OTpcdFx0bWVtW1NLX01FTUlORk9fU05EQlVGXSA9IFJFQURfT05DRShzay1cdTAwM2Vza19zbmRidWYpO1xuNDA4MDpcdFx0bWVtW1NLX01FTUlORk9fRldEX0FMTE9DXSA9IFJFQURfT05DRShzay1cdTAwM2Vza19mb3J3YXJkX2FsbG9jKTtcbjQwODE6XHRcdG1lbVtTS19NRU1JTkZPX1dNRU1fUVVFVUVEXSA9IFJFQURfT05DRShzay1cdTAwM2Vza193bWVtX3F1ZXVlZCk7XG40MDgyOlx0XHRtZW1bU0tfTUVNSU5GT19PUFRNRU1dID0gYXRvbWljX3JlYWQoXHUwMDI2c2stXHUwMDNlc2tfb21lbV9hbGxvYyk7XG40MDgzOlx0XHRtZW1bU0tfTUVNSU5GT19CQUNLTE9HXSA9IFJFQURfT05DRShzay1cdTAwM2Vza19iYWNrbG9nLmxlbik7XG40MDg0Olx0XHRtZW1bU0tfTUVNSU5GT19EUk9QU10gPSBza19kcm9wc19yZWFkKHNrKTtcbjQwODU6XHR9XG40MDg2Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDczCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJhY2UgQ29uZGl0aW9uIEZpeCBpbiBTTUMgU29ja2V0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4gZ29lcyB0byB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzLiBgc2tfY29tbW9uX3JlbGVhc2VgIGNhbGxzIGBzay0mZ3Q7c2tfcHJvdC0mZ3Q7ZGVzdHJveShzaylgIHRoZW4gYHNrLSZndDtza19wcm90LSZndDt1bmhhc2goc2spYC4gVGhpcyBwYXRjaCBhZGRzIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLCB3aGljaCwgY3J1Y2lhbGx5LCBjYWxscyBgc2stJmd0O3NrX3Byb3QtJmd0O3VuaGFzaChzaylgICpiZWZvcmUqIGBzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpYC4gVGhlIGNvbW1lbnQgaXMga2V5IGhlcmUuIEl0JiMzOTtzIGhpZ2hsaWdodGluZyBhIHBvdGVudGlhbCByYWNlLiBgc21jX2RpYWdgIGNhbiBkdW1wIGRhdGEgdGhhdCBkZXJlZmVyZW5jZXMgYHNtYy0mZ3Q7Y2xjc29ja2Agd2l0aG91dCB0aGUgYGNsY3NvY2tfcmVsZWFzZV9sb2NrYCwgd2hpbGUgdGhlIHN0YW5kYXJkIGBza19jb21tb25fcmVsZWFzZSgpYCBkZXN0cm95cyB0aGluZ3MgaW4gdGhlIHdyb25nIG9yZGVyICguZGVzdHJveSBiZWZvcmUgLnVuaGFzaCkuCgpUaGlzIG5ldyBvcmRlcmluZywgdW5oYXNoaW5nICpiZWZvcmUqIGFueSB0ZWFyZG93biwgaXMgZGVzaWduZWQgdG8gcHJldmVudCBhIGR1bXAgZnJvbSBvYnNlcnZpbmcgdGhlIHNvY2tldCBiZWluZyBmcmVlZC4gVGhlIHNlY29uZCB1bmhhc2ggaXMsIG9mIGNvdXJzZSwgYSBuby1vcCwgYnV0IGl0JiMzOTtzIHRoZSBmaXJzdCBvbmUgdGhhdCBtYXR0ZXJzLiBTbywgaXQmIzM5O3MgYSByYWNlIGNvbmRpdGlvbiBmaXguIEkgc2VlIGl0IG5vdy4KCkJlY2F1c2UgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AgaXMgc3RhdGljLCBJIGNhbiYjMzk7dCByZWFsbHkgZGlnIGludG8gdGhhdCBkaXJlY3RseSwgYnV0IGl0IG1ha2VzIG1lIGNvbnNpZGVyIHRoZSByZWxhdGVkIGZ1bmN0aW9uczogYHNtY19yZWxlYXNlYCwgYHNtY19jbGNzb2NrX3JlbGVhc2VgLCBgc21jX2luZXRfaW5pdF9zb2NrYCwgYW5kLCBlc3BlY2lhbGx5LCBgc21jX2RpYWdfZHVtcGAuIFdoZXJlIGlzIHRoYXQ/IEFoLCB5ZXMsIGBuZXQvc21jL3NtY19kaWFnLmNgLiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc21jX2RpYWdfZHVtcGAgbm93IHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHZ1bG5lcmFiaWxpdHkgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfZGlhZ19kdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2RpYWcuYy0yNS1cbm5ldC9zbWMvc21jX2RpYWcuYzoyNjpzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHgge1xubmV0L3NtYy9zbWNfZGlhZy5jLTI3LVx0aW50IHBvc1syXTtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjktXG5uZXQvc21jL3NtY19kaWFnLmM6MzA6c3RhdGljIHN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCAqc21jX2R1bXBfY29udGV4dChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvc21jL3NtY19kaWFnLmMtMzEte1xubmV0L3NtYy9zbWNfZGlhZy5jOjMyOlx0cmV0dXJuIChzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKiljYi1cdTAwM2VjdHg7XG5uZXQvc21jL3NtY19kaWFnLmMtMzMtfVxuLS1cbm5ldC9zbWMvc21jX2RpYWcuYz02MD1zdGF0aWMgaW50IHNtY19kaWFnX21zZ19hdHRyc19maWxsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtNzEtXG5uZXQvc21jL3NtY19kaWFnLmM6NzI6c3RhdGljIGludCBfX3NtY19kaWFnX2R1bXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NtYy9zbWNfZGlhZy5jLTczLVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMTk1LVxubmV0L3NtYy9zbWNfZGlhZy5jOjE5NjpzdGF0aWMgaW50IHNtY19kaWFnX2R1bXBfcHJvdG8oc3RydWN0IHByb3RvICpwcm90LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NtYy9zbWNfZGlhZy5jLTE5Ny1cdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLCBpbnQgcF90eXBlKVxubmV0L3NtYy9zbWNfZGlhZy5jLTE5OC17XG5uZXQvc21jL3NtY19kaWFnLmM6MTk5Olx0c3RydWN0IHNtY19kaWFnX2R1bXBfY3R4ICpjYl9jdHggPSBzbWNfZHVtcF9jb250ZXh0KGNiKTtcbm5ldC9zbWMvc21jX2RpYWcuYy0yMDAtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0yMTYtXHRcdFx0Z290byBuZXh0O1xubmV0L3NtYy9zbWNfZGlhZy5jOjIxNzpcdFx0cmMgPSBfX3NtY19kaWFnX2R1bXAoc2ssIHNrYiwgY2IsIG5sbXNnX2RhdGEoY2ItXHUwMDNlbmxoKSwgYmMpO1xubmV0L3NtYy9zbWNfZGlhZy5jLTIxOC1cdFx0aWYgKHJjIFx1MDAzYyAwKVxuLS1cbm5ldC9zbWMvc21jX2RpYWcuYy0yMjktXG5uZXQvc21jL3NtY19kaWFnLmM6MjMwOnN0YXRpYyBpbnQgc21jX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG5uZXQvc21jL3NtY19kaWFnLmMtMjMxLXtcbi0tXG5uZXQvc21jL3NtY19kaWFnLmMtMjMzLVxubmV0L3NtYy9zbWNfZGlhZy5jOjIzNDpcdHJjID0gc21jX2RpYWdfZHVtcF9wcm90byhcdTAwMjZzbWNfcHJvdG8sIHNrYiwgY2IsIFNNQ1BST1RPX1NNQyk7XG5uZXQvc21jL3NtY19kaWFnLmMtMjM1LVx0aWYgKCFyYylcbm5ldC9zbWMvc21jX2RpYWcuYzoyMzY6XHRcdHNtY19kaWFnX2R1bXBfcHJvdG8oXHUwMDI2c21jX3Byb3RvNiwgc2tiLCBjYiwgU01DUFJPVE9fU01DNik7XG5uZXQvc21jL3NtY19kaWFnLmMtMjM3LVx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jPTI0MD1zdGF0aWMgaW50IHNtY19kaWFnX2hhbmRsZXJfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKmgpXG4tLVxubmV0L3NtYy9zbWNfZGlhZy5jLTI0Ny1cdFx0XHRzdHJ1Y3QgbmV0bGlua19kdW1wX2NvbnRyb2wgYyA9IHtcbm5ldC9zbWMvc21jX2RpYWcuYzoyNDg6XHRcdFx0XHQuZHVtcCA9IHNtY19kaWFnX2R1bXAsXG5uZXQvc21jL3NtY19kaWFnLmMtMjQ5LVx0XHRcdFx0Lm1pbl9kdW1wX2FsbG9jID0gU0tCX1dJVEhfT1ZFUkhFQUQoMzI3NjgpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc3OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSByaWdodCBjb25maWdzIGVuYWJsZWQuIEl0IGxvb2tzIGxpa2UgSSYjMzk7bSBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgYm90aCBgU01DYCBhbmQgYFNNQ19ESUFHYC4gQnV0IGhhbmcgb24gYSBzZWNvbmQuLi4gd2hlbiBJIGxvb2sgYXQgd2hhdCBgc21jX2RpYWdfZHVtcGAgYWN0dWFsbHkgKmR1bXBzKiwgaXQmIzM5O3MgbGlzdGluZyBgc21jX3Byb3RvYCBhbmQgYHNtY19wcm90bzZgLiBXaGVyZSYjMzk7cyBgc21jX2luZXRfcHJvdGAgaW4gdGhhdCBtaXg/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBgc21jX2RpYWdfZHVtcGAgcHJvY2VzcyBhZ2FpbiB0byBlbnN1cmUgSSYjMzk7bSBjYXB0dXJpbmcgZXZlcnl0aGluZyByZWxldmFudC4gU29tZXRoaW5nIGZlZWxzIG9mZiwgc28gYmV0dGVyIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2RpYWcuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjMwOlx0c3RhdGljIGludCBzbWNfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiAyMzE6XHR7XG4gMjMyOlx0XHRpbnQgcmMgPSAwO1xuIDIzMzpcdFxuIDIzNDpcdFx0cmMgPSBzbWNfZGlhZ19kdW1wX3Byb3RvKFx1MDAyNnNtY19wcm90bywgc2tiLCBjYiwgU01DUFJPVE9fU01DKTtcbiAyMzU6XHRcdGlmICghcmMpXG4gMjM2Olx0XHRcdHNtY19kaWFnX2R1bXBfcHJvdG8oXHUwMDI2c21jX3Byb3RvNiwgc2tiLCBjYiwgU01DUFJPVE9fU01DNik7XG4gMjM3Olx0XHRyZXR1cm4gc2tiLVx1MDAzZWxlbjtcbiAyMzg6XHR9XG4gMjM5Olx0XG4gMjQwOlx0c3RhdGljIGludCBzbWNfZGlhZ19oYW5kbGVyX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpoKVxuIDI0MTpcdHtcbiAyNDI6XHRcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4gMjQzOlx0XG4gMjQ0Olx0XHRpZiAoaC1cdTAwM2VubG1zZ190eXBlID09IFNPQ0tfRElBR19CWV9GQU1JTFkgXHUwMDI2XHUwMDI2XG4gMjQ1Olx0XHQgICAgaC1cdTAwM2VubG1zZ19mbGFncyBcdTAwMjYgTkxNX0ZfRFVNUCkge1xuIDI0NjpcdFx0XHR7XG4gMjQ3Olx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZHVtcF9jb250cm9sIGMgPSB7XG4gMjQ4Olx0XHRcdFx0XHQuZHVtcCA9IHNtY19kaWFnX2R1bXAsXG4gMjQ5Olx0XHRcdFx0XHQubWluX2R1bXBfYWxsb2MgPSBTS0JfV0lUSF9PVkVSSEVBRCgzMjc2OCksXG4gMjUwOlx0XHRcdFx0fTtcbiAyNTE6XHRcdFx0XHRyZXR1cm4gbmV0bGlua19kdW1wX3N0YXJ0KG5ldC1cdTAwM2VkaWFnX25sc2ssIHNrYiwgaCwgXHUwMDI2Yyk7XG4gMjUyOlx0XHRcdH1cbiAyNTM6XHRcdH1cbiAyNTQ6XHRcdHJldHVybiAwO1xuIDI1NTpcdH1cbiAyNTY6XHRcbiAyNTc6XHRzdGF0aWMgY29uc3Qgc3RydWN0IHNvY2tfZGlhZ19oYW5kbGVyIHNtY19kaWFnX2hhbmRsZXIgPSB7XG4gMjU4Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiAyNTk6XHRcdC5mYW1pbHkgPSBBRl9TTUMsXG4gMjYwOlx0XHQuZHVtcCA9IHNtY19kaWFnX2hhbmRsZXJfZHVtcCxcbiAyNjE6XHR9O1xuIDI2MjpcdFxuIDI2MzpcdHN0YXRpYyBpbnQgX19pbml0IHNtY19kaWFnX2luaXQodm9pZClcbiAyNjQ6XHR7XG4gMjY1Olx0XHRyZXR1cm4gc29ja19kaWFnX3JlZ2lzdGVyKFx1MDAyNnNtY19kaWFnX2hhbmRsZXIpO1xuIDI2NjpcdH1cbiAyNjc6XHRcbiAyNjg6XHRzdGF0aWMgdm9pZCBfX2V4aXQgc21jX2RpYWdfZXhpdCh2b2lkKVxuIDI2OTpcdHtcbiAyNzA6XHRcdHNvY2tfZGlhZ191bnJlZ2lzdGVyKFx1MDAyNnNtY19kaWFnX2hhbmRsZXIpO1xuIDI3MTpcdH1cbiAyNzI6XHRcbiAyNzM6XHRtb2R1bGVfaW5pdChzbWNfZGlhZ19pbml0KTtcbiAyNzQ6XHRtb2R1bGVfZXhpdChzbWNfZGlhZ19leGl0KTtcbiAyNzU6XHRNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuIDI3NjpcdE1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTTUMgc29ja2V0IG1vbml0b3JpbmcgdmlhIFNPQ0tfRElBR1wmIzM0Oyk7XG4gMjc3Olx0TU9EVUxFX0FMSUFTX05FVF9QRl9QUk9UT19UWVBFKFBGX05FVExJTkssIE5FVExJTktfU09DS19ESUFHLCA0MyAvKiBBRl9TTUMgKi8pO1xuIDI3ODpcdE1PRFVMRV9BTElBU19HRU5MX0ZBTUlMWShTTUNSX0dFTkxfRkFNSUxZX05BTUUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgyNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnkgUmVnYXJkaW5nIFNNQyBEaWFnbm9zdGljcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgd2UmIzM5O3JlIGRpYWdub3NpbmcgU01DIGNvbm5lY3Rpb25zIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2Ygd2hhdCB3ZSYjMzk7cmUgZHVtcGluZy4gVGhlIGBzbWNfZGlhZ19kdW1wYCB0b29s4oCmIHJpZ2h0LCBpdCBjbGVhcmx5IGNhcHR1cmVzIGRhdGEgZnJvbSBgc21jX3Byb3RvYCBhbmQgYHNtY19wcm90bzZgLiBHb29kLiBCdXQgd2FpdOKApiB3aGF0IGFib3V0IGBzbWNfaW5ldF9wcm90YD8gRG9lcyBgc21jX2RpYWdfZHVtcGAgYWN0dWFsbHkgaW5jbHVkZSB0aGF0IGluZm9ybWF0aW9uPyBObywgaXQgZG9lc24mIzM5O3Qgc2VlbSB0bywgd2hpY2ggaXMgYSBrZXkgcG9pbnQgb2YgY2xhcmlmaWNhdGlvbi4KClRoaW5raW5nIGl0IHRocm91Z2gsIGBzbWNfaW5ldF9wcm90YCBpcyBzcGVjaWZpYyB0byBgSVBQUk9UT19TTUNgIHNvY2tldHMsIGFuZCBJIG5lZWQgdG8ga25vdyBpZiB3ZSBhcmUgZ2V0dGluZyBhIGNvbXBsZXRlIHBpY3R1cmUgd2l0aCBgc21jX2RpYWdfZHVtcGAuIFNvLCB0byBiZSB0aG9yb3VnaCBhbmQgY29ycmVjdCwgSSBzaG91bGQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIHNwZWNpZmljYWxseSBgc21jX2RpYWdfZHVtcF9wcm90b2AuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgdG8gY29uZmlybSBteSBpbml0aWFsIHRob3VnaHRzIGFib3V0IHRoZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc21jL3NtY19kaWFnLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxOTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5NjpcdHN0YXRpYyBpbnQgc21jX2RpYWdfZHVtcF9wcm90byhzdHJ1Y3QgcHJvdG8gKnByb3QsIHN0cnVjdCBza19idWZmICpza2IsXG4gMTk3Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IHBfdHlwZSlcbiAxOTg6XHR7XG4gMTk5Olx0XHRzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKmNiX2N0eCA9IHNtY19kdW1wX2NvbnRleHQoY2IpO1xuIDIwMDpcdFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVx1MDAzZXNrKTtcbiAyMDE6XHRcdGludCBzbnVtID0gY2JfY3R4LVx1MDAzZXBvc1twX3R5cGVdO1xuIDIwMjpcdFx0c3RydWN0IG5sYXR0ciAqYmMgPSBOVUxMO1xuIDIwMzpcdFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7XG4gMjA0Olx0XHRpbnQgcmMgPSAwLCBudW0gPSAwO1xuIDIwNTpcdFx0c3RydWN0IHNvY2sgKnNrO1xuIDIwNjpcdFxuIDIwNzpcdFx0cmVhZF9sb2NrKFx1MDAyNnByb3QtXHUwMDNlaC5zbWNfaGFzaC1cdTAwM2Vsb2NrKTtcbiAyMDg6XHRcdGhlYWQgPSBcdTAwMjZwcm90LVx1MDAzZWguc21jX2hhc2gtXHUwMDNlaHQ7XG4gMjA5Olx0XHRpZiAoaGxpc3RfZW1wdHkoaGVhZCkpXG4gMjEwOlx0XHRcdGdvdG8gb3V0O1xuIDIxMTpcdFxuIDIxMjpcdFx0c2tfZm9yX2VhY2goc2ssIGhlYWQpIHtcbiAyMTM6XHRcdFx0aWYgKCFuZXRfZXEoc29ja19uZXQoc2spLCBuZXQpKVxuIDIxNDpcdFx0XHRcdGNvbnRpbnVlO1xuIDIxNTpcdFx0XHRpZiAobnVtIFx1MDAzYyBzbnVtKVxuIDIxNjpcdFx0XHRcdGdvdG8gbmV4dDtcbiAyMTc6XHRcdFx0cmMgPSBfX3NtY19kaWFnX2R1bXAoc2ssIHNrYiwgY2IsIG5sbXNnX2RhdGEoY2ItXHUwMDNlbmxoKSwgYmMpO1xuIDIxODpcdFx0XHRpZiAocmMgXHUwMDNjIDApXG4gMjE5Olx0XHRcdFx0Z290byBvdXQ7XG4gMjIwOlx0bmV4dDpcbiAyMjE6XHRcdFx0bnVtJiM0MzsmIzQzOztcbiAyMjI6XHRcdH1cbiAyMjM6XHRcbiAyMjQ6XHRvdXQ6XG4gMjI1Olx0XHRyZWFkX3VubG9jayhcdTAwMjZwcm90LVx1MDAzZWguc21jX2hhc2gtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NjY2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqQ2hlY2tpbmcgU01DIFByb3RvY29sIEhhc2ggVGFibGUgVXNhZ2UqKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgYHNtY19wcm90b2AgYW5kIGBzbWNfcHJvdG82YCBhcmUgbGlrZWx5IHNoYXJpbmcgYSBoYXNoIHRhYmxlIHdpdGggYHNtY19pbmV0X3Byb3RgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIGFyY2hpdGVjdHVyYWwgY2hvaWNlLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgY29udGVudGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZS4gTXkgZ3V0IGZlZWxpbmcgaXMgaXQmIzM5O3MgcHJvYmFibHkgYmVzdCB0byB2ZXJpZnkgdGhlIGNvZGUgZGlyZWN0bHkuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBgbmV0L3NtYy9hZl9zbWMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29ubmVjdGlvbiBhbmQgc29ja2V0IG1hbmFnZW1lbnQgZm9yIFNNQywgYW5kIFNNQ3Y2IGFyZSBzdHJ1Y3R1cmVkIGFuZCB2ZXJpZnkgaWYgbXkgaW50dWl0aW9uIGlzIHJpZ2h0LiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCB2aWV3IG9uIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBtYWtlcyBsb2dpY2FsIHNlbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzODpcdHN0cnVjdCBwcm90byBzbWNfcHJvdG8gPSB7XG4gMjM5Olx0XHQubmFtZVx0XHQ9IFwmIzM0O1NNQ1wmIzM0OyxcbiAyNDA6XHRcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIDI0MTpcdFx0LmtlZXBhbGl2ZVx0PSBzbWNfc2V0X2tlZXBhbGl2ZSxcbiAyNDI6XHRcdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG4gMjQzOlx0XHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbiAyNDQ6XHRcdC5yZWxlYXNlX2NiXHQ9IHNtY19yZWxlYXNlX2NiLFxuIDI0NTpcdFx0Lm9ial9zaXplXHQ9IHNpemVvZihzdHJ1Y3Qgc21jX3NvY2spLFxuIDI0NjpcdFx0Lmguc21jX2hhc2hcdD0gXHUwMDI2c21jX3Y0X2hhc2hpbmZvLFxuIDI0NzpcdFx0LnNsYWJfZmxhZ3NcdD0gU0xBQl9UWVBFU0FGRV9CWV9SQ1UsXG4gMjQ4Olx0fTtcbiAyNDk6XHRFWFBPUlRfU1lNQk9MX0dQTChzbWNfcHJvdG8pO1xuIDI1MDpcdFxuIDI1MTpcdHN0cnVjdCBwcm90byBzbWNfcHJvdG82ID0ge1xuIDI1MjpcdFx0Lm5hbWVcdFx0PSBcJiMzNDtTTUM2XCYjMzQ7LFxuIDI1MzpcdFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gMjU0Olx0XHQua2VlcGFsaXZlXHQ9IHNtY19zZXRfa2VlcGFsaXZlLFxuIDI1NTpcdFx0Lmhhc2hcdFx0PSBzbWNfaGFzaF9zayxcbiAyNTY6XHRcdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxuIDI1NzpcdFx0LnJlbGVhc2VfY2JcdD0gc21jX3JlbGVhc2VfY2IsXG4gMjU4Olx0XHQub2JqX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBzbWNfc29jayksXG4gMjU5Olx0XHQuaC5zbWNfaGFzaFx0PSBcdTAwMjZzbWNfdjZfaGFzaGluZm8sXG4gMjYwOlx0XHQuc2xhYl9mbGFnc1x0PSBTTEFCX1RZUEVTQUZFX0JZX1JDVSxcbiAyNjE6XHR9O1xuIDI2MjpcdEVYUE9SVF9TWU1CT0xfR1BMKHNtY19wcm90bzYpO1xuIDI2MzpcdFxuIDI2NDpcdHN0YXRpYyB2b2lkIHNtY19mYmFja19yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbiAyNjU6XHR7XG4gMjY2Olx0XHRzdHJ1Y3Qgc29jayAqY2xjc2sgPSBzbWMtXHUwMDNlY2xjc29jay1cdTAwM2VzaztcbiAyNjc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0NzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29uY3VycmVuY3kgQnVnIGluIFNNQyBEaWFnbm9zdGljIER1bXBzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGBzbWNfcHJvdG9gIGNvZGUgdXRpbGl6ZXMgYHNtY192NF9oYXNoaW5mb2AsIHdoaWxlIGBzbWNfcHJvdG82YCB1c2VzIGBzbWNfdjZfaGFzaGluZm9gLiBTaW1pbGFybHksIGBzbWNfaW5ldF9wcm90YCB1c2VzIGBzbWNfdjRfaGFzaGluZm9gIGFuZCBgc21jX2luZXQ2X3Byb3RgIHVzZXMgYHNtY192Nl9oYXNoaW5mb2AuIEFuZCwgYHNtY19kaWFnX2R1bXBfcHJvdG9gIGNvdmVycyBhbGwgb2YgdGhlc2UuIFRoZSBjcml0aWNhbCBpc3N1ZSBpcyBhIHJhY2UgY29uZGl0aW9uIHdpdGhpbiB0aGUgZGlhZ25vc3RpYyBkdW1wIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgYHNtY19kaWFnX2R1bXBgIGlzIGRlcmVmZXJlbmNpbmcgYHNtYy0mZ3Q7Y2xjc29ja2Agd2l0aG91dCB0aGUgbmVjZXNzYXJ5IGBjbGNzb2NrX3JlbGVhc2VfbG9ja2AsIHJpZ2h0PyBUaGlzIGlzIGhhcHBlbmluZyB3aGlsZSBgc2tfY29tbW9uX3JlbGVhc2VgIGlzIGdvaW5nIHRocm91Z2ggaXRzIHN0ZXBzLCBjYWxsaW5nIHRoZSBgLmRlc3Ryb3lgIG1ldGhvZCAqYmVmb3JlKiBgLnVuaGFzaGAuCgpTbywgd2UmIzM5O3ZlIGdvdCBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgc29ja2V0IGlzIHN0aWxsIGluIHRoZSBoYXNoIHRhYmxlIHdoZW4gYC5kZXN0cm95YCBnZXRzIGNhbGxlZC4gVGhlIGAuZGVzdHJveWAgZnVuY3Rpb24gaW4gdGhpcyBjb250ZXh0IGlzIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLCB3aGljaCBpdHNlbGYgY2FsbHMgYHNtY19jbGNzb2NrX3JlbGVhc2Uoc21jX3NrKHNrKSlgLiBUaGlzIGBzbWNfY2xjc29ja19yZWxlYXNlYCBmdW5jdGlvbiBpcyB3aGVyZSB0aGUgcHJvYmxlbSBpcyBtb3N0IGxpa2VseSBjb21pbmcgZnJvbSwgYXMgaXQgZWl0aGVyIHNldHMgYHNtYy0mZ3Q7Y2xjc29ja2AgdG8gTlVMTCBvciBmcmVlcyBpdCBjb21wbGV0ZWx5LiBUaGUgcmFjZSBpcyB0aGF0IGlmIGBzbWNfZGlhZ19kdW1wYCBydW5zIGNvbmN1cnJlbnRseSwgaXQgY291bGQgcG90ZW50aWFsbHkgc2VlIGBzbWMtJmd0O2NsY3NvY2tgIGJlaW5nIHJlbGVhc2VkIHJpZ2h0IG91dCBmcm9tIHVuZGVyIGl0LgoKVGhlIGltbWVkaWF0ZSBmaXggaXMgY2xlYXI6IHVuaGFzaCB0aGUgc29ja2V0ICpiZWZvcmUqIGRlc3Ryb3lpbmcgaXQgaW4gYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgcmVsYXRlZCB0byBzb2NrZXQgdGVhcmRvd24sIHNvIGl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBgU01DYCBhbmQgYFNNQ19ESUFHYC4gTXkgZm9jdXMgbm93IHdpbGwgYmUgb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgbmFtZWx5IGBzbWNfcmVsZWFzZWAsIGBzbWNfY2xjc29ja19yZWxlYXNlYCwgYHNtY19kaWFnX2R1bXBgLCBhbmQgYHNtY19kaWFnX2R1bXBfcHJvdG9gLgoKV2FpdC4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gSGFuZyBvbiwgYHNtY19kaWFnX2R1bXBgIGFuZCBgc21jX2RpYWdfaGFuZGxlcl9kdW1wYCBhcmUgYm90aCBzdGF0aWMsIHJpZ2h0PyBJZiB0aGF0JiMzOTtzIHRoZSBjYXNlLCBzaG91bGQgSSBzdGlsbCBmb2N1cyBvbiB0aGVtPyBUaGUgbW9yZSBsaWtlbHkgY2FuZGlkYXRlIHNlZW1zIHRvIGJlIGBzbWNfcmVsZWFzZWAgYW5kIGBzbWNfY2xjc29ja19yZWxlYXNlYC4gWWVwLCBgc21jX3JlbGVhc2VgIGFuZCBgc21jX2NsY3NvY2tfcmVsZWFzZWAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHdhdGNoLiBIYW5nIG9uLCB3YWl0IGEgc2Vjb25kLiBgc21jX2NsY3NvY2tfcmVsZWFzZWAgaXMgbm90IHN0YXRpYyEgUGVyZmVjdCEgTm93LCB0aW1lIHRvIGp1c3QgY2hlY2sgaWYgYHNtY19jbGNzb2NrX3JlbGVhc2VgIGlzIGV4cG9ydGVkIG9yIGp1c3QgZ2xvYmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIHNtY19jbGNzb2NrX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jbG9zZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2Nsb3NlLmMtMjMtLyogcmVsZWFzZSB0aGUgY2xjc29jayB0aGF0IGlzIGFzc2lnbmVkIHRvIHRoZSBzbWNfc29jayAqL1xubmV0L3NtYy9zbWNfY2xvc2UuYzoyNDp2b2lkIHNtY19jbGNzb2NrX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXG5uZXQvc21jL3NtY19jbG9zZS5jLTI1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2NzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNNQyBEaWFnbm9zdGljIENvbnRleHQqKgoKT2theSwgc28gdGhpcyBpcyBhIGdsb2JhbCBpc3N1ZSwgZ290IGl0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGBzbWNfZGlhZ19kdW1wYCBmdW5jdGlvbi4gSXQgc2VlbXMgdG8gYmUgc3RhdGljLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIG5hcnJvd2luZyBkb3duIHRoZSBzY29wZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgdGhlIG9yaWdpbiBhbmQgdXNlLgoKTmV4dCBzdGVwOiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpZiB0aGVyZSBhcmUgYW55IGV4cG9ydGVkIGZ1bmN0aW9ucyB3aXRoaW4gYHNtY19kaWFnLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhpcyBmaWxlIG9mZmVycyB0byB0aGUgc3lzdGVtIGFzIGEgd2hvbGUuIEtub3dpbmcgd2hhdCYjMzk7cyBhdmFpbGFibGUgZm9yIG90aGVyIGNvbXBvbmVudHMgdG8gY2FsbCBpbnRvIGhlcmUgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBpbXBhY3Qgb2YgYHNtY19kaWFnX2R1bXBgLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFuIGludGVyZmFjZSBJIGNhbiBsZXZlcmFnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfZGlhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5MjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipBbmFseXppbmcgU01DIFNvY2tldCBJbml0aWFsaXphdGlvbiBhbmQgUmVsZWFzZSBGdW5jdGlvbnMqKgoKSG1tLCBubywgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHNtY19pbmV0X2luaXRfc29ja2AuIE5vdywgKnRoYXQqIG9uZSBpcyBzdGF0aWMsIGlzbiYjMzk7dCBpdD8gTGV0JiMzOTtzIGtlZXAgdGhhdCBpbiBtaW5kLiBPa2F5LCB3aGF0IGFib3V0IGBzbWNfaW5ldF9pbml0YD8gQWgsIHllcywgYF9faW5pdGAuIFRoYXQmIzM5O3MgYSBkaWZmZXJlbnQgYmVhc3QgZW50aXJlbHkuIFdlJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGhvdyB0aGF0IGltcGFjdHMgbGlmZWN5Y2xlLiBOb3cgdGhlIGJpZyBwaWN0dXJlLi4uIGBzbWNfcmVsZWFzZWAuIFRoYXQmIzM5O3MgYSBnbG9iYWwgZnVuY3Rpb24uIE5vdywgYSBsaWdodGJ1bGIuLi5pcyBgc21jX3JlbGVhc2VgIGV4cG9ydGVkLCBvciBpcyBpdCBoaWRkZW4/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZGlnIGludG8uIFdlIG5lZWQgdG8gYmUgYWJsZSB0byB1c2UgaXQsIHRvIHdvcmsgd2l0aCBpdC4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qc21jX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jL2FmX3NtYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyMjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgU2NvcGUgYW5kIEZ1bmN0aW9uYWxpdHkqKgoKQWxyaWdodCwgc28gdGhlIHZhcmlhYmxlIGluIHF1ZXN0aW9uLCB3aGF0ZXZlciBpdCBpcywgaXNuJiMzOTt0ICpleHBsaWNpdGx5KiBleHBvcnRlZCwgbWVhbmluZyBpdCBsaWtlbHkgaXNuJiMzOTt0IHBhcnQgb2YgYSBkaXJlY3QgQVBJIGV4cG9zZWQgdG8gb3RoZXIgbW9kdWxlcyBvciBjb21wb25lbnRzIGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZS4gSG93ZXZlciwgdGhlIHVzZSBvZiB0aGUgdGVybSAmIzM0O2dsb2JhbCYjMzQ7IHN1Z2dlc3RzIGl0JiMzOTtzIGFjY2Vzc2libGUgYW5kIHBvdGVudGlhbGx5IG1vZGlmaWFibGUgZnJvbSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhpcyBpbXBsaWVzIGEgc2NvcGUgY29uY2VybiwgbGlrZWx5IG5lZWRpbmcgc3BlY2lhbCBjb25zaWRlcmF0aW9uIHRvIHByb3RlY3QgYWdhaW5zdCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvciBjb25mbGljdHMuCgpNeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgYHNtY19jbG9zZV9hY3RpdmVgLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBjb250ZXh0dWFsIGluZm9ybWF0aW9uLiBUaGlzIGxpa2VseSBhIGZ1bmN0aW9uIG9yIGEgbWFjcm8gd2hpY2ggY291bGQgYmUgdXNlZCB0byBkaXNjb3ZlciBob3cgdG8gbWFuYWdlIHRoaXMgc3BlY2lmaWMgY29tcG9uZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSAmIzM0O2dsb2JhbCYjMzQ7IHZhcmlhYmxlLiBJcyBpdCB1c2VkIHRvICpzZXQqLCAqcmVhZCosIG9yICptYW5hZ2UqIHRoaXMgJiMzNDtnbG9iYWwmIzM0OyB2YWx1ZT8gS25vd2luZyB0aGUgaW50ZXJhY3Rpb24gd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IGl0IGlzIHNldCBhbmQgY2xlYXJlZCwgYXMgd2VsbCBhcyBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucyBvbiBpdHMgdXNlLCB0aGF0IG1heSBjYXVzZSBhIG1hbGZ1bmN0aW9uLiBUaGF0IHdpbGwgc2hlZCBsaWdodCBvbiBob3cgdGhlIHZhcmlhYmxlJiMzOTtzIHNjb3BlIGFuZCBhY2Nlc3MgYXJlICppbnRlbmRlZCogdG8gd29yaywgYW5kIGlmIGl0JiMzOTtzIHBsYXlpbmcgbmljZWx5IHdpdGggdGhlIHJlc3Qgb2YgdGhlIGFwcGxpY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfY2xvc2VfYWN0aXZlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9zbWNfY2xvc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jbG9zZS5jPTExND1zdGF0aWMgdm9pZCBzbWNfY2xvc2VfY2FuY2VsX3dvcmsoc3RydWN0IHNtY19zb2NrICpzbWMpXG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYy0xMjctICovXG5uZXQvc21jL3NtY19jbG9zZS5jOjEyODp2b2lkIHNtY19jbG9zZV9hY3RpdmVfYWJvcnQoc3RydWN0IHNtY19zb2NrICpzbWMpXG5uZXQvc21jL3NtY19jbG9zZS5jLTEyOS17XG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYz0xODc9c3RhdGljIGlubGluZSBib29sIHNtY19jbG9zZV9zZW50X2FueV9jbG9zZShzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXG4tLVxubmV0L3NtYy9zbWNfY2xvc2UuYy0xOTItXG5uZXQvc21jL3NtY19jbG9zZS5jOjE5MzppbnQgc21jX2Nsb3NlX2FjdGl2ZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTk0LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3OTEKCQkJCQkJCW91dHB1dDogNjgKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNNQyBEaWFnbm9zdGljIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHNtY19kaWFnYCBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgc21jX2Nsb3NlX2FjdGl2ZWAgaXMgYSBnbG9iYWwgdmFyaWFibGUuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgYXJlYSBmb3IgY29udGVudGlvbiBhbmQgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCYjMzk7cyB1c2VkIGFjcm9zcyB0aGUgc3lzdGVtLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHNlZSB3aGF0IHRoZSBkaWFnbm9zdGljIGhhbmRsZXJzIGFjdHVhbGx5ICpkbyouIEkmIzM5O2xsIGNoZWNrIGBzbWNfZGlhZ19oYW5kbGVyX2R1bXBgIGFuZCBgc21jX2RpYWdfZHVtcGAuIEkgYmVsaWV2ZSB0aGV5JiMzOTtyZSBzdGF0aWMgZnVuY3Rpb25zLCB3aGljaCBzaG91bGQgbGltaXQgdGhlaXIgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBjb25mbGljdHMsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgaGFuZGxlciBmdW5jdGlvbnMuCgpGaW5hbGx5LCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCB0byBidWlsZCBhIGdvb2QgbWVudGFsIG1vZGVsIG9mIHRoZSBtb2R1bGUsIEkmIzM5O2xsIHNjYW4gdGhyb3VnaCBgc21jX2RpYWcuY2AgZm9yIGFueSAqb3RoZXIqIGdsb2JhbCBmdW5jdGlvbnMuIEl0JiMzOTtzIGdvb2QgcHJhY3RpY2UgdG8gaWRlbnRpZnkgYWxsIGVudHJ5IHBvaW50cyBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBpbiBhIGNvZGUgYmxvY2sgZWFybHkgb24gdG8gYXZvaWQgdW5wbGVhc2FudCBzdXJwcmlzZXMgZG93biB0aGUgbGluZS4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIHJlYXNvbiBhYm91dCB0aGlzIGNvZGUgZWZmZWN0aXZlbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2RpYWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTYxCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFNNQyBTb2NrZXQgUmVsZWFzZSBhbmQgRGlhZ25vc3RpYyBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHJlbGVhc2luZyBhbmQgbWFuYWdpbmcgU01DIHNvY2tldHMgYW5kIGFzc29jaWF0ZWQgZGlhZ25vc3RpY3MuIEluaXRpYWxseSwgSSB0aG91Z2h0IGZvY3VzaW5nIG9uIGBzbWNfcmVsZWFzZWAgYW5kIGBzbWNfY2xjc29ja19yZWxlYXNlYCB3b3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCB0aGF0IHNlZW1zIGNvcnJlY3QsIGdpdmVuIHRoZSBjb250ZXh0IG9mIHRoZSBwYXRjaC4gVGhlIHBhdGNoIGlzIGFib3V0IGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLCBidXQgaG93IGRvIHdlIHRyaWdnZXIgdGhhdD8KCkFoLCByaWdodCwgY3JlYXRlIGFuIGBBRl9JTkVUYCBzb2NrZXQgdXNpbmcgYElQUFJPVE9fU01DYCBhbmQgdGhlbiBzaW1wbHkgY2xvc2UgaXQuIFRoYXQgc2hvdWxkIHRyaWdnZXIgaXQuIFRoZSBzb2NrZXQgY3JlYXRpb24gaXRzZWxmIHVzZXMgYHNtY19pbmV0X2luaXRfc29ja2AsIHdoaWNoIGlzIHN0YXRpYywgc28gbm90IGFuIGludGVyZXN0aW5nIGVudHJ5IHBvaW50LiBCdXQgbG9va2luZyBmdXJ0aGVyLCBgc21jX2luZXRfc3RyZWFtX29wc2AgaGFzIGAucmVsZWFzZSA9IHNtY19yZWxlYXNlYCwgd2hpY2ggbWVhbnMgd2hlbiB0aGUgc29ja2V0IGlzIGNsb3NlZCwgYHNtY19yZWxlYXNlYCBnZXRzIGNhbGxlZCwgYW5kIHRoZW4gYHNrX2NvbW1vbl9yZWxlYXNlYCB3aGVuIHRoZSBzb2NrZXQgaXRzZWxmIGlzIGZyZWVkLiBgc21jX3JlbGVhc2VgIGRlZmluaXRlbHkgbG9va3MgbGlrZSBhIHNvbGlkIGZvY3VzIHN5bWJvbC4KCkFsc28sIGBzbWNfY2xjc29ja19yZWxlYXNlYCBpcyBjYWxsZWQgZnJvbSBgc21jX2luZXRfZGVzdHJveV9zb2NrYCwgd2hpY2ggaXMgYWxzbyBpbXBvcnRhbnQuIFNvIGBzbWNfY2xjc29ja19yZWxlYXNlYCBpcyBhIGtleSBmdW5jdGlvbiB0byBleGFtaW5lIGFzIHdlbGwuCgpJIGxvb2tlZCBhdCBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQgd2l0aCBTTUMuIGBzbWNfZGlhZ19kdW1wYCBpcyBpbnZva2VkIGJ5IG5ldGxpbmsgYFNPQ0tfRElBR19CWV9GQU1JTFlgIGZvciBgQUZfU01DYC4gQWgsIGJ1dCBgc21jX2RpYWdfaGFuZGxlcl9kdW1wYCBpcyByZWdpc3RlcmVkIGZvciBgQUZfU01DYCwgc28gYHNvY2tfZGlhZ19yY3ZfbXNnYCBjYWxscyBgc21jX2RpYWdfaGFuZGxlcl9kdW1wYC4gSG93ZXZlciwgdGhhdCBvbmUgaXMgc3RhdGljLCBzbyBpdCYjMzk7cyBub3QgdXNlZnVsIGFzIGEgZm9jdXMgc3ltYm9sLgoKTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZSBgc21jX3JlbGVhc2VgIGFuZCBgc21jX2NsY3NvY2tfcmVsZWFzZWAgZnVuY3Rpb25zLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L3NtYy9LY29uZmlnYCBmaWxlIHRvIHNlZSBob3cgYFNNQ2AgYW5kIGBTTUNfRElBR2AgZGVwZW5kIG9uIGVhY2ggb3RoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIFNNQ1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBTTUMtUiBwcm92aWRlcyBhIFwmIzM0O3NvY2tldHMgb3ZlciBSRE1BXCYjMzQ7IHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcbiAgIDc6XHRcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXG4gICA4Olx0XHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXG4gICA5Olx0XHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcbiAgMTA6XHRcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBTTUNfRElBR1xuICAxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7U01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gU01DXG4gIDE3Olx0XHRoZWxwXG4gIDE4Olx0XHQgIFN1cHBvcnQgZm9yIFNNQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0b29scyBzdWNoIGFzXG4gIDE5Olx0XHQgIHNtY3NzLlxuICAyMDpcdFxuICAyMTpcdFx0ICBpZiB1bnN1cmUsIHNheSBZLlxuICAyMjpcdFxuICAyMzpcdGNvbmZpZyBTTUNfSFNfQ1RSTF9CUEZcbiAgMjQ6XHRcdGJvb2wgXCYjMzQ7R2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1wmIzM0O1xuICAyNTpcdFx0ZGVwZW5kcyBvbiBTTUMgXHUwMDI2XHUwMDI2IEJQRl9KSVQgXHUwMDI2XHUwMDI2IEJQRl9TWVNDQUxMXG4gIDI2Olx0XHRkZWZhdWx0IHlcbiAgMjc6XHRcdGhlbHBcbiAgMjg6XHRcdCAgU01DX0hTX0NUUkxfQlBGIGVuYWJsZXMgc3VwcG9ydCB0byByZWdpc3RlciBnZW5lcmljIGVCUEYgaG9vayBmb3IgU01DXG4gIDI5Olx0XHQgIGhhbmRzaGFrZSBmbG93LCB3aGljaCBvZmZlciBtdWNoIGdyZWF0ZXIgZmxleGliaWxpdHkgaW4gbW9kaWZ5aW5nIHRoZSBiZWhhdmlvclxuICAzMDpcdFx0ICBvZiB0aGUgU01DIHByb3RvY29sIHN0YWNrIGNvbXBhcmVkIHRvIGEgY29tcGxldGUga2VybmVsLWJhc2VkIGFwcHJvYWNoLiBTZWxlY3RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0NDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgU01DIERlcGVuZGVuY3kgQ29uZnVzaW9uKioKCk9rYXksIHNvIEkgd2FzIGxvb2tpbmcgYXQgdGhlIGRlcGVuZGVuY3kgdHJlZSBmb3IgYFNNQ2AuIEluaXRpYWxseSwgSSB0aG91Z2h0IGl0IHdhcyByZWxpYW50IG9uIGBJTkVUYCwgYElORklOSUJBTkRgLCAqYW5kKiBgRElCU2AuIEJ1dCwgd2FpdCwgYERJQlNgPyBUaGF0IGRvZXNuJiMzOTt0IHNvdW5kIHJpZ2h0IGF0IGFsbC4gSXQmIzM5O3Mgbm90IGEgc3RhbmRhcmQgcmVxdWlyZW1lbnQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIG91dHB1dC4gTm9wZSwgaXQgc2F5cyBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYW5k4oCmICBgRElCU2A/IFRoaXMgaXMgdGhyb3dpbmcgbWUgb2ZmISBPa2F5LCBJIG11c3QgaGF2ZSBtaXNyZWFkIHNvbWV0aGluZy4gTGV0IG1lIGdvIGJhY2sgYW5kIHJlLXJlYWQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24gYWdhaW4uIEFoLCBmaW5hbGx5ISBJdCYjMzk7cyBgSU5FVGAgYW5kIGBJTkZJTklCQU5EYC4gV2FpdOKApiBXaHkgYW0gSSBzZWVpbmcgYERJQlNgPyBUaW1lIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBgbmV0L3NtYy9LY29uZmlnYCBmaWxlIGFnYWluIHRvIHNlZSBpZiBJIGFtIG1pc3Npbmcgc29tZXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NtYy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZz0yPWNvbmZpZyBTTUNcbm5ldC9zbWMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcJiMzNDtcbm5ldC9zbWMvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBJTkVUIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBESUJTXG5uZXQvc21jL0tjb25maWctNS1cdGhlbHBcbi0tXG5uZXQvc21jL0tjb25maWc9MTQ9Y29uZmlnIFNNQ19ESUFHXG5uZXQvc21jL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xubmV0L3NtYy9LY29uZmlnOjE2Olx0ZGVwZW5kcyBvbiBTTUNcbm5ldC9zbWMvS2NvbmZpZy0xNy1cdGhlbHBcbi0tXG5uZXQvc21jL0tjb25maWc9MjM9Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxubmV0L3NtYy9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6MjU6XHRkZXBlbmRzIG9uIFNNQyBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgQlBGX1NZU0NBTExcbm5ldC9zbWMvS2NvbmZpZy0yNi1cdGRlZmF1bHQgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTAxMwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIE15c3RlcmlvdXMgRElCUyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uICYjMzQ7RElCUyYjMzQ7PyBJIGhhdmVuJiMzOTt0IHNlZW4gdGhhdCB0ZXJtIHRocm93biBhcm91bmQgaW4gYSB3aGlsZS4gV2hhdCBleGFjdGx5IGFyZSB3ZSB0YWxraW5nIGFib3V0IGhlcmU/IEkgaGF2ZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJdCYjMzk7cyB0aW1lIHRvIGZpcmUgdXAgdGhlIG1lbnRhbCBtYWNoaW5lcnkuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBkaXJlY3RseSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGEgbWFjcm8sIG9yIHBvdGVudGlhbGx5IHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IGRlZmluZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIExldCYjMzk7cyBzZWUgd2hhdCBLY29uZmlnIGhhcyB0byBzYXkgYWJvdXQgYERJQlNgLiBUaW1lIHRvIGdvIGh1bnRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBESUJTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xuZHJpdmVycy9kaWJzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0RpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoxNDpjb25maWcgRElCU19MT1xuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXHRib29sIFwmIzM0O0ludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTMyMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSBmb3IgU01DKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIGBESUJTYCBpcyBhIGN1c3RvbSBjb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIHRoaXMga2VybmVsIHRyZWUuIFRoYXQmIzM5O3MgZ29vZCB0byBrbm93LiBOb3csIGBTTUNgIGFwcGVhcnMgdG8gYmUgZGVwZW5kZW50IG9uIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgLiBBbHJpZ2h0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBhbGwgZW5hYmxlZCBmb3IgZnV6emluZyB0aGlzLiBUaGVyZWZvcmUsIEkmIzM5O2xsIGFkZCBgU01DYCwgYFNNQ19ESUFHYCwgYElORVRgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LgoKSG9sZCBvbiwgdGhvdWdoLiBgSU5FVGAgaXMgZ2VuZXJhbGx5IGEgZ2l2ZW4sIGFuZCBgSU5GSU5JQkFORGAgaXMgcHJldHR5IHN0YW5kYXJkLiBObyBuZWVkIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSB0aG9zZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBgU01DYCBhbmQgYFNNQ19ESUFHYCBhcmUgZW5hYmxlZCwgdGhvdWdoLgoKUmlnaHQsIHRoZSBwYXRjaCBpdHNlbGYgdGFyZ2V0cyBhIHJhY2UgY29uZGl0aW9uIGluIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLCBhbmQgdGhhdCBoYXBwZW5zIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24uIFNvdW5kcyBsaWtlIGEgdGV4dGJvb2sgcmFjZSBjb25kaXRpb24sIHNvIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nIGF0dGVudGlvbi4KCk9rYXksIGxldCYjMzk7cyBjb25zb2xpZGF0ZSB0aGlzOgoKYFdvcnRoRnV6emluZzogdHJ1ZWAuIEFic29sdXRlbHkuCgpgRm9jdXNTeW1ib2xzOiBzbWNfcmVsZWFzZSwgc21jX2NsY3NvY2tfcmVsZWFzZWAuIFRob3NlIHR3byBmdW5jdGlvbnMgc291bmQgbGlrZSBwcmltZSB0YXJnZXRzLCBjb25zaWRlcmluZyB0aGUgcmFjZSBjb25kaXRpb24uCgpgRW5hYmxlQ29uZmlnczogU01DLCBTTUNfRElBRywgSU5GSU5JQkFORCwgRElCU2AuIE1ha2luZyBzdXJlIHRob3NlIGRlcGVuZGVuY2llcyBhcmUgbWV0LgoKTm93LCBsZXQgbWUganVzdCBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gYHNtY19pbmV0X2luaXRgIGlzIG1hcmtlZCBhcyBgX19pbml0YCwgc28gcHJvYmFibHkgbm90IGFzIGludGVyZXN0aW5nIGZvciB0aGlzLiBBbmQgYHNtY19pbmV0X2V4aXRgIGlzIHNpbWlsYXIuIEhvdyBhYm91dCBgc21jX2hhc2hfc2tgIGFuZCBgc21jX3VuaGFzaF9za2A/IEkmIzM5O2xsIGtlZXAgdGhvc2UgaW4gbWluZCwgYnV0IHRoZXkmIzM5O3JlIG5vdCB0aGUgKnByaW1hcnkqIGZvY3VzIHJpZ2h0IG5vdy4gR29vZCBlbm91Z2ggZm9yIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX3VuaGFzaF9zayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvYWZfc21jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NtYy9hZl9zbWMuYz0xOTk9aW50IHNtY19oYXNoX3NrKHN0cnVjdCBzb2NrICpzaylcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTIxMy1cbm5ldC9zbWMvYWZfc21jLmM6MjE0OnZvaWQgc21jX3VuaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvc21jL2FmX3NtYy5jLTIxNS17XG4tLVxubmV0L3NtYy9hZl9zbWMuYz0yMzg9c3RydWN0IHByb3RvIHNtY19wcm90byA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI0Mi1cdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG5uZXQvc21jL2FmX3NtYy5jOjI0MzpcdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxubmV0L3NtYy9hZl9zbWMuYy0yNDQtXHQucmVsZWFzZV9jYlx0PSBzbWNfcmVsZWFzZV9jYixcbi0tXG5uZXQvc21jL2FmX3NtYy5jPTI1MT1zdHJ1Y3QgcHJvdG8gc21jX3Byb3RvNiA9IHtcbi0tXG5uZXQvc21jL2FmX3NtYy5jLTI1NS1cdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG5uZXQvc21jL2FmX3NtYy5jOjI1NjpcdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxubmV0L3NtYy9hZl9zbWMuYy0yNTctXHQucmVsZWFzZV9jYlx0PSBzbWNfcmVsZWFzZV9jYixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzNjAKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogMjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTTUMgTW9kdWxlJiMzOTtzIFN5bWJvbCBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdCBzbyBmYXIuIEkmIzM5O20gZm9jdXNpbmcgb24gY2xlYW5pbmcgdXAgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIFNNQyBtb2R1bGUuIEl0IGxvb2tzIGxpa2UgYHNtY191bmhhc2hfc2tgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlIGFuZCBJIHNlZSB0aGF0IGl0JiMzOTtzIGNhbGxlZCB3aXRoaW4gYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AsIHNwZWNpZmljYWxseSB0aHJvdWdoIGBzay0mZ3Q7c2tfcHJvdC0mZ3Q7dW5oYXNoKHNrKWAuIFRoaXMgbWFrZXMgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGluY2x1c2lvbiBpbiBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBwb2ludCBvZiBpbnRlcmFjdGlvbi4KCkkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgc21jX2luZXRfZGVzdHJveV9zb2NrYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb247IHRoaXMgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgc2NvcGUuIFRoZW4sIEkgY2hlY2tlZCB0aGF0IGJvdGggYHNtY19jbGNzb2NrX3JlbGVhc2VgIGFuZCBgc21jX3JlbGVhc2VgIGFyZSBnbG9iYWxseSBhY2Nlc3NpYmxlLiBTbyBteSBmaW5hbCBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIGxvb2tpbmcgbGlrZToKCi0gICBgc21jX3JlbGVhc2VgCi0gICBgc21jX2NsY3NvY2tfcmVsZWFzZWAKLSAgIGBzbWNfdW5oYXNoX3NrYAoKTmV4dCwgSSYjMzk7dmUgZ290IHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBjb3JyZWN0LiBNeSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBjdXJyZW50bHk6CgotICAgYFNNQ2AKLSAgIGBTTUNfRElBR2AKLSAgIGBJTkZJTklCQU5EYAotICAgYERJQlNgCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgbmVlZCBmb3IgYERJQlNgLiBUaGUgZGVwZW5kZW5jeSBpcyBzaG93biBhczogYGRlcGVuZHMgb24gSU5FVCAmYW1wOyZhbXA7IElORklOSUJBTkQgJmFtcDsmYW1wOyBESUJTYC4gWWVzLCBnaXZlbiB0aGUgY29udGV4dCwgYERJQlNgIGlzIGFic29sdXRlbHkgcmVxdWlyZWQuCgpBbHJpZ2h0LCBJJiMzOTttIHNhdGlzZmllZCB3aXRoIHRoaXMuIFRpbWUgdG8gZXhlY3V0ZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O1NNQ19ESUFHJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3NtY19jbGNzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c21jX3VuaGFzaF9zayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBTTUMgc29ja2V0IGRlc3RydWN0aW9uIHdoZXJlIHNtY19kaWFnIGR1bXBzIGNvdWxkIGRlcmVmZXJlbmNlIGEgcmVsZWFzZWQgY2xjc29jay4gSXQgbW9kaWZpZXMgdGhlIHNvY2tldCB0ZWFyZG93biBmbG93IGJ5IGFkZGluZyBhIC5kZXN0cm95IGNhbGxiYWNrIHRvIHNtY19pbmV0X3Byb3QgYW5kIHNtY19pbmV0Nl9wcm90LCB3aGljaCB1bmhhc2hlcyB0aGUgc29ja2V0IGJlZm9yZSByZWxlYXNpbmcgdGhlIGNsY3NvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O1NNQ19ESUFHJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7RElCUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NtY19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3NtY19jbGNzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c21jX3VuaGFzaF9zayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBTTUMgc29ja2V0IGRlc3RydWN0aW9uIHdoZXJlIHNtY19kaWFnIGR1bXBzIGNvdWxkIGRlcmVmZXJlbmNlIGEgcmVsZWFzZWQgY2xjc29jay4gSXQgbW9kaWZpZXMgdGhlIHNvY2tldCB0ZWFyZG93biBmbG93IGJ5IGFkZGluZyBhIC5kZXN0cm95IGNhbGxiYWNrIHRvIHNtY19pbmV0X3Byb3QgYW5kIHNtY19pbmV0Nl9wcm90LCB3aGljaCB1bmhhc2hlcyB0aGUgc29ja2V0IGJlZm9yZSByZWxlYXNpbmcgdGhlIGNsY3NvY2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZSB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6NDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24gd2hlcmUgYHNtY19kaWFnYCBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBgc21jLVx1MDAzZWNsY3NvY2tgIHdoaWxlIGl0IGlzIGJlaW5nIHJlbGVhc2VkLiBUaGlzIGlzIGEgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Zywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjYyYTVkZDBmOGI0MWE4OGY5MjY3MWZkNTUyNWNlN2ZhYTM4YTExZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDA4OjQyOjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfaW5ldC5jIGIvbmV0L3NtYy9zbWNfaW5ldC5jCmluZGV4IGE5NDA4NGI0YTQ5OGUuLjUyMGI2NjZmZGQ4ZmEgMTAwNjQ0Ci0tLSBhL25ldC9zbWMvc21jX2luZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc21jL3NtY19pbmV0LmMKQEAgLTE1LDEzICYjNDM7MTUsMTYgQEAKIAogI2luY2x1ZGUgJiMzNDtzbWNfaW5ldC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c21jLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7c21jX2Nsb3NlLmgmIzM0OwogCiBzdGF0aWMgaW50IHNtY19pbmV0X2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spOwomIzQzO3N0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spOwogCiBzdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0X3Byb3QgPSB7CiAJLm5hbWUJCT0gJiMzNDtJTkVUX1NNQyYjMzQ7LAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaW5pdAkJPSBzbWNfaW5ldF9pbml0X3NvY2ssCiYjNDM7CS5kZXN0cm95CT0gc21jX2luZXRfZGVzdHJveV9zb2NrLAogCS5oYXNoCQk9IHNtY19oYXNoX3NrLAogCS51bmhhc2gJCT0gc21jX3VuaGFzaF9zaywKIAkucmVsZWFzZV9jYgk9IHNtY19yZWxlYXNlX2NiLApAQCAtNjgsNiAmIzQzOzcxLDcgQEAgc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldDZfcHJvdCA9IHsKIAkubmFtZQkJPSAmIzM0O0lORVQ2X1NNQyYjMzQ7LAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaW5pdAkJPSBzbWNfaW5ldF9pbml0X3NvY2ssCiYjNDM7CS5kZXN0cm95CT0gc21jX2luZXRfZGVzdHJveV9zb2NrLAogCS5oYXNoCQk9IHNtY19oYXNoX3NrLAogCS51bmhhc2gJCT0gc21jX3VuaGFzaF9zaywKIAkucmVsZWFzZV9jYgk9IHNtY19yZWxlYXNlX2NiLApAQCAtMTE2LDYgJiM0MzsxMjAsMTggQEAgc3RhdGljIGludCBzbWNfaW5ldF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKQogCXJldHVybiBzbWNfY3JlYXRlX2NsY3NrKG5ldCwgc2ssIHNrLSZndDtza19mYW1pbHkpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaykKJiM0Mzt7CiYjNDM7CS8qIFRoZSBzb2NrIGlzIGhhc2hlZCBhbmQgc21jX2RpYWcgZHVtcHMgZGVyZWZlcmVuY2Ugc21jLSZndDtjbGNzb2NrCiYjNDM7CSAqIHdpdGhvdXQgY2xjc29ja19yZWxlYXNlX2xvY2ssIHdoaWxlIHNrX2NvbW1vbl9yZWxlYXNlKCkgY2FsbHMKJiM0MzsJICogLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2guIFVuaGFzaCBmaXJzdCwgYXMgX19zbWNfcmVsZWFzZSgpIGRvZXMsCiYjNDM7CSAqIHNvIG5vIGR1bXAgY2FuIG9ic2VydmUgdGhlIGNsY3NvY2sgYmVpbmcgcmVsZWFzZWQ7IHRoZSBzZWNvbmQKJiM0MzsJICogdW5oYXNoIGlzIGEgbm8tb3AuCiYjNDM7CSAqLwomIzQzOwlzay0mZ3Q7c2tfcHJvdC0mZ3Q7dW5oYXNoKHNrKTsKJiM0MzsJc21jX2NsY3NvY2tfcmVsZWFzZShzbWNfc2soc2spKTsKJiM0Mzt9CiYjNDM7CiBpbnQgX19pbml0IHNtY19pbmV0X2luaXQodm9pZCkKIHsKIAlpbnQgcmM7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM3CgkJCQkJCQlvdXRwdXQ6IDEzMQoJCQkJCQkJdGhvdWdodHM6IDMwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTTUMgU29ja2V0IERlc3RydWN0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBjbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlIGluIHRoZSBTTUMgbmV0d29ya2luZyBjb2RlLiBJdCYjMzk7cyBhZGRpbmcgYSBgZGVzdHJveWAgY2FsbGJhY2sgdG8gYHNtY19pbmV0X3Byb3RgIGFuZCBgc21jX2luZXQ2X3Byb3RgLCB3aGljaCBpcyBnb2luZyB0byBjYWxsIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLiBUaGF0IGZ1bmN0aW9uIHRoZW4gZG9lcyB0aGUgY3J1Y2lhbCBzdGVwIG9mIHVuaGFzaGluZyB0aGUgc29ja2V0IGJlZm9yZSBjYWxsaW5nIGBzbWNfY2xjc29ja19yZWxlYXNlYC4gVGhlIGNvbW1lbnRzIGV4cGxpY2l0bHkgcG9pbnQgb3V0IHRoYXQgdGhpcyBvcmRlciBjaGFuZ2UgaXMgdG8gcHJldmVudCBhIHVzZS1hZnRlci1mcmVlIG9yLCBldmVuIHdvcnNlLCBhIG51bGwtcG9pbnRlciBkZXJlZmVyZW5jZS4gRXNzZW50aWFsbHksIGBzbWNfZGlhZ2Agd2FzIHRyeWluZyB0byBhY2Nlc3MgYHNtYy0mZ3Q7Y2xjc29ja2AgZHVyaW5nIGEgZGVidWcgZHVtcCAqd2hpbGUqIGBjbGNzb2NrYCB3YXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcmVsZWFzZWQuIFRoZSBLQVNBTiBoYXMgYWxyZWFkeSBjYXVnaHQgdGhpcywgd2hpY2ggaXMgZ3JlYXQuCgpUaGUgY29yZSBvZiB0aGUgZml4IGlzIHRvIG1ha2Ugc3VyZSB0aGUgc29ja2V0IGlzIHVuaGFzaGVkICpiZWZvcmUqIGBzbWNfY2xjc29ja19yZWxlYXNlYCBpcyBjYWxsZWQsIGVuc3VyaW5nIHRoYXQgZGVidWcgZHVtcHMgY2FuJiMzOTt0IG9ic2VydmUgdGhlIGBjbGNzb2NrYCBiZWluZyByZWxlYXNlZC4gSXQmIzM5O3MgYSByYWNlIGNvbmRpdGlvbiBmaXgg4oCTIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgeW91JiMzOTtkIGV4cGVjdCB0byBzZWUuIFRoZSBwYXRjaCBpcyBzaW1wbHkgcmUtb3JkZXJpbmcgZXhpc3Rpbmcgb3BlcmF0aW9ucywgbm8gbmV3IGFsbG9jYXRpb25zLCBib3VuZHMgY2hlY2tzLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggZm9yIGEgY29uY3VycmVuY3kgaXNzdWUuCgpJIHdpbGwgZG91YmxlLWNoZWNrLCBidXQgSSBkb24mIzM5O3Qgc2VlIGFueSByaXNrIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIGhlcmUuIFRoaXMgaXMgcHVyZWx5IGFib3V0IHByb3RlY3RpbmcgYWdhaW5zdCBhIHJhY2UgZHVyaW5nIHNvY2tldCB0ZWFyZG93bi4KCkdpdmVuIHRoZSBzdHJhaWdodGZvcndhcmQgbmF0dXJlIG9mIHRoZSBmaXggYW5kIHRoZSBmYWN0IHRoYXQgaXQgcmVzb2x2ZXMgYSBkZXRlY3RlZCBjb25jdXJyZW5jeSBidWcsIEkmIzM5O2xsIHNldCBOZWVkc0tNU0FOIHRvIGZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24gd2hlcmUgYHNtY19kaWFnYCBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBgc21jLVx1MDAzZWNsY3NvY2tgIHdoaWxlIGl0IGlzIGJlaW5nIHJlbGVhc2VkLiBUaGlzIGlzIGEgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Zywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIHNvY2tldCBkZXN0cnVjdGlvbiB3aGVyZSBgc21jX2RpYWdgIGR1bXBzIGNvdWxkIGRlcmVmZXJlbmNlIGBzbWMtXHUwMDNlY2xjc29ja2Agd2hpbGUgaXQgaXMgYmVpbmcgcmVsZWFzZWQuIFRoaXMgaXMgYSB1c2UtYWZ0ZXItZnJlZSBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVnLCB3aGljaCBpcyBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBib3VuZHMgY2hlY2tpbmcgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MjoyOS4wMDQwMTY1MDJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDAxNDUxNDIzMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJTTUNfRElBR1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19yZWxlYXNlXCIsXG4gICAgXCJzbWNfY2xjc29ja19yZWxlYXNlXCIsXG4gICAgXCJzbWNfdW5oYXNoX3NrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24gd2hlcmUgYHNtY19kaWFnYCBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBgc21jLVxcdTAwM2VjbGNzb2NrYCB3aGlsZSBpdCBpcyBiZWluZyByZWxlYXNlZC4gVGhpcyBpcyBhIHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgU01DIHNvY2tldCBkZXN0cnVjdGlvbiB3aGVyZSBzbWNfZGlhZyBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBhIHJlbGVhc2VkIGNsY3NvY2suIEl0IG1vZGlmaWVzIHRoZSBzb2NrZXQgdGVhcmRvd24gZmxvdyBieSBhZGRpbmcgYSAuZGVzdHJveSBjYWxsYmFjayB0byBzbWNfaW5ldF9wcm90IGFuZCBzbWNfaW5ldDZfcHJvdCwgd2hpY2ggdW5oYXNoZXMgdGhlIHNvY2tldCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBjbGNzb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQyOjI5LjAwNDAyODIxMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5ODI3NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjYyYTVkZDBmOGI0MWE4OGY5MjY3MWZkNTUyNWNlN2ZhYTM4YTExZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwODo0MjoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc21jL3NtY19pbmV0LmMgYi9uZXQvc21jL3NtY19pbmV0LmNcXG5pbmRleCBhOTQwODRiNGE0OThlLi41MjBiNjY2ZmRkOGZhIDEwMDY0NFxcbi0tLSBhL25ldC9zbWMvc21jX2luZXQuY1xcbisrKyBiL25ldC9zbWMvc21jX2luZXQuY1xcbkBAIC0xNSwxMyArMTUsMTYgQEBcXG4gXFxuICNpbmNsdWRlIFxcXCJzbWNfaW5ldC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic21jLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJzbWNfY2xvc2UuaFxcXCJcXG4gXFxuIHN0YXRpYyBpbnQgc21jX2luZXRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzayk7XFxuK3N0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xcbiBcXG4gc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0ge1xcbiBcXHQubmFtZVxcdFxcdD0gXFxcIklORVRfU01DXFxcIixcXG4gXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4gXFx0LmluaXRcXHRcXHQ9IHNtY19pbmV0X2luaXRfc29jayxcXG4rXFx0LmRlc3Ryb3lcXHQ9IHNtY19pbmV0X2Rlc3Ryb3lfc29jayxcXG4gXFx0Lmhhc2hcXHRcXHQ9IHNtY19oYXNoX3NrLFxcbiBcXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbiBcXHQucmVsZWFzZV9jYlxcdD0gc21jX3JlbGVhc2VfY2IsXFxuQEAgLTY4LDYgKzcxLDcgQEAgc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldDZfcHJvdCA9IHtcXG4gXFx0Lm5hbWVcXHRcXHQ9IFxcXCJJTkVUNl9TTUNcXFwiLFxcbiBcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiBcXHQuaW5pdFxcdFxcdD0gc21jX2luZXRfaW5pdF9zb2NrLFxcbitcXHQuZGVzdHJveVxcdD0gc21jX2luZXRfZGVzdHJveV9zb2NrLFxcbiBcXHQuaGFzaFxcdFxcdD0gc21jX2hhc2hfc2ssXFxuIFxcdC51bmhhc2hcXHRcXHQ9IHNtY191bmhhc2hfc2ssXFxuIFxcdC5yZWxlYXNlX2NiXFx0PSBzbWNfcmVsZWFzZV9jYixcXG5AQCAtMTE2LDYgKzEyMCwxOCBAQCBzdGF0aWMgaW50IHNtY19pbmV0X2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spXFxuIFxcdHJldHVybiBzbWNfY3JlYXRlX2NsY3NrKG5ldCwgc2ssIHNrLVxcdTAwM2Vza19mYW1pbHkpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBzbWNfaW5ldF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbit7XFxuK1xcdC8qIFRoZSBzb2NrIGlzIGhhc2hlZCBhbmQgc21jX2RpYWcgZHVtcHMgZGVyZWZlcmVuY2Ugc21jLVxcdTAwM2VjbGNzb2NrXFxuK1xcdCAqIHdpdGhvdXQgY2xjc29ja19yZWxlYXNlX2xvY2ssIHdoaWxlIHNrX2NvbW1vbl9yZWxlYXNlKCkgY2FsbHNcXG4rXFx0ICogLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2guIFVuaGFzaCBmaXJzdCwgYXMgX19zbWNfcmVsZWFzZSgpIGRvZXMsXFxuK1xcdCAqIHNvIG5vIGR1bXAgY2FuIG9ic2VydmUgdGhlIGNsY3NvY2sgYmVpbmcgcmVsZWFzZWQ7IHRoZSBzZWNvbmRcXG4rXFx0ICogdW5oYXNoIGlzIGEgbm8tb3AuXFxuK1xcdCAqL1xcbitcXHRzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNldW5oYXNoKHNrKTtcXG4rXFx0c21jX2NsY3NvY2tfcmVsZWFzZShzbWNfc2soc2spKTtcXG4rfVxcbitcXG4gaW50IF9faW5pdCBzbWNfaW5ldF9pbml0KHZvaWQpXFxuIHtcXG4gXFx0aW50IHJjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MjoyOS40OTQ2MDE3ODVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzEzOTc3NTYxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJTTUNfRElBR1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19yZWxlYXNlXCIsXG4gICAgXCJzbWNfY2xjc29ja19yZWxlYXNlXCIsXG4gICAgXCJzbWNfdW5oYXNoX3NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgU01DIHNvY2tldCBkZXN0cnVjdGlvbiB3aGVyZSBzbWNfZGlhZyBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBhIHJlbGVhc2VkIGNsY3NvY2suIEl0IG1vZGlmaWVzIHRoZSBzb2NrZXQgdGVhcmRvd24gZmxvdyBieSBhZGRpbmcgYSAuZGVzdHJveSBjYWxsYmFjayB0byBzbWNfaW5ldF9wcm90IGFuZCBzbWNfaW5ldDZfcHJvdCwgd2hpY2ggdW5oYXNoZXMgdGhlIHNvY2tldCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBjbGNzb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI2MmE1ZGQwZjhiNDFhODhmOTI2NzFmZDU1MjVjZTdmYWEzOGExMWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwODo0MjoyOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zbWMvc21jX2luZXQuYyBiL25ldC9zbWMvc21jX2luZXQuY1xuaW5kZXggYTk0MDg0YjRhNDk4ZS4uNTIwYjY2NmZkZDhmYSAxMDA2NDRcbi0tLSBhL25ldC9zbWMvc21jX2luZXQuY1xuKysrIGIvbmV0L3NtYy9zbWNfaW5ldC5jXG5AQCAtMTUsMTMgKzE1LDE2IEBAXG4gXG4gI2luY2x1ZGUgXCJzbWNfaW5ldC5oXCJcbiAjaW5jbHVkZSBcInNtYy5oXCJcbisjaW5jbHVkZSBcInNtY19jbG9zZS5oXCJcbiBcbiBzdGF0aWMgaW50IHNtY19pbmV0X2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xuK3N0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXRfcHJvdCA9IHtcbiBcdC5uYW1lXHRcdD0gXCJJTkVUX1NNQ1wiLFxuIFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gXHQuaW5pdFx0XHQ9IHNtY19pbmV0X2luaXRfc29jayxcbitcdC5kZXN0cm95XHQ9IHNtY19pbmV0X2Rlc3Ryb3lfc29jayxcbiBcdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG4gXHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbiBcdC5yZWxlYXNlX2NiXHQ9IHNtY19yZWxlYXNlX2NiLFxuQEAgLTY4LDYgKzcxLDcgQEAgc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldDZfcHJvdCA9IHtcbiBcdC5uYW1lXHRcdD0gXCJJTkVUNl9TTUNcIixcbiBcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIFx0LmluaXRcdFx0PSBzbWNfaW5ldF9pbml0X3NvY2ssXG4rXHQuZGVzdHJveVx0PSBzbWNfaW5ldF9kZXN0cm95X3NvY2ssXG4gXHQuaGFzaFx0XHQ9IHNtY19oYXNoX3NrLFxuIFx0LnVuaGFzaFx0XHQ9IHNtY191bmhhc2hfc2ssXG4gXHQucmVsZWFzZV9jYlx0PSBzbWNfcmVsZWFzZV9jYixcbkBAIC0xMTYsNiArMTIwLDE4IEBAIHN0YXRpYyBpbnQgc21jX2luZXRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcbiBcdHJldHVybiBzbWNfY3JlYXRlX2NsY3NrKG5ldCwgc2ssIHNrLVx1MDAzZXNrX2ZhbWlseSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHNtY19pbmV0X2Rlc3Ryb3lfc29jayhzdHJ1Y3Qgc29jayAqc2spXG4re1xuK1x0LyogVGhlIHNvY2sgaXMgaGFzaGVkIGFuZCBzbWNfZGlhZyBkdW1wcyBkZXJlZmVyZW5jZSBzbWMtXHUwMDNlY2xjc29ja1xuK1x0ICogd2l0aG91dCBjbGNzb2NrX3JlbGVhc2VfbG9jaywgd2hpbGUgc2tfY29tbW9uX3JlbGVhc2UoKSBjYWxsc1xuK1x0ICogLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2guIFVuaGFzaCBmaXJzdCwgYXMgX19zbWNfcmVsZWFzZSgpIGRvZXMsXG4rXHQgKiBzbyBubyBkdW1wIGNhbiBvYnNlcnZlIHRoZSBjbGNzb2NrIGJlaW5nIHJlbGVhc2VkOyB0aGUgc2Vjb25kXG4rXHQgKiB1bmhhc2ggaXMgYSBuby1vcC5cbitcdCAqL1xuK1x0c2stXHUwMDNlc2tfcHJvdC1cdTAwM2V1bmhhc2goc2spO1xuK1x0c21jX2NsY3NvY2tfcmVsZWFzZShzbWNfc2soc2spKTtcbit9XG4rXG4gaW50IF9faW5pdCBzbWNfaW5ldF9pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJjO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDI6MjkuNDk0NjAzNTI1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1MDY3OTYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBJbmV0IFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zbWMvc21jX2luZXQuY2AuIEl0IGxvb2tzIGxpa2Ugd2UncmUgYWRkaW5nIGEgYC5kZXN0cm95YCBjYWxsYmFjayB0byBib3RoIGBzbWNfaW5ldF9wcm90YCBhbmQgYHNtY19pbmV0Nl9wcm90YC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgdGhlIGNhbGxiYWNrIGl0c2VsZiBpcyBgc21jX2luZXRfZGVzdHJveV9zb2NrYC4gSSBrbm93IHRoYXQgZnVuY3Rpb24g4oCTIGl0J3MgcmVzcG9uc2libGUgZm9yIHVuaGFzaGluZyB0aGUgc29ja2V0IGFuZCB0aGVuIGNhbGxpbmcgYHNtY19jbGNzb2NrX3JlbGVhc2VgLiBNYWtlcyBzZW5zZTsgY2xlYW51cCBpcyBjcnVjaWFsLCBlc3BlY2lhbGx5IGluIHRoaXMgYXJlYS5cblxuTm93LCBiZWZvcmUgSSBzaWduIG9mZiBvbiB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGJldHRlci4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGBuZXQvc21jL3NtY19pbmV0LmNgIGFuZCBhbHNvIGNoZWNrIGBuZXQvc21jL3NtYy5oYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBuZXcgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIGNvbmZsaWN0cy4gVGltZSB0byBmaXJlIHVwIGBncmVwcGVyYCBhbmQgc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYHNtY19pbmV0X3Byb3RgLCBgc21jX2luZXQ2X3Byb3RgLCBhbmQgdGhhdCBkZXN0cnVjdGlvbiBmdW5jdGlvbiwgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AuIEkgbmVlZCB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgaW50ZWdyYXRlcyBjbGVhbmx5IGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci4gSSdsbCBiZSBsb29raW5nIGZvciBjcm9zcy1yZWZlcmVuY2VzLCBhbnkgcG90ZW50aWFsIGxvY2tpbmcgaXNzdWVzLCBhbmQgaG93IHRoZXNlIGNoYW5nZXMgaW1wYWN0IHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBvZiB0aGVzZSBzb2NrZXRzLiBMZXQncyBzZWUgd2hhdCB0aGUgZ3JlcCByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDI6MzMuOTQ1Mjg1ODUyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTU3NTc0ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2luZXRfZGVzdHJveV9zb2NrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2luZXQuYz0yMD1zdGF0aWMgaW50IHNtY19pbmV0X2luaXRfc29jayhzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9zbWMvc21jX2luZXQuYzoyMTpzdGF0aWMgdm9pZCBzbWNfaW5ldF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvc21jL3NtY19pbmV0LmMtMjItXFxubmV0L3NtYy9zbWNfaW5ldC5jPTIzPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXRfcHJvdCA9IHtcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy0yNi1cXHQuaW5pdFxcdFxcdD0gc21jX2luZXRfaW5pdF9zb2NrLFxcbm5ldC9zbWMvc21jX2luZXQuYzoyNzpcXHQuZGVzdHJveVxcdD0gc21jX2luZXRfZGVzdHJveV9zb2NrLFxcbm5ldC9zbWMvc21jX2luZXQuYy0yOC1cXHQuaGFzaFxcdFxcdD0gc21jX2hhc2hfc2ssXFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9NzA9c3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldDZfcHJvdCA9IHtcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy03My1cXHQuaW5pdFxcdFxcdD0gc21jX2luZXRfaW5pdF9zb2NrLFxcbm5ldC9zbWMvc21jX2luZXQuYzo3NDpcXHQuZGVzdHJveVxcdD0gc21jX2luZXRfZGVzdHJveV9zb2NrLFxcbm5ldC9zbWMvc21jX2luZXQuYy03NS1cXHQuaGFzaFxcdFxcdD0gc21jX2hhc2hfc2ssXFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9MTEzPXN0YXRpYyBpbnQgc21jX2luZXRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy0xMjItXFxubmV0L3NtYy9zbWNfaW5ldC5jOjEyMzpzdGF0aWMgdm9pZCBzbWNfaW5ldF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9zbWMvc21jX2luZXQuYy0xMjQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MjozNS42NjEwNTMwNzNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzExOTYzMTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gdGhlIFNNQyBLY29uZmlnKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyBkZWZpbml0ZWx5IGNlbnRlcmVkIGFyb3VuZCB0aGUgU01DLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGVyZSdzIHRoZSBLY29uZmlnIGZvciBpdD9cIiBJIGtub3cgdGhlIGFyY2hpdGVjdHVyZSwgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYW5kIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGtleSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgYXMgc3BlY2lmaWMgYXMgYW4gU01DLCBvciBTeXN0ZW0gTWFuYWdlbWVudCBDb250cm9sbGVyLiBJdCdzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGhhdmUgaXRzIG93biBLY29uZmlnIGZyYWdtZW50IHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24uIFNvLCBteSBtZW50YWwgY2hlY2tsaXN0IGJlZ2luczogSSBuZWVkIHRvIGxvY2F0ZSB0aGlzIGZpbGUgdG8gdW5kZXJzdGFuZCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHksIGhvdyB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgU01DIHN1cHBvcnQgd2l0aGluIHRoZSBidWlsZC4gVGltZSB0byB0cmFjayB0aGF0IGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMzcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MjozOC45NzMwMjAwNjlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3OTcxODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNNQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxubmV0L3NtYy9LY29uZmlnOjI6Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0xMy1cXG5uZXQvc21jL0tjb25maWc6MTQ6Y29uZmlnIFNNQ19ESUFHXFxubmV0L3NtYy9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZy0yMi1cXG5uZXQvc21jL0tjb25maWc6MjM6Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbm5ldC9zbWMvS2NvbmZpZy0yNC1cXHRib29sIFxcXCJHZW5lcmljIGVCUEYgaG9vayBmb3IgU01DIGhhbmRzaGFrZSBmbG93XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MjozOS4wMjI4MjM3NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjI0NTkxNTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBTb2NrZXQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpcyBgU01DYCwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyB0aGUgc2NvcGUgYSBiaXQuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcmFjZSBjb25kaXRpb24uIFNwZWNpZmljYWxseSwgYHNtY19kaWFnYCB3YXMgZGVyZWZlcmVuY2luZyBgc21jLVx1MDAzZWNsY3NvY2tgIHdpdGhvdXQgZmlyc3Qgb2J0YWluaW5nIHRoZSBgY2xjc29ja19yZWxlYXNlX2xvY2tgLiBUaGF0J3MgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGJ1ZywgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gYWRkcmVzcy4gVGhlIGZpeCBpbnRyb2R1Y2VzIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLCB3aGljaCwgaWYgSSB1bmRlcnN0YW5kIHRoaXMgY29ycmVjdGx5LCBlc3NlbnRpYWxseSBjbGVhbnMgdXAgdGhlIHNvY2tldCBieSBjYWxsaW5nIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzaylgIGFuZCB0aGVuIGBzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpYC4gSW50ZXJlc3RpbmcsIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gc29ja2V0IHRlYXJkb3duLCB3aGljaCBzY3JlYW1zIFwiZnV6eiB0aGlzIGFyZWEhXCIgdG8gbWUuXG5cbk5vdywgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIHdoaWNoIGlzIGZydXN0cmF0aW5nLiBDYW4ndCBkaXJlY3RseSB0YXJnZXQgaXQuIExldCBtZSBzZWUuLi4gSSBjb3VsZCBmdXp6IGBzbWNfcmVsZWFzZWAsIGBzbWNfY2xjc29ja19yZWxlYXNlYCBvciBgc21jX2luZXRfaW5pdF9zb2NrYC4gTm8sIHdhaXQuLi4gYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AgaXMgY2FsbGVkIGZyb20gYHNrX2NvbW1vbl9yZWxlYXNlYC4gSGFuZyBvbiwgYHNrX2NvbW1vbl9yZWxlYXNlYCBpcyBjYWxsZWQgYnkgYHNtY19yZWxlYXNlYCwgd2hpY2ggaXMgdGhlIGVudHJ5IHBvaW50LiBCdXQgYHNtY19pbmV0X3Byb3QuZGVzdHJveWAgaXMgY2FsbGVkIGJ5IGBza19jb21tb25fcmVsZWFzZWAuIEdvdCBpdC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gZm9jdXMgb24gYHNtY19jbGNzb2NrX3JlbGVhc2VgLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhhdCBvbmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxMywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mjo0NC42NDc0MTg0NDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwODIzOTk4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfY2xjc29ja19yZWxlYXNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9Mjg4PXN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzE3LVxcdFxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxubmV0L3NtYy9hZl9zbWMuYzozMTg6XFx0XFx0XFx0c21jX2NsY3NvY2tfcmVsZWFzZShzbWMpO1xcbm5ldC9zbWMvYWZfc21jLmMtMzE5LVxcdFxcdFxcdGxvY2tfc29jayhzayk7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTMzNTM9aW50IHNtY19jcmVhdGVfY2xjc2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHkpXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMzNjItXFxubmV0L3NtYy9hZl9zbWMuYzozMzYzOlxcdC8qIHNtY19jbGNzb2NrX3JlbGVhc2UoKSBkb2VzIG5vdCB3YWl0IHNtYy1cXHUwMDNlY2xjc29jay1cXHUwMDNlc2snc1xcbm5ldC9zbWMvYWZfc21jLmMtMzM2NC1cXHQgKiBkZXN0cnVjdGlvbjsgIGl0cyBza19zdGF0ZSBtaWdodCBub3QgYmUgVENQX0NMT1NFIGFmdGVyXFxuLS1cXG5uZXQvc21jL3NtY19jbG9zZS5jLTIzLS8qIHJlbGVhc2UgdGhlIGNsY3NvY2sgdGhhdCBpcyBhc3NpZ25lZCB0byB0aGUgc21jX3NvY2sgKi9cXG5uZXQvc21jL3NtY19jbG9zZS5jOjI0OnZvaWQgc21jX2NsY3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG5uZXQvc21jL3NtY19jbG9zZS5jLTI1LXtcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmM9MTI4PXZvaWQgc21jX2Nsb3NlX2FjdGl2ZV9hYm9ydChzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTgxLVxcdFxcdHJlbGVhc2Vfc29jayhzayk7XFxubmV0L3NtYy9zbWNfY2xvc2UuYzoxODI6XFx0XFx0c21jX2NsY3NvY2tfcmVsZWFzZShzbWMpO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTgzLVxcdFxcdGxvY2tfc29jayhzayk7XFxuLS1cXG5uZXQvc21jL3NtY19jbG9zZS5jPTM1Nj1zdGF0aWMgdm9pZCBzbWNfY2xvc2VfcGFzc2l2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmMtNDQyLVxcdGlmIChyZWxlYXNlX2NsY3NvY2spXFxubmV0L3NtYy9zbWNfY2xvc2UuYzo0NDM6XFx0XFx0c21jX2NsY3NvY2tfcmVsZWFzZShzbWMpO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmMtNDQ0LVxcdHNvY2tfcHV0KHNrKTsgLyogc29ja19ob2xkIGRvbmUgYnkgc2NoZWR1bGVycyBvZiBjbG9zZV93b3JrICovXFxuLS1cXG5uZXQvc21jL3NtY19jbG9zZS5oPTI1PXZvaWQgc21jX2Nsb3NlX2luaXQoc3RydWN0IHNtY19zb2NrICpzbWMpO1xcbm5ldC9zbWMvc21jX2Nsb3NlLmg6MjY6dm9pZCBzbWNfY2xjc29ja19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKTtcXG5uZXQvc21jL3NtY19jbG9zZS5oLTI3LWludCBzbWNfY2xvc2VfYWJvcnQoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKTtcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYz0xMjM9c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy0xMzEtXFx0c2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZXVuaGFzaChzayk7XFxubmV0L3NtYy9zbWNfaW5ldC5jOjEzMjpcXHRzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpO1xcbm5ldC9zbWMvc21jX2luZXQuYy0xMzMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mjo0Ni4zNTU2NjI5OTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzIwMjQxMTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIHRoZSBTTUMgU29ja2V0IFJlbGVhc2UgRmxvdyoqXG5cblJpZ2h0LCB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgU01DIHNvY2tldCBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IHRoZSByZWxlYXNlIG1lY2hhbmlzbXMuIFRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGhlcmUgaXMgb2J2aW91c2x5IGBTTUNgLiBNeSBpbW1lZGlhdGUgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGBzbWNfY2xjc29ja19yZWxlYXNlYCBhbmQgYHNtY19yZWxlYXNlYCBmdW5jdGlvbnMuIFRob3NlIGFyZSBjbGVhcmx5IHRoZSBjcml0aWNhbCBwb2ludHMgZm9yIHNvY2tldCBjbGVhbnVwLlxuXG5XYWl0IGEgc2Vjb25k4oCmIEkgc2VlIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgIGlzIGNhbGxlZCBmcm9tIGBza19jb21tb25fcmVsZWFzZWAgd2hpY2ggKml0c2VsZiogaXMgY2FsbGVkIGZyb20gYHNtY19yZWxlYXNlYC4gVGhhdCdzIGltcG9ydGFudC4gSXQgc3VnZ2VzdHMgYSBtb3JlIGNvbXBsZXggY2hhaW4gb2YgZXZlbnRzIHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC4gSXQncyBub3QganVzdCBhIGRpcmVjdCBjYWxsOyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjb21tb24gc29ja2V0IHJlbGVhc2UgcGF0aCB0aGF0J3MgYmVpbmcgbGV2ZXJhZ2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBTbywgbGV0IG1lIGdldCBhIGNsZWFyIHBpY3R1cmUgYnkgZXhhbWluaW5nIGBzbWNfcmVsZWFzZWAgbW9yZSBjbG9zZWx5IGFuZCB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggZnJvbSB0aGVyZS4gVGhpcyBuZXN0ZWQgZnVuY3Rpb24gY2FsbCBjb3VsZCBleHBsYWluIHNvbWUgb2YgdGhlIGlzc3VlcyByYWlzZWQgaW4gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTExNSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQyOjUwLjA3NTkwOTQ4N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMjIyNDI5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfcmVsZWFzZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM9MTA1ND1zdGF0aWMgaW50IGFwcGxlc21jX2NyZWF0ZV9hY2NlbGVyb21ldGVyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMtMTEwNi0vKiBSZWxlYXNlIGFsbCByZXNvdXJjZXMgdXNlZCBieSB0aGUgYWNjZWxlcm9tZXRlciAqL1xcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYzoxMTA3OnN0YXRpYyB2b2lkIGFwcGxlc21jX3JlbGVhc2VfYWNjZWxlcm9tZXRlcih2b2lkKVxcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xMTA4LXtcXG4tLVxcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYz0xMTE1PXN0YXRpYyBpbnQgYXBwbGVzbWNfY3JlYXRlX2xpZ2h0X3NlbnNvcih2b2lkKVxcbi0tXFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTExMjEtXFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jOjExMjI6c3RhdGljIHZvaWQgYXBwbGVzbWNfcmVsZWFzZV9saWdodF9zZW5zb3Iodm9pZClcXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMtMTEyMy17XFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM9MTEyOT1zdGF0aWMgaW50IGFwcGxlc21jX2NyZWF0ZV9rZXlfYmFja2xpZ2h0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMtMTEzOC1cXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM6MTEzOTpzdGF0aWMgdm9pZCBhcHBsZXNtY19yZWxlYXNlX2tleV9iYWNrbGlnaHQodm9pZClcXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMtMTE0MC17XFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM9MTQxOD1zdGF0aWMgaW50IF9faW5pdCBhcHBsZXNtY19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMtMTU2NC1vdXRfbGlnaHRfbGVkY2xhc3M6XFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jOjE1NjU6XFx0YXBwbGVzbWNfcmVsZWFzZV9rZXlfYmFja2xpZ2h0KCk7XFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTE1NjYtb3V0X2xpZ2h0X3N5c2ZzOlxcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYzoxNTY3OlxcdGFwcGxlc21jX3JlbGVhc2VfbGlnaHRfc2Vuc29yKCk7XFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTE1Njgtb3V0X2FjY2VsZXJvbWV0ZXI6XFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jOjE1Njk6XFx0YXBwbGVzbWNfcmVsZWFzZV9hY2NlbGVyb21ldGVyKCk7XFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTE1NzAtb3V0X2luZm86XFxuLS1cXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM9MTU4Nj1zdGF0aWMgdm9pZCBfX2V4aXQgYXBwbGVzbWNfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9od21vbi9hcHBsZXNtYy5jLTE1ODgtXFx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoaHdtb25fZGV2KTtcXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM6MTU4OTpcXHRhcHBsZXNtY19yZWxlYXNlX2tleV9iYWNrbGlnaHQoKTtcXG5kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmM6MTU5MDpcXHRhcHBsZXNtY19yZWxlYXNlX2xpZ2h0X3NlbnNvcigpO1xcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYzoxNTkxOlxcdGFwcGxlc21jX3JlbGVhc2VfYWNjZWxlcm9tZXRlcigpO1xcbmRyaXZlcnMvaHdtb24vYXBwbGVzbWMuYy0xNTkyLVxcdGFwcGxlc21jX2Rlc3Ryb3lfbm9kZXMoaW5mb19ncm91cCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jPTIxMTA9c3RhdGljIGludCBzbWNfcmVxdWVzdF9hdHRyaWIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmMtMjEyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jOjIxMjU6c3RhdGljIHZvaWQgc21jX3JlbGVhc2VfYXR0cmliKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMTI2LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM9MjEzNT1zdGF0aWMgaW5saW5lIHZvaWQgc21jX3JlcXVlc3RfZGF0YWNzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMTUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM6MjE1NDpzdGF0aWMgdm9pZCBzbWNfcmVsZWFzZV9kYXRhY3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMTU1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM9MjIyNz1zdGF0aWMgaW50IHNtY19kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmMtMjM5MS0gb3V0X3JlbGVhc2VfYXR0cmliOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM6MjM5MjpcXHRzbWNfcmVsZWFzZV9hdHRyaWIocGRldiwgbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yMzkzLSBvdXRfcmVsZWFzZV9pbzpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM9MjQwMz1zdGF0aWMgdm9pZCBzbWNfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yNDE4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmM6MjQxOTpcXHRzbWNfcmVsZWFzZV9kYXRhY3MocGRldixuZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5jOjI0MjA6XFx0c21jX3JlbGVhc2VfYXR0cmliKHBkZXYsbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9zbWM5MXguYy0yNDIxLVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yMTQ9dm9pZCBzbWNfdW5oYXNoX3NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjI3LSAqL1xcbm5ldC9zbWMvYWZfc21jLmM6MjI4OnZvaWQgc21jX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9zbWMvYWZfc21jLmMtMjI5LXtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MjM4PXN0cnVjdCBwcm90byBzbWNfcHJvdG8gPSB7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI0My1cXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbm5ldC9zbWMvYWZfc21jLmM6MjQ0OlxcdC5yZWxlYXNlX2NiXFx0PSBzbWNfcmVsZWFzZV9jYixcXG5uZXQvc21jL2FmX3NtYy5jLTI0NS1cXHQub2JqX3NpemVcXHQ9IHNpemVvZihzdHJ1Y3Qgc21jX3NvY2spLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yNTE9c3RydWN0IHByb3RvIHNtY19wcm90bzYgPSB7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI1Ni1cXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbm5ldC9zbWMvYWZfc21jLmM6MjU3OlxcdC5yZWxlYXNlX2NiXFx0PSBzbWNfcmVsZWFzZV9jYixcXG5uZXQvc21jL2FmX3NtYy5jLTI1OC1cXHQub2JqX3NpemVcXHQ9IHNpemVvZihzdHJ1Y3Qgc21jX3NvY2spLFxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yNzk9c3RhdGljIHZvaWQgc21jX3Jlc3RvcmVfZmFsbGJhY2tfY2hhbmdlcyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjg3LVxcbm5ldC9zbWMvYWZfc21jLmM6Mjg4OnN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG5uZXQvc21jL2FmX3NtYy5jLTI4OS17XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMyNy1cXG5uZXQvc21jL2FmX3NtYy5jOjMyODppbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG5uZXQvc21jL2FmX3NtYy5jLTMyOS17XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTM2MC1cXG5uZXQvc21jL2FmX3NtYy5jOjM2MTpcXHRyYyA9IF9fc21jX3JlbGVhc2Uoc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTM2Mi1cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9NzAwPXN0YXRpYyB2b2lkIHNtY19jb25uX3NhdmVfcGVlcl9pbmZvX2ZjZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYyxcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtNzIwLVxcdHNtYy1cXHUwMDNlY29ubi5sZ3ItXFx1MDAzZXBlZXJfb3MgPSBmY2UtXFx1MDAzZW9zX3R5cGU7XFxubmV0L3NtYy9hZl9zbWMuYzo3MjE6XFx0c21jLVxcdTAwM2Vjb25uLmxnci1cXHUwMDNlcGVlcl9zbWNfcmVsZWFzZSA9IGZjZS1cXHUwMDNlcmVsZWFzZTtcXG5uZXQvc21jL2FmX3NtYy5jLTcyMi1cXHRpZiAoc21jX2lzYXNjaWkoZmNlLVxcdTAwM2Vob3N0bmFtZSkpXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTE4NTc9dm9pZCBzbWNfY2xvc2Vfbm9uX2FjY2VwdGVkKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMTg2NS1cXHRcXHRXUklURV9PTkNFKHNrLVxcdTAwM2Vza19saW5nZXJ0aW1lLCBTTUNfTUFYX1NUUkVBTV9XQUlUX1RJTUVPVVQpO1xcbm5ldC9zbWMvYWZfc21jLmM6MTg2NjpcXHRfX3NtY19yZWxlYXNlKHNtYyk7XFxubmV0L3NtYy9hZl9zbWMuYy0xODY3LVxcdHJlbGVhc2Vfc29jayhzayk7XFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jPTMzMzI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc21jX3NvY2tfb3BzID0ge1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0zMzM0LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxubmV0L3NtYy9hZl9zbWMuYzozMzM1OlxcdC5yZWxlYXNlXFx0PSBzbWNfcmVsZWFzZSxcXG5uZXQvc21jL2FmX3NtYy5jLTMzMzYtXFx0LmJpbmRcXHRcXHQ9IHNtY19iaW5kLFxcbi0tXFxubmV0L3NtYy9zbWMuaD00MT12b2lkIHNtY191bmhhc2hfc2soc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvc21jL3NtYy5oOjQyOnZvaWQgc21jX3JlbGVhc2VfY2Ioc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvc21jL3NtYy5oLTQzLVxcbm5ldC9zbWMvc21jLmg6NDQ6aW50IHNtY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spO1xcbm5ldC9zbWMvc21jLmgtNDUtaW50IHNtY19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkcixcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jPTI2PXN0YXRpYyB2b2lkIHNtY19jZGNfdHhfaGFuZGxlcihzdHJ1Y3Qgc21jX3dyX3R4X3BlbmRfcHJpdiAqcG5kX3NuZCxcXG4tLVxcbm5ldC9zbWMvc21jX2NkYy5jLTU2LVxcdFxcdCAqIFVzZXIgY29udGV4dCB3aWxsIGxhdGVyIHRyeSB0byBzZW5kIHdoZW4gaXQgcmVsZWFzZSBzb2NrX2xvY2tcXG5uZXQvc21jL3NtY19jZGMuYzo1NzpcXHRcXHQgKiBpbiBzbWNfcmVsZWFzZV9jYigpXFxubmV0L3NtYy9zbWNfY2RjLmMtNTgtXFx0XFx0ICovXFxuLS1cXG5uZXQvc21jL3NtY19jbG9zZS5jPTM1Nj1zdGF0aWMgdm9pZCBzbWNfY2xvc2VfcGFzc2l2ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMzk5LVxcdFxcdCAgICBzbWNfY2xvc2Vfc2VudF9hbnlfY2xvc2UoY29ubikpIHtcXG5uZXQvc21jL3NtY19jbG9zZS5jOjQwMDpcXHRcXHRcXHQvKiBzbWNfcmVsZWFzZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBsb2NhbGx5ICovXFxubmV0L3NtYy9zbWNfY2xvc2UuYy00MDEtXFx0XFx0XFx0c2stXFx1MDAzZXNrX3N0YXRlID0gU01DX0NMT1NFRDtcXG4tLVxcbm5ldC9zbWMvc21jX2NvcmUuYz0zMDk9c3RhdGljIGludCBzbWNfbmxfZmlsbF9sZ3JfdjJfY29tbW9uKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTMxOC1cXHRcXHRnb3RvIGVycnYyYXR0cjtcXG5uZXQvc21jL3NtY19jb3JlLmM6MzE5OlxcdGlmIChubGFfcHV0X3U4KHNrYiwgU01DX05MQV9MR1JfVjJfUkVMLCBsZ3ItXFx1MDAzZXBlZXJfc21jX3JlbGVhc2UpKVxcbm5ldC9zbWMvc21jX2NvcmUuYy0zMjAtXFx0XFx0Z290byBlcnJ2MmF0dHI7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmg9Mjg2PXN0cnVjdCBzbWNfbGlua19ncm91cCB7XFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmgtMzEyLVxcdHU4XFx0XFx0XFx0cGVlcl9vcztcXHQvKiBwZWVyIG9wZXJhdGluZyBzeXN0ZW0gKi9cXG5uZXQvc21jL3NtY19jb3JlLmg6MzEzOlxcdHU4XFx0XFx0XFx0cGVlcl9zbWNfcmVsZWFzZTtcXG5uZXQvc21jL3NtY19jb3JlLmgtMzE0LVxcdHU4XFx0XFx0XFx0cGVlcl9ob3N0bmFtZVtTTUNfTUFYX0hPU1ROQU1FX0xFTl07XFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9MjM9c3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0ge1xcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jLTI5LVxcdC51bmhhc2hcXHRcXHQ9IHNtY191bmhhc2hfc2ssXFxubmV0L3NtYy9zbWNfaW5ldC5jOjMwOlxcdC5yZWxlYXNlX2NiXFx0PSBzbWNfcmVsZWFzZV9jYixcXG5uZXQvc21jL3NtY19pbmV0LmMtMzEtXFx0Lm9ial9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHNtY19zb2NrKSxcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYz0zNj1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzbWNfaW5ldF9zdHJlYW1fb3BzID0ge1xcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jLTM4LVxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxubmV0L3NtYy9zbWNfaW5ldC5jOjM5OlxcdC5yZWxlYXNlXFx0PSBzbWNfcmVsZWFzZSxcXG5uZXQvc21jL3NtY19pbmV0LmMtNDAtXFx0LmJpbmRcXHRcXHQ9IHNtY19iaW5kLFxcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jPTcwPXN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXQ2X3Byb3QgPSB7XFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmMtNzYtXFx0LnVuaGFzaFxcdFxcdD0gc21jX3VuaGFzaF9zayxcXG5uZXQvc21jL3NtY19pbmV0LmM6Nzc6XFx0LnJlbGVhc2VfY2JcXHQ9IHNtY19yZWxlYXNlX2NiLFxcbm5ldC9zbWMvc21jX2luZXQuYy03OC1cXHQub2JqX3NpemVcXHQ9IHNpemVvZihzdHJ1Y3Qgc21jNl9zb2NrKSxcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYz04ND1zdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBzbWNfaW5ldDZfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy04Ni1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbm5ldC9zbWMvc21jX2luZXQuYzo4NzpcXHQucmVsZWFzZVxcdD0gc21jX3JlbGVhc2UsXFxubmV0L3NtYy9zbWNfaW5ldC5jLTg4LVxcdC5iaW5kXFx0XFx0PSBzbWNfYmluZCxcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYz0xMjM9c3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy0xMjYtXFx0ICogd2l0aG91dCBjbGNzb2NrX3JlbGVhc2VfbG9jaywgd2hpbGUgc2tfY29tbW9uX3JlbGVhc2UoKSBjYWxsc1xcbm5ldC9zbWMvc21jX2luZXQuYzoxMjc6XFx0ICogLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2guIFVuaGFzaCBmaXJzdCwgYXMgX19zbWNfcmVsZWFzZSgpIGRvZXMsXFxubmV0L3NtYy9zbWNfaW5ldC5jLTEyOC1cXHQgKiBzbyBubyBkdW1wIGNhbiBvYnNlcnZlIHRoZSBjbGNzb2NrIGJlaW5nIHJlbGVhc2VkOyB0aGUgc2Vjb25kXFxuLS1cXG5uZXQvc21jL3NtY19sbGMuYz00NDc9aW50IHNtY19sbGNfc2VuZF9jb25maXJtX2xpbmsoc3RydWN0IHNtY19saW5rICpsaW5rLFxcbi0tXFxubmV0L3NtYy9zbWNfbGxjLmMtNDc0LVxcdGlmIChsaW5rLVxcdTAwM2VsZ3ItXFx1MDAzZXNtY192ZXJzaW9uID09IFNNQ19WMiBcXHUwMDI2XFx1MDAyNlxcbm5ldC9zbWMvc21jX2xsYy5jOjQ3NTpcXHQgICAgbGluay1cXHUwMDNlbGdyLVxcdTAwM2VwZWVyX3NtY19yZWxlYXNlIFxcdTAwM2U9IFNNQ19SRUxFQVNFXzEpIHtcXG5uZXQvc21jL3NtY19sbGMuYy00NzYtXFx0XFx0Y29uZmxsYy1cXHUwMDNlbWF4X2Nvbm5zID0gbGluay1cXHUwMDNlbGdyLVxcdTAwM2VtYXhfY29ubnM7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnBmX3NtYy5jPTQwPWludCBmYWxsYmFja19jbnQgPSAwO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfc21jLmMtNDEtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9zbWMuYzo0MjpTRUMoXFxcImZlbnRyeS9zbWNfcmVsZWFzZVxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2JwZl9zbWMuYzo0MzppbnQgQlBGX1BST0coYnBmX3NtY19yZWxlYXNlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9icGZfc21jLmMtNDQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mjo1MS42MDgxNDIyNzVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NTgwNjAxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBTTUMgU29ja2V0IExpZmVjeWNsZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9uczogYHNtY19yZWxlYXNlYCwgYHNtY19jbGNzb2NrX3JlbGVhc2VgLCBhbmQgYHNtY19pbmV0X2luaXRfc29ja2AuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNyaXRpY2FsIHBpZWNlcyByZWxhdGVkIHRvIG1hbmFnaW5nIHRoZSBTTUMgc29ja2V0IGxpZmVjeWNsZS4gSG1tLCBidXQgSSBzaG91bGQgcGF1c2UuIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgZGVzdHJ1Y3Rpb24gcHJvY2Vzcy4gSSByZWNhbGwgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AgYmVpbmcgY2FsbGVkIGZyb20gYHNrX2NvbW1vbl9yZWxlYXNlYC4gTm93LCBpcyAqdGhhdCogY2FsbGVkIGZyb20gYGluZXRfcmVsZWFzZWAgb3IgYGluZXQ2X3JlbGVhc2VgPyBJdCdzIGVhc3kgdG8gZ2V0IGxvc3QgaW4gdGhlc2UgbGF5ZXJzLi4uTm8gd2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBjb250ZXh0LiBgc21jX2luZXRfcHJvdGAgaXMgdGhlIHN0cnVjdHVyZSB1c2VkIGZvciBgQUZfSU5FVGAgc29ja2V0cyBjcmVhdGVkIHdpdGggYElQUFJPVE9fU01DYC4gTGV0IG1lIGRvdWJsZS1jaGVjayBgc21jX2luZXRfcHJvdGAsIHRvIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIGNvcnJlY3QgYW5kIHRoYXQgaXQncyBoYW5kbGluZyB0aGUgdGVhcmRvd24gYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCdzIGhvdyBpdCBpcyBhbGwgY29ubmVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjk4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQyOjU1LjM2Mzk1MTM3NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0NDIyNzY5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfaW5ldF9wcm90XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2luZXQuYz0yMT1zdGF0aWMgdm9pZCBzbWNfaW5ldF9kZXN0cm95X3NvY2soc3RydWN0IHNvY2sgKnNrKTtcXG5uZXQvc21jL3NtY19pbmV0LmMtMjItXFxubmV0L3NtYy9zbWNfaW5ldC5jOjIzOnN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXRfcHJvdCA9IHtcXG5uZXQvc21jL3NtY19pbmV0LmMtMjQtXFx0Lm5hbWVcXHRcXHQ9IFxcXCJJTkVUX1NNQ1xcXCIsXFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9MzY9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc21jX2luZXRfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy01Ni1cXG5uZXQvc21jL3NtY19pbmV0LmM6NTc6c3RhdGljIHN0cnVjdCBpbmV0X3Byb3Rvc3cgc21jX2luZXRfcHJvdG9zdyA9IHtcXG5uZXQvc21jL3NtY19pbmV0LmMtNTgtXFx0LnR5cGVcXHRcXHQ9IFNPQ0tfU1RSRUFNLFxcbm5ldC9zbWMvc21jX2luZXQuYy01OS1cXHQucHJvdG9jb2xcXHQ9IElQUFJPVE9fU01DLFxcbm5ldC9zbWMvc21jX2luZXQuYzo2MDpcXHQucHJvdFxcdFxcdD0gXFx1MDAyNnNtY19pbmV0X3Byb3QsXFxubmV0L3NtYy9zbWNfaW5ldC5jLTYxLVxcdC5vcHNcXHRcXHQ9IFxcdTAwMjZzbWNfaW5ldF9zdHJlYW1fb3BzLFxcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jPTEzNT1pbnQgX19pbml0IHNtY19pbmV0X2luaXQodm9pZClcXG4tLVxcbm5ldC9zbWMvc21jX2luZXQuYy0xMzgtXFxubmV0L3NtYy9zbWNfaW5ldC5jOjEzOTpcXHRyYyA9IHByb3RvX3JlZ2lzdGVyKFxcdTAwMjZzbWNfaW5ldF9wcm90LCAxKTtcXG5uZXQvc21jL3NtY19pbmV0LmMtMTQwLVxcdGlmIChyYykge1xcbm5ldC9zbWMvc21jX2luZXQuYzoxNDE6XFx0XFx0cHJfZXJyKFxcXCIlczogcHJvdG9fcmVnaXN0ZXIgc21jX2luZXRfcHJvdCBmYWlscyB3aXRoICVkXFxcXG5cXFwiLFxcbm5ldC9zbWMvc21jX2luZXQuYy0xNDItXFx0XFx0ICAgICAgIF9fZnVuY19fLCByYyk7XFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmMtMTQ1LVxcdC8qIG5vIHJldHVybiB2YWx1ZSAqL1xcbm5ldC9zbWMvc21jX2luZXQuYzoxNDY6XFx0aW5ldF9yZWdpc3Rlcl9wcm90b3N3KFxcdTAwMjZzbWNfaW5ldF9wcm90b3N3KTtcXG5uZXQvc21jL3NtY19pbmV0LmMtMTQ3LVxcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jLTE2NC1vdXRfaW5ldDZfcHJvdDpcXG5uZXQvc21jL3NtY19pbmV0LmM6MTY1OlxcdGluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KFxcdTAwMjZzbWNfaW5ldF9wcm90b3N3KTtcXG5uZXQvc21jL3NtY19pbmV0LmM6MTY2OlxcdHByb3RvX3VucmVnaXN0ZXIoXFx1MDAyNnNtY19pbmV0X3Byb3QpO1xcbm5ldC9zbWMvc21jX2luZXQuYy0xNjctI2VuZGlmIC8qIENPTkZJR19JUFY2ICovXFxuLS1cXG5uZXQvc21jL3NtY19pbmV0LmM9MTcxPXZvaWQgc21jX2luZXRfZXhpdCh2b2lkKVxcbi0tXFxubmV0L3NtYy9zbWNfaW5ldC5jLTE3Ni0jZW5kaWYgLyogQ09ORklHX0lQVjYgKi9cXG5uZXQvc21jL3NtY19pbmV0LmM6MTc3OlxcdGluZXRfdW5yZWdpc3Rlcl9wcm90b3N3KFxcdTAwMjZzbWNfaW5ldF9wcm90b3N3KTtcXG5uZXQvc21jL3NtY19pbmV0LmM6MTc4OlxcdHByb3RvX3VucmVnaXN0ZXIoXFx1MDAyNnNtY19pbmV0X3Byb3QpO1xcbm5ldC9zbWMvc21jX2luZXQuYy0xNzktfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mjo1Ni45MDgyMDYyOTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0NDgxMzg4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBTb2NrZXQgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gY29uZmlybWluZyB0aGF0IGBzbWNfaW5ldF9wcm90YCBpcyBpbmRlZWQgdGhlIHByb3RvY29sIHN0cnVjdHVyZSB1c2VkIGZvciBzb2NrZXRzIGVtcGxveWluZyBgSVBQUk9UT19TTUNgLiBUaGF0J3MgdGhlIGZpcnN0IHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgbGV0J3Mgc2VlLi4uIHRoZSBgc21jX2luZXRfc3RyZWFtX29wc2Agc3RydWN0dXJlIGhhcyBhIGAucmVsZWFzZWAgZnVuY3Rpb24gcG9pbnRlciBzZXQgdG8gYHNtY19yZWxlYXNlYC4gVGhhdCBsb29rcyByaWdodCwgdGhhdCdzIHRoZSBleHBlY3RlZCBzdHJ1Y3R1cmUuIEhtbSwgYnV0IHdoZXJlIGlzIGBzbWNfcmVsZWFzZWAgZGVmaW5lZD8gQWgsIHllcywgaXTigJlzIGluIGBhZl9zbWMuY2AuIE9rYXksIGdvb2QuIEl0J3MgdGltZSB0byBkaXZlIGludG8gYGFmX3NtYy5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgYHNtY19yZWxlYXNlYC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NTYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MzowMC4wNTMwMjMwODVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDU2MzMwMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHNtY19yZWxlYXNlXFxcXChzdHJ1Y3Qgc29ja2V0IFxcXFwqc29ja1xcXFwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9Mjg4PXN0YXRpYyBpbnQgX19zbWNfcmVsZWFzZShzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMzI3LVxcbm5ldC9zbWMvYWZfc21jLmM6MzI4OmludCBzbWNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC9zbWMvYWZfc21jLmMtMzI5LXtcXG4tLVxcbm5ldC9zbWMvc21jLmg9NDI9dm9pZCBzbWNfcmVsZWFzZV9jYihzdHJ1Y3Qgc29jayAqc2spO1xcbm5ldC9zbWMvc21jLmgtNDMtXFxubmV0L3NtYy9zbWMuaDo0NDppbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jayk7XFxubmV0L3NtYy9zbWMuaC00NS1pbnQgc21jX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MzowMi40OTg2NjIwMzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAxMzc1MzI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFNNQyBTb2NrZXQgUmVsZWFzZSBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBgc21jX3JlbGVhc2VgIGlzLCBhcyBJIHJlY2FsbCwgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgYSBzb2NrZXQgaW4gdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgZnJhbWV3b3JrLiBUaGUgcGF0Y2ggbm90ZXMgdGVsbCBtZSBpdCdzIGFkZGluZyBhIGAuZGVzdHJveWAgZnVuY3Rpb24gcG9pbnRlciB0byBib3RoIGBzbWNfaW5ldF9wcm90YCBhbmQgYHNtY19pbmV0Nl9wcm90YC4gIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJBaCwgcmlnaHQsIGEgY2xlYW51cCBmdW5jdGlvbi5cIlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzICpob3cqIGlzIHRoaXMgYC5kZXN0cm95YCBjYWxsYmFjayBhY3R1YWxseSBpbnZva2VkPyBUaGUgcGF0Y2ggcmVmZXJlbmNlcyBgc2tfY29tbW9uX3JlbGVhc2VgLiBNeSBtZW1vcnkncyBmdXp6eSwgYnV0IEknbSBwcmV0dHkgc3VyZSBgc2tfY29tbW9uX3JlbGVhc2VgIGlzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIExpbnV4IG5ldHdvcmtpbmcgc3RhY2ssIGFuZCBpdCdzIHVzZWQgZm9yIHJlbGVhc2luZyB0aGUgY29tbW9uIHNvY2tldCBlbGVtZW50cy4gQW5kIGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCBpdCdzIGNhbGxlZCBieSB0aGUgZ2VuZXJhbCBzb2NrZXQgcmVsZWFzZSBmdW5jdGlvbiwgd2hpY2ggaGVyZSBpcyBgc21jX3JlbGVhc2VgLiBCdXQgbGV0J3MgdmVyaWZ5IHRoYXQuICBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayB0aGUgY29kZSBmb3IgYHNtY19yZWxlYXNlYCB0byBjb25maXJtIHRoaXMgc2VxdWVuY2UgYW5kIGVuc3VyZSB0aGVyZSBpc24ndCBzb21lIG90aGVyIGluZGlyZWN0IHBhdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBwb2ludCBhdCB3aGljaCBgLmRlc3Ryb3lgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIHJlbGVhc2UgcHJvY2VzcyB0byBmdWxseSBncmFzcCB0aGUgcGF0Y2gncyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTQ1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MDYuNTEyNDE4MTg0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk3OTIwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19jb21tb25fcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL2FmX3NtYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9MzM3Mz1zdGF0aWMgaW50IHNtY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTMzOTYtXFx0aWYgKHJjKSB7XFxubmV0L3NtYy9hZl9zbWMuYzozMzk3OlxcdFxcdHNrX2NvbW1vbl9yZWxlYXNlKHNrKTtcXG5uZXQvc21jL2FmX3NtYy5jLTMzOTgtXFx0XFx0c29jay1cXHUwMDNlc2sgPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MzowNi41NjM0MDYyMzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA3MzA2ODI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIFJlbGVhc2UgUHJvY2VkdXJlcyoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYHNrX2NvbW1vbl9yZWxlYXNlYCB3YXMgZGlyZWN0bHkgY2FsbGVkIGJ5IGBzbWNfcmVsZWFzZWAsIGJ1dCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgY29ubmVjdGlvbi4gTGV0J3Mgbm90IGFzc3VtZSBhbnl0aGluZyBoZXJlLCBsZXQncyBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBfX3NtY19yZWxlYXNlYCBhbmQgc2VlIGhvdyB0aGUgZnVuY3Rpb25zIGludGVyYWN0LiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbCBzdGFjay4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCBiZWZvcmUgbWFraW5nIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmVsZWFzZSBwcm9jZWR1cmUuIFRoZXJlIG1pZ2h0IGJlIHNvbWUgc3VidGxlIGRpZmZlcmVuY2VzIGZyb20gd2hhdCBJIGluaXRpYWxseSB1bmRlcnN0b29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQzOjA5LjYzNjQ3ODQzNloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTI4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zbWNfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL2FmX3NtYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvYWZfc21jLmM9Mjc5PXN0YXRpYyB2b2lkIHNtY19yZXN0b3JlX2ZhbGxiYWNrX2NoYW5nZXMoc3RydWN0IHNtY19zb2NrICpzbWMpXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTI4Ny1cXG5uZXQvc21jL2FmX3NtYy5jOjI4ODpzdGF0aWMgaW50IF9fc21jX3JlbGVhc2Uoc3RydWN0IHNtY19zb2NrICpzbWMpXFxubmV0L3NtYy9hZl9zbWMuYy0yODkte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0zMjg9aW50IHNtY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuLS1cXG5uZXQvc21jL2FmX3NtYy5jLTM2MC1cXG5uZXQvc21jL2FmX3NtYy5jOjM2MTpcXHRyYyA9IF9fc21jX3JlbGVhc2Uoc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTM2Mi1cXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MTg1Nz12b2lkIHNtY19jbG9zZV9ub25fYWNjZXB0ZWQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0xODY1LVxcdFxcdFdSSVRFX09OQ0Uoc2stXFx1MDAzZXNrX2xpbmdlcnRpbWUsIFNNQ19NQVhfU1RSRUFNX1dBSVRfVElNRU9VVCk7XFxubmV0L3NtYy9hZl9zbWMuYzoxODY2OlxcdF9fc21jX3JlbGVhc2Uoc21jKTtcXG5uZXQvc21jL2FmX3NtYy5jLTE4NjctXFx0cmVsZWFzZV9zb2NrKHNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MDkuNjgyODI2MTE0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODc1NjUwODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyB5b3VyIHN1bW1hcnk6XG5cbioqRGVjb25zdHJ1Y3RpbmcgU29ja2V0IERlc3RydWN0aW9uOiBBIERlZXAgRGl2ZSBpbnRvIGBfX3NtY19yZWxlYXNlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc29ja2V0IGlzIGJlaW5nIGRlbW9saXNoZWQuIFRoaXMgbWVhbnMgY3JhY2tpbmcgb3BlbiB0aGUgYF9fc21jX3JlbGVhc2VgIGZ1bmN0aW9uIGFuZCBnZXR0aW5nIGRvd24gdG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBpdHMgaW5uZXIgd29ya2luZ3MuIEkgbmVlZCB0byBvYnNlcnZlIGl0cyBwcmVjaXNlIHN0ZXBzIGluIHRlYXJpbmcgZG93biB0aGUgY29ubmVjdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBtZW1vcnkgZGVhbGxvY2F0aW9uLCBjb25uZWN0aW9uIHRlcm1pbmF0aW9uIHNlcXVlbmNlcywgc3RhdGUgcmVzZXRzLCByZXNvdXJjZSBjbGVhbnVwLCBhbmQgYW55dGhpbmcgZWxzZSB0aGF0IG1pZ2h0IGNvbnRyaWJ1dGUgdG8gYSBjb21wbGV0ZSBhbmQgY2xlYW4gc2h1dGRvd24uIEknbGwgbG9vayBmb3IgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgcG90ZW50aWFsIGZvciBvcnBoYW5lZCBkYXRhIG9yIHBlbmRpbmcgb3BlcmF0aW9ucy4gSSBleHBlY3QgdGhpcyB3aWxsIGJlIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhbmQgYSB0aG9yb3VnaCBhbmFseXNpcyBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgY2xhcmlmeSB0aGUgc29ja2V0J3MgbGlmZWN5Y2xlIGR1cmluZyBpdHMgZmluYWwgbW9tZW50cy4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIHBpY3R1cmUgb2YgdGhpcyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAyMCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQzOjEyLjY3MDM5NDA2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9hZl9zbWMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODg6XFx0c3RhdGljIGludCBfX3NtY19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbiAyODk6XFx0e1xcbiAyOTA6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gXFx1MDAyNnNtYy1cXHUwMDNlc2s7XFxuIDI5MTpcXHRcXHRpbnQgcmMgPSAwO1xcbiAyOTI6XFx0XFxuIDI5MzpcXHRcXHRpZiAoIXNtYy1cXHUwMDNldXNlX2ZhbGxiYWNrKSB7XFxuIDI5NDpcXHRcXHRcXHRyYyA9IHNtY19jbG9zZV9hY3RpdmUoc21jKTtcXG4gMjk1OlxcdFxcdFxcdHNtY19zb2NrX3NldF9mbGFnKHNrLCBTT0NLX0RFQUQpO1xcbiAyOTY6XFx0XFx0XFx0c2stXFx1MDAzZXNrX3NodXRkb3duIHw9IFNIVVRET1dOX01BU0s7XFxuIDI5NzpcXHRcXHR9IGVsc2Uge1xcbiAyOTg6XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBTTUNfQ0xPU0VEKSB7XFxuIDI5OTpcXHRcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFNNQ19MSVNURU4gXFx1MDAyNlxcdTAwMjZcXG4gMzAwOlxcdFxcdFxcdFxcdCAgICBzay1cXHUwMDNlc2tfc3RhdGUgIT0gU01DX0lOSVQpXFxuIDMwMTpcXHRcXHRcXHRcXHRcXHRzb2NrX3B1dChzayk7IC8qIHBhc3NpdmUgY2xvc2luZyAqL1xcbiAzMDI6XFx0XFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBTTUNfTElTVEVOKSB7XFxuIDMwMzpcXHRcXHRcXHRcXHRcXHQvKiB3YWtlIHVwIGNsY3NvY2sgYWNjZXB0ICovXFxuIDMwNDpcXHRcXHRcXHRcXHRcXHRyYyA9IGtlcm5lbF9zb2NrX3NodXRkb3duKHNtYy1cXHUwMDNlY2xjc29jayxcXG4gMzA1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgU0hVVF9SRFdSKTtcXG4gMzA2OlxcdFxcdFxcdFxcdH1cXG4gMzA3OlxcdFxcdFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IFNNQ19DTE9TRUQ7XFxuIDMwODpcXHRcXHRcXHRcXHRzay1cXHUwMDNlc2tfc3RhdGVfY2hhbmdlKHNrKTtcXG4gMzA5OlxcdFxcdFxcdH1cXG4gMzEwOlxcdFxcdFxcdHNtY19yZXN0b3JlX2ZhbGxiYWNrX2NoYW5nZXMoc21jKTtcXG4gMzExOlxcdFxcdH1cXG4gMzEyOlxcdFxcbiAzMTM6XFx0XFx0c2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZXVuaGFzaChzayk7XFxuIDMxNDpcXHRcXG4gMzE1OlxcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgPT0gU01DX0NMT1NFRCkge1xcbiAzMTY6XFx0XFx0XFx0aWYgKHNtYy1cXHUwMDNlY2xjc29jaykge1xcbiAzMTc6XFx0XFx0XFx0XFx0cmVsZWFzZV9zb2NrKHNrKTtcXG4gMzE4OlxcdFxcdFxcdFxcdHNtY19jbGNzb2NrX3JlbGVhc2Uoc21jKTtcXG4gMzE5OlxcdFxcdFxcdFxcdGxvY2tfc29jayhzayk7XFxuIDMyMDpcXHRcXHRcXHR9XFxuIDMyMTpcXHRcXHRcXHRpZiAoIXNtYy1cXHUwMDNldXNlX2ZhbGxiYWNrKVxcbiAzMjI6XFx0XFx0XFx0XFx0c21jX2Nvbm5fZnJlZShcXHUwMDI2c21jLVxcdTAwM2Vjb25uKTtcXG4gMzIzOlxcdFxcdH1cXG4gMzI0OlxcdFxcbiAzMjU6XFx0XFx0cmV0dXJuIHJjO1xcbiAzMjY6XFx0fVxcbiAzMjc6XFx0XFxuIDMyODpcXHRpbnQgc21jX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4gMzI5OlxcdHtcXG4gMzMwOlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXFx1MDAzZXNrO1xcbiAzMzE6XFx0XFx0c3RydWN0IHNtY19zb2NrICpzbWM7XFxuIDMzMjpcXHRcXHRpbnQgb2xkX3N0YXRlLCByYyA9IDA7XFxuIDMzMzpcXHRcXG4gMzM0OlxcdFxcdGlmICghc2spXFxuIDMzNTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gMzM2OlxcdFxcbiAzMzc6XFx0XFx0c29ja19ob2xkKHNrKTsgLyogc29ja19wdXQgYmVsb3cgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MTIuNjcwNTYxMDQyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjMxODIzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTUMgU29ja2V0IFJlbGVhc2UgTWVjaGFuaXNtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgX19zbWNfcmVsZWFzZWAgZnVuY3Rpb24gYW5kIGl0J3MgY2FsbGluZyBgc2stXHUwMDNlc2tfcHJvdC1cdTAwM2V1bmhhc2goc2spYCBhbmQgYWxzbyBgc21jX2NsY3NvY2tfcmVsZWFzZShzbWMpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYC5kZXN0cm95YCBtZXRob2QgaW50byBgc21jX2luZXRfcHJvdGAgYW5kIGBzbWNfaW5ldDZfcHJvdGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBfX3NtY19yZWxlYXNlYCBldmVuICp1c2VzKiB0aG9zZSBpbmV0IHByb3RvY29scy5cblxuSGFuZyBvbi4gYF9fc21jX3JlbGVhc2VgIGlzIGFjdHVhbGx5IHVzZWQgZm9yIGBzbWNfcHJvdG9gIGFuZCBgc21jX3Byb3RvNmAsIHdoaWNoIGFyZSBmb3IgYEFGX1NNQ2Agc29ja2V0cy4gVGhhdCBtYWtlcyBzZW5zZS4gQnV0IHRoZSBgc21jX2luZXRfcHJvdGAgcHJvdG9jb2xzIGFyZSB1c2VkIGZvciBgSVBQUk9UT19TTUNgIHdpdGhpbiBgQUZfSU5FVGAgYW5kIGBBRl9JTkVUNmAuIE9rYXksIHNvIGBfX3NtY19yZWxlYXNlYCBpc24ndCBkaXJlY3RseSByZWxhdGVkIHRvIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZyB3aXRoIHRob3NlIHNwZWNpZmljIGluZXQgcHJvdG9jb2xzLlxuXG5UbyBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIHByb3RvY29scyBhbmQgaG93IHRoZXkncmUgcmVsZWFzZWQgSSdsbCBjaGVjayBgc21jX2luZXRfcHJvdGAgaW4gYG5ldC9zbWMvc21jX2luZXQuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTgyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MTcuNzkzNzQ2MDU2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL3NtY19pbmV0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjM6XFx0c3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0ge1xcbiAgMjQ6XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJJTkVUX1NNQ1xcXCIsXFxuICAyNTpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAgMjY6XFx0XFx0LmluaXRcXHRcXHQ9IHNtY19pbmV0X2luaXRfc29jayxcXG4gIDI3OlxcdFxcdC5kZXN0cm95XFx0PSBzbWNfaW5ldF9kZXN0cm95X3NvY2ssXFxuICAyODpcXHRcXHQuaGFzaFxcdFxcdD0gc21jX2hhc2hfc2ssXFxuICAyOTpcXHRcXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbiAgMzA6XFx0XFx0LnJlbGVhc2VfY2JcXHQ9IHNtY19yZWxlYXNlX2NiLFxcbiAgMzE6XFx0XFx0Lm9ial9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHNtY19zb2NrKSxcXG4gIDMyOlxcdFxcdC5oLnNtY19oYXNoXFx0PSBcXHUwMDI2c21jX3Y0X2hhc2hpbmZvLFxcbiAgMzM6XFx0XFx0LnNsYWJfZmxhZ3NcXHQ9IFNMQUJfVFlQRVNBRkVfQllfUkNVLFxcbiAgMzQ6XFx0fTtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc21jX2luZXRfc3RyZWFtX29wcyA9IHtcXG4gIDM3OlxcdFxcdC5mYW1pbHlcXHRcXHQ9IFBGX0lORVQsXFxuICAzODpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAgMzk6XFx0XFx0LnJlbGVhc2VcXHQ9IHNtY19yZWxlYXNlLFxcbiAgNDA6XFx0XFx0LmJpbmRcXHRcXHQ9IHNtY19iaW5kLFxcbiAgNDE6XFx0XFx0LmNvbm5lY3RcXHQ9IHNtY19jb25uZWN0LFxcbiAgNDI6XFx0XFx0LnNvY2tldHBhaXJcXHQ9IHNvY2tfbm9fc29ja2V0cGFpcixcXG4gIDQzOlxcdFxcdC5hY2NlcHRcXHRcXHQ9IHNtY19hY2NlcHQsXFxuICA0NDpcXHRcXHQuZ2V0bmFtZVxcdD0gc21jX2dldG5hbWUsXFxuICA0NTpcXHRcXHQucG9sbFxcdFxcdD0gc21jX3BvbGwsXFxuICA0NjpcXHRcXHQuaW9jdGxcXHRcXHQ9IHNtY19pb2N0bCxcXG4gIDQ3OlxcdFxcdC5saXN0ZW5cXHRcXHQ9IHNtY19saXN0ZW4sXFxuICA0ODpcXHRcXHQuc2h1dGRvd25cXHQ9IHNtY19zaHV0ZG93bixcXG4gIDQ5OlxcdFxcdC5zZXRzb2Nrb3B0XFx0PSBzbWNfc2V0c29ja29wdCxcXG4gIDUwOlxcdFxcdC5nZXRzb2Nrb3B0XFx0PSBzbWNfZ2V0c29ja29wdCxcXG4gIDUxOlxcdFxcdC5zZW5kbXNnXFx0PSBzbWNfc2VuZG1zZyxcXG4gIDUyOlxcdFxcdC5yZWN2bXNnXFx0PSBzbWNfcmVjdm1zZyxcXG4gIDUzOlxcdFxcdC5tbWFwXFx0XFx0PSBzb2NrX25vX21tYXAsXFxuICA1NDpcXHRcXHQuc3BsaWNlX3JlYWRcXHQ9IHNtY19zcGxpY2VfcmVhZCxcXG4gIDU1OlxcdH07XFxuICA1NjpcXHRcXG4gIDU3OlxcdHN0YXRpYyBzdHJ1Y3QgaW5ldF9wcm90b3N3IHNtY19pbmV0X3Byb3Rvc3cgPSB7XFxuICA1ODpcXHRcXHQudHlwZVxcdFxcdD0gU09DS19TVFJFQU0sXFxuICA1OTpcXHRcXHQucHJvdG9jb2xcXHQ9IElQUFJPVE9fU01DLFxcbiAgNjA6XFx0XFx0LnByb3RcXHRcXHQ9IFxcdTAwMjZzbWNfaW5ldF9wcm90LFxcbiAgNjE6XFx0XFx0Lm9wc1xcdFxcdD0gXFx1MDAyNnNtY19pbmV0X3N0cmVhbV9vcHMsXFxuICA2MjpcXHR9O1xcbiAgNjM6XFx0XFxuICA2NDpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gIDY1OlxcdHN0cnVjdCBzbWM2X3NvY2sge1xcbiAgNjY6XFx0XFx0c3RydWN0IHNtY19zb2NrXFx0XFx0c21jO1xcbiAgNjc6XFx0XFx0c3RydWN0IGlwdjZfcGluZm9cXHRpbmV0NjtcXG4gIDY4OlxcdH07XFxuICA2OTpcXHRcXG4gIDcwOlxcdHN0YXRpYyBzdHJ1Y3QgcHJvdG8gc21jX2luZXQ2X3Byb3QgPSB7XFxuICA3MTpcXHRcXHQubmFtZVxcdFxcdD0gXFxcIklORVQ2X1NNQ1xcXCIsXFxuICA3MjpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MzoxNy43OTM4NTgzNDZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk5MzE0NzM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU01DIFNvY2tldCBSZWxlYXNlIFByb2Nlc3MqKlxuXG5Pa2F5LCBsZXQgbWUgdHJhY2UgdGhpcyBgc21jX2luZXRfc3RyZWFtX29wcy5yZWxlYXNlYCBmdW5jdGlvbi4gQWgsIGl0J3MganVzdCBhIHBvaW50ZXIgdG8gYHNtY19yZWxlYXNlYC4gVGhhdCdzIGdvb2Q7IGtlZXBzIGl0IGNsZWFuLiBTbywgYHNtY19yZWxlYXNlYCBpcyB0aGUgaGVhcnQgb2YgdGhlIHNvY2tldCBjbG9zdXJlLiBJdCBtZWFucyB0aGlzIGlzIHdoYXQgZ2V0cyBjYWxsZWQgd2hlbiBhIGNvbm5lY3Rpb24gaXMgdGVybWluYXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGhlcmUuIFJpZ2h0LCBgc21jX3JlbGVhc2VgIGNhbGxzIGBfX3NtY19yZWxlYXNlYCwgd2hpY2ggaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuIFdpdGhpbiBgX19zbWNfcmVsZWFzZWAgSSBzZWUgYHNrLVx1MDAzZXNrX3Byb3QtXHUwMDNldW5oYXNoKHNrKWAg4oCTIHRoYXQncyBleHBlY3RlZCwgdW5saW5raW5nIHRoZSBzb2NrZXQgZnJvbSB0aGUgbmV0d29yayBoYXNoIHRhYmxlIOKAkyBhbmQgYHNtY19jbGNzb2NrX3JlbGVhc2Uoc21jKWAsIHdoaWNoIEknbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSBtb3JlIHRob3JvdWdobHkuXG5cbkJ1dCBob2xkIG9uLCBgc21jX3JlbGVhc2VgICphbHNvKiBjYWxscyBgc29ja19wdXQoc2spYC4gVGhhdCdzIHdoZXJlIHRoZSByZWZlcmVuY2UgY291bnRpbmcgY29tZXMgaW4uIFdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgc29ja2V0LCBgc2tgLCBkcm9wcyB0byB6ZXJvLCBgc2tfZnJlZWAgaXMgdHJpZ2dlcmVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gb24gdGhlIHJpZ2h0IHBhdGguIE5vdywgSSB0aG91Z2h0IGl0IHdhcyBgc2tfY29tbW9uX3JlbGVhc2VgIGNhbGxpbmcgYHNrX3Byb3QtXHUwMDNlZGVzdHJveShzaylgIGJ1dCBgc2tfZGVzdHJ1Y3RgIGNhbGxzIGBza19wcm90LVx1MDAzZWRlc3Ryb3lgLiBJdCdzIGFsbCBjb25uZWN0ZWQuIExldCBtZSBqdXN0IGNvbmZpcm0gZXhhY3RseSBob3cgYHNrX2NvbW1vbl9yZWxlYXNlYCBmdW5jdGlvbnMgdG8gcHJvdmlkZSBhIGZpcm0gdW5kZXJzdGFuZGluZy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb24gbm93IHRvIGJlIHN1cmUgSSBhbSB0cmFjaW5nIHRoaXMgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjUyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MjIuNzg3MDA4NzA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTgyODkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19jb21tb25fcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9zb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29jay5jPTQwMzU9RVhQT1JUX1NZTUJPTChzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0KTtcXG5uZXQvY29yZS9zb2NrLmMtNDAzNi1cXG5uZXQvY29yZS9zb2NrLmM6NDAzNzp2b2lkIHNrX2NvbW1vbl9yZWxlYXNlKHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY29yZS9zb2NrLmMtNDAzOC17XFxuLS1cXG5uZXQvY29yZS9zb2NrLmMtNDA0Mi1cXHQvKlxcbm5ldC9jb3JlL3NvY2suYzo0MDQzOlxcdCAqIE9ic2VydmF0aW9uOiB3aGVuIHNrX2NvbW1vbl9yZWxlYXNlIGlzIGNhbGxlZCwgcHJvY2Vzc2VzIGhhdmVcXG5uZXQvY29yZS9zb2NrLmMtNDA0NC1cXHQgKiBubyBhY2Nlc3MgdG8gc29ja2V0LiBCdXQgbmV0IHN0aWxsIGhhcy5cXG4tLVxcbm5ldC9jb3JlL3NvY2suYy00MDY5LX1cXG5uZXQvY29yZS9zb2NrLmM6NDA3MDpFWFBPUlRfU1lNQk9MKHNrX2NvbW1vbl9yZWxlYXNlKTtcXG5uZXQvY29yZS9zb2NrLmMtNDA3MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MjIuODM2ODQxNTU0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTIzNjM0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byBgc2tfY29tbW9uX3JlbGVhc2VgKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYHNrX2NvbW1vbl9yZWxlYXNlYC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgY2hhbmdlZCBhbmQgd2hhdCdzIGluY2x1ZGVkIGhlcmUuIEdpdmVuIGl0cyBuYW1lLCBcImNvbW1vbiByZWxlYXNlLFwiIEknbSBleHBlY3RpbmcgYSBjb2xsZWN0aW9uIG9mIGZvdW5kYXRpb25hbCBvciBzaGFyZWQgY29tcG9uZW50cy4gVGhpcyBjb3VsZCBiZSBhbnl0aGluZyBmcm9tIGNvcmUgbGlicmFyaWVzIGFuZCB1dGlsaXR5IGZ1bmN0aW9ucyB0byBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gZmlsZXMgb3IgZXZlbiBzb21lIGVzc2VudGlhbCB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLiBLbm93aW5nIHRoaXMgcmVsZWFzZSBpcyBcImNvbW1vblwiIGl0IGlzIGxpa2VseSBhIHNvdXJjZSBvZiBkZXBlbmRlbmN5IGZvciBtdWx0aXBsZSBvdGhlciBwcm9qZWN0cywgbWFraW5nIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgY2hhbmdlcyBjcml0aWNhbC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHRhcmdldCBhdWRpZW5jZSBhbmQgd2hhdCBhcmVhcyBpdCBpcyBhZmZlY3Rpbmcgc28gSSBhbSBub3QgbWlzc2luZyBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgZXhhY3RseSB3aGF0J3MgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTk5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MjYuNzI5MjA4ODRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NvY2suY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDM3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MDM3OlxcdHZvaWQgc2tfY29tbW9uX3JlbGVhc2Uoc3RydWN0IHNvY2sgKnNrKVxcbjQwMzg6XFx0e1xcbjQwMzk6XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19wcm90LVxcdTAwM2VkZXN0cm95KVxcbjQwNDA6XFx0XFx0XFx0c2stXFx1MDAzZXNrX3Byb3QtXFx1MDAzZWRlc3Ryb3koc2spO1xcbjQwNDE6XFx0XFxuNDA0MjpcXHRcXHQvKlxcbjQwNDM6XFx0XFx0ICogT2JzZXJ2YXRpb246IHdoZW4gc2tfY29tbW9uX3JlbGVhc2UgaXMgY2FsbGVkLCBwcm9jZXNzZXMgaGF2ZVxcbjQwNDQ6XFx0XFx0ICogbm8gYWNjZXNzIHRvIHNvY2tldC4gQnV0IG5ldCBzdGlsbCBoYXMuXFxuNDA0NTpcXHRcXHQgKiBTdGVwIG9uZSwgZGV0YWNoIGl0IGZyb20gbmV0d29ya2luZzpcXG40MDQ2OlxcdFxcdCAqXFxuNDA0NzpcXHRcXHQgKiBBLiBSZW1vdmUgZnJvbSBoYXNoIHRhYmxlcy5cXG40MDQ4OlxcdFxcdCAqL1xcbjQwNDk6XFx0XFxuNDA1MDpcXHRcXHRzay1cXHUwMDNlc2tfcHJvdC1cXHUwMDNldW5oYXNoKHNrKTtcXG40MDUxOlxcdFxcbjQwNTI6XFx0XFx0LypcXG40MDUzOlxcdFxcdCAqIEluIHRoaXMgcG9pbnQgc29ja2V0IGNhbm5vdCByZWNlaXZlIG5ldyBwYWNrZXRzLCBidXQgaXQgaXMgcG9zc2libGVcXG40MDU0OlxcdFxcdCAqIHRoYXQgc29tZSBwYWNrZXRzIGFyZSBpbiBmbGlnaHQgYmVjYXVzZSBzb21lIENQVSBydW5zIHJlY2VpdmVyIGFuZFxcbjQwNTU6XFx0XFx0ICogZGlkIGhhc2ggdGFibGUgbG9va3VwIGJlZm9yZSB3ZSB1bmhhc2hlZCBzb2NrZXQuIFRoZXkgd2lsbCBhY2hpZXZlXFxuNDA1NjpcXHRcXHQgKiByZWNlaXZlIHF1ZXVlIGFuZCB3aWxsIGJlIHB1cmdlZCBieSBzb2NrZXQgZGVzdHJ1Y3Rvci5cXG40MDU3OlxcdFxcdCAqXFxuNDA1ODpcXHRcXHQgKiBBbHNvIHdlIHN0aWxsIGhhdmUgcGFja2V0cyBwZW5kaW5nIG9uIHJlY2VpdmUgcXVldWUgYW5kIHByb2JhYmx5LFxcbjQwNTk6XFx0XFx0ICogb3VyIG93biBwYWNrZXRzIHdhaXRpbmcgaW4gZGV2aWNlIHF1ZXVlcy4gc29ja19kZXN0cm95IHdpbGwgZHJhaW5cXG40MDYwOlxcdFxcdCAqIHJlY2VpdmUgcXVldWUsIGJ1dCB0cmFuc21pdHRlZCBwYWNrZXRzIHdpbGwgZGVsYXkgc29ja2V0IGRlc3RydWN0aW9uXFxuNDA2MTpcXHRcXHQgKiB1bnRpbCB0aGUgbGFzdCByZWZlcmVuY2Ugd2lsbCBiZSByZWxlYXNlZC5cXG40MDYyOlxcdFxcdCAqL1xcbjQwNjM6XFx0XFxuNDA2NDpcXHRcXHRzb2NrX29ycGhhbihzayk7XFxuNDA2NTpcXHRcXG40MDY2OlxcdFxcdHhmcm1fc2tfZnJlZV9wb2xpY3koc2spO1xcbjQwNjc6XFx0XFxuNDA2ODpcXHRcXHRzb2NrX3B1dChzayk7XFxuNDA2OTpcXHR9XFxuNDA3MDpcXHRFWFBPUlRfU1lNQk9MKHNrX2NvbW1vbl9yZWxlYXNlKTtcXG40MDcxOlxcdFxcbjQwNzI6XFx0dm9pZCBza19nZXRfbWVtaW5mbyhjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHUzMiAqbWVtKVxcbjQwNzM6XFx0e1xcbjQwNzQ6XFx0XFx0bWVtc2V0KG1lbSwgMCwgc2l6ZW9mKCptZW0pICogU0tfTUVNSU5GT19WQVJTKTtcXG40MDc1OlxcdFxcbjQwNzY6XFx0XFx0bWVtW1NLX01FTUlORk9fUk1FTV9BTExPQ10gPSBza19ybWVtX2FsbG9jX2dldChzayk7XFxuNDA3NzpcXHRcXHRtZW1bU0tfTUVNSU5GT19SQ1ZCVUZdID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19yY3ZidWYpO1xcbjQwNzg6XFx0XFx0bWVtW1NLX01FTUlORk9fV01FTV9BTExPQ10gPSBza193bWVtX2FsbG9jX2dldChzayk7XFxuNDA3OTpcXHRcXHRtZW1bU0tfTUVNSU5GT19TTkRCVUZdID0gUkVBRF9PTkNFKHNrLVxcdTAwM2Vza19zbmRidWYpO1xcbjQwODA6XFx0XFx0bWVtW1NLX01FTUlORk9fRldEX0FMTE9DXSA9IFJFQURfT05DRShzay1cXHUwMDNlc2tfZm9yd2FyZF9hbGxvYyk7XFxuNDA4MTpcXHRcXHRtZW1bU0tfTUVNSU5GT19XTUVNX1FVRVVFRF0gPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX3dtZW1fcXVldWVkKTtcXG40MDgyOlxcdFxcdG1lbVtTS19NRU1JTkZPX09QVE1FTV0gPSBhdG9taWNfcmVhZChcXHUwMDI2c2stXFx1MDAzZXNrX29tZW1fYWxsb2MpO1xcbjQwODM6XFx0XFx0bWVtW1NLX01FTUlORk9fQkFDS0xPR10gPSBSRUFEX09OQ0Uoc2stXFx1MDAzZXNrX2JhY2tsb2cubGVuKTtcXG40MDg0OlxcdFxcdG1lbVtTS19NRU1JTkZPX0RST1BTXSA9IHNrX2Ryb3BzX3JlYWQoc2spO1xcbjQwODU6XFx0fVxcbjQwODY6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQzOjI2LjcyOTM5NTE4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNjg5MzgxNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmFjZSBDb25kaXRpb24gRml4IGluIFNNQyBTb2NrZXQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgYnJhaW4gZ29lcyB0byB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzLiBgc2tfY29tbW9uX3JlbGVhc2VgIGNhbGxzIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZWRlc3Ryb3koc2spYCB0aGVuIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzaylgLiBUaGlzIHBhdGNoIGFkZHMgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AsIHdoaWNoLCBjcnVjaWFsbHksIGNhbGxzIGBzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzaylgICpiZWZvcmUqIGBzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpYC4gVGhlIGNvbW1lbnQgaXMga2V5IGhlcmUuIEl0J3MgaGlnaGxpZ2h0aW5nIGEgcG90ZW50aWFsIHJhY2UuIGBzbWNfZGlhZ2AgY2FuIGR1bXAgZGF0YSB0aGF0IGRlcmVmZXJlbmNlcyBgc21jLVx1MDAzZWNsY3NvY2tgIHdpdGhvdXQgdGhlIGBjbGNzb2NrX3JlbGVhc2VfbG9ja2AsIHdoaWxlIHRoZSBzdGFuZGFyZCBgc2tfY29tbW9uX3JlbGVhc2UoKWAgZGVzdHJveXMgdGhpbmdzIGluIHRoZSB3cm9uZyBvcmRlciAoLmRlc3Ryb3kgYmVmb3JlIC51bmhhc2gpLlxuXG5UaGlzIG5ldyBvcmRlcmluZywgdW5oYXNoaW5nICpiZWZvcmUqIGFueSB0ZWFyZG93biwgaXMgZGVzaWduZWQgdG8gcHJldmVudCBhIGR1bXAgZnJvbSBvYnNlcnZpbmcgdGhlIHNvY2tldCBiZWluZyBmcmVlZC4gVGhlIHNlY29uZCB1bmhhc2ggaXMsIG9mIGNvdXJzZSwgYSBuby1vcCwgYnV0IGl0J3MgdGhlIGZpcnN0IG9uZSB0aGF0IG1hdHRlcnMuIFNvLCBpdCdzIGEgcmFjZSBjb25kaXRpb24gZml4LiBJIHNlZSBpdCBub3cuXG5cbkJlY2F1c2UgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AgaXMgc3RhdGljLCBJIGNhbid0IHJlYWxseSBkaWcgaW50byB0aGF0IGRpcmVjdGx5LCBidXQgaXQgbWFrZXMgbWUgY29uc2lkZXIgdGhlIHJlbGF0ZWQgZnVuY3Rpb25zOiBgc21jX3JlbGVhc2VgLCBgc21jX2NsY3NvY2tfcmVsZWFzZWAsIGBzbWNfaW5ldF9pbml0X3NvY2tgLCBhbmQsIGVzcGVjaWFsbHksIGBzbWNfZGlhZ19kdW1wYC4gV2hlcmUgaXMgdGhhdD8gQWgsIHllcywgYG5ldC9zbWMvc21jX2RpYWcuY2AuIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNtY19kaWFnX2R1bXBgIG5vdyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSB2dWxuZXJhYmlsaXR5IHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwNzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0MzozMi43OTgzMzY3NDJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjI0NTYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfZGlhZ19kdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvc21jX2RpYWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc21jL3NtY19kaWFnLmMtMjUtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjI2OnN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCB7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTI3LVxcdGludCBwb3NbMl07XFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMjktXFxubmV0L3NtYy9zbWNfZGlhZy5jOjMwOnN0YXRpYyBzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKnNtY19kdW1wX2NvbnRleHQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbm5ldC9zbWMvc21jX2RpYWcuYy0zMS17XFxubmV0L3NtYy9zbWNfZGlhZy5jOjMyOlxcdHJldHVybiAoc3RydWN0IHNtY19kaWFnX2R1bXBfY3R4ICopY2ItXFx1MDAzZWN0eDtcXG5uZXQvc21jL3NtY19kaWFnLmMtMzMtfVxcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jPTYwPXN0YXRpYyBpbnQgc21jX2RpYWdfbXNnX2F0dHJzX2ZpbGwoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTcxLVxcbm5ldC9zbWMvc21jX2RpYWcuYzo3MjpzdGF0aWMgaW50IF9fc21jX2RpYWdfZHVtcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NtYy9zbWNfZGlhZy5jLTczLVxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0xOTUtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjE5NjpzdGF0aWMgaW50IHNtY19kaWFnX2R1bXBfcHJvdG8oc3RydWN0IHByb3RvICpwcm90LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zbWMvc21jX2RpYWcuYy0xOTctXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwgaW50IHBfdHlwZSlcXG5uZXQvc21jL3NtY19kaWFnLmMtMTk4LXtcXG5uZXQvc21jL3NtY19kaWFnLmM6MTk5OlxcdHN0cnVjdCBzbWNfZGlhZ19kdW1wX2N0eCAqY2JfY3R4ID0gc21jX2R1bXBfY29udGV4dChjYik7XFxubmV0L3NtYy9zbWNfZGlhZy5jLTIwMC1cXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMTYtXFx0XFx0XFx0Z290byBuZXh0O1xcbm5ldC9zbWMvc21jX2RpYWcuYzoyMTc6XFx0XFx0cmMgPSBfX3NtY19kaWFnX2R1bXAoc2ssIHNrYiwgY2IsIG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCksIGJjKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjE4LVxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuLS1cXG5uZXQvc21jL3NtY19kaWFnLmMtMjI5LVxcbm5ldC9zbWMvc21jX2RpYWcuYzoyMzA6c3RhdGljIGludCBzbWNfZGlhZ19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvc21jL3NtY19kaWFnLmMtMjMxLXtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYy0yMzMtXFxubmV0L3NtYy9zbWNfZGlhZy5jOjIzNDpcXHRyYyA9IHNtY19kaWFnX2R1bXBfcHJvdG8oXFx1MDAyNnNtY19wcm90bywgc2tiLCBjYiwgU01DUFJPVE9fU01DKTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjM1LVxcdGlmICghcmMpXFxubmV0L3NtYy9zbWNfZGlhZy5jOjIzNjpcXHRcXHRzbWNfZGlhZ19kdW1wX3Byb3RvKFxcdTAwMjZzbWNfcHJvdG82LCBza2IsIGNiLCBTTUNQUk9UT19TTUM2KTtcXG5uZXQvc21jL3NtY19kaWFnLmMtMjM3LVxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4tLVxcbm5ldC9zbWMvc21jX2RpYWcuYz0yNDA9c3RhdGljIGludCBzbWNfZGlhZ19oYW5kbGVyX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpoKVxcbi0tXFxubmV0L3NtYy9zbWNfZGlhZy5jLTI0Ny1cXHRcXHRcXHRzdHJ1Y3QgbmV0bGlua19kdW1wX2NvbnRyb2wgYyA9IHtcXG5uZXQvc21jL3NtY19kaWFnLmM6MjQ4OlxcdFxcdFxcdFxcdC5kdW1wID0gc21jX2RpYWdfZHVtcCxcXG5uZXQvc21jL3NtY19kaWFnLmMtMjQ5LVxcdFxcdFxcdFxcdC5taW5fZHVtcF9hbGxvYyA9IFNLQl9XSVRIX09WRVJIRUFEKDMyNzY4KSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MzMuMjM0NTkxMDk3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDQyODA0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgY29uZmlncyBlbmFibGVkLiBJdCBsb29rcyBsaWtlIEknbSBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgYm90aCBgU01DYCBhbmQgYFNNQ19ESUFHYC4gQnV0IGhhbmcgb24gYSBzZWNvbmQuLi4gd2hlbiBJIGxvb2sgYXQgd2hhdCBgc21jX2RpYWdfZHVtcGAgYWN0dWFsbHkgKmR1bXBzKiwgaXQncyBsaXN0aW5nIGBzbWNfcHJvdG9gIGFuZCBgc21jX3Byb3RvNmAuIFdoZXJlJ3MgYHNtY19pbmV0X3Byb3RgIGluIHRoYXQgbWl4PyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYHNtY19kaWFnX2R1bXBgIHByb2Nlc3MgYWdhaW4gdG8gZW5zdXJlIEknbSBjYXB0dXJpbmcgZXZlcnl0aGluZyByZWxldmFudC4gU29tZXRoaW5nIGZlZWxzIG9mZiwgc28gYmV0dGVyIHRvIGJlIHRob3JvdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc3OSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQzOjM2LjY3ODg3NDQ3OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL3NtY19kaWFnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjMwOlxcdHN0YXRpYyBpbnQgc21jX2RpYWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIDIzMTpcXHR7XFxuIDIzMjpcXHRcXHRpbnQgcmMgPSAwO1xcbiAyMzM6XFx0XFxuIDIzNDpcXHRcXHRyYyA9IHNtY19kaWFnX2R1bXBfcHJvdG8oXFx1MDAyNnNtY19wcm90bywgc2tiLCBjYiwgU01DUFJPVE9fU01DKTtcXG4gMjM1OlxcdFxcdGlmICghcmMpXFxuIDIzNjpcXHRcXHRcXHRzbWNfZGlhZ19kdW1wX3Byb3RvKFxcdTAwMjZzbWNfcHJvdG82LCBza2IsIGNiLCBTTUNQUk9UT19TTUM2KTtcXG4gMjM3OlxcdFxcdHJldHVybiBza2ItXFx1MDAzZWxlbjtcXG4gMjM4OlxcdH1cXG4gMjM5OlxcdFxcbiAyNDA6XFx0c3RhdGljIGludCBzbWNfZGlhZ19oYW5kbGVyX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpoKVxcbiAyNDE6XFx0e1xcbiAyNDI6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuIDI0MzpcXHRcXG4gMjQ0OlxcdFxcdGlmIChoLVxcdTAwM2VubG1zZ190eXBlID09IFNPQ0tfRElBR19CWV9GQU1JTFkgXFx1MDAyNlxcdTAwMjZcXG4gMjQ1OlxcdFxcdCAgICBoLVxcdTAwM2VubG1zZ19mbGFncyBcXHUwMDI2IE5MTV9GX0RVTVApIHtcXG4gMjQ2OlxcdFxcdFxcdHtcXG4gMjQ3OlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2R1bXBfY29udHJvbCBjID0ge1xcbiAyNDg6XFx0XFx0XFx0XFx0XFx0LmR1bXAgPSBzbWNfZGlhZ19kdW1wLFxcbiAyNDk6XFx0XFx0XFx0XFx0XFx0Lm1pbl9kdW1wX2FsbG9jID0gU0tCX1dJVEhfT1ZFUkhFQUQoMzI3NjgpLFxcbiAyNTA6XFx0XFx0XFx0XFx0fTtcXG4gMjUxOlxcdFxcdFxcdFxcdHJldHVybiBuZXRsaW5rX2R1bXBfc3RhcnQobmV0LVxcdTAwM2VkaWFnX25sc2ssIHNrYiwgaCwgXFx1MDAyNmMpO1xcbiAyNTI6XFx0XFx0XFx0fVxcbiAyNTM6XFx0XFx0fVxcbiAyNTQ6XFx0XFx0cmV0dXJuIDA7XFxuIDI1NTpcXHR9XFxuIDI1NjpcXHRcXG4gMjU3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc29ja19kaWFnX2hhbmRsZXIgc21jX2RpYWdfaGFuZGxlciA9IHtcXG4gMjU4OlxcdFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbiAyNTk6XFx0XFx0LmZhbWlseSA9IEFGX1NNQyxcXG4gMjYwOlxcdFxcdC5kdW1wID0gc21jX2RpYWdfaGFuZGxlcl9kdW1wLFxcbiAyNjE6XFx0fTtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0c3RhdGljIGludCBfX2luaXQgc21jX2RpYWdfaW5pdCh2b2lkKVxcbiAyNjQ6XFx0e1xcbiAyNjU6XFx0XFx0cmV0dXJuIHNvY2tfZGlhZ19yZWdpc3RlcihcXHUwMDI2c21jX2RpYWdfaGFuZGxlcik7XFxuIDI2NjpcXHR9XFxuIDI2NzpcXHRcXG4gMjY4OlxcdHN0YXRpYyB2b2lkIF9fZXhpdCBzbWNfZGlhZ19leGl0KHZvaWQpXFxuIDI2OTpcXHR7XFxuIDI3MDpcXHRcXHRzb2NrX2RpYWdfdW5yZWdpc3RlcihcXHUwMDI2c21jX2RpYWdfaGFuZGxlcik7XFxuIDI3MTpcXHR9XFxuIDI3MjpcXHRcXG4gMjczOlxcdG1vZHVsZV9pbml0KHNtY19kaWFnX2luaXQpO1xcbiAyNzQ6XFx0bW9kdWxlX2V4aXQoc21jX2RpYWdfZXhpdCk7XFxuIDI3NTpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIDI3NjpcXHRNT0RVTEVfREVTQ1JJUFRJT04oXFxcIlNNQyBzb2NrZXQgbW9uaXRvcmluZyB2aWEgU09DS19ESUFHXFxcIik7XFxuIDI3NzpcXHRNT0RVTEVfQUxJQVNfTkVUX1BGX1BST1RPX1RZUEUoUEZfTkVUTElOSywgTkVUTElOS19TT0NLX0RJQUcsIDQzIC8qIEFGX1NNQyAqLyk7XFxuIDI3ODpcXHRNT0RVTEVfQUxJQVNfR0VOTF9GQU1JTFkoU01DUl9HRU5MX0ZBTUlMWV9OQU1FKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6MzYuNjc4OTUzNzc4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTQ2NDA2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5IFJlZ2FyZGluZyBTTUMgRGlhZ25vc3RpY3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB3ZSdyZSBkaWFnbm9zaW5nIFNNQyBjb25uZWN0aW9ucyBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHdoYXQgd2UncmUgZHVtcGluZy4gVGhlIGBzbWNfZGlhZ19kdW1wYCB0b29s4oCmIHJpZ2h0LCBpdCBjbGVhcmx5IGNhcHR1cmVzIGRhdGEgZnJvbSBgc21jX3Byb3RvYCBhbmQgYHNtY19wcm90bzZgLiBHb29kLiBCdXQgd2FpdOKApiB3aGF0IGFib3V0IGBzbWNfaW5ldF9wcm90YD8gRG9lcyBgc21jX2RpYWdfZHVtcGAgYWN0dWFsbHkgaW5jbHVkZSB0aGF0IGluZm9ybWF0aW9uPyBObywgaXQgZG9lc24ndCBzZWVtIHRvLCB3aGljaCBpcyBhIGtleSBwb2ludCBvZiBjbGFyaWZpY2F0aW9uLlxuXG5UaGlua2luZyBpdCB0aHJvdWdoLCBgc21jX2luZXRfcHJvdGAgaXMgc3BlY2lmaWMgdG8gYElQUFJPVE9fU01DYCBzb2NrZXRzLCBhbmQgSSBuZWVkIHRvIGtub3cgaWYgd2UgYXJlIGdldHRpbmcgYSBjb21wbGV0ZSBwaWN0dXJlIHdpdGggYHNtY19kaWFnX2R1bXBgLiBTbywgdG8gYmUgdGhvcm91Z2ggYW5kIGNvcnJlY3QsIEkgc2hvdWxkIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBzcGVjaWZpY2FsbHkgYHNtY19kaWFnX2R1bXBfcHJvdG9gLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCB0aG91Z2h0cyBhYm91dCB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODI0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6NDAuODMzNTk4MTc1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvc21jX2RpYWcuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxOTYsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTY6XFx0c3RhdGljIGludCBzbWNfZGlhZ19kdW1wX3Byb3RvKHN0cnVjdCBwcm90byAqcHJvdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gMTk3OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCBwX3R5cGUpXFxuIDE5ODpcXHR7XFxuIDE5OTpcXHRcXHRzdHJ1Y3Qgc21jX2RpYWdfZHVtcF9jdHggKmNiX2N0eCA9IHNtY19kdW1wX2NvbnRleHQoY2IpO1xcbiAyMDA6XFx0XFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuIDIwMTpcXHRcXHRpbnQgc251bSA9IGNiX2N0eC1cXHUwMDNlcG9zW3BfdHlwZV07XFxuIDIwMjpcXHRcXHRzdHJ1Y3QgbmxhdHRyICpiYyA9IE5VTEw7XFxuIDIwMzpcXHRcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcXG4gMjA0OlxcdFxcdGludCByYyA9IDAsIG51bSA9IDA7XFxuIDIwNTpcXHRcXHRzdHJ1Y3Qgc29jayAqc2s7XFxuIDIwNjpcXHRcXG4gMjA3OlxcdFxcdHJlYWRfbG9jayhcXHUwMDI2cHJvdC1cXHUwMDNlaC5zbWNfaGFzaC1cXHUwMDNlbG9jayk7XFxuIDIwODpcXHRcXHRoZWFkID0gXFx1MDAyNnByb3QtXFx1MDAzZWguc21jX2hhc2gtXFx1MDAzZWh0O1xcbiAyMDk6XFx0XFx0aWYgKGhsaXN0X2VtcHR5KGhlYWQpKVxcbiAyMTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDIxMTpcXHRcXG4gMjEyOlxcdFxcdHNrX2Zvcl9lYWNoKHNrLCBoZWFkKSB7XFxuIDIxMzpcXHRcXHRcXHRpZiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpXFxuIDIxNDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMjE1OlxcdFxcdFxcdGlmIChudW0gXFx1MDAzYyBzbnVtKVxcbiAyMTY6XFx0XFx0XFx0XFx0Z290byBuZXh0O1xcbiAyMTc6XFx0XFx0XFx0cmMgPSBfX3NtY19kaWFnX2R1bXAoc2ssIHNrYiwgY2IsIG5sbXNnX2RhdGEoY2ItXFx1MDAzZW5saCksIGJjKTtcXG4gMjE4OlxcdFxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuIDIxOTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gMjIwOlxcdG5leHQ6XFxuIDIyMTpcXHRcXHRcXHRudW0rKztcXG4gMjIyOlxcdFxcdH1cXG4gMjIzOlxcdFxcbiAyMjQ6XFx0b3V0OlxcbiAyMjU6XFx0XFx0cmVhZF91bmxvY2soXFx1MDAyNnByb3QtXFx1MDAzZWguc21jX2hhc2gtXFx1MDAzZWxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mzo0MC44MzM2Nzc2NDVaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMjY4NjM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgU01DIFByb3RvY29sIEhhc2ggVGFibGUgVXNhZ2UqKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyB0aGF0IGBzbWNfcHJvdG9gIGFuZCBgc21jX3Byb3RvNmAgYXJlIGxpa2VseSBzaGFyaW5nIGEgaGFzaCB0YWJsZSB3aXRoIGBzbWNfaW5ldF9wcm90YC4gVGhhdCdzIGFuIGludGVyZXN0aW5nIGFyY2hpdGVjdHVyYWwgY2hvaWNlLiBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcCwgZXNwZWNpYWxseSBnaXZlbiB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhbmQgY29udGVudGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZS4gTXkgZ3V0IGZlZWxpbmcgaXMgaXQncyBwcm9iYWJseSBiZXN0IHRvIHZlcmlmeSB0aGUgY29kZSBkaXJlY3RseS4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IGBuZXQvc21jL2FmX3NtYy5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb25uZWN0aW9uIGFuZCBzb2NrZXQgbWFuYWdlbWVudCBmb3IgU01DLCBhbmQgU01DdjYgYXJlIHN0cnVjdHVyZWQgYW5kIHZlcmlmeSBpZiBteSBpbnR1aXRpb24gaXMgcmlnaHQuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBiZXN0IHZpZXcgb24gaWYgdGhlIGltcGxlbWVudGF0aW9uIG1ha2VzIGxvZ2ljYWwgc2Vuc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjY2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mzo0NC40NjYzNjY4MTFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zbWMvYWZfc21jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM4LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM4OlxcdHN0cnVjdCBwcm90byBzbWNfcHJvdG8gPSB7XFxuIDIzOTpcXHRcXHQubmFtZVxcdFxcdD0gXFxcIlNNQ1xcXCIsXFxuIDI0MDpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiAyNDE6XFx0XFx0LmtlZXBhbGl2ZVxcdD0gc21jX3NldF9rZWVwYWxpdmUsXFxuIDI0MjpcXHRcXHQuaGFzaFxcdFxcdD0gc21jX2hhc2hfc2ssXFxuIDI0MzpcXHRcXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbiAyNDQ6XFx0XFx0LnJlbGVhc2VfY2JcXHQ9IHNtY19yZWxlYXNlX2NiLFxcbiAyNDU6XFx0XFx0Lm9ial9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHNtY19zb2NrKSxcXG4gMjQ2OlxcdFxcdC5oLnNtY19oYXNoXFx0PSBcXHUwMDI2c21jX3Y0X2hhc2hpbmZvLFxcbiAyNDc6XFx0XFx0LnNsYWJfZmxhZ3NcXHQ9IFNMQUJfVFlQRVNBRkVfQllfUkNVLFxcbiAyNDg6XFx0fTtcXG4gMjQ5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHNtY19wcm90byk7XFxuIDI1MDpcXHRcXG4gMjUxOlxcdHN0cnVjdCBwcm90byBzbWNfcHJvdG82ID0ge1xcbiAyNTI6XFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJTTUM2XFxcIixcXG4gMjUzOlxcdFxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuIDI1NDpcXHRcXHQua2VlcGFsaXZlXFx0PSBzbWNfc2V0X2tlZXBhbGl2ZSxcXG4gMjU1OlxcdFxcdC5oYXNoXFx0XFx0PSBzbWNfaGFzaF9zayxcXG4gMjU2OlxcdFxcdC51bmhhc2hcXHRcXHQ9IHNtY191bmhhc2hfc2ssXFxuIDI1NzpcXHRcXHQucmVsZWFzZV9jYlxcdD0gc21jX3JlbGVhc2VfY2IsXFxuIDI1ODpcXHRcXHQub2JqX3NpemVcXHQ9IHNpemVvZihzdHJ1Y3Qgc21jX3NvY2spLFxcbiAyNTk6XFx0XFx0Lmguc21jX2hhc2hcXHQ9IFxcdTAwMjZzbWNfdjZfaGFzaGluZm8sXFxuIDI2MDpcXHRcXHQuc2xhYl9mbGFnc1xcdD0gU0xBQl9UWVBFU0FGRV9CWV9SQ1UsXFxuIDI2MTpcXHR9O1xcbiAyNjI6XFx0RVhQT1JUX1NZTUJPTF9HUEwoc21jX3Byb3RvNik7XFxuIDI2MzpcXHRcXG4gMjY0OlxcdHN0YXRpYyB2b2lkIHNtY19mYmFja19yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc21jX3NvY2sgKnNtYylcXG4gMjY1OlxcdHtcXG4gMjY2OlxcdFxcdHN0cnVjdCBzb2NrICpjbGNzayA9IHNtYy1cXHUwMDNlY2xjc29jay1cXHUwMDNlc2s7XFxuIDI2NzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDM6NDQuNDY2NTI2NjQxWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg4OTkwMjI0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29uY3VycmVuY3kgQnVnIGluIFNNQyBEaWFnbm9zdGljIER1bXBzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBgc21jX3Byb3RvYCBjb2RlIHV0aWxpemVzIGBzbWNfdjRfaGFzaGluZm9gLCB3aGlsZSBgc21jX3Byb3RvNmAgdXNlcyBgc21jX3Y2X2hhc2hpbmZvYC4gU2ltaWxhcmx5LCBgc21jX2luZXRfcHJvdGAgdXNlcyBgc21jX3Y0X2hhc2hpbmZvYCBhbmQgYHNtY19pbmV0Nl9wcm90YCB1c2VzIGBzbWNfdjZfaGFzaGluZm9gLiBBbmQsIGBzbWNfZGlhZ19kdW1wX3Byb3RvYCBjb3ZlcnMgYWxsIG9mIHRoZXNlLiBUaGUgY3JpdGljYWwgaXNzdWUgaXMgYSByYWNlIGNvbmRpdGlvbiB3aXRoaW4gdGhlIGRpYWdub3N0aWMgZHVtcCBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIGBzbWNfZGlhZ19kdW1wYCBpcyBkZXJlZmVyZW5jaW5nIGBzbWMtXHUwMDNlY2xjc29ja2Agd2l0aG91dCB0aGUgbmVjZXNzYXJ5IGBjbGNzb2NrX3JlbGVhc2VfbG9ja2AsIHJpZ2h0PyBUaGlzIGlzIGhhcHBlbmluZyB3aGlsZSBgc2tfY29tbW9uX3JlbGVhc2VgIGlzIGdvaW5nIHRocm91Z2ggaXRzIHN0ZXBzLCBjYWxsaW5nIHRoZSBgLmRlc3Ryb3lgIG1ldGhvZCAqYmVmb3JlKiBgLnVuaGFzaGAuXG5cblNvLCB3ZSd2ZSBnb3QgYSBzaXR1YXRpb24gd2hlcmUgdGhlIHNvY2tldCBpcyBzdGlsbCBpbiB0aGUgaGFzaCB0YWJsZSB3aGVuIGAuZGVzdHJveWAgZ2V0cyBjYWxsZWQuIFRoZSBgLmRlc3Ryb3lgIGZ1bmN0aW9uIGluIHRoaXMgY29udGV4dCBpcyBgc21jX2luZXRfZGVzdHJveV9zb2NrYCwgd2hpY2ggaXRzZWxmIGNhbGxzIGBzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpYC4gVGhpcyBgc21jX2NsY3NvY2tfcmVsZWFzZWAgZnVuY3Rpb24gaXMgd2hlcmUgdGhlIHByb2JsZW0gaXMgbW9zdCBsaWtlbHkgY29taW5nIGZyb20sIGFzIGl0IGVpdGhlciBzZXRzIGBzbWMtXHUwMDNlY2xjc29ja2AgdG8gTlVMTCBvciBmcmVlcyBpdCBjb21wbGV0ZWx5LiBUaGUgcmFjZSBpcyB0aGF0IGlmIGBzbWNfZGlhZ19kdW1wYCBydW5zIGNvbmN1cnJlbnRseSwgaXQgY291bGQgcG90ZW50aWFsbHkgc2VlIGBzbWMtXHUwMDNlY2xjc29ja2AgYmVpbmcgcmVsZWFzZWQgcmlnaHQgb3V0IGZyb20gdW5kZXIgaXQuXG5cblRoZSBpbW1lZGlhdGUgZml4IGlzIGNsZWFyOiB1bmhhc2ggdGhlIHNvY2tldCAqYmVmb3JlKiBkZXN0cm95aW5nIGl0IGluIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gc29ja2V0IHRlYXJkb3duLCBzbyBpdCdzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBgU01DYCBhbmQgYFNNQ19ESUFHYC4gTXkgZm9jdXMgbm93IHdpbGwgYmUgb24gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucywgbmFtZWx5IGBzbWNfcmVsZWFzZWAsIGBzbWNfY2xjc29ja19yZWxlYXNlYCwgYHNtY19kaWFnX2R1bXBgLCBhbmQgYHNtY19kaWFnX2R1bXBfcHJvdG9gLlxuXG5XYWl0Li4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgc29tZXRoaW5nLiBIYW5nIG9uLCBgc21jX2RpYWdfZHVtcGAgYW5kIGBzbWNfZGlhZ19oYW5kbGVyX2R1bXBgIGFyZSBib3RoIHN0YXRpYywgcmlnaHQ/IElmIHRoYXQncyB0aGUgY2FzZSwgc2hvdWxkIEkgc3RpbGwgZm9jdXMgb24gdGhlbT8gVGhlIG1vcmUgbGlrZWx5IGNhbmRpZGF0ZSBzZWVtcyB0byBiZSBgc21jX3JlbGVhc2VgIGFuZCBgc21jX2NsY3NvY2tfcmVsZWFzZWAuIFllcCwgYHNtY19yZWxlYXNlYCBhbmQgYHNtY19jbGNzb2NrX3JlbGVhc2VgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byB3YXRjaC4gSGFuZyBvbiwgd2FpdCBhIHNlY29uZC4gYHNtY19jbGNzb2NrX3JlbGVhc2VgIGlzIG5vdCBzdGF0aWMhIFBlcmZlY3QhIE5vdywgdGltZSB0byBqdXN0IGNoZWNrIGlmIGBzbWNfY2xjc29ja19yZWxlYXNlYCBpcyBleHBvcnRlZCBvciBqdXN0IGdsb2JhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0NzcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mzo1My4zNjU1NTE4NTZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODk3NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgc21jX2NsY3NvY2tfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL3NtY19jbG9zZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2Nsb3NlLmMtMjMtLyogcmVsZWFzZSB0aGUgY2xjc29jayB0aGF0IGlzIGFzc2lnbmVkIHRvIHRoZSBzbWNfc29jayAqL1xcbm5ldC9zbWMvc21jX2Nsb3NlLmM6MjQ6dm9pZCBzbWNfY2xjc29ja19yZWxlYXNlKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mzo1My40MzQ0NTc5MzNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxMDk0MjgyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNNQyBEaWFnbm9zdGljIENvbnRleHQqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGEgZ2xvYmFsIGlzc3VlLCBnb3QgaXQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgYHNtY19kaWFnX2R1bXBgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSBzdGF0aWMsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgbmFycm93aW5nIGRvd24gdGhlIHNjb3BlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8ga25vdyB0aGUgb3JpZ2luIGFuZCB1c2UuXG5cbk5leHQgc3RlcDogSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgaWYgdGhlcmUgYXJlIGFueSBleHBvcnRlZCBmdW5jdGlvbnMgd2l0aGluIGBzbWNfZGlhZy5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbmFsaXR5IHRoaXMgZmlsZSBvZmZlcnMgdG8gdGhlIHN5c3RlbSBhcyBhIHdob2xlLiBLbm93aW5nIHdoYXQncyBhdmFpbGFibGUgZm9yIG90aGVyIGNvbXBvbmVudHMgdG8gY2FsbCBpbnRvIGhlcmUgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBmbG93IGFuZCBpbXBhY3Qgb2YgYHNtY19kaWFnX2R1bXBgLiBJIG5lZWQgdG8gc2VlIGlmIHRoZXJlJ3MgYW4gaW50ZXJmYWNlIEkgY2FuIGxldmVyYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTY3NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQzOjU4Ljk0NTQwNDM3M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMDE4OTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0Mzo1OC45OTQ3MTU1NzJaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyMDg0ODI4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqQW5hbHl6aW5nIFNNQyBTb2NrZXQgSW5pdGlhbGl6YXRpb24gYW5kIFJlbGVhc2UgRnVuY3Rpb25zKipcblxuSG1tLCBubywgdGhhdCdzIG5vdCBxdWl0ZSByaWdodC4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgc21jX2luZXRfaW5pdF9zb2NrYC4gTm93LCAqdGhhdCogb25lIGlzIHN0YXRpYywgaXNuJ3QgaXQ/IExldCdzIGtlZXAgdGhhdCBpbiBtaW5kLiBPa2F5LCB3aGF0IGFib3V0IGBzbWNfaW5ldF9pbml0YD8gQWgsIHllcywgYF9faW5pdGAuIFRoYXQncyBhIGRpZmZlcmVudCBiZWFzdCBlbnRpcmVseS4gV2UnbGwgbmVlZCB0byByZW1lbWJlciBob3cgdGhhdCBpbXBhY3RzIGxpZmVjeWNsZS4gTm93IHRoZSBiaWcgcGljdHVyZS4uLiBgc21jX3JlbGVhc2VgLiBUaGF0J3MgYSBnbG9iYWwgZnVuY3Rpb24uIE5vdywgYSBsaWdodGJ1bGIuLi5pcyBgc21jX3JlbGVhc2VgIGV4cG9ydGVkLCBvciBpcyBpdCBoaWRkZW4/IFRoYXQncyB3aGF0IEkgbmVlZCB0byBkaWcgaW50by4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIHVzZSBpdCwgdG8gd29yayB3aXRoIGl0LiBMZXQncyBzZWUgaWYgdGhhdCdzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTI4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDQ6MDIuODE1NTY2NDlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDkxMjk5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipzbWNfcmVsZWFzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL2FmX3NtYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDowMi44NjIwNjYwNDhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5NTkyMTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIFNjb3BlIGFuZCBGdW5jdGlvbmFsaXR5KipcblxuQWxyaWdodCwgc28gdGhlIHZhcmlhYmxlIGluIHF1ZXN0aW9uLCB3aGF0ZXZlciBpdCBpcywgaXNuJ3QgKmV4cGxpY2l0bHkqIGV4cG9ydGVkLCBtZWFuaW5nIGl0IGxpa2VseSBpc24ndCBwYXJ0IG9mIGEgZGlyZWN0IEFQSSBleHBvc2VkIHRvIG90aGVyIG1vZHVsZXMgb3IgY29tcG9uZW50cyBpbiB0aGUgdHJhZGl0aW9uYWwgc2Vuc2UuIEhvd2V2ZXIsIHRoZSB1c2Ugb2YgdGhlIHRlcm0gXCJnbG9iYWxcIiBzdWdnZXN0cyBpdCdzIGFjY2Vzc2libGUgYW5kIHBvdGVudGlhbGx5IG1vZGlmaWFibGUgZnJvbSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbS4gVGhpcyBpbXBsaWVzIGEgc2NvcGUgY29uY2VybiwgbGlrZWx5IG5lZWRpbmcgc3BlY2lhbCBjb25zaWRlcmF0aW9uIHRvIHByb3RlY3QgYWdhaW5zdCB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvciBjb25mbGljdHMuXG5cbk15IG5leHQgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSBgc21jX2Nsb3NlX2FjdGl2ZWAuIEl0J3MgYSBrZXkgcGllY2Ugb2YgY29udGV4dHVhbCBpbmZvcm1hdGlvbi4gVGhpcyBsaWtlbHkgYSBmdW5jdGlvbiBvciBhIG1hY3JvIHdoaWNoIGNvdWxkIGJlIHVzZWQgdG8gZGlzY292ZXIgaG93IHRvIG1hbmFnZSB0aGlzIHNwZWNpZmljIGNvbXBvbmVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgXCJnbG9iYWxcIiB2YXJpYWJsZS4gSXMgaXQgdXNlZCB0byAqc2V0KiwgKnJlYWQqLCBvciAqbWFuYWdlKiB0aGlzIFwiZ2xvYmFsXCIgdmFsdWU/IEtub3dpbmcgdGhlIGludGVyYWN0aW9uIHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpcyBzZXQgYW5kIGNsZWFyZWQsIGFzIHdlbGwgYXMgaWYgdGhlcmUgYXJlIGFueSByYWNlIGNvbmRpdGlvbnMgb24gaXRzIHVzZSwgdGhhdCBtYXkgY2F1c2UgYSBtYWxmdW5jdGlvbi4gVGhhdCB3aWxsIHNoZWQgbGlnaHQgb24gaG93IHRoZSB2YXJpYWJsZSdzIHNjb3BlIGFuZCBhY2Nlc3MgYXJlICppbnRlbmRlZCogdG8gd29yaywgYW5kIGlmIGl0J3MgcGxheWluZyBuaWNlbHkgd2l0aCB0aGUgcmVzdCBvZiB0aGUgYXBwbGljYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMjI4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6NDQ6MDYuMzU3OTkwODc5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk3OTg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfY2xvc2VfYWN0aXZlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvc21jX2Nsb3NlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfY2xvc2UuYz0xMTQ9c3RhdGljIHZvaWQgc21jX2Nsb3NlX2NhbmNlbF93b3JrKHN0cnVjdCBzbWNfc29jayAqc21jKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xMjctICovXFxubmV0L3NtYy9zbWNfY2xvc2UuYzoxMjg6dm9pZCBzbWNfY2xvc2VfYWN0aXZlX2Fib3J0KHN0cnVjdCBzbWNfc29jayAqc21jKVxcbm5ldC9zbWMvc21jX2Nsb3NlLmMtMTI5LXtcXG4tLVxcbm5ldC9zbWMvc21jX2Nsb3NlLmM9MTg3PXN0YXRpYyBpbmxpbmUgYm9vbCBzbWNfY2xvc2Vfc2VudF9hbnlfY2xvc2Uoc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxcbi0tXFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xOTItXFxubmV0L3NtYy9zbWNfY2xvc2UuYzoxOTM6aW50IHNtY19jbG9zZV9hY3RpdmUoc3RydWN0IHNtY19zb2NrICpzbWMpXFxubmV0L3NtYy9zbWNfY2xvc2UuYy0xOTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDowNi40MDM5NzUwOTdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzMjk2OTE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNNQyBEaWFnbm9zdGljIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzbWNfZGlhZ2AgY29kZSBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYHNtY19jbG9zZV9hY3RpdmVgIGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiBUaGF0J3MgYSBwb3RlbnRpYWwgYXJlYSBmb3IgY29udGVudGlvbiBhbmQgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIHVzZWQgYWNyb3NzIHRoZSBzeXN0ZW0uXG5cbk15IG5leHQgc3RlcCBpcyB0byBzZWUgd2hhdCB0aGUgZGlhZ25vc3RpYyBoYW5kbGVycyBhY3R1YWxseSAqZG8qLiBJJ2xsIGNoZWNrIGBzbWNfZGlhZ19oYW5kbGVyX2R1bXBgIGFuZCBgc21jX2RpYWdfZHVtcGAuIEkgYmVsaWV2ZSB0aGV5J3JlIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIHNob3VsZCBsaW1pdCB0aGVpciB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgZm9yIGNvbmZsaWN0cywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBoYW5kbGVyIGZ1bmN0aW9ucy5cblxuRmluYWxseSwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdG8gYnVpbGQgYSBnb29kIG1lbnRhbCBtb2RlbCBvZiB0aGUgbW9kdWxlLCBJJ2xsIHNjYW4gdGhyb3VnaCBgc21jX2RpYWcuY2AgZm9yIGFueSAqb3RoZXIqIGdsb2JhbCBmdW5jdGlvbnMuIEl0J3MgZ29vZCBwcmFjdGljZSB0byBpZGVudGlmeSBhbGwgZW50cnkgcG9pbnRzIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGluIGEgY29kZSBibG9jayBlYXJseSBvbiB0byBhdm9pZCB1bnBsZWFzYW50IHN1cnByaXNlcyBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gcmVhc29uIGFib3V0IHRoaXMgY29kZSBlZmZlY3RpdmVseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI3OTEsIk91dHB1dFRva2VucyI6NjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDoxMS4zMzY5NDk2MDhaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDg3MTg5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NtYy9zbWNfZGlhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDoxMS4zODYwNDM5MjdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc0Mzk2MzQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBTTUMgU29ja2V0IFJlbGVhc2UgYW5kIERpYWdub3N0aWMgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gcmVsZWFzaW5nIGFuZCBtYW5hZ2luZyBTTUMgc29ja2V0cyBhbmQgYXNzb2NpYXRlZCBkaWFnbm9zdGljcy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgZm9jdXNpbmcgb24gYHNtY19yZWxlYXNlYCBhbmQgYHNtY19jbGNzb2NrX3JlbGVhc2VgIHdvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIHRoYXQgc2VlbXMgY29ycmVjdCwgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgdGhlIHBhdGNoLiBUaGUgcGF0Y2ggaXMgYWJvdXQgYHNtY19pbmV0X2Rlc3Ryb3lfc29ja2AsIGJ1dCBob3cgZG8gd2UgdHJpZ2dlciB0aGF0P1xuXG5BaCwgcmlnaHQsIGNyZWF0ZSBhbiBgQUZfSU5FVGAgc29ja2V0IHVzaW5nIGBJUFBST1RPX1NNQ2AgYW5kIHRoZW4gc2ltcGx5IGNsb3NlIGl0LiBUaGF0IHNob3VsZCB0cmlnZ2VyIGl0LiBUaGUgc29ja2V0IGNyZWF0aW9uIGl0c2VsZiB1c2VzIGBzbWNfaW5ldF9pbml0X3NvY2tgLCB3aGljaCBpcyBzdGF0aWMsIHNvIG5vdCBhbiBpbnRlcmVzdGluZyBlbnRyeSBwb2ludC4gQnV0IGxvb2tpbmcgZnVydGhlciwgYHNtY19pbmV0X3N0cmVhbV9vcHNgIGhhcyBgLnJlbGVhc2UgPSBzbWNfcmVsZWFzZWAsIHdoaWNoIG1lYW5zIHdoZW4gdGhlIHNvY2tldCBpcyBjbG9zZWQsIGBzbWNfcmVsZWFzZWAgZ2V0cyBjYWxsZWQsIGFuZCB0aGVuIGBza19jb21tb25fcmVsZWFzZWAgd2hlbiB0aGUgc29ja2V0IGl0c2VsZiBpcyBmcmVlZC4gYHNtY19yZWxlYXNlYCBkZWZpbml0ZWx5IGxvb2tzIGxpa2UgYSBzb2xpZCBmb2N1cyBzeW1ib2wuXG5cbkFsc28sIGBzbWNfY2xjc29ja19yZWxlYXNlYCBpcyBjYWxsZWQgZnJvbSBgc21jX2luZXRfZGVzdHJveV9zb2NrYCwgd2hpY2ggaXMgYWxzbyBpbXBvcnRhbnQuIFNvIGBzbWNfY2xjc29ja19yZWxlYXNlYCBpcyBhIGtleSBmdW5jdGlvbiB0byBleGFtaW5lIGFzIHdlbGwuXG5cbkkgbG9va2VkIGF0IG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZCB3aXRoIFNNQy4gYHNtY19kaWFnX2R1bXBgIGlzIGludm9rZWQgYnkgbmV0bGluayBgU09DS19ESUFHX0JZX0ZBTUlMWWAgZm9yIGBBRl9TTUNgLiBBaCwgYnV0IGBzbWNfZGlhZ19oYW5kbGVyX2R1bXBgIGlzIHJlZ2lzdGVyZWQgZm9yIGBBRl9TTUNgLCBzbyBgc29ja19kaWFnX3Jjdl9tc2dgIGNhbGxzIGBzbWNfZGlhZ19oYW5kbGVyX2R1bXBgLiBIb3dldmVyLCB0aGF0IG9uZSBpcyBzdGF0aWMsIHNvIGl0J3Mgbm90IHVzZWZ1bCBhcyBhIGZvY3VzIHN5bWJvbC5cblxuTXkgbWFpbiBmb2N1cyB3aWxsIGJlIG9uIHRoZSBgc21jX3JlbGVhc2VgIGFuZCBgc21jX2NsY3NvY2tfcmVsZWFzZWAgZnVuY3Rpb25zLiBOb3cgSSBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L3NtYy9LY29uZmlnYCBmaWxlIHRvIHNlZSBob3cgYFNNQ2AgYW5kIGBTTUNfRElBR2AgZGVwZW5kIG9uIGVhY2ggb3RoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTYxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQ0OjE4LjEzMDAxMDQ1NVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc21jL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBTTUNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gSU5FVCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EIFxcdTAwMjZcXHUwMDI2IERJQlNcXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgU01DLVIgcHJvdmlkZXMgYSBcXFwic29ja2V0cyBvdmVyIFJETUFcXFwiIHNvbHV0aW9uIG1ha2luZyB1c2Ugb2ZcXG4gICA3OlxcdFxcdCAgUkRNQSBvdmVyIENvbnZlcmdlZCBFdGhlcm5ldCAoUm9DRSkgdGVjaG5vbG9neSB0byB1cGdyYWRlXFxuICAgODpcXHRcXHQgIEFGX0lORVQgVENQIGNvbm5lY3Rpb25zIHRyYW5zcGFyZW50bHkuXFxuICAgOTpcXHRcXHQgIFRoZSBMaW51eCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU01DLVIgc29sdXRpb24gaXMgZGVzaWduZWQgYXNcXG4gIDEwOlxcdFxcdCAgYSBzZXBhcmF0ZSBzb2NrZXQgZmFtaWx5IFNNQy5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIFNNQyBzb2NrZXQgYXBwbGljYXRpb25zXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBTTUNfRElBR1xcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIlNNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMTY6XFx0XFx0ZGVwZW5kcyBvbiBTTUNcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgU3VwcG9ydCBmb3IgU01DIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRvb2xzIHN1Y2ggYXNcXG4gIDE5OlxcdFxcdCAgc21jc3MuXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgaWYgdW5zdXJlLCBzYXkgWS5cXG4gIDIyOlxcdFxcbiAgMjM6XFx0Y29uZmlnIFNNQ19IU19DVFJMX0JQRlxcbiAgMjQ6XFx0XFx0Ym9vbCBcXFwiR2VuZXJpYyBlQlBGIGhvb2sgZm9yIFNNQyBoYW5kc2hha2UgZmxvd1xcXCJcXG4gIDI1OlxcdFxcdGRlcGVuZHMgb24gU01DIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX1NZU0NBTExcXG4gIDI2OlxcdFxcdGRlZmF1bHQgeVxcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBTTUNfSFNfQ1RSTF9CUEYgZW5hYmxlcyBzdXBwb3J0IHRvIHJlZ2lzdGVyIGdlbmVyaWMgZUJQRiBob29rIGZvciBTTUNcXG4gIDI5OlxcdFxcdCAgaGFuZHNoYWtlIGZsb3csIHdoaWNoIG9mZmVyIG11Y2ggZ3JlYXRlciBmbGV4aWJpbGl0eSBpbiBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yXFxuICAzMDpcXHRcXHQgIG9mIHRoZSBTTUMgcHJvdG9jb2wgc3RhY2sgY29tcGFyZWQgdG8gYSBjb21wbGV0ZSBrZXJuZWwtYmFzZWQgYXBwcm9hY2guIFNlbGVjdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDoxOC4xMzAwODAwNTVaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgxMzU2MDQxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBTTUMgRGVwZW5kZW5jeSBDb25mdXNpb24qKlxuXG5Pa2F5LCBzbyBJIHdhcyBsb29raW5nIGF0IHRoZSBkZXBlbmRlbmN5IHRyZWUgZm9yIGBTTUNgLiBJbml0aWFsbHksIEkgdGhvdWdodCBpdCB3YXMgcmVsaWFudCBvbiBgSU5FVGAsIGBJTkZJTklCQU5EYCwgKmFuZCogYERJQlNgLiBCdXQsIHdhaXQsIGBESUJTYD8gVGhhdCBkb2Vzbid0IHNvdW5kIHJpZ2h0IGF0IGFsbC4gSXQncyBub3QgYSBzdGFuZGFyZCByZXF1aXJlbWVudC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgb3V0cHV0LiBOb3BlLCBpdCBzYXlzIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmTigKYgIGBESUJTYD8gVGhpcyBpcyB0aHJvd2luZyBtZSBvZmYhIE9rYXksIEkgbXVzdCBoYXZlIG1pc3JlYWQgc29tZXRoaW5nLiBMZXQgbWUgZ28gYmFjayBhbmQgcmUtcmVhZCB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBhZ2Fpbi4gQWgsIGZpbmFsbHkhIEl0J3MgYElORVRgIGFuZCBgSU5GSU5JQkFORGAuIFdhaXTigKYgV2h5IGFtIEkgc2VlaW5nIGBESUJTYD8gVGltZSB0byBnbyBiYWNrIGFuZCBjaGVjayB0aGUgYG5ldC9zbWMvS2NvbmZpZ2AgZmlsZSBhZ2FpbiB0byBzZWUgaWYgSSBhbSBtaXNzaW5nIHNvbWV0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NDMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDoyMi45NDM2NDM0NVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyODA4NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG5uZXQvc21jL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxubmV0L3NtYy9LY29uZmlnLTUtXFx0aGVscFxcbi0tXFxubmV0L3NtYy9LY29uZmlnPTE0PWNvbmZpZyBTTUNfRElBR1xcbm5ldC9zbWMvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiU01DOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3NtYy9LY29uZmlnOjE2OlxcdGRlcGVuZHMgb24gU01DXFxubmV0L3NtYy9LY29uZmlnLTE3LVxcdGhlbHBcXG4tLVxcbm5ldC9zbWMvS2NvbmZpZz0yMz1jb25maWcgU01DX0hTX0NUUkxfQlBGXFxubmV0L3NtYy9LY29uZmlnLTI0LVxcdGJvb2wgXFxcIkdlbmVyaWMgZUJQRiBob29rIGZvciBTTUMgaGFuZHNoYWtlIGZsb3dcXFwiXFxubmV0L3NtYy9LY29uZmlnOjI1OlxcdGRlcGVuZHMgb24gU01DIFxcdTAwMjZcXHUwMDI2IEJQRl9KSVQgXFx1MDAyNlxcdTAwMjYgQlBGX1NZU0NBTExcXG5uZXQvc21jL0tjb25maWctMjYtXFx0ZGVmYXVsdCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQ0OjIyLjk5MzkyODcyOFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjk4NzYwMjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBNeXN0ZXJpb3VzIERJQlMqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLi4uIFwiRElCU1wiPyBJIGhhdmVuJ3Qgc2VlbiB0aGF0IHRlcm0gdGhyb3duIGFyb3VuZCBpbiBhIHdoaWxlLiBXaGF0IGV4YWN0bHkgYXJlIHdlIHRhbGtpbmcgYWJvdXQgaGVyZT8gSSBoYXZlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIEl0J3MgdGltZSB0byBmaXJlIHVwIHRoZSBtZW50YWwgbWFjaGluZXJ5LiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgZGlyZWN0bHkgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyBzb3VuZHMgbGlrZSBpdCBjb3VsZCBiZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhIG1hY3JvLCBvciBwb3RlbnRpYWxseSBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSBkZWZpbmVkIHdpdGhpbiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0uIExldCdzIHNlZSB3aGF0IEtjb25maWcgaGFzIHRvIHNheSBhYm91dCBgRElCU2AuIFRpbWUgdG8gZ28gaHVudGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwMTMsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDoyNS42OTI2OTIzMjVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjAyNjMwNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERJQlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuZHJpdmVycy9kaWJzL0tjb25maWc6Mjpjb25maWcgRElCU1xcbmRyaXZlcnMvZGlicy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkRpcmVjdCBJbnRlcm5hbCBCdWZmZXIgU2hhcmluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTMtXFxuZHJpdmVycy9kaWJzL0tjb25maWc6MTQ6Y29uZmlnIERJQlNfTE9cXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cXHRib29sIFxcXCJJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQ0OjI3LjI1Mjk2MzU0MloiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTA0NTEwMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5IGZvciBTTUMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIGBESUJTYCBpcyBhIGN1c3RvbSBjb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIHRoaXMga2VybmVsIHRyZWUuIFRoYXQncyBnb29kIHRvIGtub3cuIE5vdywgYFNNQ2AgYXBwZWFycyB0byBiZSBkZXBlbmRlbnQgb24gYElORVRgLCBgSU5GSU5JQkFORGAsIGFuZCBgRElCU2AuIEFscmlnaHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGFsbCBlbmFibGVkIGZvciBmdXp6aW5nIHRoaXMuIFRoZXJlZm9yZSwgSSdsbCBhZGQgYFNNQ2AsIGBTTUNfRElBR2AsIGBJTkVUYCwgYElORklOSUJBTkRgLCBhbmQgYERJQlNgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC5cblxuSG9sZCBvbiwgdGhvdWdoLiBgSU5FVGAgaXMgZ2VuZXJhbGx5IGEgZ2l2ZW4sIGFuZCBgSU5GSU5JQkFORGAgaXMgcHJldHR5IHN0YW5kYXJkLiBObyBuZWVkIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSB0aG9zZS4gTGV0J3MgbWFrZSBzdXJlIGBTTUNgIGFuZCBgU01DX0RJQUdgIGFyZSBlbmFibGVkLCB0aG91Z2guXG5cblJpZ2h0LCB0aGUgcGF0Y2ggaXRzZWxmIHRhcmdldHMgYSByYWNlIGNvbmRpdGlvbiBpbiBgc21jX2luZXRfZGVzdHJveV9zb2NrYCwgYW5kIHRoYXQgaGFwcGVucyBkdXJpbmcgc29ja2V0IGRlc3RydWN0aW9uLiBTb3VuZHMgbGlrZSBhIHRleHRib29rIHJhY2UgY29uZGl0aW9uLCBzbyB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyBhdHRlbnRpb24uXG5cbk9rYXksIGxldCdzIGNvbnNvbGlkYXRlIHRoaXM6XG5cbmBXb3J0aEZ1enppbmc6IHRydWVgLiBBYnNvbHV0ZWx5LlxuXG5gRm9jdXNTeW1ib2xzOiBzbWNfcmVsZWFzZSwgc21jX2NsY3NvY2tfcmVsZWFzZWAuIFRob3NlIHR3byBmdW5jdGlvbnMgc291bmQgbGlrZSBwcmltZSB0YXJnZXRzLCBjb25zaWRlcmluZyB0aGUgcmFjZSBjb25kaXRpb24uXG5cbmBFbmFibGVDb25maWdzOiBTTUMsIFNNQ19ESUFHLCBJTkZJTklCQU5ELCBESUJTYC4gTWFraW5nIHN1cmUgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBtZXQuXG5cbk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMuIGBzbWNfaW5ldF9pbml0YCBpcyBtYXJrZWQgYXMgYF9faW5pdGAsIHNvIHByb2JhYmx5IG5vdCBhcyBpbnRlcmVzdGluZyBmb3IgdGhpcy4gQW5kIGBzbWNfaW5ldF9leGl0YCBpcyBzaW1pbGFyLiBIb3cgYWJvdXQgYHNtY19oYXNoX3NrYCBhbmQgYHNtY191bmhhc2hfc2tgPyBJJ2xsIGtlZXAgdGhvc2UgaW4gbWluZCwgYnV0IHRoZXkncmUgbm90IHRoZSAqcHJpbWFyeSogZm9jdXMgcmlnaHQgbm93LiBHb29kIGVub3VnaCBmb3Igbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTMyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDozMy43NTc0NzcwMzlaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTM3NTgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfdW5oYXNoX3NrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvYWZfc21jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9hZl9zbWMuYz0xOTk9aW50IHNtY19oYXNoX3NrKHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjEzLVxcbm5ldC9zbWMvYWZfc21jLmM6MjE0OnZvaWQgc21jX3VuaGFzaF9zayhzdHJ1Y3Qgc29jayAqc2spXFxubmV0L3NtYy9hZl9zbWMuYy0yMTUte1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYz0yMzg9c3RydWN0IHByb3RvIHNtY19wcm90byA9IHtcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmMtMjQyLVxcdC5oYXNoXFx0XFx0PSBzbWNfaGFzaF9zayxcXG5uZXQvc21jL2FmX3NtYy5jOjI0MzpcXHQudW5oYXNoXFx0XFx0PSBzbWNfdW5oYXNoX3NrLFxcbm5ldC9zbWMvYWZfc21jLmMtMjQ0LVxcdC5yZWxlYXNlX2NiXFx0PSBzbWNfcmVsZWFzZV9jYixcXG4tLVxcbm5ldC9zbWMvYWZfc21jLmM9MjUxPXN0cnVjdCBwcm90byBzbWNfcHJvdG82ID0ge1xcbi0tXFxubmV0L3NtYy9hZl9zbWMuYy0yNTUtXFx0Lmhhc2hcXHRcXHQ9IHNtY19oYXNoX3NrLFxcbm5ldC9zbWMvYWZfc21jLmM6MjU2OlxcdC51bmhhc2hcXHRcXHQ9IHNtY191bmhhc2hfc2ssXFxubmV0L3NtYy9hZl9zbWMuYy0yNTctXFx0LnJlbGVhc2VfY2JcXHQ9IHNtY19yZWxlYXNlX2NiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDozNC4yMDI4NTkyNjRaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYxNzQzNTA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgU01DIE1vZHVsZSdzIFN5bWJvbCBhbmQgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdvdCBzbyBmYXIuIEknbSBmb2N1c2luZyBvbiBjbGVhbmluZyB1cCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgU01DIG1vZHVsZS4gSXQgbG9va3MgbGlrZSBgc21jX3VuaGFzaF9za2AgaXMgYSBnbG9iYWwgdmFyaWFibGUgYW5kIEkgc2VlIHRoYXQgaXQncyBjYWxsZWQgd2l0aGluIGBzbWNfaW5ldF9kZXN0cm95X3NvY2tgLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgc2stXHUwMDNlc2tfcHJvdC1cdTAwM2V1bmhhc2goc2spYC4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgaW5jbHVzaW9uIGluIG15IGBGb2N1c1N5bWJvbHNgIGxpc3QsIHRoYXQncyBkZWZpbml0ZWx5IGEgcG9pbnQgb2YgaW50ZXJhY3Rpb24uXG5cbkkgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgc21jX2luZXRfZGVzdHJveV9zb2NrYCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb247IHRoaXMgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgc2NvcGUuIFRoZW4sIEkgY2hlY2tlZCB0aGF0IGJvdGggYHNtY19jbGNzb2NrX3JlbGVhc2VgIGFuZCBgc21jX3JlbGVhc2VgIGFyZSBnbG9iYWxseSBhY2Nlc3NpYmxlLiBTbyBteSBmaW5hbCBgRm9jdXNTeW1ib2xzYCBsaXN0IGlzIGxvb2tpbmcgbGlrZTpcblxuLSAgIGBzbWNfcmVsZWFzZWBcbi0gICBgc21jX2NsY3NvY2tfcmVsZWFzZWBcbi0gICBgc21jX3VuaGFzaF9za2BcblxuTmV4dCwgSSd2ZSBnb3QgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGNvcnJlY3QuIE15IGBFbmFibGVDb25maWdzYCBsaXN0IGlzIGN1cnJlbnRseTpcblxuLSAgIGBTTUNgXG4tICAgYFNNQ19ESUFHYFxuLSAgIGBJTkZJTklCQU5EYFxuLSAgIGBESUJTYFxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgbmVlZCBmb3IgYERJQlNgLiBUaGUgZGVwZW5kZW5jeSBpcyBzaG93biBhczogYGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU2AuIFllcywgZ2l2ZW4gdGhlIGNvbnRleHQsIGBESUJTYCBpcyBhYnNvbHV0ZWx5IHJlcXVpcmVkLlxuXG5BbHJpZ2h0LCBJJ20gc2F0aXNmaWVkIHdpdGggdGhpcy4gVGltZSB0byBleGVjdXRlIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzYwLCJPdXRwdXRUb2tlbnMiOjE2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDo0MC44MjAyOTY4NDdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjA1ODU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJTTUNfRElBR1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19yZWxlYXNlXCIsXG4gICAgXCJzbWNfY2xjc29ja19yZWxlYXNlXCIsXG4gICAgXCJzbWNfdW5oYXNoX3NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgU01DIHNvY2tldCBkZXN0cnVjdGlvbiB3aGVyZSBzbWNfZGlhZyBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBhIHJlbGVhc2VkIGNsY3NvY2suIEl0IG1vZGlmaWVzIHRoZSBzb2NrZXQgdGVhcmRvd24gZmxvdyBieSBhZGRpbmcgYSAuZGVzdHJveSBjYWxsYmFjayB0byBzbWNfaW5ldF9wcm90IGFuZCBzbWNfaW5ldDZfcHJvdCwgd2hpY2ggdW5oYXNoZXMgdGhlIHNvY2tldCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBjbGNzb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU01DXCIsXG4gICAgXCJTTUNfRElBR1wiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiRElCU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNtY19yZWxlYXNlXCIsXG4gICAgXCJzbWNfY2xjc29ja19yZWxlYXNlXCIsXG4gICAgXCJzbWNfdW5oYXNoX3NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBkdXJpbmcgU01DIHNvY2tldCBkZXN0cnVjdGlvbiB3aGVyZSBzbWNfZGlhZyBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBhIHJlbGVhc2VkIGNsY3NvY2suIEl0IG1vZGlmaWVzIHRoZSBzb2NrZXQgdGVhcmRvd24gZmxvdyBieSBhZGRpbmcgYSAuZGVzdHJveSBjYWxsYmFjayB0byBzbWNfaW5ldF9wcm90IGFuZCBzbWNfaW5ldDZfcHJvdCwgd2hpY2ggdW5oYXNoZXMgdGhlIHNvY2tldCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBjbGNzb2NrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQ0OjQwLjg5MjM2MTgwNVoiLCJTZXEiOjU1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1Njc4NjE3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjQ0OjQwLjg5MjkxNzkxNVoiLCJTZXEiOjU2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MjU2MjI1MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24gd2hlcmUgYHNtY19kaWFnYCBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBgc21jLVxcdTAwM2VjbGNzb2NrYCB3aGlsZSBpdCBpcyBiZWluZyByZWxlYXNlZC4gVGhpcyBpcyBhIHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjYyYTVkZDBmOGI0MWE4OGY5MjY3MWZkNTUyNWNlN2ZhYTM4YTExZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA4OjQyOjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NtYy9zbWNfaW5ldC5jIGIvbmV0L3NtYy9zbWNfaW5ldC5jXG5pbmRleCBhOTQwODRiNGE0OThlLi41MjBiNjY2ZmRkOGZhIDEwMDY0NFxuLS0tIGEvbmV0L3NtYy9zbWNfaW5ldC5jXG4rKysgYi9uZXQvc21jL3NtY19pbmV0LmNcbkBAIC0xNSwxMyArMTUsMTYgQEBcbiBcbiAjaW5jbHVkZSBcInNtY19pbmV0LmhcIlxuICNpbmNsdWRlIFwic21jLmhcIlxuKyNpbmNsdWRlIFwic21jX2Nsb3NlLmhcIlxuIFxuIHN0YXRpYyBpbnQgc21jX2luZXRfaW5pdF9zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4rc3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzayk7XG4gXG4gc3RhdGljIHN0cnVjdCBwcm90byBzbWNfaW5ldF9wcm90ID0ge1xuIFx0Lm5hbWVcdFx0PSBcIklORVRfU01DXCIsXG4gXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiBcdC5pbml0XHRcdD0gc21jX2luZXRfaW5pdF9zb2NrLFxuK1x0LmRlc3Ryb3lcdD0gc21jX2luZXRfZGVzdHJveV9zb2NrLFxuIFx0Lmhhc2hcdFx0PSBzbWNfaGFzaF9zayxcbiBcdC51bmhhc2hcdFx0PSBzbWNfdW5oYXNoX3NrLFxuIFx0LnJlbGVhc2VfY2JcdD0gc21jX3JlbGVhc2VfY2IsXG5AQCAtNjgsNiArNzEsNyBAQCBzdGF0aWMgc3RydWN0IHByb3RvIHNtY19pbmV0Nl9wcm90ID0ge1xuIFx0Lm5hbWVcdFx0PSBcIklORVQ2X1NNQ1wiLFxuIFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gXHQuaW5pdFx0XHQ9IHNtY19pbmV0X2luaXRfc29jayxcbitcdC5kZXN0cm95XHQ9IHNtY19pbmV0X2Rlc3Ryb3lfc29jayxcbiBcdC5oYXNoXHRcdD0gc21jX2hhc2hfc2ssXG4gXHQudW5oYXNoXHRcdD0gc21jX3VuaGFzaF9zayxcbiBcdC5yZWxlYXNlX2NiXHQ9IHNtY19yZWxlYXNlX2NiLFxuQEAgLTExNiw2ICsxMjAsMTggQEAgc3RhdGljIGludCBzbWNfaW5ldF9pbml0X3NvY2soc3RydWN0IHNvY2sgKnNrKVxuIFx0cmV0dXJuIHNtY19jcmVhdGVfY2xjc2sobmV0LCBzaywgc2stXHUwMDNlc2tfZmFtaWx5KTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgc21jX2luZXRfZGVzdHJveV9zb2NrKHN0cnVjdCBzb2NrICpzaylcbit7XG4rXHQvKiBUaGUgc29jayBpcyBoYXNoZWQgYW5kIHNtY19kaWFnIGR1bXBzIGRlcmVmZXJlbmNlIHNtYy1cdTAwM2VjbGNzb2NrXG4rXHQgKiB3aXRob3V0IGNsY3NvY2tfcmVsZWFzZV9sb2NrLCB3aGlsZSBza19jb21tb25fcmVsZWFzZSgpIGNhbGxzXG4rXHQgKiAuZGVzdHJveSBiZWZvcmUgLnVuaGFzaC4gVW5oYXNoIGZpcnN0LCBhcyBfX3NtY19yZWxlYXNlKCkgZG9lcyxcbitcdCAqIHNvIG5vIGR1bXAgY2FuIG9ic2VydmUgdGhlIGNsY3NvY2sgYmVpbmcgcmVsZWFzZWQ7IHRoZSBzZWNvbmRcbitcdCAqIHVuaGFzaCBpcyBhIG5vLW9wLlxuK1x0ICovXG4rXHRzay1cdTAwM2Vza19wcm90LVx1MDAzZXVuaGFzaChzayk7XG4rXHRzbWNfY2xjc29ja19yZWxlYXNlKHNtY19zayhzaykpO1xuK31cbitcbiBpbnQgX19pbml0IHNtY19pbmV0X2luaXQodm9pZClcbiB7XG4gXHRpbnQgcmM7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDo0MC44OTI5MjEzODVaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1NjE5MjU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTTUMgU29ja2V0IERlc3RydWN0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IGNsYXNzaWMgY29uY3VycmVuY3kgaXNzdWUgaW4gdGhlIFNNQyBuZXR3b3JraW5nIGNvZGUuIEl0J3MgYWRkaW5nIGEgYGRlc3Ryb3lgIGNhbGxiYWNrIHRvIGBzbWNfaW5ldF9wcm90YCBhbmQgYHNtY19pbmV0Nl9wcm90YCwgd2hpY2ggaXMgZ29pbmcgdG8gY2FsbCBgc21jX2luZXRfZGVzdHJveV9zb2NrYC4gVGhhdCBmdW5jdGlvbiB0aGVuIGRvZXMgdGhlIGNydWNpYWwgc3RlcCBvZiB1bmhhc2hpbmcgdGhlIHNvY2tldCBiZWZvcmUgY2FsbGluZyBgc21jX2NsY3NvY2tfcmVsZWFzZWAuIFRoZSBjb21tZW50cyBleHBsaWNpdGx5IHBvaW50IG91dCB0aGF0IHRoaXMgb3JkZXIgY2hhbmdlIGlzIHRvIHByZXZlbnQgYSB1c2UtYWZ0ZXItZnJlZSBvciwgZXZlbiB3b3JzZSwgYSBudWxsLXBvaW50ZXIgZGVyZWZlcmVuY2UuIEVzc2VudGlhbGx5LCBgc21jX2RpYWdgIHdhcyB0cnlpbmcgdG8gYWNjZXNzIGBzbWMtXHUwMDNlY2xjc29ja2AgZHVyaW5nIGEgZGVidWcgZHVtcCAqd2hpbGUqIGBjbGNzb2NrYCB3YXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcmVsZWFzZWQuIFRoZSBLQVNBTiBoYXMgYWxyZWFkeSBjYXVnaHQgdGhpcywgd2hpY2ggaXMgZ3JlYXQuXG5cblRoZSBjb3JlIG9mIHRoZSBmaXggaXMgdG8gbWFrZSBzdXJlIHRoZSBzb2NrZXQgaXMgdW5oYXNoZWQgKmJlZm9yZSogYHNtY19jbGNzb2NrX3JlbGVhc2VgIGlzIGNhbGxlZCwgZW5zdXJpbmcgdGhhdCBkZWJ1ZyBkdW1wcyBjYW4ndCBvYnNlcnZlIHRoZSBgY2xjc29ja2AgYmVpbmcgcmVsZWFzZWQuIEl0J3MgYSByYWNlIGNvbmRpdGlvbiBmaXgg4oCTIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgeW91J2QgZXhwZWN0IHRvIHNlZS4gVGhlIHBhdGNoIGlzIHNpbXBseSByZS1vcmRlcmluZyBleGlzdGluZyBvcGVyYXRpb25zLCBubyBuZXcgYWxsb2NhdGlvbnMsIGJvdW5kcyBjaGVja3MsIG9yIGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCBmb3IgYSBjb25jdXJyZW5jeSBpc3N1ZS5cblxuSSB3aWxsIGRvdWJsZS1jaGVjaywgYnV0IEkgZG9uJ3Qgc2VlIGFueSByaXNrIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIGhlcmUuIFRoaXMgaXMgcHVyZWx5IGFib3V0IHByb3RlY3RpbmcgYWdhaW5zdCBhIHJhY2UgZHVyaW5nIHNvY2tldCB0ZWFyZG93bi5cblxuR2l2ZW4gdGhlIHN0cmFpZ2h0Zm9yd2FyZCBuYXR1cmUgb2YgdGhlIGZpeCBhbmQgdGhlIGZhY3QgdGhhdCBpdCByZXNvbHZlcyBhIGRldGVjdGVkIGNvbmN1cnJlbmN5IGJ1ZywgSSdsbCBzZXQgTmVlZHNLTVNBTiB0byBmYWxzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzNywiT3V0cHV0VG9rZW5zIjoxMzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODo0NDo0OS4xNDkxMTc5NTFaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gZHVyaW5nIHNvY2tldCBkZXN0cnVjdGlvbiB3aGVyZSBgc21jX2RpYWdgIGR1bXBzIGNvdWxkIGRlcmVmZXJlbmNlIGBzbWMtXFx1MDAzZWNsY3NvY2tgIHdoaWxlIGl0IGlzIGJlaW5nIHJlbGVhc2VkLiBUaGlzIGlzIGEgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Zywgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgYm91bmRzIGNoZWNraW5nIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzb2NrZXQgZGVzdHJ1Y3Rpb24gd2hlcmUgYHNtY19kaWFnYCBkdW1wcyBjb3VsZCBkZXJlZmVyZW5jZSBgc21jLVxcdTAwM2VjbGNzb2NrYCB3aGlsZSBpdCBpcyBiZWluZyByZWxlYXNlZC4gVGhpcyBpcyBhIHVzZS1hZnRlci1mcmVlIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWcsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGJvdW5kcyBjaGVja2luZyBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow42nqt[1] Phase: Succeeded StartedAt: 2026-08-21 08:45:00 +0000 UTC FinishedAt: 2026-08-21 08:45:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 08:45:00 +0000 UTC FinishedAt: 2026-08-21 08:45:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2] Phase: Succeeded StartedAt: 2026-08-21 08:45:00 +0000 UTC FinishedAt: 2026-08-21 12:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 08:45:00 +0000 UTC FinishedAt: 2026-08-21 12:24:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 08:45:00 +0000 UTC FinishedAt: 2026-08-21 08:45:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 08:45:00 +0000 UTC FinishedAt: 2026-08-21 08:45:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42nqt/series-workflow42nqt-convert-artifact-1085604671/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 08:45:10 +0000 UTC FinishedAt: 2026-08-21 09:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 08:45:10 +0000 UTC FinishedAt: 2026-08-21 09:01:55 +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:*fdc31a3e-e709-4401-9651-c0e405168e91,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-workflow42nqt/series-workflow42nqt-convert-artifact-1085604671/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": "0eddcba0-5b67-4811-8178-5c1a0eddcce5", "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-workflow42nqt/series-workflow42nqt-build-action-2134707653/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 08:45:10 +0000 UTC FinishedAt: 2026-08-21 09:01:45 +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:*fdc31a3e-e709-4401-9651-c0e405168e91,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-workflow42nqt/series-workflow42nqt-convert-artifact-1085604671/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": "0eddcba0-5b67-4811-8178-5c1a0eddcce5", "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-workflow42nqt/series-workflow42nqt-build-action-2134707653/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 09:01:55 +0000 UTC FinishedAt: 2026-08-21 09:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 09:01:55 +0000 UTC FinishedAt: 2026-08-21 09:01:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 09:01:55 +0000 UTC FinishedAt: 2026-08-21 09:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 09:01:55 +0000 UTC FinishedAt: 2026-08-21 09:01:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow42nqt/series-workflow42nqt-convert-artifact-1169451086/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 09:02:05 +0000 UTC FinishedAt: 2026-08-21 09:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 09:02:05 +0000 UTC FinishedAt: 2026-08-21 09:03:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0eddcba0-5b67-4811-8178-5c1a0eddcce5,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-workflow42nqt/series-workflow42nqt-build-action-2134707653/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-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 09:04:02 +0000 UTC FinishedAt: 2026-08-21 09:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 09:04:02 +0000 UTC FinishedAt: 2026-08-21 09:04:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 09:04:02 +0000 UTC FinishedAt: 2026-08-21 09:20:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 09:04:02 +0000 UTC FinishedAt: 2026-08-21 09:20:45 +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:*fdc31a3e-e709-4401-9651-c0e405168e91,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-workflow42nqt/series-workflow42nqt-convert-artifact-1169451086/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": "4f34ac64-6102-4e46-bb3f-364ea23b1e21", "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-workflow42nqt/series-workflow42nqt-build-action-1491798498/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 09:04:02 +0000 UTC FinishedAt: 2026-08-21 09:20:35 +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:*fdc31a3e-e709-4401-9651-c0e405168e91,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-workflow42nqt/series-workflow42nqt-convert-artifact-1169451086/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": "4f34ac64-6102-4e46-bb3f-364ea23b1e21", "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-workflow42nqt/series-workflow42nqt-build-action-1491798498/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 09:20:45 +0000 UTC FinishedAt: 2026-08-21 09:20:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 09:20:45 +0000 UTC FinishedAt: 2026-08-21 09:20:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 09:20:45 +0000 UTC FinishedAt: 2026-08-21 09:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 09:20:45 +0000 UTC FinishedAt: 2026-08-21 09:22:34 +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:*4f34ac64-6102-4e46-bb3f-364ea23b1e21,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-workflow42nqt/series-workflow42nqt-build-action-1491798498/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-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 09:22:44 +0000 UTC FinishedAt: 2026-08-21 12:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 09:22:44 +0000 UTC FinishedAt: 2026-08-21 12:24:16 +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":["smc_release","smc_clcsock_release","smc_unhash_sk"],"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:*0eddcba0-5b67-4811-8178-5c1a0eddcce5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4f34ac64-6102-4e46-bb3f-364ea23b1e21,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-workflow42nqt/series-workflow42nqt-build-action-2134707653/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-workflow42nqt/series-workflow42nqt-build-action-1491798498/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 09:22:44 +0000 UTC FinishedAt: 2026-08-21 09:22:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 09:22:44 +0000 UTC FinishedAt: 2026-08-21 09:22:49 +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":["smc_release","smc_clcsock_release","smc_unhash_sk"],"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-workflow42nqt/series-workflow42nqt-convert-artifact-547374707/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 09:22:44 +0000 UTC FinishedAt: 2026-08-21 09:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 09:22:44 +0000 UTC FinishedAt: 2026-08-21 09:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 09:22:44 +0000 UTC FinishedAt: 2026-08-21 09:22:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 09:22:54 +0000 UTC FinishedAt: 2026-08-21 12:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow42nqt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["smc_release","smc_clcsock_release","smc_unhash_sk"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SMC","SMC_DIAG","INFINIBAND","DIBS"],"series_id":"92c5d7a2-e6c3-42f1-8186-bfc251ca1ffb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 09:22:54 +0000 UTC FinishedAt: 2026-08-21 12:24:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0eddcba0-5b67-4811-8178-5c1a0eddcce5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4f34ac64-6102-4e46-bb3f-364ea23b1e21,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-workflow42nqt/series-workflow42nqt-build-action-2134707653/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-workflow42nqt/series-workflow42nqt-build-action-1491798498/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-workflow42nqt/series-workflow42nqt-convert-artifact-547374707/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,}