Name: series-workflow5lp6d Phase: Succeeded StartedAt: 2026-09-15 11:02:56 +0000 UTC FinishedAt: 2026-09-15 12:45:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[0] Phase: Succeeded StartedAt: 2026-09-15 11:02:56 +0000 UTC FinishedAt: 2026-09-15 11:06:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 11:02:56 +0000 UTC FinishedAt: 2026-09-15 11:06:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8aaeb56aff2a557a88f83ae866da2c91ad247e59", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP_SYNC_TTY", "PPP", "TTY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8aaeb56aff2a557a88f83ae866da2c91ad247e59", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP_SYNC_TTY", "PPP", "TTY" ], "series_id": "7cf4b200-62f3-417c-9350-8a21e72dda1d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ppp_sync_txmunge", "ppp_sync_send" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "8aaeb56aff2a557a88f83ae866da2c91ad247e59", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUF9TWU5DX1RUWSYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwX3N5bmNfdHhtdW5nZSYjMzQ7LAogICAgJiMzNDtwcHBfc3luY19zZW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIGluIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AgdGhhdCBjb25zb2xpZGF0ZXMgZHVwbGljYXRlIGVycm9yIGhhbmRsaW5nIHBhdGhzIChga2ZyZWVfc2tiKHNrYik7IHJldHVybiBOVUxMO2ApIGludG8gYSBjb21tb24gYGdvdG8gZnJlZV9za2I7YCBleGl0IGxhYmVsLlxuXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGFsdGVyIGhvdyBidWZmZXJzIGFyZSByZWFkLCB3cml0dGVuLCBvciBib3VuZHMtY2hlY2tlZCwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLlxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBLQVNBTiBjb3ZlcnMgYW55IHNrYiBsaWZldGltZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUpLCB0aG91Z2ggdGhlIHBhdGNoIGRvZXMgbm90IGNoYW5nZSBza2IgbGlmZXRpbWUgb3IgZXJyb3IgaGFuZGxpbmcgc2VtYW50aWNzIGF0IGFsbC5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXJyb3ItaGFuZGxpbmcgcGF0aCBpbiBwcHBfc3luY190eG11bmdlKCkgd2l0aGluIGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGJ5IHJvdXRpbmcgcGFja2V0IGRyb3AgY2FzZXMgdG8gYSBzaGFyZWQgZnJlZV9za2IgbGFiZWwuIFRoaXMgY29kZSBpcyBleGVjdXRhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdGhlIE5fU1lOQ19QUFAgVFRZIGxpbmUgZGlzY2lwbGluZSBvdmVyIHB0eXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIHJlZmFjdG9yZWQgZnJhbWUgZW5jYXBzdWxhdGlvbiBhbmQgc2tiIGhhbmRsaW5nIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0OGE3NWRmMmNjODVjZjRhODZkYjg5ZDRiNTc2MzIwOWQwZmYxNTkzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTE6MDQ6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuaW5kZXggZWJkNjJhN2FiNTRiMy4uOWU0NDBlMTEwZTlmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuQEAgLTQzNiwxMCAmIzQzOzQzNiw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aW50IGlzbGNwO1xuIFxuIFx0LyogRW5zdXJlIHdlIGNhbiBzYWZlbHkgYWNjZXNzIHByb3RvY29sIGZpZWxkIGFuZCBMQ1AgY29kZSAqL1xuLVx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMykpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybiBOVUxMO1xuLVx0fVxuJiM0MztcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDMpKVxuJiM0MztcdFx0Z290byBmcmVlX3NrYjtcbiYjNDM7XG4gXHRkYXRhICA9IHNrYi1cdTAwM2VkYXRhO1xuIFx0cHJvdG8gPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7XG4gXG5AQCAtNDU1LDEwICYjNDM7NDU0LDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHQvKiBwcmVwZW5kIGFkZHJlc3MvY29udHJvbCBmaWVsZHMgaWYgbmVjZXNzYXJ5ICovXG4gXHRpZiAoKGFwLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7XG4tXHRcdGlmIChza2JfY293X2hlYWQoc2tiLCAyKSkge1xuLVx0XHRcdGtmcmVlX3NrYihza2IpO1xuLVx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHR9XG4mIzQzO1x0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpXG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9za2I7XG4mIzQzO1xuIFx0XHRza2JfcHVzaChza2IsMik7XG4gXHRcdHNrYi1cdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO1xuIFx0XHRza2ItXHUwMDNlZGF0YVsxXSA9IFBQUF9VSTtcbkBAIC00NzAsNiAmIzQzOzQ2OCwxMCBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0cHBwX3ByaW50X2J1ZmZlciAoXCYjMzQ7c2VuZCBidWZmZXJcJiMzNDssIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuKTtcbiBcbiBcdHJldHVybiBza2I7XG4mIzQzO1xuJiM0MztmcmVlX3NrYjpcbiYjNDM7XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gLypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFBfU1lOQ19UVFkmIzM0OywKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcF9zeW5jX3R4bXVuZ2UmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gcHBwX3N5bmNfdHhtdW5nZSgpIHdpdGhpbiBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBieSByb3V0aW5nIHBhY2tldCBkcm9wIGNhc2VzIHRvIGEgc2hhcmVkIGZyZWVfc2tiIGxhYmVsLiBUaGlzIGNvZGUgaXMgZXhlY3V0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHRoZSBOX1NZTkNfUFBQIFRUWSBsaW5lIGRpc2NpcGxpbmUgb3ZlciBwdHlzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoZSByZWZhY3RvcmVkIGZyYW1lIGVuY2Fwc3VsYXRpb24gYW5kIHNrYiBoYW5kbGluZyBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDhhNzVkZjJjYzg1Y2Y0YTg2ZGI4OWQ0YjU3NjMyMDlkMGZmMTU5MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDExOjA0OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwppbmRleCBlYmQ2MmE3YWI1NGIzLi45ZTQ0MGUxMTBlOWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwpAQCAtNDM2LDEwICYjNDM7NDM2LDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpCiAJaW50IGlzbGNwOwogCiAJLyogRW5zdXJlIHdlIGNhbiBzYWZlbHkgYWNjZXNzIHByb3RvY29sIGZpZWxkIGFuZCBMQ1AgY29kZSAqLwotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIDMpKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gTlVMTDsKLQl9CiYjNDM7CWlmICghcHNrYl9tYXlfcHVsbChza2IsIDMpKQomIzQzOwkJZ290byBmcmVlX3NrYjsKJiM0MzsKIAlkYXRhICA9IHNrYi0mZ3Q7ZGF0YTsKIAlwcm90byA9IGdldF91bmFsaWduZWRfYmUxNihkYXRhKTsKIApAQCAtNDU1LDEwICYjNDM7NDU0LDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpCiAKIAkvKiBwcmVwZW5kIGFkZHJlc3MvY29udHJvbCBmaWVsZHMgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKChhcC0mZ3Q7ZmxhZ3MgJmFtcDsgU0NfQ09NUF9BQykgPT0gMCB8fCBpc2xjcCkgewotCQlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHsKLQkJCWtmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KJiM0MzsJCWlmIChza2JfY293X2hlYWQoc2tiLCAyKSkKJiM0MzsJCQlnb3RvIGZyZWVfc2tiOwomIzQzOwogCQlza2JfcHVzaChza2IsMik7CiAJCXNrYi0mZ3Q7ZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUzsKIAkJc2tiLSZndDtkYXRhWzFdID0gUFBQX1VJOwpAQCAtNDcwLDYgJiM0Mzs0NjgsMTAgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpCiAJCXBwcF9wcmludF9idWZmZXIgKCYjMzQ7c2VuZCBidWZmZXImIzM0Oywgc2tiLSZndDtkYXRhLCBza2ItJmd0O2xlbik7CiAKIAlyZXR1cm4gc2tiOwomIzQzOwomIzQzO2ZyZWVfc2tiOgomIzQzOwlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJcmV0dXJuIE5VTEw7CiB9CiAKIC8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFAgU3luY2hyb25pemF0aW9uIFRyYW5zbWl0IE11bmdpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIGEgY291cGxlIG9mIGNoYW5nZXMgd2l0aGluIHRoZSBgcHBwX3N5bmNfdHhtdW5nZWAgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24sIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgcmVzcG9uc2libGUgZm9yIHByb2Nlc3Npbmcgb3V0Ym91bmQgcGFja2V0cyBvbiBzeW5jaHJvbm91cyBQUFAgbGlua3MsIGhhbmRsaW5nIHRoaW5ncyBsaWtlIGFkZHJlc3MgYW5kIGNvbnRyb2wgZmllbGQgaW5zZXJ0aW9uLCBhbmQgZ2VuZXJhbGx5IHByZXBhcmluZyB0aGUgcGFja2V0IGZvciB0cmFuc21pc3Npb24gb3ZlciB0aGUgc2VyaWFsIGludGVyZmFjZS4KClRoZSBwcmltYXJ5IGNoYW5nZSBzZWVtcyB0byBiZSBhYm91dCBlcnJvciBoYW5kbGluZy4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCB0byBjaGVjayBmb3IgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIG9yIHBhY2tldCBzdHJ1Y3R1cmUgaW50ZWdyaXR5IHdpdGggYHBza2JfbWF5X3B1bGxgIGFuZCBgc2tiX2Nvd19oZWFkYCwgYW5kIHRoZW4gYGtmcmVlX3NrYmAgd2l0aGluIHRoZSBgaWZgIGJsb2Nrcy4gTm93LCBpdCBhcHBlYXJzIHRoZXkgYXJlIGNoYW5naW5nIHRob3NlIGluc3RhbmNlcywgd2hlcmUgdGhlIGNoZWNrIGZhaWxzLCB0byBhIGBnb3RvIGZyZWVfc2tiO2Agc3RhdGVtZW50LiBUaGlzIGNoYW5nZSByZWZhY3RvcnMgdGhlIGVycm9yIGhhbmRsaW5nIHVzaW5nIGEgYGdvdG9gIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGltcHJvdmUgcmVhZGFiaWxpdHkuIEl0JiMzOTtzIGNsZWFuZXIsIGVsaW1pbmF0aW5nIHRoZSBuZXN0ZWQgY29uZGl0aW9uYWwgc3RydWN0dXJlLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzICYjMzQ7Z290byYjMzQ7IGFwcHJvYWNoIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgcHJvamVjdCYjMzk7cyBjb2Rpbmcgc3R5bGUgZ3VpZGVsaW5lcywgYnV0LCBmcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgaXQgbG9va3MgbG9naWNhbGx5IGVxdWl2YWxlbnQuIEl0IHNob3J0LWNpcmN1aXRzIHRoZSBmdW5jdGlvbiwgZnJlZXMgdGhlIFNLQiwgYW5kIHJldHVybnMgTlVMTCwgd2hpY2ggSSBhc3N1bWUgaW5kaWNhdGVzIGEgZmFpbHVyZSB0byBwcm9jZXNzIHRoZSBwYWNrZXQuCgpUbyBiZSBleHRyYSB0aG9yb3VnaCwgSSYjMzk7bGwgd2FudCB0byBjaGVjayB0aGUgY29udGV4dCwgdG8gZXhhbWluZSB3aGF0IGNvZGUgY2FsbHMgYHBwcF9zeW5jX3R4bXVuZ2VgIGFuZCB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSB3aWxsIGFsc28gbWFrZSBzdXJlIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBwcHBfc3luY3R0eS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHRoYXQgdGhpcyBjaGFuZ2UgbWlnaHQgaW50cm9kdWNlLiBMZXQgbWUgZ3JhYiBteSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG9vbHMgdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0fVxuIDQyNjpcdFxuIDQyNzpcdC8qXG4gNDI4Olx0ICogUHJvY2VkdXJlcyBmb3IgZW5jYXBzdWxhdGlvbiBhbmQgZnJhbWluZy5cbiA0Mjk6XHQgKi9cbiA0MzA6XHRcbiA0MzE6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYqXG4gNDMyOlx0cHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gNDMzOlx0e1xuIDQzNDpcdFx0aW50IHByb3RvO1xuIDQzNTpcdFx0dW5zaWduZWQgY2hhciAqZGF0YTtcbiA0MzY6XHRcdGludCBpc2xjcDtcbiA0Mzc6XHRcbiA0Mzg6XHRcdC8qIEVuc3VyZSB3ZSBjYW4gc2FmZWx5IGFjY2VzcyBwcm90b2NvbCBmaWVsZCBhbmQgTENQIGNvZGUgKi9cbiA0Mzk6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDMpKVxuIDQ0MDpcdFx0XHRnb3RvIGZyZWVfc2tiO1xuIDQ0MTpcdFxuIDQ0MjpcdFx0ZGF0YSAgPSBza2ItXHUwMDNlZGF0YTtcbiA0NDM6XHRcdHByb3RvID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEpO1xuIDQ0NDpcdFxuIDQ0NTpcdFx0LyogTENQIHBhY2tldHMgd2l0aCBjb2RlcyBiZXR3ZWVuIDEgKGNvbmZpZ3VyZS1yZXF1ZXN0KVxuIDQ0NjpcdFx0ICogYW5kIDcgKGNvZGUtcmVqZWN0KSBtdXN0IGJlIHNlbnQgYXMgdGhvdWdoIG5vIG9wdGlvbnNcbiA0NDc6XHRcdCAqIGhhdmUgYmVlbiBuZWdvdGlhdGVkLlxuIDQ0ODpcdFx0ICovXG4gNDQ5Olx0XHRpc2xjcCA9IHByb3RvID09IFBQUF9MQ1AgXHUwMDI2XHUwMDI2IDEgXHUwMDNjPSBkYXRhWzJdIFx1MDAyNlx1MDAyNiBkYXRhWzJdIFx1MDAzYz0gNztcbiA0NTA6XHRcbiA0NTE6XHRcdC8qIGNvbXByZXNzIHByb3RvY29sIGZpZWxkIGlmIG9wdGlvbiBlbmFibGVkICovXG4gNDUyOlx0XHRpZiAoZGF0YVswXSA9PSAwIFx1MDAyNlx1MDAyNiAoYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfUFJPVCkgXHUwMDI2XHUwMDI2ICFpc2xjcClcbiA0NTM6XHRcdFx0c2tiX3B1bGwoc2tiLDEpO1xuIDQ1NDpcdFxuIDQ1NTpcdFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xuIDQ1NjpcdFx0aWYgKChhcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9BQykgPT0gMCB8fCBpc2xjcCkge1xuIDQ1NzpcdFx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpXG4gNDU4Olx0XHRcdFx0Z290byBmcmVlX3NrYjtcbiA0NTk6XHRcbiA0NjA6XHRcdFx0c2tiX3B1c2goc2tiLDIpO1xuIDQ2MTpcdFx0XHRza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztcbiA0NjI6XHRcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XG4gNDYzOlx0XHR9XG4gNDY0Olx0XG4gNDY1Olx0XHRhcC1cdTAwM2VsYXN0X3htaXQgPSBqaWZmaWVzO1xuIDQ2NjpcdFxuIDQ2NzpcdFx0aWYgKHNrYiBcdTAwMjZcdTAwMjYgYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0xPR19PVVRQS1QpXG4gNDY4Olx0XHRcdHBwcF9wcmludF9idWZmZXIgKFwmIzM0O3NlbmQgYnVmZmVyXCYjMzQ7LCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gNDY5Olx0XG4gNDcwOlx0XHRyZXR1cm4gc2tiO1xuIDQ3MTpcdFxuIDQ3MjpcdGZyZWVfc2tiOlxuIDQ3MzpcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNDc0Olx0XHRyZXR1cm4gTlVMTDtcbiA0NzU6XHR9XG4gNDc2Olx0XG4gNDc3Olx0LypcbiA0Nzg6XHQgKiBUcmFuc21pdC1zaWRlIHJvdXRpbmVzLlxuIDQ3OTpcdCAqL1xuIDQ4MDpcdFxuIDQ4MTpcdC8qXG4gNDgyOlx0ICogU2VuZCBhIHBhY2tldCB0byB0aGUgcGVlciBvdmVyIGFuIHN5bmMgdHR5IGxpbmUuXG4gNDgzOlx0ICogUmV0dXJucyAxIGlmZiB0aGUgcGFja2V0IHdhcyBhY2NlcHRlZC5cbiA0ODQ6XHQgKiBJZiB0aGUgcGFja2V0IHdhcyBub3QgYWNjZXB0ZWQsIHdlIHdpbGwgY2FsbCBwcHBfb3V0cHV0X3dha2V1cFxuIDQ4NTpcdCAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cbiA0ODY6XHQgKi9cbiA0ODc6XHRzdGF0aWMgaW50XG4gNDg4Olx0cHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gNDg5Olx0e1xuIDQ5MDpcdFx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuIDQ5MTpcdFxuIDQ5MjpcdFx0cHBwX3N5bmNfcHVzaChhcCk7XG4gNDkzOlx0XG4gNDk0Olx0XHRpZiAodGVzdF9hbmRfc2V0X2JpdChYTUlUX0ZVTEwsIFx1MDAyNmFwLVx1MDAzZXhtaXRfZmxhZ3MpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIENhbGxlcnMgb2YgYHBwcF9zeW5jX3R4bXVuZ2VgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBwcHBfc3luY190eG11bmdlYC4gSXQmIzM5O3MgYSBwcmV0dHkgZ2VuZXJpYy1zb3VuZGluZyBuYW1lLCBzbyBkaXZpbmcgaW50byB0aGUgY29kZWJhc2UgaXMgdGhlIG9ubHkgcmVhbCB3YXkgZm9yd2FyZCBoZXJlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gcGlucG9pbnQgKndoZXJlKiBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSBpcyBsaWtlbHkgcmVsYXRlZCB0byBzeW5jaHJvbml6YXRpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHRyYW5zbWl0dGVkIGRhdGEgd2l0aGluIHRoZSBQUFAgZnJhbWV3b3JrLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgaW1tZWRpYXRlbHkgcHJvdmlkZSBpbnNpZ2h0IGludG8gd2hhdCBkYXRhIGlzIGJlaW5nIG11bmNoZWQsIHdoYXQgdGhlIHN5bmNocm9uaXphdGlvbiBjb25jZXJucyBhcmUsIGFuZCB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYXJvdW5kIHRoaXMgZnVuY3Rpb24uIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYXNvbiBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIHN0cmF0ZWdpZXMsIGFuZCBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIExvb2tpbmcgZm9yIHRoZSBjYWxsIHNpdGVzIGlzIHRoZSBmaXJzdCBlc3NlbnRpYWwgc3RlcDsgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBncmVwIG9yIHNvdXJjZSBjb2RlIG5hdmlnYXRpb24gdG9vbHMgdHVybiB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfc3luY190eG11bmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NTA9c3RydWN0IHN5bmNwcHAge1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTgyLSAqL1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODM6c3RhdGljIHN0cnVjdCBza19idWZmKiBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy04NC1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz00MzE9c3RhdGljIHN0cnVjdCBza19idWZmKlxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NDMyOnBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNDMzLXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz00ODg9cHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNDk1LVx0XHRyZXR1cm4gMDtcdC8qIGFscmVhZHkgZnVsbCAqL1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NDk2Olx0c2tiID0gcHBwX3N5bmNfdHhtdW5nZShhcCwgc2tiKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQ5Ny1cdGlmIChza2IgIT0gTlVMTClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzg4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlYnVnZ2luZyB0aGUgYHBwcF9zeW5jX3NlbmRgIENhbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBgcHBwX3N5bmNfc2VuZGAuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIG1ha2luZyB0aGUgY2FsbC4gVGltZSB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBlbmFibGVkLCBhbmQgc3BlY2lmaWNhbGx5LCB3aGF0JiMzOTtzIHJlbGF0ZWQgdG8gYHBwcF9zeW5jdHR5LmNgLiBLY29uZmlnIGlzIHRoZSBrZXkgaGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhpcyBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHBwX3N5bmN0dHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfUFBQX01QUEUpICYjNDM7PSBwcHBfbXBwZS5vXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1BQUF9TWU5DX1RUWSkgJiM0Mzs9IHBwcF9zeW5jdHR5Lm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfUFBQT1gpICYjNDM7PSBwcHBveC5vXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MTAyPXBwcF9wcmludF9idWZmZXIgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IF9fdTggKmJ1ZiwgaW50IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTEwNC1cdGlmIChuYW1lICE9IE5VTEwpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoxMDU6XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0O3BwcF9zeW5jdHR5OiAlcywgY291bnQgPSAlZFxcblwmIzM0OywgbmFtZSwgY291bnQpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTA2LVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTIwOD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyMDk6cHBwX3N5bmN0dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yMTAte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI4Nj1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX3N5bmNfbGRpc2MgPSB7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjkzLVx0LndyaXRlXHQ9IHBwcF9zeW5jX3dyaXRlLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6Mjk0Olx0LmlvY3RsXHQ9IHBwcF9zeW5jdHR5X2lvY3RsLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjk1LVx0LnJlY2VpdmVfYnVmID0gcHBwX3N5bmNfcmVjZWl2ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDI3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZW1iZWRkZWQgc3lzdGVtcyBleHBlcnQgZmFtaWxpYXIgd2l0aCBLY29uZmlnOgoKKipDaGVja2luZyB0aGUgUFBQX1NZTkNfVFRZIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzdGF0ZSBvZiBgUFBQX1NZTkNfVFRZYC4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gc3luY2hyb25vdXMgUFBQIGNvbm5lY3Rpb25zLCBwcm9iYWJseSBzZXJpYWwgaW50ZXJmYWNlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHBlcmhhcHMgY29uZGl0aW9uYWxseSBzZXQuIFdoZXJlIGRvZXMgdGhpcyBtb2R1bGUgc3RhbmQgbm93LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB3aGljaCBhcmNoaXRlY3R1cmUgYW5kIGtlcm5lbCB2ZXJzaW9ucyBJJiMzOTttIGRlYWxpbmcgd2l0aCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmcmFnbWVudC4gSG9wZWZ1bGx5LCB0aGUgc3ltYm9sIG5hbWUgaXMgcmVhc29uYWJseSBpbnR1aXRpdmUsIGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzdHJhaWdodGZvcndhcmQuIFRoaXMgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJIHByb2NlZWQgd2l0aCB3aGF0ZXZlciB0YXNrIEkgaGF2ZSBhdCBoYW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUFBfU1lOQ19UVFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE4Mz1jb25maWcgUFBQX0FTWU5DXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTk1LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTk2OmNvbmZpZyBQUFBfU1lOQ19UVFlcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O1BQUCBzdXBwb3J0IGZvciBzeW5jIHR0eSBwb3J0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzM4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgRmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoYXQgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgY29uZmlndXJlZCB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIGZvciB2YXJpYWJsZXMsIGxpa2VseSBib29sZWFuIG9yIHRyaXN0YXRlLCBtYXliZSBzb21lIHN0cmluZyBvciBpbnRlZ2VyIG9wdGlvbnMsIGFuZCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbS4gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBvciBkZWZhdWx0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgc2VsZWN0IHN0YXRlbWVudHMgcG9pbnRpbmcgYXQgYSBwYXJlbnQgY29uZmlnIHN5bWJvbD8gVGhlIGdvYWwgaXMgdG8gc2VlIHdoaWNoIGZlYXR1cmVzIGFyZSBjb25kaXRpb25hbGx5IGVuYWJsZWQgYW5kIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhhdCBiZWhhdmlvci4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBhcmVhIGluIHJlbGF0aW9uIHRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTA6XHRcdCAgbmVlZCB0aGlzIG9wdGlvbi5cbiAxOTE6XHRcbiAxOTI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAxOTM6XHRcbiAxOTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxOTU6XHRcbiAxOTY6XHRjb25maWcgUFBQX1NZTkNfVFRZXG4gMTk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcJiMzNDtcbiAxOTg6XHRcdGhlbHBcbiAxOTk6XHRcdCAgU2F5IFkgKG9yIE0pIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgUFBQIG92ZXIgc3luY2hyb25vdXNcbiAyMDA6XHRcdCAgKEhETEMpIHR0eSBkZXZpY2VzLiBUaGVzZSBkZXZpY2VzIGFyZSBvZnRlbiB1c2VkIGZvciBoaWdoLXNwZWVkIGxlYXNlZFxuIDIwMTpcdFx0ICBsaW5lcyBsaWtlIFQxL0UxLlxuIDIwMjpcdFxuIDIwMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDIwNDpcdFxuIDIwNTpcdGVuZGlmICMgVFRZXG4gMjA2Olx0XG4gMjA3Olx0ZW5kaWYgIyBQUFBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIwNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBQUFBfU1lOQ19UVFkgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBgUFBQX1NZTkNfVFRZYCBpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBzdG9wIHNob3VsZCBiZSB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBmb3IgY29uZmlndXJpbmcgUFBQLXJlbGF0ZWQgb3B0aW9ucywgYW5kIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHdoZXJlIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIHRleHQgZm9yIGtlcm5lbCBmZWF0dXJlcyByZXNpZGUuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgY29uc3RyYWludHMsIHRoZSBwYXJlbnQgZGVwZW5kZW5jaWVzLCB0aGF0IGRldGVybWluZSB3aGVuIGBQUFBfU1lOQ19UVFlgIHdpbGwgYmUgaW5jbHVkZWQgaW4gYSBidWlsZC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgUFBQXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgU0xIQ1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xuICAxMTpcdFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxuICAxMjpcdFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxuICAxMzpcdFx0ICBvdGhlcndpc2UgeW91IGNhbiYjMzk7dCB1c2UgaXQ7IG1vc3QgSW50ZXJuZXQgYWNjZXNzIHByb3ZpZGVycyB0aGVzZVxuICAxNDpcdFx0ICBkYXlzIHN1cHBvcnQgUFBQIHJhdGhlciB0aGFuIFNMSVAuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XG4gIDE3Olx0XHQgIFx1MDAzY2h0dHBzOi8vcHBwLnNhbWJhLm9yZ1x1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcbiAgMTg6XHRcdCAgcmVjb21tZW5kZWQgaW4gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcdTAwM2UuXG4gIDE5Olx0XHQgIFRoZSBQUFAgb3B0aW9uIGVubGFyZ2VzIHlvdXIga2VybmVsIGJ5IGFib3V0IDE2IEtCLlxuICAyMDpcdFxuICAyMTpcdFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcbiAgMjI6XHRcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcbiAgMjM6XHRcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxuICAyNDpcdFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXG4gIDI1Olx0XHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXG4gIDI2Olx0XHQgIHRoZSBuZXh0IG9wdGlvbiwgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0Oy4gIEZvciBQUFAgb3ZlclxuICAyNzpcdFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXCYjMzQ7U3VwcG9ydFxuICAyODpcdFx0ICBzeW5jaHJvbm91cyBQUFBcJiMzNDssIGJlbG93LlxuICAyOTpcdFxuICAzMDpcdFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFwmIzM0O1ZlcnNpb24gaW5mb3JtYXRpb24gb24gYWxsIHN5bWJvbHNcJiMzNDsgYWJvdmUsIHRoZW5cbiAgMzE6XHRcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcbiAgMzI6XHRcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cbiAgMzM6XHRcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cbiAgMzQ6XHRcbiAgMzU6XHRpZiBQUFBcbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgUFBQX0JTRENPTVBcbiAgMzg6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cJiMzNDtcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDMwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQUFAgS2NvbmZpZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgcmVsYXRlZCB0byBgaWYgVFRZYCB3aXRoaW4gdGhlIFBQUCBkcml2ZXImIzM5O3MgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgSSYjMzk7bGwgZmluZCBpdCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IGBDT05GSUdfYCBvcHRpb25zIHJlbGF0ZWQgdG8gdGVybWluYWwgc3VwcG9ydCBmb3IgUFBQIGFyZSBkZWZpbmVkLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgdG8gc2VlIGlmIHRlcm1pbmFsIHJlbGF0ZWQgb3B0aW9ucyBhcmUgZGVwZW5kZW50IG9uIGEgVFRZIGRldmljZS4gVGltZSB0byB0YWtlIGEgbG9vaywgYW5kIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlISBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgYmxvY2sgdGhhdCB0aWVzIHRoZSBUVFktcmVsYXRlZCBQUFAgZmVhdHVyZXMgdG8gd2hldGhlciBUVFkgc3VwcG9ydCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSB3ZWVkcywgYW5kIHNlZSB0aGUgZGV0YWlscyB0aGVyZS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VFRZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTczPWNvbmZpZyBQUFBPTDJUUFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE4MC1cdCAgdHVubmVscy4gTDJUUCBpcyByZXBsYWNpbmcgUFBUUCBmb3IgVlBOIHVzZXMuXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxODE6aWYgVFRZXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xODItXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xODM9Y29uZmlnIFBQUF9BU1lOQ1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5NS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE5Njpjb25maWcgUFBQX1NZTkNfVFRZXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0yMDQtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoyMDU6ZW5kaWYgIyBUVFlcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTIwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ4NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoaXMgY29kZSBzbmlwcGV0OgoKKipVbmRlcnN0YW5kaW5nIHRoZSBgUFBQX1NZTkNfVFRZYCBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgdGhlIGZ1bmN0aW9uYWxpdHkgcmVwcmVzZW50ZWQgYnkgYFBQUF9TWU5DX1RUWWAgaXMgY2xlYXJseSByZWxpYW50IG9uIGJvdGggdGhlIGBQUFBgIGFuZCBgVFRZYCBzdWJzeXN0ZW1zLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGUgYHBwcF9zeW5jdHR5YCBmdW5jdGlvbmFsaXR5IGlzIGFjdHVhbGx5IGludGVncmF0ZWQgYW5kIGhvdyB0aGUga2VybmVsIHJlYWNoZXMgaXQuCgpGaXJzdCwgSSBrbm93IGBwcHBfc3luY3R0eWAgaXMgZGVhbGluZyB3aXRoIHJlZ2lzdGVyaW5nIGEgVFRZIGxpbmUgZGlzY2lwbGluZS4gTXkgZm9jdXMgc2hvdWxkIGJlIHdoZXJlIHRoYXQgcmVnaXN0cmF0aW9uIGhhcHBlbnMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgZWl0aGVyIHRoZSBgcHBwX3N5bmNfaW5pdGAgZnVuY3Rpb24sIG9yIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgaW4gdGhlIGBwcHBfc3luY3R0eS5jYCBzb3VyY2UgY29kZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgc2hvdWxkIGJlIGhhcHBlbmluZywgd2hlcmUgdGhlIFRUWSBsaW5lIGRpc2NpcGxpbmUgaXMgbGlua2VkIGludG8gdGhlIHN5c3RlbS4gVGhpcyB3aWxsIHNob3cgbWUgdGhlIGVudHJ5IHBvaW50IGFuZCBob3cgdGhlIHBpZWNlcyBjb25uZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dHlfcmVnaXN0ZXJfbGRpc2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0zMDA9cHBwX3N5bmNfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTMwMy1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjMwNDpcdGVyciA9IHR0eV9yZWdpc3Rlcl9sZGlzYyhcdTAwMjZwcHBfc3luY19sZGlzYyk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0zMDUtXHRpZiAoZXJyICE9IDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBMaW5lIERpc2NpcGxpbmUgTWFuaXB1bGF0aW9uKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgaG93IGxpbmUgZGlzY2lwbGluZXMgYXJlIGNvbmZpZ3VyZWQgd2l0aGluIGEgc3lzdGVtLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGlvY3RsKGZkLCBUSU9DU0VURCwgTl9TWU5DX1BQUClgLCB3aGljaCBpcyB0aGUgc3lzdGVtIGNhbGwgZm9yLCBlc3NlbnRpYWxseSwgc3dhcHBpbmcgb3V0IHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sIG9uIGEgc3BlY2lmaWMgZmlsZSBkZXNjcmlwdG9yLCBpbiB0aGlzIGNhc2UsIGxpa2VseSBhIHBzZXVkby10ZXJtaW5hbCAocHR5KS4gVGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGF0ICphbnkqIHVucHJpdmlsZWdlZCB1c2VyIG9yIHByb2Nlc3MgdGhhdCBoYXMgYWNjZXNzIHRvIHRoZSBwdHkgY2FuIGV4ZWN1dGUgdGhpcyBjYWxsIHRvIHNldCB0aGUgbGluZSBkaXNjaXBsaW5lLiBUaGF0IHNvdW5kcyBsaWtlIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgcmlwZSBmb3IgZXhwbG9yYXRpb24uCgpBbmQsIGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgU3l6a2FsbGVyLCBhIHByb21pbmVudCBmdXp6ZXIsIHJvdXRpbmVseSB0ZXN0cyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2l0aCBkaXNjaXBsaW5lcyBsaWtlIGBOX1NZTkNfUFBQYCwgd2hpY2ggaGFzIGFuIGlkZW50aWZpZXIgb2YgMTQsIGFzIHRoZSBleGFtcGxlIG1lbnRpb25zLiBTbywgZ2l2ZW4gU3l6a2FsbGVyJiMzOTtzIHB1cnBvc2UsIHRoZXkgYXJlIGxpa2VseSBhdHRlbXB0aW5nIHRvIHRyaWdnZXIgY3Jhc2hlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKU28sIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCBkaXNjaXBsaW5lIG51bWJlciwgdG8gYmUgY2VydGFpbi4gV2Ugc2hvdWxkIGxvb2sgaW50byB3aGV0aGVyIHRoYXQgbnVtYmVyIGlzIHN0YW5kYXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfc3luY19sZGlzYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI3ND1wcHBfc3luY193YWtldXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yODUtXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyODY6c3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHBwcF9zeW5jX2xkaXNjID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjg3LVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTMwMD1wcHBfc3luY19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMzAzLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MzA0Olx0ZXJyID0gdHR5X3JlZ2lzdGVyX2xkaXNjKFx1MDAyNnBwcF9zeW5jX2xkaXNjKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTMwNS1cdGlmIChlcnIgIT0gMClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz02NDg9cHBwX3N5bmNfY2xlYW51cCh2b2lkKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNjQ5LXtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1MDpcdHR0eV91bnJlZ2lzdGVyX2xkaXNjKFx1MDAyNnBwcF9zeW5jX2xkaXNjKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTY1MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MDMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgbGRpc2NgIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBleGFtaW5pbmcgdGhvc2UgYGxkaXNjYCBvcGVyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyBhIG1lbnRhbCBjaGVja2xpc3QuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCBpcyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLCBhbmQgaG93IGlzIHRoZSBgbGRpc2NgIGJlaW5nIHVzZWQgd2l0aGluIGl0PyBJJiMzOTttIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgc3VjaCBhcyBob3cgdGhlIGxpbmUgZGlzY2lwbGluZSBhZmZlY3RzIGRhdGEgZmxvdywgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBhbnkgYXNzb2NpYXRlZCBpbnRlcnJ1cHQgaGFuZGxpbmcuCgpOZXh0LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0eXBpY2FsIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgYGxkaXNjYC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHN0YW5kYXJkIHRlcm1pbmFsLXN0eWxlIGRpc2NpcGxpbmUsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkIGxpa2UgYSBuZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIG9yIGV2ZW4gYSBjdXN0b20gaW1wbGVtZW50YXRpb24/IFRoZSBzcGVjaWZpYyBgbGRpc2NgIHdpbGwgZGljdGF0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwb2ludGVycywgYW5kIGFzc29jaWF0ZWQgY29udHJvbCBtZWNoYW5pc21zIHRoYXQgYXJlIGluIHBsYXkuIEFueSBvZGRpdHkgb3Igbm9uc3RhbmRhcmQgYXBwcm9hY2ggd291bGQgYmUgc2lnbmlmaWNhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIG9wZXJhdGlvbnMgcGVyZm9ybWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODA6XHRcdFx0cmV0dXJuO1xuIDI4MTpcdFx0c2V0X2JpdChYTUlUX1dBS0VVUCwgXHUwMDI2YXAtXHUwMDNleG1pdF9mbGFncyk7XG4gMjgyOlx0XHR0YXNrbGV0X3NjaGVkdWxlKFx1MDAyNmFwLVx1MDAzZXRzayk7XG4gMjgzOlx0fVxuIDI4NDpcdFxuIDI4NTpcdFxuIDI4NjpcdHN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyBwcHBfc3luY19sZGlzYyA9IHtcbiAyODc6XHRcdC5vd25lclx0PSBUSElTX01PRFVMRSxcbiAyODg6XHRcdC5udW1cdD0gTl9TWU5DX1BQUCxcbiAyODk6XHRcdC5uYW1lXHQ9IFwmIzM0O3BwcHN5bmNcJiMzNDssXG4gMjkwOlx0XHQub3Blblx0PSBwcHBfc3luY19vcGVuLFxuIDI5MTpcdFx0LmNsb3NlXHQ9IHBwcF9zeW5jX2Nsb3NlLFxuIDI5MjpcdFx0LnJlYWRcdD0gcHBwX3N5bmNfcmVhZCxcbiAyOTM6XHRcdC53cml0ZVx0PSBwcHBfc3luY193cml0ZSxcbiAyOTQ6XHRcdC5pb2N0bFx0PSBwcHBfc3luY3R0eV9pb2N0bCxcbiAyOTU6XHRcdC5yZWNlaXZlX2J1ZiA9IHBwcF9zeW5jX3JlY2VpdmUsXG4gMjk2Olx0XHQud3JpdGVfd2FrZXVwID0gcHBwX3N5bmNfd2FrZXVwLFxuIDI5NzpcdH07XG4gMjk4Olx0XG4gMjk5Olx0c3RhdGljIGludCBfX2luaXRcbiAzMDA6XHRwcHBfc3luY19pbml0KHZvaWQpXG4gMzAxOlx0e1xuIDMwMjpcdFx0aW50IGVycjtcbiAzMDM6XHRcbiAzMDQ6XHRcdGVyciA9IHR0eV9yZWdpc3Rlcl9sZGlzYyhcdTAwMjZwcHBfc3luY19sZGlzYyk7XG4gMzA1Olx0XHRpZiAoZXJyICE9IDApXG4gMzA2Olx0XHRcdHByaW50ayhLRVJOX0VSUiBcJiMzNDtQUFBfc3luYzogZXJyb3IgJWQgcmVnaXN0ZXJpbmcgbGluZSBkaXNjLlxcblwmIzM0OyxcbiAzMDc6XHRcdFx0ICAgICAgIGVycik7XG4gMzA4Olx0XHRyZXR1cm4gZXJyO1xuIDMwOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMDgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIFBQUCBTeW5jIENoYW5uZWwgQ3JlYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGhvdyBQUFAgZGF0YSB0cmFuc21pc3Npb24gaXMgYWN0dWFsbHkgaW5pdGlhdGVkLCBhbmQgdGhlIGtleSBmdW5jdGlvbiBhcHBlYXJzIHRvIGJlIGBwcHBfc3luY19vcGVuYC4gVGhlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIHByb2Nlc3MgZ2V0IG9mZiB0aGUgZ3JvdW5kPyBUaGUgdGV4dCBwb2ludHMgdXMgdG93YXJkIHRoZSBjcml0aWNhbCBzdGVwIG9mIGNoYW5uZWwgcmVnaXN0cmF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IG1lbnRpb25zIGBwcHBfc3luY19vcGVuYCBlc3RhYmxpc2hpbmcgYSBjaGFubmVsIGFuZCB0aGVuIHVzaW5nIGBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgmYW1wO2FwLSZndDtjaGFuKTtgLiBUaGlzIGlzIHdoZXJlIGl0IHN0YXJ0cyB0byBjbGljay4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGBwcHBfcmVnaXN0ZXJfY2hhbm5lbGAgaXMgdGhlIGNlbnRyYWwgbWVjaGFuaXNtIGZvciB0aGUgUFBQIHN0YWNrIHRvIGJlIGF3YXJlIG9mIHRoZSBuZXcgY2hhbm5lbCwgbWFraW5nIGl0IHJlYWR5IHRvIGhhbmRsZSBpbmNvbWluZyBhbmQgb3V0Z29pbmcgZGF0YS4gVGhlcmVmb3JlLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHBwcF9zeW5jX29wZW5gIGZ1bmN0aW9uIGl0c2VsZi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgaW4gdGhlcmUuIEkmIzM5O2xsIHJlYWQgaXQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdGFwLVx1MDAzZXJhY2NtID0gfjBVO1xuIDE0MTpcdFxuIDE0MjpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZhcC1cdTAwM2VycXVldWUpO1xuIDE0MzpcdFx0dGFza2xldF9zZXR1cChcdTAwMjZhcC1cdTAwM2V0c2ssIHBwcF9zeW5jX3Byb2Nlc3MpO1xuIDE0NDpcdFxuIDE0NTpcdFx0YXAtXHUwMDNlY2hhbi5wcml2YXRlID0gYXA7XG4gMTQ2Olx0XHRhcC1cdTAwM2VjaGFuLm9wcyA9IFx1MDAyNnN5bmNfb3BzO1xuIDE0NzpcdFx0YXAtXHUwMDNlY2hhbi5tdHUgPSBQUFBfTVJVO1xuIDE0ODpcdFx0YXAtXHUwMDNlY2hhbi5oZHJsZW4gPSAyO1x0LyogZm9yIEEvQyBieXRlcyAqL1xuIDE0OTpcdFx0c3BlZWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpO1xuIDE1MDpcdFx0YXAtXHUwMDNlY2hhbi5zcGVlZCA9IHNwZWVkO1xuIDE1MTpcdFx0ZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoXHUwMDI2YXAtXHUwMDNlY2hhbik7XG4gMTUyOlx0XHRpZiAoZXJyKVxuIDE1MzpcdFx0XHRnb3RvIG91dF9mcmVlO1xuIDE1NDpcdFxuIDE1NTpcdFx0dHR5LVx1MDAzZWRpc2NfZGF0YSA9IGFwO1xuIDE1NjpcdFx0dHR5LVx1MDAzZXJlY2VpdmVfcm9vbSA9IDY1NTM2O1xuIDE1NzpcdFx0cmV0dXJuIDA7XG4gMTU4Olx0XG4gMTU5Olx0IG91dF9mcmVlOlxuIDE2MDpcdFx0a2ZyZWUoYXApO1xuIDE2MTpcdCBvdXQ6XG4gMTYyOlx0XHRyZXR1cm4gZXJyO1xuIDE2MzpcdH1cbiAxNjQ6XHRcbiAxNjU6XHQvKlxuIDE2NjpcdCAqIENhbGxlZCB3aGVuIHRoZSB0dHkgaXMgcHV0IGludG8gYW5vdGhlciBsaW5lIGRpc2NpcGxpbmUgb3IgaXQgaGFuZ3MgdXAuXG4gMTY3Olx0ICogVGhpcyBjYWxsIGlzIHNlcmlhbGl6ZWQgYWdhaW5zdCBvdGhlciBsZGlzYyBmdW5jdGlvbnMuXG4gMTY4Olx0ICovXG4gMTY5Olx0c3RhdGljIHZvaWRcbiAxNzA6XHRwcHBfc3luY19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuIDE3MTpcdHtcbiAxNzI6XHRcdHN0cnVjdCBzeW5jcHBwICphcCA9IHR0eS1cdTAwM2VkaXNjX2RhdGE7XG4gMTczOlx0XG4gMTc0Olx0XHRpZiAoIWFwKVxuIDE3NTpcdFx0XHRyZXR1cm47XG4gMTc2Olx0XG4gMTc3Olx0XHR0dHktXHUwMDNlZGlzY19kYXRhID0gTlVMTDtcbiAxNzg6XHRcdHRhc2tsZXRfa2lsbChcdTAwMjZhcC1cdTAwM2V0c2spO1xuIDE3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byBgc3luY19vcHNgKioKCkhtbSwgYHN5bmNfb3BzYC4uLiB0aGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gcmlnaHQgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgdGVybSByZWZlcnMgdG8sIHdoYXQgaXQgZW5jb21wYXNzZXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgbXkgaW50ZXJuYWwgZG9jdW1lbnRhdGlvbiwgbWF5YmUgc29tZSBjb2RlIG9yIGV2ZW4gdGhlIGxhdGVzdCBSRkNzIGlmIGl0IHNlZW1zIGltcG9ydGFudCwgaW4gb3JkZXIgdG8gZ2V0IGEgY2xlYXIgZGVmaW5pdGlvbiBvZiBgc3luY19vcHNgLiBJIG5lZWQgdG8gZW5zdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBpcyBzb2xpZCBiZWZvcmUgSSBwcm9jZWVkLiBXaGF0IG9wZXJhdGlvbnMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgZXhhY3RseT8gQXJlIHRoZXNlIHJlbGF0ZWQgdG8gc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgY2hlY2sgc2hvdWxkIGdpdmUgbWUgdGhlIGZvdW5kYXRpb24gSSBuZWVkIHRvIHByb2NlZWQgY29uZmlkZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5bmNfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9OTA9c3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtOTItXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo5MzpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTk0LVx0LnN0YXJ0X3htaXQgPSBwcHBfc3luY19zZW5kLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTExOT1wcHBfc3luY19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTQ1LVx0YXAtXHUwMDNlY2hhbi5wcml2YXRlID0gYXA7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoxNDY6XHRhcC1cdTAwM2VjaGFuLm9wcyA9IFx1MDAyNnN5bmNfb3BzO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTQ3LVx0YXAtXHUwMDNlY2hhbi5tdHUgPSBQUFBfTVJVO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYwNgoJCQkJCQkJb3V0cHV0OiAxNTMKCQkJCQkJCXRob3VnaHRzOiAyMzE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBQUCBTeW5jaHJvbm91cyBUVFkgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggY2F1Z2h0IG15IGV5ZS4gSXQgdG91Y2hlcyB0aGUgUFBQIHN5bmNocm9ub3VzIFRUWSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYHBwcF9zeW5jX3R4bXVuZ2VgIGZ1bmN0aW9uLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBldmVuIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZnV6emluZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYHBwcF9zeW5jX3NlbmRgIGNhbGxpbmcgYHBwcF9zeW5jX3R4bXVuZ2VgIHdoZW4gcGFja2V0cyBhcmUgc2VudCBvbiB0aGUgUFBQIHVuaXQsIHdoaWNoIGNhbiBoYXBwZW4gdGhyb3VnaCBQUFAgaW9jdGxzIG9yIHN0YW5kYXJkIHdyaXRlcy4KClRoZSBwYXRjaCBpdHNlbGYgaXMgYSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcuIEl0IGNvbnNvbGlkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYHBwcF9zeW5jX3R4bXVuZ2VgIGJ5IHJlcGxhY2luZyByZWR1bmRhbnQgYGtmcmVlX3NrYmAgYW5kIGByZXR1cm4gTlVMTGAgY2FsbHMgd2l0aCBhIGBnb3RvIGZyZWVfc2tiYCBsYWJlbC4gV2hpbGUgdGhpcyBtaWdodCBsb29rIGxpa2UgYSAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlJiMzNDsgY2xlYW51cCwgSSBrbm93IGJldHRlciB0aGFuIHRvIGJsaW5kbHkgdHJ1c3QgdGhhdC4gUmVmYWN0b3JpbmdzLCBlc3BlY2lhbGx5IHRob3NlIHRvdWNoaW5nIGVycm9yIHBhdGhzIG9yIGRhdGEgZmxvdywgaGF2ZSBhIGtuYWNrIGZvciB1bmNvdmVyaW5nIGxhdGVudCBidWdzIG9yIHN1YnRseSBhbHRlcmluZyBiZWhhdmlvci4gVGhlIGtleSBoZXJlIGlzIHRoZSBtb2RpZmljYXRpb24gaXMgaW4gYSByZWFjaGFibGUgZHJpdmVyIGZ1bmN0aW9uLgoKTG9va2luZyBhdCB0aGUgZ3VpZGVsaW5lcywgdGhpcyBkZWZpbml0ZWx5IHF1YWxpZmllcyBhcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBhIHJlYWNoYWJsZSBkcml2ZXIsIGFuZCB0aGUgcmVmYWN0b3JpbmcgdG91Y2hlcyBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdy4gVGhlcmUgYXJlIG5vIG5lZ2F0aXZlIGNyaXRlcmlhIHRoYXQgYXBwbHkgaGVyZTogbm8gdW5yZWFjaGFibGUgaGFyZHdhcmUsIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMsIG9yIHBhdGhzIHRoYXQgYXJlIG5ldmVyIHRha2VuLiBUaHVzLCBpdCBtZWV0cyB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIHNwZWNpZmljYWxseSAmIzM0O1JlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwcyYjMzQ7IGFuZCAmIzM0O1JlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHMmIzM0Oy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZnV6emluZyB0YXJnZXRzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYHBwcF9zeW5jX3R4bXVuZ2VgIGl0c2VsZiwgd2hpY2ggaXMgY2FsbGVkIGRpcmVjdGx5IGJ5IGBwcHBfc3luY19zZW5kYC4gQm90aCBhcmUgZGVmaW5lZCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jYCBhbmQgY2FuIGJlIHVzZWQgZm9yIGNvdmVyYWdlLiBXZSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYm90aCBgUFBQYCBhbmQgYFBQUF9TWU5DX1RUWWAgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbG9uZyB3aXRoIHRoZSBzdGFuZGFyZCBgVFRZYC4KClRoZXJlZm9yZSwgdGhlIGZvbGxvd2luZyBpcyB0aGUgZmluYWwgY29uY2x1c2lvbi4KCmBgYGpzb24KewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGVycm9yLWhhbmRsaW5nIHBhdGhzIGluIGBwcHBfc3luY190eG11bmdlKClgIGluIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AgYnkgY29uc29saWRhdGluZyBTS0IgZnJlZSBhbmQgTlVMTCByZXR1cm4gbG9naWMgaW50byBhIHNpbmdsZSBgZnJlZV9za2JgIGxhYmVsLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBUVFkgbGluZSBkaXNjaXBsaW5lIHN3aXRjaGluZyAoTl9TWU5DX1BQUCkgb24gc3RhbmRhcmQgcHNldWRvLXRlcm1pbmFscyAocHR5KSB3aXRob3V0IHJlcXVpcmluZyBkZWRpY2F0ZWQgaGFyZHdhcmUuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSB0aGUgcmVmYWN0b3JlZCB0cmFuc21pc3Npb24gcGF0aCBhbmQgc2tiIGhhbmRsaW5nIG1haW50YWluIHByb3BlciBsaWZlY3ljbGUgc2VtYW50aWNzLiYjMzQ7LAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwX3N5bmNfdHhtdW5nZSYjMzQ7LAogICAgJiMzNDtwcHBfc3luY19zZW5kJiMzNDsKICBdLAogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUF9TWU5DX1RUWSYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7VFRZJiMzNDsKICBdCn0KYGBgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFBfU1lOQ19UVFkmIzM0OywKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcF9zeW5jX3R4bXVuZ2UmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gcHBwX3N5bmNfdHhtdW5nZSgpIHdpdGhpbiBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBieSByb3V0aW5nIHBhY2tldCBkcm9wIGNhc2VzIHRvIGEgc2hhcmVkIGZyZWVfc2tiIGxhYmVsLiBUaGlzIGNvZGUgaXMgZXhlY3V0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHRoZSBOX1NZTkNfUFBQIFRUWSBsaW5lIGRpc2NpcGxpbmUgb3ZlciBwdHlzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoZSByZWZhY3RvcmVkIGZyYW1lIGVuY2Fwc3VsYXRpb24gYW5kIHNrYiBoYW5kbGluZyBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFBfU1lOQ19UVFkmIzM0OywKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcF9zeW5jX3R4bXVuZ2UmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gcHBwX3N5bmNfdHhtdW5nZSgpIHdpdGhpbiBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBieSByb3V0aW5nIHBhY2tldCBkcm9wIGNhc2VzIHRvIGEgc2hhcmVkIGZyZWVfc2tiIGxhYmVsLiBUaGlzIGNvZGUgaXMgZXhlY3V0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHRoZSBOX1NZTkNfUFBQIFRUWSBsaW5lIGRpc2NpcGxpbmUgb3ZlciBwdHlzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoZSByZWZhY3RvcmVkIGZyYW1lIGVuY2Fwc3VsYXRpb24gYW5kIHNrYiBoYW5kbGluZyBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIGluIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AgdGhhdCBjb25zb2xpZGF0ZXMgZHVwbGljYXRlIGVycm9yIGhhbmRsaW5nIHBhdGhzIChga2ZyZWVfc2tiKHNrYik7IHJldHVybiBOVUxMO2ApIGludG8gYSBjb21tb24gYGdvdG8gZnJlZV9za2I7YCBleGl0IGxhYmVsLlxuXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGFsdGVyIGhvdyBidWZmZXJzIGFyZSByZWFkLCB3cml0dGVuLCBvciBib3VuZHMtY2hlY2tlZCwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLlxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBLQVNBTiBjb3ZlcnMgYW55IHNrYiBsaWZldGltZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUpLCB0aG91Z2ggdGhlIHBhdGNoIGRvZXMgbm90IGNoYW5nZSBza2IgbGlmZXRpbWUgb3IgZXJyb3IgaGFuZGxpbmcgc2VtYW50aWNzIGF0IGFsbC5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0OGE3NWRmMmNjODVjZjRhODZkYjg5ZDRiNTc2MzIwOWQwZmYxNTkzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMTE6MDQ6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCmluZGV4IGViZDYyYTdhYjU0YjMuLjllNDQwZTExMGU5ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCkBAIC00MzYsMTAgJiM0Mzs0MzYsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpbnQgaXNsY3A7CiAKIAkvKiBFbnN1cmUgd2UgY2FuIHNhZmVseSBhY2Nlc3MgcHJvdG9jb2wgZmllbGQgYW5kIExDUCBjb2RlICovCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMykpIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiBOVUxMOwotCX0KJiM0MzsJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMykpCiYjNDM7CQlnb3RvIGZyZWVfc2tiOwomIzQzOwogCWRhdGEgID0gc2tiLSZndDtkYXRhOwogCXByb3RvID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEpOwogCkBAIC00NTUsMTAgJiM0Mzs0NTQsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCS8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoKGFwLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7Ci0JCWlmIChza2JfY293X2hlYWQoc2tiLCAyKSkgewotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQomIzQzOwkJaWYgKHNrYl9jb3dfaGVhZChza2IsIDIpKQomIzQzOwkJCWdvdG8gZnJlZV9za2I7CiYjNDM7CiAJCXNrYl9wdXNoKHNrYiwyKTsKIAkJc2tiLSZndDtkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TOwogCQlza2ItJmd0O2RhdGFbMV0gPSBQUFBfVUk7CkBAIC00NzAsNiAmIzQzOzQ2OCwxMCBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJcHBwX3ByaW50X2J1ZmZlciAoJiMzNDtzZW5kIGJ1ZmZlciYjMzQ7LCBza2ItJmd0O2RhdGEsIHNrYi0mZ3Q7bGVuKTsKIAogCXJldHVybiBza2I7CiYjNDM7CiYjNDM7ZnJlZV9za2I6CiYjNDM7CWtmcmVlX3NrYihza2IpOwomIzQzOwlyZXR1cm4gTlVMTDsKIH0KIAogLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA2MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBkZWNpZGUgaWYgaXQgd2FycmFudHMgZmlyaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0JiMzOTtzIHNlZS4uLiBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGluIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AuIFJpZ2h0LCB0aGF0JiMzOTtzIHJlbGF0ZWQgdG8gc3luY2hyb25vdXMgUFBQLiBJJiMzOTttIGZhbWlsaWFyIHdpdGggdGhhdCBjb2RlLCBzbyBJIGNhbiBwcm9iYWJseSBxdWlja2x5IGFzc2VzcyB0aGUgY2hhbmdlcy4KClRoZSBkaWZmIGludHJvZHVjZXMgYSBgZnJlZV9za2JgIGxhYmVsIGFuZCB1c2VzIGl0IGluIHR3byBwbGFjZXMgd2hlcmUgdGhlIGNvZGUgcHJldmlvdXNseSBjYWxsZWQgYGtmcmVlX3NrYihza2IpYCBkaXJlY3RseS4gVGhpcyByZWZhY3RvcmluZyBjbGVhcmx5IGFpbXMgdG8gcmVkdWNlIGNvZGUgZHVwbGljYXRpb24gYW5kIGltcHJvdmUgcmVhZGFiaWxpdHkuIFRoZSBjb3JlIGxvZ2ljIGFyb3VuZCB2YWxpZGF0aW5nIHRoZSBwYWNrZXQmIzM5O3Mgc3RydWN0dXJlIHVzaW5nIGBwc2tiX21heV9wdWxsYCBhbmQgY29uZGl0aW9uYWxseSBwcmVwZW5kaW5nIGFkZHJlc3MvY29udHJvbCBmaWVsZHMgYmFzZWQgb24gYFNDX0NPTVBfQUNgIGFuZCBgaXNsY3BgIGRvZXNuJiMzOTt0ICphcHBlYXIqIHRvIGJlIG1vZGlmaWVkIGluIGFueSBmdW5kYW1lbnRhbCB3YXkuCgpIb3dldmVyLCB0aGUgY2hhbmdlIGRvZXMgaW52b2x2ZSBtYW5pcHVsYXRpbmcgYHNrX2J1ZmZgIHN0cnVjdHVyZXMsIGluY2x1ZGluZyBwb3NzaWJsZSBjYWxscyB0byBgc2tiX2Nvd19oZWFkYC4gV2hpbGUgdGhlIGNvZGUgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQsIHRoZSBtb3ZlIHRvIGEgYGdvdG9gIGJhc2VkIGVycm9yIGhhbmRsaW5nIHNjaGVtZSBkb2VzIGludHJvZHVjZSBhIG5ldyBjb250cm9sIGZsb3csIGFuZCBpdOKAmXMgYWx3YXlzIHdvcnRoIGNoZWNraW5nIHRob3NlIGZvciBzdWJ0bGUgZmxhd3Mgb3IgbWlzc2VkIGNvbmRpdGlvbnMuIEl04oCZcyBhbHNvIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGBwc2tiX21heV9wdWxsYCBhbmQgYHNrYl9jb3dfaGVhZGAgY2FuIGJlIHRyaWNreSB0byByZWFzb24gYWJvdXQgaW4gdGVybXMgb2YgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBtZW1vcnkuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBuZXR3b3JrIHBhY2tldCBoYW5kbGluZywgZXZlbiBhIHNlZW1pbmdseSBtaW5vciBjaGFuZ2UgbGlrZSB0aGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIFNvLCB5ZWFoLCBJJiMzOTtkIHNheSB0aGlzIGlzIHdvcnRoIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uIFRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGlzIGFsd2F5cyBwcmVzZW50IHdoZW4gZGVhbGluZyB3aXRoIHBhY2tldCBwcm9jZXNzaW5nLiBMZXQmIzM5O3MgZmlyZSBpdCB1cCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEl0IGlzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBwZXJmb3JtIGEgZGVlcGVyIGFuYWx5c2lzIG9uIG5ldHdvcmsgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0fVxuIDQyNjpcdFxuIDQyNzpcdC8qXG4gNDI4Olx0ICogUHJvY2VkdXJlcyBmb3IgZW5jYXBzdWxhdGlvbiBhbmQgZnJhbWluZy5cbiA0Mjk6XHQgKi9cbiA0MzA6XHRcbiA0MzE6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYqXG4gNDMyOlx0cHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gNDMzOlx0e1xuIDQzNDpcdFx0aW50IHByb3RvO1xuIDQzNTpcdFx0dW5zaWduZWQgY2hhciAqZGF0YTtcbiA0MzY6XHRcdGludCBpc2xjcDtcbiA0Mzc6XHRcbiA0Mzg6XHRcdC8qIEVuc3VyZSB3ZSBjYW4gc2FmZWx5IGFjY2VzcyBwcm90b2NvbCBmaWVsZCBhbmQgTENQIGNvZGUgKi9cbiA0Mzk6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDMpKVxuIDQ0MDpcdFx0XHRnb3RvIGZyZWVfc2tiO1xuIDQ0MTpcdFxuIDQ0MjpcdFx0ZGF0YSAgPSBza2ItXHUwMDNlZGF0YTtcbiA0NDM6XHRcdHByb3RvID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEpO1xuIDQ0NDpcdFxuIDQ0NTpcdFx0LyogTENQIHBhY2tldHMgd2l0aCBjb2RlcyBiZXR3ZWVuIDEgKGNvbmZpZ3VyZS1yZXF1ZXN0KVxuIDQ0NjpcdFx0ICogYW5kIDcgKGNvZGUtcmVqZWN0KSBtdXN0IGJlIHNlbnQgYXMgdGhvdWdoIG5vIG9wdGlvbnNcbiA0NDc6XHRcdCAqIGhhdmUgYmVlbiBuZWdvdGlhdGVkLlxuIDQ0ODpcdFx0ICovXG4gNDQ5Olx0XHRpc2xjcCA9IHByb3RvID09IFBQUF9MQ1AgXHUwMDI2XHUwMDI2IDEgXHUwMDNjPSBkYXRhWzJdIFx1MDAyNlx1MDAyNiBkYXRhWzJdIFx1MDAzYz0gNztcbiA0NTA6XHRcbiA0NTE6XHRcdC8qIGNvbXByZXNzIHByb3RvY29sIGZpZWxkIGlmIG9wdGlvbiBlbmFibGVkICovXG4gNDUyOlx0XHRpZiAoZGF0YVswXSA9PSAwIFx1MDAyNlx1MDAyNiAoYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfUFJPVCkgXHUwMDI2XHUwMDI2ICFpc2xjcClcbiA0NTM6XHRcdFx0c2tiX3B1bGwoc2tiLDEpO1xuIDQ1NDpcdFxuIDQ1NTpcdFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xuIDQ1NjpcdFx0aWYgKChhcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9BQykgPT0gMCB8fCBpc2xjcCkge1xuIDQ1NzpcdFx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpXG4gNDU4Olx0XHRcdFx0Z290byBmcmVlX3NrYjtcbiA0NTk6XHRcbiA0NjA6XHRcdFx0c2tiX3B1c2goc2tiLDIpO1xuIDQ2MTpcdFx0XHRza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztcbiA0NjI6XHRcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XG4gNDYzOlx0XHR9XG4gNDY0Olx0XG4gNDY1Olx0XHRhcC1cdTAwM2VsYXN0X3htaXQgPSBqaWZmaWVzO1xuIDQ2NjpcdFxuIDQ2NzpcdFx0aWYgKHNrYiBcdTAwMjZcdTAwMjYgYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0xPR19PVVRQS1QpXG4gNDY4Olx0XHRcdHBwcF9wcmludF9idWZmZXIgKFwmIzM0O3NlbmQgYnVmZmVyXCYjMzQ7LCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gNDY5Olx0XG4gNDcwOlx0XHRyZXR1cm4gc2tiO1xuIDQ3MTpcdFxuIDQ3MjpcdGZyZWVfc2tiOlxuIDQ3MzpcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNDc0Olx0XHRyZXR1cm4gTlVMTDtcbiA0NzU6XHR9XG4gNDc2Olx0XG4gNDc3Olx0LypcbiA0Nzg6XHQgKiBUcmFuc21pdC1zaWRlIHJvdXRpbmVzLlxuIDQ3OTpcdCAqL1xuIDQ4MDpcdFxuIDQ4MTpcdC8qXG4gNDgyOlx0ICogU2VuZCBhIHBhY2tldCB0byB0aGUgcGVlciBvdmVyIGFuIHN5bmMgdHR5IGxpbmUuXG4gNDgzOlx0ICogUmV0dXJucyAxIGlmZiB0aGUgcGFja2V0IHdhcyBhY2NlcHRlZC5cbiA0ODQ6XHQgKiBJZiB0aGUgcGFja2V0IHdhcyBub3QgYWNjZXB0ZWQsIHdlIHdpbGwgY2FsbCBwcHBfb3V0cHV0X3dha2V1cFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzQwCgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDU1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFJlZmFjdG9yaW5nKioKCkFscmlnaHQsIHRoaXMgcGF0Y2guLi4gaXQmIzM5O3MgYSBwdXJlIHJlZmFjdG9yaW5nLCBhIHNpbXBsZSBjbGVhbnVwLiBJdCYjMzk7cyB0YWtpbmcgdHdvIGluc3RhbmNlcyBvZiB0aGF0IGBpZiB7IGtmcmVlX3NrYihza2IpOyByZXR1cm4gTlVMTDsgfWAgcGF0dGVybiBhbmQgcmVwbGFjaW5nIHRoZW0gd2l0aCBhIGBnb3RvIGZyZWVfc2tiO2Agd2hpY2ggdGhlbiBoYW5kbGVzIHRoZSBga2ZyZWVfc2tiKHNrYik7IHJldHVybiBOVUxMO2AgbG9naWMuIFRvdGFsbHkgZXF1aXZhbGVudCBzZW1hbnRpY3MsIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBzdWJ0bGUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoaW5ncyBsaWtlIGBwc2tiX21heV9wdWxsKClgIGFuZCBgc2tiX2Nvd19oZWFkKClgLCBmb2xsb3dlZCBieSB0aGUgZWFybHkgZXhpdC4gVGhlIGFmdGVyIGxvb2tzIGxpa2UgdGhlIGJlZm9yZSwganVzdCB3aXRoIHRoZSBgZ290b2AuIEFuZCwgeWVhaCwgYGZyZWVfc2tiOmAgaXMgZG9pbmcgZXhhY3RseSB3aGF0IGl0IHdhcyBkb2luZyBiZWZvcmU6IGZyZWVpbmcgdGhlIFNLQiBhbmQgcmV0dXJuaW5nIE5VTEwuIFRoZSBjb250cm9sIGZsb3cgYW5kIGV4ZWN1dGlvbiBhcmUgMTAwJSBpZGVudGljYWwuCgpEb2VzIHRoaXMgaW50cm9kdWNlIHNvbWUgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s/IE5vcGUsIGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdC4gRGVmaW5pdGVseSBub3QuIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgdGhlIGluc3RydWN0aW9ucyBvbiB0aGlzIG5haWxlZCBkb3duLCB3aGF0IHdlIG5lZWQgdG8gcHJvZHVjZToKCiogICBVc2Ugc2V0LXJlc3VsdHMgdG9vbCBmb3IgdGhlIGFuYWx5c2lzIHJlc3VsdHMuIEdvdCBpdC4KKiAgIEtNU0FOUmVhc29uaW5nOiBDb250cmFzdCBLTVNBTiB2cyBLQVNBTi4KKiAgIE5lZWRzS01TQU46IEZhbHNlLgoKSGVyZSYjMzk7cyBob3cgSSB3b3VsZCB3cml0ZSB0aGlzIHVwIHByb2Zlc3Npb25hbGx5OgoKMS4gICoqRGVzY3JpYmUgdGhlIENoYW5nZToqKiBUaGlzIHBhdGNoIGNvbnNvbGlkYXRlcyByZWR1bmRhbnQgZXJyb3IgZXhpdCBwYXRocyBpbiB0aGUgYHBwcF9zeW5jX3R4bXVuZ2UoKWAgZnVuY3Rpb24uIFdlJiMzOTtyZSB1c2luZyBhIGBnb3RvIGZyZWVfc2tiO2AgY2xlYW51cCBsYWJlbCB0byBtYWtlIHRoZSBjb2RlIGNsZWFuZXIuCjIuICAqKktNU0FOIFJlbGV2YW5jZToqKiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgbWVzcyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nLCBzdGFjay9oZWFwIGluaXRpYWxpemF0aW9uLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzIHBhdGhzLiBUaGUgbG9naWMgYW5kIGNvbnRyb2wgZmxvdyBhcmUgdW5jaGFuZ2VkLiBObyBpbXBhY3QuCjMuICAqKktBU0FOL1N0YW5kYXJkIERldGVjdG9yczoqKiBObyBuZXcgbWVtb3J5IHNhZmV0eSBoYXphcmRzIGFyZSBpbnRyb2R1Y2VkLiBJZiB0aGVyZSAqd2VyZSogU0tCIG1hbmFnZW1lbnQgcHJvYmxlbXMsIGxpa2UgZG91YmxlLWZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBLQVNBTiB3b3VsZCBjYXRjaCB0aGVtLCBidXQgdGhlIGNsZWFudXAmIzM5O3Mgc3RpbGwgdGhlIHNhbWUuCjQuICAqKkNvbmNsdXNpb246KiogV2UgZG9uJiMzOTt0IG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGZvciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jYCB0aGF0IGNvbnNvbGlkYXRlcyBkdXBsaWNhdGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMgKGBrZnJlZV9za2Ioc2tiKTsgcmV0dXJuIE5VTEw7YCkgaW50byBhIGNvbW1vbiBgZ290byBmcmVlX3NrYjtgIGV4aXQgbGFiZWwuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgZG9lcyBub3QgYWx0ZXIgaG93IGJ1ZmZlcnMgYXJlIHJlYWQsIHdyaXR0ZW4sIG9yIGJvdW5kcy1jaGVja2VkLCBhbmQgZG9lcyBub3QgZXhwb3NlIG9yIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFN0YW5kYXJkIEtBU0FOIGNvdmVycyBhbnkgc2tiIGxpZmV0aW1lIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSksIHRob3VnaCB0aGUgcGF0Y2ggZG9lcyBub3QgY2hhbmdlIHNrYiBsaWZldGltZSBvciBlcnJvciBoYW5kbGluZyBzZW1hbnRpY3MgYXQgYWxsLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgIHRoYXQgY29uc29saWRhdGVzIGR1cGxpY2F0ZSBlcnJvciBoYW5kbGluZyBwYXRocyAoYGtmcmVlX3NrYihza2IpOyByZXR1cm4gTlVMTDtgKSBpbnRvIGEgY29tbW9uIGBnb3RvIGZyZWVfc2tiO2AgZXhpdCBsYWJlbC5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBkb2VzIG5vdCBhbHRlciBob3cgYnVmZmVycyBhcmUgcmVhZCwgd3JpdHRlbiwgb3IgYm91bmRzLWNoZWNrZWQsIGFuZCBkb2VzIG5vdCBleHBvc2Ugb3IgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy5cbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgS0FTQU4gY292ZXJzIGFueSBza2IgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlKSwgdGhvdWdoIHRoZSBwYXRjaCBkb2VzIG5vdCBjaGFuZ2Ugc2tiIGxpZmV0aW1lIG9yIGVycm9yIGhhbmRsaW5nIHNlbWFudGljcyBhdCBhbGwuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNDowOS40OTc4Mzk0NjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI4MTQxNzI1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQX1NZTkNfVFRZXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlRUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcF9zeW5jX3R4bXVuZ2VcIixcbiAgICBcInBwcF9zeW5jX3NlbmRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgIHRoYXQgY29uc29saWRhdGVzIGR1cGxpY2F0ZSBlcnJvciBoYW5kbGluZyBwYXRocyAoYGtmcmVlX3NrYihza2IpOyByZXR1cm4gTlVMTDtgKSBpbnRvIGEgY29tbW9uIGBnb3RvIGZyZWVfc2tiO2AgZXhpdCBsYWJlbC5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGFsdGVyIGhvdyBidWZmZXJzIGFyZSByZWFkLCB3cml0dGVuLCBvciBib3VuZHMtY2hlY2tlZCwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLlxcbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgS0FTQU4gY292ZXJzIGFueSBza2IgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlKSwgdGhvdWdoIHRoZSBwYXRjaCBkb2VzIG5vdCBjaGFuZ2Ugc2tiIGxpZmV0aW1lIG9yIGVycm9yIGhhbmRsaW5nIHNlbWFudGljcyBhdCBhbGwuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBlcnJvci1oYW5kbGluZyBwYXRoIGluIHBwcF9zeW5jX3R4bXVuZ2UoKSB3aXRoaW4gZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYnkgcm91dGluZyBwYWNrZXQgZHJvcCBjYXNlcyB0byBhIHNoYXJlZCBmcmVlX3NrYiBsYWJlbC4gVGhpcyBjb2RlIGlzIGV4ZWN1dGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSB0aGUgTl9TWU5DX1BQUCBUVFkgbGluZSBkaXNjaXBsaW5lIG92ZXIgcHR5cy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGUgcmVmYWN0b3JlZCBmcmFtZSBlbmNhcHN1bGF0aW9uIGFuZCBza2IgaGFuZGxpbmcgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6MDkuNDk3ODQzOTg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk3NDAzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0OGE3NWRmMmNjODVjZjRhODZkYjg5ZDRiNTc2MzIwOWQwZmYxNTkzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDExOjA0OjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcXG5pbmRleCBlYmQ2MmE3YWI1NGIzLi45ZTQ0MGUxMTBlOWYwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcXG5AQCAtNDM2LDEwICs0MzYsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0aW50IGlzbGNwO1xcbiBcXG4gXFx0LyogRW5zdXJlIHdlIGNhbiBzYWZlbHkgYWNjZXNzIHByb3RvY29sIGZpZWxkIGFuZCBMQ1AgY29kZSAqL1xcbi1cXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAzKSkge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdH1cXG4rXFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMykpXFxuK1xcdFxcdGdvdG8gZnJlZV9za2I7XFxuK1xcbiBcXHRkYXRhICA9IHNrYi1cXHUwMDNlZGF0YTtcXG4gXFx0cHJvdG8gPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7XFxuIFxcbkBAIC00NTUsMTAgKzQ1NCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xcbiBcXHRpZiAoKGFwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0NPTVBfQUMpID09IDAgfHwgaXNsY3ApIHtcXG4tXFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIDIpKSB7XFxuLVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi1cXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpXFxuK1xcdFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuK1xcbiBcXHRcXHRza2JfcHVzaChza2IsMik7XFxuIFxcdFxcdHNrYi1cXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztcXG4gXFx0XFx0c2tiLVxcdTAwM2VkYXRhWzFdID0gUFBQX1VJO1xcbkBAIC00NzAsNiArNDY4LDEwIEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRwcHBfcHJpbnRfYnVmZmVyIChcXFwic2VuZCBidWZmZXJcXFwiLCBza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuKTtcXG4gXFxuIFxcdHJldHVybiBza2I7XFxuK1xcbitmcmVlX3NrYjpcXG4rXFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbiAvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNDoxMC4wMDgyODMxMDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExODg2NDg2NDczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBfU1lOQ19UVFlcIixcbiAgICBcIlBQUFwiLFxuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwX3N5bmNfdHhtdW5nZVwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXJyb3ItaGFuZGxpbmcgcGF0aCBpbiBwcHBfc3luY190eG11bmdlKCkgd2l0aGluIGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGJ5IHJvdXRpbmcgcGFja2V0IGRyb3AgY2FzZXMgdG8gYSBzaGFyZWQgZnJlZV9za2IgbGFiZWwuIFRoaXMgY29kZSBpcyBleGVjdXRhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdGhlIE5fU1lOQ19QUFAgVFRZIGxpbmUgZGlzY2lwbGluZSBvdmVyIHB0eXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIHJlZmFjdG9yZWQgZnJhbWUgZW5jYXBzdWxhdGlvbiBhbmQgc2tiIGhhbmRsaW5nIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDhhNzVkZjJjYzg1Y2Y0YTg2ZGI4OWQ0YjU3NjMyMDlkMGZmMTU5M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDExOjA0OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuaW5kZXggZWJkNjJhN2FiNTRiMy4uOWU0NDBlMTEwZTlmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuQEAgLTQzNiwxMCArNDM2LDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpbnQgaXNsY3A7XG4gXG4gXHQvKiBFbnN1cmUgd2UgY2FuIHNhZmVseSBhY2Nlc3MgcHJvdG9jb2wgZmllbGQgYW5kIExDUCBjb2RlICovXG4tXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAzKSkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXHR9XG4rXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAzKSlcbitcdFx0Z290byBmcmVlX3NrYjtcbitcbiBcdGRhdGEgID0gc2tiLVx1MDAzZWRhdGE7XG4gXHRwcm90byA9IGdldF91bmFsaWduZWRfYmUxNihkYXRhKTtcbiBcbkBAIC00NTUsMTAgKzQ1NCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xuIFx0aWYgKChhcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9BQykgPT0gMCB8fCBpc2xjcCkge1xuLVx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcbi1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0XHRyZXR1cm4gTlVMTDtcbi1cdFx0fVxuK1x0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpXG4rXHRcdFx0Z290byBmcmVlX3NrYjtcbitcbiBcdFx0c2tiX3B1c2goc2tiLDIpO1xuIFx0XHRza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztcbiBcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XG5AQCAtNDcwLDYgKzQ2OCwxMCBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0cHBwX3ByaW50X2J1ZmZlciAoXCJzZW5kIGJ1ZmZlclwiLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gXG4gXHRyZXR1cm4gc2tiO1xuK1xuK2ZyZWVfc2tiOlxuK1x0a2ZyZWVfc2tiKHNrYik7XG4rXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gLypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjEwLjAwODI4NTE3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzUxNDI5NTYwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFAgU3luY2hyb25pemF0aW9uIFRyYW5zbWl0IE11bmdpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgaXQncyBtYWtpbmcgYSBjb3VwbGUgb2YgY2hhbmdlcyB3aXRoaW4gdGhlIGBwcHBfc3luY190eG11bmdlYCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyByZXNwb25zaWJsZSBmb3IgcHJvY2Vzc2luZyBvdXRib3VuZCBwYWNrZXRzIG9uIHN5bmNocm9ub3VzIFBQUCBsaW5rcywgaGFuZGxpbmcgdGhpbmdzIGxpa2UgYWRkcmVzcyBhbmQgY29udHJvbCBmaWVsZCBpbnNlcnRpb24sIGFuZCBnZW5lcmFsbHkgcHJlcGFyaW5nIHRoZSBwYWNrZXQgZm9yIHRyYW5zbWlzc2lvbiBvdmVyIHRoZSBzZXJpYWwgaW50ZXJmYWNlLlxuXG5UaGUgcHJpbWFyeSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYWJvdXQgZXJyb3IgaGFuZGxpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgdG8gY2hlY2sgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBvciBwYWNrZXQgc3RydWN0dXJlIGludGVncml0eSB3aXRoIGBwc2tiX21heV9wdWxsYCBhbmQgYHNrYl9jb3dfaGVhZGAsIGFuZCB0aGVuIGBrZnJlZV9za2JgIHdpdGhpbiB0aGUgYGlmYCBibG9ja3MuIE5vdywgaXQgYXBwZWFycyB0aGV5IGFyZSBjaGFuZ2luZyB0aG9zZSBpbnN0YW5jZXMsIHdoZXJlIHRoZSBjaGVjayBmYWlscywgdG8gYSBgZ290byBmcmVlX3NrYjtgIHN0YXRlbWVudC4gVGhpcyBjaGFuZ2UgcmVmYWN0b3JzIHRoZSBlcnJvciBoYW5kbGluZyB1c2luZyBhIGBnb3RvYCBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBpbXByb3ZlIHJlYWRhYmlsaXR5LiBJdCdzIGNsZWFuZXIsIGVsaW1pbmF0aW5nIHRoZSBuZXN0ZWQgY29uZGl0aW9uYWwgc3RydWN0dXJlLlxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgXCJnb3RvXCIgYXBwcm9hY2ggaXMgY29uc2lzdGVudCB3aXRoIHRoZSBwcm9qZWN0J3MgY29kaW5nIHN0eWxlIGd1aWRlbGluZXMsIGJ1dCwgZnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIGl0IGxvb2tzIGxvZ2ljYWxseSBlcXVpdmFsZW50LiBJdCBzaG9ydC1jaXJjdWl0cyB0aGUgZnVuY3Rpb24sIGZyZWVzIHRoZSBTS0IsIGFuZCByZXR1cm5zIE5VTEwsIHdoaWNoIEkgYXNzdW1lIGluZGljYXRlcyBhIGZhaWx1cmUgdG8gcHJvY2VzcyB0aGUgcGFja2V0LlxuXG5UbyBiZSBleHRyYSB0aG9yb3VnaCwgSSdsbCB3YW50IHRvIGNoZWNrIHRoZSBjb250ZXh0LCB0byBleGFtaW5lIHdoYXQgY29kZSBjYWxscyBgcHBwX3N5bmNfdHhtdW5nZWAgYW5kIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYHBwcF9zeW5jdHR5LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCB0aGlzIGNoYW5nZSBtaWdodCBpbnRyb2R1Y2UuIExldCBtZSBncmFiIG15IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0b29scyB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjQ1LjE1MTI0NDc4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyNSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyNTpcXHR9XFxuIDQyNjpcXHRcXG4gNDI3OlxcdC8qXFxuIDQyODpcXHQgKiBQcm9jZWR1cmVzIGZvciBlbmNhcHN1bGF0aW9uIGFuZCBmcmFtaW5nLlxcbiA0Mjk6XFx0ICovXFxuIDQzMDpcXHRcXG4gNDMxOlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZipcXG4gNDMyOlxcdHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0MzM6XFx0e1xcbiA0MzQ6XFx0XFx0aW50IHByb3RvO1xcbiA0MzU6XFx0XFx0dW5zaWduZWQgY2hhciAqZGF0YTtcXG4gNDM2OlxcdFxcdGludCBpc2xjcDtcXG4gNDM3OlxcdFxcbiA0Mzg6XFx0XFx0LyogRW5zdXJlIHdlIGNhbiBzYWZlbHkgYWNjZXNzIHByb3RvY29sIGZpZWxkIGFuZCBMQ1AgY29kZSAqL1xcbiA0Mzk6XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMykpXFxuIDQ0MDpcXHRcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbiA0NDE6XFx0XFxuIDQ0MjpcXHRcXHRkYXRhICA9IHNrYi1cXHUwMDNlZGF0YTtcXG4gNDQzOlxcdFxcdHByb3RvID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEpO1xcbiA0NDQ6XFx0XFxuIDQ0NTpcXHRcXHQvKiBMQ1AgcGFja2V0cyB3aXRoIGNvZGVzIGJldHdlZW4gMSAoY29uZmlndXJlLXJlcXVlc3QpXFxuIDQ0NjpcXHRcXHQgKiBhbmQgNyAoY29kZS1yZWplY3QpIG11c3QgYmUgc2VudCBhcyB0aG91Z2ggbm8gb3B0aW9uc1xcbiA0NDc6XFx0XFx0ICogaGF2ZSBiZWVuIG5lZ290aWF0ZWQuXFxuIDQ0ODpcXHRcXHQgKi9cXG4gNDQ5OlxcdFxcdGlzbGNwID0gcHJvdG8gPT0gUFBQX0xDUCBcXHUwMDI2XFx1MDAyNiAxIFxcdTAwM2M9IGRhdGFbMl0gXFx1MDAyNlxcdTAwMjYgZGF0YVsyXSBcXHUwMDNjPSA3O1xcbiA0NTA6XFx0XFxuIDQ1MTpcXHRcXHQvKiBjb21wcmVzcyBwcm90b2NvbCBmaWVsZCBpZiBvcHRpb24gZW5hYmxlZCAqL1xcbiA0NTI6XFx0XFx0aWYgKGRhdGFbMF0gPT0gMCBcXHUwMDI2XFx1MDAyNiAoYXAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0NfQ09NUF9QUk9UKSBcXHUwMDI2XFx1MDAyNiAhaXNsY3ApXFxuIDQ1MzpcXHRcXHRcXHRza2JfcHVsbChza2IsMSk7XFxuIDQ1NDpcXHRcXG4gNDU1OlxcdFxcdC8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi9cXG4gNDU2OlxcdFxcdGlmICgoYXAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0NfQ09NUF9BQykgPT0gMCB8fCBpc2xjcCkge1xcbiA0NTc6XFx0XFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIDIpKVxcbiA0NTg6XFx0XFx0XFx0XFx0Z290byBmcmVlX3NrYjtcXG4gNDU5OlxcdFxcbiA0NjA6XFx0XFx0XFx0c2tiX3B1c2goc2tiLDIpO1xcbiA0NjE6XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO1xcbiA0NjI6XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzFdID0gUFBQX1VJO1xcbiA0NjM6XFx0XFx0fVxcbiA0NjQ6XFx0XFxuIDQ2NTpcXHRcXHRhcC1cXHUwMDNlbGFzdF94bWl0ID0gamlmZmllcztcXG4gNDY2OlxcdFxcbiA0Njc6XFx0XFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19MT0dfT1VUUEtUKVxcbiA0Njg6XFx0XFx0XFx0cHBwX3ByaW50X2J1ZmZlciAoXFxcInNlbmQgYnVmZmVyXFxcIiwgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbik7XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdFxcdHJldHVybiBza2I7XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdGZyZWVfc2tiOlxcbiA0NzM6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDQ3NDpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDc1OlxcdH1cXG4gNDc2OlxcdFxcbiA0Nzc6XFx0LypcXG4gNDc4OlxcdCAqIFRyYW5zbWl0LXNpZGUgcm91dGluZXMuXFxuIDQ3OTpcXHQgKi9cXG4gNDgwOlxcdFxcbiA0ODE6XFx0LypcXG4gNDgyOlxcdCAqIFNlbmQgYSBwYWNrZXQgdG8gdGhlIHBlZXIgb3ZlciBhbiBzeW5jIHR0eSBsaW5lLlxcbiA0ODM6XFx0ICogUmV0dXJucyAxIGlmZiB0aGUgcGFja2V0IHdhcyBhY2NlcHRlZC5cXG4gNDg0OlxcdCAqIElmIHRoZSBwYWNrZXQgd2FzIG5vdCBhY2NlcHRlZCwgd2Ugd2lsbCBjYWxsIHBwcF9vdXRwdXRfd2FrZXVwXFxuIDQ4NTpcXHQgKiBhdCBzb21lIGxhdGVyIHRpbWUuXFxuIDQ4NjpcXHQgKi9cXG4gNDg3OlxcdHN0YXRpYyBpbnRcXG4gNDg4OlxcdHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0ODk6XFx0e1xcbiA0OTA6XFx0XFx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG4gNDkxOlxcdFxcbiA0OTI6XFx0XFx0cHBwX3N5bmNfcHVzaChhcCk7XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFhNSVRfRlVMTCwgXFx1MDAyNmFwLVxcdTAwM2V4bWl0X2ZsYWdzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6NDUuMTUxMzI5MjEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI2MzA0OTYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBDYWxsZXJzIG9mIGBwcHBfc3luY190eG11bmdlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBwcHBfc3luY190eG11bmdlYC4gSXQncyBhIHByZXR0eSBnZW5lcmljLXNvdW5kaW5nIG5hbWUsIHNvIGRpdmluZyBpbnRvIHRoZSBjb2RlYmFzZSBpcyB0aGUgb25seSByZWFsIHdheSBmb3J3YXJkIGhlcmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBwaW5wb2ludCAqd2hlcmUqIGl0J3MgYmVpbmcgdXNlZC4gVGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSBpcyBsaWtlbHkgcmVsYXRlZCB0byBzeW5jaHJvbml6YXRpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHRyYW5zbWl0dGVkIGRhdGEgd2l0aGluIHRoZSBQUFAgZnJhbWV3b3JrLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgaW1tZWRpYXRlbHkgcHJvdmlkZSBpbnNpZ2h0IGludG8gd2hhdCBkYXRhIGlzIGJlaW5nIG11bmNoZWQsIHdoYXQgdGhlIHN5bmNocm9uaXphdGlvbiBjb25jZXJucyBhcmUsIGFuZCB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYXJvdW5kIHRoaXMgZnVuY3Rpb24uIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYXNvbiBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIHN0cmF0ZWdpZXMsIGFuZCBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIExvb2tpbmcgZm9yIHRoZSBjYWxsIHNpdGVzIGlzIHRoZSBmaXJzdCBlc3NlbnRpYWwgc3RlcDsgbGV0J3Mgc2VlIHdoYXQgdGhlIGdyZXAgb3Igc291cmNlIGNvZGUgbmF2aWdhdGlvbiB0b29scyB0dXJuIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTczLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNDo0OC40MTQzODExMTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0NDcwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwX3N5bmNfdHhtdW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz01MD1zdHJ1Y3Qgc3luY3BwcCB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy04Mi0gKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo4MzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYqIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy04NC1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTQzMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYqXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NDMyOnBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz00ODg9cHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00OTUtXFx0XFx0cmV0dXJuIDA7XFx0LyogYWxyZWFkeSBmdWxsICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NDk2OlxcdHNrYiA9IHBwcF9zeW5jX3R4bXVuZ2UoYXAsIHNrYik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNDk3LVxcdGlmIChza2IgIT0gTlVMTClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6NDguNDYwODM1OTQ2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA1NzA1NDY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlYnVnZ2luZyB0aGUgYHBwcF9zeW5jX3NlbmRgIENhbGxlcioqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggYHBwcF9zeW5jX3NlbmRgLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIG1ha2luZyB0aGUgY2FsbC4gVGltZSB0byBmaWd1cmUgb3V0IHdoYXQncyBkcml2aW5nIHRoaXMuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgZW5hYmxlZCwgYW5kIHNwZWNpZmljYWxseSwgd2hhdCdzIHJlbGF0ZWQgdG8gYHBwcF9zeW5jdHR5LmNgLiBLY29uZmlnIGlzIHRoZSBrZXkgaGVyZS4gTGV0J3Mgc2VlIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGlzIHNpdHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjUwLjUxNzg5NDI5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIzMzA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfc3luY3R0eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfUFBQX01QUEUpICs9IHBwcF9tcHBlLm9cXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1BQUF9TWU5DX1RUWSkgKz0gcHBwX3N5bmN0dHkub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfUFBQT1gpICs9IHBwcG94Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTEwMj1wcHBfcHJpbnRfYnVmZmVyIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBfX3U4ICpidWYsIGludCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTEwNC1cXHRpZiAobmFtZSAhPSBOVUxMKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjEwNTpcXHRcXHRwcmludGsoS0VSTl9ERUJVRyBcXFwicHBwX3N5bmN0dHk6ICVzLCBjb3VudCA9ICVkXFxcXG5cXFwiLCBuYW1lLCBjb3VudCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTA2LVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MjA4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyMDk6cHBwX3N5bmN0dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjEwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI4Nj1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX3N5bmNfbGRpc2MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yOTMtXFx0LndyaXRlXFx0PSBwcHBfc3luY193cml0ZSxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyOTQ6XFx0LmlvY3RsXFx0PSBwcHBfc3luY3R0eV9pb2N0bCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yOTUtXFx0LnJlY2VpdmVfYnVmID0gcHBwX3N5bmNfcmVjZWl2ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6NTAuNTY0MTMyNDQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU1NTA0NDAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYW4gZW1iZWRkZWQgc3lzdGVtcyBleHBlcnQgZmFtaWxpYXIgd2l0aCBLY29uZmlnOlxuXG4qKkNoZWNraW5nIHRoZSBQUFBfU1lOQ19UVFkgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc3RhdGUgb2YgYFBQUF9TWU5DX1RUWWAuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gc3luY2hyb25vdXMgUFBQIGNvbm5lY3Rpb25zLCBwcm9iYWJseSBzZXJpYWwgaW50ZXJmYWNlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBlbmFibGVkLCBkaXNhYmxlZCwgb3IgcGVyaGFwcyBjb25kaXRpb25hbGx5IHNldC4gV2hlcmUgZG9lcyB0aGlzIG1vZHVsZSBzdGFuZCBub3cuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgd2hpY2ggYXJjaGl0ZWN0dXJlIGFuZCBrZXJuZWwgdmVyc2lvbnMgSSdtIGRlYWxpbmcgd2l0aCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmcmFnbWVudC4gSG9wZWZ1bGx5LCB0aGUgc3ltYm9sIG5hbWUgaXMgcmVhc29uYWJseSBpbnR1aXRpdmUsIGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzdHJhaWdodGZvcndhcmQuIFRoaXMgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJIHByb2NlZWQgd2l0aCB3aGF0ZXZlciB0YXNrIEkgaGF2ZSBhdCBoYW5kLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjUzLjExOTE3ODU2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMzE2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBQUF9TWU5DX1RUWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE4Mz1jb25maWcgUFBQX0FTWU5DXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xOTUtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTk2OmNvbmZpZyBQUFBfU1lOQ19UVFlcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xOTctXFx0dHJpc3RhdGUgXFxcIlBQUCBzdXBwb3J0IGZvciBzeW5jIHR0eSBwb3J0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6NTMuMTY2MjIyNzExWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxODk0OTI4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIEZpbGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhhdCBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE5Ni4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGNvbmZpZ3VyZWQgdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIGZvciB2YXJpYWJsZXMsIGxpa2VseSBib29sZWFuIG9yIHRyaXN0YXRlLCBtYXliZSBzb21lIHN0cmluZyBvciBpbnRlZ2VyIG9wdGlvbnMsIGFuZCBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVtLiBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHRzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBzZWxlY3Qgc3RhdGVtZW50cyBwb2ludGluZyBhdCBhIHBhcmVudCBjb25maWcgc3ltYm9sPyBUaGUgZ29hbCBpcyB0byBzZWUgd2hpY2ggZmVhdHVyZXMgYXJlIGNvbmRpdGlvbmFsbHkgZW5hYmxlZCBhbmQgd2hhdCdzIGNvbnRyb2xsaW5nIHRoYXQgYmVoYXZpb3IuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gYXJlYSBpbiByZWxhdGlvbiB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjczOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjU1LjM1NTcxODQ1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHQgIG5lZWQgdGhpcyBvcHRpb24uXFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxOTU6XFx0XFxuIDE5NjpcXHRjb25maWcgUFBQX1NZTkNfVFRZXFxuIDE5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIHN1cHBvcnQgZm9yIHN5bmMgdHR5IHBvcnRzXFxcIlxcbiAxOTg6XFx0XFx0aGVscFxcbiAxOTk6XFx0XFx0ICBTYXkgWSAob3IgTSkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBQUFAgb3ZlciBzeW5jaHJvbm91c1xcbiAyMDA6XFx0XFx0ICAoSERMQykgdHR5IGRldmljZXMuIFRoZXNlIGRldmljZXMgYXJlIG9mdGVuIHVzZWQgZm9yIGhpZ2gtc3BlZWQgbGVhc2VkXFxuIDIwMTpcXHRcXHQgIGxpbmVzIGxpa2UgVDEvRTEuXFxuIDIwMjpcXHRcXG4gMjAzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gMjA0OlxcdFxcbiAyMDU6XFx0ZW5kaWYgIyBUVFlcXG4gMjA2OlxcdFxcbiAyMDc6XFx0ZW5kaWYgIyBQUFBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6NTUuMzU1Nzk0NTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMyOTYxMzg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFBQUF9TWU5DX1RUWSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYFBQUF9TWU5DX1RUWWAgaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3Qgc3RvcCBzaG91bGQgYmUgdGhlIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBmb3IgY29uZmlndXJpbmcgUFBQLXJlbGF0ZWQgb3B0aW9ucywgYW5kIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHdoZXJlIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIHRleHQgZm9yIGtlcm5lbCBmZWF0dXJlcyByZXNpZGUuIFRoaXMgaXMgd2hlcmUgSSdsbCBmaW5kIHRoZSBjb25zdHJhaW50cywgdGhlIHBhcmVudCBkZXBlbmRlbmNpZXMsIHRoYXQgZGV0ZXJtaW5lIHdoZW4gYFBQUF9TWU5DX1RUWWAgd2lsbCBiZSBpbmNsdWRlZCBpbiBhIGJ1aWxkLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjA0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNDo1OC42ODU0MTA4NTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFBQUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCAocG9pbnQtdG8tcG9pbnQgcHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgU0xIQ1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xcbiAgMTE6XFx0XFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxcbiAgMTI6XFx0XFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxcbiAgMTM6XFx0XFx0ICBvdGhlcndpc2UgeW91IGNhbid0IHVzZSBpdDsgbW9zdCBJbnRlcm5ldCBhY2Nlc3MgcHJvdmlkZXJzIHRoZXNlXFxuICAxNDpcXHRcXHQgIGRheXMgc3VwcG9ydCBQUFAgcmF0aGVyIHRoYW4gU0xJUC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxcbiAgMTc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly9wcHAuc2FtYmEub3JnXFx1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcXG4gIDE4OlxcdFxcdCAgcmVjb21tZW5kZWQgaW4gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXFx1MDAzZS5cXG4gIDE5OlxcdFxcdCAgVGhlIFBQUCBvcHRpb24gZW5sYXJnZXMgeW91ciBrZXJuZWwgYnkgYWJvdXQgMTYgS0IuXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXFxuICAyMjpcXHRcXHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXFxuICAyMzpcXHRcXHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcXG4gIDI0OlxcdFxcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxcbiAgMjU6XFx0XFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xcbiAgMjY6XFx0XFx0ICB0aGUgbmV4dCBvcHRpb24sIFxcXCJQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXFxcIi4gIEZvciBQUFAgb3ZlclxcbiAgMjc6XFx0XFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXFxcIlN1cHBvcnRcXG4gIDI4OlxcdFxcdCAgc3luY2hyb25vdXMgUFBQXFxcIiwgYmVsb3cuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgeW91IHNhaWQgWSB0byBcXFwiVmVyc2lvbiBpbmZvcm1hdGlvbiBvbiBhbGwgc3ltYm9sc1xcXCIgYWJvdmUsIHRoZW5cXG4gIDMxOlxcdFxcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcXG4gIDMyOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cXG4gIDMzOlxcdFxcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0aWYgUFBQXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBQUFBfQlNEQ09NUFxcbiAgMzg6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXFwiXFxuICAzOTpcXHRcXHRoZWxwXFxuICA0MDpcXHRcXHQgIFN1cHBvcnQgZm9yIHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6NTguNjg1NDkxNzg0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1MzY1MDkxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgUFBQIEtjb25maWcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgcmVsYXRlZCB0byBgaWYgVFRZYCB3aXRoaW4gdGhlIFBQUCBkcml2ZXIncyBLY29uZmlnIGZpbGUuIEknbSBndWVzc2luZyB0aGF0IEknbGwgZmluZCBpdCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IGBDT05GSUdfYCBvcHRpb25zIHJlbGF0ZWQgdG8gdGVybWluYWwgc3VwcG9ydCBmb3IgUFBQIGFyZSBkZWZpbmVkLiBJJ20gcHJvYmFibHkgbG9va2luZyB0byBzZWUgaWYgdGVybWluYWwgcmVsYXRlZCBvcHRpb25zIGFyZSBkZXBlbmRlbnQgb24gYSBUVFkgZGV2aWNlLiBUaW1lIHRvIHRha2UgYSBsb29rLCBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUhIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgdGllcyB0aGUgVFRZLXJlbGF0ZWQgUFBQIGZlYXR1cmVzIHRvIHdoZXRoZXIgVFRZIHN1cHBvcnQgaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBnZXQgaW50byB0aGUgd2VlZHMsIGFuZCBzZWUgdGhlIGRldGFpbHMgdGhlcmUuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6MDIuMjIyMDAzODQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE2MjE0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVFRZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE3Mz1jb25maWcgUFBQT0wyVFBcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE4MC1cXHQgIHR1bm5lbHMuIEwyVFAgaXMgcmVwbGFjaW5nIFBQVFAgZm9yIFZQTiB1c2VzLlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE4MTppZiBUVFlcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xODItXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTgzPWNvbmZpZyBQUFBfQVNZTkNcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5NS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxOTY6Y29uZmlnIFBQUF9TWU5DX1RUWVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiUFBQIHN1cHBvcnQgZm9yIHN5bmMgdHR5IHBvcnRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMjA0LVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjIwNTplbmRpZiAjIFRUWVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTIwNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6MDIuMzYzNjMxODkyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyNjA0NTIxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIGNvZGUgc25pcHBldDpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBgUFBQX1NZTkNfVFRZYCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IHJlcHJlc2VudGVkIGJ5IGBQUFBfU1lOQ19UVFlgIGlzIGNsZWFybHkgcmVsaWFudCBvbiBib3RoIHRoZSBgUFBQYCBhbmQgYFRUWWAgc3Vic3lzdGVtcy4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGUgYHBwcF9zeW5jdHR5YCBmdW5jdGlvbmFsaXR5IGlzIGFjdHVhbGx5IGludGVncmF0ZWQgYW5kIGhvdyB0aGUga2VybmVsIHJlYWNoZXMgaXQuXG5cbkZpcnN0LCBJIGtub3cgYHBwcF9zeW5jdHR5YCBpcyBkZWFsaW5nIHdpdGggcmVnaXN0ZXJpbmcgYSBUVFkgbGluZSBkaXNjaXBsaW5lLiBNeSBmb2N1cyBzaG91bGQgYmUgd2hlcmUgdGhhdCByZWdpc3RyYXRpb24gaGFwcGVucy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGVpdGhlciB0aGUgYHBwcF9zeW5jX2luaXRgIGZ1bmN0aW9uLCBvciB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIGluIHRoZSBgcHBwX3N5bmN0dHkuY2Agc291cmNlIGNvZGUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHNob3VsZCBiZSBoYXBwZW5pbmcsIHdoZXJlIHRoZSBUVFkgbGluZSBkaXNjaXBsaW5lIGlzIGxpbmtlZCBpbnRvIHRoZSBzeXN0ZW0uIFRoaXMgd2lsbCBzaG93IG1lIHRoZSBlbnRyeSBwb2ludCBhbmQgaG93IHRoZSBwaWVjZXMgY29ubmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjA2LjYyNDA4NzQwM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMTQ3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHR5X3JlZ2lzdGVyX2xkaXNjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTMwMD1wcHBfc3luY19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0zMDMtXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MzA0OlxcdGVyciA9IHR0eV9yZWdpc3Rlcl9sZGlzYyhcXHUwMDI2cHBwX3N5bmNfbGRpc2MpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTMwNS1cXHRpZiAoZXJyICE9IDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjA2LjY3MTExMDIyM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTYzMjMxMTUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBMaW5lIERpc2NpcGxpbmUgTWFuaXB1bGF0aW9uKipcblxuT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBob3cgbGluZSBkaXNjaXBsaW5lcyBhcmUgY29uZmlndXJlZCB3aXRoaW4gYSBzeXN0ZW0uIE15IGV4cGVydGlzZSB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IGBpb2N0bChmZCwgVElPQ1NFVEQsIE5fU1lOQ19QUFApYCwgd2hpY2ggaXMgdGhlIHN5c3RlbSBjYWxsIGZvciwgZXNzZW50aWFsbHksIHN3YXBwaW5nIG91dCB0aGUgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBvbiBhIHNwZWNpZmljIGZpbGUgZGVzY3JpcHRvciwgaW4gdGhpcyBjYXNlLCBsaWtlbHkgYSBwc2V1ZG8tdGVybWluYWwgKHB0eSkuIFRoZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhhdCAqYW55KiB1bnByaXZpbGVnZWQgdXNlciBvciBwcm9jZXNzIHRoYXQgaGFzIGFjY2VzcyB0byB0aGUgcHR5IGNhbiBleGVjdXRlIHRoaXMgY2FsbCB0byBzZXQgdGhlIGxpbmUgZGlzY2lwbGluZS4gVGhhdCBzb3VuZHMgbGlrZSBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHJpcGUgZm9yIGV4cGxvcmF0aW9uLlxuXG5BbmQsIGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCBTeXprYWxsZXIsIGEgcHJvbWluZW50IGZ1enplciwgcm91dGluZWx5IHRlc3RzIHRoaXMgZnVuY3Rpb25hbGl0eSB3aXRoIGRpc2NpcGxpbmVzIGxpa2UgYE5fU1lOQ19QUFBgLCB3aGljaCBoYXMgYW4gaWRlbnRpZmllciBvZiAxNCwgYXMgdGhlIGV4YW1wbGUgbWVudGlvbnMuIFNvLCBnaXZlbiBTeXprYWxsZXIncyBwdXJwb3NlLCB0aGV5IGFyZSBsaWtlbHkgYXR0ZW1wdGluZyB0byB0cmlnZ2VyIGNyYXNoZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuU28sIGxldCdzIHZlcmlmeSB0aGF0IGRpc2NpcGxpbmUgbnVtYmVyLCB0byBiZSBjZXJ0YWluLiBXZSBzaG91bGQgbG9vayBpbnRvIHdoZXRoZXIgdGhhdCBudW1iZXIgaXMgc3RhbmRhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNToxOC4zMDM0MjQ2NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNDE3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwX3N5bmNfbGRpc2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9Mjc0PXBwcF9zeW5jX3dha2V1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjg1LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjI4NjpzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX3N5bmNfbGRpc2MgPSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjg3LVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0zMDA9cHBwX3N5bmNfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMzAzLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjMwNDpcXHRlcnIgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoXFx1MDAyNnBwcF9zeW5jX2xkaXNjKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0zMDUtXFx0aWYgKGVyciAhPSAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NjQ4PXBwcF9zeW5jX2NsZWFudXAodm9pZClcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy02NDkte1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1MDpcXHR0dHlfdW5yZWdpc3Rlcl9sZGlzYyhcXHUwMDI2cHBwX3N5bmNfbGRpc2MpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTY1MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjE4LjM0OTY3Mzc2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzMTU0NjcxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgbGRpc2NgIE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gZXhhbWluaW5nIHRob3NlIGBsZGlzY2Agb3BlcmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaW52b2x2ZXMgYSBtZW50YWwgY2hlY2tsaXN0LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFdoYXQgaXMgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSwgYW5kIGhvdyBpcyB0aGUgYGxkaXNjYCBiZWluZyB1c2VkIHdpdGhpbiBpdD8gSSdtIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgc3VjaCBhcyBob3cgdGhlIGxpbmUgZGlzY2lwbGluZSBhZmZlY3RzIGRhdGEgZmxvdywgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBhbnkgYXNzb2NpYXRlZCBpbnRlcnJ1cHQgaGFuZGxpbmcuXG5cbk5leHQsIEknbGwgYmUgbG9va2luZyBmb3IgdHlwaWNhbCBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGBsZGlzY2AuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBzdGFuZGFyZCB0ZXJtaW5hbC1zdHlsZSBkaXNjaXBsaW5lLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZCBsaWtlIGEgbmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBvciBldmVuIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uPyBUaGUgc3BlY2lmaWMgYGxkaXNjYCB3aWxsIGRpY3RhdGUgdGhlIGRhdGEgc3RydWN0dXJlcywgZnVuY3Rpb24gcG9pbnRlcnMsIGFuZCBhc3NvY2lhdGVkIGNvbnRyb2wgbWVjaGFuaXNtcyB0aGF0IGFyZSBpbiBwbGF5LiBBbnkgb2RkaXR5IG9yIG5vbnN0YW5kYXJkIGFwcHJvYWNoIHdvdWxkIGJlIHNpZ25pZmljYW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhcmFjdGVyaXN0aWNzIGFuZCBvcGVyYXRpb25zIHBlcmZvcm1lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6MjAuNjY1MTQ0MDA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MDpcXHRcXHRcXHRyZXR1cm47XFxuIDI4MTpcXHRcXHRzZXRfYml0KFhNSVRfV0FLRVVQLCBcXHUwMDI2YXAtXFx1MDAzZXhtaXRfZmxhZ3MpO1xcbiAyODI6XFx0XFx0dGFza2xldF9zY2hlZHVsZShcXHUwMDI2YXAtXFx1MDAzZXRzayk7XFxuIDI4MzpcXHR9XFxuIDI4NDpcXHRcXG4gMjg1OlxcdFxcbiAyODY6XFx0c3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHBwcF9zeW5jX2xkaXNjID0ge1xcbiAyODc6XFx0XFx0Lm93bmVyXFx0PSBUSElTX01PRFVMRSxcXG4gMjg4OlxcdFxcdC5udW1cXHQ9IE5fU1lOQ19QUFAsXFxuIDI4OTpcXHRcXHQubmFtZVxcdD0gXFxcInBwcHN5bmNcXFwiLFxcbiAyOTA6XFx0XFx0Lm9wZW5cXHQ9IHBwcF9zeW5jX29wZW4sXFxuIDI5MTpcXHRcXHQuY2xvc2VcXHQ9IHBwcF9zeW5jX2Nsb3NlLFxcbiAyOTI6XFx0XFx0LnJlYWRcXHQ9IHBwcF9zeW5jX3JlYWQsXFxuIDI5MzpcXHRcXHQud3JpdGVcXHQ9IHBwcF9zeW5jX3dyaXRlLFxcbiAyOTQ6XFx0XFx0LmlvY3RsXFx0PSBwcHBfc3luY3R0eV9pb2N0bCxcXG4gMjk1OlxcdFxcdC5yZWNlaXZlX2J1ZiA9IHBwcF9zeW5jX3JlY2VpdmUsXFxuIDI5NjpcXHRcXHQud3JpdGVfd2FrZXVwID0gcHBwX3N5bmNfd2FrZXVwLFxcbiAyOTc6XFx0fTtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0c3RhdGljIGludCBfX2luaXRcXG4gMzAwOlxcdHBwcF9zeW5jX2luaXQodm9pZClcXG4gMzAxOlxcdHtcXG4gMzAyOlxcdFxcdGludCBlcnI7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdGVyciA9IHR0eV9yZWdpc3Rlcl9sZGlzYyhcXHUwMDI2cHBwX3N5bmNfbGRpc2MpO1xcbiAzMDU6XFx0XFx0aWYgKGVyciAhPSAwKVxcbiAzMDY6XFx0XFx0XFx0cHJpbnRrKEtFUk5fRVJSIFxcXCJQUFBfc3luYzogZXJyb3IgJWQgcmVnaXN0ZXJpbmcgbGluZSBkaXNjLlxcXFxuXFxcIixcXG4gMzA3OlxcdFxcdFxcdCAgICAgICBlcnIpO1xcbiAzMDg6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzA5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6MjAuNjY1MjQyNDc4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0OTU3OTQ1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgUFBQIFN5bmMgQ2hhbm5lbCBDcmVhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGhvdyBQUFAgZGF0YSB0cmFuc21pc3Npb24gaXMgYWN0dWFsbHkgaW5pdGlhdGVkLCBhbmQgdGhlIGtleSBmdW5jdGlvbiBhcHBlYXJzIHRvIGJlIGBwcHBfc3luY19vcGVuYC4gVGhlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIHByb2Nlc3MgZ2V0IG9mZiB0aGUgZ3JvdW5kPyBUaGUgdGV4dCBwb2ludHMgdXMgdG93YXJkIHRoZSBjcml0aWNhbCBzdGVwIG9mIGNoYW5uZWwgcmVnaXN0cmF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IG1lbnRpb25zIGBwcHBfc3luY19vcGVuYCBlc3RhYmxpc2hpbmcgYSBjaGFubmVsIGFuZCB0aGVuIHVzaW5nIGBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZhcC1cdTAwM2VjaGFuKTtgLiBUaGlzIGlzIHdoZXJlIGl0IHN0YXJ0cyB0byBjbGljay4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGBwcHBfcmVnaXN0ZXJfY2hhbm5lbGAgaXMgdGhlIGNlbnRyYWwgbWVjaGFuaXNtIGZvciB0aGUgUFBQIHN0YWNrIHRvIGJlIGF3YXJlIG9mIHRoZSBuZXcgY2hhbm5lbCwgbWFraW5nIGl0IHJlYWR5IHRvIGhhbmRsZSBpbmNvbWluZyBhbmQgb3V0Z29pbmcgZGF0YS4gVGhlcmVmb3JlLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHBwcF9zeW5jX29wZW5gIGZ1bmN0aW9uIGl0c2VsZi4gTGV0J3Mgc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nIGluIHRoZXJlLiBJJ2xsIHJlYWQgaXQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMwOCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6MjMuMTYxMDQxMTgzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHRcXHRhcC1cXHUwMDNlcmFjY20gPSB+MFU7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmFwLVxcdTAwM2VycXVldWUpO1xcbiAxNDM6XFx0XFx0dGFza2xldF9zZXR1cChcXHUwMDI2YXAtXFx1MDAzZXRzaywgcHBwX3N5bmNfcHJvY2Vzcyk7XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdGFwLVxcdTAwM2VjaGFuLnByaXZhdGUgPSBhcDtcXG4gMTQ2OlxcdFxcdGFwLVxcdTAwM2VjaGFuLm9wcyA9IFxcdTAwMjZzeW5jX29wcztcXG4gMTQ3OlxcdFxcdGFwLVxcdTAwM2VjaGFuLm10dSA9IFBQUF9NUlU7XFxuIDE0ODpcXHRcXHRhcC1cXHUwMDNlY2hhbi5oZHJsZW4gPSAyO1xcdC8qIGZvciBBL0MgYnl0ZXMgKi9cXG4gMTQ5OlxcdFxcdHNwZWVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTtcXG4gMTUwOlxcdFxcdGFwLVxcdTAwM2VjaGFuLnNwZWVkID0gc3BlZWQ7XFxuIDE1MTpcXHRcXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcXHUwMDI2YXAtXFx1MDAzZWNoYW4pO1xcbiAxNTI6XFx0XFx0aWYgKGVycilcXG4gMTUzOlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuIDE1NDpcXHRcXG4gMTU1OlxcdFxcdHR0eS1cXHUwMDNlZGlzY19kYXRhID0gYXA7XFxuIDE1NjpcXHRcXHR0dHktXFx1MDAzZXJlY2VpdmVfcm9vbSA9IDY1NTM2O1xcbiAxNTc6XFx0XFx0cmV0dXJuIDA7XFxuIDE1ODpcXHRcXG4gMTU5OlxcdCBvdXRfZnJlZTpcXG4gMTYwOlxcdFxcdGtmcmVlKGFwKTtcXG4gMTYxOlxcdCBvdXQ6XFxuIDE2MjpcXHRcXHRyZXR1cm4gZXJyO1xcbiAxNjM6XFx0fVxcbiAxNjQ6XFx0XFxuIDE2NTpcXHQvKlxcbiAxNjY6XFx0ICogQ2FsbGVkIHdoZW4gdGhlIHR0eSBpcyBwdXQgaW50byBhbm90aGVyIGxpbmUgZGlzY2lwbGluZSBvciBpdCBoYW5ncyB1cC5cXG4gMTY3OlxcdCAqIFRoaXMgY2FsbCBpcyBzZXJpYWxpemVkIGFnYWluc3Qgb3RoZXIgbGRpc2MgZnVuY3Rpb25zLlxcbiAxNjg6XFx0ICovXFxuIDE2OTpcXHRzdGF0aWMgdm9pZFxcbiAxNzA6XFx0cHBwX3N5bmNfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4gMTcxOlxcdHtcXG4gMTcyOlxcdFxcdHN0cnVjdCBzeW5jcHBwICphcCA9IHR0eS1cXHUwMDNlZGlzY19kYXRhO1xcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHRpZiAoIWFwKVxcbiAxNzU6XFx0XFx0XFx0cmV0dXJuO1xcbiAxNzY6XFx0XFxuIDE3NzpcXHRcXHR0dHktXFx1MDAzZWRpc2NfZGF0YSA9IE5VTEw7XFxuIDE3ODpcXHRcXHR0YXNrbGV0X2tpbGwoXFx1MDAyNmFwLVxcdTAwM2V0c2spO1xcbiAxNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjIzLjE2MTEyNjczM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjQzMTE2NTE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIGBzeW5jX29wc2AqKlxuXG5IbW0sIGBzeW5jX29wc2AuLi4gdGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gcmlnaHQgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgdGVybSByZWZlcnMgdG8sIHdoYXQgaXQgZW5jb21wYXNzZXMuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZmVyZW5jZSBteSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uLCBtYXliZSBzb21lIGNvZGUgb3IgZXZlbiB0aGUgbGF0ZXN0IFJGQ3MgaWYgaXQgc2VlbXMgaW1wb3J0YW50LCBpbiBvcmRlciB0byBnZXQgYSBjbGVhciBkZWZpbml0aW9uIG9mIGBzeW5jX29wc2AuIEkgbmVlZCB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGlzIHNvbGlkIGJlZm9yZSBJIHByb2NlZWQuIFdoYXQgb3BlcmF0aW9ucyBhcmUgd2UgdGFsa2luZyBhYm91dCBleGFjdGx5PyBBcmUgdGhlc2UgcmVsYXRlZCB0byBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBjaGVjayBzaG91bGQgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbiBJIG5lZWQgdG8gcHJvY2VlZCBjb25maWRlbnRseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjM5LjU5MjI5NDU2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MTc4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3luY19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9OTA9c3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05Mi1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo5MzpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05NC1cXHQuc3RhcnRfeG1pdCA9IHBwcF9zeW5jX3NlbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0xMTk9cHBwX3N5bmNfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTQ1LVxcdGFwLVxcdTAwM2VjaGFuLnByaXZhdGUgPSBhcDtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoxNDY6XFx0YXAtXFx1MDAzZWNoYW4ub3BzID0gXFx1MDAyNnN5bmNfb3BzO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTE0Ny1cXHRhcC1cXHUwMDNlY2hhbi5tdHUgPSBQUFBfTVJVO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNTozOS42Mzk4MjAzODNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjkxNDU2MjAzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUFBQIFN5bmNocm9ub3VzIFRUWSBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGNhdWdodCBteSBleWUuIEl0IHRvdWNoZXMgdGhlIFBQUCBzeW5jaHJvbm91cyBUVFkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBwcHBfc3luY190eG11bmdlYCBmdW5jdGlvbi4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgZXZlbiBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcuIFdlJ3JlIGxvb2tpbmcgYXQgYHBwcF9zeW5jX3NlbmRgIGNhbGxpbmcgYHBwcF9zeW5jX3R4bXVuZ2VgIHdoZW4gcGFja2V0cyBhcmUgc2VudCBvbiB0aGUgUFBQIHVuaXQsIHdoaWNoIGNhbiBoYXBwZW4gdGhyb3VnaCBQUFAgaW9jdGxzIG9yIHN0YW5kYXJkIHdyaXRlcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZy4gSXQgY29uc29saWRhdGVzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgcHBwX3N5bmNfdHhtdW5nZWAgYnkgcmVwbGFjaW5nIHJlZHVuZGFudCBga2ZyZWVfc2tiYCBhbmQgYHJldHVybiBOVUxMYCBjYWxscyB3aXRoIGEgYGdvdG8gZnJlZV9za2JgIGxhYmVsLiBXaGlsZSB0aGlzIG1pZ2h0IGxvb2sgbGlrZSBhIFwibm8gZnVuY3Rpb25hbCBjaGFuZ2VcIiBjbGVhbnVwLCBJIGtub3cgYmV0dGVyIHRoYW4gdG8gYmxpbmRseSB0cnVzdCB0aGF0LiBSZWZhY3RvcmluZ3MsIGVzcGVjaWFsbHkgdGhvc2UgdG91Y2hpbmcgZXJyb3IgcGF0aHMgb3IgZGF0YSBmbG93LCBoYXZlIGEga25hY2sgZm9yIHVuY292ZXJpbmcgbGF0ZW50IGJ1Z3Mgb3Igc3VidGx5IGFsdGVyaW5nIGJlaGF2aW9yLiBUaGUga2V5IGhlcmUgaXMgdGhlIG1vZGlmaWNhdGlvbiBpcyBpbiBhIHJlYWNoYWJsZSBkcml2ZXIgZnVuY3Rpb24uXG5cbkxvb2tpbmcgYXQgdGhlIGd1aWRlbGluZXMsIHRoaXMgZGVmaW5pdGVseSBxdWFsaWZpZXMgYXMgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gYSByZWFjaGFibGUgZHJpdmVyLCBhbmQgdGhlIHJlZmFjdG9yaW5nIHRvdWNoZXMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cuIFRoZXJlIGFyZSBubyBuZWdhdGl2ZSBjcml0ZXJpYSB0aGF0IGFwcGx5IGhlcmU6IG5vIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzLCBvciBwYXRocyB0aGF0IGFyZSBuZXZlciB0YWtlbi4gVGh1cywgaXQgbWVldHMgdGhlIHBvc2l0aXZlIGNyaXRlcmlhLCBzcGVjaWZpY2FsbHkgXCJSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHNcIiBhbmQgXCJSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzXCIuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBmdXp6aW5nIHRhcmdldHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgcHBwX3N5bmNfdHhtdW5nZWAgaXRzZWxmLCB3aGljaCBpcyBjYWxsZWQgZGlyZWN0bHkgYnkgYHBwcF9zeW5jX3NlbmRgLiBCb3RoIGFyZSBkZWZpbmVkIHdpdGhpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgIGFuZCBjYW4gYmUgdXNlZCBmb3IgY292ZXJhZ2UuIFdlJ2xsIG5lZWQgdG8gZW5hYmxlIGJvdGggYFBQUGAgYW5kIGBQUFBfU1lOQ19UVFlgIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgYWxvbmcgd2l0aCB0aGUgc3RhbmRhcmQgYFRUWWAuXG5cblRoZXJlZm9yZSwgdGhlIGZvbGxvd2luZyBpcyB0aGUgZmluYWwgY29uY2x1c2lvbi5cblxuYGBganNvblxue1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gYHBwcF9zeW5jX3R4bXVuZ2UoKWAgaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jYCBieSBjb25zb2xpZGF0aW5nIFNLQiBmcmVlIGFuZCBOVUxMIHJldHVybiBsb2dpYyBpbnRvIGEgc2luZ2xlIGBmcmVlX3NrYmAgbGFiZWwuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIFRUWSBsaW5lIGRpc2NpcGxpbmUgc3dpdGNoaW5nIChOX1NZTkNfUFBQKSBvbiBzdGFuZGFyZCBwc2V1ZG8tdGVybWluYWxzIChwdHkpIHdpdGhvdXQgcmVxdWlyaW5nIGRlZGljYXRlZCBoYXJkd2FyZS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIHRoZSByZWZhY3RvcmVkIHRyYW5zbWlzc2lvbiBwYXRoIGFuZCBza2IgaGFuZGxpbmcgbWFpbnRhaW4gcHJvcGVyIGxpZmVjeWNsZSBzZW1hbnRpY3MuXCIsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcF9zeW5jX3R4bXVuZ2VcIixcbiAgICBcInBwcF9zeW5jX3NlbmRcIlxuICBdLFxuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQX1NZTkNfVFRZXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlRUWVwiXG4gIF1cbn1cbmBgYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYwNiwiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA2OjA4Ljc4NTQ0NTg2N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3Njk2ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBfU1lOQ19UVFlcIixcbiAgICBcIlBQUFwiLFxuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwX3N5bmNfdHhtdW5nZVwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXJyb3ItaGFuZGxpbmcgcGF0aCBpbiBwcHBfc3luY190eG11bmdlKCkgd2l0aGluIGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGJ5IHJvdXRpbmcgcGFja2V0IGRyb3AgY2FzZXMgdG8gYSBzaGFyZWQgZnJlZV9za2IgbGFiZWwuIFRoaXMgY29kZSBpcyBleGVjdXRhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdGhlIE5fU1lOQ19QUFAgVFRZIGxpbmUgZGlzY2lwbGluZSBvdmVyIHB0eXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIHJlZmFjdG9yZWQgZnJhbWUgZW5jYXBzdWxhdGlvbiBhbmQgc2tiIGhhbmRsaW5nIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQX1NZTkNfVFRZXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlRUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcF9zeW5jX3R4bXVuZ2VcIixcbiAgICBcInBwcF9zeW5jX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gcHBwX3N5bmNfdHhtdW5nZSgpIHdpdGhpbiBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBieSByb3V0aW5nIHBhY2tldCBkcm9wIGNhc2VzIHRvIGEgc2hhcmVkIGZyZWVfc2tiIGxhYmVsLiBUaGlzIGNvZGUgaXMgZXhlY3V0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHRoZSBOX1NZTkNfUFBQIFRUWSBsaW5lIGRpc2NpcGxpbmUgb3ZlciBwdHlzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoZSByZWZhY3RvcmVkIGZyYW1lIGVuY2Fwc3VsYXRpb24gYW5kIHNrYiBoYW5kbGluZyBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNjowOC44NzMxNTIyMTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNDM4ODQ3ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDY6MDguODczNzMwOTc2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzM0MzgyNjM3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgIHRoYXQgY29uc29saWRhdGVzIGR1cGxpY2F0ZSBlcnJvciBoYW5kbGluZyBwYXRocyAoYGtmcmVlX3NrYihza2IpOyByZXR1cm4gTlVMTDtgKSBpbnRvIGEgY29tbW9uIGBnb3RvIGZyZWVfc2tiO2AgZXhpdCBsYWJlbC5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGFsdGVyIGhvdyBidWZmZXJzIGFyZSByZWFkLCB3cml0dGVuLCBvciBib3VuZHMtY2hlY2tlZCwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLlxcbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgS0FTQU4gY292ZXJzIGFueSBza2IgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlKSwgdGhvdWdoIHRoZSBwYXRjaCBkb2VzIG5vdCBjaGFuZ2Ugc2tiIGxpZmV0aW1lIG9yIGVycm9yIGhhbmRsaW5nIHNlbWFudGljcyBhdCBhbGwuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDhhNzVkZjJjYzg1Y2Y0YTg2ZGI4OWQ0YjU3NjMyMDlkMGZmMTU5M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDExOjA0OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuaW5kZXggZWJkNjJhN2FiNTRiMy4uOWU0NDBlMTEwZTlmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuQEAgLTQzNiwxMCArNDM2LDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpbnQgaXNsY3A7XG4gXG4gXHQvKiBFbnN1cmUgd2UgY2FuIHNhZmVseSBhY2Nlc3MgcHJvdG9jb2wgZmllbGQgYW5kIExDUCBjb2RlICovXG4tXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAzKSkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXHR9XG4rXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAzKSlcbitcdFx0Z290byBmcmVlX3NrYjtcbitcbiBcdGRhdGEgID0gc2tiLVx1MDAzZWRhdGE7XG4gXHRwcm90byA9IGdldF91bmFsaWduZWRfYmUxNihkYXRhKTtcbiBcbkBAIC00NTUsMTAgKzQ1NCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xuIFx0aWYgKChhcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9BQykgPT0gMCB8fCBpc2xjcCkge1xuLVx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcbi1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0XHRyZXR1cm4gTlVMTDtcbi1cdFx0fVxuK1x0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpXG4rXHRcdFx0Z290byBmcmVlX3NrYjtcbitcbiBcdFx0c2tiX3B1c2goc2tiLDIpO1xuIFx0XHRza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztcbiBcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XG5AQCAtNDcwLDYgKzQ2OCwxMCBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0cHBwX3ByaW50X2J1ZmZlciAoXCJzZW5kIGJ1ZmZlclwiLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gXG4gXHRyZXR1cm4gc2tiO1xuK1xuK2ZyZWVfc2tiOlxuK1x0a2ZyZWVfc2tiKHNrYik7XG4rXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gLypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA2OjA4Ljg3MzczMjM2NloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjUwNzg2MDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBkZWNpZGUgaWYgaXQgd2FycmFudHMgZmlyaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3Mgc2VlLi4uIGl0IGxvb2tzIGxpa2UgaXQncyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgLiBSaWdodCwgdGhhdCdzIHJlbGF0ZWQgdG8gc3luY2hyb25vdXMgUFBQLiBJJ20gZmFtaWxpYXIgd2l0aCB0aGF0IGNvZGUsIHNvIEkgY2FuIHByb2JhYmx5IHF1aWNrbHkgYXNzZXNzIHRoZSBjaGFuZ2VzLlxuXG5UaGUgZGlmZiBpbnRyb2R1Y2VzIGEgYGZyZWVfc2tiYCBsYWJlbCBhbmQgdXNlcyBpdCBpbiB0d28gcGxhY2VzIHdoZXJlIHRoZSBjb2RlIHByZXZpb3VzbHkgY2FsbGVkIGBrZnJlZV9za2Ioc2tiKWAgZGlyZWN0bHkuIFRoaXMgcmVmYWN0b3JpbmcgY2xlYXJseSBhaW1zIHRvIHJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uIGFuZCBpbXByb3ZlIHJlYWRhYmlsaXR5LiBUaGUgY29yZSBsb2dpYyBhcm91bmQgdmFsaWRhdGluZyB0aGUgcGFja2V0J3Mgc3RydWN0dXJlIHVzaW5nIGBwc2tiX21heV9wdWxsYCBhbmQgY29uZGl0aW9uYWxseSBwcmVwZW5kaW5nIGFkZHJlc3MvY29udHJvbCBmaWVsZHMgYmFzZWQgb24gYFNDX0NPTVBfQUNgIGFuZCBgaXNsY3BgIGRvZXNuJ3QgKmFwcGVhciogdG8gYmUgbW9kaWZpZWQgaW4gYW55IGZ1bmRhbWVudGFsIHdheS5cblxuSG93ZXZlciwgdGhlIGNoYW5nZSBkb2VzIGludm9sdmUgbWFuaXB1bGF0aW5nIGBza19idWZmYCBzdHJ1Y3R1cmVzLCBpbmNsdWRpbmcgcG9zc2libGUgY2FsbHMgdG8gYHNrYl9jb3dfaGVhZGAuIFdoaWxlIHRoZSBjb2RlIGlzIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLCB0aGUgbW92ZSB0byBhIGBnb3RvYCBiYXNlZCBlcnJvciBoYW5kbGluZyBzY2hlbWUgZG9lcyBpbnRyb2R1Y2UgYSBuZXcgY29udHJvbCBmbG93LCBhbmQgaXTigJlzIGFsd2F5cyB3b3J0aCBjaGVja2luZyB0aG9zZSBmb3Igc3VidGxlIGZsYXdzIG9yIG1pc3NlZCBjb25kaXRpb25zLiBJdOKAmXMgYWxzbyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBgcHNrYl9tYXlfcHVsbGAgYW5kIGBza2JfY293X2hlYWRgIGNhbiBiZSB0cmlja3kgdG8gcmVhc29uIGFib3V0IGluIHRlcm1zIG9mIGhvdyB0aGV5IGludGVyYWN0IHdpdGggbWVtb3J5LlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBuZXR3b3JrIHBhY2tldCBoYW5kbGluZywgZXZlbiBhIHNlZW1pbmdseSBtaW5vciBjaGFuZ2UgbGlrZSB0aGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIFNvLCB5ZWFoLCBJJ2Qgc2F5IHRoaXMgaXMgd29ydGggYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gVGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaXMgYWx3YXlzIHByZXNlbnQgd2hlbiBkZWFsaW5nIHdpdGggcGFja2V0IHByb2Nlc3NpbmcuIExldCdzIGZpcmUgaXQgdXAgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJdCBpcyBhbHdheXMgYSBnb29kIGlkZWEgdG8gcGVyZm9ybSBhIGRlZXBlciBhbmFseXNpcyBvbiBuZXR3b3JrIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNjoyNS4zODE1OTU4NDZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI1OlxcdH1cXG4gNDI2OlxcdFxcbiA0Mjc6XFx0LypcXG4gNDI4OlxcdCAqIFByb2NlZHVyZXMgZm9yIGVuY2Fwc3VsYXRpb24gYW5kIGZyYW1pbmcuXFxuIDQyOTpcXHQgKi9cXG4gNDMwOlxcdFxcbiA0MzE6XFx0c3RhdGljIHN0cnVjdCBza19idWZmKlxcbiA0MzI6XFx0cHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDQzMzpcXHR7XFxuIDQzNDpcXHRcXHRpbnQgcHJvdG87XFxuIDQzNTpcXHRcXHR1bnNpZ25lZCBjaGFyICpkYXRhO1xcbiA0MzY6XFx0XFx0aW50IGlzbGNwO1xcbiA0Mzc6XFx0XFxuIDQzODpcXHRcXHQvKiBFbnN1cmUgd2UgY2FuIHNhZmVseSBhY2Nlc3MgcHJvdG9jb2wgZmllbGQgYW5kIExDUCBjb2RlICovXFxuIDQzOTpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAzKSlcXG4gNDQwOlxcdFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuIDQ0MTpcXHRcXG4gNDQyOlxcdFxcdGRhdGEgID0gc2tiLVxcdTAwM2VkYXRhO1xcbiA0NDM6XFx0XFx0cHJvdG8gPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7XFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdFxcdC8qIExDUCBwYWNrZXRzIHdpdGggY29kZXMgYmV0d2VlbiAxIChjb25maWd1cmUtcmVxdWVzdClcXG4gNDQ2OlxcdFxcdCAqIGFuZCA3IChjb2RlLXJlamVjdCkgbXVzdCBiZSBzZW50IGFzIHRob3VnaCBubyBvcHRpb25zXFxuIDQ0NzpcXHRcXHQgKiBoYXZlIGJlZW4gbmVnb3RpYXRlZC5cXG4gNDQ4OlxcdFxcdCAqL1xcbiA0NDk6XFx0XFx0aXNsY3AgPSBwcm90byA9PSBQUFBfTENQIFxcdTAwMjZcXHUwMDI2IDEgXFx1MDAzYz0gZGF0YVsyXSBcXHUwMDI2XFx1MDAyNiBkYXRhWzJdIFxcdTAwM2M9IDc7XFxuIDQ1MDpcXHRcXG4gNDUxOlxcdFxcdC8qIGNvbXByZXNzIHByb3RvY29sIGZpZWxkIGlmIG9wdGlvbiBlbmFibGVkICovXFxuIDQ1MjpcXHRcXHRpZiAoZGF0YVswXSA9PSAwIFxcdTAwMjZcXHUwMDI2IChhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX1BST1QpIFxcdTAwMjZcXHUwMDI2ICFpc2xjcClcXG4gNDUzOlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwxKTtcXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xcbiA0NTY6XFx0XFx0aWYgKChhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7XFxuIDQ1NzpcXHRcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpXFxuIDQ1ODpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbiA0NTk6XFx0XFxuIDQ2MDpcXHRcXHRcXHRza2JfcHVzaChza2IsMik7XFxuIDQ2MTpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbMF0gPSBQUFBfQUxMU1RBVElPTlM7XFxuIDQ2MjpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XFxuIDQ2MzpcXHRcXHR9XFxuIDQ2NDpcXHRcXG4gNDY1OlxcdFxcdGFwLVxcdTAwM2VsYXN0X3htaXQgPSBqaWZmaWVzO1xcbiA0NjY6XFx0XFxuIDQ2NzpcXHRcXHRpZiAoc2tiIFxcdTAwMjZcXHUwMDI2IGFwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0xPR19PVVRQS1QpXFxuIDQ2ODpcXHRcXHRcXHRwcHBfcHJpbnRfYnVmZmVyIChcXFwic2VuZCBidWZmZXJcXFwiLCBza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuKTtcXG4gNDY5OlxcdFxcbiA0NzA6XFx0XFx0cmV0dXJuIHNrYjtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0ZnJlZV9za2I6XFxuIDQ3MzpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDc0OlxcdFxcdHJldHVybiBOVUxMO1xcbiA0NzU6XFx0fVxcbiA0NzY6XFx0XFxuIDQ3NzpcXHQvKlxcbiA0Nzg6XFx0ICogVHJhbnNtaXQtc2lkZSByb3V0aW5lcy5cXG4gNDc5OlxcdCAqL1xcbiA0ODA6XFx0XFxuIDQ4MTpcXHQvKlxcbiA0ODI6XFx0ICogU2VuZCBhIHBhY2tldCB0byB0aGUgcGVlciBvdmVyIGFuIHN5bmMgdHR5IGxpbmUuXFxuIDQ4MzpcXHQgKiBSZXR1cm5zIDEgaWZmIHRoZSBwYWNrZXQgd2FzIGFjY2VwdGVkLlxcbiA0ODQ6XFx0ICogSWYgdGhlIHBhY2tldCB3YXMgbm90IGFjY2VwdGVkLCB3ZSB3aWxsIGNhbGwgcHBwX291dHB1dF93YWtldXBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDY6MjUuMzgxNjc0NjE2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2OTMwMjk0NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUmVmYWN0b3JpbmcqKlxuXG5BbHJpZ2h0LCB0aGlzIHBhdGNoLi4uIGl0J3MgYSBwdXJlIHJlZmFjdG9yaW5nLCBhIHNpbXBsZSBjbGVhbnVwLiBJdCdzIHRha2luZyB0d28gaW5zdGFuY2VzIG9mIHRoYXQgYGlmIHsga2ZyZWVfc2tiKHNrYik7IHJldHVybiBOVUxMOyB9YCBwYXR0ZXJuIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoIGEgYGdvdG8gZnJlZV9za2I7YCB3aGljaCB0aGVuIGhhbmRsZXMgdGhlIGBrZnJlZV9za2Ioc2tiKTsgcmV0dXJuIE5VTEw7YCBsb2dpYy4gVG90YWxseSBlcXVpdmFsZW50IHNlbWFudGljcywgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkxldCdzIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZS4gV2UncmUgdGFsa2luZyBhYm91dCB0aGluZ3MgbGlrZSBgcHNrYl9tYXlfcHVsbCgpYCBhbmQgYHNrYl9jb3dfaGVhZCgpYCwgZm9sbG93ZWQgYnkgdGhlIGVhcmx5IGV4aXQuIFRoZSBhZnRlciBsb29rcyBsaWtlIHRoZSBiZWZvcmUsIGp1c3Qgd2l0aCB0aGUgYGdvdG9gLiBBbmQsIHllYWgsIGBmcmVlX3NrYjpgIGlzIGRvaW5nIGV4YWN0bHkgd2hhdCBpdCB3YXMgZG9pbmcgYmVmb3JlOiBmcmVlaW5nIHRoZSBTS0IgYW5kIHJldHVybmluZyBOVUxMLiBUaGUgY29udHJvbCBmbG93IGFuZCBleGVjdXRpb24gYXJlIDEwMCUgaWRlbnRpY2FsLlxuXG5Eb2VzIHRoaXMgaW50cm9kdWNlIHNvbWUgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s/IE5vcGUsIGRvZXNuJ3QgbG9vayBsaWtlIGl0LiBEZWZpbml0ZWx5IG5vdC4gTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UuXG5cblJpZ2h0LCBsZXQncyBnZXQgdGhlIGluc3RydWN0aW9ucyBvbiB0aGlzIG5haWxlZCBkb3duLCB3aGF0IHdlIG5lZWQgdG8gcHJvZHVjZTpcblxuKiAgIFVzZSBzZXQtcmVzdWx0cyB0b29sIGZvciB0aGUgYW5hbHlzaXMgcmVzdWx0cy4gR290IGl0LlxuKiAgIEtNU0FOUmVhc29uaW5nOiBDb250cmFzdCBLTVNBTiB2cyBLQVNBTi5cbiogICBOZWVkc0tNU0FOOiBGYWxzZS5cblxuSGVyZSdzIGhvdyBJIHdvdWxkIHdyaXRlIHRoaXMgdXAgcHJvZmVzc2lvbmFsbHk6XG5cbjEuICAqKkRlc2NyaWJlIHRoZSBDaGFuZ2U6KiogVGhpcyBwYXRjaCBjb25zb2xpZGF0ZXMgcmVkdW5kYW50IGVycm9yIGV4aXQgcGF0aHMgaW4gdGhlIGBwcHBfc3luY190eG11bmdlKClgIGZ1bmN0aW9uLiBXZSdyZSB1c2luZyBhIGBnb3RvIGZyZWVfc2tiO2AgY2xlYW51cCBsYWJlbCB0byBtYWtlIHRoZSBjb2RlIGNsZWFuZXIuXG4yLiAgKipLTVNBTiBSZWxldmFuY2U6KiogVGhlIHBhdGNoIGRvZXNuJ3QgbWVzcyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nLCBzdGFjay9oZWFwIGluaXRpYWxpemF0aW9uLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzIHBhdGhzLiBUaGUgbG9naWMgYW5kIGNvbnRyb2wgZmxvdyBhcmUgdW5jaGFuZ2VkLiBObyBpbXBhY3QuXG4zLiAgKipLQVNBTi9TdGFuZGFyZCBEZXRlY3RvcnM6KiogTm8gbmV3IG1lbW9yeSBzYWZldHkgaGF6YXJkcyBhcmUgaW50cm9kdWNlZC4gSWYgdGhlcmUgKndlcmUqIFNLQiBtYW5hZ2VtZW50IHByb2JsZW1zLCBsaWtlIGRvdWJsZS1mcmVlIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgS0FTQU4gd291bGQgY2F0Y2ggdGhlbSwgYnV0IHRoZSBjbGVhbnVwJ3Mgc3RpbGwgdGhlIHNhbWUuXG40LiAgKipDb25jbHVzaW9uOioqIFdlIGRvbid0IG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQwLCJPdXRwdXRUb2tlbnMiOjE5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA2OjQyLjMxMTk3MzFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgIHRoYXQgY29uc29saWRhdGVzIGR1cGxpY2F0ZSBlcnJvciBoYW5kbGluZyBwYXRocyAoYGtmcmVlX3NrYihza2IpOyByZXR1cm4gTlVMTDtgKSBpbnRvIGEgY29tbW9uIGBnb3RvIGZyZWVfc2tiO2AgZXhpdCBsYWJlbC5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGFsdGVyIGhvdyBidWZmZXJzIGFyZSByZWFkLCB3cml0dGVuLCBvciBib3VuZHMtY2hlY2tlZCwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLlxcbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgS0FTQU4gY292ZXJzIGFueSBza2IgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlKSwgdGhvdWdoIHRoZSBwYXRjaCBkb2VzIG5vdCBjaGFuZ2Ugc2tiIGxpZmV0aW1lIG9yIGVycm9yIGhhbmRsaW5nIHNlbWFudGljcyBhdCBhbGwuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIGluIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AgdGhhdCBjb25zb2xpZGF0ZXMgZHVwbGljYXRlIGVycm9yIGhhbmRsaW5nIHBhdGhzIChga2ZyZWVfc2tiKHNrYik7IHJldHVybiBOVUxMO2ApIGludG8gYSBjb21tb24gYGdvdG8gZnJlZV9za2I7YCBleGl0IGxhYmVsLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgZG9lcyBub3QgYWx0ZXIgaG93IGJ1ZmZlcnMgYXJlIHJlYWQsIHdyaXR0ZW4sIG9yIGJvdW5kcy1jaGVja2VkLCBhbmQgZG9lcyBub3QgZXhwb3NlIG9yIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuXFxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBLQVNBTiBjb3ZlcnMgYW55IHNrYiBsaWZldGltZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUpLCB0aG91Z2ggdGhlIHBhdGNoIGRvZXMgbm90IGNoYW5nZSBza2IgbGlmZXRpbWUgb3IgZXJyb3IgaGFuZGxpbmcgc2VtYW50aWNzIGF0IGFsbC5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lp6d[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 11:02:56 +0000 UTC FinishedAt: 2026-09-15 11:06:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8aaeb56aff2a557a88f83ae866da2c91ad247e59", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP_SYNC_TTY", "PPP", "TTY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8aaeb56aff2a557a88f83ae866da2c91ad247e59", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PPP_SYNC_TTY", "PPP", "TTY" ], "series_id": "7cf4b200-62f3-417c-9350-8a21e72dda1d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ppp_sync_txmunge", "ppp_sync_send" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "8aaeb56aff2a557a88f83ae866da2c91ad247e59", "base_tree": "axboe" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUF9TWU5DX1RUWSYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwX3N5bmNfdHhtdW5nZSYjMzQ7LAogICAgJiMzNDtwcHBfc3luY19zZW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIGluIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AgdGhhdCBjb25zb2xpZGF0ZXMgZHVwbGljYXRlIGVycm9yIGhhbmRsaW5nIHBhdGhzIChga2ZyZWVfc2tiKHNrYik7IHJldHVybiBOVUxMO2ApIGludG8gYSBjb21tb24gYGdvdG8gZnJlZV9za2I7YCBleGl0IGxhYmVsLlxuXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGFsdGVyIGhvdyBidWZmZXJzIGFyZSByZWFkLCB3cml0dGVuLCBvciBib3VuZHMtY2hlY2tlZCwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLlxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBLQVNBTiBjb3ZlcnMgYW55IHNrYiBsaWZldGltZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUpLCB0aG91Z2ggdGhlIHBhdGNoIGRvZXMgbm90IGNoYW5nZSBza2IgbGlmZXRpbWUgb3IgZXJyb3IgaGFuZGxpbmcgc2VtYW50aWNzIGF0IGFsbC5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXJyb3ItaGFuZGxpbmcgcGF0aCBpbiBwcHBfc3luY190eG11bmdlKCkgd2l0aGluIGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGJ5IHJvdXRpbmcgcGFja2V0IGRyb3AgY2FzZXMgdG8gYSBzaGFyZWQgZnJlZV9za2IgbGFiZWwuIFRoaXMgY29kZSBpcyBleGVjdXRhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdGhlIE5fU1lOQ19QUFAgVFRZIGxpbmUgZGlzY2lwbGluZSBvdmVyIHB0eXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIHJlZmFjdG9yZWQgZnJhbWUgZW5jYXBzdWxhdGlvbiBhbmQgc2tiIGhhbmRsaW5nIHBhdGguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0OGE3NWRmMmNjODVjZjRhODZkYjg5ZDRiNTc2MzIwOWQwZmYxNTkzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTE6MDQ6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuaW5kZXggZWJkNjJhN2FiNTRiMy4uOWU0NDBlMTEwZTlmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuQEAgLTQzNiwxMCAmIzQzOzQzNiw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aW50IGlzbGNwO1xuIFxuIFx0LyogRW5zdXJlIHdlIGNhbiBzYWZlbHkgYWNjZXNzIHByb3RvY29sIGZpZWxkIGFuZCBMQ1AgY29kZSAqL1xuLVx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMykpIHtcbi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tXHRcdHJldHVybiBOVUxMO1xuLVx0fVxuJiM0MztcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDMpKVxuJiM0MztcdFx0Z290byBmcmVlX3NrYjtcbiYjNDM7XG4gXHRkYXRhICA9IHNrYi1cdTAwM2VkYXRhO1xuIFx0cHJvdG8gPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7XG4gXG5AQCAtNDU1LDEwICYjNDM7NDU0LDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gXHQvKiBwcmVwZW5kIGFkZHJlc3MvY29udHJvbCBmaWVsZHMgaWYgbmVjZXNzYXJ5ICovXG4gXHRpZiAoKGFwLVx1MDAzZWZsYWdzIFx1MDAyNiBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7XG4tXHRcdGlmIChza2JfY293X2hlYWQoc2tiLCAyKSkge1xuLVx0XHRcdGtmcmVlX3NrYihza2IpO1xuLVx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHR9XG4mIzQzO1x0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpXG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9za2I7XG4mIzQzO1xuIFx0XHRza2JfcHVzaChza2IsMik7XG4gXHRcdHNrYi1cdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO1xuIFx0XHRza2ItXHUwMDNlZGF0YVsxXSA9IFBQUF9VSTtcbkBAIC00NzAsNiAmIzQzOzQ2OCwxMCBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0cHBwX3ByaW50X2J1ZmZlciAoXCYjMzQ7c2VuZCBidWZmZXJcJiMzNDssIHNrYi1cdTAwM2VkYXRhLCBza2ItXHUwMDNlbGVuKTtcbiBcbiBcdHJldHVybiBza2I7XG4mIzQzO1xuJiM0MztmcmVlX3NrYjpcbiYjNDM7XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gLypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFBfU1lOQ19UVFkmIzM0OywKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcF9zeW5jX3R4bXVuZ2UmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gcHBwX3N5bmNfdHhtdW5nZSgpIHdpdGhpbiBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBieSByb3V0aW5nIHBhY2tldCBkcm9wIGNhc2VzIHRvIGEgc2hhcmVkIGZyZWVfc2tiIGxhYmVsLiBUaGlzIGNvZGUgaXMgZXhlY3V0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHRoZSBOX1NZTkNfUFBQIFRUWSBsaW5lIGRpc2NpcGxpbmUgb3ZlciBwdHlzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoZSByZWZhY3RvcmVkIGZyYW1lIGVuY2Fwc3VsYXRpb24gYW5kIHNrYiBoYW5kbGluZyBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDhhNzVkZjJjYzg1Y2Y0YTg2ZGI4OWQ0YjU3NjMyMDlkMGZmMTU5MwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDExOjA0OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwppbmRleCBlYmQ2MmE3YWI1NGIzLi45ZTQ0MGUxMTBlOWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYwpAQCAtNDM2LDEwICYjNDM7NDM2LDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpCiAJaW50IGlzbGNwOwogCiAJLyogRW5zdXJlIHdlIGNhbiBzYWZlbHkgYWNjZXNzIHByb3RvY29sIGZpZWxkIGFuZCBMQ1AgY29kZSAqLwotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIDMpKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gTlVMTDsKLQl9CiYjNDM7CWlmICghcHNrYl9tYXlfcHVsbChza2IsIDMpKQomIzQzOwkJZ290byBmcmVlX3NrYjsKJiM0MzsKIAlkYXRhICA9IHNrYi0mZ3Q7ZGF0YTsKIAlwcm90byA9IGdldF91bmFsaWduZWRfYmUxNihkYXRhKTsKIApAQCAtNDU1LDEwICYjNDM7NDU0LDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpCiAKIAkvKiBwcmVwZW5kIGFkZHJlc3MvY29udHJvbCBmaWVsZHMgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKChhcC0mZ3Q7ZmxhZ3MgJmFtcDsgU0NfQ09NUF9BQykgPT0gMCB8fCBpc2xjcCkgewotCQlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHsKLQkJCWtmcmVlX3NrYihza2IpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KJiM0MzsJCWlmIChza2JfY293X2hlYWQoc2tiLCAyKSkKJiM0MzsJCQlnb3RvIGZyZWVfc2tiOwomIzQzOwogCQlza2JfcHVzaChza2IsMik7CiAJCXNrYi0mZ3Q7ZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUzsKIAkJc2tiLSZndDtkYXRhWzFdID0gUFBQX1VJOwpAQCAtNDcwLDYgJiM0Mzs0NjgsMTAgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpCiAJCXBwcF9wcmludF9idWZmZXIgKCYjMzQ7c2VuZCBidWZmZXImIzM0Oywgc2tiLSZndDtkYXRhLCBza2ItJmd0O2xlbik7CiAKIAlyZXR1cm4gc2tiOwomIzQzOwomIzQzO2ZyZWVfc2tiOgomIzQzOwlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJcmV0dXJuIE5VTEw7CiB9CiAKIC8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMjAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA1MzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQUFAgU3luY2hyb25pemF0aW9uIFRyYW5zbWl0IE11bmdpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgbWFraW5nIGEgY291cGxlIG9mIGNoYW5nZXMgd2l0aGluIHRoZSBgcHBwX3N5bmNfdHhtdW5nZWAgZnVuY3Rpb24uIFRoaXMgZnVuY3Rpb24sIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgcmVzcG9uc2libGUgZm9yIHByb2Nlc3Npbmcgb3V0Ym91bmQgcGFja2V0cyBvbiBzeW5jaHJvbm91cyBQUFAgbGlua3MsIGhhbmRsaW5nIHRoaW5ncyBsaWtlIGFkZHJlc3MgYW5kIGNvbnRyb2wgZmllbGQgaW5zZXJ0aW9uLCBhbmQgZ2VuZXJhbGx5IHByZXBhcmluZyB0aGUgcGFja2V0IGZvciB0cmFuc21pc3Npb24gb3ZlciB0aGUgc2VyaWFsIGludGVyZmFjZS4KClRoZSBwcmltYXJ5IGNoYW5nZSBzZWVtcyB0byBiZSBhYm91dCBlcnJvciBoYW5kbGluZy4gVGhlIG9yaWdpbmFsIGNvZGUgdXNlZCB0byBjaGVjayBmb3IgbWVtb3J5IGFsbG9jYXRpb24gaXNzdWVzIG9yIHBhY2tldCBzdHJ1Y3R1cmUgaW50ZWdyaXR5IHdpdGggYHBza2JfbWF5X3B1bGxgIGFuZCBgc2tiX2Nvd19oZWFkYCwgYW5kIHRoZW4gYGtmcmVlX3NrYmAgd2l0aGluIHRoZSBgaWZgIGJsb2Nrcy4gTm93LCBpdCBhcHBlYXJzIHRoZXkgYXJlIGNoYW5naW5nIHRob3NlIGluc3RhbmNlcywgd2hlcmUgdGhlIGNoZWNrIGZhaWxzLCB0byBhIGBnb3RvIGZyZWVfc2tiO2Agc3RhdGVtZW50LiBUaGlzIGNoYW5nZSByZWZhY3RvcnMgdGhlIGVycm9yIGhhbmRsaW5nIHVzaW5nIGEgYGdvdG9gIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwgd2hpY2ggc2hvdWxkIGltcHJvdmUgcmVhZGFiaWxpdHkuIEl0JiMzOTtzIGNsZWFuZXIsIGVsaW1pbmF0aW5nIHRoZSBuZXN0ZWQgY29uZGl0aW9uYWwgc3RydWN0dXJlLgoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzICYjMzQ7Z290byYjMzQ7IGFwcHJvYWNoIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgcHJvamVjdCYjMzk7cyBjb2Rpbmcgc3R5bGUgZ3VpZGVsaW5lcywgYnV0LCBmcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgaXQgbG9va3MgbG9naWNhbGx5IGVxdWl2YWxlbnQuIEl0IHNob3J0LWNpcmN1aXRzIHRoZSBmdW5jdGlvbiwgZnJlZXMgdGhlIFNLQiwgYW5kIHJldHVybnMgTlVMTCwgd2hpY2ggSSBhc3N1bWUgaW5kaWNhdGVzIGEgZmFpbHVyZSB0byBwcm9jZXNzIHRoZSBwYWNrZXQuCgpUbyBiZSBleHRyYSB0aG9yb3VnaCwgSSYjMzk7bGwgd2FudCB0byBjaGVjayB0aGUgY29udGV4dCwgdG8gZXhhbWluZSB3aGF0IGNvZGUgY2FsbHMgYHBwcF9zeW5jX3R4bXVuZ2VgIGFuZCB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSB3aWxsIGFsc28gbWFrZSBzdXJlIHRvIGNoZWNrIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBwcHBfc3luY3R0eS5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHRoYXQgdGhpcyBjaGFuZ2UgbWlnaHQgaW50cm9kdWNlLiBMZXQgbWUgZ3JhYiBteSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG9vbHMgdG8gaW52ZXN0aWdhdGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA3MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0fVxuIDQyNjpcdFxuIDQyNzpcdC8qXG4gNDI4Olx0ICogUHJvY2VkdXJlcyBmb3IgZW5jYXBzdWxhdGlvbiBhbmQgZnJhbWluZy5cbiA0Mjk6XHQgKi9cbiA0MzA6XHRcbiA0MzE6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYqXG4gNDMyOlx0cHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gNDMzOlx0e1xuIDQzNDpcdFx0aW50IHByb3RvO1xuIDQzNTpcdFx0dW5zaWduZWQgY2hhciAqZGF0YTtcbiA0MzY6XHRcdGludCBpc2xjcDtcbiA0Mzc6XHRcbiA0Mzg6XHRcdC8qIEVuc3VyZSB3ZSBjYW4gc2FmZWx5IGFjY2VzcyBwcm90b2NvbCBmaWVsZCBhbmQgTENQIGNvZGUgKi9cbiA0Mzk6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDMpKVxuIDQ0MDpcdFx0XHRnb3RvIGZyZWVfc2tiO1xuIDQ0MTpcdFxuIDQ0MjpcdFx0ZGF0YSAgPSBza2ItXHUwMDNlZGF0YTtcbiA0NDM6XHRcdHByb3RvID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEpO1xuIDQ0NDpcdFxuIDQ0NTpcdFx0LyogTENQIHBhY2tldHMgd2l0aCBjb2RlcyBiZXR3ZWVuIDEgKGNvbmZpZ3VyZS1yZXF1ZXN0KVxuIDQ0NjpcdFx0ICogYW5kIDcgKGNvZGUtcmVqZWN0KSBtdXN0IGJlIHNlbnQgYXMgdGhvdWdoIG5vIG9wdGlvbnNcbiA0NDc6XHRcdCAqIGhhdmUgYmVlbiBuZWdvdGlhdGVkLlxuIDQ0ODpcdFx0ICovXG4gNDQ5Olx0XHRpc2xjcCA9IHByb3RvID09IFBQUF9MQ1AgXHUwMDI2XHUwMDI2IDEgXHUwMDNjPSBkYXRhWzJdIFx1MDAyNlx1MDAyNiBkYXRhWzJdIFx1MDAzYz0gNztcbiA0NTA6XHRcbiA0NTE6XHRcdC8qIGNvbXByZXNzIHByb3RvY29sIGZpZWxkIGlmIG9wdGlvbiBlbmFibGVkICovXG4gNDUyOlx0XHRpZiAoZGF0YVswXSA9PSAwIFx1MDAyNlx1MDAyNiAoYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfUFJPVCkgXHUwMDI2XHUwMDI2ICFpc2xjcClcbiA0NTM6XHRcdFx0c2tiX3B1bGwoc2tiLDEpO1xuIDQ1NDpcdFxuIDQ1NTpcdFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xuIDQ1NjpcdFx0aWYgKChhcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9BQykgPT0gMCB8fCBpc2xjcCkge1xuIDQ1NzpcdFx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpXG4gNDU4Olx0XHRcdFx0Z290byBmcmVlX3NrYjtcbiA0NTk6XHRcbiA0NjA6XHRcdFx0c2tiX3B1c2goc2tiLDIpO1xuIDQ2MTpcdFx0XHRza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztcbiA0NjI6XHRcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XG4gNDYzOlx0XHR9XG4gNDY0Olx0XG4gNDY1Olx0XHRhcC1cdTAwM2VsYXN0X3htaXQgPSBqaWZmaWVzO1xuIDQ2NjpcdFxuIDQ2NzpcdFx0aWYgKHNrYiBcdTAwMjZcdTAwMjYgYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0xPR19PVVRQS1QpXG4gNDY4Olx0XHRcdHBwcF9wcmludF9idWZmZXIgKFwmIzM0O3NlbmQgYnVmZmVyXCYjMzQ7LCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gNDY5Olx0XG4gNDcwOlx0XHRyZXR1cm4gc2tiO1xuIDQ3MTpcdFxuIDQ3MjpcdGZyZWVfc2tiOlxuIDQ3MzpcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNDc0Olx0XHRyZXR1cm4gTlVMTDtcbiA0NzU6XHR9XG4gNDc2Olx0XG4gNDc3Olx0LypcbiA0Nzg6XHQgKiBUcmFuc21pdC1zaWRlIHJvdXRpbmVzLlxuIDQ3OTpcdCAqL1xuIDQ4MDpcdFxuIDQ4MTpcdC8qXG4gNDgyOlx0ICogU2VuZCBhIHBhY2tldCB0byB0aGUgcGVlciBvdmVyIGFuIHN5bmMgdHR5IGxpbmUuXG4gNDgzOlx0ICogUmV0dXJucyAxIGlmZiB0aGUgcGFja2V0IHdhcyBhY2NlcHRlZC5cbiA0ODQ6XHQgKiBJZiB0aGUgcGFja2V0IHdhcyBub3QgYWNjZXB0ZWQsIHdlIHdpbGwgY2FsbCBwcHBfb3V0cHV0X3dha2V1cFxuIDQ4NTpcdCAqIGF0IHNvbWUgbGF0ZXIgdGltZS5cbiA0ODY6XHQgKi9cbiA0ODc6XHRzdGF0aWMgaW50XG4gNDg4Olx0cHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4gNDg5Olx0e1xuIDQ5MDpcdFx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cdTAwM2Vwcml2YXRlO1xuIDQ5MTpcdFxuIDQ5MjpcdFx0cHBwX3N5bmNfcHVzaChhcCk7XG4gNDkzOlx0XG4gNDk0Olx0XHRpZiAodGVzdF9hbmRfc2V0X2JpdChYTUlUX0ZVTEwsIFx1MDAyNmFwLVx1MDAzZXhtaXRfZmxhZ3MpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgdGhlIENhbGxlcnMgb2YgYHBwcF9zeW5jX3R4bXVuZ2VgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBwcHBfc3luY190eG11bmdlYC4gSXQmIzM5O3MgYSBwcmV0dHkgZ2VuZXJpYy1zb3VuZGluZyBuYW1lLCBzbyBkaXZpbmcgaW50byB0aGUgY29kZWJhc2UgaXMgdGhlIG9ubHkgcmVhbCB3YXkgZm9yd2FyZCBoZXJlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gcGlucG9pbnQgKndoZXJlKiBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGUgZnVuY3Rpb24mIzM5O3MgcHVycG9zZSBpcyBsaWtlbHkgcmVsYXRlZCB0byBzeW5jaHJvbml6YXRpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHRyYW5zbWl0dGVkIGRhdGEgd2l0aGluIHRoZSBQUFAgZnJhbWV3b3JrLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgaW1tZWRpYXRlbHkgcHJvdmlkZSBpbnNpZ2h0IGludG8gd2hhdCBkYXRhIGlzIGJlaW5nIG11bmNoZWQsIHdoYXQgdGhlIHN5bmNocm9uaXphdGlvbiBjb25jZXJucyBhcmUsIGFuZCB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYXJvdW5kIHRoaXMgZnVuY3Rpb24uIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYXNvbiBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIHN0cmF0ZWdpZXMsIGFuZCBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIExvb2tpbmcgZm9yIHRoZSBjYWxsIHNpdGVzIGlzIHRoZSBmaXJzdCBlc3NlbnRpYWwgc3RlcDsgbGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBncmVwIG9yIHNvdXJjZSBjb2RlIG5hdmlnYXRpb24gdG9vbHMgdHVybiB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfc3luY190eG11bmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NTA9c3RydWN0IHN5bmNwcHAge1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTgyLSAqL1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6ODM6c3RhdGljIHN0cnVjdCBza19idWZmKiBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKik7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy04NC1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz00MzE9c3RhdGljIHN0cnVjdCBza19idWZmKlxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NDMyOnBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNDMzLXtcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz00ODg9cHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNDk1LVx0XHRyZXR1cm4gMDtcdC8qIGFscmVhZHkgZnVsbCAqL1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NDk2Olx0c2tiID0gcHBwX3N5bmNfdHhtdW5nZShhcCwgc2tiKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQ5Ny1cdGlmIChza2IgIT0gTlVMTClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Nzg4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlYnVnZ2luZyB0aGUgYHBwcF9zeW5jX3NlbmRgIENhbGxlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRlYWxpbmcgd2l0aCBgcHBwX3N5bmNfc2VuZGAuIFRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIG1ha2luZyB0aGUgY2FsbC4gVGltZSB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBzZWUgd2hhdCYjMzk7cyBlbmFibGVkLCBhbmQgc3BlY2lmaWNhbGx5LCB3aGF0JiMzOTtzIHJlbGF0ZWQgdG8gYHBwcF9zeW5jdHR5LmNgLiBLY29uZmlnIGlzIHRoZSBrZXkgaGVyZS4gTGV0JiMzOTtzIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhpcyBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHBwX3N5bmN0dHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfUFBQX01QUEUpICYjNDM7PSBwcHBfbXBwZS5vXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1BQUF9TWU5DX1RUWSkgJiM0Mzs9IHBwcF9zeW5jdHR5Lm9cbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfUFBQT1gpICYjNDM7PSBwcHBveC5vXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MTAyPXBwcF9wcmludF9idWZmZXIgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IF9fdTggKmJ1ZiwgaW50IGNvdW50KVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTEwNC1cdGlmIChuYW1lICE9IE5VTEwpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoxMDU6XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0O3BwcF9zeW5jdHR5OiAlcywgY291bnQgPSAlZFxcblwmIzM0OywgbmFtZSwgY291bnQpO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTA2LVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTIwOD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyMDk6cHBwX3N5bmN0dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yMTAte1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI4Nj1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX3N5bmNfbGRpc2MgPSB7XG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjkzLVx0LndyaXRlXHQ9IHBwcF9zeW5jX3dyaXRlLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6Mjk0Olx0LmlvY3RsXHQ9IHBwcF9zeW5jdHR5X2lvY3RsLFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjk1LVx0LnJlY2VpdmVfYnVmID0gcHBwX3N5bmNfcmVjZWl2ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDI3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZW1iZWRkZWQgc3lzdGVtcyBleHBlcnQgZmFtaWxpYXIgd2l0aCBLY29uZmlnOgoKKipDaGVja2luZyB0aGUgUFBQX1NZTkNfVFRZIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzdGF0ZSBvZiBgUFBQX1NZTkNfVFRZYC4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gc3luY2hyb25vdXMgUFBQIGNvbm5lY3Rpb25zLCBwcm9iYWJseSBzZXJpYWwgaW50ZXJmYWNlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHBlcmhhcHMgY29uZGl0aW9uYWxseSBzZXQuIFdoZXJlIGRvZXMgdGhpcyBtb2R1bGUgc3RhbmQgbm93LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB3aGljaCBhcmNoaXRlY3R1cmUgYW5kIGtlcm5lbCB2ZXJzaW9ucyBJJiMzOTttIGRlYWxpbmcgd2l0aCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmcmFnbWVudC4gSG9wZWZ1bGx5LCB0aGUgc3ltYm9sIG5hbWUgaXMgcmVhc29uYWJseSBpbnR1aXRpdmUsIGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzdHJhaWdodGZvcndhcmQuIFRoaXMgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJIHByb2NlZWQgd2l0aCB3aGF0ZXZlciB0YXNrIEkgaGF2ZSBhdCBoYW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUFBfU1lOQ19UVFkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE4Mz1jb25maWcgUFBQX0FTWU5DXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTk1LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTk2OmNvbmZpZyBQUFBfU1lOQ19UVFlcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5Ny1cdHRyaXN0YXRlIFwmIzM0O1BQUCBzdXBwb3J0IGZvciBzeW5jIHR0eSBwb3J0c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzM4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEtjb25maWcgRmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHRoYXQgYEtjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxOTYuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgY29uZmlndXJlZCB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIGZvciB2YXJpYWJsZXMsIGxpa2VseSBib29sZWFuIG9yIHRyaXN0YXRlLCBtYXliZSBzb21lIHN0cmluZyBvciBpbnRlZ2VyIG9wdGlvbnMsIGFuZCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlbS4gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBvciBkZWZhdWx0cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEFyZSB0aGVyZSBhbnkgc2VsZWN0IHN0YXRlbWVudHMgcG9pbnRpbmcgYXQgYSBwYXJlbnQgY29uZmlnIHN5bWJvbD8gVGhlIGdvYWwgaXMgdG8gc2VlIHdoaWNoIGZlYXR1cmVzIGFyZSBjb25kaXRpb25hbGx5IGVuYWJsZWQgYW5kIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhhdCBiZWhhdmlvci4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBhcmVhIGluIHJlbGF0aW9uIHRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTA6XHRcdCAgbmVlZCB0aGlzIG9wdGlvbi5cbiAxOTE6XHRcbiAxOTI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiAxOTM6XHRcbiAxOTQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAxOTU6XHRcbiAxOTY6XHRjb25maWcgUFBQX1NZTkNfVFRZXG4gMTk3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcJiMzNDtcbiAxOTg6XHRcdGhlbHBcbiAxOTk6XHRcdCAgU2F5IFkgKG9yIE0pIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgUFBQIG92ZXIgc3luY2hyb25vdXNcbiAyMDA6XHRcdCAgKEhETEMpIHR0eSBkZXZpY2VzLiBUaGVzZSBkZXZpY2VzIGFyZSBvZnRlbiB1c2VkIGZvciBoaWdoLXNwZWVkIGxlYXNlZFxuIDIwMTpcdFx0ICBsaW5lcyBsaWtlIFQxL0UxLlxuIDIwMjpcdFxuIDIwMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLlxuIDIwNDpcdFxuIDIwNTpcdGVuZGlmICMgVFRZXG4gMjA2Olx0XG4gMjA3Olx0ZW5kaWYgIyBQUFBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIwNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBQUFBfU1lOQ19UVFkgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBgUFBQX1NZTkNfVFRZYCBpbiB0aGUga2VybmVsLiBNeSBmaXJzdCBzdG9wIHNob3VsZCBiZSB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBmb3IgY29uZmlndXJpbmcgUFBQLXJlbGF0ZWQgb3B0aW9ucywgYW5kIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHdoZXJlIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIHRleHQgZm9yIGtlcm5lbCBmZWF0dXJlcyByZXNpZGUuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgY29uc3RyYWludHMsIHRoZSBwYXJlbnQgZGVwZW5kZW5jaWVzLCB0aGF0IGRldGVybWluZSB3aGVuIGBQUFBfU1lOQ19UVFlgIHdpbGwgYmUgaW5jbHVkZWQgaW4gYSBidWlsZC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBQUFAgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgUFBQXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgU0xIQ1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xuICAxMTpcdFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxuICAxMjpcdFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxuICAxMzpcdFx0ICBvdGhlcndpc2UgeW91IGNhbiYjMzk7dCB1c2UgaXQ7IG1vc3QgSW50ZXJuZXQgYWNjZXNzIHByb3ZpZGVycyB0aGVzZVxuICAxNDpcdFx0ICBkYXlzIHN1cHBvcnQgUFBQIHJhdGhlciB0aGFuIFNMSVAuXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRvIHVzZSBQUFAsIHlvdSBuZWVkIGFuIGFkZGl0aW9uYWwgcHJvZ3JhbSBjYWxsZWQgcHBwZCwgYXZhaWxhYmxlIGF0XG4gIDE3Olx0XHQgIFx1MDAzY2h0dHBzOi8vcHBwLnNhbWJhLm9yZ1x1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcbiAgMTg6XHRcdCAgcmVjb21tZW5kZWQgaW4gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL0NoYW5nZXNcdTAwM2UuXG4gIDE5Olx0XHQgIFRoZSBQUFAgb3B0aW9uIGVubGFyZ2VzIHlvdXIga2VybmVsIGJ5IGFib3V0IDE2IEtCLlxuICAyMDpcdFxuICAyMTpcdFx0ICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHZlcnNpb25zIG9mIFBQUDogdGhlIHRyYWRpdGlvbmFsIFBQUCBmb3JcbiAgMjI6XHRcdCAgYXN5bmNocm9ub3VzIGxpbmVzLCBzdWNoIGFzIHJlZ3VsYXIgYW5hbG9nIHBob25lIGxpbmVzLCBhbmRcbiAgMjM6XHRcdCAgc3luY2hyb25vdXMgUFBQIHdoaWNoIGNhbiBiZSB1c2VkIG92ZXIgZGlnaXRhbCBJU0ROIGxpbmVzIGZvclxuICAyNDpcdFx0ICBleGFtcGxlLiAgSWYgeW91IHdhbnQgdG8gdXNlIFBQUCBvdmVyIHBob25lIGxpbmVzIG9yIG90aGVyXG4gIDI1Olx0XHQgIGFzeW5jaHJvbm91cyBzZXJpYWwgbGluZXMsIHlvdSBuZWVkIHRvIHNheSBZIChvciBNKSBoZXJlIGFuZCBhbHNvIHRvXG4gIDI2Olx0XHQgIHRoZSBuZXh0IG9wdGlvbiwgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0Oy4gIEZvciBQUFAgb3ZlclxuICAyNzpcdFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXCYjMzQ7U3VwcG9ydFxuICAyODpcdFx0ICBzeW5jaHJvbm91cyBQUFBcJiMzNDssIGJlbG93LlxuICAyOTpcdFxuICAzMDpcdFx0ICBJZiB5b3Ugc2FpZCBZIHRvIFwmIzM0O1ZlcnNpb24gaW5mb3JtYXRpb24gb24gYWxsIHN5bWJvbHNcJiMzNDsgYWJvdmUsIHRoZW5cbiAgMzE6XHRcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcbiAgMzI6XHRcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cbiAgMzM6XHRcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cbiAgMzQ6XHRcbiAgMzU6XHRpZiBQUFBcbiAgMzY6XHRcbiAgMzc6XHRjb25maWcgUFBQX0JTRENPTVBcbiAgMzg6XHRcdHRyaXN0YXRlIFwmIzM0O1BQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cJiMzNDtcbiAgMzk6XHRcdGhlbHBcbiAgNDA6XHRcdCAgU3VwcG9ydCBmb3IgdGhlIEJTRC1Db21wcmVzcyBjb21wcmVzc2lvbiBtZXRob2QgZm9yIFBQUCwgd2hpY2ggdXNlc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDMwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBQUFAgS2NvbmZpZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgcmVsYXRlZCB0byBgaWYgVFRZYCB3aXRoaW4gdGhlIFBQUCBkcml2ZXImIzM5O3MgS2NvbmZpZyBmaWxlLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgSSYjMzk7bGwgZmluZCBpdCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IGBDT05GSUdfYCBvcHRpb25zIHJlbGF0ZWQgdG8gdGVybWluYWwgc3VwcG9ydCBmb3IgUFBQIGFyZSBkZWZpbmVkLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgdG8gc2VlIGlmIHRlcm1pbmFsIHJlbGF0ZWQgb3B0aW9ucyBhcmUgZGVwZW5kZW50IG9uIGEgVFRZIGRldmljZS4gVGltZSB0byB0YWtlIGEgbG9vaywgYW5kIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlISBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgYmxvY2sgdGhhdCB0aWVzIHRoZSBUVFktcmVsYXRlZCBQUFAgZmVhdHVyZXMgdG8gd2hldGhlciBUVFkgc3VwcG9ydCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGdldCBpbnRvIHRoZSB3ZWVkcywgYW5kIHNlZSB0aGUgZGV0YWlscyB0aGVyZS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VFRZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTczPWNvbmZpZyBQUFBPTDJUUFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE4MC1cdCAgdHVubmVscy4gTDJUUCBpcyByZXBsYWNpbmcgUFBUUCBmb3IgVlBOIHVzZXMuXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxODE6aWYgVFRZXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xODItXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xODM9Y29uZmlnIFBQUF9BU1lOQ1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5NS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE5Njpjb25maWcgUFBQX1NZTkNfVFRZXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0yMDQtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoyMDU6ZW5kaWYgIyBUVFlcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTIwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ4NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoaXMgY29kZSBzbmlwcGV0OgoKKipVbmRlcnN0YW5kaW5nIHRoZSBgUFBQX1NZTkNfVFRZYCBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkmIzM5O20gc2VlaW5nIHRoYXQgdGhlIGZ1bmN0aW9uYWxpdHkgcmVwcmVzZW50ZWQgYnkgYFBQUF9TWU5DX1RUWWAgaXMgY2xlYXJseSByZWxpYW50IG9uIGJvdGggdGhlIGBQUFBgIGFuZCBgVFRZYCBzdWJzeXN0ZW1zLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGUgYHBwcF9zeW5jdHR5YCBmdW5jdGlvbmFsaXR5IGlzIGFjdHVhbGx5IGludGVncmF0ZWQgYW5kIGhvdyB0aGUga2VybmVsIHJlYWNoZXMgaXQuCgpGaXJzdCwgSSBrbm93IGBwcHBfc3luY3R0eWAgaXMgZGVhbGluZyB3aXRoIHJlZ2lzdGVyaW5nIGEgVFRZIGxpbmUgZGlzY2lwbGluZS4gTXkgZm9jdXMgc2hvdWxkIGJlIHdoZXJlIHRoYXQgcmVnaXN0cmF0aW9uIGhhcHBlbnMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgZWl0aGVyIHRoZSBgcHBwX3N5bmNfaW5pdGAgZnVuY3Rpb24sIG9yIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgaW4gdGhlIGBwcHBfc3luY3R0eS5jYCBzb3VyY2UgY29kZS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgc2hvdWxkIGJlIGhhcHBlbmluZywgd2hlcmUgdGhlIFRUWSBsaW5lIGRpc2NpcGxpbmUgaXMgbGlua2VkIGludG8gdGhlIHN5c3RlbS4gVGhpcyB3aWxsIHNob3cgbWUgdGhlIGVudHJ5IHBvaW50IGFuZCBob3cgdGhlIHBpZWNlcyBjb25uZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0dHlfcmVnaXN0ZXJfbGRpc2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0zMDA9cHBwX3N5bmNfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTMwMy1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjMwNDpcdGVyciA9IHR0eV9yZWdpc3Rlcl9sZGlzYyhcdTAwMjZwcHBfc3luY19sZGlzYyk7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0zMDUtXHRpZiAoZXJyICE9IDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBMaW5lIERpc2NpcGxpbmUgTWFuaXB1bGF0aW9uKioKCk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgaG93IGxpbmUgZGlzY2lwbGluZXMgYXJlIGNvbmZpZ3VyZWQgd2l0aGluIGEgc3lzdGVtLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGlvY3RsKGZkLCBUSU9DU0VURCwgTl9TWU5DX1BQUClgLCB3aGljaCBpcyB0aGUgc3lzdGVtIGNhbGwgZm9yLCBlc3NlbnRpYWxseSwgc3dhcHBpbmcgb3V0IHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29sIG9uIGEgc3BlY2lmaWMgZmlsZSBkZXNjcmlwdG9yLCBpbiB0aGlzIGNhc2UsIGxpa2VseSBhIHBzZXVkby10ZXJtaW5hbCAocHR5KS4gVGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGF0ICphbnkqIHVucHJpdmlsZWdlZCB1c2VyIG9yIHByb2Nlc3MgdGhhdCBoYXMgYWNjZXNzIHRvIHRoZSBwdHkgY2FuIGV4ZWN1dGUgdGhpcyBjYWxsIHRvIHNldCB0aGUgbGluZSBkaXNjaXBsaW5lLiBUaGF0IHNvdW5kcyBsaWtlIGEgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgcmlwZSBmb3IgZXhwbG9yYXRpb24uCgpBbmQsIGlmIEkmIzM5O20gdW5kZXJzdGFuZGluZyB0aGlzIGNvcnJlY3RseSwgU3l6a2FsbGVyLCBhIHByb21pbmVudCBmdXp6ZXIsIHJvdXRpbmVseSB0ZXN0cyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2l0aCBkaXNjaXBsaW5lcyBsaWtlIGBOX1NZTkNfUFBQYCwgd2hpY2ggaGFzIGFuIGlkZW50aWZpZXIgb2YgMTQsIGFzIHRoZSBleGFtcGxlIG1lbnRpb25zLiBTbywgZ2l2ZW4gU3l6a2FsbGVyJiMzOTtzIHB1cnBvc2UsIHRoZXkgYXJlIGxpa2VseSBhdHRlbXB0aW5nIHRvIHRyaWdnZXIgY3Jhc2hlcyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKU28sIGxldCYjMzk7cyB2ZXJpZnkgdGhhdCBkaXNjaXBsaW5lIG51bWJlciwgdG8gYmUgY2VydGFpbi4gV2Ugc2hvdWxkIGxvb2sgaW50byB3aGV0aGVyIHRoYXQgbnVtYmVyIGlzIHN0YW5kYXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBfc3luY19sZGlzYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI3ND1wcHBfc3luY193YWtldXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yODUtXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyODY6c3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHBwcF9zeW5jX2xkaXNjID0ge1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjg3LVx0Lm93bmVyXHQ9IFRISVNfTU9EVUxFLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTMwMD1wcHBfc3luY19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMzAzLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MzA0Olx0ZXJyID0gdHR5X3JlZ2lzdGVyX2xkaXNjKFx1MDAyNnBwcF9zeW5jX2xkaXNjKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTMwNS1cdGlmIChlcnIgIT0gMClcbi0tXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz02NDg9cHBwX3N5bmNfY2xlYW51cCh2b2lkKVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNjQ5LXtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1MDpcdHR0eV91bnJlZ2lzdGVyX2xkaXNjKFx1MDAyNnBwcF9zeW5jX2xkaXNjKTtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTY1MS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MDMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgbGRpc2NgIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBleGFtaW5pbmcgdGhvc2UgYGxkaXNjYCBvcGVyYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpbnZvbHZlcyBhIG1lbnRhbCBjaGVja2xpc3QuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCBpcyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLCBhbmQgaG93IGlzIHRoZSBgbGRpc2NgIGJlaW5nIHVzZWQgd2l0aGluIGl0PyBJJiMzOTttIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgc3VjaCBhcyBob3cgdGhlIGxpbmUgZGlzY2lwbGluZSBhZmZlY3RzIGRhdGEgZmxvdywgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBhbnkgYXNzb2NpYXRlZCBpbnRlcnJ1cHQgaGFuZGxpbmcuCgpOZXh0LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0eXBpY2FsIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgYGxkaXNjYC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBhIHN0YW5kYXJkIHRlcm1pbmFsLXN0eWxlIGRpc2NpcGxpbmUsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkIGxpa2UgYSBuZXR3b3JrIGludGVyZmFjZSBjb250cm9sbGVyIG9yIGV2ZW4gYSBjdXN0b20gaW1wbGVtZW50YXRpb24/IFRoZSBzcGVjaWZpYyBgbGRpc2NgIHdpbGwgZGljdGF0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwb2ludGVycywgYW5kIGFzc29jaWF0ZWQgY29udHJvbCBtZWNoYW5pc21zIHRoYXQgYXJlIGluIHBsYXkuIEFueSBvZGRpdHkgb3Igbm9uc3RhbmRhcmQgYXBwcm9hY2ggd291bGQgYmUgc2lnbmlmaWNhbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFyYWN0ZXJpc3RpY3MgYW5kIG9wZXJhdGlvbnMgcGVyZm9ybWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODA6XHRcdFx0cmV0dXJuO1xuIDI4MTpcdFx0c2V0X2JpdChYTUlUX1dBS0VVUCwgXHUwMDI2YXAtXHUwMDNleG1pdF9mbGFncyk7XG4gMjgyOlx0XHR0YXNrbGV0X3NjaGVkdWxlKFx1MDAyNmFwLVx1MDAzZXRzayk7XG4gMjgzOlx0fVxuIDI4NDpcdFxuIDI4NTpcdFxuIDI4NjpcdHN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyBwcHBfc3luY19sZGlzYyA9IHtcbiAyODc6XHRcdC5vd25lclx0PSBUSElTX01PRFVMRSxcbiAyODg6XHRcdC5udW1cdD0gTl9TWU5DX1BQUCxcbiAyODk6XHRcdC5uYW1lXHQ9IFwmIzM0O3BwcHN5bmNcJiMzNDssXG4gMjkwOlx0XHQub3Blblx0PSBwcHBfc3luY19vcGVuLFxuIDI5MTpcdFx0LmNsb3NlXHQ9IHBwcF9zeW5jX2Nsb3NlLFxuIDI5MjpcdFx0LnJlYWRcdD0gcHBwX3N5bmNfcmVhZCxcbiAyOTM6XHRcdC53cml0ZVx0PSBwcHBfc3luY193cml0ZSxcbiAyOTQ6XHRcdC5pb2N0bFx0PSBwcHBfc3luY3R0eV9pb2N0bCxcbiAyOTU6XHRcdC5yZWNlaXZlX2J1ZiA9IHBwcF9zeW5jX3JlY2VpdmUsXG4gMjk2Olx0XHQud3JpdGVfd2FrZXVwID0gcHBwX3N5bmNfd2FrZXVwLFxuIDI5NzpcdH07XG4gMjk4Olx0XG4gMjk5Olx0c3RhdGljIGludCBfX2luaXRcbiAzMDA6XHRwcHBfc3luY19pbml0KHZvaWQpXG4gMzAxOlx0e1xuIDMwMjpcdFx0aW50IGVycjtcbiAzMDM6XHRcbiAzMDQ6XHRcdGVyciA9IHR0eV9yZWdpc3Rlcl9sZGlzYyhcdTAwMjZwcHBfc3luY19sZGlzYyk7XG4gMzA1Olx0XHRpZiAoZXJyICE9IDApXG4gMzA2Olx0XHRcdHByaW50ayhLRVJOX0VSUiBcJiMzNDtQUFBfc3luYzogZXJyb3IgJWQgcmVnaXN0ZXJpbmcgbGluZSBkaXNjLlxcblwmIzM0OyxcbiAzMDc6XHRcdFx0ICAgICAgIGVycik7XG4gMzA4Olx0XHRyZXR1cm4gZXJyO1xuIDMwOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMDgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIFBQUCBTeW5jIENoYW5uZWwgQ3JlYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGhvdyBQUFAgZGF0YSB0cmFuc21pc3Npb24gaXMgYWN0dWFsbHkgaW5pdGlhdGVkLCBhbmQgdGhlIGtleSBmdW5jdGlvbiBhcHBlYXJzIHRvIGJlIGBwcHBfc3luY19vcGVuYC4gVGhlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIHByb2Nlc3MgZ2V0IG9mZiB0aGUgZ3JvdW5kPyBUaGUgdGV4dCBwb2ludHMgdXMgdG93YXJkIHRoZSBjcml0aWNhbCBzdGVwIG9mIGNoYW5uZWwgcmVnaXN0cmF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IG1lbnRpb25zIGBwcHBfc3luY19vcGVuYCBlc3RhYmxpc2hpbmcgYSBjaGFubmVsIGFuZCB0aGVuIHVzaW5nIGBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgmYW1wO2FwLSZndDtjaGFuKTtgLiBUaGlzIGlzIHdoZXJlIGl0IHN0YXJ0cyB0byBjbGljay4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGBwcHBfcmVnaXN0ZXJfY2hhbm5lbGAgaXMgdGhlIGNlbnRyYWwgbWVjaGFuaXNtIGZvciB0aGUgUFBQIHN0YWNrIHRvIGJlIGF3YXJlIG9mIHRoZSBuZXcgY2hhbm5lbCwgbWFraW5nIGl0IHJlYWR5IHRvIGhhbmRsZSBpbmNvbWluZyBhbmQgb3V0Z29pbmcgZGF0YS4gVGhlcmVmb3JlLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHBwcF9zeW5jX29wZW5gIGZ1bmN0aW9uIGl0c2VsZi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBoYXBwZW5pbmcgaW4gdGhlcmUuIEkmIzM5O2xsIHJlYWQgaXQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRcdGFwLVx1MDAzZXJhY2NtID0gfjBVO1xuIDE0MTpcdFxuIDE0MjpcdFx0c2tiX3F1ZXVlX2hlYWRfaW5pdChcdTAwMjZhcC1cdTAwM2VycXVldWUpO1xuIDE0MzpcdFx0dGFza2xldF9zZXR1cChcdTAwMjZhcC1cdTAwM2V0c2ssIHBwcF9zeW5jX3Byb2Nlc3MpO1xuIDE0NDpcdFxuIDE0NTpcdFx0YXAtXHUwMDNlY2hhbi5wcml2YXRlID0gYXA7XG4gMTQ2Olx0XHRhcC1cdTAwM2VjaGFuLm9wcyA9IFx1MDAyNnN5bmNfb3BzO1xuIDE0NzpcdFx0YXAtXHUwMDNlY2hhbi5tdHUgPSBQUFBfTVJVO1xuIDE0ODpcdFx0YXAtXHUwMDNlY2hhbi5oZHJsZW4gPSAyO1x0LyogZm9yIEEvQyBieXRlcyAqL1xuIDE0OTpcdFx0c3BlZWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpO1xuIDE1MDpcdFx0YXAtXHUwMDNlY2hhbi5zcGVlZCA9IHNwZWVkO1xuIDE1MTpcdFx0ZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoXHUwMDI2YXAtXHUwMDNlY2hhbik7XG4gMTUyOlx0XHRpZiAoZXJyKVxuIDE1MzpcdFx0XHRnb3RvIG91dF9mcmVlO1xuIDE1NDpcdFxuIDE1NTpcdFx0dHR5LVx1MDAzZWRpc2NfZGF0YSA9IGFwO1xuIDE1NjpcdFx0dHR5LVx1MDAzZXJlY2VpdmVfcm9vbSA9IDY1NTM2O1xuIDE1NzpcdFx0cmV0dXJuIDA7XG4gMTU4Olx0XG4gMTU5Olx0IG91dF9mcmVlOlxuIDE2MDpcdFx0a2ZyZWUoYXApO1xuIDE2MTpcdCBvdXQ6XG4gMTYyOlx0XHRyZXR1cm4gZXJyO1xuIDE2MzpcdH1cbiAxNjQ6XHRcbiAxNjU6XHQvKlxuIDE2NjpcdCAqIENhbGxlZCB3aGVuIHRoZSB0dHkgaXMgcHV0IGludG8gYW5vdGhlciBsaW5lIGRpc2NpcGxpbmUgb3IgaXQgaGFuZ3MgdXAuXG4gMTY3Olx0ICogVGhpcyBjYWxsIGlzIHNlcmlhbGl6ZWQgYWdhaW5zdCBvdGhlciBsZGlzYyBmdW5jdGlvbnMuXG4gMTY4Olx0ICovXG4gMTY5Olx0c3RhdGljIHZvaWRcbiAxNzA6XHRwcHBfc3luY19jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxuIDE3MTpcdHtcbiAxNzI6XHRcdHN0cnVjdCBzeW5jcHBwICphcCA9IHR0eS1cdTAwM2VkaXNjX2RhdGE7XG4gMTczOlx0XG4gMTc0Olx0XHRpZiAoIWFwKVxuIDE3NTpcdFx0XHRyZXR1cm47XG4gMTc2Olx0XG4gMTc3Olx0XHR0dHktXHUwMDNlZGlzY19kYXRhID0gTlVMTDtcbiAxNzg6XHRcdHRhc2tsZXRfa2lsbChcdTAwMjZhcC1cdTAwM2V0c2spO1xuIDE3OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE0MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byBgc3luY19vcHNgKioKCkhtbSwgYHN5bmNfb3BzYC4uLiB0aGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gcmlnaHQgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgdGVybSByZWZlcnMgdG8sIHdoYXQgaXQgZW5jb21wYXNzZXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgbXkgaW50ZXJuYWwgZG9jdW1lbnRhdGlvbiwgbWF5YmUgc29tZSBjb2RlIG9yIGV2ZW4gdGhlIGxhdGVzdCBSRkNzIGlmIGl0IHNlZW1zIGltcG9ydGFudCwgaW4gb3JkZXIgdG8gZ2V0IGEgY2xlYXIgZGVmaW5pdGlvbiBvZiBgc3luY19vcHNgLiBJIG5lZWQgdG8gZW5zdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBpcyBzb2xpZCBiZWZvcmUgSSBwcm9jZWVkLiBXaGF0IG9wZXJhdGlvbnMgYXJlIHdlIHRhbGtpbmcgYWJvdXQgZXhhY3RseT8gQXJlIHRoZXNlIHJlbGF0ZWQgdG8gc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgY2hlY2sgc2hvdWxkIGdpdmUgbWUgdGhlIGZvdW5kYXRpb24gSSBuZWVkIHRvIHByb2NlZWQgY29uZmlkZW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5bmNfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9OTA9c3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtOTItXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo5MzpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTk0LVx0LnN0YXJ0X3htaXQgPSBwcHBfc3luY19zZW5kLFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTExOT1wcHBfc3luY19vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpXG4tLVxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTQ1LVx0YXAtXHUwMDNlY2hhbi5wcml2YXRlID0gYXA7XG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoxNDY6XHRhcC1cdTAwM2VjaGFuLm9wcyA9IFx1MDAyNnN5bmNfb3BzO1xuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTQ3LVx0YXAtXHUwMDNlY2hhbi5tdHUgPSBQUFBfTVJVO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYwNgoJCQkJCQkJb3V0cHV0OiAxNTMKCQkJCQkJCXRob3VnaHRzOiAyMzE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFBQUCBTeW5jaHJvbm91cyBUVFkgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggY2F1Z2h0IG15IGV5ZS4gSXQgdG91Y2hlcyB0aGUgUFBQIHN5bmNocm9ub3VzIFRUWSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYHBwcF9zeW5jX3R4bXVuZ2VgIGZ1bmN0aW9uLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBldmVuIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBwb3RlbnRpYWwgYXJlYSBmb3IgZnV6emluZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYHBwcF9zeW5jX3NlbmRgIGNhbGxpbmcgYHBwcF9zeW5jX3R4bXVuZ2VgIHdoZW4gcGFja2V0cyBhcmUgc2VudCBvbiB0aGUgUFBQIHVuaXQsIHdoaWNoIGNhbiBoYXBwZW4gdGhyb3VnaCBQUFAgaW9jdGxzIG9yIHN0YW5kYXJkIHdyaXRlcy4KClRoZSBwYXRjaCBpdHNlbGYgaXMgYSBzdHJhaWdodGZvcndhcmQgcmVmYWN0b3JpbmcuIEl0IGNvbnNvbGlkYXRlcyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYHBwcF9zeW5jX3R4bXVuZ2VgIGJ5IHJlcGxhY2luZyByZWR1bmRhbnQgYGtmcmVlX3NrYmAgYW5kIGByZXR1cm4gTlVMTGAgY2FsbHMgd2l0aCBhIGBnb3RvIGZyZWVfc2tiYCBsYWJlbC4gV2hpbGUgdGhpcyBtaWdodCBsb29rIGxpa2UgYSAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlJiMzNDsgY2xlYW51cCwgSSBrbm93IGJldHRlciB0aGFuIHRvIGJsaW5kbHkgdHJ1c3QgdGhhdC4gUmVmYWN0b3JpbmdzLCBlc3BlY2lhbGx5IHRob3NlIHRvdWNoaW5nIGVycm9yIHBhdGhzIG9yIGRhdGEgZmxvdywgaGF2ZSBhIGtuYWNrIGZvciB1bmNvdmVyaW5nIGxhdGVudCBidWdzIG9yIHN1YnRseSBhbHRlcmluZyBiZWhhdmlvci4gVGhlIGtleSBoZXJlIGlzIHRoZSBtb2RpZmljYXRpb24gaXMgaW4gYSByZWFjaGFibGUgZHJpdmVyIGZ1bmN0aW9uLgoKTG9va2luZyBhdCB0aGUgZ3VpZGVsaW5lcywgdGhpcyBkZWZpbml0ZWx5IHF1YWxpZmllcyBhcyB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBjb2RlIHdpdGhpbiBhIHJlYWNoYWJsZSBkcml2ZXIsIGFuZCB0aGUgcmVmYWN0b3JpbmcgdG91Y2hlcyBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdy4gVGhlcmUgYXJlIG5vIG5lZ2F0aXZlIGNyaXRlcmlhIHRoYXQgYXBwbHkgaGVyZTogbm8gdW5yZWFjaGFibGUgaGFyZHdhcmUsIG5vbi1leGVjdXRhYmxlIGNoYW5nZXMsIG9yIHBhdGhzIHRoYXQgYXJlIG5ldmVyIHRha2VuLiBUaHVzLCBpdCBtZWV0cyB0aGUgcG9zaXRpdmUgY3JpdGVyaWEsIHNwZWNpZmljYWxseSAmIzM0O1JlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwcyYjMzQ7IGFuZCAmIzM0O1JlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHMmIzM0Oy4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZnV6emluZyB0YXJnZXRzLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYHBwcF9zeW5jX3R4bXVuZ2VgIGl0c2VsZiwgd2hpY2ggaXMgY2FsbGVkIGRpcmVjdGx5IGJ5IGBwcHBfc3luY19zZW5kYC4gQm90aCBhcmUgZGVmaW5lZCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jYCBhbmQgY2FuIGJlIHVzZWQgZm9yIGNvdmVyYWdlLiBXZSYjMzk7bGwgbmVlZCB0byBlbmFibGUgYm90aCBgUFBQYCBhbmQgYFBQUF9TWU5DX1RUWWAgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbG9uZyB3aXRoIHRoZSBzdGFuZGFyZCBgVFRZYC4KClRoZXJlZm9yZSwgdGhlIGZvbGxvd2luZyBpcyB0aGUgZmluYWwgY29uY2x1c2lvbi4KCmBgYGpzb24KewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGVycm9yLWhhbmRsaW5nIHBhdGhzIGluIGBwcHBfc3luY190eG11bmdlKClgIGluIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AgYnkgY29uc29saWRhdGluZyBTS0IgZnJlZSBhbmQgTlVMTCByZXR1cm4gbG9naWMgaW50byBhIHNpbmdsZSBgZnJlZV9za2JgIGxhYmVsLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBUVFkgbGluZSBkaXNjaXBsaW5lIHN3aXRjaGluZyAoTl9TWU5DX1BQUCkgb24gc3RhbmRhcmQgcHNldWRvLXRlcm1pbmFscyAocHR5KSB3aXRob3V0IHJlcXVpcmluZyBkZWRpY2F0ZWQgaGFyZHdhcmUuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSB0aGUgcmVmYWN0b3JlZCB0cmFuc21pc3Npb24gcGF0aCBhbmQgc2tiIGhhbmRsaW5nIG1haW50YWluIHByb3BlciBsaWZlY3ljbGUgc2VtYW50aWNzLiYjMzQ7LAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHBwX3N5bmNfdHhtdW5nZSYjMzQ7LAogICAgJiMzNDtwcHBfc3luY19zZW5kJiMzNDsKICBdLAogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BQUF9TWU5DX1RUWSYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7VFRZJiMzNDsKICBdCn0KYGBgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFBfU1lOQ19UVFkmIzM0OywKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcF9zeW5jX3R4bXVuZ2UmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gcHBwX3N5bmNfdHhtdW5nZSgpIHdpdGhpbiBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBieSByb3V0aW5nIHBhY2tldCBkcm9wIGNhc2VzIHRvIGEgc2hhcmVkIGZyZWVfc2tiIGxhYmVsLiBUaGlzIGNvZGUgaXMgZXhlY3V0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHRoZSBOX1NZTkNfUFBQIFRUWSBsaW5lIGRpc2NpcGxpbmUgb3ZlciBwdHlzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoZSByZWZhY3RvcmVkIGZyYW1lIGVuY2Fwc3VsYXRpb24gYW5kIHNrYiBoYW5kbGluZyBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUFBfU1lOQ19UVFkmIzM0OywKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BwcF9zeW5jX3R4bXVuZ2UmIzM0OywKICAgICYjMzQ7cHBwX3N5bmNfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gcHBwX3N5bmNfdHhtdW5nZSgpIHdpdGhpbiBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBieSByb3V0aW5nIHBhY2tldCBkcm9wIGNhc2VzIHRvIGEgc2hhcmVkIGZyZWVfc2tiIGxhYmVsLiBUaGlzIGNvZGUgaXMgZXhlY3V0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHRoZSBOX1NZTkNfUFBQIFRUWSBsaW5lIGRpc2NpcGxpbmUgb3ZlciBwdHlzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoZSByZWZhY3RvcmVkIGZyYW1lIGVuY2Fwc3VsYXRpb24gYW5kIHNrYiBoYW5kbGluZyBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIGluIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AgdGhhdCBjb25zb2xpZGF0ZXMgZHVwbGljYXRlIGVycm9yIGhhbmRsaW5nIHBhdGhzIChga2ZyZWVfc2tiKHNrYik7IHJldHVybiBOVUxMO2ApIGludG8gYSBjb21tb24gYGdvdG8gZnJlZV9za2I7YCBleGl0IGxhYmVsLlxuXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGFsdGVyIGhvdyBidWZmZXJzIGFyZSByZWFkLCB3cml0dGVuLCBvciBib3VuZHMtY2hlY2tlZCwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLlxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBLQVNBTiBjb3ZlcnMgYW55IHNrYiBsaWZldGltZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUpLCB0aG91Z2ggdGhlIHBhdGNoIGRvZXMgbm90IGNoYW5nZSBza2IgbGlmZXRpbWUgb3IgZXJyb3IgaGFuZGxpbmcgc2VtYW50aWNzIGF0IGFsbC5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0OGE3NWRmMmNjODVjZjRhODZkYjg5ZDRiNTc2MzIwOWQwZmYxNTkzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBTZXAgMTUgMTE6MDQ6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCmluZGV4IGViZDYyYTdhYjU0YjMuLjllNDQwZTExMGU5ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jCkBAIC00MzYsMTAgJiM0Mzs0MzYsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpbnQgaXNsY3A7CiAKIAkvKiBFbnN1cmUgd2UgY2FuIHNhZmVseSBhY2Nlc3MgcHJvdG9jb2wgZmllbGQgYW5kIExDUCBjb2RlICovCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMykpIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiBOVUxMOwotCX0KJiM0MzsJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMykpCiYjNDM7CQlnb3RvIGZyZWVfc2tiOwomIzQzOwogCWRhdGEgID0gc2tiLSZndDtkYXRhOwogCXByb3RvID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEpOwogCkBAIC00NTUsMTAgJiM0Mzs0NTQsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAogCS8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoKGFwLSZndDtmbGFncyAmYW1wOyBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7Ci0JCWlmIChza2JfY293X2hlYWQoc2tiLCAyKSkgewotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQomIzQzOwkJaWYgKHNrYl9jb3dfaGVhZChza2IsIDIpKQomIzQzOwkJCWdvdG8gZnJlZV9za2I7CiYjNDM7CiAJCXNrYl9wdXNoKHNrYiwyKTsKIAkJc2tiLSZndDtkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TOwogCQlza2ItJmd0O2RhdGFbMV0gPSBQUFBfVUk7CkBAIC00NzAsNiAmIzQzOzQ2OCwxMCBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJcHBwX3ByaW50X2J1ZmZlciAoJiMzNDtzZW5kIGJ1ZmZlciYjMzQ7LCBza2ItJmd0O2RhdGEsIHNrYi0mZ3Q7bGVuKTsKIAogCXJldHVybiBza2I7CiYjNDM7CiYjNDM7ZnJlZV9za2I6CiYjNDM7CWtmcmVlX3NrYihza2IpOwomIzQzOwlyZXR1cm4gTlVMTDsKIH0KIAogLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA2MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBkZWNpZGUgaWYgaXQgd2FycmFudHMgZmlyaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0JiMzOTtzIHNlZS4uLiBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGluIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AuIFJpZ2h0LCB0aGF0JiMzOTtzIHJlbGF0ZWQgdG8gc3luY2hyb25vdXMgUFBQLiBJJiMzOTttIGZhbWlsaWFyIHdpdGggdGhhdCBjb2RlLCBzbyBJIGNhbiBwcm9iYWJseSBxdWlja2x5IGFzc2VzcyB0aGUgY2hhbmdlcy4KClRoZSBkaWZmIGludHJvZHVjZXMgYSBgZnJlZV9za2JgIGxhYmVsIGFuZCB1c2VzIGl0IGluIHR3byBwbGFjZXMgd2hlcmUgdGhlIGNvZGUgcHJldmlvdXNseSBjYWxsZWQgYGtmcmVlX3NrYihza2IpYCBkaXJlY3RseS4gVGhpcyByZWZhY3RvcmluZyBjbGVhcmx5IGFpbXMgdG8gcmVkdWNlIGNvZGUgZHVwbGljYXRpb24gYW5kIGltcHJvdmUgcmVhZGFiaWxpdHkuIFRoZSBjb3JlIGxvZ2ljIGFyb3VuZCB2YWxpZGF0aW5nIHRoZSBwYWNrZXQmIzM5O3Mgc3RydWN0dXJlIHVzaW5nIGBwc2tiX21heV9wdWxsYCBhbmQgY29uZGl0aW9uYWxseSBwcmVwZW5kaW5nIGFkZHJlc3MvY29udHJvbCBmaWVsZHMgYmFzZWQgb24gYFNDX0NPTVBfQUNgIGFuZCBgaXNsY3BgIGRvZXNuJiMzOTt0ICphcHBlYXIqIHRvIGJlIG1vZGlmaWVkIGluIGFueSBmdW5kYW1lbnRhbCB3YXkuCgpIb3dldmVyLCB0aGUgY2hhbmdlIGRvZXMgaW52b2x2ZSBtYW5pcHVsYXRpbmcgYHNrX2J1ZmZgIHN0cnVjdHVyZXMsIGluY2x1ZGluZyBwb3NzaWJsZSBjYWxscyB0byBgc2tiX2Nvd19oZWFkYC4gV2hpbGUgdGhlIGNvZGUgaXMgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQsIHRoZSBtb3ZlIHRvIGEgYGdvdG9gIGJhc2VkIGVycm9yIGhhbmRsaW5nIHNjaGVtZSBkb2VzIGludHJvZHVjZSBhIG5ldyBjb250cm9sIGZsb3csIGFuZCBpdOKAmXMgYWx3YXlzIHdvcnRoIGNoZWNraW5nIHRob3NlIGZvciBzdWJ0bGUgZmxhd3Mgb3IgbWlzc2VkIGNvbmRpdGlvbnMuIEl04oCZcyBhbHNvIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGBwc2tiX21heV9wdWxsYCBhbmQgYHNrYl9jb3dfaGVhZGAgY2FuIGJlIHRyaWNreSB0byByZWFzb24gYWJvdXQgaW4gdGVybXMgb2YgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCBtZW1vcnkuCgpHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBuZXR3b3JrIHBhY2tldCBoYW5kbGluZywgZXZlbiBhIHNlZW1pbmdseSBtaW5vciBjaGFuZ2UgbGlrZSB0aGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIFNvLCB5ZWFoLCBJJiMzOTtkIHNheSB0aGlzIGlzIHdvcnRoIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uIFRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGlzIGFsd2F5cyBwcmVzZW50IHdoZW4gZGVhbGluZyB3aXRoIHBhY2tldCBwcm9jZXNzaW5nLiBMZXQmIzM5O3MgZmlyZSBpdCB1cCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEl0IGlzIGFsd2F5cyBhIGdvb2QgaWRlYSB0byBwZXJmb3JtIGEgZGVlcGVyIGFuYWx5c2lzIG9uIG5ldHdvcmsgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDI1Olx0fVxuIDQyNjpcdFxuIDQyNzpcdC8qXG4gNDI4Olx0ICogUHJvY2VkdXJlcyBmb3IgZW5jYXBzdWxhdGlvbiBhbmQgZnJhbWluZy5cbiA0Mjk6XHQgKi9cbiA0MzA6XHRcbiA0MzE6XHRzdGF0aWMgc3RydWN0IHNrX2J1ZmYqXG4gNDMyOlx0cHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gNDMzOlx0e1xuIDQzNDpcdFx0aW50IHByb3RvO1xuIDQzNTpcdFx0dW5zaWduZWQgY2hhciAqZGF0YTtcbiA0MzY6XHRcdGludCBpc2xjcDtcbiA0Mzc6XHRcbiA0Mzg6XHRcdC8qIEVuc3VyZSB3ZSBjYW4gc2FmZWx5IGFjY2VzcyBwcm90b2NvbCBmaWVsZCBhbmQgTENQIGNvZGUgKi9cbiA0Mzk6XHRcdGlmICghcHNrYl9tYXlfcHVsbChza2IsIDMpKVxuIDQ0MDpcdFx0XHRnb3RvIGZyZWVfc2tiO1xuIDQ0MTpcdFxuIDQ0MjpcdFx0ZGF0YSAgPSBza2ItXHUwMDNlZGF0YTtcbiA0NDM6XHRcdHByb3RvID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEpO1xuIDQ0NDpcdFxuIDQ0NTpcdFx0LyogTENQIHBhY2tldHMgd2l0aCBjb2RlcyBiZXR3ZWVuIDEgKGNvbmZpZ3VyZS1yZXF1ZXN0KVxuIDQ0NjpcdFx0ICogYW5kIDcgKGNvZGUtcmVqZWN0KSBtdXN0IGJlIHNlbnQgYXMgdGhvdWdoIG5vIG9wdGlvbnNcbiA0NDc6XHRcdCAqIGhhdmUgYmVlbiBuZWdvdGlhdGVkLlxuIDQ0ODpcdFx0ICovXG4gNDQ5Olx0XHRpc2xjcCA9IHByb3RvID09IFBQUF9MQ1AgXHUwMDI2XHUwMDI2IDEgXHUwMDNjPSBkYXRhWzJdIFx1MDAyNlx1MDAyNiBkYXRhWzJdIFx1MDAzYz0gNztcbiA0NTA6XHRcbiA0NTE6XHRcdC8qIGNvbXByZXNzIHByb3RvY29sIGZpZWxkIGlmIG9wdGlvbiBlbmFibGVkICovXG4gNDUyOlx0XHRpZiAoZGF0YVswXSA9PSAwIFx1MDAyNlx1MDAyNiAoYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0NPTVBfUFJPVCkgXHUwMDI2XHUwMDI2ICFpc2xjcClcbiA0NTM6XHRcdFx0c2tiX3B1bGwoc2tiLDEpO1xuIDQ1NDpcdFxuIDQ1NTpcdFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xuIDQ1NjpcdFx0aWYgKChhcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9BQykgPT0gMCB8fCBpc2xjcCkge1xuIDQ1NzpcdFx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpXG4gNDU4Olx0XHRcdFx0Z290byBmcmVlX3NrYjtcbiA0NTk6XHRcbiA0NjA6XHRcdFx0c2tiX3B1c2goc2tiLDIpO1xuIDQ2MTpcdFx0XHRza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztcbiA0NjI6XHRcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XG4gNDYzOlx0XHR9XG4gNDY0Olx0XG4gNDY1Olx0XHRhcC1cdTAwM2VsYXN0X3htaXQgPSBqaWZmaWVzO1xuIDQ2NjpcdFxuIDQ2NzpcdFx0aWYgKHNrYiBcdTAwMjZcdTAwMjYgYXAtXHUwMDNlZmxhZ3MgXHUwMDI2IFNDX0xPR19PVVRQS1QpXG4gNDY4Olx0XHRcdHBwcF9wcmludF9idWZmZXIgKFwmIzM0O3NlbmQgYnVmZmVyXCYjMzQ7LCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gNDY5Olx0XG4gNDcwOlx0XHRyZXR1cm4gc2tiO1xuIDQ3MTpcdFxuIDQ3MjpcdGZyZWVfc2tiOlxuIDQ3MzpcdFx0a2ZyZWVfc2tiKHNrYik7XG4gNDc0Olx0XHRyZXR1cm4gTlVMTDtcbiA0NzU6XHR9XG4gNDc2Olx0XG4gNDc3Olx0LypcbiA0Nzg6XHQgKiBUcmFuc21pdC1zaWRlIHJvdXRpbmVzLlxuIDQ3OTpcdCAqL1xuIDQ4MDpcdFxuIDQ4MTpcdC8qXG4gNDgyOlx0ICogU2VuZCBhIHBhY2tldCB0byB0aGUgcGVlciBvdmVyIGFuIHN5bmMgdHR5IGxpbmUuXG4gNDgzOlx0ICogUmV0dXJucyAxIGlmZiB0aGUgcGFja2V0IHdhcyBhY2NlcHRlZC5cbiA0ODQ6XHQgKiBJZiB0aGUgcGFja2V0IHdhcyBub3QgYWNjZXB0ZWQsIHdlIHdpbGwgY2FsbCBwcHBfb3V0cHV0X3dha2V1cFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzQwCgkJCQkJCQlvdXRwdXQ6IDE5NQoJCQkJCQkJdGhvdWdodHM6IDU1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFJlZmFjdG9yaW5nKioKCkFscmlnaHQsIHRoaXMgcGF0Y2guLi4gaXQmIzM5O3MgYSBwdXJlIHJlZmFjdG9yaW5nLCBhIHNpbXBsZSBjbGVhbnVwLiBJdCYjMzk7cyB0YWtpbmcgdHdvIGluc3RhbmNlcyBvZiB0aGF0IGBpZiB7IGtmcmVlX3NrYihza2IpOyByZXR1cm4gTlVMTDsgfWAgcGF0dGVybiBhbmQgcmVwbGFjaW5nIHRoZW0gd2l0aCBhIGBnb3RvIGZyZWVfc2tiO2Agd2hpY2ggdGhlbiBoYW5kbGVzIHRoZSBga2ZyZWVfc2tiKHNrYik7IHJldHVybiBOVUxMO2AgbG9naWMuIFRvdGFsbHkgZXF1aXZhbGVudCBzZW1hbnRpY3MsIG5vIGZ1bmN0aW9uYWwgY2hhbmdlLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBzdWJ0bGUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoaW5ncyBsaWtlIGBwc2tiX21heV9wdWxsKClgIGFuZCBgc2tiX2Nvd19oZWFkKClgLCBmb2xsb3dlZCBieSB0aGUgZWFybHkgZXhpdC4gVGhlIGFmdGVyIGxvb2tzIGxpa2UgdGhlIGJlZm9yZSwganVzdCB3aXRoIHRoZSBgZ290b2AuIEFuZCwgeWVhaCwgYGZyZWVfc2tiOmAgaXMgZG9pbmcgZXhhY3RseSB3aGF0IGl0IHdhcyBkb2luZyBiZWZvcmU6IGZyZWVpbmcgdGhlIFNLQiBhbmQgcmV0dXJuaW5nIE5VTEwuIFRoZSBjb250cm9sIGZsb3cgYW5kIGV4ZWN1dGlvbiBhcmUgMTAwJSBpZGVudGljYWwuCgpEb2VzIHRoaXMgaW50cm9kdWNlIHNvbWUgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s/IE5vcGUsIGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBpdC4gRGVmaW5pdGVseSBub3QuIE5lZWRzS01TQU4gc2hvdWxkIGJlIGZhbHNlLgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgdGhlIGluc3RydWN0aW9ucyBvbiB0aGlzIG5haWxlZCBkb3duLCB3aGF0IHdlIG5lZWQgdG8gcHJvZHVjZToKCiogICBVc2Ugc2V0LXJlc3VsdHMgdG9vbCBmb3IgdGhlIGFuYWx5c2lzIHJlc3VsdHMuIEdvdCBpdC4KKiAgIEtNU0FOUmVhc29uaW5nOiBDb250cmFzdCBLTVNBTiB2cyBLQVNBTi4KKiAgIE5lZWRzS01TQU46IEZhbHNlLgoKSGVyZSYjMzk7cyBob3cgSSB3b3VsZCB3cml0ZSB0aGlzIHVwIHByb2Zlc3Npb25hbGx5OgoKMS4gICoqRGVzY3JpYmUgdGhlIENoYW5nZToqKiBUaGlzIHBhdGNoIGNvbnNvbGlkYXRlcyByZWR1bmRhbnQgZXJyb3IgZXhpdCBwYXRocyBpbiB0aGUgYHBwcF9zeW5jX3R4bXVuZ2UoKWAgZnVuY3Rpb24uIFdlJiMzOTtyZSB1c2luZyBhIGBnb3RvIGZyZWVfc2tiO2AgY2xlYW51cCBsYWJlbCB0byBtYWtlIHRoZSBjb2RlIGNsZWFuZXIuCjIuICAqKktNU0FOIFJlbGV2YW5jZToqKiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgbWVzcyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nLCBzdGFjay9oZWFwIGluaXRpYWxpemF0aW9uLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzIHBhdGhzLiBUaGUgbG9naWMgYW5kIGNvbnRyb2wgZmxvdyBhcmUgdW5jaGFuZ2VkLiBObyBpbXBhY3QuCjMuICAqKktBU0FOL1N0YW5kYXJkIERldGVjdG9yczoqKiBObyBuZXcgbWVtb3J5IHNhZmV0eSBoYXphcmRzIGFyZSBpbnRyb2R1Y2VkLiBJZiB0aGVyZSAqd2VyZSogU0tCIG1hbmFnZW1lbnQgcHJvYmxlbXMsIGxpa2UgZG91YmxlLWZyZWUgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCBLQVNBTiB3b3VsZCBjYXRjaCB0aGVtLCBidXQgdGhlIGNsZWFudXAmIzM5O3Mgc3RpbGwgdGhlIHNhbWUuCjQuICAqKkNvbmNsdXNpb246KiogV2UgZG9uJiMzOTt0IG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGZvciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jYCB0aGF0IGNvbnNvbGlkYXRlcyBkdXBsaWNhdGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMgKGBrZnJlZV9za2Ioc2tiKTsgcmV0dXJuIE5VTEw7YCkgaW50byBhIGNvbW1vbiBgZ290byBmcmVlX3NrYjtgIGV4aXQgbGFiZWwuXG5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgZG9lcyBub3QgYWx0ZXIgaG93IGJ1ZmZlcnMgYXJlIHJlYWQsIHdyaXR0ZW4sIG9yIGJvdW5kcy1jaGVja2VkLCBhbmQgZG9lcyBub3QgZXhwb3NlIG9yIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFN0YW5kYXJkIEtBU0FOIGNvdmVycyBhbnkgc2tiIGxpZmV0aW1lIGlzc3VlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBkb3VibGUtZnJlZSksIHRob3VnaCB0aGUgcGF0Y2ggZG9lcyBub3QgY2hhbmdlIHNrYiBsaWZldGltZSBvciBlcnJvciBoYW5kbGluZyBzZW1hbnRpY3MgYXQgYWxsLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgIHRoYXQgY29uc29saWRhdGVzIGR1cGxpY2F0ZSBlcnJvciBoYW5kbGluZyBwYXRocyAoYGtmcmVlX3NrYihza2IpOyByZXR1cm4gTlVMTDtgKSBpbnRvIGEgY29tbW9uIGBnb3RvIGZyZWVfc2tiO2AgZXhpdCBsYWJlbC5cblxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBtZW1vcnkgYWxsb2NhdGlvbnMsIG9yIGNvcGllcyB0byB1c2VyIHNwYWNlLiBJdCBkb2VzIG5vdCBhbHRlciBob3cgYnVmZmVycyBhcmUgcmVhZCwgd3JpdHRlbiwgb3IgYm91bmRzLWNoZWNrZWQsIGFuZCBkb2VzIG5vdCBleHBvc2Ugb3IgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBsZWFrcy5cbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgS0FTQU4gY292ZXJzIGFueSBza2IgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlKSwgdGhvdWdoIHRoZSBwYXRjaCBkb2VzIG5vdCBjaGFuZ2Ugc2tiIGxpZmV0aW1lIG9yIGVycm9yIGhhbmRsaW5nIHNlbWFudGljcyBhdCBhbGwuXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNDowOS40OTc4Mzk0NjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI4MTQxNzI1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQX1NZTkNfVFRZXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlRUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcF9zeW5jX3R4bXVuZ2VcIixcbiAgICBcInBwcF9zeW5jX3NlbmRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgIHRoYXQgY29uc29saWRhdGVzIGR1cGxpY2F0ZSBlcnJvciBoYW5kbGluZyBwYXRocyAoYGtmcmVlX3NrYihza2IpOyByZXR1cm4gTlVMTDtgKSBpbnRvIGEgY29tbW9uIGBnb3RvIGZyZWVfc2tiO2AgZXhpdCBsYWJlbC5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGFsdGVyIGhvdyBidWZmZXJzIGFyZSByZWFkLCB3cml0dGVuLCBvciBib3VuZHMtY2hlY2tlZCwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLlxcbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgS0FTQU4gY292ZXJzIGFueSBza2IgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlKSwgdGhvdWdoIHRoZSBwYXRjaCBkb2VzIG5vdCBjaGFuZ2Ugc2tiIGxpZmV0aW1lIG9yIGVycm9yIGhhbmRsaW5nIHNlbWFudGljcyBhdCBhbGwuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBlcnJvci1oYW5kbGluZyBwYXRoIGluIHBwcF9zeW5jX3R4bXVuZ2UoKSB3aXRoaW4gZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYnkgcm91dGluZyBwYWNrZXQgZHJvcCBjYXNlcyB0byBhIHNoYXJlZCBmcmVlX3NrYiBsYWJlbC4gVGhpcyBjb2RlIGlzIGV4ZWN1dGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSB0aGUgTl9TWU5DX1BQUCBUVFkgbGluZSBkaXNjaXBsaW5lIG92ZXIgcHR5cy4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gdGVzdCB0aGUgcmVmYWN0b3JlZCBmcmFtZSBlbmNhcHN1bGF0aW9uIGFuZCBza2IgaGFuZGxpbmcgcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6MDkuNDk3ODQzOTg4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk3NDAzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0OGE3NWRmMmNjODVjZjRhODZkYjg5ZDRiNTc2MzIwOWQwZmYxNTkzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDE1IDExOjA0OjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcXG5pbmRleCBlYmQ2MmE3YWI1NGIzLi45ZTQ0MGUxMTBlOWYwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcXG5AQCAtNDM2LDEwICs0MzYsOSBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0aW50IGlzbGNwO1xcbiBcXG4gXFx0LyogRW5zdXJlIHdlIGNhbiBzYWZlbHkgYWNjZXNzIHByb3RvY29sIGZpZWxkIGFuZCBMQ1AgY29kZSAqL1xcbi1cXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAzKSkge1xcbi1cXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdH1cXG4rXFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMykpXFxuK1xcdFxcdGdvdG8gZnJlZV9za2I7XFxuK1xcbiBcXHRkYXRhICA9IHNrYi1cXHUwMDNlZGF0YTtcXG4gXFx0cHJvdG8gPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7XFxuIFxcbkBAIC00NTUsMTAgKzQ1NCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xcbiBcXHRpZiAoKGFwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0NPTVBfQUMpID09IDAgfHwgaXNsY3ApIHtcXG4tXFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIDIpKSB7XFxuLVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi1cXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpXFxuK1xcdFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuK1xcbiBcXHRcXHRza2JfcHVzaChza2IsMik7XFxuIFxcdFxcdHNrYi1cXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztcXG4gXFx0XFx0c2tiLVxcdTAwM2VkYXRhWzFdID0gUFBQX1VJO1xcbkBAIC00NzAsNiArNDY4LDEwIEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRwcHBfcHJpbnRfYnVmZmVyIChcXFwic2VuZCBidWZmZXJcXFwiLCBza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuKTtcXG4gXFxuIFxcdHJldHVybiBza2I7XFxuK1xcbitmcmVlX3NrYjpcXG4rXFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbiAvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNDoxMC4wMDgyODMxMDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExODg2NDg2NDczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBfU1lOQ19UVFlcIixcbiAgICBcIlBQUFwiLFxuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwX3N5bmNfdHhtdW5nZVwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXJyb3ItaGFuZGxpbmcgcGF0aCBpbiBwcHBfc3luY190eG11bmdlKCkgd2l0aGluIGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGJ5IHJvdXRpbmcgcGFja2V0IGRyb3AgY2FzZXMgdG8gYSBzaGFyZWQgZnJlZV9za2IgbGFiZWwuIFRoaXMgY29kZSBpcyBleGVjdXRhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdGhlIE5fU1lOQ19QUFAgVFRZIGxpbmUgZGlzY2lwbGluZSBvdmVyIHB0eXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIHJlZmFjdG9yZWQgZnJhbWUgZW5jYXBzdWxhdGlvbiBhbmQgc2tiIGhhbmRsaW5nIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDhhNzVkZjJjYzg1Y2Y0YTg2ZGI4OWQ0YjU3NjMyMDlkMGZmMTU5M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDExOjA0OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuaW5kZXggZWJkNjJhN2FiNTRiMy4uOWU0NDBlMTEwZTlmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuQEAgLTQzNiwxMCArNDM2LDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpbnQgaXNsY3A7XG4gXG4gXHQvKiBFbnN1cmUgd2UgY2FuIHNhZmVseSBhY2Nlc3MgcHJvdG9jb2wgZmllbGQgYW5kIExDUCBjb2RlICovXG4tXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAzKSkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXHR9XG4rXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAzKSlcbitcdFx0Z290byBmcmVlX3NrYjtcbitcbiBcdGRhdGEgID0gc2tiLVx1MDAzZWRhdGE7XG4gXHRwcm90byA9IGdldF91bmFsaWduZWRfYmUxNihkYXRhKTtcbiBcbkBAIC00NTUsMTAgKzQ1NCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xuIFx0aWYgKChhcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9BQykgPT0gMCB8fCBpc2xjcCkge1xuLVx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcbi1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0XHRyZXR1cm4gTlVMTDtcbi1cdFx0fVxuK1x0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpXG4rXHRcdFx0Z290byBmcmVlX3NrYjtcbitcbiBcdFx0c2tiX3B1c2goc2tiLDIpO1xuIFx0XHRza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztcbiBcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XG5AQCAtNDcwLDYgKzQ2OCwxMCBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0cHBwX3ByaW50X2J1ZmZlciAoXCJzZW5kIGJ1ZmZlclwiLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gXG4gXHRyZXR1cm4gc2tiO1xuK1xuK2ZyZWVfc2tiOlxuK1x0a2ZyZWVfc2tiKHNrYik7XG4rXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gLypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjEwLjAwODI4NTE3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzUxNDI5NTYwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQUFAgU3luY2hyb25pemF0aW9uIFRyYW5zbWl0IE11bmdpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgaXQncyBtYWtpbmcgYSBjb3VwbGUgb2YgY2hhbmdlcyB3aXRoaW4gdGhlIGBwcHBfc3luY190eG11bmdlYCBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyByZXNwb25zaWJsZSBmb3IgcHJvY2Vzc2luZyBvdXRib3VuZCBwYWNrZXRzIG9uIHN5bmNocm9ub3VzIFBQUCBsaW5rcywgaGFuZGxpbmcgdGhpbmdzIGxpa2UgYWRkcmVzcyBhbmQgY29udHJvbCBmaWVsZCBpbnNlcnRpb24sIGFuZCBnZW5lcmFsbHkgcHJlcGFyaW5nIHRoZSBwYWNrZXQgZm9yIHRyYW5zbWlzc2lvbiBvdmVyIHRoZSBzZXJpYWwgaW50ZXJmYWNlLlxuXG5UaGUgcHJpbWFyeSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYWJvdXQgZXJyb3IgaGFuZGxpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgdG8gY2hlY2sgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGlzc3VlcyBvciBwYWNrZXQgc3RydWN0dXJlIGludGVncml0eSB3aXRoIGBwc2tiX21heV9wdWxsYCBhbmQgYHNrYl9jb3dfaGVhZGAsIGFuZCB0aGVuIGBrZnJlZV9za2JgIHdpdGhpbiB0aGUgYGlmYCBibG9ja3MuIE5vdywgaXQgYXBwZWFycyB0aGV5IGFyZSBjaGFuZ2luZyB0aG9zZSBpbnN0YW5jZXMsIHdoZXJlIHRoZSBjaGVjayBmYWlscywgdG8gYSBgZ290byBmcmVlX3NrYjtgIHN0YXRlbWVudC4gVGhpcyBjaGFuZ2UgcmVmYWN0b3JzIHRoZSBlcnJvciBoYW5kbGluZyB1c2luZyBhIGBnb3RvYCBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBpbXByb3ZlIHJlYWRhYmlsaXR5LiBJdCdzIGNsZWFuZXIsIGVsaW1pbmF0aW5nIHRoZSBuZXN0ZWQgY29uZGl0aW9uYWwgc3RydWN0dXJlLlxuXG5JIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgXCJnb3RvXCIgYXBwcm9hY2ggaXMgY29uc2lzdGVudCB3aXRoIHRoZSBwcm9qZWN0J3MgY29kaW5nIHN0eWxlIGd1aWRlbGluZXMsIGJ1dCwgZnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIGl0IGxvb2tzIGxvZ2ljYWxseSBlcXVpdmFsZW50LiBJdCBzaG9ydC1jaXJjdWl0cyB0aGUgZnVuY3Rpb24sIGZyZWVzIHRoZSBTS0IsIGFuZCByZXR1cm5zIE5VTEwsIHdoaWNoIEkgYXNzdW1lIGluZGljYXRlcyBhIGZhaWx1cmUgdG8gcHJvY2VzcyB0aGUgcGFja2V0LlxuXG5UbyBiZSBleHRyYSB0aG9yb3VnaCwgSSdsbCB3YW50IHRvIGNoZWNrIHRoZSBjb250ZXh0LCB0byBleGFtaW5lIHdoYXQgY29kZSBjYWxscyBgcHBwX3N5bmNfdHhtdW5nZWAgYW5kIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBJIHdpbGwgYWxzbyBtYWtlIHN1cmUgdG8gY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYHBwcF9zeW5jdHR5LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhhdCB0aGlzIGNoYW5nZSBtaWdodCBpbnRyb2R1Y2UuIExldCBtZSBncmFiIG15IGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0b29scyB0byBpbnZlc3RpZ2F0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjQ1LjE1MTI0NDc4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQyNSxcbiAgXCJMaW5lQ291bnRcIjogNzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyNTpcXHR9XFxuIDQyNjpcXHRcXG4gNDI3OlxcdC8qXFxuIDQyODpcXHQgKiBQcm9jZWR1cmVzIGZvciBlbmNhcHN1bGF0aW9uIGFuZCBmcmFtaW5nLlxcbiA0Mjk6XFx0ICovXFxuIDQzMDpcXHRcXG4gNDMxOlxcdHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZipcXG4gNDMyOlxcdHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0MzM6XFx0e1xcbiA0MzQ6XFx0XFx0aW50IHByb3RvO1xcbiA0MzU6XFx0XFx0dW5zaWduZWQgY2hhciAqZGF0YTtcXG4gNDM2OlxcdFxcdGludCBpc2xjcDtcXG4gNDM3OlxcdFxcbiA0Mzg6XFx0XFx0LyogRW5zdXJlIHdlIGNhbiBzYWZlbHkgYWNjZXNzIHByb3RvY29sIGZpZWxkIGFuZCBMQ1AgY29kZSAqL1xcbiA0Mzk6XFx0XFx0aWYgKCFwc2tiX21heV9wdWxsKHNrYiwgMykpXFxuIDQ0MDpcXHRcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbiA0NDE6XFx0XFxuIDQ0MjpcXHRcXHRkYXRhICA9IHNrYi1cXHUwMDNlZGF0YTtcXG4gNDQzOlxcdFxcdHByb3RvID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGRhdGEpO1xcbiA0NDQ6XFx0XFxuIDQ0NTpcXHRcXHQvKiBMQ1AgcGFja2V0cyB3aXRoIGNvZGVzIGJldHdlZW4gMSAoY29uZmlndXJlLXJlcXVlc3QpXFxuIDQ0NjpcXHRcXHQgKiBhbmQgNyAoY29kZS1yZWplY3QpIG11c3QgYmUgc2VudCBhcyB0aG91Z2ggbm8gb3B0aW9uc1xcbiA0NDc6XFx0XFx0ICogaGF2ZSBiZWVuIG5lZ290aWF0ZWQuXFxuIDQ0ODpcXHRcXHQgKi9cXG4gNDQ5OlxcdFxcdGlzbGNwID0gcHJvdG8gPT0gUFBQX0xDUCBcXHUwMDI2XFx1MDAyNiAxIFxcdTAwM2M9IGRhdGFbMl0gXFx1MDAyNlxcdTAwMjYgZGF0YVsyXSBcXHUwMDNjPSA3O1xcbiA0NTA6XFx0XFxuIDQ1MTpcXHRcXHQvKiBjb21wcmVzcyBwcm90b2NvbCBmaWVsZCBpZiBvcHRpb24gZW5hYmxlZCAqL1xcbiA0NTI6XFx0XFx0aWYgKGRhdGFbMF0gPT0gMCBcXHUwMDI2XFx1MDAyNiAoYXAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0NfQ09NUF9QUk9UKSBcXHUwMDI2XFx1MDAyNiAhaXNsY3ApXFxuIDQ1MzpcXHRcXHRcXHRza2JfcHVsbChza2IsMSk7XFxuIDQ1NDpcXHRcXG4gNDU1OlxcdFxcdC8qIHByZXBlbmQgYWRkcmVzcy9jb250cm9sIGZpZWxkcyBpZiBuZWNlc3NhcnkgKi9cXG4gNDU2OlxcdFxcdGlmICgoYXAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0NfQ09NUF9BQykgPT0gMCB8fCBpc2xjcCkge1xcbiA0NTc6XFx0XFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIDIpKVxcbiA0NTg6XFx0XFx0XFx0XFx0Z290byBmcmVlX3NrYjtcXG4gNDU5OlxcdFxcbiA0NjA6XFx0XFx0XFx0c2tiX3B1c2goc2tiLDIpO1xcbiA0NjE6XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzBdID0gUFBQX0FMTFNUQVRJT05TO1xcbiA0NjI6XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhWzFdID0gUFBQX1VJO1xcbiA0NjM6XFx0XFx0fVxcbiA0NjQ6XFx0XFxuIDQ2NTpcXHRcXHRhcC1cXHUwMDNlbGFzdF94bWl0ID0gamlmZmllcztcXG4gNDY2OlxcdFxcbiA0Njc6XFx0XFx0aWYgKHNrYiBcXHUwMDI2XFx1MDAyNiBhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19MT0dfT1VUUEtUKVxcbiA0Njg6XFx0XFx0XFx0cHBwX3ByaW50X2J1ZmZlciAoXFxcInNlbmQgYnVmZmVyXFxcIiwgc2tiLVxcdTAwM2VkYXRhLCBza2ItXFx1MDAzZWxlbik7XFxuIDQ2OTpcXHRcXG4gNDcwOlxcdFxcdHJldHVybiBza2I7XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdGZyZWVfc2tiOlxcbiA0NzM6XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDQ3NDpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDc1OlxcdH1cXG4gNDc2OlxcdFxcbiA0Nzc6XFx0LypcXG4gNDc4OlxcdCAqIFRyYW5zbWl0LXNpZGUgcm91dGluZXMuXFxuIDQ3OTpcXHQgKi9cXG4gNDgwOlxcdFxcbiA0ODE6XFx0LypcXG4gNDgyOlxcdCAqIFNlbmQgYSBwYWNrZXQgdG8gdGhlIHBlZXIgb3ZlciBhbiBzeW5jIHR0eSBsaW5lLlxcbiA0ODM6XFx0ICogUmV0dXJucyAxIGlmZiB0aGUgcGFja2V0IHdhcyBhY2NlcHRlZC5cXG4gNDg0OlxcdCAqIElmIHRoZSBwYWNrZXQgd2FzIG5vdCBhY2NlcHRlZCwgd2Ugd2lsbCBjYWxsIHBwcF9vdXRwdXRfd2FrZXVwXFxuIDQ4NTpcXHQgKiBhdCBzb21lIGxhdGVyIHRpbWUuXFxuIDQ4NjpcXHQgKi9cXG4gNDg3OlxcdHN0YXRpYyBpbnRcXG4gNDg4OlxcdHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiA0ODk6XFx0e1xcbiA0OTA6XFx0XFx0c3RydWN0IHN5bmNwcHAgKmFwID0gY2hhbi1cXHUwMDNlcHJpdmF0ZTtcXG4gNDkxOlxcdFxcbiA0OTI6XFx0XFx0cHBwX3N5bmNfcHVzaChhcCk7XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0KFhNSVRfRlVMTCwgXFx1MDAyNmFwLVxcdTAwM2V4bWl0X2ZsYWdzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6NDUuMTUxMzI5MjEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI2MzA0OTYxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBDYWxsZXJzIG9mIGBwcHBfc3luY190eG11bmdlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBwcHBfc3luY190eG11bmdlYC4gSXQncyBhIHByZXR0eSBnZW5lcmljLXNvdW5kaW5nIG5hbWUsIHNvIGRpdmluZyBpbnRvIHRoZSBjb2RlYmFzZSBpcyB0aGUgb25seSByZWFsIHdheSBmb3J3YXJkIGhlcmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byBwaW5wb2ludCAqd2hlcmUqIGl0J3MgYmVpbmcgdXNlZC4gVGhlIGZ1bmN0aW9uJ3MgcHVycG9zZSBpcyBsaWtlbHkgcmVsYXRlZCB0byBzeW5jaHJvbml6YXRpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHRyYW5zbWl0dGVkIGRhdGEgd2l0aGluIHRoZSBQUFAgZnJhbWV3b3JrLiBLbm93aW5nIHRoZSBjYWxsIHNpdGVzIHdpbGwgaW1tZWRpYXRlbHkgcHJvdmlkZSBpbnNpZ2h0IGludG8gd2hhdCBkYXRhIGlzIGJlaW5nIG11bmNoZWQsIHdoYXQgdGhlIHN5bmNocm9uaXphdGlvbiBjb25jZXJucyBhcmUsIGFuZCB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYXJvdW5kIHRoaXMgZnVuY3Rpb24uIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYXNvbiBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIHN0cmF0ZWdpZXMsIGFuZCBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIExvb2tpbmcgZm9yIHRoZSBjYWxsIHNpdGVzIGlzIHRoZSBmaXJzdCBlc3NlbnRpYWwgc3RlcDsgbGV0J3Mgc2VlIHdoYXQgdGhlIGdyZXAgb3Igc291cmNlIGNvZGUgbmF2aWdhdGlvbiB0b29scyB0dXJuIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTczLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNDo0OC40MTQzODExMTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0NDcwMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwX3N5bmNfdHhtdW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz01MD1zdHJ1Y3Qgc3luY3BwcCB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy04Mi0gKi9cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo4MzpzdGF0aWMgc3RydWN0IHNrX2J1ZmYqIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy04NC1zdGF0aWMgaW50IHBwcF9zeW5jX3NlbmQoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTQzMT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYqXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NDMyOnBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTQzMy17XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz00ODg9cHBwX3N5bmNfc2VuZChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy00OTUtXFx0XFx0cmV0dXJuIDA7XFx0LyogYWxyZWFkeSBmdWxsICovXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6NDk2OlxcdHNrYiA9IHBwcF9zeW5jX3R4bXVuZ2UoYXAsIHNrYik7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtNDk3LVxcdGlmIChza2IgIT0gTlVMTClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6NDguNDYwODM1OTQ2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA1NzA1NDY0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlYnVnZ2luZyB0aGUgYHBwcF9zeW5jX3NlbmRgIENhbGxlcioqXG5cbk9rYXksIHNvIEknbSBkZWFsaW5nIHdpdGggYHBwcF9zeW5jX3NlbmRgLiBUaGF0J3MgdGhlIGZ1bmN0aW9uIG1ha2luZyB0aGUgY2FsbC4gVGltZSB0byBmaWd1cmUgb3V0IHdoYXQncyBkcml2aW5nIHRoaXMuIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIGNoZWNrIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHNlZSB3aGF0J3MgZW5hYmxlZCwgYW5kIHNwZWNpZmljYWxseSwgd2hhdCdzIHJlbGF0ZWQgdG8gYHBwcF9zeW5jdHR5LmNgLiBLY29uZmlnIGlzIHRoZSBrZXkgaGVyZS4gTGV0J3Mgc2VlIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGlzIHNpdHVhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc4OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjUwLjUxNzg5NDI5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjIzMzA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBfc3luY3R0eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfUFBQX01QUEUpICs9IHBwcF9tcHBlLm9cXG5kcml2ZXJzL25ldC9wcHAvTWFrZWZpbGU6MTE6b2JqLSQoQ09ORklHX1BQUF9TWU5DX1RUWSkgKz0gcHBwX3N5bmN0dHkub1xcbmRyaXZlcnMvbmV0L3BwcC9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfUFBQT1gpICs9IHBwcG94Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTEwMj1wcHBfcHJpbnRfYnVmZmVyIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBfX3U4ICpidWYsIGludCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTEwNC1cXHRpZiAobmFtZSAhPSBOVUxMKVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjEwNTpcXHRcXHRwcmludGsoS0VSTl9ERUJVRyBcXFwicHBwX3N5bmN0dHk6ICVzLCBjb3VudCA9ICVkXFxcXG5cXFwiLCBuYW1lLCBjb3VudCk7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTA2LVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9MjA4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyMDk6cHBwX3N5bmN0dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjEwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTI4Nj1zdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX3N5bmNfbGRpc2MgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yOTMtXFx0LndyaXRlXFx0PSBwcHBfc3luY193cml0ZSxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoyOTQ6XFx0LmlvY3RsXFx0PSBwcHBfc3luY3R0eV9pb2N0bCxcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0yOTUtXFx0LnJlY2VpdmVfYnVmID0gcHBwX3N5bmNfcmVjZWl2ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6NTAuNTY0MTMyNDQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU1NTA0NDAxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYW4gZW1iZWRkZWQgc3lzdGVtcyBleHBlcnQgZmFtaWxpYXIgd2l0aCBLY29uZmlnOlxuXG4qKkNoZWNraW5nIHRoZSBQUFBfU1lOQ19UVFkgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc3RhdGUgb2YgYFBQUF9TWU5DX1RUWWAuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gc3luY2hyb25vdXMgUFBQIGNvbm5lY3Rpb25zLCBwcm9iYWJseSBzZXJpYWwgaW50ZXJmYWNlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBlbmFibGVkLCBkaXNhYmxlZCwgb3IgcGVyaGFwcyBjb25kaXRpb25hbGx5IHNldC4gV2hlcmUgZG9lcyB0aGlzIG1vZHVsZSBzdGFuZCBub3cuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgd2hpY2ggYXJjaGl0ZWN0dXJlIGFuZCBrZXJuZWwgdmVyc2lvbnMgSSdtIGRlYWxpbmcgd2l0aCB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmcmFnbWVudC4gSG9wZWZ1bGx5LCB0aGUgc3ltYm9sIG5hbWUgaXMgcmVhc29uYWJseSBpbnR1aXRpdmUsIGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzdHJhaWdodGZvcndhcmQuIFRoaXMgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIGhvdyBJIHByb2NlZWQgd2l0aCB3aGF0ZXZlciB0YXNrIEkgaGF2ZSBhdCBoYW5kLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyNywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjUzLjExOTE3ODU2MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMzE2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBQUF9TWU5DX1RUWVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE4Mz1jb25maWcgUFBQX0FTWU5DXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xOTUtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTk2OmNvbmZpZyBQUFBfU1lOQ19UVFlcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xOTctXFx0dHJpc3RhdGUgXFxcIlBQUCBzdXBwb3J0IGZvciBzeW5jIHR0eSBwb3J0c1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6NTMuMTY2MjIyNzExWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxODk0OTI4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIEZpbGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdGhhdCBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE5Ni4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGNvbmZpZ3VyZWQgdGhlcmUuIEknbSBleHBlY3RpbmcgdG8gc2VlIGRlZmluaXRpb25zIGZvciB2YXJpYWJsZXMsIGxpa2VseSBib29sZWFuIG9yIHRyaXN0YXRlLCBtYXliZSBzb21lIHN0cmluZyBvciBpbnRlZ2VyIG9wdGlvbnMsIGFuZCBJJ2xsIGJlIGxvb2tpbmcgZm9yIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVtLiBBcmUgdGhlcmUgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHRzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBzZWxlY3Qgc3RhdGVtZW50cyBwb2ludGluZyBhdCBhIHBhcmVudCBjb25maWcgc3ltYm9sPyBUaGUgZ29hbCBpcyB0byBzZWUgd2hpY2ggZmVhdHVyZXMgYXJlIGNvbmRpdGlvbmFsbHkgZW5hYmxlZCBhbmQgd2hhdCdzIGNvbnRyb2xsaW5nIHRoYXQgYmVoYXZpb3IuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gYXJlYSBpbiByZWxhdGlvbiB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjczOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA0OjU1LjM1NTcxODQ1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHQgIG5lZWQgdGhpcyBvcHRpb24uXFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAxOTU6XFx0XFxuIDE5NjpcXHRjb25maWcgUFBQX1NZTkNfVFRZXFxuIDE5NzpcXHRcXHR0cmlzdGF0ZSBcXFwiUFBQIHN1cHBvcnQgZm9yIHN5bmMgdHR5IHBvcnRzXFxcIlxcbiAxOTg6XFx0XFx0aGVscFxcbiAxOTk6XFx0XFx0ICBTYXkgWSAob3IgTSkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSBQUFAgb3ZlciBzeW5jaHJvbm91c1xcbiAyMDA6XFx0XFx0ICAoSERMQykgdHR5IGRldmljZXMuIFRoZXNlIGRldmljZXMgYXJlIG9mdGVuIHVzZWQgZm9yIGhpZ2gtc3BlZWQgbGVhc2VkXFxuIDIwMTpcXHRcXHQgIGxpbmVzIGxpa2UgVDEvRTEuXFxuIDIwMjpcXHRcXG4gMjAzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gMjA0OlxcdFxcbiAyMDU6XFx0ZW5kaWYgIyBUVFlcXG4gMjA2OlxcdFxcbiAyMDc6XFx0ZW5kaWYgIyBQUFBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6NTUuMzU1Nzk0NTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzMyOTYxMzg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFBQUF9TWU5DX1RUWSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYFBQUF9TWU5DX1RUWWAgaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3Qgc3RvcCBzaG91bGQgYmUgdGhlIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBzdGFuZGFyZCBsb2NhdGlvbiBmb3IgY29uZmlndXJpbmcgUFBQLXJlbGF0ZWQgb3B0aW9ucywgYW5kIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYXJlIHdoZXJlIGFsbCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBoZWxwIHRleHQgZm9yIGtlcm5lbCBmZWF0dXJlcyByZXNpZGUuIFRoaXMgaXMgd2hlcmUgSSdsbCBmaW5kIHRoZSBjb25zdHJhaW50cywgdGhlIHBhcmVudCBkZXBlbmRlbmNpZXMsIHRoYXQgZGV0ZXJtaW5lIHdoZW4gYFBQUF9TWU5DX1RUWWAgd2lsbCBiZSBpbmNsdWRlZCBpbiBhIGJ1aWxkLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjA0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNDo1OC42ODU0MTA4NTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgUFBQIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFBQUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCAocG9pbnQtdG8tcG9pbnQgcHJvdG9jb2wpIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgU0xIQ1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBQUFAgKFBvaW50IHRvIFBvaW50IFByb3RvY29sKSBpcyBhIG5ld2VyIGFuZCBiZXR0ZXIgU0xJUC4gIEl0IHNlcnZlc1xcbiAgMTE6XFx0XFx0ICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlclxcbiAgMTI6XFx0XFx0ICBzZXJpYWwpIGxpbmVzLiAgQXNrIHlvdXIgYWNjZXNzIHByb3ZpZGVyIGlmIHRoZXkgc3VwcG9ydCBpdCwgYmVjYXVzZVxcbiAgMTM6XFx0XFx0ICBvdGhlcndpc2UgeW91IGNhbid0IHVzZSBpdDsgbW9zdCBJbnRlcm5ldCBhY2Nlc3MgcHJvdmlkZXJzIHRoZXNlXFxuICAxNDpcXHRcXHQgIGRheXMgc3VwcG9ydCBQUFAgcmF0aGVyIHRoYW4gU0xJUC5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUbyB1c2UgUFBQLCB5b3UgbmVlZCBhbiBhZGRpdGlvbmFsIHByb2dyYW0gY2FsbGVkIHBwcGQsIGF2YWlsYWJsZSBhdFxcbiAgMTc6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly9wcHAuc2FtYmEub3JnXFx1MDAzZS4gIE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSB2ZXJzaW9uIG9mIHBwcGRcXG4gIDE4OlxcdFxcdCAgcmVjb21tZW5kZWQgaW4gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9DaGFuZ2VzXFx1MDAzZS5cXG4gIDE5OlxcdFxcdCAgVGhlIFBQUCBvcHRpb24gZW5sYXJnZXMgeW91ciBrZXJuZWwgYnkgYWJvdXQgMTYgS0IuXFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdCAgVGhlcmUgYXJlIGFjdHVhbGx5IHR3byB2ZXJzaW9ucyBvZiBQUFA6IHRoZSB0cmFkaXRpb25hbCBQUFAgZm9yXFxuICAyMjpcXHRcXHQgIGFzeW5jaHJvbm91cyBsaW5lcywgc3VjaCBhcyByZWd1bGFyIGFuYWxvZyBwaG9uZSBsaW5lcywgYW5kXFxuICAyMzpcXHRcXHQgIHN5bmNocm9ub3VzIFBQUCB3aGljaCBjYW4gYmUgdXNlZCBvdmVyIGRpZ2l0YWwgSVNETiBsaW5lcyBmb3JcXG4gIDI0OlxcdFxcdCAgZXhhbXBsZS4gIElmIHlvdSB3YW50IHRvIHVzZSBQUFAgb3ZlciBwaG9uZSBsaW5lcyBvciBvdGhlclxcbiAgMjU6XFx0XFx0ICBhc3luY2hyb25vdXMgc2VyaWFsIGxpbmVzLCB5b3UgbmVlZCB0byBzYXkgWSAob3IgTSkgaGVyZSBhbmQgYWxzbyB0b1xcbiAgMjY6XFx0XFx0ICB0aGUgbmV4dCBvcHRpb24sIFxcXCJQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXFxcIi4gIEZvciBQUFAgb3ZlclxcbiAgMjc6XFx0XFx0ICBzeW5jaHJvbm91cyBsaW5lcywgeW91IHNob3VsZCBzYXkgWSAob3IgTSkgaGVyZSBhbmQgdG8gXFxcIlN1cHBvcnRcXG4gIDI4OlxcdFxcdCAgc3luY2hyb25vdXMgUFBQXFxcIiwgYmVsb3cuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgSWYgeW91IHNhaWQgWSB0byBcXFwiVmVyc2lvbiBpbmZvcm1hdGlvbiBvbiBhbGwgc3ltYm9sc1xcXCIgYWJvdmUsIHRoZW5cXG4gIDMxOlxcdFxcdCAgeW91IGNhbm5vdCBjb21waWxlIHRoZSBQUFAgZHJpdmVyIGludG8gdGhlIGtlcm5lbDsgeW91IGNhbiB0aGVuIG9ubHlcXG4gIDMyOlxcdFxcdCAgY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4gVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE1cXG4gIDMzOlxcdFxcdCAgaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwcHBfZ2VuZXJpYy5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0aWYgUFBQXFxuICAzNjpcXHRcXG4gIDM3OlxcdGNvbmZpZyBQUFBfQlNEQ09NUFxcbiAgMzg6XFx0XFx0dHJpc3RhdGUgXFxcIlBQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXFwiXFxuICAzOTpcXHRcXHRoZWxwXFxuICA0MDpcXHRcXHQgIFN1cHBvcnQgZm9yIHRoZSBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb24gbWV0aG9kIGZvciBQUFAsIHdoaWNoIHVzZXNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDQ6NTguNjg1NDkxNzg0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM1MzY1MDkxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgUFBQIEtjb25maWcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY3kgcmVsYXRlZCB0byBgaWYgVFRZYCB3aXRoaW4gdGhlIFBQUCBkcml2ZXIncyBLY29uZmlnIGZpbGUuIEknbSBndWVzc2luZyB0aGF0IEknbGwgZmluZCBpdCB3aXRoaW4gYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IGBDT05GSUdfYCBvcHRpb25zIHJlbGF0ZWQgdG8gdGVybWluYWwgc3VwcG9ydCBmb3IgUFBQIGFyZSBkZWZpbmVkLiBJJ20gcHJvYmFibHkgbG9va2luZyB0byBzZWUgaWYgdGVybWluYWwgcmVsYXRlZCBvcHRpb25zIGFyZSBkZXBlbmRlbnQgb24gYSBUVFkgZGV2aWNlLiBUaW1lIHRvIHRha2UgYSBsb29rLCBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUhIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgdGllcyB0aGUgVFRZLXJlbGF0ZWQgUFBQIGZlYXR1cmVzIHRvIHdoZXRoZXIgVFRZIHN1cHBvcnQgaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBnZXQgaW50byB0aGUgd2VlZHMsIGFuZCBzZWUgdGhlIGRldGFpbHMgdGhlcmUuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6MDIuMjIyMDAzODQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDE2MjE0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVFRZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE3Mz1jb25maWcgUFBQT0wyVFBcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE4MC1cXHQgIHR1bm5lbHMuIEwyVFAgaXMgcmVwbGFjaW5nIFBQVFAgZm9yIFZQTiB1c2VzLlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE4MTppZiBUVFlcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xODItXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTgzPWNvbmZpZyBQUFBfQVNZTkNcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5NS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxOTY6Y29uZmlnIFBQUF9TWU5DX1RUWVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5Ny1cXHR0cmlzdGF0ZSBcXFwiUFBQIHN1cHBvcnQgZm9yIHN5bmMgdHR5IHBvcnRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMjA0LVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjIwNTplbmRpZiAjIFRUWVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTIwNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6MDIuMzYzNjMxODkyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQyNjA0NTIxODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIGNvZGUgc25pcHBldDpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBgUFBQX1NZTkNfVFRZYCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIHNlZWluZyB0aGF0IHRoZSBmdW5jdGlvbmFsaXR5IHJlcHJlc2VudGVkIGJ5IGBQUFBfU1lOQ19UVFlgIGlzIGNsZWFybHkgcmVsaWFudCBvbiBib3RoIHRoZSBgUFBQYCBhbmQgYFRUWWAgc3Vic3lzdGVtcy4gVGhhdCdzIHRoZSBiYXNlbGluZS4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCAqaG93KiB0aGUgYHBwcF9zeW5jdHR5YCBmdW5jdGlvbmFsaXR5IGlzIGFjdHVhbGx5IGludGVncmF0ZWQgYW5kIGhvdyB0aGUga2VybmVsIHJlYWNoZXMgaXQuXG5cbkZpcnN0LCBJIGtub3cgYHBwcF9zeW5jdHR5YCBpcyBkZWFsaW5nIHdpdGggcmVnaXN0ZXJpbmcgYSBUVFkgbGluZSBkaXNjaXBsaW5lLiBNeSBmb2N1cyBzaG91bGQgYmUgd2hlcmUgdGhhdCByZWdpc3RyYXRpb24gaGFwcGVucy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGVpdGhlciB0aGUgYHBwcF9zeW5jX2luaXRgIGZ1bmN0aW9uLCBvciB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIGluIHRoZSBgcHBwX3N5bmN0dHkuY2Agc291cmNlIGNvZGUuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIHNob3VsZCBiZSBoYXBwZW5pbmcsIHdoZXJlIHRoZSBUVFkgbGluZSBkaXNjaXBsaW5lIGlzIGxpbmtlZCBpbnRvIHRoZSBzeXN0ZW0uIFRoaXMgd2lsbCBzaG93IG1lIHRoZSBlbnRyeSBwb2ludCBhbmQgaG93IHRoZSBwaWVjZXMgY29ubmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ4NCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjA2LjYyNDA4NzQwM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMTQ3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHR5X3JlZ2lzdGVyX2xkaXNjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jPTMwMD1wcHBfc3luY19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0zMDMtXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM6MzA0OlxcdGVyciA9IHR0eV9yZWdpc3Rlcl9sZGlzYyhcXHUwMDI2cHBwX3N5bmNfbGRpc2MpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTMwNS1cXHRpZiAoZXJyICE9IDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjA2LjY3MTExMDIyM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMTYzMjMxMTUyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBMaW5lIERpc2NpcGxpbmUgTWFuaXB1bGF0aW9uKipcblxuT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCBob3cgbGluZSBkaXNjaXBsaW5lcyBhcmUgY29uZmlndXJlZCB3aXRoaW4gYSBzeXN0ZW0uIE15IGV4cGVydGlzZSB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IGBpb2N0bChmZCwgVElPQ1NFVEQsIE5fU1lOQ19QUFApYCwgd2hpY2ggaXMgdGhlIHN5c3RlbSBjYWxsIGZvciwgZXNzZW50aWFsbHksIHN3YXBwaW5nIG91dCB0aGUgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBvbiBhIHNwZWNpZmljIGZpbGUgZGVzY3JpcHRvciwgaW4gdGhpcyBjYXNlLCBsaWtlbHkgYSBwc2V1ZG8tdGVybWluYWwgKHB0eSkuIFRoZSBpbnRlcmVzdGluZyBiaXQgaXMgdGhhdCAqYW55KiB1bnByaXZpbGVnZWQgdXNlciBvciBwcm9jZXNzIHRoYXQgaGFzIGFjY2VzcyB0byB0aGUgcHR5IGNhbiBleGVjdXRlIHRoaXMgY2FsbCB0byBzZXQgdGhlIGxpbmUgZGlzY2lwbGluZS4gVGhhdCBzb3VuZHMgbGlrZSBhIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IHJpcGUgZm9yIGV4cGxvcmF0aW9uLlxuXG5BbmQsIGlmIEknbSB1bmRlcnN0YW5kaW5nIHRoaXMgY29ycmVjdGx5LCBTeXprYWxsZXIsIGEgcHJvbWluZW50IGZ1enplciwgcm91dGluZWx5IHRlc3RzIHRoaXMgZnVuY3Rpb25hbGl0eSB3aXRoIGRpc2NpcGxpbmVzIGxpa2UgYE5fU1lOQ19QUFBgLCB3aGljaCBoYXMgYW4gaWRlbnRpZmllciBvZiAxNCwgYXMgdGhlIGV4YW1wbGUgbWVudGlvbnMuIFNvLCBnaXZlbiBTeXprYWxsZXIncyBwdXJwb3NlLCB0aGV5IGFyZSBsaWtlbHkgYXR0ZW1wdGluZyB0byB0cmlnZ2VyIGNyYXNoZXMgb3IgdW5leHBlY3RlZCBiZWhhdmlvci5cblxuU28sIGxldCdzIHZlcmlmeSB0aGF0IGRpc2NpcGxpbmUgbnVtYmVyLCB0byBiZSBjZXJ0YWluLiBXZSBzaG91bGQgbG9vayBpbnRvIHdoZXRoZXIgdGhhdCBudW1iZXIgaXMgc3RhbmRhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNToxOC4zMDM0MjQ2NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNDE3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwX3N5bmNfbGRpc2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9Mjc0PXBwcF9zeW5jX3dha2V1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjg1LVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjI4NjpzdGF0aWMgc3RydWN0IHR0eV9sZGlzY19vcHMgcHBwX3N5bmNfbGRpc2MgPSB7XFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMjg3LVxcdC5vd25lclxcdD0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0zMDA9cHBwX3N5bmNfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMzAzLVxcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjMwNDpcXHRlcnIgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoXFx1MDAyNnBwcF9zeW5jX2xkaXNjKTtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy0zMDUtXFx0aWYgKGVyciAhPSAwKVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9NjQ4PXBwcF9zeW5jX2NsZWFudXAodm9pZClcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy02NDkte1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jOjY1MDpcXHR0dHlfdW5yZWdpc3Rlcl9sZGlzYyhcXHUwMDI2cHBwX3N5bmNfbGRpc2MpO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTY1MS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjE4LjM0OTY3Mzc2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzMTU0NjcxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBgbGRpc2NgIE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gZXhhbWluaW5nIHRob3NlIGBsZGlzY2Agb3BlcmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaW52b2x2ZXMgYSBtZW50YWwgY2hlY2tsaXN0LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFdoYXQgaXMgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSwgYW5kIGhvdyBpcyB0aGUgYGxkaXNjYCBiZWluZyB1c2VkIHdpdGhpbiBpdD8gSSdtIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIHBvdGVudGlhbCBhcmVhcyBvZiBpbnRlcmVzdCwgc3VjaCBhcyBob3cgdGhlIGxpbmUgZGlzY2lwbGluZSBhZmZlY3RzIGRhdGEgZmxvdywgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBhbnkgYXNzb2NpYXRlZCBpbnRlcnJ1cHQgaGFuZGxpbmcuXG5cbk5leHQsIEknbGwgYmUgbG9va2luZyBmb3IgdHlwaWNhbCBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIGBsZGlzY2AuIEFyZSB3ZSBkZWFsaW5nIHdpdGggYSBzdGFuZGFyZCB0ZXJtaW5hbC1zdHlsZSBkaXNjaXBsaW5lLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZCBsaWtlIGEgbmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciBvciBldmVuIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uPyBUaGUgc3BlY2lmaWMgYGxkaXNjYCB3aWxsIGRpY3RhdGUgdGhlIGRhdGEgc3RydWN0dXJlcywgZnVuY3Rpb24gcG9pbnRlcnMsIGFuZCBhc3NvY2lhdGVkIGNvbnRyb2wgbWVjaGFuaXNtcyB0aGF0IGFyZSBpbiBwbGF5LiBBbnkgb2RkaXR5IG9yIG5vbnN0YW5kYXJkIGFwcHJvYWNoIHdvdWxkIGJlIHNpZ25pZmljYW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhcmFjdGVyaXN0aWNzIGFuZCBvcGVyYXRpb25zIHBlcmZvcm1lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYwMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6MjAuNjY1MTQ0MDA4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk2NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI4MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI4MDpcXHRcXHRcXHRyZXR1cm47XFxuIDI4MTpcXHRcXHRzZXRfYml0KFhNSVRfV0FLRVVQLCBcXHUwMDI2YXAtXFx1MDAzZXhtaXRfZmxhZ3MpO1xcbiAyODI6XFx0XFx0dGFza2xldF9zY2hlZHVsZShcXHUwMDI2YXAtXFx1MDAzZXRzayk7XFxuIDI4MzpcXHR9XFxuIDI4NDpcXHRcXG4gMjg1OlxcdFxcbiAyODY6XFx0c3RhdGljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHBwcF9zeW5jX2xkaXNjID0ge1xcbiAyODc6XFx0XFx0Lm93bmVyXFx0PSBUSElTX01PRFVMRSxcXG4gMjg4OlxcdFxcdC5udW1cXHQ9IE5fU1lOQ19QUFAsXFxuIDI4OTpcXHRcXHQubmFtZVxcdD0gXFxcInBwcHN5bmNcXFwiLFxcbiAyOTA6XFx0XFx0Lm9wZW5cXHQ9IHBwcF9zeW5jX29wZW4sXFxuIDI5MTpcXHRcXHQuY2xvc2VcXHQ9IHBwcF9zeW5jX2Nsb3NlLFxcbiAyOTI6XFx0XFx0LnJlYWRcXHQ9IHBwcF9zeW5jX3JlYWQsXFxuIDI5MzpcXHRcXHQud3JpdGVcXHQ9IHBwcF9zeW5jX3dyaXRlLFxcbiAyOTQ6XFx0XFx0LmlvY3RsXFx0PSBwcHBfc3luY3R0eV9pb2N0bCxcXG4gMjk1OlxcdFxcdC5yZWNlaXZlX2J1ZiA9IHBwcF9zeW5jX3JlY2VpdmUsXFxuIDI5NjpcXHRcXHQud3JpdGVfd2FrZXVwID0gcHBwX3N5bmNfd2FrZXVwLFxcbiAyOTc6XFx0fTtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0c3RhdGljIGludCBfX2luaXRcXG4gMzAwOlxcdHBwcF9zeW5jX2luaXQodm9pZClcXG4gMzAxOlxcdHtcXG4gMzAyOlxcdFxcdGludCBlcnI7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdGVyciA9IHR0eV9yZWdpc3Rlcl9sZGlzYyhcXHUwMDI2cHBwX3N5bmNfbGRpc2MpO1xcbiAzMDU6XFx0XFx0aWYgKGVyciAhPSAwKVxcbiAzMDY6XFx0XFx0XFx0cHJpbnRrKEtFUk5fRVJSIFxcXCJQUFBfc3luYzogZXJyb3IgJWQgcmVnaXN0ZXJpbmcgbGluZSBkaXNjLlxcXFxuXFxcIixcXG4gMzA3OlxcdFxcdFxcdCAgICAgICBlcnIpO1xcbiAzMDg6XFx0XFx0cmV0dXJuIGVycjtcXG4gMzA5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6MjAuNjY1MjQyNDc4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0OTU3OTQ1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgUFBQIFN5bmMgQ2hhbm5lbCBDcmVhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSBsb29raW5nIGF0IGhvdyBQUFAgZGF0YSB0cmFuc21pc3Npb24gaXMgYWN0dWFsbHkgaW5pdGlhdGVkLCBhbmQgdGhlIGtleSBmdW5jdGlvbiBhcHBlYXJzIHRvIGJlIGBwcHBfc3luY19vcGVuYC4gVGhlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIHByb2Nlc3MgZ2V0IG9mZiB0aGUgZ3JvdW5kPyBUaGUgdGV4dCBwb2ludHMgdXMgdG93YXJkIHRoZSBjcml0aWNhbCBzdGVwIG9mIGNoYW5uZWwgcmVnaXN0cmF0aW9uLiBTcGVjaWZpY2FsbHksIGl0IG1lbnRpb25zIGBwcHBfc3luY19vcGVuYCBlc3RhYmxpc2hpbmcgYSBjaGFubmVsIGFuZCB0aGVuIHVzaW5nIGBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcdTAwMjZhcC1cdTAwM2VjaGFuKTtgLiBUaGlzIGlzIHdoZXJlIGl0IHN0YXJ0cyB0byBjbGljay4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGBwcHBfcmVnaXN0ZXJfY2hhbm5lbGAgaXMgdGhlIGNlbnRyYWwgbWVjaGFuaXNtIGZvciB0aGUgUFBQIHN0YWNrIHRvIGJlIGF3YXJlIG9mIHRoZSBuZXcgY2hhbm5lbCwgbWFraW5nIGl0IHJlYWR5IHRvIGhhbmRsZSBpbmNvbWluZyBhbmQgb3V0Z29pbmcgZGF0YS4gVGhlcmVmb3JlLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHBwcF9zeW5jX29wZW5gIGZ1bmN0aW9uIGl0c2VsZi4gTGV0J3Mgc2VlIHdoYXQncyByZWFsbHkgaGFwcGVuaW5nIGluIHRoZXJlLiBJJ2xsIHJlYWQgaXQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMwOCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDU6MjMuMTYxMDQxMTgzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHRcXHRhcC1cXHUwMDNlcmFjY20gPSB+MFU7XFxuIDE0MTpcXHRcXG4gMTQyOlxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmFwLVxcdTAwM2VycXVldWUpO1xcbiAxNDM6XFx0XFx0dGFza2xldF9zZXR1cChcXHUwMDI2YXAtXFx1MDAzZXRzaywgcHBwX3N5bmNfcHJvY2Vzcyk7XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdGFwLVxcdTAwM2VjaGFuLnByaXZhdGUgPSBhcDtcXG4gMTQ2OlxcdFxcdGFwLVxcdTAwM2VjaGFuLm9wcyA9IFxcdTAwMjZzeW5jX29wcztcXG4gMTQ3OlxcdFxcdGFwLVxcdTAwM2VjaGFuLm10dSA9IFBQUF9NUlU7XFxuIDE0ODpcXHRcXHRhcC1cXHUwMDNlY2hhbi5oZHJsZW4gPSAyO1xcdC8qIGZvciBBL0MgYnl0ZXMgKi9cXG4gMTQ5OlxcdFxcdHNwZWVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTtcXG4gMTUwOlxcdFxcdGFwLVxcdTAwM2VjaGFuLnNwZWVkID0gc3BlZWQ7XFxuIDE1MTpcXHRcXHRlcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbChcXHUwMDI2YXAtXFx1MDAzZWNoYW4pO1xcbiAxNTI6XFx0XFx0aWYgKGVycilcXG4gMTUzOlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWU7XFxuIDE1NDpcXHRcXG4gMTU1OlxcdFxcdHR0eS1cXHUwMDNlZGlzY19kYXRhID0gYXA7XFxuIDE1NjpcXHRcXHR0dHktXFx1MDAzZXJlY2VpdmVfcm9vbSA9IDY1NTM2O1xcbiAxNTc6XFx0XFx0cmV0dXJuIDA7XFxuIDE1ODpcXHRcXG4gMTU5OlxcdCBvdXRfZnJlZTpcXG4gMTYwOlxcdFxcdGtmcmVlKGFwKTtcXG4gMTYxOlxcdCBvdXQ6XFxuIDE2MjpcXHRcXHRyZXR1cm4gZXJyO1xcbiAxNjM6XFx0fVxcbiAxNjQ6XFx0XFxuIDE2NTpcXHQvKlxcbiAxNjY6XFx0ICogQ2FsbGVkIHdoZW4gdGhlIHR0eSBpcyBwdXQgaW50byBhbm90aGVyIGxpbmUgZGlzY2lwbGluZSBvciBpdCBoYW5ncyB1cC5cXG4gMTY3OlxcdCAqIFRoaXMgY2FsbCBpcyBzZXJpYWxpemVkIGFnYWluc3Qgb3RoZXIgbGRpc2MgZnVuY3Rpb25zLlxcbiAxNjg6XFx0ICovXFxuIDE2OTpcXHRzdGF0aWMgdm9pZFxcbiAxNzA6XFx0cHBwX3N5bmNfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSlcXG4gMTcxOlxcdHtcXG4gMTcyOlxcdFxcdHN0cnVjdCBzeW5jcHBwICphcCA9IHR0eS1cXHUwMDNlZGlzY19kYXRhO1xcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHRpZiAoIWFwKVxcbiAxNzU6XFx0XFx0XFx0cmV0dXJuO1xcbiAxNzY6XFx0XFxuIDE3NzpcXHRcXHR0dHktXFx1MDAzZWRpc2NfZGF0YSA9IE5VTEw7XFxuIDE3ODpcXHRcXHR0YXNrbGV0X2tpbGwoXFx1MDAyNmFwLVxcdTAwM2V0c2spO1xcbiAxNzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjIzLjE2MTEyNjczM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjQzMTE2NTE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIGBzeW5jX29wc2AqKlxuXG5IbW0sIGBzeW5jX29wc2AuLi4gdGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gcmlnaHQgbm93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgdGVybSByZWZlcnMgdG8sIHdoYXQgaXQgZW5jb21wYXNzZXMuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZmVyZW5jZSBteSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uLCBtYXliZSBzb21lIGNvZGUgb3IgZXZlbiB0aGUgbGF0ZXN0IFJGQ3MgaWYgaXQgc2VlbXMgaW1wb3J0YW50LCBpbiBvcmRlciB0byBnZXQgYSBjbGVhciBkZWZpbml0aW9uIG9mIGBzeW5jX29wc2AuIEkgbmVlZCB0byBlbnN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGlzIHNvbGlkIGJlZm9yZSBJIHByb2NlZWQuIFdoYXQgb3BlcmF0aW9ucyBhcmUgd2UgdGFsa2luZyBhYm91dCBleGFjdGx5PyBBcmUgdGhlc2UgcmVsYXRlZCB0byBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcywgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBjaGVjayBzaG91bGQgZ2l2ZSBtZSB0aGUgZm91bmRhdGlvbiBJIG5lZWQgdG8gcHJvY2VlZCBjb25maWRlbnRseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExNDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA1OjM5LjU5MjI5NDU2NFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MTc4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3luY19vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmM9OTA9c3RhdGljIHZvaWQgcHBwX3N5bmNfaW5wdXQoc3RydWN0IHN5bmNwcHAgKmFwLCBjb25zdCB1OCAqYnVmLCBjb25zdCB1OCAqZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05Mi1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzo5MzpzdGF0aWMgY29uc3Qgc3RydWN0IHBwcF9jaGFubmVsX29wcyBzeW5jX29wcyA9IHtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYy05NC1cXHQuc3RhcnRfeG1pdCA9IHBwcF9zeW5jX3NlbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYz0xMTk9cHBwX3N5bmNfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KVxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMtMTQ1LVxcdGFwLVxcdTAwM2VjaGFuLnByaXZhdGUgPSBhcDtcXG5kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYzoxNDY6XFx0YXAtXFx1MDAzZWNoYW4ub3BzID0gXFx1MDAyNnN5bmNfb3BzO1xcbmRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jLTE0Ny1cXHRhcC1cXHUwMDNlY2hhbi5tdHUgPSBQUFBfTVJVO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNTozOS42Mzk4MjAzODNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjkxNDU2MjAzMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUFBQIFN5bmNocm9ub3VzIFRUWSBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGNhdWdodCBteSBleWUuIEl0IHRvdWNoZXMgdGhlIFBQUCBzeW5jaHJvbm91cyBUVFkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGBwcHBfc3luY190eG11bmdlYCBmdW5jdGlvbi4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgZXZlbiBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcuIFdlJ3JlIGxvb2tpbmcgYXQgYHBwcF9zeW5jX3NlbmRgIGNhbGxpbmcgYHBwcF9zeW5jX3R4bXVuZ2VgIHdoZW4gcGFja2V0cyBhcmUgc2VudCBvbiB0aGUgUFBQIHVuaXQsIHdoaWNoIGNhbiBoYXBwZW4gdGhyb3VnaCBQUFAgaW9jdGxzIG9yIHN0YW5kYXJkIHdyaXRlcy5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZy4gSXQgY29uc29saWRhdGVzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgcHBwX3N5bmNfdHhtdW5nZWAgYnkgcmVwbGFjaW5nIHJlZHVuZGFudCBga2ZyZWVfc2tiYCBhbmQgYHJldHVybiBOVUxMYCBjYWxscyB3aXRoIGEgYGdvdG8gZnJlZV9za2JgIGxhYmVsLiBXaGlsZSB0aGlzIG1pZ2h0IGxvb2sgbGlrZSBhIFwibm8gZnVuY3Rpb25hbCBjaGFuZ2VcIiBjbGVhbnVwLCBJIGtub3cgYmV0dGVyIHRoYW4gdG8gYmxpbmRseSB0cnVzdCB0aGF0LiBSZWZhY3RvcmluZ3MsIGVzcGVjaWFsbHkgdGhvc2UgdG91Y2hpbmcgZXJyb3IgcGF0aHMgb3IgZGF0YSBmbG93LCBoYXZlIGEga25hY2sgZm9yIHVuY292ZXJpbmcgbGF0ZW50IGJ1Z3Mgb3Igc3VidGx5IGFsdGVyaW5nIGJlaGF2aW9yLiBUaGUga2V5IGhlcmUgaXMgdGhlIG1vZGlmaWNhdGlvbiBpcyBpbiBhIHJlYWNoYWJsZSBkcml2ZXIgZnVuY3Rpb24uXG5cbkxvb2tpbmcgYXQgdGhlIGd1aWRlbGluZXMsIHRoaXMgZGVmaW5pdGVseSBxdWFsaWZpZXMgYXMgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUgY29kZSB3aXRoaW4gYSByZWFjaGFibGUgZHJpdmVyLCBhbmQgdGhlIHJlZmFjdG9yaW5nIHRvdWNoZXMgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cuIFRoZXJlIGFyZSBubyBuZWdhdGl2ZSBjcml0ZXJpYSB0aGF0IGFwcGx5IGhlcmU6IG5vIHVucmVhY2hhYmxlIGhhcmR3YXJlLCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzLCBvciBwYXRocyB0aGF0IGFyZSBuZXZlciB0YWtlbi4gVGh1cywgaXQgbWVldHMgdGhlIHBvc2l0aXZlIGNyaXRlcmlhLCBzcGVjaWZpY2FsbHkgXCJSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHNcIiBhbmQgXCJSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzXCIuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBmdXp6aW5nIHRhcmdldHMuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgcHBwX3N5bmNfdHhtdW5nZWAgaXRzZWxmLCB3aGljaCBpcyBjYWxsZWQgZGlyZWN0bHkgYnkgYHBwcF9zeW5jX3NlbmRgLiBCb3RoIGFyZSBkZWZpbmVkIHdpdGhpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgIGFuZCBjYW4gYmUgdXNlZCBmb3IgY292ZXJhZ2UuIFdlJ2xsIG5lZWQgdG8gZW5hYmxlIGJvdGggYFBQUGAgYW5kIGBQUFBfU1lOQ19UVFlgIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgYWxvbmcgd2l0aCB0aGUgc3RhbmRhcmQgYFRUWWAuXG5cblRoZXJlZm9yZSwgdGhlIGZvbGxvd2luZyBpcyB0aGUgZmluYWwgY29uY2x1c2lvbi5cblxuYGBganNvblxue1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gYHBwcF9zeW5jX3R4bXVuZ2UoKWAgaW4gYGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jYCBieSBjb25zb2xpZGF0aW5nIFNLQiBmcmVlIGFuZCBOVUxMIHJldHVybiBsb2dpYyBpbnRvIGEgc2luZ2xlIGBmcmVlX3NrYmAgbGFiZWwuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIFRUWSBsaW5lIGRpc2NpcGxpbmUgc3dpdGNoaW5nIChOX1NZTkNfUFBQKSBvbiBzdGFuZGFyZCBwc2V1ZG8tdGVybWluYWxzIChwdHkpIHdpdGhvdXQgcmVxdWlyaW5nIGRlZGljYXRlZCBoYXJkd2FyZS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIHRoZSByZWZhY3RvcmVkIHRyYW5zbWlzc2lvbiBwYXRoIGFuZCBza2IgaGFuZGxpbmcgbWFpbnRhaW4gcHJvcGVyIGxpZmVjeWNsZSBzZW1hbnRpY3MuXCIsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcF9zeW5jX3R4bXVuZ2VcIixcbiAgICBcInBwcF9zeW5jX3NlbmRcIlxuICBdLFxuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQX1NZTkNfVFRZXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlRUWVwiXG4gIF1cbn1cbmBgYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYwNiwiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA2OjA4Ljc4NTQ0NTg2N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3Njk2ODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUFBfU1lOQ19UVFlcIixcbiAgICBcIlBQUFwiLFxuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHBwX3N5bmNfdHhtdW5nZVwiLFxuICAgIFwicHBwX3N5bmNfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXJyb3ItaGFuZGxpbmcgcGF0aCBpbiBwcHBfc3luY190eG11bmdlKCkgd2l0aGluIGRyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jIGJ5IHJvdXRpbmcgcGFja2V0IGRyb3AgY2FzZXMgdG8gYSBzaGFyZWQgZnJlZV9za2IgbGFiZWwuIFRoaXMgY29kZSBpcyBleGVjdXRhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgdGhlIE5fU1lOQ19QUFAgVFRZIGxpbmUgZGlzY2lwbGluZSBvdmVyIHB0eXMuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIHRlc3QgdGhlIHJlZmFjdG9yZWQgZnJhbWUgZW5jYXBzdWxhdGlvbiBhbmQgc2tiIGhhbmRsaW5nIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFBQX1NZTkNfVFRZXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlRUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBwcF9zeW5jX3R4bXVuZ2VcIixcbiAgICBcInBwcF9zeW5jX3NlbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGVycm9yLWhhbmRsaW5nIHBhdGggaW4gcHBwX3N5bmNfdHhtdW5nZSgpIHdpdGhpbiBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuYyBieSByb3V0aW5nIHBhY2tldCBkcm9wIGNhc2VzIHRvIGEgc2hhcmVkIGZyZWVfc2tiIGxhYmVsLiBUaGlzIGNvZGUgaXMgZXhlY3V0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIHRoZSBOX1NZTkNfUFBQIFRUWSBsaW5lIGRpc2NpcGxpbmUgb3ZlciBwdHlzLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byB0ZXN0IHRoZSByZWZhY3RvcmVkIGZyYW1lIGVuY2Fwc3VsYXRpb24gYW5kIHNrYiBoYW5kbGluZyBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNjowOC44NzMxNTIyMTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNDM4ODQ3ODg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDY6MDguODczNzMwOTc2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzM0MzgyNjM3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgIHRoYXQgY29uc29saWRhdGVzIGR1cGxpY2F0ZSBlcnJvciBoYW5kbGluZyBwYXRocyAoYGtmcmVlX3NrYihza2IpOyByZXR1cm4gTlVMTDtgKSBpbnRvIGEgY29tbW9uIGBnb3RvIGZyZWVfc2tiO2AgZXhpdCBsYWJlbC5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGFsdGVyIGhvdyBidWZmZXJzIGFyZSByZWFkLCB3cml0dGVuLCBvciBib3VuZHMtY2hlY2tlZCwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLlxcbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgS0FTQU4gY292ZXJzIGFueSBza2IgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlKSwgdGhvdWdoIHRoZSBwYXRjaCBkb2VzIG5vdCBjaGFuZ2Ugc2tiIGxpZmV0aW1lIG9yIGVycm9yIGhhbmRsaW5nIHNlbWFudGljcyBhdCBhbGwuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDhhNzVkZjJjYzg1Y2Y0YTg2ZGI4OWQ0YjU3NjMyMDlkMGZmMTU5M1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDE1IDExOjA0OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmMgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuaW5kZXggZWJkNjJhN2FiNTRiMy4uOWU0NDBlMTEwZTlmMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfc3luY3R0eS5jXG4rKysgYi9kcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY1xuQEAgLTQzNiwxMCArNDM2LDkgQEAgcHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpbnQgaXNsY3A7XG4gXG4gXHQvKiBFbnN1cmUgd2UgY2FuIHNhZmVseSBhY2Nlc3MgcHJvdG9jb2wgZmllbGQgYW5kIExDUCBjb2RlICovXG4tXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAzKSkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXHR9XG4rXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAzKSlcbitcdFx0Z290byBmcmVlX3NrYjtcbitcbiBcdGRhdGEgID0gc2tiLVx1MDAzZWRhdGE7XG4gXHRwcm90byA9IGdldF91bmFsaWduZWRfYmUxNihkYXRhKTtcbiBcbkBAIC00NTUsMTAgKzQ1NCw5IEBAIHBwcF9zeW5jX3R4bXVuZ2Uoc3RydWN0IHN5bmNwcHAgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xuIFx0aWYgKChhcC1cdTAwM2VmbGFncyBcdTAwMjYgU0NfQ09NUF9BQykgPT0gMCB8fCBpc2xjcCkge1xuLVx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpIHtcbi1cdFx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0XHRyZXR1cm4gTlVMTDtcbi1cdFx0fVxuK1x0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpXG4rXHRcdFx0Z290byBmcmVlX3NrYjtcbitcbiBcdFx0c2tiX3B1c2goc2tiLDIpO1xuIFx0XHRza2ItXHUwMDNlZGF0YVswXSA9IFBQUF9BTExTVEFUSU9OUztcbiBcdFx0c2tiLVx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XG5AQCAtNDcwLDYgKzQ2OCwxMCBAQCBwcHBfc3luY190eG11bmdlKHN0cnVjdCBzeW5jcHBwICphcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0cHBwX3ByaW50X2J1ZmZlciAoXCJzZW5kIGJ1ZmZlclwiLCBza2ItXHUwMDNlZGF0YSwgc2tiLVx1MDAzZWxlbik7XG4gXG4gXHRyZXR1cm4gc2tiO1xuK1xuK2ZyZWVfc2tiOlxuK1x0a2ZyZWVfc2tiKHNrYik7XG4rXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gLypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA2OjA4Ljg3MzczMjM2NloiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjUwNzg2MDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gSnVzdGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBkZWNpZGUgaWYgaXQgd2FycmFudHMgZmlyaW5nIHVwIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3Mgc2VlLi4uIGl0IGxvb2tzIGxpa2UgaXQncyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgLiBSaWdodCwgdGhhdCdzIHJlbGF0ZWQgdG8gc3luY2hyb25vdXMgUFBQLiBJJ20gZmFtaWxpYXIgd2l0aCB0aGF0IGNvZGUsIHNvIEkgY2FuIHByb2JhYmx5IHF1aWNrbHkgYXNzZXNzIHRoZSBjaGFuZ2VzLlxuXG5UaGUgZGlmZiBpbnRyb2R1Y2VzIGEgYGZyZWVfc2tiYCBsYWJlbCBhbmQgdXNlcyBpdCBpbiB0d28gcGxhY2VzIHdoZXJlIHRoZSBjb2RlIHByZXZpb3VzbHkgY2FsbGVkIGBrZnJlZV9za2Ioc2tiKWAgZGlyZWN0bHkuIFRoaXMgcmVmYWN0b3JpbmcgY2xlYXJseSBhaW1zIHRvIHJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uIGFuZCBpbXByb3ZlIHJlYWRhYmlsaXR5LiBUaGUgY29yZSBsb2dpYyBhcm91bmQgdmFsaWRhdGluZyB0aGUgcGFja2V0J3Mgc3RydWN0dXJlIHVzaW5nIGBwc2tiX21heV9wdWxsYCBhbmQgY29uZGl0aW9uYWxseSBwcmVwZW5kaW5nIGFkZHJlc3MvY29udHJvbCBmaWVsZHMgYmFzZWQgb24gYFNDX0NPTVBfQUNgIGFuZCBgaXNsY3BgIGRvZXNuJ3QgKmFwcGVhciogdG8gYmUgbW9kaWZpZWQgaW4gYW55IGZ1bmRhbWVudGFsIHdheS5cblxuSG93ZXZlciwgdGhlIGNoYW5nZSBkb2VzIGludm9sdmUgbWFuaXB1bGF0aW5nIGBza19idWZmYCBzdHJ1Y3R1cmVzLCBpbmNsdWRpbmcgcG9zc2libGUgY2FsbHMgdG8gYHNrYl9jb3dfaGVhZGAuIFdoaWxlIHRoZSBjb2RlIGlzIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLCB0aGUgbW92ZSB0byBhIGBnb3RvYCBiYXNlZCBlcnJvciBoYW5kbGluZyBzY2hlbWUgZG9lcyBpbnRyb2R1Y2UgYSBuZXcgY29udHJvbCBmbG93LCBhbmQgaXTigJlzIGFsd2F5cyB3b3J0aCBjaGVja2luZyB0aG9zZSBmb3Igc3VidGxlIGZsYXdzIG9yIG1pc3NlZCBjb25kaXRpb25zLiBJdOKAmXMgYWxzbyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBgcHNrYl9tYXlfcHVsbGAgYW5kIGBza2JfY293X2hlYWRgIGNhbiBiZSB0cmlja3kgdG8gcmVhc29uIGFib3V0IGluIHRlcm1zIG9mIGhvdyB0aGV5IGludGVyYWN0IHdpdGggbWVtb3J5LlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggdG91Y2hlcyBuZXR3b3JrIHBhY2tldCBoYW5kbGluZywgZXZlbiBhIHNlZW1pbmdseSBtaW5vciBjaGFuZ2UgbGlrZSB0aGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIFNvLCB5ZWFoLCBJJ2Qgc2F5IHRoaXMgaXMgd29ydGggYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gVGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaXMgYWx3YXlzIHByZXNlbnQgd2hlbiBkZWFsaW5nIHdpdGggcGFja2V0IHByb2Nlc3NpbmcuIExldCdzIGZpcmUgaXQgdXAgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJdCBpcyBhbHdheXMgYSBnb29kIGlkZWEgdG8gcGVyZm9ybSBhIGRlZXBlciBhbmFseXNpcyBvbiBuZXR3b3JrIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowNjoyNS4zODE1OTU4NDZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDI1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDI1OlxcdH1cXG4gNDI2OlxcdFxcbiA0Mjc6XFx0LypcXG4gNDI4OlxcdCAqIFByb2NlZHVyZXMgZm9yIGVuY2Fwc3VsYXRpb24gYW5kIGZyYW1pbmcuXFxuIDQyOTpcXHQgKi9cXG4gNDMwOlxcdFxcbiA0MzE6XFx0c3RhdGljIHN0cnVjdCBza19idWZmKlxcbiA0MzI6XFx0cHBwX3N5bmNfdHhtdW5nZShzdHJ1Y3Qgc3luY3BwcCAqYXAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIDQzMzpcXHR7XFxuIDQzNDpcXHRcXHRpbnQgcHJvdG87XFxuIDQzNTpcXHRcXHR1bnNpZ25lZCBjaGFyICpkYXRhO1xcbiA0MzY6XFx0XFx0aW50IGlzbGNwO1xcbiA0Mzc6XFx0XFxuIDQzODpcXHRcXHQvKiBFbnN1cmUgd2UgY2FuIHNhZmVseSBhY2Nlc3MgcHJvdG9jb2wgZmllbGQgYW5kIExDUCBjb2RlICovXFxuIDQzOTpcXHRcXHRpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAzKSlcXG4gNDQwOlxcdFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuIDQ0MTpcXHRcXG4gNDQyOlxcdFxcdGRhdGEgID0gc2tiLVxcdTAwM2VkYXRhO1xcbiA0NDM6XFx0XFx0cHJvdG8gPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7XFxuIDQ0NDpcXHRcXG4gNDQ1OlxcdFxcdC8qIExDUCBwYWNrZXRzIHdpdGggY29kZXMgYmV0d2VlbiAxIChjb25maWd1cmUtcmVxdWVzdClcXG4gNDQ2OlxcdFxcdCAqIGFuZCA3IChjb2RlLXJlamVjdCkgbXVzdCBiZSBzZW50IGFzIHRob3VnaCBubyBvcHRpb25zXFxuIDQ0NzpcXHRcXHQgKiBoYXZlIGJlZW4gbmVnb3RpYXRlZC5cXG4gNDQ4OlxcdFxcdCAqL1xcbiA0NDk6XFx0XFx0aXNsY3AgPSBwcm90byA9PSBQUFBfTENQIFxcdTAwMjZcXHUwMDI2IDEgXFx1MDAzYz0gZGF0YVsyXSBcXHUwMDI2XFx1MDAyNiBkYXRhWzJdIFxcdTAwM2M9IDc7XFxuIDQ1MDpcXHRcXG4gNDUxOlxcdFxcdC8qIGNvbXByZXNzIHByb3RvY29sIGZpZWxkIGlmIG9wdGlvbiBlbmFibGVkICovXFxuIDQ1MjpcXHRcXHRpZiAoZGF0YVswXSA9PSAwIFxcdTAwMjZcXHUwMDI2IChhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX1BST1QpIFxcdTAwMjZcXHUwMDI2ICFpc2xjcClcXG4gNDUzOlxcdFxcdFxcdHNrYl9wdWxsKHNrYiwxKTtcXG4gNDU0OlxcdFxcbiA0NTU6XFx0XFx0LyogcHJlcGVuZCBhZGRyZXNzL2NvbnRyb2wgZmllbGRzIGlmIG5lY2Vzc2FyeSAqL1xcbiA0NTY6XFx0XFx0aWYgKChhcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTQ19DT01QX0FDKSA9PSAwIHx8IGlzbGNwKSB7XFxuIDQ1NzpcXHRcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgMikpXFxuIDQ1ODpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbiA0NTk6XFx0XFxuIDQ2MDpcXHRcXHRcXHRza2JfcHVzaChza2IsMik7XFxuIDQ2MTpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbMF0gPSBQUFBfQUxMU1RBVElPTlM7XFxuIDQ2MjpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFbMV0gPSBQUFBfVUk7XFxuIDQ2MzpcXHRcXHR9XFxuIDQ2NDpcXHRcXG4gNDY1OlxcdFxcdGFwLVxcdTAwM2VsYXN0X3htaXQgPSBqaWZmaWVzO1xcbiA0NjY6XFx0XFxuIDQ2NzpcXHRcXHRpZiAoc2tiIFxcdTAwMjZcXHUwMDI2IGFwLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNDX0xPR19PVVRQS1QpXFxuIDQ2ODpcXHRcXHRcXHRwcHBfcHJpbnRfYnVmZmVyIChcXFwic2VuZCBidWZmZXJcXFwiLCBza2ItXFx1MDAzZWRhdGEsIHNrYi1cXHUwMDNlbGVuKTtcXG4gNDY5OlxcdFxcbiA0NzA6XFx0XFx0cmV0dXJuIHNrYjtcXG4gNDcxOlxcdFxcbiA0NzI6XFx0ZnJlZV9za2I6XFxuIDQ3MzpcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gNDc0OlxcdFxcdHJldHVybiBOVUxMO1xcbiA0NzU6XFx0fVxcbiA0NzY6XFx0XFxuIDQ3NzpcXHQvKlxcbiA0Nzg6XFx0ICogVHJhbnNtaXQtc2lkZSByb3V0aW5lcy5cXG4gNDc5OlxcdCAqL1xcbiA0ODA6XFx0XFxuIDQ4MTpcXHQvKlxcbiA0ODI6XFx0ICogU2VuZCBhIHBhY2tldCB0byB0aGUgcGVlciBvdmVyIGFuIHN5bmMgdHR5IGxpbmUuXFxuIDQ4MzpcXHQgKiBSZXR1cm5zIDEgaWZmIHRoZSBwYWNrZXQgd2FzIGFjY2VwdGVkLlxcbiA0ODQ6XFx0ICogSWYgdGhlIHBhY2tldCB3YXMgbm90IGFjY2VwdGVkLCB3ZSB3aWxsIGNhbGwgcHBwX291dHB1dF93YWtldXBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDY6MjUuMzgxNjc0NjE2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2OTMwMjk0NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUmVmYWN0b3JpbmcqKlxuXG5BbHJpZ2h0LCB0aGlzIHBhdGNoLi4uIGl0J3MgYSBwdXJlIHJlZmFjdG9yaW5nLCBhIHNpbXBsZSBjbGVhbnVwLiBJdCdzIHRha2luZyB0d28gaW5zdGFuY2VzIG9mIHRoYXQgYGlmIHsga2ZyZWVfc2tiKHNrYik7IHJldHVybiBOVUxMOyB9YCBwYXR0ZXJuIGFuZCByZXBsYWNpbmcgdGhlbSB3aXRoIGEgYGdvdG8gZnJlZV9za2I7YCB3aGljaCB0aGVuIGhhbmRsZXMgdGhlIGBrZnJlZV9za2Ioc2tiKTsgcmV0dXJuIE5VTEw7YCBsb2dpYy4gVG90YWxseSBlcXVpdmFsZW50IHNlbWFudGljcywgbm8gZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkxldCdzIGRvIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIHN1YnRsZS4gV2UncmUgdGFsa2luZyBhYm91dCB0aGluZ3MgbGlrZSBgcHNrYl9tYXlfcHVsbCgpYCBhbmQgYHNrYl9jb3dfaGVhZCgpYCwgZm9sbG93ZWQgYnkgdGhlIGVhcmx5IGV4aXQuIFRoZSBhZnRlciBsb29rcyBsaWtlIHRoZSBiZWZvcmUsIGp1c3Qgd2l0aCB0aGUgYGdvdG9gLiBBbmQsIHllYWgsIGBmcmVlX3NrYjpgIGlzIGRvaW5nIGV4YWN0bHkgd2hhdCBpdCB3YXMgZG9pbmcgYmVmb3JlOiBmcmVlaW5nIHRoZSBTS0IgYW5kIHJldHVybmluZyBOVUxMLiBUaGUgY29udHJvbCBmbG93IGFuZCBleGVjdXRpb24gYXJlIDEwMCUgaWRlbnRpY2FsLlxuXG5Eb2VzIHRoaXMgaW50cm9kdWNlIHNvbWUgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2s/IE5vcGUsIGRvZXNuJ3QgbG9vayBsaWtlIGl0LiBEZWZpbml0ZWx5IG5vdC4gTmVlZHNLTVNBTiBzaG91bGQgYmUgZmFsc2UuXG5cblJpZ2h0LCBsZXQncyBnZXQgdGhlIGluc3RydWN0aW9ucyBvbiB0aGlzIG5haWxlZCBkb3duLCB3aGF0IHdlIG5lZWQgdG8gcHJvZHVjZTpcblxuKiAgIFVzZSBzZXQtcmVzdWx0cyB0b29sIGZvciB0aGUgYW5hbHlzaXMgcmVzdWx0cy4gR290IGl0LlxuKiAgIEtNU0FOUmVhc29uaW5nOiBDb250cmFzdCBLTVNBTiB2cyBLQVNBTi5cbiogICBOZWVkc0tNU0FOOiBGYWxzZS5cblxuSGVyZSdzIGhvdyBJIHdvdWxkIHdyaXRlIHRoaXMgdXAgcHJvZmVzc2lvbmFsbHk6XG5cbjEuICAqKkRlc2NyaWJlIHRoZSBDaGFuZ2U6KiogVGhpcyBwYXRjaCBjb25zb2xpZGF0ZXMgcmVkdW5kYW50IGVycm9yIGV4aXQgcGF0aHMgaW4gdGhlIGBwcHBfc3luY190eG11bmdlKClgIGZ1bmN0aW9uLiBXZSdyZSB1c2luZyBhIGBnb3RvIGZyZWVfc2tiO2AgY2xlYW51cCBsYWJlbCB0byBtYWtlIHRoZSBjb2RlIGNsZWFuZXIuXG4yLiAgKipLTVNBTiBSZWxldmFuY2U6KiogVGhlIHBhdGNoIGRvZXNuJ3QgbWVzcyB3aXRoIG1lbW9yeSBhbGxvY2F0aW9ucywgZGF0YSBjb3B5aW5nLCBzdGFjay9oZWFwIGluaXRpYWxpemF0aW9uLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzIHBhdGhzLiBUaGUgbG9naWMgYW5kIGNvbnRyb2wgZmxvdyBhcmUgdW5jaGFuZ2VkLiBObyBpbXBhY3QuXG4zLiAgKipLQVNBTi9TdGFuZGFyZCBEZXRlY3RvcnM6KiogTm8gbmV3IG1lbW9yeSBzYWZldHkgaGF6YXJkcyBhcmUgaW50cm9kdWNlZC4gSWYgdGhlcmUgKndlcmUqIFNLQiBtYW5hZ2VtZW50IHByb2JsZW1zLCBsaWtlIGRvdWJsZS1mcmVlIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcywgS0FTQU4gd291bGQgY2F0Y2ggdGhlbSwgYnV0IHRoZSBjbGVhbnVwJ3Mgc3RpbGwgdGhlIHNhbWUuXG40LiAgKipDb25jbHVzaW9uOioqIFdlIGRvbid0IG5lZWQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGZvciB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQwLCJPdXRwdXRUb2tlbnMiOjE5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjA2OjQyLjMxMTk3MzFaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyBpbiBgZHJpdmVycy9uZXQvcHBwL3BwcF9zeW5jdHR5LmNgIHRoYXQgY29uc29saWRhdGVzIGR1cGxpY2F0ZSBlcnJvciBoYW5kbGluZyBwYXRocyAoYGtmcmVlX3NrYihza2IpOyByZXR1cm4gTlVMTDtgKSBpbnRvIGEgY29tbW9uIGBnb3RvIGZyZWVfc2tiO2AgZXhpdCBsYWJlbC5cXG5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMsIG1lbW9yeSBhbGxvY2F0aW9ucywgb3IgY29waWVzIHRvIHVzZXIgc3BhY2UuIEl0IGRvZXMgbm90IGFsdGVyIGhvdyBidWZmZXJzIGFyZSByZWFkLCB3cml0dGVuLCBvciBib3VuZHMtY2hlY2tlZCwgYW5kIGRvZXMgbm90IGV4cG9zZSBvciBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGxlYWtzLlxcbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogU3RhbmRhcmQgS0FTQU4gY292ZXJzIGFueSBza2IgbGlmZXRpbWUgaXNzdWVzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGRvdWJsZS1mcmVlKSwgdGhvdWdoIHRoZSBwYXRjaCBkb2VzIG5vdCBjaGFuZ2Ugc2tiIGxpZmV0aW1lIG9yIGVycm9yIGhhbmRsaW5nIHNlbWFudGljcyBhdCBhbGwuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIGluIGBkcml2ZXJzL25ldC9wcHAvcHBwX3N5bmN0dHkuY2AgdGhhdCBjb25zb2xpZGF0ZXMgZHVwbGljYXRlIGVycm9yIGhhbmRsaW5nIHBhdGhzIChga2ZyZWVfc2tiKHNrYik7IHJldHVybiBOVUxMO2ApIGludG8gYSBjb21tb24gYGdvdG8gZnJlZV9za2I7YCBleGl0IGxhYmVsLlxcblxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IGRhdGEgc3RydWN0dXJlcywgbWVtb3J5IGFsbG9jYXRpb25zLCBvciBjb3BpZXMgdG8gdXNlciBzcGFjZS4gSXQgZG9lcyBub3QgYWx0ZXIgaG93IGJ1ZmZlcnMgYXJlIHJlYWQsIHdyaXR0ZW4sIG9yIGJvdW5kcy1jaGVja2VkLCBhbmQgZG9lcyBub3QgZXhwb3NlIG9yIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbGVha3MuXFxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBTdGFuZGFyZCBLQVNBTiBjb3ZlcnMgYW55IHNrYiBsaWZldGltZSBpc3N1ZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgZG91YmxlLWZyZWUpLCB0aG91Z2ggdGhlIHBhdGNoIGRvZXMgbm90IGNoYW5nZSBza2IgbGlmZXRpbWUgb3IgZXJyb3IgaGFuZGxpbmcgc2VtYW50aWNzIGF0IGFsbC5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lp6d[1] Phase: Succeeded StartedAt: 2026-09-15 11:06:53 +0000 UTC FinishedAt: 2026-09-15 11:06:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 11:06:53 +0000 UTC FinishedAt: 2026-09-15 11:06:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2] Phase: Succeeded StartedAt: 2026-09-15 11:06:53 +0000 UTC FinishedAt: 2026-09-15 12:45:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 11:06:53 +0000 UTC FinishedAt: 2026-09-15 12:45:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 11:06:53 +0000 UTC FinishedAt: 2026-09-15 11:07:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 11:06:53 +0000 UTC FinishedAt: 2026-09-15 11:06:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5lp6d/series-workflow5lp6d-convert-artifact-1717705727/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 11:07:03 +0000 UTC FinishedAt: 2026-09-15 11:23:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 11:07:03 +0000 UTC FinishedAt: 2026-09-15 11:23:54 +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:*68ffde7b-1da0-4359-95da-dc9f5892ece1,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-workflow5lp6d/series-workflow5lp6d-convert-artifact-1717705727/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": "e1c91d61-29ad-42d9-8bfe-944a2ae0f973", "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-workflow5lp6d/series-workflow5lp6d-build-action-3688429189/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 11:07:03 +0000 UTC FinishedAt: 2026-09-15 11:23:44 +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:*68ffde7b-1da0-4359-95da-dc9f5892ece1,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-workflow5lp6d/series-workflow5lp6d-convert-artifact-1717705727/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": "e1c91d61-29ad-42d9-8bfe-944a2ae0f973", "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-workflow5lp6d/series-workflow5lp6d-build-action-3688429189/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 11:23:54 +0000 UTC FinishedAt: 2026-09-15 11:23:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 11:23:54 +0000 UTC FinishedAt: 2026-09-15 11:23:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 11:23:54 +0000 UTC FinishedAt: 2026-09-15 11:24:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 11:23:54 +0000 UTC FinishedAt: 2026-09-15 11:24:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5lp6d/series-workflow5lp6d-convert-artifact-764212750/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 11:24:16 +0000 UTC FinishedAt: 2026-09-15 11:26:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 11:24:16 +0000 UTC FinishedAt: 2026-09-15 11:26:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e1c91d61-29ad-42d9-8bfe-944a2ae0f973,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-workflow5lp6d/series-workflow5lp6d-build-action-3688429189/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-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 11:26:26 +0000 UTC FinishedAt: 2026-09-15 11:26:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 11:26:26 +0000 UTC FinishedAt: 2026-09-15 11:26:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 11:26:26 +0000 UTC FinishedAt: 2026-09-15 11:46:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 11:26:26 +0000 UTC FinishedAt: 2026-09-15 11:46:12 +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:*68ffde7b-1da0-4359-95da-dc9f5892ece1,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-workflow5lp6d/series-workflow5lp6d-convert-artifact-764212750/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": "b23e0a4d-3b40-4bf4-b91e-26d93acef546", "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-workflow5lp6d/series-workflow5lp6d-build-action-3562556322/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 11:26:26 +0000 UTC FinishedAt: 2026-09-15 11:46:02 +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:*68ffde7b-1da0-4359-95da-dc9f5892ece1,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-workflow5lp6d/series-workflow5lp6d-convert-artifact-764212750/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": "b23e0a4d-3b40-4bf4-b91e-26d93acef546", "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-workflow5lp6d/series-workflow5lp6d-build-action-3562556322/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 11:46:12 +0000 UTC FinishedAt: 2026-09-15 11:46:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 11:46:12 +0000 UTC FinishedAt: 2026-09-15 11:46:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 11:46:12 +0000 UTC FinishedAt: 2026-09-15 11:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 11:46:12 +0000 UTC FinishedAt: 2026-09-15 11:47:30 +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:*b23e0a4d-3b40-4bf4-b91e-26d93acef546,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-workflow5lp6d/series-workflow5lp6d-build-action-3562556322/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-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 11:47:40 +0000 UTC FinishedAt: 2026-09-15 12:45:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 11:47:40 +0000 UTC FinishedAt: 2026-09-15 12:45:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"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:*e1c91d61-29ad-42d9-8bfe-944a2ae0f973,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b23e0a4d-3b40-4bf4-b91e-26d93acef546,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-workflow5lp6d/series-workflow5lp6d-build-action-3688429189/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-workflow5lp6d/series-workflow5lp6d-build-action-3562556322/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 11:47:40 +0000 UTC FinishedAt: 2026-09-15 11:48:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 11:47:40 +0000 UTC FinishedAt: 2026-09-15 11:47:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"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-workflow5lp6d/series-workflow5lp6d-convert-artifact-1458408499/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-15 11:47:40 +0000 UTC FinishedAt: 2026-09-15 11:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 11:47:40 +0000 UTC FinishedAt: 2026-09-15 11:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-15 11:47:40 +0000 UTC FinishedAt: 2026-09-15 11:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 11:48:01 +0000 UTC FinishedAt: 2026-09-15 12:45:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5lp6d[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"base_commit":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","base_tree":"axboe","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ppp_sync_txmunge","ppp_sync_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8aaeb56aff2a557a88f83ae866da2c91ad247e59","config_name":"upstream-apparmor-kasan.config","enable_configs":["PPP_SYNC_TTY","PPP","TTY"],"series_id":"7cf4b200-62f3-417c-9350-8a21e72dda1d","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 11:48:01 +0000 UTC FinishedAt: 2026-09-15 12:45:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e1c91d61-29ad-42d9-8bfe-944a2ae0f973,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b23e0a4d-3b40-4bf4-b91e-26d93acef546,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-workflow5lp6d/series-workflow5lp6d-build-action-3688429189/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-workflow5lp6d/series-workflow5lp6d-build-action-3562556322/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-workflow5lp6d/series-workflow5lp6d-convert-artifact-1458408499/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,}