Name: series-workflowfpdjz Phase: Succeeded StartedAt: 2026-08-06 09:53:11 +0000 UTC FinishedAt: 2026-08-06 13:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[0] Phase: Succeeded StartedAt: 2026-08-06 09:53:11 +0000 UTC FinishedAt: 2026-08-06 09:56:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 09:53:11 +0000 UTC FinishedAt: 2026-08-06 09:56:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b0057c68df711bf6a62033c072ac61c4f9d3cbc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b0057c68df711bf6a62033c072ac61c4f9d3cbc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "7d7b846e-a10f-4bb1-b5d9-0975a01e5a78" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_mc_msfget", "ip_mc_gsfget", "ip6_mc_msfget" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA5OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tY19tc2ZnZXQmIzM0OywKICAgICYjMzQ7aXBfbWNfZ3NmZ2V0JiMzNDssCiAgICAmIzM0O2lwNl9tY19tc2ZnZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgZm9yIHRoZSBudW1iZXIgb2YgbXVsdGljYXN0IHNvdXJjZXMgKGBtYXhfbnVtc3JjYCkgaW4gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgc29ja2V0IG9wdGlvbnMgKGBJUF9NU0ZJTFRFUmAsIGBNQ0FTVF9NU0ZJTFRFUmApLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aGVuIGhhbmRsaW5nIGxhcmdlIHNvdXJjZSBsaXN0cyBwcm92aWRlZCBieSB1c2Vyc3BhY2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGJvdW5kcyBjaGVja2luZyBsb2dpYyBpcyBjb3JyZWN0IGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNjE1YTlmODU3ZGQ1NTBkMTVlZGVlZmI4ZGU4Y2JhZDA1MTY1MWI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAwOTo1NDozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuaW5kZXggYTU1ZWYzMjdlYzkzMi4uMmU0ZTE5YjkwNjQ1YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbkBAIC0xNDQ3LDYgJiM0MzsxNDQ3LDcgQEAgc3RhdGljIGludCBpcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIHtcbiBcdGNvbnN0IGludCBzaXplMCA9IG9mZnNldG9mKHN0cnVjdCBncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpO1xuIFx0c3RydWN0IGdyb3VwX2ZpbHRlciBnc2Y7XG4mIzQzO1x0dW5zaWduZWQgaW50IG1heF9udW1zcmM7XG4gXHRpbnQgbnVtLCBnc2Zfc2l6ZTtcbiBcdGludCBlcnI7XG4gXG5AQCAtMTQ1NSw2ICYjNDM7MTQ1NiwxMCBAQCBzdGF0aWMgaW50IGlwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2Z3NmLCBvcHR2YWwsIHNpemUwKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4mIzQzO1x0LyogTWF4aW11bSBudW1iZXIgb2Ygc291cmNlcyB0aGF0IHdvdWxkIGZpdCBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciovXG4mIzQzO1x0bWF4X251bXNyYyA9IChsZW4gLSBzaXplMCkgLyBzaXplb2YoZ3NmLmdmX3NsaXN0X2ZsZXhbMF0pO1xuJiM0MztcdGdzZi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdzZi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xuJiM0MztcbiBcdG51bSA9IGdzZi5nZl9udW1zcmM7XG4gXHRlcnIgPSBpcF9tY19nc2ZnZXQoc2ssIFx1MDAyNmdzZiwgb3B0dmFsLFxuIFx0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCBncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpKTtcbkBAIC0xNDc0LDYgJiM0MzsxNDc5LDcgQEAgc3RhdGljIGludCBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbiB7XG4gXHRjb25zdCBpbnQgc2l6ZTAgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7XG4gXHRzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciBnZjMyO1xuJiM0MztcdHVuc2lnbmVkIGludCBtYXhfbnVtc3JjO1xuIFx0c3RydWN0IGdyb3VwX2ZpbHRlciBnZjtcbiBcdGludCBudW07XG4gXHRpbnQgZXJyO1xuQEAgLTE0ODMsNiAmIzQzOzE0ODksOSBAQCBzdGF0aWMgaW50IGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmdmMzIsIG9wdHZhbCwgc2l6ZTApKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiYjNDM7XHRtYXhfbnVtc3JjID0gKGxlbiAtIHNpemUwKSAvIHNpemVvZihnZjMyLmdmX3NsaXN0X2ZsZXhbMF0pO1xuJiM0MztcdGdmMzIuZ2ZfbnVtc3JjID0gbWluX3QodTMyLCBnZjMyLmdmX251bXNyYywgbWF4X251bXNyYyk7XG4mIzQzO1xuIFx0Z2YuZ2ZfaW50ZXJmYWNlID0gZ2YzMi5nZl9pbnRlcmZhY2U7XG4gXHRnZi5nZl9mbW9kZSA9IGdmMzIuZ2ZfZm1vZGU7XG4gXHRudW0gPSBnZi5nZl9udW1zcmMgPSBnZjMyLmdmX251bXNyYztcbkBAIC0xNzA1LDYgJiM0MzsxNzE0LDcgQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIElQX01TRklMVEVSOlxuIFx0e1xuJiM0MztcdFx0dW5zaWduZWQgaW50IG1heF9udW1zcmM7XG4gXHRcdHN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7XG4gXG4gXHRcdGlmIChsZW4gXHUwMDNjIElQX01TRklMVEVSX1NJWkUoMCkpIHtcbkBAIC0xNzE1LDYgJiM0MzsxNzI1LDEyIEBAIGludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4mIzQzO1x0XHQvKiBEbyBub3Qgd3JpdGUgbW9yZSBzb3VyY2VzIHRoYW4gdGhlIGNhbGxlciBzYWlkIG9wdHZhbCBjYW5cbiYjNDM7XHRcdCAqIGhvbGQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG1heF9udW1zcmMgPSAobGVuIC0gSVBfTVNGSUxURVJfU0laRSgwKSkgL1xuJiM0MztcdFx0XHQgICAgIHNpemVvZihtc2YuaW1zZl9zbGlzdF9mbGV4WzBdKTtcbiYjNDM7XHRcdG1zZi5pbXNmX251bXNyYyA9IG1pbl90KHUzMiwgbXNmLmltc2ZfbnVtc3JjLCBtYXhfbnVtc3JjKTtcbiBcdFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcdTAwMjZtc2YsIG9wdHZhbCwgb3B0bGVuKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5pbmRleCBiNGM5Nzc0MzRjMmUwLi4yYzNmYmRlN2NiMDU4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbkBAIC0xMDEyLDYgJiM0MzsxMDEyLDcgQEAgc3RhdGljIGludCBpcHY2X2dldF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4ge1xuIFx0Y29uc3QgaW50IHNpemUwID0gb2Zmc2V0b2Yoc3RydWN0IGdyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7XG4gXHRzdHJ1Y3QgZ3JvdXBfZmlsdGVyIGdzZjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbWF4X251bXNyYztcbiBcdGludCBudW07XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTEwMjEsNiAmIzQzOzEwMjIsMTEgQEAgc3RhdGljIGludCBpcHY2X2dldF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0aWYgKGdzZi5nZl9ncm91cC5zc19mYW1pbHkgIT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiYjNDM7XG4mIzQzO1x0LyogTnVtYmVyIG9mIHNvdXJjZXMgdGhhdCB3b3VsZCBmaXQgaW4gdGhlIHVzZXJzcGFjZSBidWZmZXIgKi9cbiYjNDM7XHRtYXhfbnVtc3JjID0gKGxlbiAtIHNpemUwKSAvIHNpemVvZihnc2YuZ2Zfc2xpc3RfZmxleFswXSk7XG4mIzQzO1x0Z3NmLmdmX251bXNyYyA9IG1pbl90KHUzMiwgZ3NmLmdmX251bXNyYywgbWF4X251bXNyYyk7XG4mIzQzO1xuIFx0bnVtID0gZ3NmLmdmX251bXNyYztcbiBcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcbiBcdGVyciA9IGlwNl9tY19tc2ZnZXQoc2ssIFx1MDAyNmdzZiwgb3B0dmFsLCBzaXplMCk7XG5AQCAtMTA0MSw2ICYjNDM7MTA0Nyw3IEBAIHN0YXRpYyBpbnQgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbiB7XG4gXHRjb25zdCBpbnQgc2l6ZTAgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7XG4gXHRzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciBnZjMyO1xuJiM0MztcdHVuc2lnbmVkIGludCBtYXhfbnVtc3JjO1xuIFx0c3RydWN0IGdyb3VwX2ZpbHRlciBnZjtcbiBcdGludCBlcnI7XG4gXHRpbnQgbnVtO1xuQEAgLTEwNTAsNiAmIzQzOzEwNTcsMTAgQEAgc3RhdGljIGludCBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFxuIFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmdmMzIsIG9wdHZhbCwgc2l6ZTApKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0bWF4X251bXNyYyA9IChsZW4gLSBzaXplMCkgLyBzaXplb2YoZ2YzMi5nZl9zbGlzdF9mbGV4WzBdKTtcbiYjNDM7XHRnZjMyLmdmX251bXNyYyA9IG1pbl90KHUzMiwgZ2YzMi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xuJiM0MztcbiBcdGdmLmdmX2ludGVyZmFjZSA9IGdmMzIuZ2ZfaW50ZXJmYWNlO1xuIFx0Z2YuZ2ZfZm1vZGUgPSBnZjMyLmdmX2Ztb2RlO1xuIFx0bnVtID0gZ2YuZ2ZfbnVtc3JjID0gZ2YzMi5nZl9udW1zcmM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tY19tc2ZnZXQmIzM0OywKICAgICYjMzQ7aXBfbWNfZ3NmZ2V0JiMzNDssCiAgICAmIzM0O2lwNl9tY19tc2ZnZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgZm9yIHRoZSBudW1iZXIgb2YgbXVsdGljYXN0IHNvdXJjZXMgKGBtYXhfbnVtc3JjYCkgaW4gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgc29ja2V0IG9wdGlvbnMgKGBJUF9NU0ZJTFRFUmAsIGBNQ0FTVF9NU0ZJTFRFUmApLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aGVuIGhhbmRsaW5nIGxhcmdlIHNvdXJjZSBsaXN0cyBwcm92aWRlZCBieSB1c2Vyc3BhY2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGJvdW5kcyBjaGVja2luZyBsb2dpYyBpcyBjb3JyZWN0IGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNjE1YTlmODU3ZGQ1NTBkMTVlZGVlZmI4ZGU4Y2JhZDA1MTY1MWI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAwOTo1NDozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCmluZGV4IGE1NWVmMzI3ZWM5MzIuLjJlNGUxOWI5MDY0NWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwpAQCAtMTQ0Nyw2ICYjNDM7MTQ0Nyw3IEBAIHN0YXRpYyBpbnQgaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwKIHsKIAljb25zdCBpbnQgc2l6ZTAgPSBvZmZzZXRvZihzdHJ1Y3QgZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KTsKIAlzdHJ1Y3QgZ3JvdXBfZmlsdGVyIGdzZjsKJiM0MzsJdW5zaWduZWQgaW50IG1heF9udW1zcmM7CiAJaW50IG51bSwgZ3NmX3NpemU7CiAJaW50IGVycjsKIApAQCAtMTQ1NSw2ICYjNDM7MTQ1NiwxMCBAQCBzdGF0aWMgaW50IGlwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsCiAJaWYgKGNvcHlfZnJvbV9zb2NrcHRyKCZhbXA7Z3NmLCBvcHR2YWwsIHNpemUwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKJiM0MzsJLyogTWF4aW11bSBudW1iZXIgb2Ygc291cmNlcyB0aGF0IHdvdWxkIGZpdCBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciovCiYjNDM7CW1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdzZi5nZl9zbGlzdF9mbGV4WzBdKTsKJiM0MzsJZ3NmLmdmX251bXNyYyA9IG1pbl90KHUzMiwgZ3NmLmdmX251bXNyYywgbWF4X251bXNyYyk7CiYjNDM7CiAJbnVtID0gZ3NmLmdmX251bXNyYzsKIAllcnIgPSBpcF9tY19nc2ZnZXQoc2ssICZhbXA7Z3NmLCBvcHR2YWwsCiAJCQkgICBvZmZzZXRvZihzdHJ1Y3QgZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KSk7CkBAIC0xNDc0LDYgJiM0MzsxNDc5LDcgQEAgc3RhdGljIGludCBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwKIHsKIAljb25zdCBpbnQgc2l6ZTAgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7CiAJc3RydWN0IGNvbXBhdF9ncm91cF9maWx0ZXIgZ2YzMjsKJiM0MzsJdW5zaWduZWQgaW50IG1heF9udW1zcmM7CiAJc3RydWN0IGdyb3VwX2ZpbHRlciBnZjsKIAlpbnQgbnVtOwogCWludCBlcnI7CkBAIC0xNDgzLDYgJiM0MzsxNDg5LDkgQEAgc3RhdGljIGludCBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwKIAlpZiAoY29weV9mcm9tX3NvY2twdHIoJmFtcDtnZjMyLCBvcHR2YWwsIHNpemUwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKJiM0MzsJbWF4X251bXNyYyA9IChsZW4gLSBzaXplMCkgLyBzaXplb2YoZ2YzMi5nZl9zbGlzdF9mbGV4WzBdKTsKJiM0MzsJZ2YzMi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdmMzIuZ2ZfbnVtc3JjLCBtYXhfbnVtc3JjKTsKJiM0MzsKIAlnZi5nZl9pbnRlcmZhY2UgPSBnZjMyLmdmX2ludGVyZmFjZTsKIAlnZi5nZl9mbW9kZSA9IGdmMzIuZ2ZfZm1vZGU7CiAJbnVtID0gZ2YuZ2ZfbnVtc3JjID0gZ2YzMi5nZl9udW1zcmM7CkBAIC0xNzA1LDYgJiM0MzsxNzE0LDcgQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCXN3aXRjaCAob3B0bmFtZSkgewogCWNhc2UgSVBfTVNGSUxURVI6CiAJewomIzQzOwkJdW5zaWduZWQgaW50IG1heF9udW1zcmM7CiAJCXN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7CiAKIAkJaWYgKGxlbiAmbHQ7IElQX01TRklMVEVSX1NJWkUoMCkpIHsKQEAgLTE3MTUsNiAmIzQzOzE3MjUsMTIgQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0OwogCQl9CiYjNDM7CQkvKiBEbyBub3Qgd3JpdGUgbW9yZSBzb3VyY2VzIHRoYW4gdGhlIGNhbGxlciBzYWlkIG9wdHZhbCBjYW4KJiM0MzsJCSAqIGhvbGQuCiYjNDM7CQkgKi8KJiM0MzsJCW1heF9udW1zcmMgPSAobGVuIC0gSVBfTVNGSUxURVJfU0laRSgwKSkgLwomIzQzOwkJCSAgICAgc2l6ZW9mKG1zZi5pbXNmX3NsaXN0X2ZsZXhbMF0pOwomIzQzOwkJbXNmLmltc2ZfbnVtc3JjID0gbWluX3QodTMyLCBtc2YuaW1zZl9udW1zcmMsIG1heF9udW1zcmMpOwogCQllcnIgPSBpcF9tY19tc2ZnZXQoc2ssICZhbXA7bXNmLCBvcHR2YWwsIG9wdGxlbik7CiAJCWdvdG8gb3V0OwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCBiNGM5Nzc0MzRjMmUwLi4yYzNmYmRlN2NiMDU4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC0xMDEyLDYgJiM0MzsxMDEyLDcgQEAgc3RhdGljIGludCBpcHY2X2dldF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsCiB7CiAJY29uc3QgaW50IHNpemUwID0gb2Zmc2V0b2Yoc3RydWN0IGdyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7CiAJc3RydWN0IGdyb3VwX2ZpbHRlciBnc2Y7CiYjNDM7CXVuc2lnbmVkIGludCBtYXhfbnVtc3JjOwogCWludCBudW07CiAJaW50IGVycjsKIApAQCAtMTAyMSw2ICYjNDM7MTAyMiwxMSBAQCBzdGF0aWMgaW50IGlwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJaWYgKGdzZi5nZl9ncm91cC5zc19mYW1pbHkgIT0gQUZfSU5FVDYpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKJiM0MzsKJiM0MzsJLyogTnVtYmVyIG9mIHNvdXJjZXMgdGhhdCB3b3VsZCBmaXQgaW4gdGhlIHVzZXJzcGFjZSBidWZmZXIgKi8KJiM0MzsJbWF4X251bXNyYyA9IChsZW4gLSBzaXplMCkgLyBzaXplb2YoZ3NmLmdmX3NsaXN0X2ZsZXhbMF0pOwomIzQzOwlnc2YuZ2ZfbnVtc3JjID0gbWluX3QodTMyLCBnc2YuZ2ZfbnVtc3JjLCBtYXhfbnVtc3JjKTsKJiM0MzsKIAludW0gPSBnc2YuZ2ZfbnVtc3JjOwogCXNvY2tvcHRfbG9ja19zb2NrKHNrKTsKIAllcnIgPSBpcDZfbWNfbXNmZ2V0KHNrLCAmYW1wO2dzZiwgb3B0dmFsLCBzaXplMCk7CkBAIC0xMDQxLDYgJiM0MzsxMDQ3LDcgQEAgc3RhdGljIGludCBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLAogewogCWNvbnN0IGludCBzaXplMCA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KTsKIAlzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciBnZjMyOwomIzQzOwl1bnNpZ25lZCBpbnQgbWF4X251bXNyYzsKIAlzdHJ1Y3QgZ3JvdXBfZmlsdGVyIGdmOwogCWludCBlcnI7CiAJaW50IG51bTsKQEAgLTEwNTAsNiAmIzQzOzEwNTcsMTAgQEAgc3RhdGljIGludCBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLAogCiAJaWYgKGNvcHlfZnJvbV9zb2NrcHRyKCZhbXA7Z2YzMiwgb3B0dmFsLCBzaXplMCkpCiAJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwltYXhfbnVtc3JjID0gKGxlbiAtIHNpemUwKSAvIHNpemVvZihnZjMyLmdmX3NsaXN0X2ZsZXhbMF0pOwomIzQzOwlnZjMyLmdmX251bXNyYyA9IG1pbl90KHUzMiwgZ2YzMi5nZl9udW1zcmMsIG1heF9udW1zcmMpOwomIzQzOwogCWdmLmdmX2ludGVyZmFjZSA9IGdmMzIuZ2ZfaW50ZXJmYWNlOwogCWdmLmdmX2Ztb2RlID0gZ2YzMi5nZl9mbW9kZTsKIAludW0gPSBnZi5nZl9udW1zcmMgPSBnZjMyLmdmX251bXNyYzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU2OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JraW5nIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AgYW5kIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOyB0aGV5JiMzOTtyZSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIGZvciB0aGUgYG1heF9udW1zcmNgIHZhbHVlIGluIG11bHRpY2FzdCBzb2NrZXQgb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25zIGFyZSBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYCwgYGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXJgLCBgZG9faXBfZ2V0c29ja29wdGAgKHNwZWNpZmljYWxseSB0aGUgYElQX01TRklMVEVSYCBjYXNlKSwgYGlwdjZfZ2V0X21zZmlsdGVyYCwgYW5kIGBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXJgLgoKR2l2ZW4gdGhpcyBpbnZvbHZlcyBjb3JlIG5ldHdvcmtpbmcsIGFuZCBzb2NrZXQgb3B0aW9ucyBhdCB0aGF0LCBteSBndXQgdGVsbHMgbWUgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgcG90ZW50aWFsLiBUaGUgY2hhbmdlcyBhcmUgZnVuZGFtZW50YWwgdG8gaG93IHRoZXNlIHN5c3RlbXMgaGFuZGxlIG11bHRpY2FzdCBmaWx0ZXJpbmcuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoZXNlIGZlYXR1cmVzIGFuZCB0aGVuIHBpbnBvaW50IHRoZSAmIzM0O2ZvY3VzIHN5bWJvbHMmIzM0OyDigJMgZXNzZW50aWFsbHksIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBJIHNob3VsZCBiZSB0YXJnZXRpbmcgd2l0aCBmdXp6aW5nLiBTbywgbGV0JiMzOTtzIGxpc3QgdGhvc2UgZm9jdXMgc3ltYm9scyBhZ2FpbiB0byBiZSBzdXJlOiBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYCwgYGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXJgLCBgZG9faXBfZ2V0c29ja29wdGAsIGBpcHY2X2dldF9tc2ZpbHRlcmAsIGFuZCBgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyYC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIHN0YXRpYywgZXhwb3J0ZWQsIGFuZCBhcmUgdGhleSBpbmxpbmVkPyBUaGF04oCZcyBjcml0aWNhbCBmb3Igc3ltYm9sIHZpc2liaWxpdHkgZm9yIGZ1enppbmcuIE9rYXksIGxldCYjMzk7cyBzZWUuIGBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgIGlzIGBzdGF0aWMgaW50YC4gYGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXJgIGlzIGFsc28gYHN0YXRpYyBpbnRgLiBgZG9faXBfZ2V0c29ja29wdGAgaXMganVzdCBgaW50YC4gYGlwdjZfZ2V0X21zZmlsdGVyYCBpcyBgc3RhdGljIGludGAuIEFuZCBgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyYCBpcyBgc3RhdGljIGludGAuCgpIb2xkIG9uLiBUaGUgcHJvbXB0IEkmIzM5O20gd29ya2luZyBmcm9tIHNwZWNpZmllcyBhIHByZWZlcmVuY2UuIEl0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIHNlbnNlLCBhcyB0aGUgbm9uLXN0YXRpYyBvbmVzIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gU28sIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgIGlzIGFjdHVhbGx5IGlubGluZWQgb3Igbm90LCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMuIEl0IGxvb2tzIGxpa2UgaXQgaXMgY2FsbGVkIGZyb20gd2l0aGluIGBkb19pcF9nZXRzb2Nrb3B0YCwgd2hpY2ggaXMgZW5jb3VyYWdpbmcsIGJ1dCBJIHN0aWxsIG5lZWQgdG8gbWFrZSBzdXJlLiBMZXQgbWUgZ3JlcCBmb3IgYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9nZXRfbWNhc3RfbXNmaWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmM9MTQzNT1zdGF0aWMgYm9vbCBnZXRzb2Nrb3B0X25lZWRzX3J0bmwoaW50IG9wdG5hbWUpXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNDQ0LVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNDQ1OnN0YXRpYyBpbnQgaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQ0Ni1cdFx0XHRcdCBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQ3Ni1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTQ3NzpzdGF0aWMgaW50IGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNDc4LVx0XHRcdFx0XHRzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9MTUxNj1pbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzM4LVx0XHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTczOTpcdFx0XHRlcnIgPSBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbixcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTc0MC1cdFx0XHRcdFx0XHRcdCAgIGxlbik7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3NDEtXHRcdGVsc2Vcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTc0MjpcdFx0XHRlcnIgPSBpcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc2ssIG9wdHZhbCwgb3B0bGVuLCBsZW4pO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzQzLVx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDM0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGN1cnJlbnQgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZXNlIHBvaW50czoKCioqRXhhbWluaW5nIFNvY2tldCBPcHRpb24gUmV0cmlldmFsIGZvciBJUHY0IGFuZCBJUHY2KioKCk9rYXksIHNvIGBkb19pcF9nZXRzb2Nrb3B0YCBpcyBjbGVhcmx5IHRoZSBnYXRla2VlcGVyIGZvciBJUHY0IHNvY2tldCBvcHRpb24gcmV0cmlldmFsLCB0aGUgcG9pbnQgd2hlcmUgdGhlIGtlcm5lbCBoYW5kbGVzIHRob3NlIHJlcXVlc3RzLiBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiDigJMgYW5kIGl04oCZcyBhIGNydWNpYWwgb25lIGZyb20gYSBuZXR3b3JraW5nIHBlcnNwZWN0aXZlIOKAkyBpczogd2hhdCYjMzk7cyB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbiwgdGhlIGVudHJ5IHBvaW50IGZvciBJUHY2IHNvY2tldCBvcHRpb25zPyBJcyBpdCBhIHNpbWlsYXIgZnVuY3Rpb24gd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lLCBvciBpcyB0aGUgYXJjaGl0ZWN0dXJlIGNvbXBsZXRlbHkgZGlmZmVyZW50LCB3aXRoIGEgc2VwYXJhdGUgYnJhbmNoIG9mIGNvZGUgaGFuZGxpbmcgdGhlIElQdjYgcHJvdG9jb2xzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHRoaXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIHNvY2tldCBvcHRpb24gcmV0cmlldmFsIHByb2Nlc3MgYWNyb3NzIGRpZmZlcmVudCBJUCB2ZXJzaW9ucy4gS25vd2luZyB0aGlzIGRpZmZlcmVuY2UgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGtlcm5lbCYjMzk7cyBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9nZXRfbXNmaWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTk3Nj1zdGF0aWMgaW50IGlwdjZfZ2V0c29ja29wdF9zdGlja3koc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTAwOS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMDEwOnN0YXRpYyBpbnQgaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMTEtXHRcdFx0ICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDQ0LVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjEwNDU6c3RhdGljIGludCBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwNDYtXHRcdFx0XHQgICAgc29ja3B0cl90IG9wdGxlbiwgaW50IGxlbilcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MTA4OT1pbnQgZG9faXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTExMS1cdFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTExMjpcdFx0XHRyZXR1cm4gY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbiwgbGVuKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMTEzOlx0XHRyZXR1cm4gaXB2Nl9nZXRfbXNmaWx0ZXIoc2ssIG9wdHZhbCwgb3B0bGVuLCBsZW4pO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTExMTQtXHRjYXNlIElQVjZfMjI5MlBLVE9QVElPTlM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcwMgoJCQkJCQkJb3V0cHV0OiA2MQoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgSVB2NiBTb2NrZXQgT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgZ2V0c29ja29wdGAgZnVuY3Rpb25hbGl0eSBmb3IgSVB2NiwgYW5kIHRoZSBgZG9faXB2Nl9nZXRzb2Nrb3B0YCBmdW5jdGlvbiBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQuCgpUbyBlc3RhYmxpc2ggY29udGV4dCBhbmQgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgdGhlIElQdjQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGxpdmVzIGluIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCB1bmRlciBgZG9faXBfZ2V0c29ja29wdGAuIE5vdywgdG8gYmUgcGVyZmVjdGx5IGNsZWFyLCBgZG9faXB2Nl9nZXRzb2Nrb3B0YCBpcyBpbiBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYC4KCkl0JiMzOTtzIHNlY29uZCBuYXR1cmUgZm9yIG1lIHRvIHRoaW5rIGFib3V0IHRoZSByZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byB2ZXJpZnkgdGhhdCBJUHY0IGlzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19JTkVUYCBhbmQgdGhhdCBJUHY2IGlzLCBhcyBleHBlY3RlZCwgZ2F0ZWQgYnkgYENPTkZJR19JUFY2YC4KCkp1c3QgdG8gY292ZXIgYWxsIGJhc2VzLCBsZXQmIzM5O3MgYWxzbyBnbGFuY2UgYXQgdGhlIG1ha2VmaWxlcyBmb3IgYm90aCBgbmV0L2lwdjRgIGFuZCBgbmV0L2lwdjZgIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIGluIHRoZSBidWlsZCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NvY2tnbHVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTctXHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZTo4Olx0ICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIGluZXRfaGFzaHRhYmxlcy5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS05LVx0ICAgICBpbmV0X3RpbWV3YWl0X3NvY2subyBpbmV0X2Nvbm5lY3Rpb25fc29jay5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9zb2NrZ2x1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlPTg9aXB2Ni15IDo9XHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxubmV0L2lwdjYvTWFrZWZpbGUtOS1cdFx0YWRkcmxhYmVsLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlOjEwOlx0XHRyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyBcXFxubmV0L2lwdjYvTWFrZWZpbGUtMTEtXHRcdHJhdy5vIGljbXAubyBtY2FzdC5vIHJlYXNzZW1ibHkubyB0Y3BfaXB2Ni5vIHBpbmcubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDExCgkJCQkJCQlvdXRwdXQ6IDYxCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24gb2YgTmV0d29yayBTb2NrZXQgR2x1ZSBNb2R1bGVzKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZXNlIHNvY2tldCBnbHVlIG1vZHVsZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXQgc2VlbXMgYGlwX3NvY2tnbHVlLm9gIGlzIGJlaW5nIGJ1aWx0IG5vIG1hdHRlciB3aGF0LCBhcyBsb25nIGFzIGBDT05GSUdfSU5FVGAgaXMgZW5hYmxlZCDigJMgdGhhdCYjMzk7cyBleHBlY3RlZCBzaW5jZSBJUHY0IGlzIGZ1bmRhbWVudGFsLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGlwdjZfc29ja2dsdWUub2AgaXMgb25seSBicm91Z2h0IGludG8gdGhlIGJ1aWxkIGlmIGBDT05GSUdfSVBWNmAgaXMgc2V0IHRvICYjMzk7eSYjMzk7LiBUaGF0JiMzOTtzIHRoZSBiZWhhdmlvciBJJiMzOTtkIGFudGljaXBhdGUuIEp1c3QgdG8gbWFrZSBkb3VibHkgc3VyZSwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGluIGJvdGggYG5ldC9pcHY0L2AgYW5kIGBuZXQvaXB2Ni9gIHRvIGNvbmZpcm0gdGhlc2UgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBjb25kaXRpb25zIGRpcmVjdGx5LCBidXQgYmFzZWQgb24gZXhwZXJpZW5jZSwgdGhpcyBpcyB0aGUgcGF0dGVybiBJJiMzOTtkIGV4cGVjdC4gSSBoYXZlIHRoZSBmZWVsaW5nIHRoaXMgaXMgbW9yZSBvZiBhIHNhbml0eSBjaGVjayB0aGFuIGFueXRoaW5nIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMzgtXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNjgtXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXG5uZXQvaXB2NC9LY29uZmlnLTM4My1cdGJvb2wgXCYjMzQ7SVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXG5uZXQvaXB2NC9LY29uZmlnOjM5NDpjb25maWcgSU5FVF9JUENPTVBcbm5ldC9pcHY0L0tjb25maWctMzk1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDAzLVxubmV0L2lwdjQvS2NvbmZpZzo0MDQ6Y29uZmlnIElORVRfVEFCTEVfUEVSVFVSQl9PUkRFUlxubmV0L2lwdjQvS2NvbmZpZy00MDUtXHRpbnQgXCYjMzQ7SU5FVDogU291cmNlIHBvcnQgcGVydHVyYmF0aW9uIHRhYmxlIHNpemUgKGFzIHBvd2VyIG9mIDIpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9pcHY0L0tjb25maWctNDEzLVxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctNDE1LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQxOC1cbm5ldC9pcHY0L0tjb25maWc6NDE5OmNvbmZpZyBJTkVUX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY0L0tjb25maWctNDIyLVxubmV0L2lwdjQvS2NvbmZpZzo0MjM6Y29uZmlnIElORVRfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00MjQtXHR0cmlzdGF0ZSBcJiMzNDtJTkVUOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQzNC1cbm5ldC9pcHY0L0tjb25maWc6NDM1OmNvbmZpZyBJTkVUX1RDUF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MzgtXG5uZXQvaXB2NC9LY29uZmlnOjQzOTpjb25maWcgSU5FVF9VRFBfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00NDAtXHR0cmlzdGF0ZSBcJiMzNDtVRFA6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDQ2LVxubmV0L2lwdjQvS2NvbmZpZzo0NDc6Y29uZmlnIElORVRfUkFXX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDQ4LVx0dHJpc3RhdGUgXCYjMzQ7UkFXOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQ1NC1cbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvS2NvbmZpZy00NTYtXHRib29sIFwmIzM0O0lORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWctNS1cbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcbm5ldC9pcHY2L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7VGhlIElQdjYgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcbm5ldC9pcHY2L0tjb25maWctMjAtXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxubmV0L2lwdjYvS2NvbmZpZzozOTpjb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxubmV0L2lwdjYvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7SVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTExLVxubmV0L2lwdjYvS2NvbmZpZzoxMTI6Y29uZmlnIElQVjZfTUlQNlxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBNb2JpbGl0eVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTE5LVxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTQ5LVxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcbm5ldC9pcHY2L0tjb25maWctMTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cbm5ldC9pcHY2L0tjb25maWc6MTc3OmNvbmZpZyBJUFY2X1NJVF82UkRcbm5ldC9pcHY2L0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtJUHY2OiBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZSRClcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE5NS1cbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cdGJvb2xcbm5ldC9pcHY2L0tjb25maWctMTk4LVxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjA5LVxubmV0L2lwdjYvS2NvbmZpZzoyMTA6Y29uZmlnIElQVjZfR1JFXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEdSRSB0dW5uZWxcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIyNy1cbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxubmV0L2lwdjYvS2NvbmZpZy0yMjktXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjMxLVxubmV0L2lwdjYvS2NvbmZpZzoyMzI6Y29uZmlnIElQVjZfRk9VX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjM2LVxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTIzOC1cdGJvb2wgXCYjMzQ7SVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cbm5ldC9pcHY2L0tjb25maWc6MjQzOmNvbmZpZyBJUFY2X1NVQlRSRUVTXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cdGJvb2wgXCYjMzQ7SVB2Njogc291cmNlIGFkZHJlc3MgYmFzZWQgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjU2LVxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjY2LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cbm5ldC9pcHY2L0tjb25maWc6Mjc5OmNvbmZpZyBJUFY2X1BJTVNNX1YyXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cdGJvb2wgXCYjMzQ7SVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yODUtXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvS2NvbmZpZy0zMDEtXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cdGRlZl9ib29sIHlcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0zMTgtXHRib29sIFwmIzM0O0lQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzI3LVxubmV0L2lwdjYvS2NvbmZpZzozMjg6Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzI5LVx0Ym9vbCBcJiMzNDtJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA5OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5ldHdvcmsgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbmV0d29yayBjb25maWd1cmF0aW9ucyBoZXJlLiBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgIHNlZW0gbGlrZSB0aGUga2V5IHN0YXJ0aW5nIHBvaW50cy4gUmlnaHQsIEkgcmVtZW1iZXIgdGhhdCBgQ09ORklHX0lORVRgIGlzIHByZXR0eSBtdWNoIGFsd2F5cyBlbmFibGVkIGZvciBiYXNpYyBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkg4oCTIGl0JiMzOTtzIHRoZSBmb3VuZGF0aW9uLiBCdXQgaW5jbHVkaW5nIGBDT05GSUdfSVBWNmAgaXMgZGVmaW5pdGVseSBhIHNvbGlkIHByYWN0aWNlLiBOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbXVsdGljYXN0IOKAkyBgSVBfTVNGSUxURVJgIGpvZ2dlZCBteSBtZW1vcnkuIElzIHRoZXJlIGEgbW9yZSBleHBsaWNpdCBtdWx0aWNhc3QgY29uZmlndXJhdGlvbiBvcHRpb24gSSBzaG91bGQgYmUgYXdhcmUgb2Y/IExldCBtZSBkaXZlIGludG8gYG5ldC9pcHY0L0tjb25maWdgIGFuZCBzZWUgaWYgYElQX01VTFRJQ0FTVGAgaXMgd2hhdCBJJiMzOTttIGFmdGVyLiBJJiMzOTtsbCBiZXQgaXQmIzM5O3MgaW4gdGhlcmUgc29tZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9NVUxUSUNBU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWctNC0jXG5uZXQvaXB2NC9LY29uZmlnOjU6Y29uZmlnIElQX01VTFRJQ0FTVFxubmV0L2lwdjQvS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZz0yMDc9Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1Rcbm5ldC9pcHY0L0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtJUDogYnJvYWRjYXN0IEdSRSBvdmVyIElQXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjIwOTpcdGRlcGVuZHMgb24gSVBfTVVMVElDQVNUIFx1MDAyNlx1MDAyNiBORVRfSVBHUkVcbm5ldC9pcHY0L0tjb25maWctMjEwLVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MjIwPWNvbmZpZyBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjIxLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjIyOlx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L0tjb25maWctMjIzLVx0c2VsZWN0IElQX01ST1VURV9DT01NT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU5OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIE11bHRpY2FzdCBGaWx0ZXJpbmcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXRzIGluY2x1c2lvbiBpcyBoYW5kbGVkLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoYXQgYW55dGhpbmcgcmVsYXRlZCB0byBtdWx0aWNhc3QgZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsIGlzIGdvaW5nIHRvIGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIFNvLCBteSBndXQgaW5zdGluY3Qgc2F5cyBpdCYjMzk7cyBsaWtlbHkgZ3VhcmRlZCBieSBgQ09ORklHX0lQX01VTFRJQ0FTVGAuIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGNvbmZpZ3VyYXRpb24gZmxhZyByZWxhdGVkIHRvIElQdjQgbXVsdGljYXN0IHN1cHBvcnQsIGFuZCBpdCB3b3VsZCBtYWtlIHNlbnNlIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGJlIHBhcnQgb2YgdGhhdCBsYXJnZXIgZW5hYmxpbmcgYmxvY2suIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcywgb3IgbWF5YmUgdXNlIGEgY29kZSBzZWFyY2ggdG9vbCB0byBiZSBzdXJlLCBidXQgdGhhdCYjMzk7cyBteSB3b3JraW5nIGh5cG90aGVzaXMuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiBtYW5hZ2luZyBtdWx0aWNhc3QgbWVtYmVyc2hpcCBzbyBJIHdvdWxkIGJlIHN1cnByaXNlZCBpZiBpdCB3YXNuJiMzOTt0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JUF9NVUxUSUNBU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg2MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqKkhhbmcgb24gYSBzZWNvbmQsIGlzIHRoaXMgYGlwX21jX21zZmdldGAgZnVuY3Rpb24gYWN0dWFsbHkgY29uZGl0aW9uYWwgYmFzZWQgb24gd2hldGhlciBJUCBNdWx0aWNhc3QgaXMgZW5hYmxlZD8qKiBJdCBmZWVscyBsaWtlIGl0IG1pZ2h0IGJlLCBidXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBiZWZvcmUgSSBkaWcgdG9vIGRlZXAuCgpUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byBjaGVjayB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBuZXQvaXB2NC9pZ21wLmNgIG9yIHNvbWV0aGluZyBhbmFsb2dvdXMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIG11bHRpY2FzdC1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIHJlc2lkZS4gSSYjMzk7bGwgc2VhcmNoIHRoYXQgZmlsZSBmb3IgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgZ3VhcmQgdGhlIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcG90ZW50aWFsIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGlmIG15IGFuYWx5c2lzIG5lZWRzIHRvIGFjY291bnQgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4gVGhpcyBhbHNvIGhlbHBzIG1lIGRldGVybWluZSBpZiB0aGUgY29kZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9tY19tc2ZnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jPTI1Njk9aW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIGludCBpZmluZGV4KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yNjU4LX1cbm5ldC9pcHY0L2lnbXAuYzoyNjU5OmludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixcbm5ldC9pcHY0L2lnbXAuYy0yNjYwLVx0XHQgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MTY9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTczMy1cdFx0bXNmLmltc2ZfbnVtc3JjID0gbWluX3QodTMyLCBtc2YuaW1zZl9udW1zcmMsIG1heF9udW1zcmMpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNzM0Olx0XHRlcnIgPSBpcF9tY19tc2ZnZXQoc2ssIFx1MDAyNm1zZiwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzM1LVx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MDEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYGlnbXAuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCB3aGVuIEkgc2VlIGBpZ21wLmNgIGlzOiAqaXMgdGhpcyBjb2RlIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHk/KiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBHaXZlbiB0aGUgbmF0dXJlIG9mIElHTVAgYW5kIGl0cyBwb3RlbnRpYWwgZm9yIGJlaW5nIHNlbGVjdGl2ZWx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgc3lzdGVtIG9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgYSB2ZXJ5IGxpa2VseSBjYW5kaWRhdGUuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGVyZSBhcmUgYCNpZmRlZmAsIGAjaWZuZGVmYCwgb3Igc2ltaWxhciBkaXJlY3RpdmVzIGltcGFjdGluZyB0aGUgaW5jbHVzaW9uIGFuZCBjb21waWxhdGlvbiBvZiB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUuIFRoYXQmIzM5O2xsIGluZm9ybSBhIGxvdCBvZiBteSBmdXJ0aGVyIGFuYWx5c2lzLiBJZiBpdCAqaXMqIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHksIHdoYXQgYXJlIHRoZSBkZWNpZGluZyBmYWN0b3JzPyBXaGF0IG1hY3JvcyBhcmUgYXQgcGxheT8gV2hhdCBpbXBhY3QgZG9lcyB0aGF0IGhhdmUgb24gaXRzIGJlaGF2aW9yIGFuZCBkZXBlbmRlbmNpZXM/IFRoYXQmIzM5O3Mgd2hlcmUgbXkgZm9jdXMgbmVlZHMgdG8gZ28gbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWdtcC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xMy1cdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTQ6XHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3OTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTb2NrZXQgT3B0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoZSBgaWdtcC5jYCBmaWxlIGNvbXBpbGVzIHJlZ2FyZGxlc3Mgb2YgYENPTkZJR19JUF9NVUxUSUNBU1RgIGJlaW5nIHNldCDigJMgdGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIEJ1dCB3aGF0IGFib3V0IElQdjY/IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBkZXBlbmRlbmN5IGlzIGhhbmRsZWQgY29ycmVjdGx5LCBwYXJ0aWN1bGFybHkgZm9yIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBhdCB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIHRoZSBgZG9faXBfZ2V0c29ja29wdGAgYW5kIGBkb19pcHY2X2dldHNvY2tvcHRgIGZ1bmN0aW9ucywgYmVjYXVzZSB0aGVzZSBhcmUgdGhlIHBsYWNlcyB3aGVyZSBzb2NrZXQgb3B0aW9ucyBhcmUgaGFuZGxlZC4gVGhlIHBhdGNoIGl0c2VsZiBzZWVtcyB0byB0b3VjaDoKCiogICBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYAoqICAgYGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXJgCiogICBgZG9faXBfZ2V0c29ja29wdGAKKiAgIGBpcHY2X2dldF9tc2ZpbHRlcmAKKiAgIGBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXJgCgpTbywgbXkgZm9jdXMgc3ltYm9scyBzaG91bGQgYmUgYGRvX2lwX2dldHNvY2tvcHRgIGFuZCBgZG9faXB2Nl9nZXRzb2Nrb3B0YC4KCldhaXQsIG5vdyB0aGF0IEkmIzM5O20gbG9va2luZyBhdCBpdCwgYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAgaXMgc3RhdGljIGJ1dCBjYWxsZWQgZnJvbSBgZG9faXBfZ2V0c29ja29wdGAuIElzIGBkb19pcF9nZXRzb2Nrb3B0YCB0b28gYmlnPyBNYXliZSBmb2N1c2luZyBvbiBgaXBfbWNfbXNmZ2V0YCB3b3VsZCBiZSBiZXR0ZXI/IE9yIHBlcmhhcHMgSSBzaG91bGQganVzdCBzdGljayB3aXRoIGxpc3RpbmcgYGRvX2lwX2dldHNvY2tvcHRgIGFuZCBgZG9faXB2Nl9nZXRzb2Nrb3B0YC4gQWgsIHJpZ2h0LCB0aGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyEKCmBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgIGlzIHN0YXRpYywgc28gSSBzaG91bGQgc2VlIGlmIGl0JiMzOTtzIGlubGluZWQuIEkgc2hvdWxkIGNoZWNrIGl0cyBzaXplLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NDU6XHRzdGF0aWMgaW50IGlwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4xNDQ2Olx0XHRcdFx0XHQgc29ja3B0cl90IG9wdGxlbiwgaW50IGxlbilcbjE0NDc6XHR7XG4xNDQ4Olx0XHRjb25zdCBpbnQgc2l6ZTAgPSBvZmZzZXRvZihzdHJ1Y3QgZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KTtcbjE0NDk6XHRcdHN0cnVjdCBncm91cF9maWx0ZXIgZ3NmO1xuMTQ1MDpcdFx0dW5zaWduZWQgaW50IG1heF9udW1zcmM7XG4xNDUxOlx0XHRpbnQgbnVtLCBnc2Zfc2l6ZTtcbjE0NTI6XHRcdGludCBlcnI7XG4xNDUzOlx0XG4xNDU0Olx0XHRpZiAobGVuIFx1MDAzYyBzaXplMClcbjE0NTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDU2Olx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2Z3NmLCBvcHR2YWwsIHNpemUwKSlcbjE0NTc6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xNDU4Olx0XG4xNDU5Olx0XHQvKiBNYXhpbXVtIG51bWJlciBvZiBzb3VyY2VzIHRoYXQgd291bGQgZml0IGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyKi9cbjE0NjA6XHRcdG1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdzZi5nZl9zbGlzdF9mbGV4WzBdKTtcbjE0NjE6XHRcdGdzZi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdzZi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xuMTQ2MjpcdFxuMTQ2MzpcdFx0bnVtID0gZ3NmLmdmX251bXNyYztcbjE0NjQ6XHRcdGVyciA9IGlwX21jX2dzZmdldChzaywgXHUwMDI2Z3NmLCBvcHR2YWwsXG4xNDY1Olx0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGdyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCkpO1xuMTQ2NjpcdFx0aWYgKGVycilcbjE0Njc6XHRcdFx0cmV0dXJuIGVycjtcbjE0Njg6XHRcdGlmIChnc2YuZ2ZfbnVtc3JjIFx1MDAzYyBudW0pXG4xNDY5Olx0XHRcdG51bSA9IGdzZi5nZl9udW1zcmM7XG4xNDcwOlx0XHRnc2Zfc2l6ZSA9IEdST1VQX0ZJTFRFUl9TSVpFKG51bSk7XG4xNDcxOlx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2Z3NmX3NpemUsIHNpemVvZihpbnQpKSB8fFxuMTQ3MjpcdFx0ICAgIGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIFx1MDAyNmdzZiwgc2l6ZTApKVxuMTQ3MzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjE0NzQ6XHRcdHJldHVybiAwO1xuMTQ3NTpcdH1cbjE0NzY6XHRcbjE0Nzc6XHRzdGF0aWMgaW50IGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuMTQ3ODpcdFx0XHRcdFx0XHRzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbGVuKVxuMTQ3OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYSBTb2NrZXQgT3B0aW9uIEZ1bmN0aW9uIENhbGwqKgoKSG1tLCB0aGlzIGZ1bmN0aW9uIEkmIzM5O20gbG9va2luZyBhdOKApiBpdCYjMzk7cyBwcmV0dHkgc21hbGwuIEF0IGZpcnN0IGdsYW5jZSwgaXQgKm1pZ2h0KiBiZSBhIGNhbmRpZGF0ZSBmb3IgaW5saW5pbmcg4oCTIG9wdGltaXppbmcgZm9yIHNwZWVkIGJ5IGVsaW1pbmF0aW5nIHRoZSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLiBCdXQsIGxldCBtZSBwYXVzZSBhbmQgdGhpbmsgdGhpcyB0aHJvdWdoIGEgYml0IG1vcmUgYmVmb3JlIEkgZGVjaWRlLiBUaGF0JiMzOTtzIGFzc3VtaW5nIGl0JiMzOTtzIHRydWx5IGEgc21hbGwgZnVuY3Rpb24uIEkmIzM5O3ZlIHNlZW4gc29tZSB0cmlja3N5IGNvZGUuIEFoLCB3YWl0IGEgbWludXRlLCB0aGUgY2FsbCBpcyBgZG9faXBfZ2V0c29ja29wdGAuIE5vdyBJIHJlbWVtYmVyIHRoYXQgYmVpbmcgdXNlZCBhIGxvdCwgYW5kIGl0JiMzOTtzIGFsbW9zdCBhbHdheXMgaHVnZSEgQmVzdCB0byBjaGVjayB0aGF0IGZ1bmN0aW9uIGZpcnN0IGJlZm9yZSBJIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGlubGluaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTE2Olx0aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuMTUxNzpcdFx0XHQgICAgIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXG4xNTE4Olx0e1xuMTUxOTpcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuMTUyMDpcdFx0Ym9vbCBuZWVkc19ydG5sID0gZ2V0c29ja29wdF9uZWVkc19ydG5sKG9wdG5hbWUpO1xuMTUyMTpcdFx0aW50IHZhbCwgZXJyID0gMDtcbjE1MjI6XHRcdGludCBsZW47XG4xNTIzOlx0XG4xNTI0Olx0XHRpZiAobGV2ZWwgIT0gU09MX0lQKVxuMTUyNTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xNTI2Olx0XG4xNTI3Olx0XHRpZiAoaXBfbXJvdXRlX29wdChvcHRuYW1lKSlcbjE1Mjg6XHRcdFx0cmV0dXJuIGlwX21yb3V0ZV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4xNTI5Olx0XG4xNTMwOlx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbjE1MzE6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xNTMyOlx0XHRpZiAobGVuIFx1MDAzYyAwKVxuMTUzMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1MzQ6XHRcbjE1MzU6XHRcdC8qIEhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHJlYWQgd2l0aG91dCBsb2NraW5nIHRoZSBzb2NrZXQuICovXG4xNTM2Olx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbjE1Mzc6XHRcdGNhc2UgSVBfUEtUSU5GTzpcbjE1Mzg6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChQS1RJTkZPLCBzayk7XG4xNTM5Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1NDA6XHRcdGNhc2UgSVBfUkVDVlRUTDpcbjE1NDE6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChUVEwsIHNrKTtcbjE1NDI6XHRcdFx0Z290byBjb3B5dmFsO1xuMTU0MzpcdFx0Y2FzZSBJUF9SRUNWVE9TOlxuMTU0NDpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFRPUywgc2spO1xuMTU0NTpcdFx0XHRnb3RvIGNvcHl2YWw7XG4xNTQ2Olx0XHRjYXNlIElQX1JFQ1ZPUFRTOlxuMTU0NzpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFJFQ1ZPUFRTLCBzayk7XG4xNTQ4Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1NDk6XHRcdGNhc2UgSVBfUkVUT1BUUzpcbjE1NTA6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChSRVRPUFRTLCBzayk7XG4xNTUxOlx0XHRcdGdvdG8gY29weXZhbDtcbjE1NTI6XHRcdGNhc2UgSVBfUEFTU1NFQzpcbjE1NTM6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChQQVNTU0VDLCBzayk7XG4xNTU0Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1NTU6XHRcdGNhc2UgSVBfUkVDVk9SSUdEU1RBRERSOlxuMTU1NjpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KE9SSUdEU1RBRERSLCBzayk7XG4xNTU3Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1NTg6XHRcdGNhc2UgSVBfQ0hFQ0tTVU06XG4xNTU5Olx0XHRcdHZhbCA9IGluZXRfdGVzdF9iaXQoQ0hFQ0tTVU0sIHNrKTtcbjE1NjA6XHRcdFx0Z290byBjb3B5dmFsO1xuMTU2MTpcdFx0Y2FzZSBJUF9SRUNWRlJBR1NJWkU6XG4xNTYyOlx0XHRcdHZhbCA9IGluZXRfdGVzdF9iaXQoUkVDVkZSQUdTSVpFLCBzayk7XG4xNTYzOlx0XHRcdGdvdG8gY29weXZhbDtcbjE1NjQ6XHRcdGNhc2UgSVBfUkVDVkVSUjpcbjE1NjU6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChSRUNWRVJSLCBzayk7XG4xNTY2Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1Njc6XHRcdGNhc2UgSVBfUkVDVkVSUl9SRkM0ODg0OlxuMTU2ODpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFJFQ1ZFUlJfUkZDNDg4NCwgc2spO1xuMTU2OTpcdFx0XHRnb3RvIGNvcHl2YWw7XG4xNTcwOlx0XHRjYXNlIElQX0ZSRUVCSU5EOlxuMTU3MTpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzayk7XG4xNTcyOlx0XHRcdGdvdG8gY29weXZhbDtcbjE1NzM6XHRcdGNhc2UgSVBfSERSSU5DTDpcbjE1NzQ6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChIRFJJTkNMLCBzayk7XG4xNTc1Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1NzY6XHRcdGNhc2UgSVBfTVVMVElDQVNUX0xPT1A6XG4xNTc3Olx0XHRcdHZhbCA9IGluZXRfdGVzdF9iaXQoTUNfTE9PUCwgc2spO1xuMTU3ODpcdFx0XHRnb3RvIGNvcHl2YWw7XG4xNTc5Olx0XHRjYXNlIElQX01VTFRJQ0FTVF9BTEw6XG4xNTgwOlx0XHRcdHZhbCA9IGluZXRfdGVzdF9iaXQoTUNfQUxMLCBzayk7XG4xNTgxOlx0XHRcdGdvdG8gY29weXZhbDtcbjE1ODI6XHRcdGNhc2UgSVBfVFJBTlNQQVJFTlQ6XG4xNTgzOlx0XHRcdHZhbCA9IGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKTtcbjE1ODQ6XHRcdFx0Z290byBjb3B5dmFsO1xuMTU4NTpcdFx0Y2FzZSBJUF9OT0RFRlJBRzpcbjE1ODY6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChOT0RFRlJBRywgc2spO1xuMTU4NzpcdFx0XHRnb3RvIGNvcHl2YWw7XG4xNTg4Olx0XHRjYXNlIElQX0JJTkRfQUREUkVTU19OT19QT1JUOlxuMTU4OTpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KEJJTkRfQUREUkVTU19OT19QT1JULCBzayk7XG4xNTkwOlx0XHRcdGdvdG8gY29weXZhbDtcbjE1OTE6XHRcdGNhc2UgSVBfUk9VVEVSX0FMRVJUOlxuMTU5MjpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFJUQUxFUlQsIHNrKTtcbjE1OTM6XHRcdFx0Z290byBjb3B5dmFsO1xuMTU5NDpcdFx0Y2FzZSBJUF9UVEw6XG4xNTk1Olx0XHRcdHZhbCA9IFJFQURfT05DRShpbmV0LVx1MDAzZXVjX3R0bCk7XG4xNTk2Olx0XHRcdGlmICh2YWwgXHUwMDNjIDApXG4xNTk3Olx0XHRcdFx0dmFsID0gUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF9pcF9kZWZhdWx0X3R0bCk7XG4xNTk4Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1OTk6XHRcdGNhc2UgSVBfTUlOVFRMOlxuMTYwMDpcdFx0XHR2YWwgPSBSRUFEX09OQ0UoaW5ldC1cdTAwM2VtaW5fdHRsKTtcbjE2MDE6XHRcdFx0Z290byBjb3B5dmFsO1xuMTYwMjpcdFx0Y2FzZSBJUF9NVUxUSUNBU1RfVFRMOlxuMTYwMzpcdFx0XHR2YWwgPSBSRUFEX09OQ0UoaW5ldC1cdTAwM2VtY190dGwpO1xuMTYwNDpcdFx0XHRnb3RvIGNvcHl2YWw7XG4xNjA1Olx0XHRjYXNlIElQX01UVV9ESVNDT1ZFUjpcbjE2MDY6XHRcdFx0dmFsID0gUkVBRF9PTkNFKGluZXQtXHUwMDNlcG10dWRpc2MpO1xuMTYwNzpcdFx0XHRnb3RvIGNvcHl2YWw7XG4xNjA4Olx0XHRjYXNlIElQX1RPUzpcbjE2MDk6XHRcdFx0dmFsID0gUkVBRF9PTkNFKGluZXQtXHUwMDNldG9zKTtcbjE2MTA6XHRcdFx0Z290byBjb3B5dmFsO1xuMTYxMTpcdFx0Y2FzZSBJUF9PUFRJT05TOlxuMTYxMjpcdFx0e1xuMTYxMzpcdFx0XHR1bnNpZ25lZCBjaGFyIG9wdGJ1ZltzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpJiM0Mzs0MF07XG4xNjE0Olx0XHRcdHN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSAoc3RydWN0IGlwX29wdGlvbnMgKilvcHRidWY7XG4xNjE1Olx0XHRcdHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaW5ldF9vcHQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDQ1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBgZ2V0c29ja29wdGAgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIGBkb19pcF9nZXRzb2Nrb3B0YC4gVGhhdCYjMzk7cyBhIGJlYXN0IG9mIGEgZnVuY3Rpb24sIGlzbiYjMzk7dCBpdD8gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgZnJvbnQgZG9vciBmb3IgYGdldHNvY2tvcHRgIGNhbGxzIHJlbGF0ZWQgdG8gSVAuIEl0JiMzOTtzIGluZXZpdGFibHkgZ29pbmcgdG8gYmUgY29tcGxleC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG11bHRpY2FzdCBnZXRzIGNvbmZpZ3VyZWQuIEhtbSwgSSB3b25kZXIgYWJvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggbXVsdGljYXN0IHNvdXJjZSBmaWx0ZXJpbmcuIFRoYXQmIzM5O3MgYSBjb3JlIGNvbmNlcm4gZm9yIHBlcmZvcm1hbmNlLCBhbmQgaXQmIzM5O3Mgd2hlcmUgYSBsb3Qgb2YgY29uZmlndXJhdGlvbiBxdWVzdGlvbnMgYXJpc2UuCgpXYWl0IGEgc2Vjb25kLCB0aGVyZSYjMzk7cyBgaXBfbWNfbXNmZ2V0YCBjYWxsZWQgd2l0aGluIGBkb19pcF9nZXRzb2Nrb3B0YC4gVGhhdCYjMzk7cyBsaWtlbHkgdGhlIGtleS4gSXQgbG9va3MgbGlrZSBgaXBfbWNfbXNmZ2V0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSByZXRyaWV2ZXMgbXVsdGljYXN0IHNvdXJjZSBmaWx0ZXIgaW5mb3JtYXRpb24uIFRoYXQmIzM5O3Mgd2hhdCBJIGFtIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3MgdHJhY2UgdGhhdCBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGp1bXAgb3ZlciB0byBgbmV0L2lwdjQvaWdtcC5jYCDigJMgdGhhdCYjMzk7cyB3aGVyZSBJR01QIChhbmQgcmVsYXRlZCBtdWx0aWNhc3Qgb3BlcmF0aW9ucykgaXMgaGFuZGxlZCBpbiB0aGUgSVB2NCBzdGFjaywgcmlnaHQ/IE9rYXksIHRpbWUgdG8gc2VlIHdoYXQgYGlwX21jX21zZmdldGAgaXMgZG9pbmcuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhvc2Ugc29ja2V0IG9wdGlvbnMgYXJlIGhhbmRsZWQgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgaW50ZXJlc3RpbmcsIGFuZCBob3BlZnVsbHksIG5vdCB0b28gZW50YW5nbGVkIGluIGxvdy1sZXZlbCBkYXRhIHN0cnVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY1OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjU5Olx0aW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLFxuMjY2MDpcdFx0XHQgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbjI2NjE6XHR7XG4yNjYyOlx0XHRpbnQgZXJyLCBsZW4sIGNvdW50LCBjb3B5Y291bnQsIG1zZl9zaXplO1xuMjY2MzpcdFx0c3RydWN0IGlwX21yZXFuXHRpbXI7XG4yNjY0Olx0XHRfX2JlMzIgYWRkciA9IG1zZi1cdTAwM2VpbXNmX211bHRpYWRkcjtcbjI2NjU6XHRcdHN0cnVjdCBpcF9tY19zb2NrbGlzdCAqcG1jO1xuMjY2NjpcdFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xuMjY2NzpcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuMjY2ODpcdFx0c3RydWN0IGlwX3NmX3NvY2tsaXN0ICpwc2w7XG4yNjY5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4yNjcwOlx0XG4yNjcxOlx0XHRBU1NFUlRfUlROTCgpO1xuMjY3MjpcdFxuMjY3MzpcdFx0aWYgKCFpcHY0X2lzX211bHRpY2FzdChhZGRyKSlcbjI2NzQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNjc1Olx0XG4yNjc2Olx0XHRpbXIuaW1yX211bHRpYWRkci5zX2FkZHIgPSBtc2YtXHUwMDNlaW1zZl9tdWx0aWFkZHI7XG4yNjc3Olx0XHRpbXIuaW1yX2FkZHJlc3Muc19hZGRyID0gbXNmLVx1MDAzZWltc2ZfaW50ZXJmYWNlO1xuMjY3ODpcdFx0aW1yLmltcl9pZmluZGV4ID0gMDtcbjI2Nzk6XHRcdGluX2RldiA9IGlwX21jX2ZpbmRfZGV2KG5ldCwgXHUwMDI2aW1yKTtcbjI2ODA6XHRcbjI2ODE6XHRcdGlmICghaW5fZGV2KSB7XG4yNjgyOlx0XHRcdGVyciA9IC1FTk9ERVY7XG4yNjgzOlx0XHRcdGdvdG8gZG9uZTtcbjI2ODQ6XHRcdH1cbjI2ODU6XHRcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xuMjY4NjpcdFxuMjY4NzpcdFx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5ldCwgcG1jKSB7XG4yNjg4Olx0XHRcdGlmIChwbWMtXHUwMDNlbXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIgPT0gbXNmLVx1MDAzZWltc2ZfbXVsdGlhZGRyIFx1MDAyNlx1MDAyNlxuMjY4OTpcdFx0XHQgICAgcG1jLVx1MDAzZW11bHRpLmltcl9pZmluZGV4ID09IGltci5pbXJfaWZpbmRleClcbjI2OTA6XHRcdFx0XHRicmVhaztcbjI2OTE6XHRcdH1cbjI2OTI6XHRcdGlmICghcG1jKVx0XHQvKiBtdXN0IGhhdmUgYSBwcmlvciBqb2luICovXG4yNjkzOlx0XHRcdGdvdG8gZG9uZTtcbjI2OTQ6XHRcdG1zZi1cdTAwM2VpbXNmX2Ztb2RlID0gcG1jLVx1MDAzZXNmbW9kZTtcbjI2OTU6XHRcdHBzbCA9IHJ0bmxfZGVyZWZlcmVuY2UocG1jLVx1MDAzZXNmbGlzdCk7XG4yNjk2Olx0XHRpZiAoIXBzbCkge1xuMjY5NzpcdFx0XHRjb3VudCA9IDA7XG4yNjk4Olx0XHR9IGVsc2Uge1xuMjY5OTpcdFx0XHRjb3VudCA9IHBzbC1cdTAwM2VzbF9jb3VudDtcbjI3MDA6XHRcdH1cbjI3MDE6XHRcdGNvcHljb3VudCA9IGNvdW50IFx1MDAzYyBtc2YtXHUwMDNlaW1zZl9udW1zcmMgPyBjb3VudCA6IG1zZi1cdTAwM2VpbXNmX251bXNyYztcbjI3MDI6XHRcdGxlbiA9IGZsZXhfYXJyYXlfc2l6ZShwc2wsIHNsX2FkZHIsIGNvcHljb3VudCk7XG4yNzAzOlx0XHRtc2YtXHUwMDNlaW1zZl9udW1zcmMgPSBjb3VudDtcbjI3MDQ6XHRcdG1zZl9zaXplID0gSVBfTVNGSUxURVJfU0laRShjb3B5Y291bnQpO1xuMjcwNTpcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNm1zZl9zaXplLCBzaXplb2YoaW50KSkgfHxcbjI3MDY6XHRcdCAgICBjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBtc2YsIElQX01TRklMVEVSX1NJWkUoMCkpKSB7XG4yNzA3Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjcwODpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMyNwoJCQkJCQkJb3V0cHV0OiA2NQoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIHRvIGNsYXJpZnkgaXMgdGhhdCBgaXBfbWNfbXNmZ2V0YCBpc24mIzM5O3Qgc3RhdGljLCBpdCYjMzk7cyBleHBvcnRlZC4gR290IGl0LiBOb3csIHRoZSBwYXRjaCBmb2N1c2VzIG9uIG1vZGlmeWluZyBzb21lIGtleSBmdW5jdGlvbnM6IGBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgIGFuZCBgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcmAsIGJvdGggb2Ygd2hpY2ggY2FsbCBgaXBfbWNfZ3NmZ2V0YC4gQWxzbywgYGRvX2lwX2dldHNvY2tvcHRgIGNhbGxzIGBpcF9tY19tc2ZnZXRgLiBJdCBzZWVtcyBsaWtlIHRob3NlIGFyZSB0aGUgSVB2NC1yZWxhdGVkIGFyZWFzIHRvIGZvY3VzIG9uLgoKRm9yIElQdjYsIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgaXB2Nl9nZXRfbXNmaWx0ZXJgIGFuZCBgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyYCwgd2hpY2ggaW4gdHVybiBjYWxsIGBpcDZfbWNfbXNmZ2V0YC4gQ2xlYXJseSwgdGhlIHBhdGNoIGlzIGFib3V0IG11bHRpY2FzdCBmaWx0ZXJpbmcuCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IGBpcF9tY19nc2ZnZXRgIGFuZCBgaXA2X21jX21zZmdldGAgYXJlIGltcGxlbWVudGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zIHRvIGFzc2VzcyB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgZm9jdXMgb24gdGhvc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9tY19nc2ZnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jPTI2NTk9aW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yNzE4LVxubmV0L2lwdjQvaWdtcC5jOjI3MTk6aW50IGlwX21jX2dzZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBncm91cF9maWx0ZXIgKmdzZixcbm5ldC9pcHY0L2lnbXAuYy0yNzIwLVx0XHQgc29ja3B0cl90IG9wdHZhbCwgc2l6ZV90IHNzX29mZnNldClcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE0NDU9c3RhdGljIGludCBpcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQ2My1cdG51bSA9IGdzZi5nZl9udW1zcmM7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE0NjQ6XHRlcnIgPSBpcF9tY19nc2ZnZXQoc2ssIFx1MDAyNmdzZiwgb3B0dmFsLFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNDY1LVx0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCBncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpKTtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE0Nzc9c3RhdGljIGludCBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0OTktXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE1MDA6XHRlcnIgPSBpcF9tY19nc2ZnZXQoc2ssIFx1MDAyNmdmLCBvcHR2YWwsXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1MDEtXHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9ncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X21jX21zZmdldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MTAxMD1zdGF0aWMgaW50IGlwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTAzMS1cdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMDMyOlx0ZXJyID0gaXA2X21jX21zZmdldChzaywgXHUwMDI2Z3NmLCBvcHR2YWwsIHNpemUwKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDMzLVx0aWYgKCFlcnIpIHtcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MTA0NT1zdGF0aWMgaW50IGNvbXBhdF9pcHY2X2dldF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwNzItXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTA3MzpcdGVyciA9IGlwNl9tY19tc2ZnZXQoc2ssIFx1MDAyNmdmLCBvcHR2YWwsIHNpemUwKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDc0LVx0c29ja29wdF9yZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC9pcHY2L21jYXN0LmM9NDg3PWludCBpcDZfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsXG4tLVxubmV0L2lwdjYvbWNhc3QuYy01ODQtXG5uZXQvaXB2Ni9tY2FzdC5jOjU4NTppbnQgaXA2X21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBncm91cF9maWx0ZXIgKmdzZixcbm5ldC9pcHY2L21jYXN0LmMtNTg2LVx0XHQgIHNvY2twdHJfdCBvcHR2YWwsIHNpemVfdCBzc19vZmZzZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjM1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBGdXp6aW5nIFRhcmdldHMgZm9yIE11bHRpY2FzdCBGaWx0ZXIgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBiZXN0IGZ1bmN0aW9ucyB0byB0YXJnZXQgd2l0aCBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGdvIGFmdGVyIGBkb19pcF9nZXRzb2Nrb3B0YCBhbmQgYGRvX2lwdjZfZ2V0c29ja29wdGAgYmVjYXVzZSB0aGV5IGFyZSB0aGUgZXhwb3J0ZWQgZW50cnkgcG9pbnRzIGFuZCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvZGUgY2FsbGVkIGZyb20gdGhlbS4gSG93ZXZlciwgdGhleSBhcmUgcHJldHR5IGxhcmdlIGZ1bmN0aW9ucywgd2hpY2ggY291bGQgc2tldyB0aGUgZnV6emluZyBkaXN0cmlidXRpb24gYW5kIG1hc2sgdGhlIHNwZWNpZmljIHZ1bG5lcmFiaWxpdHkuCgpUaGUgcmVhbCB3b3JrIGlzIGJlaW5nIGRvbmUgYnkgYGlwX21jX21zZmdldGAsIGBpcF9tY19nc2ZnZXRgLCBhbmQgYGlwNl9tY19tc2ZnZXRgLiBUaGV5IGFyZSBub24tc3RhdGljIGFuZCBub3QgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIGFuZCBhcmUgY2FsbGVkIGltbWVkaWF0ZWx5ICphZnRlciogdGhlIG1vZGlmaWVkIGNvZGUuIExpc3RpbmcgdGhlc2UgYXMgZm9jdXMgc3ltYm9scyBpcyB0aGUgb3B0aW1hbCBhcHByb2FjaCwgYmVjYXVzZSB0aGUgZnV6emVyIHdpbGwgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBtb2RpZmllZCBjaGVja3MgYW5kIGJvdW5kcy1jaGVja2luZyBsb2dpYyAqYmVmb3JlKiByZWFjaGluZyB0aGVzZSBmdW5jdGlvbnMuCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBuYW1lczogYGlwX21jX21zZmdldGAsIGBpcF9tY19nc2ZnZXRgLCBhbmQgYGlwNl9tY19tc2ZnZXRgLiBDb25maXJtZWQuCgpBbmQgdGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYSBmZXcgb3RoZXJzOiBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYCwgYGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXJgLCBgaXB2Nl9nZXRfbXNmaWx0ZXJgLCBhbmQgYGNvbXBhdF9pcHY2X2dldF9tc2ZpbHRlcmAuIFNpbmNlIGBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgIGFuZCBgaXB2Nl9nZXRfbXNmaWx0ZXJgIGFyZSBzdGF0aWMsIHRoZXkgbWlnaHQgYmUgaW5saW5lZC4gRXZlbiB0aG91Z2ggdGhleSBhcmUgbm90IHRpbnkgKGFib3V0IDMwIGxpbmVzKSwgaXQgaXMgYmVzdCB0byBiZSBzYWZlIGFuZCB1c2UgYGlwX21jX21zZmdldGAsIGBpcF9tY19nc2ZnZXRgLCBhbmQgYGlwNl9tY19tc2ZnZXRgLgoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBpcF9tY19tc2ZnZXRgIGlzIGluIGBuZXQvaXB2NC9pZ21wLmNgIGFuZCBpcyBjYWxsZWQgZnJvbSBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AsIGBpcF9tY19nc2ZnZXRgIGlzIGluIGBuZXQvaXB2NC9pZ21wLmNgIGFuZCBpcyBjYWxsZWQgZnJvbSBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AgYW5kIGBpcDZfbWNfbXNmZ2V0YCBpcyBpbiBgbmV0L2lwdjYvbWNhc3QuY2AgYW5kIGlzIGNhbGxlZCBmcm9tIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLgoKQXMgZm9yIGNvbmZpZ3MsIGBDT05GSUdfSU5FVGAgaXMgYWx3YXlzIG9uIGZvciBJUHY0LCBgQ09ORklHX0lQVjZgIGZvciBJUHY2LCBhbmQgYENPTkZJR19DT01QQVRgIGZvciB0aGUgY29tcGF0IGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTVBBVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTQ3ND1jb25maWcgT0xEX1NJR0FDVElPTlxuLS1cbmFyY2gvS2NvbmZpZy0xNDgxLVxuYXJjaC9LY29uZmlnOjE0ODI6Y29uZmlnIENPTVBBVF9PTERfU0lHQUNUSU9OXG5hcmNoL0tjb25maWctMTQ4My1cdGJvb2xcbmFyY2gvS2NvbmZpZy0xNDg0LVxuYXJjaC9LY29uZmlnOjE0ODU6Y29uZmlnIENPTVBBVF8zMkJJVF9USU1FXG5hcmNoL0tjb25maWctMTQ4Ni1cdGJvb2wgXCYjMzQ7UHJvdmlkZSBzeXN0ZW0gY2FsbHMgZm9yIDMyLWJpdCB0aW1lX3RcJiMzNDtcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MTc0Nj1jb25maWcgQVJNNjRfVEFHR0VEX0FERFJfQUJJXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE3NTQtXG5hcmNoL2FybTY0L0tjb25maWc6MTc1NTptZW51Y29uZmlnIENPTVBBVFxuYXJjaC9hcm02NC9LY29uZmlnLTE3NTYtXHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgRUwwXCYjMzQ7XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnPTE3NzU9Y29uZmlnIEtVU0VSX0hFTFBFUlNcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTgwMS1cbmFyY2gvYXJtNjQvS2NvbmZpZzoxODAyOmNvbmZpZyBDT01QQVRfVkRTT1xuYXJjaC9hcm02NC9LY29uZmlnLTE4MDMtXHRib29sIFwmIzM0O0VuYWJsZSB2RFNPIGZvciAzMi1iaXQgYXBwbGljYXRpb25zXCYjMzQ7XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnPTE4MTU9Y29uZmlnIFRIVU1CMl9DT01QQVRfVkRTT1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xODIyLVxuYXJjaC9hcm02NC9LY29uZmlnOjE4MjM6Y29uZmlnIENPTVBBVF9BTElHTk1FTlRfRklYVVBTXG5hcmNoL2FybTY0L0tjb25maWctMTgyNC1cdGJvb2wgXCYjMzQ7Rml4IHVwIG1pc2FsaWduZWQgbXVsdGktd29yZCBsb2FkcyBhbmQgc3RvcmVzIGluIHVzZXIgc3BhY2VcJiMzNDtcbi0tXG5hcmNoL21pcHMvS2NvbmZpZz0zMDc4PWNvbmZpZyBNSVBTMzJfQ09NUEFUXG4tLVxuYXJjaC9taXBzL0tjb25maWctMzA4MC1cbmFyY2gvbWlwcy9LY29uZmlnOjMwODE6Y29uZmlnIENPTVBBVFxuYXJjaC9taXBzL0tjb25maWctMzA4Mi1cdGJvb2xcbi0tXG5hcmNoL3BhcmlzYy9LY29uZmlnPTM1OD1zb3VyY2UgXCYjMzQ7a2VybmVsL0tjb25maWcuaHpcJiMzNDtcbmFyY2gvcGFyaXNjL0tjb25maWctMzU5LVxuYXJjaC9wYXJpc2MvS2NvbmZpZzozNjA6Y29uZmlnIENPTVBBVFxuYXJjaC9wYXJpc2MvS2NvbmZpZy0zNjEtXHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgYmluYXJpZXNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0zNDg9Y29uZmlnIFBBTklDX1RJTUVPVVRcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0zNTEtXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzozNTI6Y29uZmlnIENPTVBBVFxuYXJjaC9wb3dlcnBjL0tjb25maWctMzUzLVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgMzJiaXQgYmluYXJpZXNcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTExMj1jb25maWcgQVJDSF9IQVNfR0VORVJJQ19DUkFTSEtFUk5FTF9SRVNFUlZBVElPTlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTE0LVxuYXJjaC9yaXNjdi9LY29uZmlnOjExMTU6Y29uZmlnIENPTVBBVFxuYXJjaC9yaXNjdi9LY29uZmlnLTExMTYtXHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgVS1tb2RlXCYjMzQ7XG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnPTQ0Nz1lbmRtZW51XG5hcmNoL3NwYXJjL0tjb25maWctNDQ4LVxuYXJjaC9zcGFyYy9LY29uZmlnOjQ0OTpjb25maWcgQ09NUEFUXG5hcmNoL3NwYXJjL0tjb25maWctNDUwLVx0Ym9vbFxuLS1cbmFyY2gveDg2L0tjb25maWc9MjE2Mj1jb25maWcgSE9UUExVR19DUFVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTIxNjUtXG5hcmNoL3g4Ni9LY29uZmlnOjIxNjY6Y29uZmlnIENPTVBBVF9WRFNPXG5hcmNoL3g4Ni9LY29uZmlnLTIxNjctXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC94ODYvS2NvbmZpZz0zMTAwPWNvbmZpZyBYODZfWDMyX0FCSVxuLS1cbmFyY2gveDg2L0tjb25maWctMzExMy1cbmFyY2gveDg2L0tjb25maWc6MzExNDpjb25maWcgQ09NUEFUXzMyXG5hcmNoL3g4Ni9LY29uZmlnLTMxMTUtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0zMTE5LVxuYXJjaC94ODYvS2NvbmZpZzozMTIwOmNvbmZpZyBDT01QQVRcbmFyY2gveDg2L0tjb25maWctMzEyMS1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTMxMjMtXG5hcmNoL3g4Ni9LY29uZmlnOjMxMjQ6Y29uZmlnIENPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVFxuYXJjaC94ODYvS2NvbmZpZy0zMTI1LVx0ZGVmX2Jvb2wgeVxuLS1cbmZzL0tjb25maWcuYmluZm10PTMxPWNvbmZpZyBCSU5GTVRfRUxGX0tVTklUX1RFU1Rcbi0tXG5mcy9LY29uZmlnLmJpbmZtdC00MC1cbmZzL0tjb25maWcuYmluZm10OjQxOmNvbmZpZyBDT01QQVRfQklORk1UX0VMRlxuZnMvS2NvbmZpZy5iaW5mbXQtNDItXHRkZWZfYm9vbCB5XG4tLVxubW0vS2NvbmZpZz0zMjM9Y29uZmlnIFNIVUZGTEVfUEFHRV9BTExPQ0FUT1Jcbi0tXG5tbS9LY29uZmlnLTM0NS1cbm1tL0tjb25maWc6MzQ2OmNvbmZpZyBDT01QQVRfQlJLXG5tbS9LY29uZmlnLTM0Ny1cdGJvb2wgXCYjMzQ7RGlzYWJsZSBoZWFwIHJhbmRvbWl6YXRpb25cJiMzNDtcbi0tXG5uZXQvS2NvbmZpZz0yOT1jb25maWcgV0FOVF9DT01QQVRfTkVUTElOS19NRVNTQUdFU1xuLS1cbm5ldC9LY29uZmlnLTM0LVxubmV0L0tjb25maWc6MzU6Y29uZmlnIENPTVBBVF9ORVRMSU5LX01FU1NBR0VTXG5uZXQvS2NvbmZpZy0zNi1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NjkKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNdWx0aWNhc3QgU291cmNlIEZpbHRlcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgQ09NUEFUYCBpcyBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgcHJpbWFyaWx5IHJlbGV2YW50IGZvciAzMi1iaXQgY29tcGF0aWJpbGl0eS4gV2UgZG9uJiMzOTt0IG5lY2Vzc2FyaWx5IG5lZWQgdG8gZXhwbGljaXRseSBsaXN0IGl0IGJlY2F1c2UgdGhlIGNvZGUgcGF0aCB3aXRob3V0IGBDT01QQVRgIGlzIGFsc28gbW9kaWZpZWQgYW5kIHdpbGwgYmUgZnV6emVkLiBUaGUgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZCBhcmUgYElORVRgIGFuZCBgSVBWNmAuICBTaW5jZSBgSU5FVGAgaXMgYSBnaXZlbiBmb3IgbmV0d29ya2luZywgd2UmIzM5O2xsIGp1c3QgZmxhZyBgSVBWNmAuCgpOb3csIHJldmlld2luZyB0aGUgcGF0Y2gsIHRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGJvdW5kcyBjaGVja2luZyB3aXRoaW4gYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAsIGBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyYCwgYGRvX2lwX2dldHNvY2tvcHRgLCBgaXB2Nl9nZXRfbXNmaWx0ZXJgLCBhbmQgYGNvbXBhdF9pcHY2X2dldF9tc2ZpbHRlcmAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IGNhbGN1bGF0ZXMgYG1heF9udW1zcmNgLCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc291cmNlcyB0aGF0IGNhbiBmaXQgaW4gdGhlIHVzZXItc3BhY2UgYnVmZmVyLCBhbmQgY29uc3RyYWlucyBgZ3NmLmdmX251bXNyY2AgKHRoZSBudW1iZXIgb2Ygc291cmNlcykgdG8gYmUgbm8gbGFyZ2VyIHRoYW4gdGhpcyBtYXhpbXVtLiBUaGlzIGRpcmVjdGx5IGFkZHJlc3NlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgZHVyaW5nIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcm90ZWN0aW9uIGFnYWluc3QgbWVtb3J5IGNvcnJ1cHRpb24sIGFuZCBkZWZpbml0ZWx5IGRlbWFuZHMgZnV6emluZy4KCk15IGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOiBgaXBfbWNfbXNmZ2V0YCwgYGlwX21jX2dzZmdldGAsIGFuZCBgaXA2X21jX21zZmdldGAuIFdlIGRlZmluaXRlbHkgbmVlZCB0byB0ZXN0IHRoZSBjaGFuZ2VzIHdpdGhpbiBgZG9faXBfZ2V0c29ja29wdGAgYW5kIGBkb19pcHY2X2dldHNvY2tvcHRgLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB0aG9zZSBmdW5jdGlvbiBleHBvcnRzLiBgaXBfbWNfZ3NmZ2V0YCBpcyBpbmRlZWQgZXhwb3J0ZWQgYW5kIHVzZWQgaW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLiBBbmQgYGlwNl9tY19tc2ZnZXRgIGlzIGV4cG9ydGVkIGFuZCB1c2VkIGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBFeGNlbGxlbnQuCgpTbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja3MgcmVsYXRlZCB0byBtdWx0aWNhc3Qgc291cmNlIGZpbHRlcmluZyAoc3BlY2lmaWNhbGx5IGZvciBgSVBfTVNGSUxURVJgIGFuZCBgTUNBU1RfTVNGSUxURVJgIHNvY2tldCBvcHRpb25zIGluIElQdjQgYW5kIElQdjYpLiBUaGlzIGlzIHRvIHByZXZlbnQgdXNlci1zcGFjZSBwcm92aWRlZCBzb3VyY2UgbGlzdHMgZnJvbSBvdmVyZmxvd2luZyBpbnRlcm5hbCBidWZmZXJzLiAgVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgYW5kIHRodXMgc2hvdWxkIGJlIHRob3JvdWdobHkgZnV6emVkIHRvIHZhbGlkYXRlIHRoZSBib3VuZHMgY2hlY2tpbmcgbG9naWMgYW5kIHJ1bGUgb3V0IHJlZ3Jlc3Npb25zLiBgSVBWNmAgaXMgdGhlIGtleSBjb25maWcgZm9yIHRoaXMgdGVzdC4KCkxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbWNfbXNmZ2V0JiMzNDssCiAgICAmIzM0O2lwX21jX2dzZmdldCYjMzQ7LAogICAgJiMzNDtpcDZfbWNfbXNmZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGZvciB0aGUgbnVtYmVyIG9mIG11bHRpY2FzdCBzb3VyY2VzIChgbWF4X251bXNyY2ApIGluIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHNvY2tldCBvcHRpb25zIChgSVBfTVNGSUxURVJgLCBgTUNBU1RfTVNGSUxURVJgKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBoYW5kbGluZyBsYXJnZSBzb3VyY2UgbGlzdHMgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBib3VuZHMgY2hlY2tpbmcgbG9naWMgaXMgY29ycmVjdCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbWNfbXNmZ2V0JiMzNDssCiAgICAmIzM0O2lwX21jX2dzZmdldCYjMzQ7LAogICAgJiMzNDtpcDZfbWNfbXNmZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGZvciB0aGUgbnVtYmVyIG9mIG11bHRpY2FzdCBzb3VyY2VzIChgbWF4X251bXNyY2ApIGluIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHNvY2tldCBvcHRpb25zIChgSVBfTVNGSUxURVJgLCBgTUNBU1RfTVNGSUxURVJgKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBoYW5kbGluZyBsYXJnZSBzb3VyY2UgbGlzdHMgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBib3VuZHMgY2hlY2tpbmcgbG9naWMgaXMgY29ycmVjdCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTQ6MzguNTAyODIyNTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTE0MzQ2NDg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbWNfbXNmZ2V0XCIsXG4gICAgXCJpcF9tY19nc2ZnZXRcIixcbiAgICBcImlwNl9tY19tc2ZnZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBmb3IgdGhlIG51bWJlciBvZiBtdWx0aWNhc3Qgc291cmNlcyAoYG1heF9udW1zcmNgKSBpbiBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBzb2NrZXQgb3B0aW9ucyAoYElQX01TRklMVEVSYCwgYE1DQVNUX01TRklMVEVSYCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdoZW4gaGFuZGxpbmcgbGFyZ2Ugc291cmNlIGxpc3RzIHByb3ZpZGVkIGJ5IHVzZXJzcGFjZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGlzIGNvcnJlY3QgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTQ6MzguNTAyODQ2NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNzUzNTA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU2MTVhOWY4NTdkZDU1MGQxNWVkZWVmYjhkZThjYmFkMDUxNjUxYjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAwOTo1NDozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xcbmluZGV4IGE1NWVmMzI3ZWM5MzIuLjJlNGUxOWI5MDY0NWIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xcbisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcXG5AQCAtMTQ0Nyw2ICsxNDQ3LDcgQEAgc3RhdGljIGludCBpcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiB7XFxuIFxcdGNvbnN0IGludCBzaXplMCA9IG9mZnNldG9mKHN0cnVjdCBncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpO1xcbiBcXHRzdHJ1Y3QgZ3JvdXBfZmlsdGVyIGdzZjtcXG4rXFx0dW5zaWduZWQgaW50IG1heF9udW1zcmM7XFxuIFxcdGludCBudW0sIGdzZl9zaXplO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtMTQ1NSw2ICsxNDU2LDEwIEBAIHN0YXRpYyBpbnQgaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZnc2YsIG9wdHZhbCwgc2l6ZTApKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuK1xcdC8qIE1heGltdW0gbnVtYmVyIG9mIHNvdXJjZXMgdGhhdCB3b3VsZCBmaXQgaW4gdGhlIHVzZXJzcGFjZSBidWZmZXIqL1xcbitcXHRtYXhfbnVtc3JjID0gKGxlbiAtIHNpemUwKSAvIHNpemVvZihnc2YuZ2Zfc2xpc3RfZmxleFswXSk7XFxuK1xcdGdzZi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdzZi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xcbitcXG4gXFx0bnVtID0gZ3NmLmdmX251bXNyYztcXG4gXFx0ZXJyID0gaXBfbWNfZ3NmZ2V0KHNrLCBcXHUwMDI2Z3NmLCBvcHR2YWwsXFxuIFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpKTtcXG5AQCAtMTQ3NCw2ICsxNDc5LDcgQEAgc3RhdGljIGludCBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4ge1xcbiBcXHRjb25zdCBpbnQgc2l6ZTAgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7XFxuIFxcdHN0cnVjdCBjb21wYXRfZ3JvdXBfZmlsdGVyIGdmMzI7XFxuK1xcdHVuc2lnbmVkIGludCBtYXhfbnVtc3JjO1xcbiBcXHRzdHJ1Y3QgZ3JvdXBfZmlsdGVyIGdmO1xcbiBcXHRpbnQgbnVtO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC0xNDgzLDYgKzE0ODksOSBAQCBzdGF0aWMgaW50IGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiBcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmdmMzIsIG9wdHZhbCwgc2l6ZTApKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuK1xcdG1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdmMzIuZ2Zfc2xpc3RfZmxleFswXSk7XFxuK1xcdGdmMzIuZ2ZfbnVtc3JjID0gbWluX3QodTMyLCBnZjMyLmdmX251bXNyYywgbWF4X251bXNyYyk7XFxuK1xcbiBcXHRnZi5nZl9pbnRlcmZhY2UgPSBnZjMyLmdmX2ludGVyZmFjZTtcXG4gXFx0Z2YuZ2ZfZm1vZGUgPSBnZjMyLmdmX2Ztb2RlO1xcbiBcXHRudW0gPSBnZi5nZl9udW1zcmMgPSBnZjMyLmdmX251bXNyYztcXG5AQCAtMTcwNSw2ICsxNzE0LDcgQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gXFx0Y2FzZSBJUF9NU0ZJTFRFUjpcXG4gXFx0e1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X251bXNyYztcXG4gXFx0XFx0c3RydWN0IGlwX21zZmlsdGVyIG1zZjtcXG4gXFxuIFxcdFxcdGlmIChsZW4gXFx1MDAzYyBJUF9NU0ZJTFRFUl9TSVpFKDApKSB7XFxuQEAgLTE3MTUsNiArMTcyNSwxMiBAQCBpbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuK1xcdFxcdC8qIERvIG5vdCB3cml0ZSBtb3JlIHNvdXJjZXMgdGhhbiB0aGUgY2FsbGVyIHNhaWQgb3B0dmFsIGNhblxcbitcXHRcXHQgKiBob2xkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bWF4X251bXNyYyA9IChsZW4gLSBJUF9NU0ZJTFRFUl9TSVpFKDApKSAvXFxuK1xcdFxcdFxcdCAgICAgc2l6ZW9mKG1zZi5pbXNmX3NsaXN0X2ZsZXhbMF0pO1xcbitcXHRcXHRtc2YuaW1zZl9udW1zcmMgPSBtaW5fdCh1MzIsIG1zZi5pbXNmX251bXNyYywgbWF4X251bXNyYyk7XFxuIFxcdFxcdGVyciA9IGlwX21jX21zZmdldChzaywgXFx1MDAyNm1zZiwgb3B0dmFsLCBvcHRsZW4pO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcXG5pbmRleCBiNGM5Nzc0MzRjMmUwLi4yYzNmYmRlN2NiMDU4IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xcbisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xcbkBAIC0xMDEyLDYgKzEwMTIsNyBAQCBzdGF0aWMgaW50IGlwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4ge1xcbiBcXHRjb25zdCBpbnQgc2l6ZTAgPSBvZmZzZXRvZihzdHJ1Y3QgZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KTtcXG4gXFx0c3RydWN0IGdyb3VwX2ZpbHRlciBnc2Y7XFxuK1xcdHVuc2lnbmVkIGludCBtYXhfbnVtc3JjO1xcbiBcXHRpbnQgbnVtO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtMTAyMSw2ICsxMDIyLDExIEBAIHN0YXRpYyBpbnQgaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0aWYgKGdzZi5nZl9ncm91cC5zc19mYW1pbHkgIT0gQUZfSU5FVDYpXFxuIFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG4rXFxuK1xcdC8qIE51bWJlciBvZiBzb3VyY2VzIHRoYXQgd291bGQgZml0IGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyICovXFxuK1xcdG1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdzZi5nZl9zbGlzdF9mbGV4WzBdKTtcXG4rXFx0Z3NmLmdmX251bXNyYyA9IG1pbl90KHUzMiwgZ3NmLmdmX251bXNyYywgbWF4X251bXNyYyk7XFxuK1xcbiBcXHRudW0gPSBnc2YuZ2ZfbnVtc3JjO1xcbiBcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxuIFxcdGVyciA9IGlwNl9tY19tc2ZnZXQoc2ssIFxcdTAwMjZnc2YsIG9wdHZhbCwgc2l6ZTApO1xcbkBAIC0xMDQxLDYgKzEwNDcsNyBAQCBzdGF0aWMgaW50IGNvbXBhdF9pcHY2X2dldF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxuIHtcXG4gXFx0Y29uc3QgaW50IHNpemUwID0gb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9ncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpO1xcbiBcXHRzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciBnZjMyO1xcbitcXHR1bnNpZ25lZCBpbnQgbWF4X251bXNyYztcXG4gXFx0c3RydWN0IGdyb3VwX2ZpbHRlciBnZjtcXG4gXFx0aW50IGVycjtcXG4gXFx0aW50IG51bTtcXG5AQCAtMTA1MCw2ICsxMDU3LDEwIEBAIHN0YXRpYyBpbnQgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4gXFxuIFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2Z2YzMiwgb3B0dmFsLCBzaXplMCkpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0bWF4X251bXNyYyA9IChsZW4gLSBzaXplMCkgLyBzaXplb2YoZ2YzMi5nZl9zbGlzdF9mbGV4WzBdKTtcXG4rXFx0Z2YzMi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdmMzIuZ2ZfbnVtc3JjLCBtYXhfbnVtc3JjKTtcXG4rXFxuIFxcdGdmLmdmX2ludGVyZmFjZSA9IGdmMzIuZ2ZfaW50ZXJmYWNlO1xcbiBcXHRnZi5nZl9mbW9kZSA9IGdmMzIuZ2ZfZm1vZGU7XFxuIFxcdG51bSA9IGdmLmdmX251bXNyYyA9IGdmMzIuZ2ZfbnVtc3JjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NDozOS43MjEyNTcwMzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3OTkyNTAyMDk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbWNfbXNmZ2V0XCIsXG4gICAgXCJpcF9tY19nc2ZnZXRcIixcbiAgICBcImlwNl9tY19tc2ZnZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBmb3IgdGhlIG51bWJlciBvZiBtdWx0aWNhc3Qgc291cmNlcyAoYG1heF9udW1zcmNgKSBpbiBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBzb2NrZXQgb3B0aW9ucyAoYElQX01TRklMVEVSYCwgYE1DQVNUX01TRklMVEVSYCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdoZW4gaGFuZGxpbmcgbGFyZ2Ugc291cmNlIGxpc3RzIHByb3ZpZGVkIGJ5IHVzZXJzcGFjZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGlzIGNvcnJlY3QgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTYxNWE5Zjg1N2RkNTUwZDE1ZWRlZWZiOGRlOGNiYWQwNTE2NTFiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMDk6NTQ6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuaW5kZXggYTU1ZWYzMjdlYzkzMi4uMmU0ZTE5YjkwNjQ1YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbkBAIC0xNDQ3LDYgKzE0NDcsNyBAQCBzdGF0aWMgaW50IGlwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4ge1xuIFx0Y29uc3QgaW50IHNpemUwID0gb2Zmc2V0b2Yoc3RydWN0IGdyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7XG4gXHRzdHJ1Y3QgZ3JvdXBfZmlsdGVyIGdzZjtcbitcdHVuc2lnbmVkIGludCBtYXhfbnVtc3JjO1xuIFx0aW50IG51bSwgZ3NmX3NpemU7XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTE0NTUsNiArMTQ1NiwxMCBAQCBzdGF0aWMgaW50IGlwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2Z3NmLCBvcHR2YWwsIHNpemUwKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4rXHQvKiBNYXhpbXVtIG51bWJlciBvZiBzb3VyY2VzIHRoYXQgd291bGQgZml0IGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyKi9cbitcdG1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdzZi5nZl9zbGlzdF9mbGV4WzBdKTtcbitcdGdzZi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdzZi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xuK1xuIFx0bnVtID0gZ3NmLmdmX251bXNyYztcbiBcdGVyciA9IGlwX21jX2dzZmdldChzaywgXHUwMDI2Z3NmLCBvcHR2YWwsXG4gXHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGdyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCkpO1xuQEAgLTE0NzQsNiArMTQ3OSw3IEBAIHN0YXRpYyBpbnQgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4ge1xuIFx0Y29uc3QgaW50IHNpemUwID0gb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9ncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpO1xuIFx0c3RydWN0IGNvbXBhdF9ncm91cF9maWx0ZXIgZ2YzMjtcbitcdHVuc2lnbmVkIGludCBtYXhfbnVtc3JjO1xuIFx0c3RydWN0IGdyb3VwX2ZpbHRlciBnZjtcbiBcdGludCBudW07XG4gXHRpbnQgZXJyO1xuQEAgLTE0ODMsNiArMTQ4OSw5IEBAIHN0YXRpYyBpbnQgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2Z2YzMiwgb3B0dmFsLCBzaXplMCkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuK1x0bWF4X251bXNyYyA9IChsZW4gLSBzaXplMCkgLyBzaXplb2YoZ2YzMi5nZl9zbGlzdF9mbGV4WzBdKTtcbitcdGdmMzIuZ2ZfbnVtc3JjID0gbWluX3QodTMyLCBnZjMyLmdmX251bXNyYywgbWF4X251bXNyYyk7XG4rXG4gXHRnZi5nZl9pbnRlcmZhY2UgPSBnZjMyLmdmX2ludGVyZmFjZTtcbiBcdGdmLmdmX2Ztb2RlID0gZ2YzMi5nZl9mbW9kZTtcbiBcdG51bSA9IGdmLmdmX251bXNyYyA9IGdmMzIuZ2ZfbnVtc3JjO1xuQEAgLTE3MDUsNiArMTcxNCw3IEBAIGludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBJUF9NU0ZJTFRFUjpcbiBcdHtcbitcdFx0dW5zaWduZWQgaW50IG1heF9udW1zcmM7XG4gXHRcdHN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7XG4gXG4gXHRcdGlmIChsZW4gXHUwMDNjIElQX01TRklMVEVSX1NJWkUoMCkpIHtcbkBAIC0xNzE1LDYgKzE3MjUsMTIgQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbitcdFx0LyogRG8gbm90IHdyaXRlIG1vcmUgc291cmNlcyB0aGFuIHRoZSBjYWxsZXIgc2FpZCBvcHR2YWwgY2FuXG4rXHRcdCAqIGhvbGQuXG4rXHRcdCAqL1xuK1x0XHRtYXhfbnVtc3JjID0gKGxlbiAtIElQX01TRklMVEVSX1NJWkUoMCkpIC9cbitcdFx0XHQgICAgIHNpemVvZihtc2YuaW1zZl9zbGlzdF9mbGV4WzBdKTtcbitcdFx0bXNmLmltc2ZfbnVtc3JjID0gbWluX3QodTMyLCBtc2YuaW1zZl9udW1zcmMsIG1heF9udW1zcmMpO1xuIFx0XHRlcnIgPSBpcF9tY19tc2ZnZXQoc2ssIFx1MDAyNm1zZiwgb3B0dmFsLCBvcHRsZW4pO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbmluZGV4IGI0Yzk3NzQzNGMyZTAuLjJjM2ZiZGU3Y2IwNTggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuQEAgLTEwMTIsNiArMTAxMiw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIHtcbiBcdGNvbnN0IGludCBzaXplMCA9IG9mZnNldG9mKHN0cnVjdCBncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpO1xuIFx0c3RydWN0IGdyb3VwX2ZpbHRlciBnc2Y7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X251bXNyYztcbiBcdGludCBudW07XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTEwMjEsNiArMTAyMiwxMSBAQCBzdGF0aWMgaW50IGlwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRpZiAoZ3NmLmdmX2dyb3VwLnNzX2ZhbWlseSAhPSBBRl9JTkVUNilcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuK1xuK1x0LyogTnVtYmVyIG9mIHNvdXJjZXMgdGhhdCB3b3VsZCBmaXQgaW4gdGhlIHVzZXJzcGFjZSBidWZmZXIgKi9cbitcdG1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdzZi5nZl9zbGlzdF9mbGV4WzBdKTtcbitcdGdzZi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdzZi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xuK1xuIFx0bnVtID0gZ3NmLmdmX251bXNyYztcbiBcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcbiBcdGVyciA9IGlwNl9tY19tc2ZnZXQoc2ssIFx1MDAyNmdzZiwgb3B0dmFsLCBzaXplMCk7XG5AQCAtMTA0MSw2ICsxMDQ3LDcgQEAgc3RhdGljIGludCBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIHtcbiBcdGNvbnN0IGludCBzaXplMCA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KTtcbiBcdHN0cnVjdCBjb21wYXRfZ3JvdXBfZmlsdGVyIGdmMzI7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X251bXNyYztcbiBcdHN0cnVjdCBncm91cF9maWx0ZXIgZ2Y7XG4gXHRpbnQgZXJyO1xuIFx0aW50IG51bTtcbkBAIC0xMDUwLDYgKzEwNTcsMTAgQEAgc3RhdGljIGludCBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFxuIFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmdmMzIsIG9wdHZhbCwgc2l6ZTApKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdG1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdmMzIuZ2Zfc2xpc3RfZmxleFswXSk7XG4rXHRnZjMyLmdmX251bXNyYyA9IG1pbl90KHUzMiwgZ2YzMi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xuK1xuIFx0Z2YuZ2ZfaW50ZXJmYWNlID0gZ2YzMi5nZl9pbnRlcmZhY2U7XG4gXHRnZi5nZl9mbW9kZSA9IGdmMzIuZ2ZfZm1vZGU7XG4gXHRudW0gPSBnZi5nZl9udW1zcmMgPSBnZjMyLmdmX251bXNyYztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU0OjM5LjcyMTI1ODEyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNjIxNTc2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCB0b3VjaGVzIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCBhbmQgYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IHRoZXkncmUgYWRkaW5nIGJvdW5kcyBjaGVja2luZyBmb3IgdGhlIGBtYXhfbnVtc3JjYCB2YWx1ZSBpbiBtdWx0aWNhc3Qgc29ja2V0IG9wdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucyBhcmUgYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAsIGBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyYCwgYGRvX2lwX2dldHNvY2tvcHRgIChzcGVjaWZpY2FsbHkgdGhlIGBJUF9NU0ZJTFRFUmAgY2FzZSksIGBpcHY2X2dldF9tc2ZpbHRlcmAsIGFuZCBgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyYC5cblxuR2l2ZW4gdGhpcyBpbnZvbHZlcyBjb3JlIG5ldHdvcmtpbmcsIGFuZCBzb2NrZXQgb3B0aW9ucyBhdCB0aGF0LCBteSBndXQgdGVsbHMgbWUgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgcG90ZW50aWFsLiBUaGUgY2hhbmdlcyBhcmUgZnVuZGFtZW50YWwgdG8gaG93IHRoZXNlIHN5c3RlbXMgaGFuZGxlIG11bHRpY2FzdCBmaWx0ZXJpbmcuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhlc2UgZmVhdHVyZXMgYW5kIHRoZW4gcGlucG9pbnQgdGhlIFwiZm9jdXMgc3ltYm9sc1wiIOKAkyBlc3NlbnRpYWxseSwgdGhlIGVudHJ5IHBvaW50cyB0aGF0IEkgc2hvdWxkIGJlIHRhcmdldGluZyB3aXRoIGZ1enppbmcuIFNvLCBsZXQncyBsaXN0IHRob3NlIGZvY3VzIHN5bWJvbHMgYWdhaW4gdG8gYmUgc3VyZTogYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAsIGBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyYCwgYGRvX2lwX2dldHNvY2tvcHRgLCBgaXB2Nl9nZXRfbXNmaWx0ZXJgLCBhbmQgYGNvbXBhdF9pcHY2X2dldF9tc2ZpbHRlcmAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIHN0YXRpYywgZXhwb3J0ZWQsIGFuZCBhcmUgdGhleSBpbmxpbmVkPyBUaGF04oCZcyBjcml0aWNhbCBmb3Igc3ltYm9sIHZpc2liaWxpdHkgZm9yIGZ1enppbmcuIE9rYXksIGxldCdzIHNlZS4gYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAgaXMgYHN0YXRpYyBpbnRgLiBgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcmAgaXMgYWxzbyBgc3RhdGljIGludGAuIGBkb19pcF9nZXRzb2Nrb3B0YCBpcyBqdXN0IGBpbnRgLiBgaXB2Nl9nZXRfbXNmaWx0ZXJgIGlzIGBzdGF0aWMgaW50YC4gQW5kIGBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXJgIGlzIGBzdGF0aWMgaW50YC5cblxuSG9sZCBvbi4gVGhlIHByb21wdCBJJ20gd29ya2luZyBmcm9tIHNwZWNpZmllcyBhIHByZWZlcmVuY2UuIEl0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIHNlbnNlLCBhcyB0aGUgbm9uLXN0YXRpYyBvbmVzIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gU28sIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgIGlzIGFjdHVhbGx5IGlubGluZWQgb3Igbm90LCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gSXQgbG9va3MgbGlrZSBpdCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gYGRvX2lwX2dldHNvY2tvcHRgLCB3aGljaCBpcyBlbmNvdXJhZ2luZywgYnV0IEkgc3RpbGwgbmVlZCB0byBtYWtlIHN1cmUuIExldCBtZSBncmVwIGZvciBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYCB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTQ6NDcuMDgzNDE4Mzg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODkwNzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX2dldF9tY2FzdF9tc2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9MTQzNT1zdGF0aWMgYm9vbCBnZXRzb2Nrb3B0X25lZWRzX3J0bmwoaW50IG9wdG5hbWUpXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0NDQtXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNDQ1OnN0YXRpYyBpbnQgaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0NDYtXFx0XFx0XFx0XFx0IHNvY2twdHJfdCBvcHRsZW4sIGludCBsZW4pXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0NzYtXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNDc3OnN0YXRpYyBpbnQgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNDc4LVxcdFxcdFxcdFxcdFxcdHNvY2twdHJfdCBvcHRsZW4sIGludCBsZW4pXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MTY9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzM4LVxcdFxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTczOTpcXHRcXHRcXHRlcnIgPSBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbixcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3NDAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgbGVuKTtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3NDEtXFx0XFx0ZWxzZVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTc0MjpcXHRcXHRcXHRlcnIgPSBpcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc2ssIG9wdHZhbCwgb3B0bGVuLCBsZW4pO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTc0My1cXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTQ6NDcuMTI3MzEyOTY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwNjMyNjkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGVzZSBwb2ludHM6XG5cbioqRXhhbWluaW5nIFNvY2tldCBPcHRpb24gUmV0cmlldmFsIGZvciBJUHY0IGFuZCBJUHY2KipcblxuT2theSwgc28gYGRvX2lwX2dldHNvY2tvcHRgIGlzIGNsZWFybHkgdGhlIGdhdGVrZWVwZXIgZm9yIElQdjQgc29ja2V0IG9wdGlvbiByZXRyaWV2YWwsIHRoZSBwb2ludCB3aGVyZSB0aGUga2VybmVsIGhhbmRsZXMgdGhvc2UgcmVxdWVzdHMuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24g4oCTIGFuZCBpdOKAmXMgYSBjcnVjaWFsIG9uZSBmcm9tIGEgbmV0d29ya2luZyBwZXJzcGVjdGl2ZSDigJMgaXM6IHdoYXQncyB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbiwgdGhlIGVudHJ5IHBvaW50IGZvciBJUHY2IHNvY2tldCBvcHRpb25zPyBJcyBpdCBhIHNpbWlsYXIgZnVuY3Rpb24gd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lLCBvciBpcyB0aGUgYXJjaGl0ZWN0dXJlIGNvbXBsZXRlbHkgZGlmZmVyZW50LCB3aXRoIGEgc2VwYXJhdGUgYnJhbmNoIG9mIGNvZGUgaGFuZGxpbmcgdGhlIElQdjYgcHJvdG9jb2xzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHRoaXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIHNvY2tldCBvcHRpb24gcmV0cmlldmFsIHByb2Nlc3MgYWNyb3NzIGRpZmZlcmVudCBJUCB2ZXJzaW9ucy4gS25vd2luZyB0aGlzIGRpZmZlcmVuY2UgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGtlcm5lbCdzIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAzNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU0OjUwLjIzMzY0MjE4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA0MTAzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X2dldF9tc2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTk3Nj1zdGF0aWMgaW50IGlwdjZfZ2V0c29ja29wdF9zdGlja3koc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDA5LVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMDEwOnN0YXRpYyBpbnQgaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDExLVxcdFxcdFxcdCAgICAgc29ja3B0cl90IG9wdGxlbiwgaW50IGxlbilcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDQ0LVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMDQ1OnN0YXRpYyBpbnQgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTA0Ni1cXHRcXHRcXHRcXHQgICAgc29ja3B0cl90IG9wdGxlbiwgaW50IGxlbilcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0xMDg5PWludCBkb19pcHY2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTExMTEtXFx0XFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjExMTI6XFx0XFx0XFx0cmV0dXJuIGNvbXBhdF9pcHY2X2dldF9tc2ZpbHRlcihzaywgb3B0dmFsLCBvcHRsZW4sIGxlbik7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjExMTM6XFx0XFx0cmV0dXJuIGlwdjZfZ2V0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbiwgbGVuKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTExNC1cXHRjYXNlIElQVjZfMjI5MlBLVE9QVElPTlM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU0OjUwLjI3NzY4NTY3OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODY1NTM4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIElQdjYgU29ja2V0IE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBnZXRzb2Nrb3B0YCBmdW5jdGlvbmFsaXR5IGZvciBJUHY2LCBhbmQgdGhlIGBkb19pcHY2X2dldHNvY2tvcHRgIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50LlxuXG5UbyBlc3RhYmxpc2ggY29udGV4dCBhbmQgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBJUHY0IGltcGxlbWVudGF0aW9uLCB3aGljaCBsaXZlcyBpbiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AgdW5kZXIgYGRvX2lwX2dldHNvY2tvcHRgLiBOb3csIHRvIGJlIHBlcmZlY3RseSBjbGVhciwgYGRvX2lwdjZfZ2V0c29ja29wdGAgaXMgaW4gYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AuXG5cbkl0J3Mgc2Vjb25kIG5hdHVyZSBmb3IgbWUgdG8gdGhpbmsgYWJvdXQgdGhlIHJlbGF0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20gZ29pbmcgdG8gdmVyaWZ5IHRoYXQgSVB2NCBpcyBjb250cm9sbGVkIGJ5IGBDT05GSUdfSU5FVGAgYW5kIHRoYXQgSVB2NiBpcywgYXMgZXhwZWN0ZWQsIGdhdGVkIGJ5IGBDT05GSUdfSVBWNmAuXG5cbkp1c3QgdG8gY292ZXIgYWxsIGJhc2VzLCBsZXQncyBhbHNvIGdsYW5jZSBhdCB0aGUgbWFrZWZpbGVzIGZvciBib3RoIGBuZXQvaXB2NGAgYW5kIGBuZXQvaXB2NmAgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MDIsIk91dHB1dFRva2VucyI6NjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTQ6NTQuNTY0MjQxMzEzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjA4MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NvY2tnbHVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS03LVxcdCAgICAgaXBfaW5wdXQubyBpcF9mcmFnbWVudC5vIGlwX2ZvcndhcmQubyBpcF9vcHRpb25zLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjg6XFx0ICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIGluZXRfaGFzaHRhYmxlcy5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS05LVxcdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU0OjU0LjYwNzQ1MTEwMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTYzNTUzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X3NvY2tnbHVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTg9aXB2Ni15IDo9XFx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXFx0XFx0YWRkcmxhYmVsLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjEwOlxcdFxcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMS1cXHRcXHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NDo1NC42NDkwOTEyNzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNTg1NTA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24gb2YgTmV0d29yayBTb2NrZXQgR2x1ZSBNb2R1bGVzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGVzZSBzb2NrZXQgZ2x1ZSBtb2R1bGVzIGFyZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEl0IHNlZW1zIGBpcF9zb2NrZ2x1ZS5vYCBpcyBiZWluZyBidWlsdCBubyBtYXR0ZXIgd2hhdCwgYXMgbG9uZyBhcyBgQ09ORklHX0lORVRgIGlzIGVuYWJsZWQg4oCTIHRoYXQncyBleHBlY3RlZCBzaW5jZSBJUHY0IGlzIGZ1bmRhbWVudGFsLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGlwdjZfc29ja2dsdWUub2AgaXMgb25seSBicm91Z2h0IGludG8gdGhlIGJ1aWxkIGlmIGBDT05GSUdfSVBWNmAgaXMgc2V0IHRvICd5Jy4gVGhhdCdzIHRoZSBiZWhhdmlvciBJJ2QgYW50aWNpcGF0ZS4gSnVzdCB0byBtYWtlIGRvdWJseSBzdXJlLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgaW4gYm90aCBgbmV0L2lwdjQvYCBhbmQgYG5ldC9pcHY2L2AgdG8gY29uZmlybSB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIGNvbmRpdGlvbnMgZGlyZWN0bHksIGJ1dCBiYXNlZCBvbiBleHBlcmllbmNlLCB0aGlzIGlzIHRoZSBwYXR0ZXJuIEknZCBleHBlY3QuIEkgaGF2ZSB0aGUgZmVlbGluZyB0aGlzIGlzIG1vcmUgb2YgYSBzYW5pdHkgY2hlY2sgdGhhbiBhbnl0aGluZyBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDExLCJPdXRwdXRUb2tlbnMiOjYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU0OjU5LjA1NDk0ODQzNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1NDc4ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMzOC1cXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQwLVxcdHRyaXN0YXRlIFxcXCJJUDogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzgxLVxcbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXFxubmV0L2lwdjQvS2NvbmZpZzozOTQ6Y29uZmlnIElORVRfSVBDT01QXFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXFx0dHJpc3RhdGUgXFxcIklQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQwMy1cXG5uZXQvaXB2NC9LY29uZmlnOjQwNDpjb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXFxubmV0L2lwdjQvS2NvbmZpZy00MDUtXFx0aW50IFxcXCJJTkVUOiBTb3VyY2UgcG9ydCBwZXJ0dXJiYXRpb24gdGFibGUgc2l6ZSAoYXMgcG93ZXIgb2YgMilcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTMtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTgtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTk6Y29uZmlnIElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDIyLVxcbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cXHR0cmlzdGF0ZSBcXFwiSU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzQtXFxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cXHRkZXBlbmRzIG9uIElORVRfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzgtXFxubmV0L2lwdjQvS2NvbmZpZzo0Mzk6Y29uZmlnIElORVRfVURQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQ0MC1cXHR0cmlzdGF0ZSBcXFwiVURQOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ0Ni1cXG5uZXQvaXB2NC9LY29uZmlnOjQ0Nzpjb25maWcgSU5FVF9SQVdfRElBR1xcbm5ldC9pcHY0L0tjb25maWctNDQ4LVxcdHRyaXN0YXRlIFxcXCJSQVc6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDU0LVxcbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L0tjb25maWctNDU2LVxcdGJvb2wgXFxcIklORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU0OjU5LjA5NjQ5ODI2MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE5MDkyNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnLTUtXFxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxcbm5ldC9pcHY2L0tjb25maWctNy1cXHRib29sIFxcXCJUaGUgSVB2NiBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTk9aWYgSVBWNlxcbm5ldC9pcHY2L0tjb25maWctMjAtXFxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxcbm5ldC9pcHY2L0tjb25maWctMjItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzgtXFxubmV0L2lwdjYvS2NvbmZpZzozOTpjb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxcbm5ldC9pcHY2L0tjb25maWctNDAtXFx0Ym9vbCBcXFwiSVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTEtXFxubmV0L2lwdjYvS2NvbmZpZzoxMTI6Y29uZmlnIElQVjZfTUlQNlxcbm5ldC9pcHY2L0tjb25maWctMTEzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBNb2JpbGl0eVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTE5LVxcbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxcbm5ldC9pcHY2L0tjb25maWctMTIxLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTQ5LVxcbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxcbm5ldC9pcHY2L0tjb25maWctMTUxLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTYxLVxcbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxcbm5ldC9pcHY2L0tjb25maWctMTYzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTc2LVxcbm5ldC9pcHY2L0tjb25maWc6MTc3OmNvbmZpZyBJUFY2X1NJVF82UkRcXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJJUHY2OiBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZSRClcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE5NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxcbm5ldC9pcHY2L0tjb25maWctMTk3LVxcdGJvb2xcXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMDktXFxubmV0L2lwdjYvS2NvbmZpZzoyMTA6Y29uZmlnIElQVjZfR1JFXFxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEdSRSB0dW5uZWxcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1VcXG5uZXQvaXB2Ni9LY29uZmlnLTIyOS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzEtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzI6Y29uZmlnIElQVjZfRk9VX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjMzLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTIzOC1cXHRib29sIFxcXCJJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjQyLVxcbm5ldC9pcHY2L0tjb25maWc6MjQzOmNvbmZpZyBJUFY2X1NVQlRSRUVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNDQtXFx0Ym9vbCBcXFwiSVB2Njogc291cmNlIGFkZHJlc3MgYmFzZWQgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjU2LVxcbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxcbm5ldC9pcHY2L0tjb25maWctMjU4LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXFxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjY2LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjc4LVxcbm5ldC9pcHY2L0tjb25maWc6Mjc5OmNvbmZpZyBJUFY2X1BJTVNNX1YyXFxubmV0L2lwdjYvS2NvbmZpZy0yODAtXFx0Ym9vbCBcXFwiSVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yODUtXFxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjg3LVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yOTktXFxubmV0L2lwdjYvS2NvbmZpZzozMDA6Y29uZmlnIElQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvS2NvbmZpZy0zMDEtXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzExLVxcbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXFxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXFxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMTgtXFx0Ym9vbCBcXFwiSVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMjctXFxubmV0L2lwdjYvS2NvbmZpZzozMjg6Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cXHRib29sIFxcXCJJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU0OjU5LjEzODQwOTM5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA5MjEzNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5ldHdvcmsgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IG5ldHdvcmsgY29uZmlndXJhdGlvbnMgaGVyZS4gYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBzZWVtIGxpa2UgdGhlIGtleSBzdGFydGluZyBwb2ludHMuIFJpZ2h0LCBJIHJlbWVtYmVyIHRoYXQgYENPTkZJR19JTkVUYCBpcyBwcmV0dHkgbXVjaCBhbHdheXMgZW5hYmxlZCBmb3IgYmFzaWMgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5IOKAkyBpdCdzIHRoZSBmb3VuZGF0aW9uLiBCdXQgaW5jbHVkaW5nIGBDT05GSUdfSVBWNmAgaXMgZGVmaW5pdGVseSBhIHNvbGlkIHByYWN0aWNlLiBOb3csIEknbSB0aGlua2luZyBhYm91dCBtdWx0aWNhc3Qg4oCTIGBJUF9NU0ZJTFRFUmAgam9nZ2VkIG15IG1lbW9yeS4gSXMgdGhlcmUgYSBtb3JlIGV4cGxpY2l0IG11bHRpY2FzdCBjb25maWd1cmF0aW9uIG9wdGlvbiBJIHNob3VsZCBiZSBhd2FyZSBvZj8gTGV0IG1lIGRpdmUgaW50byBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIHNlZSBpZiBgSVBfTVVMVElDQVNUYCBpcyB3aGF0IEknbSBhZnRlci4gSSdsbCBiZXQgaXQncyBpbiB0aGVyZSBzb21ld2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwOTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTU6MDIuMzQ3NjI0NjY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzUyMzgxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9NVUxUSUNBU1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnLTQtI1xcbm5ldC9pcHY0L0tjb25maWc6NTpjb25maWcgSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvS2NvbmZpZy02LVxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3RpbmdcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTIwNz1jb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L0tjb25maWctMjA4LVxcdGJvb2wgXFxcIklQOiBicm9hZGNhc3QgR1JFIG92ZXIgSVBcXFwiXFxubmV0L2lwdjQvS2NvbmZpZzoyMDk6XFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1QgXFx1MDAyNlxcdTAwMjYgTkVUX0lQR1JFXFxubmV0L2lwdjQvS2NvbmZpZy0yMTAtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0yMjA9Y29uZmlnIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjIxLVxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjIyMjpcXHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L0tjb25maWctMjIzLVxcdHNlbGVjdCBJUF9NUk9VVEVfQ09NTU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU1OjAyLjM5MTE1MDk4NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjkwMTE3OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBNdWx0aWNhc3QgRmlsdGVyaW5nIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdHMgaW5jbHVzaW9uIGlzIGhhbmRsZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBwcmV0dHkgY2VydGFpbiB0aGF0IGFueXRoaW5nIHJlbGF0ZWQgdG8gbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbCBpcyBnb2luZyB0byBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBTbywgbXkgZ3V0IGluc3RpbmN0IHNheXMgaXQncyBsaWtlbHkgZ3VhcmRlZCBieSBgQ09ORklHX0lQX01VTFRJQ0FTVGAuIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGNvbmZpZ3VyYXRpb24gZmxhZyByZWxhdGVkIHRvIElQdjQgbXVsdGljYXN0IHN1cHBvcnQsIGFuZCBpdCB3b3VsZCBtYWtlIHNlbnNlIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGJlIHBhcnQgb2YgdGhhdCBsYXJnZXIgZW5hYmxpbmcgYmxvY2suIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBvciBtYXliZSB1c2UgYSBjb2RlIHNlYXJjaCB0b29sIHRvIGJlIHN1cmUsIGJ1dCB0aGF0J3MgbXkgd29ya2luZyBoeXBvdGhlc2lzLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiBtYW5hZ2luZyBtdWx0aWNhc3QgbWVtYmVyc2hpcCBzbyBJIHdvdWxkIGJlIHN1cnByaXNlZCBpZiBpdCB3YXNuJ3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NTowNS42ODEyNzA4NzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzQxNTc3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSVBfTVVMVElDQVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU1OjA1LjcyNTAxODI2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM2Njg1Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6ICoqSGFuZyBvbiBhIHNlY29uZCwgaXMgdGhpcyBgaXBfbWNfbXNmZ2V0YCBmdW5jdGlvbiBhY3R1YWxseSBjb25kaXRpb25hbCBiYXNlZCBvbiB3aGV0aGVyIElQIE11bHRpY2FzdCBpcyBlbmFibGVkPyoqIEl0IGZlZWxzIGxpa2UgaXQgbWlnaHQgYmUsIGJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGJlZm9yZSBJIGRpZyB0b28gZGVlcC5cblxuVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBuZXQvaXB2NC9pZ21wLmNgIG9yIHNvbWV0aGluZyBhbmFsb2dvdXMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIG11bHRpY2FzdC1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIHJlc2lkZS4gSSdsbCBzZWFyY2ggdGhhdCBmaWxlIGZvciBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBndWFyZCB0aGUgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBkZXBlbmRlbmN5IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbiBhbmQgaWYgbXkgYW5hbHlzaXMgbmVlZHMgdG8gYWNjb3VudCBmb3IgdGhpcyBjb25maWd1cmF0aW9uLiBUaGlzIGFsc28gaGVscHMgbWUgZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NjIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NTowOS44NjE3MDYzMzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjgzNTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9tY19tc2ZnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYz0yNTY5PWludCBpcF9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBpbnQgaWZpbmRleClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yNjU4LX1cXG5uZXQvaXB2NC9pZ21wLmM6MjY1OTppbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXFxubmV0L2lwdjQvaWdtcC5jLTI2NjAtXFx0XFx0IHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MTY9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzMzLVxcdFxcdG1zZi5pbXNmX251bXNyYyA9IG1pbl90KHUzMiwgbXNmLmltc2ZfbnVtc3JjLCBtYXhfbnVtc3JjKTtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3MzQ6XFx0XFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcXHUwMDI2bXNmLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzM1LVxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NToxMC4xNTQ1NDc4MDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5MDU0MzQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYGlnbXAuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgd2hlbiBJIHNlZSBgaWdtcC5jYCBpczogKmlzIHRoaXMgY29kZSBjb21waWxlZCBjb25kaXRpb25hbGx5PyogSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBHaXZlbiB0aGUgbmF0dXJlIG9mIElHTVAgYW5kIGl0cyBwb3RlbnRpYWwgZm9yIGJlaW5nIHNlbGVjdGl2ZWx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgc3lzdGVtIG9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgYSB2ZXJ5IGxpa2VseSBjYW5kaWRhdGUuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGVyZSBhcmUgYCNpZmRlZmAsIGAjaWZuZGVmYCwgb3Igc2ltaWxhciBkaXJlY3RpdmVzIGltcGFjdGluZyB0aGUgaW5jbHVzaW9uIGFuZCBjb21waWxhdGlvbiBvZiB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUuIFRoYXQnbGwgaW5mb3JtIGEgbG90IG9mIG15IGZ1cnRoZXIgYW5hbHlzaXMuIElmIGl0ICppcyogY29tcGlsZWQgY29uZGl0aW9uYWxseSwgd2hhdCBhcmUgdGhlIGRlY2lkaW5nIGZhY3RvcnM/IFdoYXQgbWFjcm9zIGFyZSBhdCBwbGF5PyBXaGF0IGltcGFjdCBkb2VzIHRoYXQgaGF2ZSBvbiBpdHMgYmVoYXZpb3IgYW5kIGRlcGVuZGVuY2llcz8gVGhhdCdzIHdoZXJlIG15IGZvY3VzIG5lZWRzIHRvIGdvIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDAxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTU6MTMuODQ1MDkzMzc1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjk5ODc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZ21wLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTMtXFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNDpcXHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTU6MTMuODg4MDk1MTcyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNjU4MDUxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTb2NrZXQgT3B0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhlIGBpZ21wLmNgIGZpbGUgY29tcGlsZXMgcmVnYXJkbGVzcyBvZiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgYmVpbmcgc2V0IOKAkyB0aGF0J3MgZ29vZCB0byBrbm93LiBCdXQgd2hhdCBhYm91dCBJUHY2PyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZGVwZW5kZW5jeSBpcyBoYW5kbGVkIGNvcnJlY3RseSwgcGFydGljdWxhcmx5IGZvciBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYC4gTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IHRoZSBtYWluIGVudHJ5IHBvaW50cywgdGhlIGBkb19pcF9nZXRzb2Nrb3B0YCBhbmQgYGRvX2lwdjZfZ2V0c29ja29wdGAgZnVuY3Rpb25zLCBiZWNhdXNlIHRoZXNlIGFyZSB0aGUgcGxhY2VzIHdoZXJlIHNvY2tldCBvcHRpb25zIGFyZSBoYW5kbGVkLiBUaGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIHRvdWNoOlxuXG4qICAgYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmBcbiogICBgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcmBcbiogICBgZG9faXBfZ2V0c29ja29wdGBcbiogICBgaXB2Nl9nZXRfbXNmaWx0ZXJgXG4qICAgYGNvbXBhdF9pcHY2X2dldF9tc2ZpbHRlcmBcblxuU28sIG15IGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlIGBkb19pcF9nZXRzb2Nrb3B0YCBhbmQgYGRvX2lwdjZfZ2V0c29ja29wdGAuXG5cbldhaXQsIG5vdyB0aGF0IEknbSBsb29raW5nIGF0IGl0LCBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYCBpcyBzdGF0aWMgYnV0IGNhbGxlZCBmcm9tIGBkb19pcF9nZXRzb2Nrb3B0YC4gSXMgYGRvX2lwX2dldHNvY2tvcHRgIHRvbyBiaWc/IE1heWJlIGZvY3VzaW5nIG9uIGBpcF9tY19tc2ZnZXRgIHdvdWxkIGJlIGJldHRlcj8gT3IgcGVyaGFwcyBJIHNob3VsZCBqdXN0IHN0aWNrIHdpdGggbGlzdGluZyBgZG9faXBfZ2V0c29ja29wdGAgYW5kIGBkb19pcHY2X2dldHNvY2tvcHRgLiBBaCwgcmlnaHQsIHRoZSBwcm9tcHQgc2F5cyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIVxuXG5gaXBfZ2V0X21jYXN0X21zZmlsdGVyYCBpcyBzdGF0aWMsIHNvIEkgc2hvdWxkIHNlZSBpZiBpdCdzIGlubGluZWQuIEkgc2hvdWxkIGNoZWNrIGl0cyBzaXplLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc5NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NToyMi4wNTM5MDIxODlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfc29ja2dsdWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDQ1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDQ1OlxcdHN0YXRpYyBpbnQgaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4xNDQ2OlxcdFxcdFxcdFxcdFxcdCBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbGVuKVxcbjE0NDc6XFx0e1xcbjE0NDg6XFx0XFx0Y29uc3QgaW50IHNpemUwID0gb2Zmc2V0b2Yoc3RydWN0IGdyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7XFxuMTQ0OTpcXHRcXHRzdHJ1Y3QgZ3JvdXBfZmlsdGVyIGdzZjtcXG4xNDUwOlxcdFxcdHVuc2lnbmVkIGludCBtYXhfbnVtc3JjO1xcbjE0NTE6XFx0XFx0aW50IG51bSwgZ3NmX3NpemU7XFxuMTQ1MjpcXHRcXHRpbnQgZXJyO1xcbjE0NTM6XFx0XFxuMTQ1NDpcXHRcXHRpZiAobGVuIFxcdTAwM2Mgc2l6ZTApXFxuMTQ1NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDU2OlxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2Z3NmLCBvcHR2YWwsIHNpemUwKSlcXG4xNDU3OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE0NTg6XFx0XFxuMTQ1OTpcXHRcXHQvKiBNYXhpbXVtIG51bWJlciBvZiBzb3VyY2VzIHRoYXQgd291bGQgZml0IGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyKi9cXG4xNDYwOlxcdFxcdG1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdzZi5nZl9zbGlzdF9mbGV4WzBdKTtcXG4xNDYxOlxcdFxcdGdzZi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdzZi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xcbjE0NjI6XFx0XFxuMTQ2MzpcXHRcXHRudW0gPSBnc2YuZ2ZfbnVtc3JjO1xcbjE0NjQ6XFx0XFx0ZXJyID0gaXBfbWNfZ3NmZ2V0KHNrLCBcXHUwMDI2Z3NmLCBvcHR2YWwsXFxuMTQ2NTpcXHRcXHRcXHRcXHQgICBvZmZzZXRvZihzdHJ1Y3QgZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KSk7XFxuMTQ2NjpcXHRcXHRpZiAoZXJyKVxcbjE0Njc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNDY4OlxcdFxcdGlmIChnc2YuZ2ZfbnVtc3JjIFxcdTAwM2MgbnVtKVxcbjE0Njk6XFx0XFx0XFx0bnVtID0gZ3NmLmdmX251bXNyYztcXG4xNDcwOlxcdFxcdGdzZl9zaXplID0gR1JPVVBfRklMVEVSX1NJWkUobnVtKTtcXG4xNDcxOlxcdFxcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcXHUwMDI2Z3NmX3NpemUsIHNpemVvZihpbnQpKSB8fFxcbjE0NzI6XFx0XFx0ICAgIGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIFxcdTAwMjZnc2YsIHNpemUwKSlcXG4xNDczOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE0NzQ6XFx0XFx0cmV0dXJuIDA7XFxuMTQ3NTpcXHR9XFxuMTQ3NjpcXHRcXG4xNDc3OlxcdHN0YXRpYyBpbnQgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxuMTQ3ODpcXHRcXHRcXHRcXHRcXHRcXHRzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbGVuKVxcbjE0Nzk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NToyMi4wNTM5OTY0NTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MDk2OTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGEgU29ja2V0IE9wdGlvbiBGdW5jdGlvbiBDYWxsKipcblxuSG1tLCB0aGlzIGZ1bmN0aW9uIEknbSBsb29raW5nIGF04oCmIGl0J3MgcHJldHR5IHNtYWxsLiBBdCBmaXJzdCBnbGFuY2UsIGl0ICptaWdodCogYmUgYSBjYW5kaWRhdGUgZm9yIGlubGluaW5nIOKAkyBvcHRpbWl6aW5nIGZvciBzcGVlZCBieSBlbGltaW5hdGluZyB0aGUgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZC4gQnV0LCBsZXQgbWUgcGF1c2UgYW5kIHRoaW5rIHRoaXMgdGhyb3VnaCBhIGJpdCBtb3JlIGJlZm9yZSBJIGRlY2lkZS4gVGhhdCdzIGFzc3VtaW5nIGl0J3MgdHJ1bHkgYSBzbWFsbCBmdW5jdGlvbi4gSSd2ZSBzZWVuIHNvbWUgdHJpY2tzeSBjb2RlLiBBaCwgd2FpdCBhIG1pbnV0ZSwgdGhlIGNhbGwgaXMgYGRvX2lwX2dldHNvY2tvcHRgLiBOb3cgSSByZW1lbWJlciB0aGF0IGJlaW5nIHVzZWQgYSBsb3QsIGFuZCBpdCdzIGFsbW9zdCBhbHdheXMgaHVnZSEgQmVzdCB0byBjaGVjayB0aGF0IGZ1bmN0aW9uIGZpcnN0IGJlZm9yZSBJIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGlubGluaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIxMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTU6MjUuNjI0OTY3ODUzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MTYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTE2OlxcdGludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4xNTE3OlxcdFxcdFxcdCAgICAgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcXG4xNTE4OlxcdHtcXG4xNTE5OlxcdFxcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcXG4xNTIwOlxcdFxcdGJvb2wgbmVlZHNfcnRubCA9IGdldHNvY2tvcHRfbmVlZHNfcnRubChvcHRuYW1lKTtcXG4xNTIxOlxcdFxcdGludCB2YWwsIGVyciA9IDA7XFxuMTUyMjpcXHRcXHRpbnQgbGVuO1xcbjE1MjM6XFx0XFxuMTUyNDpcXHRcXHRpZiAobGV2ZWwgIT0gU09MX0lQKVxcbjE1MjU6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE1MjY6XFx0XFxuMTUyNzpcXHRcXHRpZiAoaXBfbXJvdXRlX29wdChvcHRuYW1lKSlcXG4xNTI4OlxcdFxcdFxcdHJldHVybiBpcF9tcm91dGVfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbjE1Mjk6XFx0XFxuMTUzMDpcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXFxuMTUzMTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xNTMyOlxcdFxcdGlmIChsZW4gXFx1MDAzYyAwKVxcbjE1MzM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTUzNDpcXHRcXG4xNTM1OlxcdFxcdC8qIEhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHJlYWQgd2l0aG91dCBsb2NraW5nIHRoZSBzb2NrZXQuICovXFxuMTUzNjpcXHRcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4xNTM3OlxcdFxcdGNhc2UgSVBfUEtUSU5GTzpcXG4xNTM4OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoUEtUSU5GTywgc2spO1xcbjE1Mzk6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1NDA6XFx0XFx0Y2FzZSBJUF9SRUNWVFRMOlxcbjE1NDE6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChUVEwsIHNrKTtcXG4xNTQyOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTQzOlxcdFxcdGNhc2UgSVBfUkVDVlRPUzpcXG4xNTQ0OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoVE9TLCBzayk7XFxuMTU0NTpcXHRcXHRcXHRnb3RvIGNvcHl2YWw7XFxuMTU0NjpcXHRcXHRjYXNlIElQX1JFQ1ZPUFRTOlxcbjE1NDc6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChSRUNWT1BUUywgc2spO1xcbjE1NDg6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1NDk6XFx0XFx0Y2FzZSBJUF9SRVRPUFRTOlxcbjE1NTA6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChSRVRPUFRTLCBzayk7XFxuMTU1MTpcXHRcXHRcXHRnb3RvIGNvcHl2YWw7XFxuMTU1MjpcXHRcXHRjYXNlIElQX1BBU1NTRUM6XFxuMTU1MzpcXHRcXHRcXHR2YWwgPSBpbmV0X3Rlc3RfYml0KFBBU1NTRUMsIHNrKTtcXG4xNTU0OlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTU1OlxcdFxcdGNhc2UgSVBfUkVDVk9SSUdEU1RBRERSOlxcbjE1NTY6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChPUklHRFNUQUREUiwgc2spO1xcbjE1NTc6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1NTg6XFx0XFx0Y2FzZSBJUF9DSEVDS1NVTTpcXG4xNTU5OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoQ0hFQ0tTVU0sIHNrKTtcXG4xNTYwOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTYxOlxcdFxcdGNhc2UgSVBfUkVDVkZSQUdTSVpFOlxcbjE1NjI6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChSRUNWRlJBR1NJWkUsIHNrKTtcXG4xNTYzOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTY0OlxcdFxcdGNhc2UgSVBfUkVDVkVSUjpcXG4xNTY1OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoUkVDVkVSUiwgc2spO1xcbjE1NjY6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1Njc6XFx0XFx0Y2FzZSBJUF9SRUNWRVJSX1JGQzQ4ODQ6XFxuMTU2ODpcXHRcXHRcXHR2YWwgPSBpbmV0X3Rlc3RfYml0KFJFQ1ZFUlJfUkZDNDg4NCwgc2spO1xcbjE1Njk6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1NzA6XFx0XFx0Y2FzZSBJUF9GUkVFQklORDpcXG4xNTcxOlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKTtcXG4xNTcyOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTczOlxcdFxcdGNhc2UgSVBfSERSSU5DTDpcXG4xNTc0OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoSERSSU5DTCwgc2spO1xcbjE1NzU6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1NzY6XFx0XFx0Y2FzZSBJUF9NVUxUSUNBU1RfTE9PUDpcXG4xNTc3OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoTUNfTE9PUCwgc2spO1xcbjE1Nzg6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1Nzk6XFx0XFx0Y2FzZSBJUF9NVUxUSUNBU1RfQUxMOlxcbjE1ODA6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChNQ19BTEwsIHNrKTtcXG4xNTgxOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTgyOlxcdFxcdGNhc2UgSVBfVFJBTlNQQVJFTlQ6XFxuMTU4MzpcXHRcXHRcXHR2YWwgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XFxuMTU4NDpcXHRcXHRcXHRnb3RvIGNvcHl2YWw7XFxuMTU4NTpcXHRcXHRjYXNlIElQX05PREVGUkFHOlxcbjE1ODY6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChOT0RFRlJBRywgc2spO1xcbjE1ODc6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1ODg6XFx0XFx0Y2FzZSBJUF9CSU5EX0FERFJFU1NfTk9fUE9SVDpcXG4xNTg5OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoQklORF9BRERSRVNTX05PX1BPUlQsIHNrKTtcXG4xNTkwOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTkxOlxcdFxcdGNhc2UgSVBfUk9VVEVSX0FMRVJUOlxcbjE1OTI6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChSVEFMRVJULCBzayk7XFxuMTU5MzpcXHRcXHRcXHRnb3RvIGNvcHl2YWw7XFxuMTU5NDpcXHRcXHRjYXNlIElQX1RUTDpcXG4xNTk1OlxcdFxcdFxcdHZhbCA9IFJFQURfT05DRShpbmV0LVxcdTAwM2V1Y190dGwpO1xcbjE1OTY6XFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuMTU5NzpcXHRcXHRcXHRcXHR2YWwgPSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVxcdTAwM2VpcHY0LnN5c2N0bF9pcF9kZWZhdWx0X3R0bCk7XFxuMTU5ODpcXHRcXHRcXHRnb3RvIGNvcHl2YWw7XFxuMTU5OTpcXHRcXHRjYXNlIElQX01JTlRUTDpcXG4xNjAwOlxcdFxcdFxcdHZhbCA9IFJFQURfT05DRShpbmV0LVxcdTAwM2VtaW5fdHRsKTtcXG4xNjAxOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNjAyOlxcdFxcdGNhc2UgSVBfTVVMVElDQVNUX1RUTDpcXG4xNjAzOlxcdFxcdFxcdHZhbCA9IFJFQURfT05DRShpbmV0LVxcdTAwM2VtY190dGwpO1xcbjE2MDQ6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE2MDU6XFx0XFx0Y2FzZSBJUF9NVFVfRElTQ09WRVI6XFxuMTYwNjpcXHRcXHRcXHR2YWwgPSBSRUFEX09OQ0UoaW5ldC1cXHUwMDNlcG10dWRpc2MpO1xcbjE2MDc6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE2MDg6XFx0XFx0Y2FzZSBJUF9UT1M6XFxuMTYwOTpcXHRcXHRcXHR2YWwgPSBSRUFEX09OQ0UoaW5ldC1cXHUwMDNldG9zKTtcXG4xNjEwOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNjExOlxcdFxcdGNhc2UgSVBfT1BUSU9OUzpcXG4xNjEyOlxcdFxcdHtcXG4xNjEzOlxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgb3B0YnVmW3NpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykrNDBdO1xcbjE2MTQ6XFx0XFx0XFx0c3RydWN0IGlwX29wdGlvbnMgKm9wdCA9IChzdHJ1Y3QgaXBfb3B0aW9ucyAqKW9wdGJ1ZjtcXG4xNjE1OlxcdFxcdFxcdHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaW5ldF9vcHQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU1OjI1LjYyNTEyNTkxM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ5OTQ2NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIGBnZXRzb2Nrb3B0YCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBgZG9faXBfZ2V0c29ja29wdGAuIFRoYXQncyBhIGJlYXN0IG9mIGEgZnVuY3Rpb24sIGlzbid0IGl0PyBJdCdzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGZyb250IGRvb3IgZm9yIGBnZXRzb2Nrb3B0YCBjYWxscyByZWxhdGVkIHRvIElQLiBJdCdzIGluZXZpdGFibHkgZ29pbmcgdG8gYmUgY29tcGxleC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG11bHRpY2FzdCBnZXRzIGNvbmZpZ3VyZWQuIEhtbSwgSSB3b25kZXIgYWJvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggbXVsdGljYXN0IHNvdXJjZSBmaWx0ZXJpbmcuIFRoYXQncyBhIGNvcmUgY29uY2VybiBmb3IgcGVyZm9ybWFuY2UsIGFuZCBpdCdzIHdoZXJlIGEgbG90IG9mIGNvbmZpZ3VyYXRpb24gcXVlc3Rpb25zIGFyaXNlLlxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSdzIGBpcF9tY19tc2ZnZXRgIGNhbGxlZCB3aXRoaW4gYGRvX2lwX2dldHNvY2tvcHRgLiBUaGF0J3MgbGlrZWx5IHRoZSBrZXkuIEl0IGxvb2tzIGxpa2UgYGlwX21jX21zZmdldGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgcmV0cmlldmVzIG11bHRpY2FzdCBzb3VyY2UgZmlsdGVyIGluZm9ybWF0aW9uLiBUaGF0J3Mgd2hhdCBJIGFtIGxvb2tpbmcgZm9yLiBMZXQncyB0cmFjZSB0aGF0IGNvZGUuIEknbGwgbmVlZCB0byBqdW1wIG92ZXIgdG8gYG5ldC9pcHY0L2lnbXAuY2Ag4oCTIHRoYXQncyB3aGVyZSBJR01QIChhbmQgcmVsYXRlZCBtdWx0aWNhc3Qgb3BlcmF0aW9ucykgaXMgaGFuZGxlZCBpbiB0aGUgSVB2NCBzdGFjaywgcmlnaHQ/IE9rYXksIHRpbWUgdG8gc2VlIHdoYXQgYGlwX21jX21zZmdldGAgaXMgZG9pbmcuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhvc2Ugc29ja2V0IG9wdGlvbnMgYXJlIGhhbmRsZWQgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgaW50ZXJlc3RpbmcsIGFuZCBob3BlZnVsbHksIG5vdCB0b28gZW50YW5nbGVkIGluIGxvdy1sZXZlbCBkYXRhIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDQ1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NToyOS42NzUwNzgyMDRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ3MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lnbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjU5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjU5OlxcdGludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixcXG4yNjYwOlxcdFxcdFxcdCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxcbjI2NjE6XFx0e1xcbjI2NjI6XFx0XFx0aW50IGVyciwgbGVuLCBjb3VudCwgY29weWNvdW50LCBtc2Zfc2l6ZTtcXG4yNjYzOlxcdFxcdHN0cnVjdCBpcF9tcmVxblxcdGltcjtcXG4yNjY0OlxcdFxcdF9fYmUzMiBhZGRyID0gbXNmLVxcdTAwM2VpbXNmX211bHRpYWRkcjtcXG4yNjY1OlxcdFxcdHN0cnVjdCBpcF9tY19zb2NrbGlzdCAqcG1jO1xcbjI2NjY6XFx0XFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xcbjI2Njc6XFx0XFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xcbjI2Njg6XFx0XFx0c3RydWN0IGlwX3NmX3NvY2tsaXN0ICpwc2w7XFxuMjY2OTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XFxuMjY3MDpcXHRcXG4yNjcxOlxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuMjY3MjpcXHRcXG4yNjczOlxcdFxcdGlmICghaXB2NF9pc19tdWx0aWNhc3QoYWRkcikpXFxuMjY3NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNjc1OlxcdFxcbjI2NzY6XFx0XFx0aW1yLmltcl9tdWx0aWFkZHIuc19hZGRyID0gbXNmLVxcdTAwM2VpbXNmX211bHRpYWRkcjtcXG4yNjc3OlxcdFxcdGltci5pbXJfYWRkcmVzcy5zX2FkZHIgPSBtc2YtXFx1MDAzZWltc2ZfaW50ZXJmYWNlO1xcbjI2Nzg6XFx0XFx0aW1yLmltcl9pZmluZGV4ID0gMDtcXG4yNjc5OlxcdFxcdGluX2RldiA9IGlwX21jX2ZpbmRfZGV2KG5ldCwgXFx1MDAyNmltcik7XFxuMjY4MDpcXHRcXG4yNjgxOlxcdFxcdGlmICghaW5fZGV2KSB7XFxuMjY4MjpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjI2ODM6XFx0XFx0XFx0Z290byBkb25lO1xcbjI2ODQ6XFx0XFx0fVxcbjI2ODU6XFx0XFx0ZXJyID0gLUVBRERSTk9UQVZBSUw7XFxuMjY4NjpcXHRcXG4yNjg3OlxcdFxcdGZvcl9lYWNoX3BtY19ydG5sKGluZXQsIHBtYykge1xcbjI2ODg6XFx0XFx0XFx0aWYgKHBtYy1cXHUwMDNlbXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIgPT0gbXNmLVxcdTAwM2VpbXNmX211bHRpYWRkciBcXHUwMDI2XFx1MDAyNlxcbjI2ODk6XFx0XFx0XFx0ICAgIHBtYy1cXHUwMDNlbXVsdGkuaW1yX2lmaW5kZXggPT0gaW1yLmltcl9pZmluZGV4KVxcbjI2OTA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjY5MTpcXHRcXHR9XFxuMjY5MjpcXHRcXHRpZiAoIXBtYylcXHRcXHQvKiBtdXN0IGhhdmUgYSBwcmlvciBqb2luICovXFxuMjY5MzpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuMjY5NDpcXHRcXHRtc2YtXFx1MDAzZWltc2ZfZm1vZGUgPSBwbWMtXFx1MDAzZXNmbW9kZTtcXG4yNjk1OlxcdFxcdHBzbCA9IHJ0bmxfZGVyZWZlcmVuY2UocG1jLVxcdTAwM2VzZmxpc3QpO1xcbjI2OTY6XFx0XFx0aWYgKCFwc2wpIHtcXG4yNjk3OlxcdFxcdFxcdGNvdW50ID0gMDtcXG4yNjk4OlxcdFxcdH0gZWxzZSB7XFxuMjY5OTpcXHRcXHRcXHRjb3VudCA9IHBzbC1cXHUwMDNlc2xfY291bnQ7XFxuMjcwMDpcXHRcXHR9XFxuMjcwMTpcXHRcXHRjb3B5Y291bnQgPSBjb3VudCBcXHUwMDNjIG1zZi1cXHUwMDNlaW1zZl9udW1zcmMgPyBjb3VudCA6IG1zZi1cXHUwMDNlaW1zZl9udW1zcmM7XFxuMjcwMjpcXHRcXHRsZW4gPSBmbGV4X2FycmF5X3NpemUocHNsLCBzbF9hZGRyLCBjb3B5Y291bnQpO1xcbjI3MDM6XFx0XFx0bXNmLVxcdTAwM2VpbXNmX251bXNyYyA9IGNvdW50O1xcbjI3MDQ6XFx0XFx0bXNmX3NpemUgPSBJUF9NU0ZJTFRFUl9TSVpFKGNvcHljb3VudCk7XFxuMjcwNTpcXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXFx1MDAyNm1zZl9zaXplLCBzaXplb2YoaW50KSkgfHxcXG4yNzA2OlxcdFxcdCAgICBjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBtc2YsIElQX01TRklMVEVSX1NJWkUoMCkpKSB7XFxuMjcwNzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yNzA4OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTU6MjkuNjc1NzMwMzQ0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjg1Mjk3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIHRvIGNsYXJpZnkgaXMgdGhhdCBgaXBfbWNfbXNmZ2V0YCBpc24ndCBzdGF0aWMsIGl0J3MgZXhwb3J0ZWQuIEdvdCBpdC4gTm93LCB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBtb2RpZnlpbmcgc29tZSBrZXkgZnVuY3Rpb25zOiBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYCBhbmQgYGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXJgLCBib3RoIG9mIHdoaWNoIGNhbGwgYGlwX21jX2dzZmdldGAuIEFsc28sIGBkb19pcF9nZXRzb2Nrb3B0YCBjYWxscyBgaXBfbWNfbXNmZ2V0YC4gSXQgc2VlbXMgbGlrZSB0aG9zZSBhcmUgdGhlIElQdjQtcmVsYXRlZCBhcmVhcyB0byBmb2N1cyBvbi5cblxuRm9yIElQdjYsIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgaXB2Nl9nZXRfbXNmaWx0ZXJgIGFuZCBgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyYCwgd2hpY2ggaW4gdHVybiBjYWxsIGBpcDZfbWNfbXNmZ2V0YC4gQ2xlYXJseSwgdGhlIHBhdGNoIGlzIGFib3V0IG11bHRpY2FzdCBmaWx0ZXJpbmcuXG5cblNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byBob3cgYGlwX21jX2dzZmdldGAgYW5kIGBpcDZfbWNfbXNmZ2V0YCBhcmUgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRob3NlIGZ1bmN0aW9ucyB0byBhc3Nlc3MgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgZm9jdXMgb24gdGhvc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMyNywiT3V0cHV0VG9rZW5zIjo2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU1OjM0LjAwNDI2MjU0NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5OTE2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfbWNfZ3NmZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pZ21wLmM9MjY1OT1pbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjcxOC1cXG5uZXQvaXB2NC9pZ21wLmM6MjcxOTppbnQgaXBfbWNfZ3NmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGdyb3VwX2ZpbHRlciAqZ3NmLFxcbm5ldC9pcHY0L2lnbXAuYy0yNzIwLVxcdFxcdCBzb2NrcHRyX3Qgb3B0dmFsLCBzaXplX3Qgc3Nfb2Zmc2V0KVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNDQ1PXN0YXRpYyBpbnQgaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQ2My1cXHRudW0gPSBnc2YuZ2ZfbnVtc3JjO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTQ2NDpcXHRlcnIgPSBpcF9tY19nc2ZnZXQoc2ssIFxcdTAwMjZnc2YsIG9wdHZhbCxcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0NjUtXFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGdyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCkpO1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNDc3PXN0YXRpYyBpbnQgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0OTktXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNTAwOlxcdGVyciA9IGlwX21jX2dzZmdldChzaywgXFx1MDAyNmdmLCBvcHR2YWwsXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNTAxLVxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBjb21wYXRfZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU1OjM0LjA1MTI1NTU4MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMzcyNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X21jX21zZmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTEwMTA9c3RhdGljIGludCBpcHY2X2dldF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTAzMS1cXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjEwMzI6XFx0ZXJyID0gaXA2X21jX21zZmdldChzaywgXFx1MDAyNmdzZiwgb3B0dmFsLCBzaXplMCk7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMzMtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0xMDQ1PXN0YXRpYyBpbnQgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDcyLVxcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTA3MzpcXHRlcnIgPSBpcDZfbWNfbXNmZ2V0KHNrLCBcXHUwMDI2Z2YsIG9wdHZhbCwgc2l6ZTApO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDc0LVxcdHNvY2tvcHRfcmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9NDg3PWludCBpcDZfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTU4NC1cXG5uZXQvaXB2Ni9tY2FzdC5jOjU4NTppbnQgaXA2X21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBncm91cF9maWx0ZXIgKmdzZixcXG5uZXQvaXB2Ni9tY2FzdC5jLTU4Ni1cXHRcXHQgIHNvY2twdHJfdCBvcHR2YWwsIHNpemVfdCBzc19vZmZzZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU1OjM0LjA5NTM5NDU2OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzMzMDMzNTUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBGdXp6aW5nIFRhcmdldHMgZm9yIE11bHRpY2FzdCBGaWx0ZXIgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBpZGVudGlmeSB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gdGFyZ2V0IHdpdGggZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBnbyBhZnRlciBgZG9faXBfZ2V0c29ja29wdGAgYW5kIGBkb19pcHY2X2dldHNvY2tvcHRgIGJlY2F1c2UgdGhleSBhcmUgdGhlIGV4cG9ydGVkIGVudHJ5IHBvaW50cyBhbmQgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb2RlIGNhbGxlZCBmcm9tIHRoZW0uIEhvd2V2ZXIsIHRoZXkgYXJlIHByZXR0eSBsYXJnZSBmdW5jdGlvbnMsIHdoaWNoIGNvdWxkIHNrZXcgdGhlIGZ1enppbmcgZGlzdHJpYnV0aW9uIGFuZCBtYXNrIHRoZSBzcGVjaWZpYyB2dWxuZXJhYmlsaXR5LlxuXG5UaGUgcmVhbCB3b3JrIGlzIGJlaW5nIGRvbmUgYnkgYGlwX21jX21zZmdldGAsIGBpcF9tY19nc2ZnZXRgLCBhbmQgYGlwNl9tY19tc2ZnZXRgLiBUaGV5IGFyZSBub24tc3RhdGljIGFuZCBub3QgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIGFuZCBhcmUgY2FsbGVkIGltbWVkaWF0ZWx5ICphZnRlciogdGhlIG1vZGlmaWVkIGNvZGUuIExpc3RpbmcgdGhlc2UgYXMgZm9jdXMgc3ltYm9scyBpcyB0aGUgb3B0aW1hbCBhcHByb2FjaCwgYmVjYXVzZSB0aGUgZnV6emVyIHdpbGwgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBtb2RpZmllZCBjaGVja3MgYW5kIGJvdW5kcy1jaGVja2luZyBsb2dpYyAqYmVmb3JlKiByZWFjaGluZyB0aGVzZSBmdW5jdGlvbnMuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIG5hbWVzOiBgaXBfbWNfbXNmZ2V0YCwgYGlwX21jX2dzZmdldGAsIGFuZCBgaXA2X21jX21zZmdldGAuIENvbmZpcm1lZC5cblxuQW5kIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGEgZmV3IG90aGVyczogYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAsIGBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyYCwgYGlwdjZfZ2V0X21zZmlsdGVyYCwgYW5kIGBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXJgLiBTaW5jZSBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYCBhbmQgYGlwdjZfZ2V0X21zZmlsdGVyYCBhcmUgc3RhdGljLCB0aGV5IG1pZ2h0IGJlIGlubGluZWQuIEV2ZW4gdGhvdWdoIHRoZXkgYXJlIG5vdCB0aW55IChhYm91dCAzMCBsaW5lcyksIGl0IGlzIGJlc3QgdG8gYmUgc2FmZSBhbmQgdXNlIGBpcF9tY19tc2ZnZXRgLCBgaXBfbWNfZ3NmZ2V0YCwgYW5kIGBpcDZfbWNfbXNmZ2V0YC5cblxuQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBpcF9tY19tc2ZnZXRgIGlzIGluIGBuZXQvaXB2NC9pZ21wLmNgIGFuZCBpcyBjYWxsZWQgZnJvbSBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AsIGBpcF9tY19nc2ZnZXRgIGlzIGluIGBuZXQvaXB2NC9pZ21wLmNgIGFuZCBpcyBjYWxsZWQgZnJvbSBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AgYW5kIGBpcDZfbWNfbXNmZ2V0YCBpcyBpbiBgbmV0L2lwdjYvbWNhc3QuY2AgYW5kIGlzIGNhbGxlZCBmcm9tIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLlxuXG5BcyBmb3IgY29uZmlncywgYENPTkZJR19JTkVUYCBpcyBhbHdheXMgb24gZm9yIElQdjQsIGBDT05GSUdfSVBWNmAgZm9yIElQdjYsIGFuZCBgQ09ORklHX0NPTVBBVGAgZm9yIHRoZSBjb21wYXQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYzNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU1OjQ3LjQyNTczMTk0MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNTM1MzIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09NUEFUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL0tjb25maWc9MTQ3ND1jb25maWcgT0xEX1NJR0FDVElPTlxcbi0tXFxuYXJjaC9LY29uZmlnLTE0ODEtXFxuYXJjaC9LY29uZmlnOjE0ODI6Y29uZmlnIENPTVBBVF9PTERfU0lHQUNUSU9OXFxuYXJjaC9LY29uZmlnLTE0ODMtXFx0Ym9vbFxcbmFyY2gvS2NvbmZpZy0xNDg0LVxcbmFyY2gvS2NvbmZpZzoxNDg1OmNvbmZpZyBDT01QQVRfMzJCSVRfVElNRVxcbmFyY2gvS2NvbmZpZy0xNDg2LVxcdGJvb2wgXFxcIlByb3ZpZGUgc3lzdGVtIGNhbGxzIGZvciAzMi1iaXQgdGltZV90XFxcIlxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTE3NDY9Y29uZmlnIEFSTTY0X1RBR0dFRF9BRERSX0FCSVxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE3NTQtXFxuYXJjaC9hcm02NC9LY29uZmlnOjE3NTU6bWVudWNvbmZpZyBDT01QQVRcXG5hcmNoL2FybTY0L0tjb25maWctMTc1Ni1cXHRib29sIFxcXCJLZXJuZWwgc3VwcG9ydCBmb3IgMzItYml0IEVMMFxcXCJcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0xNzc1PWNvbmZpZyBLVVNFUl9IRUxQRVJTXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTgwMS1cXG5hcmNoL2FybTY0L0tjb25maWc6MTgwMjpjb25maWcgQ09NUEFUX1ZEU09cXG5hcmNoL2FybTY0L0tjb25maWctMTgwMy1cXHRib29sIFxcXCJFbmFibGUgdkRTTyBmb3IgMzItYml0IGFwcGxpY2F0aW9uc1xcXCJcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0xODE1PWNvbmZpZyBUSFVNQjJfQ09NUEFUX1ZEU09cXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xODIyLVxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxODIzOmNvbmZpZyBDT01QQVRfQUxJR05NRU5UX0ZJWFVQU1xcbmFyY2gvYXJtNjQvS2NvbmZpZy0xODI0LVxcdGJvb2wgXFxcIkZpeCB1cCBtaXNhbGlnbmVkIG11bHRpLXdvcmQgbG9hZHMgYW5kIHN0b3JlcyBpbiB1c2VyIHNwYWNlXFxcIlxcbi0tXFxuYXJjaC9taXBzL0tjb25maWc9MzA3OD1jb25maWcgTUlQUzMyX0NPTVBBVFxcbi0tXFxuYXJjaC9taXBzL0tjb25maWctMzA4MC1cXG5hcmNoL21pcHMvS2NvbmZpZzozMDgxOmNvbmZpZyBDT01QQVRcXG5hcmNoL21pcHMvS2NvbmZpZy0zMDgyLVxcdGJvb2xcXG4tLVxcbmFyY2gvcGFyaXNjL0tjb25maWc9MzU4PXNvdXJjZSBcXFwia2VybmVsL0tjb25maWcuaHpcXFwiXFxuYXJjaC9wYXJpc2MvS2NvbmZpZy0zNTktXFxuYXJjaC9wYXJpc2MvS2NvbmZpZzozNjA6Y29uZmlnIENPTVBBVFxcbmFyY2gvcGFyaXNjL0tjb25maWctMzYxLVxcdGJvb2wgXFxcIktlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgYmluYXJpZXNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0zNDg9Y29uZmlnIFBBTklDX1RJTUVPVVRcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTM1MS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzozNTI6Y29uZmlnIENPTVBBVFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTM1My1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgMzJiaXQgYmluYXJpZXNcXFwiXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTExMj1jb25maWcgQVJDSF9IQVNfR0VORVJJQ19DUkFTSEtFUk5FTF9SRVNFUlZBVElPTlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExMTQtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjExMTU6Y29uZmlnIENPTVBBVFxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTE2LVxcdGJvb2wgXFxcIktlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgVS1tb2RlXFxcIlxcbi0tXFxuYXJjaC9zcGFyYy9LY29uZmlnPTQ0Nz1lbmRtZW51XFxuYXJjaC9zcGFyYy9LY29uZmlnLTQ0OC1cXG5hcmNoL3NwYXJjL0tjb25maWc6NDQ5OmNvbmZpZyBDT01QQVRcXG5hcmNoL3NwYXJjL0tjb25maWctNDUwLVxcdGJvb2xcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9MjE2Mj1jb25maWcgSE9UUExVR19DUFVcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjE2NS1cXG5hcmNoL3g4Ni9LY29uZmlnOjIxNjY6Y29uZmlnIENPTVBBVF9WRFNPXFxuYXJjaC94ODYvS2NvbmZpZy0yMTY3LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gveDg2L0tjb25maWc9MzEwMD1jb25maWcgWDg2X1gzMl9BQklcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMzExMy1cXG5hcmNoL3g4Ni9LY29uZmlnOjMxMTQ6Y29uZmlnIENPTVBBVF8zMlxcbmFyY2gveDg2L0tjb25maWctMzExNS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTMxMTktXFxuYXJjaC94ODYvS2NvbmZpZzozMTIwOmNvbmZpZyBDT01QQVRcXG5hcmNoL3g4Ni9LY29uZmlnLTMxMjEtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0zMTIzLVxcbmFyY2gveDg2L0tjb25maWc6MzEyNDpjb25maWcgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UXFxuYXJjaC94ODYvS2NvbmZpZy0zMTI1LVxcdGRlZl9ib29sIHlcXG4tLVxcbmZzL0tjb25maWcuYmluZm10PTMxPWNvbmZpZyBCSU5GTVRfRUxGX0tVTklUX1RFU1RcXG4tLVxcbmZzL0tjb25maWcuYmluZm10LTQwLVxcbmZzL0tjb25maWcuYmluZm10OjQxOmNvbmZpZyBDT01QQVRfQklORk1UX0VMRlxcbmZzL0tjb25maWcuYmluZm10LTQyLVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWc9MzIzPWNvbmZpZyBTSFVGRkxFX1BBR0VfQUxMT0NBVE9SXFxuLS1cXG5tbS9LY29uZmlnLTM0NS1cXG5tbS9LY29uZmlnOjM0Njpjb25maWcgQ09NUEFUX0JSS1xcbm1tL0tjb25maWctMzQ3LVxcdGJvb2wgXFxcIkRpc2FibGUgaGVhcCByYW5kb21pemF0aW9uXFxcIlxcbi0tXFxubmV0L0tjb25maWc9Mjk9Y29uZmlnIFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVNcXG4tLVxcbm5ldC9LY29uZmlnLTM0LVxcbm5ldC9LY29uZmlnOjM1OmNvbmZpZyBDT01QQVRfTkVUTElOS19NRVNTQUdFU1xcbm5ldC9LY29uZmlnLTM2LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTU6NDguOTUxMDkxNjY1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjE5OTM2NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNdWx0aWNhc3QgU291cmNlIEZpbHRlcmluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYENPTVBBVGAgaXMgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24sIHByaW1hcmlseSByZWxldmFudCBmb3IgMzItYml0IGNvbXBhdGliaWxpdHkuIFdlIGRvbid0IG5lY2Vzc2FyaWx5IG5lZWQgdG8gZXhwbGljaXRseSBsaXN0IGl0IGJlY2F1c2UgdGhlIGNvZGUgcGF0aCB3aXRob3V0IGBDT01QQVRgIGlzIGFsc28gbW9kaWZpZWQgYW5kIHdpbGwgYmUgZnV6emVkLiBUaGUgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZCBhcmUgYElORVRgIGFuZCBgSVBWNmAuICBTaW5jZSBgSU5FVGAgaXMgYSBnaXZlbiBmb3IgbmV0d29ya2luZywgd2UnbGwganVzdCBmbGFnIGBJUFY2YC5cblxuTm93LCByZXZpZXdpbmcgdGhlIHBhdGNoLCB0aGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBib3VuZHMgY2hlY2tpbmcgd2l0aGluIGBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgLCBgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcmAsIGBkb19pcF9nZXRzb2Nrb3B0YCwgYGlwdjZfZ2V0X21zZmlsdGVyYCwgYW5kIGBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXJgLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIG5vdyBjYWxjdWxhdGVzIGBtYXhfbnVtc3JjYCwgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNvdXJjZXMgdGhhdCBjYW4gZml0IGluIHRoZSB1c2VyLXNwYWNlIGJ1ZmZlciwgYW5kIGNvbnN0cmFpbnMgYGdzZi5nZl9udW1zcmNgICh0aGUgbnVtYmVyIG9mIHNvdXJjZXMpIHRvIGJlIG5vIGxhcmdlciB0aGFuIHRoaXMgbWF4aW11bS4gVGhpcyBkaXJlY3RseSBhZGRyZXNzZXMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIGR1cmluZyB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJvdGVjdGlvbiBhZ2FpbnN0IG1lbW9yeSBjb3JydXB0aW9uLCBhbmQgZGVmaW5pdGVseSBkZW1hbmRzIGZ1enppbmcuXG5cbk15IGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOiBgaXBfbWNfbXNmZ2V0YCwgYGlwX21jX2dzZmdldGAsIGFuZCBgaXA2X21jX21zZmdldGAuIFdlIGRlZmluaXRlbHkgbmVlZCB0byB0ZXN0IHRoZSBjaGFuZ2VzIHdpdGhpbiBgZG9faXBfZ2V0c29ja29wdGAgYW5kIGBkb19pcHY2X2dldHNvY2tvcHRgLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gdGhvc2UgZnVuY3Rpb24gZXhwb3J0cy4gYGlwX21jX2dzZmdldGAgaXMgaW5kZWVkIGV4cG9ydGVkIGFuZCB1c2VkIGluIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYC4gQW5kIGBpcDZfbWNfbXNmZ2V0YCBpcyBleHBvcnRlZCBhbmQgdXNlZCBpbiBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYC4gRXhjZWxsZW50LlxuXG5TbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja3MgcmVsYXRlZCB0byBtdWx0aWNhc3Qgc291cmNlIGZpbHRlcmluZyAoc3BlY2lmaWNhbGx5IGZvciBgSVBfTVNGSUxURVJgIGFuZCBgTUNBU1RfTVNGSUxURVJgIHNvY2tldCBvcHRpb25zIGluIElQdjQgYW5kIElQdjYpLiBUaGlzIGlzIHRvIHByZXZlbnQgdXNlci1zcGFjZSBwcm92aWRlZCBzb3VyY2UgbGlzdHMgZnJvbSBvdmVyZmxvd2luZyBpbnRlcm5hbCBidWZmZXJzLiAgVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgYW5kIHRodXMgc2hvdWxkIGJlIHRob3JvdWdobHkgZnV6emVkIHRvIHZhbGlkYXRlIHRoZSBib3VuZHMgY2hlY2tpbmcgbG9naWMgYW5kIHJ1bGUgb3V0IHJlZ3Jlc3Npb25zLiBgSVBWNmAgaXMgdGhlIGtleSBjb25maWcgZm9yIHRoaXMgdGVzdC5cblxuTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU2OSwiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTU6NTkuNTcxMDMxMzY0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUyNDM5MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tY19tc2ZnZXRcIixcbiAgICBcImlwX21jX2dzZmdldFwiLFxuICAgIFwiaXA2X21jX21zZmdldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGZvciB0aGUgbnVtYmVyIG9mIG11bHRpY2FzdCBzb3VyY2VzIChgbWF4X251bXNyY2ApIGluIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHNvY2tldCBvcHRpb25zIChgSVBfTVNGSUxURVJgLCBgTUNBU1RfTVNGSUxURVJgKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBoYW5kbGluZyBsYXJnZSBzb3VyY2UgbGlzdHMgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBib3VuZHMgY2hlY2tpbmcgbG9naWMgaXMgY29ycmVjdCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tY19tc2ZnZXRcIixcbiAgICBcImlwX21jX2dzZmdldFwiLFxuICAgIFwiaXA2X21jX21zZmdldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGZvciB0aGUgbnVtYmVyIG9mIG11bHRpY2FzdCBzb3VyY2VzIChgbWF4X251bXNyY2ApIGluIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHNvY2tldCBvcHRpb25zIChgSVBfTVNGSUxURVJgLCBgTUNBU1RfTVNGSUxURVJgKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBoYW5kbGluZyBsYXJnZSBzb3VyY2UgbGlzdHMgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBib3VuZHMgY2hlY2tpbmcgbG9naWMgaXMgY29ycmVjdCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowfpdjz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 09:53:11 +0000 UTC FinishedAt: 2026-08-06 09:56:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b0057c68df711bf6a62033c072ac61c4f9d3cbc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b0057c68df711bf6a62033c072ac61c4f9d3cbc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6" ], "series_id": "7d7b846e-a10f-4bb1-b5d9-0975a01e5a78" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_mc_msfget", "ip_mc_gsfget", "ip6_mc_msfget" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA5OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tY19tc2ZnZXQmIzM0OywKICAgICYjMzQ7aXBfbWNfZ3NmZ2V0JiMzNDssCiAgICAmIzM0O2lwNl9tY19tc2ZnZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgZm9yIHRoZSBudW1iZXIgb2YgbXVsdGljYXN0IHNvdXJjZXMgKGBtYXhfbnVtc3JjYCkgaW4gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgc29ja2V0IG9wdGlvbnMgKGBJUF9NU0ZJTFRFUmAsIGBNQ0FTVF9NU0ZJTFRFUmApLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aGVuIGhhbmRsaW5nIGxhcmdlIHNvdXJjZSBsaXN0cyBwcm92aWRlZCBieSB1c2Vyc3BhY2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGJvdW5kcyBjaGVja2luZyBsb2dpYyBpcyBjb3JyZWN0IGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlNjE1YTlmODU3ZGQ1NTBkMTVlZGVlZmI4ZGU4Y2JhZDA1MTY1MWI1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgNiAwOTo1NDozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuaW5kZXggYTU1ZWYzMjdlYzkzMi4uMmU0ZTE5YjkwNjQ1YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbkBAIC0xNDQ3LDYgJiM0MzsxNDQ3LDcgQEAgc3RhdGljIGludCBpcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIHtcbiBcdGNvbnN0IGludCBzaXplMCA9IG9mZnNldG9mKHN0cnVjdCBncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpO1xuIFx0c3RydWN0IGdyb3VwX2ZpbHRlciBnc2Y7XG4mIzQzO1x0dW5zaWduZWQgaW50IG1heF9udW1zcmM7XG4gXHRpbnQgbnVtLCBnc2Zfc2l6ZTtcbiBcdGludCBlcnI7XG4gXG5AQCAtMTQ1NSw2ICYjNDM7MTQ1NiwxMCBAQCBzdGF0aWMgaW50IGlwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2Z3NmLCBvcHR2YWwsIHNpemUwKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4mIzQzO1x0LyogTWF4aW11bSBudW1iZXIgb2Ygc291cmNlcyB0aGF0IHdvdWxkIGZpdCBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciovXG4mIzQzO1x0bWF4X251bXNyYyA9IChsZW4gLSBzaXplMCkgLyBzaXplb2YoZ3NmLmdmX3NsaXN0X2ZsZXhbMF0pO1xuJiM0MztcdGdzZi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdzZi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xuJiM0MztcbiBcdG51bSA9IGdzZi5nZl9udW1zcmM7XG4gXHRlcnIgPSBpcF9tY19nc2ZnZXQoc2ssIFx1MDAyNmdzZiwgb3B0dmFsLFxuIFx0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCBncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpKTtcbkBAIC0xNDc0LDYgJiM0MzsxNDc5LDcgQEAgc3RhdGljIGludCBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbiB7XG4gXHRjb25zdCBpbnQgc2l6ZTAgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7XG4gXHRzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciBnZjMyO1xuJiM0MztcdHVuc2lnbmVkIGludCBtYXhfbnVtc3JjO1xuIFx0c3RydWN0IGdyb3VwX2ZpbHRlciBnZjtcbiBcdGludCBudW07XG4gXHRpbnQgZXJyO1xuQEAgLTE0ODMsNiAmIzQzOzE0ODksOSBAQCBzdGF0aWMgaW50IGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmdmMzIsIG9wdHZhbCwgc2l6ZTApKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcbiYjNDM7XHRtYXhfbnVtc3JjID0gKGxlbiAtIHNpemUwKSAvIHNpemVvZihnZjMyLmdmX3NsaXN0X2ZsZXhbMF0pO1xuJiM0MztcdGdmMzIuZ2ZfbnVtc3JjID0gbWluX3QodTMyLCBnZjMyLmdmX251bXNyYywgbWF4X251bXNyYyk7XG4mIzQzO1xuIFx0Z2YuZ2ZfaW50ZXJmYWNlID0gZ2YzMi5nZl9pbnRlcmZhY2U7XG4gXHRnZi5nZl9mbW9kZSA9IGdmMzIuZ2ZfZm1vZGU7XG4gXHRudW0gPSBnZi5nZl9udW1zcmMgPSBnZjMyLmdmX251bXNyYztcbkBAIC0xNzA1LDYgJiM0MzsxNzE0LDcgQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0c3dpdGNoIChvcHRuYW1lKSB7XG4gXHRjYXNlIElQX01TRklMVEVSOlxuIFx0e1xuJiM0MztcdFx0dW5zaWduZWQgaW50IG1heF9udW1zcmM7XG4gXHRcdHN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7XG4gXG4gXHRcdGlmIChsZW4gXHUwMDNjIElQX01TRklMVEVSX1NJWkUoMCkpIHtcbkBAIC0xNzE1LDYgJiM0MzsxNzI1LDEyIEBAIGludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4mIzQzO1x0XHQvKiBEbyBub3Qgd3JpdGUgbW9yZSBzb3VyY2VzIHRoYW4gdGhlIGNhbGxlciBzYWlkIG9wdHZhbCBjYW5cbiYjNDM7XHRcdCAqIGhvbGQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG1heF9udW1zcmMgPSAobGVuIC0gSVBfTVNGSUxURVJfU0laRSgwKSkgL1xuJiM0MztcdFx0XHQgICAgIHNpemVvZihtc2YuaW1zZl9zbGlzdF9mbGV4WzBdKTtcbiYjNDM7XHRcdG1zZi5pbXNmX251bXNyYyA9IG1pbl90KHUzMiwgbXNmLmltc2ZfbnVtc3JjLCBtYXhfbnVtc3JjKTtcbiBcdFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcdTAwMjZtc2YsIG9wdHZhbCwgb3B0bGVuKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG5pbmRleCBiNGM5Nzc0MzRjMmUwLi4yYzNmYmRlN2NiMDU4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbkBAIC0xMDEyLDYgJiM0MzsxMDEyLDcgQEAgc3RhdGljIGludCBpcHY2X2dldF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4ge1xuIFx0Y29uc3QgaW50IHNpemUwID0gb2Zmc2V0b2Yoc3RydWN0IGdyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7XG4gXHRzdHJ1Y3QgZ3JvdXBfZmlsdGVyIGdzZjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbWF4X251bXNyYztcbiBcdGludCBudW07XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTEwMjEsNiAmIzQzOzEwMjIsMTEgQEAgc3RhdGljIGludCBpcHY2X2dldF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFx0aWYgKGdzZi5nZl9ncm91cC5zc19mYW1pbHkgIT0gQUZfSU5FVDYpXG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiYjNDM7XG4mIzQzO1x0LyogTnVtYmVyIG9mIHNvdXJjZXMgdGhhdCB3b3VsZCBmaXQgaW4gdGhlIHVzZXJzcGFjZSBidWZmZXIgKi9cbiYjNDM7XHRtYXhfbnVtc3JjID0gKGxlbiAtIHNpemUwKSAvIHNpemVvZihnc2YuZ2Zfc2xpc3RfZmxleFswXSk7XG4mIzQzO1x0Z3NmLmdmX251bXNyYyA9IG1pbl90KHUzMiwgZ3NmLmdmX251bXNyYywgbWF4X251bXNyYyk7XG4mIzQzO1xuIFx0bnVtID0gZ3NmLmdmX251bXNyYztcbiBcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcbiBcdGVyciA9IGlwNl9tY19tc2ZnZXQoc2ssIFx1MDAyNmdzZiwgb3B0dmFsLCBzaXplMCk7XG5AQCAtMTA0MSw2ICYjNDM7MTA0Nyw3IEBAIHN0YXRpYyBpbnQgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbiB7XG4gXHRjb25zdCBpbnQgc2l6ZTAgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7XG4gXHRzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciBnZjMyO1xuJiM0MztcdHVuc2lnbmVkIGludCBtYXhfbnVtc3JjO1xuIFx0c3RydWN0IGdyb3VwX2ZpbHRlciBnZjtcbiBcdGludCBlcnI7XG4gXHRpbnQgbnVtO1xuQEAgLTEwNTAsNiAmIzQzOzEwNTcsMTAgQEAgc3RhdGljIGludCBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFxuIFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmdmMzIsIG9wdHZhbCwgc2l6ZTApKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0bWF4X251bXNyYyA9IChsZW4gLSBzaXplMCkgLyBzaXplb2YoZ2YzMi5nZl9zbGlzdF9mbGV4WzBdKTtcbiYjNDM7XHRnZjMyLmdmX251bXNyYyA9IG1pbl90KHUzMiwgZ2YzMi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xuJiM0MztcbiBcdGdmLmdmX2ludGVyZmFjZSA9IGdmMzIuZ2ZfaW50ZXJmYWNlO1xuIFx0Z2YuZ2ZfZm1vZGUgPSBnZjMyLmdmX2Ztb2RlO1xuIFx0bnVtID0gZ2YuZ2ZfbnVtc3JjID0gZ2YzMi5nZl9udW1zcmM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF9tY19tc2ZnZXQmIzM0OywKICAgICYjMzQ7aXBfbWNfZ3NmZ2V0JiMzNDssCiAgICAmIzM0O2lwNl9tY19tc2ZnZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgZm9yIHRoZSBudW1iZXIgb2YgbXVsdGljYXN0IHNvdXJjZXMgKGBtYXhfbnVtc3JjYCkgaW4gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgc29ja2V0IG9wdGlvbnMgKGBJUF9NU0ZJTFRFUmAsIGBNQ0FTVF9NU0ZJTFRFUmApLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aGVuIGhhbmRsaW5nIGxhcmdlIHNvdXJjZSBsaXN0cyBwcm92aWRlZCBieSB1c2Vyc3BhY2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdGFjayBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGJvdW5kcyBjaGVja2luZyBsb2dpYyBpcyBjb3JyZWN0IGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNjE1YTlmODU3ZGQ1NTBkMTVlZGVlZmI4ZGU4Y2JhZDA1MTY1MWI1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAwOTo1NDozNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCmluZGV4IGE1NWVmMzI3ZWM5MzIuLjJlNGUxOWI5MDY0NWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwpAQCAtMTQ0Nyw2ICYjNDM7MTQ0Nyw3IEBAIHN0YXRpYyBpbnQgaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwKIHsKIAljb25zdCBpbnQgc2l6ZTAgPSBvZmZzZXRvZihzdHJ1Y3QgZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KTsKIAlzdHJ1Y3QgZ3JvdXBfZmlsdGVyIGdzZjsKJiM0MzsJdW5zaWduZWQgaW50IG1heF9udW1zcmM7CiAJaW50IG51bSwgZ3NmX3NpemU7CiAJaW50IGVycjsKIApAQCAtMTQ1NSw2ICYjNDM7MTQ1NiwxMCBAQCBzdGF0aWMgaW50IGlwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsCiAJaWYgKGNvcHlfZnJvbV9zb2NrcHRyKCZhbXA7Z3NmLCBvcHR2YWwsIHNpemUwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKJiM0MzsJLyogTWF4aW11bSBudW1iZXIgb2Ygc291cmNlcyB0aGF0IHdvdWxkIGZpdCBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlciovCiYjNDM7CW1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdzZi5nZl9zbGlzdF9mbGV4WzBdKTsKJiM0MzsJZ3NmLmdmX251bXNyYyA9IG1pbl90KHUzMiwgZ3NmLmdmX251bXNyYywgbWF4X251bXNyYyk7CiYjNDM7CiAJbnVtID0gZ3NmLmdmX251bXNyYzsKIAllcnIgPSBpcF9tY19nc2ZnZXQoc2ssICZhbXA7Z3NmLCBvcHR2YWwsCiAJCQkgICBvZmZzZXRvZihzdHJ1Y3QgZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KSk7CkBAIC0xNDc0LDYgJiM0MzsxNDc5LDcgQEAgc3RhdGljIGludCBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwKIHsKIAljb25zdCBpbnQgc2l6ZTAgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7CiAJc3RydWN0IGNvbXBhdF9ncm91cF9maWx0ZXIgZ2YzMjsKJiM0MzsJdW5zaWduZWQgaW50IG1heF9udW1zcmM7CiAJc3RydWN0IGdyb3VwX2ZpbHRlciBnZjsKIAlpbnQgbnVtOwogCWludCBlcnI7CkBAIC0xNDgzLDYgJiM0MzsxNDg5LDkgQEAgc3RhdGljIGludCBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwKIAlpZiAoY29weV9mcm9tX3NvY2twdHIoJmFtcDtnZjMyLCBvcHR2YWwsIHNpemUwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKJiM0MzsJbWF4X251bXNyYyA9IChsZW4gLSBzaXplMCkgLyBzaXplb2YoZ2YzMi5nZl9zbGlzdF9mbGV4WzBdKTsKJiM0MzsJZ2YzMi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdmMzIuZ2ZfbnVtc3JjLCBtYXhfbnVtc3JjKTsKJiM0MzsKIAlnZi5nZl9pbnRlcmZhY2UgPSBnZjMyLmdmX2ludGVyZmFjZTsKIAlnZi5nZl9mbW9kZSA9IGdmMzIuZ2ZfZm1vZGU7CiAJbnVtID0gZ2YuZ2ZfbnVtc3JjID0gZ2YzMi5nZl9udW1zcmM7CkBAIC0xNzA1LDYgJiM0MzsxNzE0LDcgQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCXN3aXRjaCAob3B0bmFtZSkgewogCWNhc2UgSVBfTVNGSUxURVI6CiAJewomIzQzOwkJdW5zaWduZWQgaW50IG1heF9udW1zcmM7CiAJCXN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7CiAKIAkJaWYgKGxlbiAmbHQ7IElQX01TRklMVEVSX1NJWkUoMCkpIHsKQEAgLTE3MTUsNiAmIzQzOzE3MjUsMTIgQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0OwogCQl9CiYjNDM7CQkvKiBEbyBub3Qgd3JpdGUgbW9yZSBzb3VyY2VzIHRoYW4gdGhlIGNhbGxlciBzYWlkIG9wdHZhbCBjYW4KJiM0MzsJCSAqIGhvbGQuCiYjNDM7CQkgKi8KJiM0MzsJCW1heF9udW1zcmMgPSAobGVuIC0gSVBfTVNGSUxURVJfU0laRSgwKSkgLwomIzQzOwkJCSAgICAgc2l6ZW9mKG1zZi5pbXNmX3NsaXN0X2ZsZXhbMF0pOwomIzQzOwkJbXNmLmltc2ZfbnVtc3JjID0gbWluX3QodTMyLCBtc2YuaW1zZl9udW1zcmMsIG1heF9udW1zcmMpOwogCQllcnIgPSBpcF9tY19tc2ZnZXQoc2ssICZhbXA7bXNmLCBvcHR2YWwsIG9wdGxlbik7CiAJCWdvdG8gb3V0OwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCBiNGM5Nzc0MzRjMmUwLi4yYzNmYmRlN2NiMDU4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC0xMDEyLDYgJiM0MzsxMDEyLDcgQEAgc3RhdGljIGludCBpcHY2X2dldF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsCiB7CiAJY29uc3QgaW50IHNpemUwID0gb2Zmc2V0b2Yoc3RydWN0IGdyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7CiAJc3RydWN0IGdyb3VwX2ZpbHRlciBnc2Y7CiYjNDM7CXVuc2lnbmVkIGludCBtYXhfbnVtc3JjOwogCWludCBudW07CiAJaW50IGVycjsKIApAQCAtMTAyMSw2ICYjNDM7MTAyMiwxMSBAQCBzdGF0aWMgaW50IGlwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCwKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJaWYgKGdzZi5nZl9ncm91cC5zc19mYW1pbHkgIT0gQUZfSU5FVDYpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKJiM0MzsKJiM0MzsJLyogTnVtYmVyIG9mIHNvdXJjZXMgdGhhdCB3b3VsZCBmaXQgaW4gdGhlIHVzZXJzcGFjZSBidWZmZXIgKi8KJiM0MzsJbWF4X251bXNyYyA9IChsZW4gLSBzaXplMCkgLyBzaXplb2YoZ3NmLmdmX3NsaXN0X2ZsZXhbMF0pOwomIzQzOwlnc2YuZ2ZfbnVtc3JjID0gbWluX3QodTMyLCBnc2YuZ2ZfbnVtc3JjLCBtYXhfbnVtc3JjKTsKJiM0MzsKIAludW0gPSBnc2YuZ2ZfbnVtc3JjOwogCXNvY2tvcHRfbG9ja19zb2NrKHNrKTsKIAllcnIgPSBpcDZfbWNfbXNmZ2V0KHNrLCAmYW1wO2dzZiwgb3B0dmFsLCBzaXplMCk7CkBAIC0xMDQxLDYgJiM0MzsxMDQ3LDcgQEAgc3RhdGljIGludCBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLAogewogCWNvbnN0IGludCBzaXplMCA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KTsKIAlzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciBnZjMyOwomIzQzOwl1bnNpZ25lZCBpbnQgbWF4X251bXNyYzsKIAlzdHJ1Y3QgZ3JvdXBfZmlsdGVyIGdmOwogCWludCBlcnI7CiAJaW50IG51bTsKQEAgLTEwNTAsNiAmIzQzOzEwNTcsMTAgQEAgc3RhdGljIGludCBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLAogCiAJaWYgKGNvcHlfZnJvbV9zb2NrcHRyKCZhbXA7Z2YzMiwgb3B0dmFsLCBzaXplMCkpCiAJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwltYXhfbnVtc3JjID0gKGxlbiAtIHNpemUwKSAvIHNpemVvZihnZjMyLmdmX3NsaXN0X2ZsZXhbMF0pOwomIzQzOwlnZjMyLmdmX251bXNyYyA9IG1pbl90KHUzMiwgZ2YzMi5nZl9udW1zcmMsIG1heF9udW1zcmMpOwomIzQzOwogCWdmLmdmX2ludGVyZmFjZSA9IGdmMzIuZ2ZfaW50ZXJmYWNlOwogCWdmLmdmX2Ztb2RlID0gZ2YzMi5nZl9mbW9kZTsKIAludW0gPSBnZi5nZl9udW1zcmMgPSBnZjMyLmdmX251bXNyYzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU2OQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JraW5nIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AgYW5kIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoOyB0aGV5JiMzOTtyZSBhZGRpbmcgYm91bmRzIGNoZWNraW5nIGZvciB0aGUgYG1heF9udW1zcmNgIHZhbHVlIGluIG11bHRpY2FzdCBzb2NrZXQgb3B0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGUgYWZmZWN0ZWQgZnVuY3Rpb25zIGFyZSBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYCwgYGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXJgLCBgZG9faXBfZ2V0c29ja29wdGAgKHNwZWNpZmljYWxseSB0aGUgYElQX01TRklMVEVSYCBjYXNlKSwgYGlwdjZfZ2V0X21zZmlsdGVyYCwgYW5kIGBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXJgLgoKR2l2ZW4gdGhpcyBpbnZvbHZlcyBjb3JlIG5ldHdvcmtpbmcsIGFuZCBzb2NrZXQgb3B0aW9ucyBhdCB0aGF0LCBteSBndXQgdGVsbHMgbWUgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgcG90ZW50aWFsLiBUaGUgY2hhbmdlcyBhcmUgZnVuZGFtZW50YWwgdG8gaG93IHRoZXNlIHN5c3RlbXMgaGFuZGxlIG11bHRpY2FzdCBmaWx0ZXJpbmcuCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZW5hYmxlIHRoZXNlIGZlYXR1cmVzIGFuZCB0aGVuIHBpbnBvaW50IHRoZSAmIzM0O2ZvY3VzIHN5bWJvbHMmIzM0OyDigJMgZXNzZW50aWFsbHksIHRoZSBlbnRyeSBwb2ludHMgdGhhdCBJIHNob3VsZCBiZSB0YXJnZXRpbmcgd2l0aCBmdXp6aW5nLiBTbywgbGV0JiMzOTtzIGxpc3QgdGhvc2UgZm9jdXMgc3ltYm9scyBhZ2FpbiB0byBiZSBzdXJlOiBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYCwgYGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXJgLCBgZG9faXBfZ2V0c29ja29wdGAsIGBpcHY2X2dldF9tc2ZpbHRlcmAsIGFuZCBgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyYC4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIHN0YXRpYywgZXhwb3J0ZWQsIGFuZCBhcmUgdGhleSBpbmxpbmVkPyBUaGF04oCZcyBjcml0aWNhbCBmb3Igc3ltYm9sIHZpc2liaWxpdHkgZm9yIGZ1enppbmcuIE9rYXksIGxldCYjMzk7cyBzZWUuIGBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgIGlzIGBzdGF0aWMgaW50YC4gYGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXJgIGlzIGFsc28gYHN0YXRpYyBpbnRgLiBgZG9faXBfZ2V0c29ja29wdGAgaXMganVzdCBgaW50YC4gYGlwdjZfZ2V0X21zZmlsdGVyYCBpcyBgc3RhdGljIGludGAuIEFuZCBgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyYCBpcyBgc3RhdGljIGludGAuCgpIb2xkIG9uLiBUaGUgcHJvbXB0IEkmIzM5O20gd29ya2luZyBmcm9tIHNwZWNpZmllcyBhIHByZWZlcmVuY2UuIEl0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIHNlbnNlLCBhcyB0aGUgbm9uLXN0YXRpYyBvbmVzIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gU28sIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgIGlzIGFjdHVhbGx5IGlubGluZWQgb3Igbm90LCBldmVuIHRob3VnaCBpdCYjMzk7cyBzdGF0aWMuIEl0IGxvb2tzIGxpa2UgaXQgaXMgY2FsbGVkIGZyb20gd2l0aGluIGBkb19pcF9nZXRzb2Nrb3B0YCwgd2hpY2ggaXMgZW5jb3VyYWdpbmcsIGJ1dCBJIHN0aWxsIG5lZWQgdG8gbWFrZSBzdXJlLiBMZXQgbWUgZ3JlcCBmb3IgYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAgdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9nZXRfbWNhc3RfbXNmaWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmM9MTQzNT1zdGF0aWMgYm9vbCBnZXRzb2Nrb3B0X25lZWRzX3J0bmwoaW50IG9wdG5hbWUpXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNDQ0LVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNDQ1OnN0YXRpYyBpbnQgaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQ0Ni1cdFx0XHRcdCBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQ3Ni1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTQ3NzpzdGF0aWMgaW50IGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNDc4LVx0XHRcdFx0XHRzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9MTUxNj1pbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzM4LVx0XHRpZiAoaW5fY29tcGF0X3N5c2NhbGwoKSlcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTczOTpcdFx0XHRlcnIgPSBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbixcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTc0MC1cdFx0XHRcdFx0XHRcdCAgIGxlbik7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3NDEtXHRcdGVsc2Vcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTc0MjpcdFx0XHRlcnIgPSBpcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc2ssIG9wdHZhbCwgb3B0bGVuLCBsZW4pO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzQzLVx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDM0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGN1cnJlbnQgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZXNlIHBvaW50czoKCioqRXhhbWluaW5nIFNvY2tldCBPcHRpb24gUmV0cmlldmFsIGZvciBJUHY0IGFuZCBJUHY2KioKCk9rYXksIHNvIGBkb19pcF9nZXRzb2Nrb3B0YCBpcyBjbGVhcmx5IHRoZSBnYXRla2VlcGVyIGZvciBJUHY0IHNvY2tldCBvcHRpb24gcmV0cmlldmFsLCB0aGUgcG9pbnQgd2hlcmUgdGhlIGtlcm5lbCBoYW5kbGVzIHRob3NlIHJlcXVlc3RzLiBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiDigJMgYW5kIGl04oCZcyBhIGNydWNpYWwgb25lIGZyb20gYSBuZXR3b3JraW5nIHBlcnNwZWN0aXZlIOKAkyBpczogd2hhdCYjMzk7cyB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbiwgdGhlIGVudHJ5IHBvaW50IGZvciBJUHY2IHNvY2tldCBvcHRpb25zPyBJcyBpdCBhIHNpbWlsYXIgZnVuY3Rpb24gd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lLCBvciBpcyB0aGUgYXJjaGl0ZWN0dXJlIGNvbXBsZXRlbHkgZGlmZmVyZW50LCB3aXRoIGEgc2VwYXJhdGUgYnJhbmNoIG9mIGNvZGUgaGFuZGxpbmcgdGhlIElQdjYgcHJvdG9jb2xzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHRoaXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIHNvY2tldCBvcHRpb24gcmV0cmlldmFsIHByb2Nlc3MgYWNyb3NzIGRpZmZlcmVudCBJUCB2ZXJzaW9ucy4gS25vd2luZyB0aGlzIGRpZmZlcmVuY2UgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGtlcm5lbCYjMzk7cyBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9nZXRfbXNmaWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTk3Nj1zdGF0aWMgaW50IGlwdjZfZ2V0c29ja29wdF9zdGlja3koc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTAwOS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMDEwOnN0YXRpYyBpbnQgaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMTEtXHRcdFx0ICAgICBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbGVuKVxuLS1cbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDQ0LVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjEwNDU6c3RhdGljIGludCBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwNDYtXHRcdFx0XHQgICAgc29ja3B0cl90IG9wdGxlbiwgaW50IGxlbilcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MTA4OT1pbnQgZG9faXB2Nl9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTExMS1cdFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTExMjpcdFx0XHRyZXR1cm4gY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbiwgbGVuKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMTEzOlx0XHRyZXR1cm4gaXB2Nl9nZXRfbXNmaWx0ZXIoc2ssIG9wdHZhbCwgb3B0bGVuLCBsZW4pO1xubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTExMTQtXHRjYXNlIElQVjZfMjI5MlBLVE9QVElPTlM6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcwMgoJCQkJCQkJb3V0cHV0OiA2MQoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgSVB2NiBTb2NrZXQgT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgZ2V0c29ja29wdGAgZnVuY3Rpb25hbGl0eSBmb3IgSVB2NiwgYW5kIHRoZSBgZG9faXB2Nl9nZXRzb2Nrb3B0YCBmdW5jdGlvbiBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQuCgpUbyBlc3RhYmxpc2ggY29udGV4dCBhbmQgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZlcmVuY2UgdGhlIElQdjQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGxpdmVzIGluIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCB1bmRlciBgZG9faXBfZ2V0c29ja29wdGAuIE5vdywgdG8gYmUgcGVyZmVjdGx5IGNsZWFyLCBgZG9faXB2Nl9nZXRzb2Nrb3B0YCBpcyBpbiBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYC4KCkl0JiMzOTtzIHNlY29uZCBuYXR1cmUgZm9yIG1lIHRvIHRoaW5rIGFib3V0IHRoZSByZWxhdGVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSBnb2luZyB0byB2ZXJpZnkgdGhhdCBJUHY0IGlzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19JTkVUYCBhbmQgdGhhdCBJUHY2IGlzLCBhcyBleHBlY3RlZCwgZ2F0ZWQgYnkgYENPTkZJR19JUFY2YC4KCkp1c3QgdG8gY292ZXIgYWxsIGJhc2VzLCBsZXQmIzM5O3MgYWxzbyBnbGFuY2UgYXQgdGhlIG1ha2VmaWxlcyBmb3IgYm90aCBgbmV0L2lwdjRgIGFuZCBgbmV0L2lwdjZgIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIGluIHRoZSBidWlsZCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3NvY2tnbHVlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTctXHQgICAgIGlwX2lucHV0Lm8gaXBfZnJhZ21lbnQubyBpcF9mb3J3YXJkLm8gaXBfb3B0aW9ucy5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZTo4Olx0ICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIGluZXRfaGFzaHRhYmxlcy5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS05LVx0ICAgICBpbmV0X3RpbWV3YWl0X3NvY2subyBpbmV0X2Nvbm5lY3Rpb25fc29jay5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB2Nl9zb2NrZ2x1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L01ha2VmaWxlPTg9aXB2Ni15IDo9XHRhZl9pbmV0Ni5vIGFueWNhc3QubyBpcDZfb3V0cHV0Lm8gaXA2X2lucHV0Lm8gYWRkcmNvbmYubyBcXFxubmV0L2lwdjYvTWFrZWZpbGUtOS1cdFx0YWRkcmxhYmVsLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlOjEwOlx0XHRyb3V0ZS5vIGlwNl9maWIubyBpcHY2X3NvY2tnbHVlLm8gbmRpc2MubyB1ZHAubyBcXFxubmV0L2lwdjYvTWFrZWZpbGUtMTEtXHRcdHJhdy5vIGljbXAubyBtY2FzdC5vIHJlYXNzZW1ibHkubyB0Y3BfaXB2Ni5vIHBpbmcubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDExCgkJCQkJCQlvdXRwdXQ6IDYxCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24gb2YgTmV0d29yayBTb2NrZXQgR2x1ZSBNb2R1bGVzKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZXNlIHNvY2tldCBnbHVlIG1vZHVsZXMgYXJlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXQgc2VlbXMgYGlwX3NvY2tnbHVlLm9gIGlzIGJlaW5nIGJ1aWx0IG5vIG1hdHRlciB3aGF0LCBhcyBsb25nIGFzIGBDT05GSUdfSU5FVGAgaXMgZW5hYmxlZCDigJMgdGhhdCYjMzk7cyBleHBlY3RlZCBzaW5jZSBJUHY0IGlzIGZ1bmRhbWVudGFsLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGlwdjZfc29ja2dsdWUub2AgaXMgb25seSBicm91Z2h0IGludG8gdGhlIGJ1aWxkIGlmIGBDT05GSUdfSVBWNmAgaXMgc2V0IHRvICYjMzk7eSYjMzk7LiBUaGF0JiMzOTtzIHRoZSBiZWhhdmlvciBJJiMzOTtkIGFudGljaXBhdGUuIEp1c3QgdG8gbWFrZSBkb3VibHkgc3VyZSwgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGluIGJvdGggYG5ldC9pcHY0L2AgYW5kIGBuZXQvaXB2Ni9gIHRvIGNvbmZpcm0gdGhlc2UgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBjb25kaXRpb25zIGRpcmVjdGx5LCBidXQgYmFzZWQgb24gZXhwZXJpZW5jZSwgdGhpcyBpcyB0aGUgcGF0dGVybiBJJiMzOTtkIGV4cGVjdC4gSSBoYXZlIHRoZSBmZWVsaW5nIHRoaXMgaXMgbW9yZSBvZiBhIHNhbml0eSBjaGVjayB0aGFuIGFueXRoaW5nIGVsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJTkVUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zMzgtXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxubmV0L2lwdjQvS2NvbmZpZy0zNDAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogQUggdHJhbnNmb3JtYXRpb25cJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cbm5ldC9pcHY0L0tjb25maWc6MzU0OmNvbmZpZyBJTkVUX0VTUFxubmV0L2lwdjQvS2NvbmZpZy0zNTUtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zNjgtXG5uZXQvaXB2NC9LY29uZmlnOjM2OTpjb25maWcgSU5FVF9FU1BfT0ZGTE9BRFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXHR0cmlzdGF0ZSBcJiMzNDtJUDogRVNQIHRyYW5zZm9ybWF0aW9uIG9mZmxvYWRcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTM4MS1cbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXG5uZXQvaXB2NC9LY29uZmlnLTM4My1cdGJvb2wgXCYjMzQ7SVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXG5uZXQvaXB2NC9LY29uZmlnOjM5NDpjb25maWcgSU5FVF9JUENPTVBcbm5ldC9pcHY0L0tjb25maWctMzk1LVx0dHJpc3RhdGUgXCYjMzQ7SVA6IElQQ29tcCB0cmFuc2Zvcm1hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDAzLVxubmV0L2lwdjQvS2NvbmZpZzo0MDQ6Y29uZmlnIElORVRfVEFCTEVfUEVSVFVSQl9PUkRFUlxubmV0L2lwdjQvS2NvbmZpZy00MDUtXHRpbnQgXCYjMzQ7SU5FVDogU291cmNlIHBvcnQgcGVydHVyYmF0aW9uIHRhYmxlIHNpemUgKGFzIHBvd2VyIG9mIDIpXCYjMzQ7IGlmIEVYUEVSVFxuLS1cbm5ldC9pcHY0L0tjb25maWctNDEzLVxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcbm5ldC9pcHY0L0tjb25maWctNDE1LVx0dHJpc3RhdGVcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQxOC1cbm5ldC9pcHY0L0tjb25maWc6NDE5OmNvbmZpZyBJTkVUX1RVTk5FTFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY0L0tjb25maWctNDIyLVxubmV0L2lwdjQvS2NvbmZpZzo0MjM6Y29uZmlnIElORVRfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00MjQtXHR0cmlzdGF0ZSBcJiMzNDtJTkVUOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQzNC1cbm5ldC9pcHY0L0tjb25maWc6NDM1OmNvbmZpZyBJTkVUX1RDUF9ESUFHXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cdGRlcGVuZHMgb24gSU5FVF9ESUFHXG4tLVxubmV0L2lwdjQvS2NvbmZpZy00MzgtXG5uZXQvaXB2NC9LY29uZmlnOjQzOTpjb25maWcgSU5FVF9VRFBfRElBR1xubmV0L2lwdjQvS2NvbmZpZy00NDAtXHR0cmlzdGF0ZSBcJiMzNDtVRFA6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWctNDQ2LVxubmV0L2lwdjQvS2NvbmZpZzo0NDc6Y29uZmlnIElORVRfUkFXX0RJQUdcbm5ldC9pcHY0L0tjb25maWctNDQ4LVx0dHJpc3RhdGUgXCYjMzQ7UkFXOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTQ1NC1cbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxubmV0L2lwdjQvS2NvbmZpZy00NTYtXHRib29sIFwmIzM0O0lORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQVjYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L0tjb25maWctNS1cbm5ldC9pcHY2L0tjb25maWc6NjptZW51Y29uZmlnIElQVjZcbm5ldC9pcHY2L0tjb25maWctNy1cdGJvb2wgXCYjMzQ7VGhlIElQdjYgcHJvdG9jb2xcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE5PWlmIElQVjZcbm5ldC9pcHY2L0tjb25maWctMjAtXG5uZXQvaXB2Ni9LY29uZmlnOjIxOmNvbmZpZyBJUFY2X1JPVVRFUl9QUkVGXG5uZXQvaXB2Ni9LY29uZmlnLTIyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZXIgUHJlZmVyZW5jZSAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMwLVxubmV0L2lwdjYvS2NvbmZpZzozMTpjb25maWcgSVBWNl9ST1VURV9JTkZPXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVx0Ym9vbCBcJiMzNDtJUHY2OiBSb3V0ZSBJbmZvcm1hdGlvbiAoUkZDIDQxOTEpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTM4LVxubmV0L2lwdjYvS2NvbmZpZzozOTpjb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxubmV0L2lwdjYvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7SVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTExLVxubmV0L2lwdjYvS2NvbmZpZzoxMTI6Y29uZmlnIElQVjZfTUlQNlxubmV0L2lwdjYvS2NvbmZpZy0xMTMtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBNb2JpbGl0eVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMTE5LVxubmV0L2lwdjYvS2NvbmZpZzoxMjA6Y29uZmlnIElQVjZfSUxBXG5uZXQvaXB2Ni9LY29uZmlnLTEyMS1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElkZW50aWZpZXIgTG9jYXRvciBBZGRyZXNzaW5nIChJTEEpXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZz0xNDY9Y29uZmlnIElORVQ2X1RVTk5FTFxuLS1cbm5ldC9pcHY2L0tjb25maWctMTQ5LVxubmV0L2lwdjYvS2NvbmZpZzoxNTA6Y29uZmlnIElQVjZfVlRJXG5uZXQvaXB2Ni9LY29uZmlnLTE1MS1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgKHNlY3VyZSkgSVB2NjogdHVubmVsaW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0xNjEtXG5uZXQvaXB2Ni9LY29uZmlnOjE2Mjpjb25maWcgSVBWNl9TSVRcbm5ldC9pcHY2L0tjb25maWctMTYzLVx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVB2Ni1pbi1JUHY0IHR1bm5lbCAoU0lUIGRyaXZlcilcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE3Ni1cbm5ldC9pcHY2L0tjb25maWc6MTc3OmNvbmZpZyBJUFY2X1NJVF82UkRcbm5ldC9pcHY2L0tjb25maWctMTc4LVx0Ym9vbCBcJiMzNDtJUHY2OiBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZSRClcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTE5NS1cbm5ldC9pcHY2L0tjb25maWc6MTk2OmNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXG5uZXQvaXB2Ni9LY29uZmlnLTE5Ny1cdGJvb2xcbm5ldC9pcHY2L0tjb25maWctMTk4LVxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjA5LVxubmV0L2lwdjYvS2NvbmZpZzoyMTA6Y29uZmlnIElQVjZfR1JFXG5uZXQvaXB2Ni9LY29uZmlnLTIxMS1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IEdSRSB0dW5uZWxcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIyNy1cbm5ldC9pcHY2L0tjb25maWc6MjI4OmNvbmZpZyBJUFY2X0ZPVVxubmV0L2lwdjYvS2NvbmZpZy0yMjktXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjMxLVxubmV0L2lwdjYvS2NvbmZpZzoyMzI6Y29uZmlnIElQVjZfRk9VX1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0yMzMtXHR0cmlzdGF0ZVxuLS1cbm5ldC9pcHY2L0tjb25maWctMjM2LVxubmV0L2lwdjYvS2NvbmZpZzoyMzc6Y29uZmlnIElQVjZfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTIzOC1cdGJvb2wgXCYjMzQ7SVB2NjogTXVsdGlwbGUgUm91dGluZyBUYWJsZXNcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI0Mi1cbm5ldC9pcHY2L0tjb25maWc6MjQzOmNvbmZpZyBJUFY2X1NVQlRSRUVTXG5uZXQvaXB2Ni9LY29uZmlnLTI0NC1cdGJvb2wgXCYjMzQ7SVB2Njogc291cmNlIGFkZHJlc3MgYmFzZWQgcm91dGluZ1wmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMjU2LVxubmV0L2lwdjYvS2NvbmZpZzoyNTc6Y29uZmlnIElQVjZfTVJPVVRFXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI2NC1cbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY2L0tjb25maWctMjY2LVx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI3OC1cbm5ldC9pcHY2L0tjb25maWc6Mjc5OmNvbmZpZyBJUFY2X1BJTVNNX1YyXG5uZXQvaXB2Ni9LY29uZmlnLTI4MC1cdGJvb2wgXCYjMzQ7SVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yODUtXG5uZXQvaXB2Ni9LY29uZmlnOjI4Njpjb25maWcgSVBWNl9TRUc2X0xXVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTI4Ny1cdGJvb2wgXCYjMzQ7SVB2NjogU2VnbWVudCBSb3V0aW5nIEhlYWRlciBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI5OS1cbm5ldC9pcHY2L0tjb25maWc6MzAwOmNvbmZpZyBJUFY2X1NFRzZfSE1BQ1xubmV0L2lwdjYvS2NvbmZpZy0zMDEtXHRib29sIFwmIzM0O0lQdjY6IFNlZ21lbnQgUm91dGluZyBITUFDIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxMS1cbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXG5uZXQvaXB2Ni9LY29uZmlnLTMxMy1cdGRlZl9ib29sIHlcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTMxNi1cbm5ldC9pcHY2L0tjb25maWc6MzE3OmNvbmZpZyBJUFY2X1JQTF9MV1RVTk5FTFxubmV0L2lwdjYvS2NvbmZpZy0zMTgtXHRib29sIFwmIzM0O0lQdjY6IFJQTCBTb3VyY2UgUm91dGluZyBIZWFkZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9pcHY2L0tjb25maWctMzI3LVxubmV0L2lwdjYvS2NvbmZpZzozMjg6Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcbm5ldC9pcHY2L0tjb25maWctMzI5LVx0Ym9vbCBcJiMzNDtJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA5OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5ldHdvcmsgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgbmV0d29yayBjb25maWd1cmF0aW9ucyBoZXJlLiBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0lQVjZgIHNlZW0gbGlrZSB0aGUga2V5IHN0YXJ0aW5nIHBvaW50cy4gUmlnaHQsIEkgcmVtZW1iZXIgdGhhdCBgQ09ORklHX0lORVRgIGlzIHByZXR0eSBtdWNoIGFsd2F5cyBlbmFibGVkIGZvciBiYXNpYyBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkg4oCTIGl0JiMzOTtzIHRoZSBmb3VuZGF0aW9uLiBCdXQgaW5jbHVkaW5nIGBDT05GSUdfSVBWNmAgaXMgZGVmaW5pdGVseSBhIHNvbGlkIHByYWN0aWNlLiBOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbXVsdGljYXN0IOKAkyBgSVBfTVNGSUxURVJgIGpvZ2dlZCBteSBtZW1vcnkuIElzIHRoZXJlIGEgbW9yZSBleHBsaWNpdCBtdWx0aWNhc3QgY29uZmlndXJhdGlvbiBvcHRpb24gSSBzaG91bGQgYmUgYXdhcmUgb2Y/IExldCBtZSBkaXZlIGludG8gYG5ldC9pcHY0L0tjb25maWdgIGFuZCBzZWUgaWYgYElQX01VTFRJQ0FTVGAgaXMgd2hhdCBJJiMzOTttIGFmdGVyLiBJJiMzOTtsbCBiZXQgaXQmIzM5O3MgaW4gdGhlcmUgc29tZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9NVUxUSUNBU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWctNC0jXG5uZXQvaXB2NC9LY29uZmlnOjU6Y29uZmlnIElQX01VTFRJQ0FTVFxubmV0L2lwdjQvS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZz0yMDc9Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1Rcbm5ldC9pcHY0L0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtJUDogYnJvYWRjYXN0IEdSRSBvdmVyIElQXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjIwOTpcdGRlcGVuZHMgb24gSVBfTVVMVElDQVNUIFx1MDAyNlx1MDAyNiBORVRfSVBHUkVcbm5ldC9pcHY0L0tjb25maWctMjEwLVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MjIwPWNvbmZpZyBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjIxLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjIyOlx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L0tjb25maWctMjIzLVx0c2VsZWN0IElQX01ST1VURV9DT01NT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU5OAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIE11bHRpY2FzdCBGaWx0ZXJpbmcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaXRzIGluY2x1c2lvbiBpcyBoYW5kbGVkLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIHByZXR0eSBjZXJ0YWluIHRoYXQgYW55dGhpbmcgcmVsYXRlZCB0byBtdWx0aWNhc3QgZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsIGlzIGdvaW5nIHRvIGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIFNvLCBteSBndXQgaW5zdGluY3Qgc2F5cyBpdCYjMzk7cyBsaWtlbHkgZ3VhcmRlZCBieSBgQ09ORklHX0lQX01VTFRJQ0FTVGAuIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGNvbmZpZ3VyYXRpb24gZmxhZyByZWxhdGVkIHRvIElQdjQgbXVsdGljYXN0IHN1cHBvcnQsIGFuZCBpdCB3b3VsZCBtYWtlIHNlbnNlIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGJlIHBhcnQgb2YgdGhhdCBsYXJnZXIgZW5hYmxpbmcgYmxvY2suIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcywgb3IgbWF5YmUgdXNlIGEgY29kZSBzZWFyY2ggdG9vbCB0byBiZSBzdXJlLCBidXQgdGhhdCYjMzk7cyBteSB3b3JraW5nIGh5cG90aGVzaXMuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiBtYW5hZ2luZyBtdWx0aWNhc3QgbWVtYmVyc2hpcCBzbyBJIHdvdWxkIGJlIHN1cnByaXNlZCBpZiBpdCB3YXNuJiMzOTt0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19JUF9NVUxUSUNBU1QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg2MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqKkhhbmcgb24gYSBzZWNvbmQsIGlzIHRoaXMgYGlwX21jX21zZmdldGAgZnVuY3Rpb24gYWN0dWFsbHkgY29uZGl0aW9uYWwgYmFzZWQgb24gd2hldGhlciBJUCBNdWx0aWNhc3QgaXMgZW5hYmxlZD8qKiBJdCBmZWVscyBsaWtlIGl0IG1pZ2h0IGJlLCBidXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBiZWZvcmUgSSBkaWcgdG9vIGRlZXAuCgpUbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byBjaGVjayB0aGUgc291cmNlIGNvZGUuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBuZXQvaXB2NC9pZ21wLmNgIG9yIHNvbWV0aGluZyBhbmFsb2dvdXMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIG11bHRpY2FzdC1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIHJlc2lkZS4gSSYjMzk7bGwgc2VhcmNoIHRoYXQgZmlsZSBmb3IgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRoYXQgbWlnaHQgZ3VhcmQgdGhlIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVwZW5kZW5jeSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcG90ZW50aWFsIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGlmIG15IGFuYWx5c2lzIG5lZWRzIHRvIGFjY291bnQgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4gVGhpcyBhbHNvIGhlbHBzIG1lIGRldGVybWluZSBpZiB0aGUgY29kZSBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9tY19tc2ZnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jPTI1Njk9aW50IGlwX21jX21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsIGludCBpZmluZGV4KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yNjU4LX1cbm5ldC9pcHY0L2lnbXAuYzoyNjU5OmludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixcbm5ldC9pcHY0L2lnbXAuYy0yNjYwLVx0XHQgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MTY9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTczMy1cdFx0bXNmLmltc2ZfbnVtc3JjID0gbWluX3QodTMyLCBtc2YuaW1zZl9udW1zcmMsIG1heF9udW1zcmMpO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNzM0Olx0XHRlcnIgPSBpcF9tY19tc2ZnZXQoc2ssIFx1MDAyNm1zZiwgb3B0dmFsLCBvcHRsZW4pO1xubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzM1LVx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MDEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYGlnbXAuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCB3aGVuIEkgc2VlIGBpZ21wLmNgIGlzOiAqaXMgdGhpcyBjb2RlIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHk/KiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBHaXZlbiB0aGUgbmF0dXJlIG9mIElHTVAgYW5kIGl0cyBwb3RlbnRpYWwgZm9yIGJlaW5nIHNlbGVjdGl2ZWx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgc3lzdGVtIG9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgYSB2ZXJ5IGxpa2VseSBjYW5kaWRhdGUuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGVyZSBhcmUgYCNpZmRlZmAsIGAjaWZuZGVmYCwgb3Igc2ltaWxhciBkaXJlY3RpdmVzIGltcGFjdGluZyB0aGUgaW5jbHVzaW9uIGFuZCBjb21waWxhdGlvbiBvZiB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUuIFRoYXQmIzM5O2xsIGluZm9ybSBhIGxvdCBvZiBteSBmdXJ0aGVyIGFuYWx5c2lzLiBJZiBpdCAqaXMqIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHksIHdoYXQgYXJlIHRoZSBkZWNpZGluZyBmYWN0b3JzPyBXaGF0IG1hY3JvcyBhcmUgYXQgcGxheT8gV2hhdCBpbXBhY3QgZG9lcyB0aGF0IGhhdmUgb24gaXRzIGJlaGF2aW9yIGFuZCBkZXBlbmRlbmNpZXM/IFRoYXQmIzM5O3Mgd2hlcmUgbXkgZm9jdXMgbmVlZHMgdG8gZ28gbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWdtcC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xMy1cdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTQ6XHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3OTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTb2NrZXQgT3B0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoZSBgaWdtcC5jYCBmaWxlIGNvbXBpbGVzIHJlZ2FyZGxlc3Mgb2YgYENPTkZJR19JUF9NVUxUSUNBU1RgIGJlaW5nIHNldCDigJMgdGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIEJ1dCB3aGF0IGFib3V0IElQdjY/IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBkZXBlbmRlbmN5IGlzIGhhbmRsZWQgY29ycmVjdGx5LCBwYXJ0aWN1bGFybHkgZm9yIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBhdCB0aGUgbWFpbiBlbnRyeSBwb2ludHMsIHRoZSBgZG9faXBfZ2V0c29ja29wdGAgYW5kIGBkb19pcHY2X2dldHNvY2tvcHRgIGZ1bmN0aW9ucywgYmVjYXVzZSB0aGVzZSBhcmUgdGhlIHBsYWNlcyB3aGVyZSBzb2NrZXQgb3B0aW9ucyBhcmUgaGFuZGxlZC4gVGhlIHBhdGNoIGl0c2VsZiBzZWVtcyB0byB0b3VjaDoKCiogICBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYAoqICAgYGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXJgCiogICBgZG9faXBfZ2V0c29ja29wdGAKKiAgIGBpcHY2X2dldF9tc2ZpbHRlcmAKKiAgIGBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXJgCgpTbywgbXkgZm9jdXMgc3ltYm9scyBzaG91bGQgYmUgYGRvX2lwX2dldHNvY2tvcHRgIGFuZCBgZG9faXB2Nl9nZXRzb2Nrb3B0YC4KCldhaXQsIG5vdyB0aGF0IEkmIzM5O20gbG9va2luZyBhdCBpdCwgYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAgaXMgc3RhdGljIGJ1dCBjYWxsZWQgZnJvbSBgZG9faXBfZ2V0c29ja29wdGAuIElzIGBkb19pcF9nZXRzb2Nrb3B0YCB0b28gYmlnPyBNYXliZSBmb2N1c2luZyBvbiBgaXBfbWNfbXNmZ2V0YCB3b3VsZCBiZSBiZXR0ZXI/IE9yIHBlcmhhcHMgSSBzaG91bGQganVzdCBzdGljayB3aXRoIGxpc3RpbmcgYGRvX2lwX2dldHNvY2tvcHRgIGFuZCBgZG9faXB2Nl9nZXRzb2Nrb3B0YC4gQWgsIHJpZ2h0LCB0aGUgcHJvbXB0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyEKCmBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgIGlzIHN0YXRpYywgc28gSSBzaG91bGQgc2VlIGlmIGl0JiMzOTtzIGlubGluZWQuIEkgc2hvdWxkIGNoZWNrIGl0cyBzaXplLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDM1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0NDU6XHRzdGF0aWMgaW50IGlwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4xNDQ2Olx0XHRcdFx0XHQgc29ja3B0cl90IG9wdGxlbiwgaW50IGxlbilcbjE0NDc6XHR7XG4xNDQ4Olx0XHRjb25zdCBpbnQgc2l6ZTAgPSBvZmZzZXRvZihzdHJ1Y3QgZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KTtcbjE0NDk6XHRcdHN0cnVjdCBncm91cF9maWx0ZXIgZ3NmO1xuMTQ1MDpcdFx0dW5zaWduZWQgaW50IG1heF9udW1zcmM7XG4xNDUxOlx0XHRpbnQgbnVtLCBnc2Zfc2l6ZTtcbjE0NTI6XHRcdGludCBlcnI7XG4xNDUzOlx0XG4xNDU0Olx0XHRpZiAobGVuIFx1MDAzYyBzaXplMClcbjE0NTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNDU2Olx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2Z3NmLCBvcHR2YWwsIHNpemUwKSlcbjE0NTc6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xNDU4Olx0XG4xNDU5Olx0XHQvKiBNYXhpbXVtIG51bWJlciBvZiBzb3VyY2VzIHRoYXQgd291bGQgZml0IGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyKi9cbjE0NjA6XHRcdG1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdzZi5nZl9zbGlzdF9mbGV4WzBdKTtcbjE0NjE6XHRcdGdzZi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdzZi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xuMTQ2MjpcdFxuMTQ2MzpcdFx0bnVtID0gZ3NmLmdmX251bXNyYztcbjE0NjQ6XHRcdGVyciA9IGlwX21jX2dzZmdldChzaywgXHUwMDI2Z3NmLCBvcHR2YWwsXG4xNDY1Olx0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGdyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCkpO1xuMTQ2NjpcdFx0aWYgKGVycilcbjE0Njc6XHRcdFx0cmV0dXJuIGVycjtcbjE0Njg6XHRcdGlmIChnc2YuZ2ZfbnVtc3JjIFx1MDAzYyBudW0pXG4xNDY5Olx0XHRcdG51bSA9IGdzZi5nZl9udW1zcmM7XG4xNDcwOlx0XHRnc2Zfc2l6ZSA9IEdST1VQX0ZJTFRFUl9TSVpFKG51bSk7XG4xNDcxOlx0XHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXHUwMDI2Z3NmX3NpemUsIHNpemVvZihpbnQpKSB8fFxuMTQ3MjpcdFx0ICAgIGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIFx1MDAyNmdzZiwgc2l6ZTApKVxuMTQ3MzpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjE0NzQ6XHRcdHJldHVybiAwO1xuMTQ3NTpcdH1cbjE0NzY6XHRcbjE0Nzc6XHRzdGF0aWMgaW50IGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuMTQ3ODpcdFx0XHRcdFx0XHRzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbGVuKVxuMTQ3OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMTAKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYSBTb2NrZXQgT3B0aW9uIEZ1bmN0aW9uIENhbGwqKgoKSG1tLCB0aGlzIGZ1bmN0aW9uIEkmIzM5O20gbG9va2luZyBhdOKApiBpdCYjMzk7cyBwcmV0dHkgc21hbGwuIEF0IGZpcnN0IGdsYW5jZSwgaXQgKm1pZ2h0KiBiZSBhIGNhbmRpZGF0ZSBmb3IgaW5saW5pbmcg4oCTIG9wdGltaXppbmcgZm9yIHNwZWVkIGJ5IGVsaW1pbmF0aW5nIHRoZSBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkLiBCdXQsIGxldCBtZSBwYXVzZSBhbmQgdGhpbmsgdGhpcyB0aHJvdWdoIGEgYml0IG1vcmUgYmVmb3JlIEkgZGVjaWRlLiBUaGF0JiMzOTtzIGFzc3VtaW5nIGl0JiMzOTtzIHRydWx5IGEgc21hbGwgZnVuY3Rpb24uIEkmIzM5O3ZlIHNlZW4gc29tZSB0cmlja3N5IGNvZGUuIEFoLCB3YWl0IGEgbWludXRlLCB0aGUgY2FsbCBpcyBgZG9faXBfZ2V0c29ja29wdGAuIE5vdyBJIHJlbWVtYmVyIHRoYXQgYmVpbmcgdXNlZCBhIGxvdCwgYW5kIGl0JiMzOTtzIGFsbW9zdCBhbHdheXMgaHVnZSEgQmVzdCB0byBjaGVjayB0aGF0IGZ1bmN0aW9uIGZpcnN0IGJlZm9yZSBJIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGlubGluaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3NvY2tnbHVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTE2Olx0aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuMTUxNzpcdFx0XHQgICAgIHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXG4xNTE4Olx0e1xuMTUxOTpcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuMTUyMDpcdFx0Ym9vbCBuZWVkc19ydG5sID0gZ2V0c29ja29wdF9uZWVkc19ydG5sKG9wdG5hbWUpO1xuMTUyMTpcdFx0aW50IHZhbCwgZXJyID0gMDtcbjE1MjI6XHRcdGludCBsZW47XG4xNTIzOlx0XG4xNTI0Olx0XHRpZiAobGV2ZWwgIT0gU09MX0lQKVxuMTUyNTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4xNTI2Olx0XG4xNTI3Olx0XHRpZiAoaXBfbXJvdXRlX29wdChvcHRuYW1lKSlcbjE1Mjg6XHRcdFx0cmV0dXJuIGlwX21yb3V0ZV9nZXRzb2Nrb3B0KHNrLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7XG4xNTI5Olx0XG4xNTMwOlx0XHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2bGVuLCBvcHRsZW4sIHNpemVvZihpbnQpKSlcbjE1MzE6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4xNTMyOlx0XHRpZiAobGVuIFx1MDAzYyAwKVxuMTUzMzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1MzQ6XHRcbjE1MzU6XHRcdC8qIEhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHJlYWQgd2l0aG91dCBsb2NraW5nIHRoZSBzb2NrZXQuICovXG4xNTM2Olx0XHRzd2l0Y2ggKG9wdG5hbWUpIHtcbjE1Mzc6XHRcdGNhc2UgSVBfUEtUSU5GTzpcbjE1Mzg6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChQS1RJTkZPLCBzayk7XG4xNTM5Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1NDA6XHRcdGNhc2UgSVBfUkVDVlRUTDpcbjE1NDE6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChUVEwsIHNrKTtcbjE1NDI6XHRcdFx0Z290byBjb3B5dmFsO1xuMTU0MzpcdFx0Y2FzZSBJUF9SRUNWVE9TOlxuMTU0NDpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFRPUywgc2spO1xuMTU0NTpcdFx0XHRnb3RvIGNvcHl2YWw7XG4xNTQ2Olx0XHRjYXNlIElQX1JFQ1ZPUFRTOlxuMTU0NzpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFJFQ1ZPUFRTLCBzayk7XG4xNTQ4Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1NDk6XHRcdGNhc2UgSVBfUkVUT1BUUzpcbjE1NTA6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChSRVRPUFRTLCBzayk7XG4xNTUxOlx0XHRcdGdvdG8gY29weXZhbDtcbjE1NTI6XHRcdGNhc2UgSVBfUEFTU1NFQzpcbjE1NTM6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChQQVNTU0VDLCBzayk7XG4xNTU0Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1NTU6XHRcdGNhc2UgSVBfUkVDVk9SSUdEU1RBRERSOlxuMTU1NjpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KE9SSUdEU1RBRERSLCBzayk7XG4xNTU3Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1NTg6XHRcdGNhc2UgSVBfQ0hFQ0tTVU06XG4xNTU5Olx0XHRcdHZhbCA9IGluZXRfdGVzdF9iaXQoQ0hFQ0tTVU0sIHNrKTtcbjE1NjA6XHRcdFx0Z290byBjb3B5dmFsO1xuMTU2MTpcdFx0Y2FzZSBJUF9SRUNWRlJBR1NJWkU6XG4xNTYyOlx0XHRcdHZhbCA9IGluZXRfdGVzdF9iaXQoUkVDVkZSQUdTSVpFLCBzayk7XG4xNTYzOlx0XHRcdGdvdG8gY29weXZhbDtcbjE1NjQ6XHRcdGNhc2UgSVBfUkVDVkVSUjpcbjE1NjU6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChSRUNWRVJSLCBzayk7XG4xNTY2Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1Njc6XHRcdGNhc2UgSVBfUkVDVkVSUl9SRkM0ODg0OlxuMTU2ODpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFJFQ1ZFUlJfUkZDNDg4NCwgc2spO1xuMTU2OTpcdFx0XHRnb3RvIGNvcHl2YWw7XG4xNTcwOlx0XHRjYXNlIElQX0ZSRUVCSU5EOlxuMTU3MTpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KEZSRUVCSU5ELCBzayk7XG4xNTcyOlx0XHRcdGdvdG8gY29weXZhbDtcbjE1NzM6XHRcdGNhc2UgSVBfSERSSU5DTDpcbjE1NzQ6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChIRFJJTkNMLCBzayk7XG4xNTc1Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1NzY6XHRcdGNhc2UgSVBfTVVMVElDQVNUX0xPT1A6XG4xNTc3Olx0XHRcdHZhbCA9IGluZXRfdGVzdF9iaXQoTUNfTE9PUCwgc2spO1xuMTU3ODpcdFx0XHRnb3RvIGNvcHl2YWw7XG4xNTc5Olx0XHRjYXNlIElQX01VTFRJQ0FTVF9BTEw6XG4xNTgwOlx0XHRcdHZhbCA9IGluZXRfdGVzdF9iaXQoTUNfQUxMLCBzayk7XG4xNTgxOlx0XHRcdGdvdG8gY29weXZhbDtcbjE1ODI6XHRcdGNhc2UgSVBfVFJBTlNQQVJFTlQ6XG4xNTgzOlx0XHRcdHZhbCA9IGluZXRfdGVzdF9iaXQoVFJBTlNQQVJFTlQsIHNrKTtcbjE1ODQ6XHRcdFx0Z290byBjb3B5dmFsO1xuMTU4NTpcdFx0Y2FzZSBJUF9OT0RFRlJBRzpcbjE1ODY6XHRcdFx0dmFsID0gaW5ldF90ZXN0X2JpdChOT0RFRlJBRywgc2spO1xuMTU4NzpcdFx0XHRnb3RvIGNvcHl2YWw7XG4xNTg4Olx0XHRjYXNlIElQX0JJTkRfQUREUkVTU19OT19QT1JUOlxuMTU4OTpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KEJJTkRfQUREUkVTU19OT19QT1JULCBzayk7XG4xNTkwOlx0XHRcdGdvdG8gY29weXZhbDtcbjE1OTE6XHRcdGNhc2UgSVBfUk9VVEVSX0FMRVJUOlxuMTU5MjpcdFx0XHR2YWwgPSBpbmV0X3Rlc3RfYml0KFJUQUxFUlQsIHNrKTtcbjE1OTM6XHRcdFx0Z290byBjb3B5dmFsO1xuMTU5NDpcdFx0Y2FzZSBJUF9UVEw6XG4xNTk1Olx0XHRcdHZhbCA9IFJFQURfT05DRShpbmV0LVx1MDAzZXVjX3R0bCk7XG4xNTk2Olx0XHRcdGlmICh2YWwgXHUwMDNjIDApXG4xNTk3Olx0XHRcdFx0dmFsID0gUkVBRF9PTkNFKHNvY2tfbmV0KHNrKS1cdTAwM2VpcHY0LnN5c2N0bF9pcF9kZWZhdWx0X3R0bCk7XG4xNTk4Olx0XHRcdGdvdG8gY29weXZhbDtcbjE1OTk6XHRcdGNhc2UgSVBfTUlOVFRMOlxuMTYwMDpcdFx0XHR2YWwgPSBSRUFEX09OQ0UoaW5ldC1cdTAwM2VtaW5fdHRsKTtcbjE2MDE6XHRcdFx0Z290byBjb3B5dmFsO1xuMTYwMjpcdFx0Y2FzZSBJUF9NVUxUSUNBU1RfVFRMOlxuMTYwMzpcdFx0XHR2YWwgPSBSRUFEX09OQ0UoaW5ldC1cdTAwM2VtY190dGwpO1xuMTYwNDpcdFx0XHRnb3RvIGNvcHl2YWw7XG4xNjA1Olx0XHRjYXNlIElQX01UVV9ESVNDT1ZFUjpcbjE2MDY6XHRcdFx0dmFsID0gUkVBRF9PTkNFKGluZXQtXHUwMDNlcG10dWRpc2MpO1xuMTYwNzpcdFx0XHRnb3RvIGNvcHl2YWw7XG4xNjA4Olx0XHRjYXNlIElQX1RPUzpcbjE2MDk6XHRcdFx0dmFsID0gUkVBRF9PTkNFKGluZXQtXHUwMDNldG9zKTtcbjE2MTA6XHRcdFx0Z290byBjb3B5dmFsO1xuMTYxMTpcdFx0Y2FzZSBJUF9PUFRJT05TOlxuMTYxMjpcdFx0e1xuMTYxMzpcdFx0XHR1bnNpZ25lZCBjaGFyIG9wdGJ1ZltzaXplb2Yoc3RydWN0IGlwX29wdGlvbnMpJiM0Mzs0MF07XG4xNjE0Olx0XHRcdHN0cnVjdCBpcF9vcHRpb25zICpvcHQgPSAoc3RydWN0IGlwX29wdGlvbnMgKilvcHRidWY7XG4xNjE1Olx0XHRcdHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaW5ldF9vcHQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDQ1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRpdmluZyBpbnRvIHRoZSBgZ2V0c29ja29wdGAgSW1wbGVtZW50YXRpb24qKgoKUmlnaHQsIGBkb19pcF9nZXRzb2Nrb3B0YC4gVGhhdCYjMzk7cyBhIGJlYXN0IG9mIGEgZnVuY3Rpb24sIGlzbiYjMzk7dCBpdD8gSXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgZnJvbnQgZG9vciBmb3IgYGdldHNvY2tvcHRgIGNhbGxzIHJlbGF0ZWQgdG8gSVAuIEl0JiMzOTtzIGluZXZpdGFibHkgZ29pbmcgdG8gYmUgY29tcGxleC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG11bHRpY2FzdCBnZXRzIGNvbmZpZ3VyZWQuIEhtbSwgSSB3b25kZXIgYWJvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggbXVsdGljYXN0IHNvdXJjZSBmaWx0ZXJpbmcuIFRoYXQmIzM5O3MgYSBjb3JlIGNvbmNlcm4gZm9yIHBlcmZvcm1hbmNlLCBhbmQgaXQmIzM5O3Mgd2hlcmUgYSBsb3Qgb2YgY29uZmlndXJhdGlvbiBxdWVzdGlvbnMgYXJpc2UuCgpXYWl0IGEgc2Vjb25kLCB0aGVyZSYjMzk7cyBgaXBfbWNfbXNmZ2V0YCBjYWxsZWQgd2l0aGluIGBkb19pcF9nZXRzb2Nrb3B0YC4gVGhhdCYjMzk7cyBsaWtlbHkgdGhlIGtleS4gSXQgbG9va3MgbGlrZSBgaXBfbWNfbXNmZ2V0YCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSByZXRyaWV2ZXMgbXVsdGljYXN0IHNvdXJjZSBmaWx0ZXIgaW5mb3JtYXRpb24uIFRoYXQmIzM5O3Mgd2hhdCBJIGFtIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3MgdHJhY2UgdGhhdCBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGp1bXAgb3ZlciB0byBgbmV0L2lwdjQvaWdtcC5jYCDigJMgdGhhdCYjMzk7cyB3aGVyZSBJR01QIChhbmQgcmVsYXRlZCBtdWx0aWNhc3Qgb3BlcmF0aW9ucykgaXMgaGFuZGxlZCBpbiB0aGUgSVB2NCBzdGFjaywgcmlnaHQ/IE9rYXksIHRpbWUgdG8gc2VlIHdoYXQgYGlwX21jX21zZmdldGAgaXMgZG9pbmcuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhvc2Ugc29ja2V0IG9wdGlvbnMgYXJlIGhhbmRsZWQgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgaW50ZXJlc3RpbmcsIGFuZCBob3BlZnVsbHksIG5vdCB0b28gZW50YW5nbGVkIGluIGxvdy1sZXZlbCBkYXRhIHN0cnVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjY1OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjU5Olx0aW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLFxuMjY2MDpcdFx0XHQgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcbjI2NjE6XHR7XG4yNjYyOlx0XHRpbnQgZXJyLCBsZW4sIGNvdW50LCBjb3B5Y291bnQsIG1zZl9zaXplO1xuMjY2MzpcdFx0c3RydWN0IGlwX21yZXFuXHRpbXI7XG4yNjY0Olx0XHRfX2JlMzIgYWRkciA9IG1zZi1cdTAwM2VpbXNmX211bHRpYWRkcjtcbjI2NjU6XHRcdHN0cnVjdCBpcF9tY19zb2NrbGlzdCAqcG1jO1xuMjY2NjpcdFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xuMjY2NzpcdFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xuMjY2ODpcdFx0c3RydWN0IGlwX3NmX3NvY2tsaXN0ICpwc2w7XG4yNjY5Olx0XHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XG4yNjcwOlx0XG4yNjcxOlx0XHRBU1NFUlRfUlROTCgpO1xuMjY3MjpcdFxuMjY3MzpcdFx0aWYgKCFpcHY0X2lzX211bHRpY2FzdChhZGRyKSlcbjI2NzQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNjc1Olx0XG4yNjc2Olx0XHRpbXIuaW1yX211bHRpYWRkci5zX2FkZHIgPSBtc2YtXHUwMDNlaW1zZl9tdWx0aWFkZHI7XG4yNjc3Olx0XHRpbXIuaW1yX2FkZHJlc3Muc19hZGRyID0gbXNmLVx1MDAzZWltc2ZfaW50ZXJmYWNlO1xuMjY3ODpcdFx0aW1yLmltcl9pZmluZGV4ID0gMDtcbjI2Nzk6XHRcdGluX2RldiA9IGlwX21jX2ZpbmRfZGV2KG5ldCwgXHUwMDI2aW1yKTtcbjI2ODA6XHRcbjI2ODE6XHRcdGlmICghaW5fZGV2KSB7XG4yNjgyOlx0XHRcdGVyciA9IC1FTk9ERVY7XG4yNjgzOlx0XHRcdGdvdG8gZG9uZTtcbjI2ODQ6XHRcdH1cbjI2ODU6XHRcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xuMjY4NjpcdFxuMjY4NzpcdFx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5ldCwgcG1jKSB7XG4yNjg4Olx0XHRcdGlmIChwbWMtXHUwMDNlbXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIgPT0gbXNmLVx1MDAzZWltc2ZfbXVsdGlhZGRyIFx1MDAyNlx1MDAyNlxuMjY4OTpcdFx0XHQgICAgcG1jLVx1MDAzZW11bHRpLmltcl9pZmluZGV4ID09IGltci5pbXJfaWZpbmRleClcbjI2OTA6XHRcdFx0XHRicmVhaztcbjI2OTE6XHRcdH1cbjI2OTI6XHRcdGlmICghcG1jKVx0XHQvKiBtdXN0IGhhdmUgYSBwcmlvciBqb2luICovXG4yNjkzOlx0XHRcdGdvdG8gZG9uZTtcbjI2OTQ6XHRcdG1zZi1cdTAwM2VpbXNmX2Ztb2RlID0gcG1jLVx1MDAzZXNmbW9kZTtcbjI2OTU6XHRcdHBzbCA9IHJ0bmxfZGVyZWZlcmVuY2UocG1jLVx1MDAzZXNmbGlzdCk7XG4yNjk2Olx0XHRpZiAoIXBzbCkge1xuMjY5NzpcdFx0XHRjb3VudCA9IDA7XG4yNjk4Olx0XHR9IGVsc2Uge1xuMjY5OTpcdFx0XHRjb3VudCA9IHBzbC1cdTAwM2VzbF9jb3VudDtcbjI3MDA6XHRcdH1cbjI3MDE6XHRcdGNvcHljb3VudCA9IGNvdW50IFx1MDAzYyBtc2YtXHUwMDNlaW1zZl9udW1zcmMgPyBjb3VudCA6IG1zZi1cdTAwM2VpbXNmX251bXNyYztcbjI3MDI6XHRcdGxlbiA9IGZsZXhfYXJyYXlfc2l6ZShwc2wsIHNsX2FkZHIsIGNvcHljb3VudCk7XG4yNzAzOlx0XHRtc2YtXHUwMDNlaW1zZl9udW1zcmMgPSBjb3VudDtcbjI3MDQ6XHRcdG1zZl9zaXplID0gSVBfTVNGSUxURVJfU0laRShjb3B5Y291bnQpO1xuMjcwNTpcdFx0aWYgKGNvcHlfdG9fc29ja3B0cihvcHRsZW4sIFx1MDAyNm1zZl9zaXplLCBzaXplb2YoaW50KSkgfHxcbjI3MDY6XHRcdCAgICBjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBtc2YsIElQX01TRklMVEVSX1NJWkUoMCkpKSB7XG4yNzA3Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMjcwODpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMyNwoJCQkJCQkJb3V0cHV0OiA2NQoJCQkJCQkJdGhvdWdodHM6IDE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIHRvIGNsYXJpZnkgaXMgdGhhdCBgaXBfbWNfbXNmZ2V0YCBpc24mIzM5O3Qgc3RhdGljLCBpdCYjMzk7cyBleHBvcnRlZC4gR290IGl0LiBOb3csIHRoZSBwYXRjaCBmb2N1c2VzIG9uIG1vZGlmeWluZyBzb21lIGtleSBmdW5jdGlvbnM6IGBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgIGFuZCBgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcmAsIGJvdGggb2Ygd2hpY2ggY2FsbCBgaXBfbWNfZ3NmZ2V0YC4gQWxzbywgYGRvX2lwX2dldHNvY2tvcHRgIGNhbGxzIGBpcF9tY19tc2ZnZXRgLiBJdCBzZWVtcyBsaWtlIHRob3NlIGFyZSB0aGUgSVB2NC1yZWxhdGVkIGFyZWFzIHRvIGZvY3VzIG9uLgoKRm9yIElQdjYsIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgaXB2Nl9nZXRfbXNmaWx0ZXJgIGFuZCBgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyYCwgd2hpY2ggaW4gdHVybiBjYWxsIGBpcDZfbWNfbXNmZ2V0YC4gQ2xlYXJseSwgdGhlIHBhdGNoIGlzIGFib3V0IG11bHRpY2FzdCBmaWx0ZXJpbmcuCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IGBpcF9tY19nc2ZnZXRgIGFuZCBgaXA2X21jX21zZmdldGAgYXJlIGltcGxlbWVudGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhvc2UgZnVuY3Rpb25zIHRvIGFzc2VzcyB0aGUgZnVsbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bGwgZm9jdXMgb24gdGhvc2UgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAwOTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9tY19nc2ZnZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jPTI2NTk9aW50IGlwX21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yNzE4LVxubmV0L2lwdjQvaWdtcC5jOjI3MTk6aW50IGlwX21jX2dzZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBncm91cF9maWx0ZXIgKmdzZixcbm5ldC9pcHY0L2lnbXAuYy0yNzIwLVx0XHQgc29ja3B0cl90IG9wdHZhbCwgc2l6ZV90IHNzX29mZnNldClcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE0NDU9c3RhdGljIGludCBpcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQ2My1cdG51bSA9IGdzZi5nZl9udW1zcmM7XG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE0NjQ6XHRlcnIgPSBpcF9tY19nc2ZnZXQoc2ssIFx1MDAyNmdzZiwgb3B0dmFsLFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNDY1LVx0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCBncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpKTtcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE0Nzc9c3RhdGljIGludCBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0OTktXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE1MDA6XHRlcnIgPSBpcF9tY19nc2ZnZXQoc2ssIFx1MDAyNmdmLCBvcHR2YWwsXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE1MDEtXHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9ncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2X21jX21zZmdldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MTAxMD1zdGF0aWMgaW50IGlwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTAzMS1cdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMDMyOlx0ZXJyID0gaXA2X21jX21zZmdldChzaywgXHUwMDI2Z3NmLCBvcHR2YWwsIHNpemUwKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDMzLVx0aWYgKCFlcnIpIHtcbi0tXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM9MTA0NT1zdGF0aWMgaW50IGNvbXBhdF9pcHY2X2dldF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4tLVxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwNzItXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTA3MzpcdGVyciA9IGlwNl9tY19tc2ZnZXQoc2ssIFx1MDAyNmdmLCBvcHR2YWwsIHNpemUwKTtcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDc0LVx0c29ja29wdF9yZWxlYXNlX3NvY2soc2spO1xuLS1cbm5ldC9pcHY2L21jYXN0LmM9NDg3PWludCBpcDZfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsXG4tLVxubmV0L2lwdjYvbWNhc3QuYy01ODQtXG5uZXQvaXB2Ni9tY2FzdC5jOjU4NTppbnQgaXA2X21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBncm91cF9maWx0ZXIgKmdzZixcbm5ldC9pcHY2L21jYXN0LmMtNTg2LVx0XHQgIHNvY2twdHJfdCBvcHR2YWwsIHNpemVfdCBzc19vZmZzZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA5OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjM1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBGdXp6aW5nIFRhcmdldHMgZm9yIE11bHRpY2FzdCBGaWx0ZXIgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGlkZW50aWZ5IHRoZSBiZXN0IGZ1bmN0aW9ucyB0byB0YXJnZXQgd2l0aCBmdXp6aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGdvIGFmdGVyIGBkb19pcF9nZXRzb2Nrb3B0YCBhbmQgYGRvX2lwdjZfZ2V0c29ja29wdGAgYmVjYXVzZSB0aGV5IGFyZSB0aGUgZXhwb3J0ZWQgZW50cnkgcG9pbnRzIGFuZCB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvZGUgY2FsbGVkIGZyb20gdGhlbS4gSG93ZXZlciwgdGhleSBhcmUgcHJldHR5IGxhcmdlIGZ1bmN0aW9ucywgd2hpY2ggY291bGQgc2tldyB0aGUgZnV6emluZyBkaXN0cmlidXRpb24gYW5kIG1hc2sgdGhlIHNwZWNpZmljIHZ1bG5lcmFiaWxpdHkuCgpUaGUgcmVhbCB3b3JrIGlzIGJlaW5nIGRvbmUgYnkgYGlwX21jX21zZmdldGAsIGBpcF9tY19nc2ZnZXRgLCBhbmQgYGlwNl9tY19tc2ZnZXRgLiBUaGV5IGFyZSBub24tc3RhdGljIGFuZCBub3QgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIGFuZCBhcmUgY2FsbGVkIGltbWVkaWF0ZWx5ICphZnRlciogdGhlIG1vZGlmaWVkIGNvZGUuIExpc3RpbmcgdGhlc2UgYXMgZm9jdXMgc3ltYm9scyBpcyB0aGUgb3B0aW1hbCBhcHByb2FjaCwgYmVjYXVzZSB0aGUgZnV6emVyIHdpbGwgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBtb2RpZmllZCBjaGVja3MgYW5kIGJvdW5kcy1jaGVja2luZyBsb2dpYyAqYmVmb3JlKiByZWFjaGluZyB0aGVzZSBmdW5jdGlvbnMuCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBuYW1lczogYGlwX21jX21zZmdldGAsIGBpcF9tY19nc2ZnZXRgLCBhbmQgYGlwNl9tY19tc2ZnZXRgLiBDb25maXJtZWQuCgpBbmQgdGhlIHBhdGNoIGFsc28gbW9kaWZpZXMgYSBmZXcgb3RoZXJzOiBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYCwgYGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXJgLCBgaXB2Nl9nZXRfbXNmaWx0ZXJgLCBhbmQgYGNvbXBhdF9pcHY2X2dldF9tc2ZpbHRlcmAuIFNpbmNlIGBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgIGFuZCBgaXB2Nl9nZXRfbXNmaWx0ZXJgIGFyZSBzdGF0aWMsIHRoZXkgbWlnaHQgYmUgaW5saW5lZC4gRXZlbiB0aG91Z2ggdGhleSBhcmUgbm90IHRpbnkgKGFib3V0IDMwIGxpbmVzKSwgaXQgaXMgYmVzdCB0byBiZSBzYWZlIGFuZCB1c2UgYGlwX21jX21zZmdldGAsIGBpcF9tY19nc2ZnZXRgLCBhbmQgYGlwNl9tY19tc2ZnZXRgLgoKQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBpcF9tY19tc2ZnZXRgIGlzIGluIGBuZXQvaXB2NC9pZ21wLmNgIGFuZCBpcyBjYWxsZWQgZnJvbSBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AsIGBpcF9tY19nc2ZnZXRgIGlzIGluIGBuZXQvaXB2NC9pZ21wLmNgIGFuZCBpcyBjYWxsZWQgZnJvbSBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AgYW5kIGBpcDZfbWNfbXNmZ2V0YCBpcyBpbiBgbmV0L2lwdjYvbWNhc3QuY2AgYW5kIGlzIGNhbGxlZCBmcm9tIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLgoKQXMgZm9yIGNvbmZpZ3MsIGBDT05GSUdfSU5FVGAgaXMgYWx3YXlzIG9uIGZvciBJUHY0LCBgQ09ORklHX0lQVjZgIGZvciBJUHY2LCBhbmQgYENPTkZJR19DT01QQVRgIGZvciB0aGUgY29tcGF0IGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTVBBVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTQ3ND1jb25maWcgT0xEX1NJR0FDVElPTlxuLS1cbmFyY2gvS2NvbmZpZy0xNDgxLVxuYXJjaC9LY29uZmlnOjE0ODI6Y29uZmlnIENPTVBBVF9PTERfU0lHQUNUSU9OXG5hcmNoL0tjb25maWctMTQ4My1cdGJvb2xcbmFyY2gvS2NvbmZpZy0xNDg0LVxuYXJjaC9LY29uZmlnOjE0ODU6Y29uZmlnIENPTVBBVF8zMkJJVF9USU1FXG5hcmNoL0tjb25maWctMTQ4Ni1cdGJvb2wgXCYjMzQ7UHJvdmlkZSBzeXN0ZW0gY2FsbHMgZm9yIDMyLWJpdCB0aW1lX3RcJiMzNDtcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MTc0Nj1jb25maWcgQVJNNjRfVEFHR0VEX0FERFJfQUJJXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE3NTQtXG5hcmNoL2FybTY0L0tjb25maWc6MTc1NTptZW51Y29uZmlnIENPTVBBVFxuYXJjaC9hcm02NC9LY29uZmlnLTE3NTYtXHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgRUwwXCYjMzQ7XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnPTE3NzU9Y29uZmlnIEtVU0VSX0hFTFBFUlNcbi0tXG5hcmNoL2FybTY0L0tjb25maWctMTgwMS1cbmFyY2gvYXJtNjQvS2NvbmZpZzoxODAyOmNvbmZpZyBDT01QQVRfVkRTT1xuYXJjaC9hcm02NC9LY29uZmlnLTE4MDMtXHRib29sIFwmIzM0O0VuYWJsZSB2RFNPIGZvciAzMi1iaXQgYXBwbGljYXRpb25zXCYjMzQ7XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnPTE4MTU9Y29uZmlnIFRIVU1CMl9DT01QQVRfVkRTT1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xODIyLVxuYXJjaC9hcm02NC9LY29uZmlnOjE4MjM6Y29uZmlnIENPTVBBVF9BTElHTk1FTlRfRklYVVBTXG5hcmNoL2FybTY0L0tjb25maWctMTgyNC1cdGJvb2wgXCYjMzQ7Rml4IHVwIG1pc2FsaWduZWQgbXVsdGktd29yZCBsb2FkcyBhbmQgc3RvcmVzIGluIHVzZXIgc3BhY2VcJiMzNDtcbi0tXG5hcmNoL21pcHMvS2NvbmZpZz0zMDc4PWNvbmZpZyBNSVBTMzJfQ09NUEFUXG4tLVxuYXJjaC9taXBzL0tjb25maWctMzA4MC1cbmFyY2gvbWlwcy9LY29uZmlnOjMwODE6Y29uZmlnIENPTVBBVFxuYXJjaC9taXBzL0tjb25maWctMzA4Mi1cdGJvb2xcbi0tXG5hcmNoL3BhcmlzYy9LY29uZmlnPTM1OD1zb3VyY2UgXCYjMzQ7a2VybmVsL0tjb25maWcuaHpcJiMzNDtcbmFyY2gvcGFyaXNjL0tjb25maWctMzU5LVxuYXJjaC9wYXJpc2MvS2NvbmZpZzozNjA6Y29uZmlnIENPTVBBVFxuYXJjaC9wYXJpc2MvS2NvbmZpZy0zNjEtXHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgYmluYXJpZXNcJiMzNDtcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0zNDg9Y29uZmlnIFBBTklDX1RJTUVPVVRcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy0zNTEtXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzozNTI6Y29uZmlnIENPTVBBVFxuYXJjaC9wb3dlcnBjL0tjb25maWctMzUzLVx0Ym9vbCBcJiMzNDtFbmFibGUgc3VwcG9ydCBmb3IgMzJiaXQgYmluYXJpZXNcJiMzNDtcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWc9MTExMj1jb25maWcgQVJDSF9IQVNfR0VORVJJQ19DUkFTSEtFUk5FTF9SRVNFUlZBVElPTlxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTE0LVxuYXJjaC9yaXNjdi9LY29uZmlnOjExMTU6Y29uZmlnIENPTVBBVFxuYXJjaC9yaXNjdi9LY29uZmlnLTExMTYtXHRib29sIFwmIzM0O0tlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgVS1tb2RlXCYjMzQ7XG4tLVxuYXJjaC9zcGFyYy9LY29uZmlnPTQ0Nz1lbmRtZW51XG5hcmNoL3NwYXJjL0tjb25maWctNDQ4LVxuYXJjaC9zcGFyYy9LY29uZmlnOjQ0OTpjb25maWcgQ09NUEFUXG5hcmNoL3NwYXJjL0tjb25maWctNDUwLVx0Ym9vbFxuLS1cbmFyY2gveDg2L0tjb25maWc9MjE2Mj1jb25maWcgSE9UUExVR19DUFVcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTIxNjUtXG5hcmNoL3g4Ni9LY29uZmlnOjIxNjY6Y29uZmlnIENPTVBBVF9WRFNPXG5hcmNoL3g4Ni9LY29uZmlnLTIxNjctXHRkZWZfYm9vbCBuXG4tLVxuYXJjaC94ODYvS2NvbmZpZz0zMTAwPWNvbmZpZyBYODZfWDMyX0FCSVxuLS1cbmFyY2gveDg2L0tjb25maWctMzExMy1cbmFyY2gveDg2L0tjb25maWc6MzExNDpjb25maWcgQ09NUEFUXzMyXG5hcmNoL3g4Ni9LY29uZmlnLTMxMTUtXHRkZWZfYm9vbCB5XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0zMTE5LVxuYXJjaC94ODYvS2NvbmZpZzozMTIwOmNvbmZpZyBDT01QQVRcbmFyY2gveDg2L0tjb25maWctMzEyMS1cdGRlZl9ib29sIHlcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTMxMjMtXG5hcmNoL3g4Ni9LY29uZmlnOjMxMjQ6Y29uZmlnIENPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVFxuYXJjaC94ODYvS2NvbmZpZy0zMTI1LVx0ZGVmX2Jvb2wgeVxuLS1cbmZzL0tjb25maWcuYmluZm10PTMxPWNvbmZpZyBCSU5GTVRfRUxGX0tVTklUX1RFU1Rcbi0tXG5mcy9LY29uZmlnLmJpbmZtdC00MC1cbmZzL0tjb25maWcuYmluZm10OjQxOmNvbmZpZyBDT01QQVRfQklORk1UX0VMRlxuZnMvS2NvbmZpZy5iaW5mbXQtNDItXHRkZWZfYm9vbCB5XG4tLVxubW0vS2NvbmZpZz0zMjM9Y29uZmlnIFNIVUZGTEVfUEFHRV9BTExPQ0FUT1Jcbi0tXG5tbS9LY29uZmlnLTM0NS1cbm1tL0tjb25maWc6MzQ2OmNvbmZpZyBDT01QQVRfQlJLXG5tbS9LY29uZmlnLTM0Ny1cdGJvb2wgXCYjMzQ7RGlzYWJsZSBoZWFwIHJhbmRvbWl6YXRpb25cJiMzNDtcbi0tXG5uZXQvS2NvbmZpZz0yOT1jb25maWcgV0FOVF9DT01QQVRfTkVUTElOS19NRVNTQUdFU1xuLS1cbm5ldC9LY29uZmlnLTM0LVxubmV0L0tjb25maWc6MzU6Y29uZmlnIENPTVBBVF9ORVRMSU5LX01FU1NBR0VTXG5uZXQvS2NvbmZpZy0zNi1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMDk6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NjkKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNdWx0aWNhc3QgU291cmNlIEZpbHRlcmluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgQ09NUEFUYCBpcyBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgcHJpbWFyaWx5IHJlbGV2YW50IGZvciAzMi1iaXQgY29tcGF0aWJpbGl0eS4gV2UgZG9uJiMzOTt0IG5lY2Vzc2FyaWx5IG5lZWQgdG8gZXhwbGljaXRseSBsaXN0IGl0IGJlY2F1c2UgdGhlIGNvZGUgcGF0aCB3aXRob3V0IGBDT01QQVRgIGlzIGFsc28gbW9kaWZpZWQgYW5kIHdpbGwgYmUgZnV6emVkLiBUaGUgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZCBhcmUgYElORVRgIGFuZCBgSVBWNmAuICBTaW5jZSBgSU5FVGAgaXMgYSBnaXZlbiBmb3IgbmV0d29ya2luZywgd2UmIzM5O2xsIGp1c3QgZmxhZyBgSVBWNmAuCgpOb3csIHJldmlld2luZyB0aGUgcGF0Y2gsIHRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGJvdW5kcyBjaGVja2luZyB3aXRoaW4gYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAsIGBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyYCwgYGRvX2lwX2dldHNvY2tvcHRgLCBgaXB2Nl9nZXRfbXNmaWx0ZXJgLCBhbmQgYGNvbXBhdF9pcHY2X2dldF9tc2ZpbHRlcmAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IGNhbGN1bGF0ZXMgYG1heF9udW1zcmNgLCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc291cmNlcyB0aGF0IGNhbiBmaXQgaW4gdGhlIHVzZXItc3BhY2UgYnVmZmVyLCBhbmQgY29uc3RyYWlucyBgZ3NmLmdmX251bXNyY2AgKHRoZSBudW1iZXIgb2Ygc291cmNlcykgdG8gYmUgbm8gbGFyZ2VyIHRoYW4gdGhpcyBtYXhpbXVtLiBUaGlzIGRpcmVjdGx5IGFkZHJlc3NlcyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMgZHVyaW5nIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcm90ZWN0aW9uIGFnYWluc3QgbWVtb3J5IGNvcnJ1cHRpb24sIGFuZCBkZWZpbml0ZWx5IGRlbWFuZHMgZnV6emluZy4KCk15IGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOiBgaXBfbWNfbXNmZ2V0YCwgYGlwX21jX2dzZmdldGAsIGFuZCBgaXA2X21jX21zZmdldGAuIFdlIGRlZmluaXRlbHkgbmVlZCB0byB0ZXN0IHRoZSBjaGFuZ2VzIHdpdGhpbiBgZG9faXBfZ2V0c29ja29wdGAgYW5kIGBkb19pcHY2X2dldHNvY2tvcHRgLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSB0aG9zZSBmdW5jdGlvbiBleHBvcnRzLiBgaXBfbWNfZ3NmZ2V0YCBpcyBpbmRlZWQgZXhwb3J0ZWQgYW5kIHVzZWQgaW4gYG5ldC9pcHY0L2lwX3NvY2tnbHVlLmNgLiBBbmQgYGlwNl9tY19tc2ZnZXRgIGlzIGV4cG9ydGVkIGFuZCB1c2VkIGluIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLiBFeGNlbGxlbnQuCgpTbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja3MgcmVsYXRlZCB0byBtdWx0aWNhc3Qgc291cmNlIGZpbHRlcmluZyAoc3BlY2lmaWNhbGx5IGZvciBgSVBfTVNGSUxURVJgIGFuZCBgTUNBU1RfTVNGSUxURVJgIHNvY2tldCBvcHRpb25zIGluIElQdjQgYW5kIElQdjYpLiBUaGlzIGlzIHRvIHByZXZlbnQgdXNlci1zcGFjZSBwcm92aWRlZCBzb3VyY2UgbGlzdHMgZnJvbSBvdmVyZmxvd2luZyBpbnRlcm5hbCBidWZmZXJzLiAgVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgYW5kIHRodXMgc2hvdWxkIGJlIHRob3JvdWdobHkgZnV6emVkIHRvIHZhbGlkYXRlIHRoZSBib3VuZHMgY2hlY2tpbmcgbG9naWMgYW5kIHJ1bGUgb3V0IHJlZ3Jlc3Npb25zLiBgSVBWNmAgaXMgdGhlIGtleSBjb25maWcgZm9yIHRoaXMgdGVzdC4KCkxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDA5OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbWNfbXNmZ2V0JiMzNDssCiAgICAmIzM0O2lwX21jX2dzZmdldCYjMzQ7LAogICAgJiMzNDtpcDZfbWNfbXNmZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGZvciB0aGUgbnVtYmVyIG9mIG11bHRpY2FzdCBzb3VyY2VzIChgbWF4X251bXNyY2ApIGluIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHNvY2tldCBvcHRpb25zIChgSVBfTVNGSUxURVJgLCBgTUNBU1RfTVNGSUxURVJgKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBoYW5kbGluZyBsYXJnZSBzb3VyY2UgbGlzdHMgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBib3VuZHMgY2hlY2tpbmcgbG9naWMgaXMgY29ycmVjdCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfbWNfbXNmZ2V0JiMzNDssCiAgICAmIzM0O2lwX21jX2dzZmdldCYjMzQ7LAogICAgJiMzNDtpcDZfbWNfbXNmZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGZvciB0aGUgbnVtYmVyIG9mIG11bHRpY2FzdCBzb3VyY2VzIChgbWF4X251bXNyY2ApIGluIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHNvY2tldCBvcHRpb25zIChgSVBfTVNGSUxURVJgLCBgTUNBU1RfTVNGSUxURVJgKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBoYW5kbGluZyBsYXJnZSBzb3VyY2UgbGlzdHMgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBib3VuZHMgY2hlY2tpbmcgbG9naWMgaXMgY29ycmVjdCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTQ6MzguNTAyODIyNTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTE0MzQ2NDg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbWNfbXNmZ2V0XCIsXG4gICAgXCJpcF9tY19nc2ZnZXRcIixcbiAgICBcImlwNl9tY19tc2ZnZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBmb3IgdGhlIG51bWJlciBvZiBtdWx0aWNhc3Qgc291cmNlcyAoYG1heF9udW1zcmNgKSBpbiBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBzb2NrZXQgb3B0aW9ucyAoYElQX01TRklMVEVSYCwgYE1DQVNUX01TRklMVEVSYCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdoZW4gaGFuZGxpbmcgbGFyZ2Ugc291cmNlIGxpc3RzIHByb3ZpZGVkIGJ5IHVzZXJzcGFjZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGlzIGNvcnJlY3QgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTQ6MzguNTAyODQ2NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNzUzNTA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU2MTVhOWY4NTdkZDU1MGQxNWVkZWVmYjhkZThjYmFkMDUxNjUxYjVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAwOTo1NDozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xcbmluZGV4IGE1NWVmMzI3ZWM5MzIuLjJlNGUxOWI5MDY0NWIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xcbisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcXG5AQCAtMTQ0Nyw2ICsxNDQ3LDcgQEAgc3RhdGljIGludCBpcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiB7XFxuIFxcdGNvbnN0IGludCBzaXplMCA9IG9mZnNldG9mKHN0cnVjdCBncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpO1xcbiBcXHRzdHJ1Y3QgZ3JvdXBfZmlsdGVyIGdzZjtcXG4rXFx0dW5zaWduZWQgaW50IG1heF9udW1zcmM7XFxuIFxcdGludCBudW0sIGdzZl9zaXplO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtMTQ1NSw2ICsxNDU2LDEwIEBAIHN0YXRpYyBpbnQgaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4gXFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFxcdTAwMjZnc2YsIG9wdHZhbCwgc2l6ZTApKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuK1xcdC8qIE1heGltdW0gbnVtYmVyIG9mIHNvdXJjZXMgdGhhdCB3b3VsZCBmaXQgaW4gdGhlIHVzZXJzcGFjZSBidWZmZXIqL1xcbitcXHRtYXhfbnVtc3JjID0gKGxlbiAtIHNpemUwKSAvIHNpemVvZihnc2YuZ2Zfc2xpc3RfZmxleFswXSk7XFxuK1xcdGdzZi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdzZi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xcbitcXG4gXFx0bnVtID0gZ3NmLmdmX251bXNyYztcXG4gXFx0ZXJyID0gaXBfbWNfZ3NmZ2V0KHNrLCBcXHUwMDI2Z3NmLCBvcHR2YWwsXFxuIFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpKTtcXG5AQCAtMTQ3NCw2ICsxNDc5LDcgQEAgc3RhdGljIGludCBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4ge1xcbiBcXHRjb25zdCBpbnQgc2l6ZTAgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7XFxuIFxcdHN0cnVjdCBjb21wYXRfZ3JvdXBfZmlsdGVyIGdmMzI7XFxuK1xcdHVuc2lnbmVkIGludCBtYXhfbnVtc3JjO1xcbiBcXHRzdHJ1Y3QgZ3JvdXBfZmlsdGVyIGdmO1xcbiBcXHRpbnQgbnVtO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC0xNDgzLDYgKzE0ODksOSBAQCBzdGF0aWMgaW50IGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiBcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmdmMzIsIG9wdHZhbCwgc2l6ZTApKVxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFxuK1xcdG1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdmMzIuZ2Zfc2xpc3RfZmxleFswXSk7XFxuK1xcdGdmMzIuZ2ZfbnVtc3JjID0gbWluX3QodTMyLCBnZjMyLmdmX251bXNyYywgbWF4X251bXNyYyk7XFxuK1xcbiBcXHRnZi5nZl9pbnRlcmZhY2UgPSBnZjMyLmdmX2ludGVyZmFjZTtcXG4gXFx0Z2YuZ2ZfZm1vZGUgPSBnZjMyLmdmX2Ztb2RlO1xcbiBcXHRudW0gPSBnZi5nZl9udW1zcmMgPSBnZjMyLmdmX251bXNyYztcXG5AQCAtMTcwNSw2ICsxNzE0LDcgQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbiBcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4gXFx0Y2FzZSBJUF9NU0ZJTFRFUjpcXG4gXFx0e1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X251bXNyYztcXG4gXFx0XFx0c3RydWN0IGlwX21zZmlsdGVyIG1zZjtcXG4gXFxuIFxcdFxcdGlmIChsZW4gXFx1MDAzYyBJUF9NU0ZJTFRFUl9TSVpFKDApKSB7XFxuQEAgLTE3MTUsNiArMTcyNSwxMiBAQCBpbnQgZG9faXBfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuIFxcdFxcdFxcdGVyciA9IC1FRkFVTFQ7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuK1xcdFxcdC8qIERvIG5vdCB3cml0ZSBtb3JlIHNvdXJjZXMgdGhhbiB0aGUgY2FsbGVyIHNhaWQgb3B0dmFsIGNhblxcbitcXHRcXHQgKiBob2xkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bWF4X251bXNyYyA9IChsZW4gLSBJUF9NU0ZJTFRFUl9TSVpFKDApKSAvXFxuK1xcdFxcdFxcdCAgICAgc2l6ZW9mKG1zZi5pbXNmX3NsaXN0X2ZsZXhbMF0pO1xcbitcXHRcXHRtc2YuaW1zZl9udW1zcmMgPSBtaW5fdCh1MzIsIG1zZi5pbXNmX251bXNyYywgbWF4X251bXNyYyk7XFxuIFxcdFxcdGVyciA9IGlwX21jX21zZmdldChzaywgXFx1MDAyNm1zZiwgb3B0dmFsLCBvcHRsZW4pO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcXG5pbmRleCBiNGM5Nzc0MzRjMmUwLi4yYzNmYmRlN2NiMDU4IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xcbisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xcbkBAIC0xMDEyLDYgKzEwMTIsNyBAQCBzdGF0aWMgaW50IGlwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4ge1xcbiBcXHRjb25zdCBpbnQgc2l6ZTAgPSBvZmZzZXRvZihzdHJ1Y3QgZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KTtcXG4gXFx0c3RydWN0IGdyb3VwX2ZpbHRlciBnc2Y7XFxuK1xcdHVuc2lnbmVkIGludCBtYXhfbnVtc3JjO1xcbiBcXHRpbnQgbnVtO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG5AQCAtMTAyMSw2ICsxMDIyLDExIEBAIHN0YXRpYyBpbnQgaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbiBcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4gXFx0aWYgKGdzZi5nZl9ncm91cC5zc19mYW1pbHkgIT0gQUZfSU5FVDYpXFxuIFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG4rXFxuK1xcdC8qIE51bWJlciBvZiBzb3VyY2VzIHRoYXQgd291bGQgZml0IGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyICovXFxuK1xcdG1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdzZi5nZl9zbGlzdF9mbGV4WzBdKTtcXG4rXFx0Z3NmLmdmX251bXNyYyA9IG1pbl90KHUzMiwgZ3NmLmdmX251bXNyYywgbWF4X251bXNyYyk7XFxuK1xcbiBcXHRudW0gPSBnc2YuZ2ZfbnVtc3JjO1xcbiBcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxuIFxcdGVyciA9IGlwNl9tY19tc2ZnZXQoc2ssIFxcdTAwMjZnc2YsIG9wdHZhbCwgc2l6ZTApO1xcbkBAIC0xMDQxLDYgKzEwNDcsNyBAQCBzdGF0aWMgaW50IGNvbXBhdF9pcHY2X2dldF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxuIHtcXG4gXFx0Y29uc3QgaW50IHNpemUwID0gb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9ncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpO1xcbiBcXHRzdHJ1Y3QgY29tcGF0X2dyb3VwX2ZpbHRlciBnZjMyO1xcbitcXHR1bnNpZ25lZCBpbnQgbWF4X251bXNyYztcXG4gXFx0c3RydWN0IGdyb3VwX2ZpbHRlciBnZjtcXG4gXFx0aW50IGVycjtcXG4gXFx0aW50IG51bTtcXG5AQCAtMTA1MCw2ICsxMDU3LDEwIEBAIHN0YXRpYyBpbnQgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4gXFxuIFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2Z2YzMiwgb3B0dmFsLCBzaXplMCkpXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0bWF4X251bXNyYyA9IChsZW4gLSBzaXplMCkgLyBzaXplb2YoZ2YzMi5nZl9zbGlzdF9mbGV4WzBdKTtcXG4rXFx0Z2YzMi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdmMzIuZ2ZfbnVtc3JjLCBtYXhfbnVtc3JjKTtcXG4rXFxuIFxcdGdmLmdmX2ludGVyZmFjZSA9IGdmMzIuZ2ZfaW50ZXJmYWNlO1xcbiBcXHRnZi5nZl9mbW9kZSA9IGdmMzIuZ2ZfZm1vZGU7XFxuIFxcdG51bSA9IGdmLmdmX251bXNyYyA9IGdmMzIuZ2ZfbnVtc3JjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NDozOS43MjEyNTcwMzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3OTkyNTAyMDk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfbWNfbXNmZ2V0XCIsXG4gICAgXCJpcF9tY19nc2ZnZXRcIixcbiAgICBcImlwNl9tY19tc2ZnZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyBmb3IgdGhlIG51bWJlciBvZiBtdWx0aWNhc3Qgc291cmNlcyAoYG1heF9udW1zcmNgKSBpbiBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBzb2NrZXQgb3B0aW9ucyAoYElQX01TRklMVEVSYCwgYE1DQVNUX01TRklMVEVSYCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIHdoZW4gaGFuZGxpbmcgbGFyZ2Ugc291cmNlIGxpc3RzIHByb3ZpZGVkIGJ5IHVzZXJzcGFjZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgYm91bmRzIGNoZWNraW5nIGxvZ2ljIGlzIGNvcnJlY3QgYW5kIGRvZXMgbm90IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTYxNWE5Zjg1N2RkNTUwZDE1ZWRlZWZiOGRlOGNiYWQwNTE2NTFiNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDYgMDk6NTQ6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuY1xuaW5kZXggYTU1ZWYzMjdlYzkzMi4uMmU0ZTE5YjkwNjQ1YiAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbisrKyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmNcbkBAIC0xNDQ3LDYgKzE0NDcsNyBAQCBzdGF0aWMgaW50IGlwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4ge1xuIFx0Y29uc3QgaW50IHNpemUwID0gb2Zmc2V0b2Yoc3RydWN0IGdyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7XG4gXHRzdHJ1Y3QgZ3JvdXBfZmlsdGVyIGdzZjtcbitcdHVuc2lnbmVkIGludCBtYXhfbnVtc3JjO1xuIFx0aW50IG51bSwgZ3NmX3NpemU7XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTE0NTUsNiArMTQ1NiwxMCBAQCBzdGF0aWMgaW50IGlwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2Z3NmLCBvcHR2YWwsIHNpemUwKSlcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXG4rXHQvKiBNYXhpbXVtIG51bWJlciBvZiBzb3VyY2VzIHRoYXQgd291bGQgZml0IGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyKi9cbitcdG1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdzZi5nZl9zbGlzdF9mbGV4WzBdKTtcbitcdGdzZi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdzZi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xuK1xuIFx0bnVtID0gZ3NmLmdmX251bXNyYztcbiBcdGVyciA9IGlwX21jX2dzZmdldChzaywgXHUwMDI2Z3NmLCBvcHR2YWwsXG4gXHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGdyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCkpO1xuQEAgLTE0NzQsNiArMTQ3OSw3IEBAIHN0YXRpYyBpbnQgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4ge1xuIFx0Y29uc3QgaW50IHNpemUwID0gb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF9ncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpO1xuIFx0c3RydWN0IGNvbXBhdF9ncm91cF9maWx0ZXIgZ2YzMjtcbitcdHVuc2lnbmVkIGludCBtYXhfbnVtc3JjO1xuIFx0c3RydWN0IGdyb3VwX2ZpbHRlciBnZjtcbiBcdGludCBudW07XG4gXHRpbnQgZXJyO1xuQEAgLTE0ODMsNiArMTQ4OSw5IEBAIHN0YXRpYyBpbnQgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXG4gXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXHUwMDI2Z2YzMiwgb3B0dmFsLCBzaXplMCkpXG4gXHRcdHJldHVybiAtRUZBVUxUO1xuIFxuK1x0bWF4X251bXNyYyA9IChsZW4gLSBzaXplMCkgLyBzaXplb2YoZ2YzMi5nZl9zbGlzdF9mbGV4WzBdKTtcbitcdGdmMzIuZ2ZfbnVtc3JjID0gbWluX3QodTMyLCBnZjMyLmdmX251bXNyYywgbWF4X251bXNyYyk7XG4rXG4gXHRnZi5nZl9pbnRlcmZhY2UgPSBnZjMyLmdmX2ludGVyZmFjZTtcbiBcdGdmLmdmX2Ztb2RlID0gZ2YzMi5nZl9mbW9kZTtcbiBcdG51bSA9IGdmLmdmX251bXNyYyA9IGdmMzIuZ2ZfbnVtc3JjO1xuQEAgLTE3MDUsNiArMTcxNCw3IEBAIGludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbiBcdHN3aXRjaCAob3B0bmFtZSkge1xuIFx0Y2FzZSBJUF9NU0ZJTFRFUjpcbiBcdHtcbitcdFx0dW5zaWduZWQgaW50IG1heF9udW1zcmM7XG4gXHRcdHN0cnVjdCBpcF9tc2ZpbHRlciBtc2Y7XG4gXG4gXHRcdGlmIChsZW4gXHUwMDNjIElQX01TRklMVEVSX1NJWkUoMCkpIHtcbkBAIC0xNzE1LDYgKzE3MjUsMTIgQEAgaW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuIFx0XHRcdGVyciA9IC1FRkFVTFQ7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbitcdFx0LyogRG8gbm90IHdyaXRlIG1vcmUgc291cmNlcyB0aGFuIHRoZSBjYWxsZXIgc2FpZCBvcHR2YWwgY2FuXG4rXHRcdCAqIGhvbGQuXG4rXHRcdCAqL1xuK1x0XHRtYXhfbnVtc3JjID0gKGxlbiAtIElQX01TRklMVEVSX1NJWkUoMCkpIC9cbitcdFx0XHQgICAgIHNpemVvZihtc2YuaW1zZl9zbGlzdF9mbGV4WzBdKTtcbitcdFx0bXNmLmltc2ZfbnVtc3JjID0gbWluX3QodTMyLCBtc2YuaW1zZl9udW1zcmMsIG1heF9udW1zcmMpO1xuIFx0XHRlcnIgPSBpcF9tY19tc2ZnZXQoc2ssIFx1MDAyNm1zZiwgb3B0dmFsLCBvcHRsZW4pO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbmluZGV4IGI0Yzk3NzQzNGMyZTAuLjJjM2ZiZGU3Y2IwNTggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcbisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuY1xuQEAgLTEwMTIsNiArMTAxMiw3IEBAIHN0YXRpYyBpbnQgaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIHtcbiBcdGNvbnN0IGludCBzaXplMCA9IG9mZnNldG9mKHN0cnVjdCBncm91cF9maWx0ZXIsIGdmX3NsaXN0X2ZsZXgpO1xuIFx0c3RydWN0IGdyb3VwX2ZpbHRlciBnc2Y7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X251bXNyYztcbiBcdGludCBudW07XG4gXHRpbnQgZXJyO1xuIFxuQEAgLTEwMjEsNiArMTAyMiwxMSBAQCBzdGF0aWMgaW50IGlwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRpZiAoZ3NmLmdmX2dyb3VwLnNzX2ZhbWlseSAhPSBBRl9JTkVUNilcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuK1xuK1x0LyogTnVtYmVyIG9mIHNvdXJjZXMgdGhhdCB3b3VsZCBmaXQgaW4gdGhlIHVzZXJzcGFjZSBidWZmZXIgKi9cbitcdG1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdzZi5nZl9zbGlzdF9mbGV4WzBdKTtcbitcdGdzZi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdzZi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xuK1xuIFx0bnVtID0gZ3NmLmdmX251bXNyYztcbiBcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcbiBcdGVyciA9IGlwNl9tY19tc2ZnZXQoc2ssIFx1MDAyNmdzZiwgb3B0dmFsLCBzaXplMCk7XG5AQCAtMTA0MSw2ICsxMDQ3LDcgQEAgc3RhdGljIGludCBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIHtcbiBcdGNvbnN0IGludCBzaXplMCA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KTtcbiBcdHN0cnVjdCBjb21wYXRfZ3JvdXBfZmlsdGVyIGdmMzI7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X251bXNyYztcbiBcdHN0cnVjdCBncm91cF9maWx0ZXIgZ2Y7XG4gXHRpbnQgZXJyO1xuIFx0aW50IG51bTtcbkBAIC0xMDUwLDYgKzEwNTcsMTAgQEAgc3RhdGljIGludCBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxuIFxuIFx0aWYgKGNvcHlfZnJvbV9zb2NrcHRyKFx1MDAyNmdmMzIsIG9wdHZhbCwgc2l6ZTApKVxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdG1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdmMzIuZ2Zfc2xpc3RfZmxleFswXSk7XG4rXHRnZjMyLmdmX251bXNyYyA9IG1pbl90KHUzMiwgZ2YzMi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xuK1xuIFx0Z2YuZ2ZfaW50ZXJmYWNlID0gZ2YzMi5nZl9pbnRlcmZhY2U7XG4gXHRnZi5nZl9mbW9kZSA9IGdmMzIuZ2ZfZm1vZGU7XG4gXHRudW0gPSBnZi5nZl9udW1zcmMgPSBnZjMyLmdmX251bXNyYztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU0OjM5LjcyMTI1ODEyNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNjIxNTc2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCB0b3VjaGVzIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYCBhbmQgYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IHRoZXkncmUgYWRkaW5nIGJvdW5kcyBjaGVja2luZyBmb3IgdGhlIGBtYXhfbnVtc3JjYCB2YWx1ZSBpbiBtdWx0aWNhc3Qgc29ja2V0IG9wdGlvbnMuIFNwZWNpZmljYWxseSwgdGhlIGFmZmVjdGVkIGZ1bmN0aW9ucyBhcmUgYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAsIGBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyYCwgYGRvX2lwX2dldHNvY2tvcHRgIChzcGVjaWZpY2FsbHkgdGhlIGBJUF9NU0ZJTFRFUmAgY2FzZSksIGBpcHY2X2dldF9tc2ZpbHRlcmAsIGFuZCBgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyYC5cblxuR2l2ZW4gdGhpcyBpbnZvbHZlcyBjb3JlIG5ldHdvcmtpbmcsIGFuZCBzb2NrZXQgb3B0aW9ucyBhdCB0aGF0LCBteSBndXQgdGVsbHMgbWUgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcgcG90ZW50aWFsLiBUaGUgY2hhbmdlcyBhcmUgZnVuZGFtZW50YWwgdG8gaG93IHRoZXNlIHN5c3RlbXMgaGFuZGxlIG11bHRpY2FzdCBmaWx0ZXJpbmcuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhlc2UgZmVhdHVyZXMgYW5kIHRoZW4gcGlucG9pbnQgdGhlIFwiZm9jdXMgc3ltYm9sc1wiIOKAkyBlc3NlbnRpYWxseSwgdGhlIGVudHJ5IHBvaW50cyB0aGF0IEkgc2hvdWxkIGJlIHRhcmdldGluZyB3aXRoIGZ1enppbmcuIFNvLCBsZXQncyBsaXN0IHRob3NlIGZvY3VzIHN5bWJvbHMgYWdhaW4gdG8gYmUgc3VyZTogYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAsIGBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyYCwgYGRvX2lwX2dldHNvY2tvcHRgLCBgaXB2Nl9nZXRfbXNmaWx0ZXJgLCBhbmQgYGNvbXBhdF9pcHY2X2dldF9tc2ZpbHRlcmAuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIHN0YXRpYywgZXhwb3J0ZWQsIGFuZCBhcmUgdGhleSBpbmxpbmVkPyBUaGF04oCZcyBjcml0aWNhbCBmb3Igc3ltYm9sIHZpc2liaWxpdHkgZm9yIGZ1enppbmcuIE9rYXksIGxldCdzIHNlZS4gYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAgaXMgYHN0YXRpYyBpbnRgLiBgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcmAgaXMgYWxzbyBgc3RhdGljIGludGAuIGBkb19pcF9nZXRzb2Nrb3B0YCBpcyBqdXN0IGBpbnRgLiBgaXB2Nl9nZXRfbXNmaWx0ZXJgIGlzIGBzdGF0aWMgaW50YC4gQW5kIGBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXJgIGlzIGBzdGF0aWMgaW50YC5cblxuSG9sZCBvbi4gVGhlIHByb21wdCBJJ20gd29ya2luZyBmcm9tIHNwZWNpZmllcyBhIHByZWZlcmVuY2UuIEl0IHNheXMgdG8gcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGF0IG1ha2VzIHNlbnNlLCBhcyB0aGUgbm9uLXN0YXRpYyBvbmVzIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gU28sIEkgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgIGlzIGFjdHVhbGx5IGlubGluZWQgb3Igbm90LCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYy4gSXQgbG9va3MgbGlrZSBpdCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gYGRvX2lwX2dldHNvY2tvcHRgLCB3aGljaCBpcyBlbmNvdXJhZ2luZywgYnV0IEkgc3RpbGwgbmVlZCB0byBtYWtlIHN1cmUuIExldCBtZSBncmVwIGZvciBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYCB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTY5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTQ6NDcuMDgzNDE4Mzg5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODkwNzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX2dldF9tY2FzdF9tc2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM9MTQzNT1zdGF0aWMgYm9vbCBnZXRzb2Nrb3B0X25lZWRzX3J0bmwoaW50IG9wdG5hbWUpXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0NDQtXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNDQ1OnN0YXRpYyBpbnQgaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0NDYtXFx0XFx0XFx0XFx0IHNvY2twdHJfdCBvcHRsZW4sIGludCBsZW4pXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0NzYtXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNDc3OnN0YXRpYyBpbnQgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNDc4LVxcdFxcdFxcdFxcdFxcdHNvY2twdHJfdCBvcHRsZW4sIGludCBsZW4pXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MTY9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzM4LVxcdFxcdGlmIChpbl9jb21wYXRfc3lzY2FsbCgpKVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTczOTpcXHRcXHRcXHRlcnIgPSBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbixcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3NDAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgbGVuKTtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE3NDEtXFx0XFx0ZWxzZVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTc0MjpcXHRcXHRcXHRlcnIgPSBpcF9nZXRfbWNhc3RfbXNmaWx0ZXIoc2ssIG9wdHZhbCwgb3B0bGVuLCBsZW4pO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTc0My1cXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTQ6NDcuMTI3MzEyOTY2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwNjMyNjkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgYXMgdGhvdWdoIEkgd2VyZSBjb25zaWRlcmluZyB0aGVzZSBwb2ludHM6XG5cbioqRXhhbWluaW5nIFNvY2tldCBPcHRpb24gUmV0cmlldmFsIGZvciBJUHY0IGFuZCBJUHY2KipcblxuT2theSwgc28gYGRvX2lwX2dldHNvY2tvcHRgIGlzIGNsZWFybHkgdGhlIGdhdGVrZWVwZXIgZm9yIElQdjQgc29ja2V0IG9wdGlvbiByZXRyaWV2YWwsIHRoZSBwb2ludCB3aGVyZSB0aGUga2VybmVsIGhhbmRsZXMgdGhvc2UgcmVxdWVzdHMuIFRoYXQncyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24g4oCTIGFuZCBpdOKAmXMgYSBjcnVjaWFsIG9uZSBmcm9tIGEgbmV0d29ya2luZyBwZXJzcGVjdGl2ZSDigJMgaXM6IHdoYXQncyB0aGUgZXF1aXZhbGVudCBmdW5jdGlvbiwgdGhlIGVudHJ5IHBvaW50IGZvciBJUHY2IHNvY2tldCBvcHRpb25zPyBJcyBpdCBhIHNpbWlsYXIgZnVuY3Rpb24gd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lLCBvciBpcyB0aGUgYXJjaGl0ZWN0dXJlIGNvbXBsZXRlbHkgZGlmZmVyZW50LCB3aXRoIGEgc2VwYXJhdGUgYnJhbmNoIG9mIGNvZGUgaGFuZGxpbmcgdGhlIElQdjYgcHJvdG9jb2xzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHRoaXMgdG8gZnVsbHkgZ3Jhc3AgdGhlIHNvY2tldCBvcHRpb24gcmV0cmlldmFsIHByb2Nlc3MgYWNyb3NzIGRpZmZlcmVudCBJUCB2ZXJzaW9ucy4gS25vd2luZyB0aGlzIGRpZmZlcmVuY2UgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGtlcm5lbCdzIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAzNCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU0OjUwLjIzMzY0MjE4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA0MTAzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X2dldF9tc2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTk3Nj1zdGF0aWMgaW50IGlwdjZfZ2V0c29ja29wdF9zdGlja3koc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDA5LVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMDEwOnN0YXRpYyBpbnQgaXB2Nl9nZXRfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDExLVxcdFxcdFxcdCAgICAgc29ja3B0cl90IG9wdGxlbiwgaW50IGxlbilcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDQ0LVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYzoxMDQ1OnN0YXRpYyBpbnQgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTA0Ni1cXHRcXHRcXHRcXHQgICAgc29ja3B0cl90IG9wdGxlbiwgaW50IGxlbilcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0xMDg5PWludCBkb19pcHY2X2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTExMTEtXFx0XFx0aWYgKGluX2NvbXBhdF9zeXNjYWxsKCkpXFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjExMTI6XFx0XFx0XFx0cmV0dXJuIGNvbXBhdF9pcHY2X2dldF9tc2ZpbHRlcihzaywgb3B0dmFsLCBvcHRsZW4sIGxlbik7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjExMTM6XFx0XFx0cmV0dXJuIGlwdjZfZ2V0X21zZmlsdGVyKHNrLCBvcHR2YWwsIG9wdGxlbiwgbGVuKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTExNC1cXHRjYXNlIElQVjZfMjI5MlBLVE9QVElPTlM6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU0OjUwLjI3NzY4NTY3OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODY1NTM4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIElQdjYgU29ja2V0IE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBnZXRzb2Nrb3B0YCBmdW5jdGlvbmFsaXR5IGZvciBJUHY2LCBhbmQgdGhlIGBkb19pcHY2X2dldHNvY2tvcHRgIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50LlxuXG5UbyBlc3RhYmxpc2ggY29udGV4dCBhbmQgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIHRoZSBJUHY0IGltcGxlbWVudGF0aW9uLCB3aGljaCBsaXZlcyBpbiBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AgdW5kZXIgYGRvX2lwX2dldHNvY2tvcHRgLiBOb3csIHRvIGJlIHBlcmZlY3RseSBjbGVhciwgYGRvX2lwdjZfZ2V0c29ja29wdGAgaXMgaW4gYG5ldC9pcHY2L2lwdjZfc29ja2dsdWUuY2AuXG5cbkl0J3Mgc2Vjb25kIG5hdHVyZSBmb3IgbWUgdG8gdGhpbmsgYWJvdXQgdGhlIHJlbGF0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ20gZ29pbmcgdG8gdmVyaWZ5IHRoYXQgSVB2NCBpcyBjb250cm9sbGVkIGJ5IGBDT05GSUdfSU5FVGAgYW5kIHRoYXQgSVB2NiBpcywgYXMgZXhwZWN0ZWQsIGdhdGVkIGJ5IGBDT05GSUdfSVBWNmAuXG5cbkp1c3QgdG8gY292ZXIgYWxsIGJhc2VzLCBsZXQncyBhbHNvIGdsYW5jZSBhdCB0aGUgbWFrZWZpbGVzIGZvciBib3RoIGBuZXQvaXB2NGAgYW5kIGBuZXQvaXB2NmAgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgaW4gdGhlIGJ1aWxkIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3MDIsIk91dHB1dFRva2VucyI6NjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTQ6NTQuNTY0MjQxMzEzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjA4MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3NvY2tnbHVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L01ha2VmaWxlPTY9b2JqLXkgICAgIDo9IHJvdXRlLm8gaW5ldHBlZXIubyBwcm90b2NvbC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS03LVxcdCAgICAgaXBfaW5wdXQubyBpcF9mcmFnbWVudC5vIGlwX2ZvcndhcmQubyBpcF9vcHRpb25zLm8gXFxcXFxcbm5ldC9pcHY0L01ha2VmaWxlOjg6XFx0ICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIGluZXRfaGFzaHRhYmxlcy5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS05LVxcdCAgICAgaW5ldF90aW1ld2FpdF9zb2NrLm8gaW5ldF9jb25uZWN0aW9uX3NvY2subyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU0OjU0LjYwNzQ1MTEwMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTYzNTUzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHY2X3NvY2tnbHVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTg9aXB2Ni15IDo9XFx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlLTktXFx0XFx0YWRkcmxhYmVsLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjEwOlxcdFxcdHJvdXRlLm8gaXA2X2ZpYi5vIGlwdjZfc29ja2dsdWUubyBuZGlzYy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMS1cXHRcXHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NDo1NC42NDkwOTEyNzhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNTg1NTA1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24gb2YgTmV0d29yayBTb2NrZXQgR2x1ZSBNb2R1bGVzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGVzZSBzb2NrZXQgZ2x1ZSBtb2R1bGVzIGFyZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEl0IHNlZW1zIGBpcF9zb2NrZ2x1ZS5vYCBpcyBiZWluZyBidWlsdCBubyBtYXR0ZXIgd2hhdCwgYXMgbG9uZyBhcyBgQ09ORklHX0lORVRgIGlzIGVuYWJsZWQg4oCTIHRoYXQncyBleHBlY3RlZCBzaW5jZSBJUHY0IGlzIGZ1bmRhbWVudGFsLiBPbiB0aGUgb3RoZXIgaGFuZCwgYGlwdjZfc29ja2dsdWUub2AgaXMgb25seSBicm91Z2h0IGludG8gdGhlIGJ1aWxkIGlmIGBDT05GSUdfSVBWNmAgaXMgc2V0IHRvICd5Jy4gVGhhdCdzIHRoZSBiZWhhdmlvciBJJ2QgYW50aWNpcGF0ZS4gSnVzdCB0byBtYWtlIGRvdWJseSBzdXJlLCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgaW4gYm90aCBgbmV0L2lwdjQvYCBhbmQgYG5ldC9pcHY2L2AgdG8gY29uZmlybSB0aGVzZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIGNvbmRpdGlvbnMgZGlyZWN0bHksIGJ1dCBiYXNlZCBvbiBleHBlcmllbmNlLCB0aGlzIGlzIHRoZSBwYXR0ZXJuIEknZCBleHBlY3QuIEkgaGF2ZSB0aGUgZmVlbGluZyB0aGlzIGlzIG1vcmUgb2YgYSBzYW5pdHkgY2hlY2sgdGhhbiBhbnl0aGluZyBlbHNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDExLCJPdXRwdXRUb2tlbnMiOjYxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU0OjU5LjA1NDk0ODQzNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1NDc4ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElORVRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTMzOC1cXG5uZXQvaXB2NC9LY29uZmlnOjMzOTpjb25maWcgSU5FVF9BSFxcbm5ldC9pcHY0L0tjb25maWctMzQwLVxcdHRyaXN0YXRlIFxcXCJJUDogQUggdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTM1My1cXG5uZXQvaXB2NC9LY29uZmlnOjM1NDpjb25maWcgSU5FVF9FU1BcXG5uZXQvaXB2NC9LY29uZmlnLTM1NS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEVTUCB0cmFuc2Zvcm1hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzY4LVxcbm5ldC9pcHY0L0tjb25maWc6MzY5OmNvbmZpZyBJTkVUX0VTUF9PRkZMT0FEXFxubmV0L2lwdjQvS2NvbmZpZy0zNzAtXFx0dHJpc3RhdGUgXFxcIklQOiBFU1AgdHJhbnNmb3JtYXRpb24gb2ZmbG9hZFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMzgxLVxcbm5ldC9pcHY0L0tjb25maWc6MzgyOmNvbmZpZyBJTkVUX0VTUElOVENQXFxubmV0L2lwdjQvS2NvbmZpZy0zODMtXFx0Ym9vbCBcXFwiSVA6IEVTUCBpbiBUQ1AgZW5jYXBzdWxhdGlvbiAoUkZDIDgyMjkpXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0zOTMtXFxubmV0L2lwdjQvS2NvbmZpZzozOTQ6Y29uZmlnIElORVRfSVBDT01QXFxubmV0L2lwdjQvS2NvbmZpZy0zOTUtXFx0dHJpc3RhdGUgXFxcIklQOiBJUENvbXAgdHJhbnNmb3JtYXRpb25cXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQwMy1cXG5uZXQvaXB2NC9LY29uZmlnOjQwNDpjb25maWcgSU5FVF9UQUJMRV9QRVJUVVJCX09SREVSXFxubmV0L2lwdjQvS2NvbmZpZy00MDUtXFx0aW50IFxcXCJJTkVUOiBTb3VyY2UgcG9ydCBwZXJ0dXJiYXRpb24gdGFibGUgc2l6ZSAoYXMgcG93ZXIgb2YgMilcXFwiIGlmIEVYUEVSVFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTMtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTQ6Y29uZmlnIElORVRfWEZSTV9UVU5ORUxcXG5uZXQvaXB2NC9LY29uZmlnLTQxNS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MTgtXFxubmV0L2lwdjQvS2NvbmZpZzo0MTk6Y29uZmlnIElORVRfVFVOTkVMXFxubmV0L2lwdjQvS2NvbmZpZy00MjAtXFx0dHJpc3RhdGVcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDIyLVxcbm5ldC9pcHY0L0tjb25maWc6NDIzOmNvbmZpZyBJTkVUX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQyNC1cXHR0cmlzdGF0ZSBcXFwiSU5FVDogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzQtXFxubmV0L2lwdjQvS2NvbmZpZzo0MzU6Y29uZmlnIElORVRfVENQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQzNi1cXHRkZXBlbmRzIG9uIElORVRfRElBR1xcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy00MzgtXFxubmV0L2lwdjQvS2NvbmZpZzo0Mzk6Y29uZmlnIElORVRfVURQX0RJQUdcXG5uZXQvaXB2NC9LY29uZmlnLTQ0MC1cXHR0cmlzdGF0ZSBcXFwiVURQOiBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTQ0Ni1cXG5uZXQvaXB2NC9LY29uZmlnOjQ0Nzpjb25maWcgSU5FVF9SQVdfRElBR1xcbm5ldC9pcHY0L0tjb25maWctNDQ4LVxcdHRyaXN0YXRlIFxcXCJSQVc6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctNDU0LVxcbm5ldC9pcHY0L0tjb25maWc6NDU1OmNvbmZpZyBJTkVUX0RJQUdfREVTVFJPWVxcbm5ldC9pcHY0L0tjb25maWctNDU2LVxcdGJvb2wgXFxcIklORVQ6IGFsbG93IHByaXZpbGVnZWQgcHJvY2VzcyB0byBhZG1pbmlzdHJhdGl2ZWx5IGNsb3NlIHNvY2tldHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU0OjU5LjA5NjQ5ODI2MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE5MDkyNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9LY29uZmlnLTUtXFxubmV0L2lwdjYvS2NvbmZpZzo2Om1lbnVjb25maWcgSVBWNlxcbm5ldC9pcHY2L0tjb25maWctNy1cXHRib29sIFxcXCJUaGUgSVB2NiBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTk9aWYgSVBWNlxcbm5ldC9pcHY2L0tjb25maWctMjAtXFxubmV0L2lwdjYvS2NvbmZpZzoyMTpjb25maWcgSVBWNl9ST1VURVJfUFJFRlxcbm5ldC9pcHY2L0tjb25maWctMjItXFx0Ym9vbCBcXFwiSVB2NjogUm91dGVyIFByZWZlcmVuY2UgKFJGQyA0MTkxKSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMC1cXG5uZXQvaXB2Ni9LY29uZmlnOjMxOmNvbmZpZyBJUFY2X1JPVVRFX0lORk9cXG5uZXQvaXB2Ni9LY29uZmlnLTMyLVxcdGJvb2wgXFxcIklQdjY6IFJvdXRlIEluZm9ybWF0aW9uIChSRkMgNDE5MSkgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzgtXFxubmV0L2lwdjYvS2NvbmZpZzozOTpjb25maWcgSVBWNl9PUFRJTUlTVElDX0RBRFxcbm5ldC9pcHY2L0tjb25maWctNDAtXFx0Ym9vbCBcXFwiSVB2NjogRW5hYmxlIFJGQyA0NDI5IE9wdGltaXN0aWMgREFEXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xMDI9Y29uZmlnIElORVQ2X0lQQ09NUFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0xMTEtXFxubmV0L2lwdjYvS2NvbmZpZzoxMTI6Y29uZmlnIElQVjZfTUlQNlxcbm5ldC9pcHY2L0tjb25maWctMTEzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBNb2JpbGl0eVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTE5LVxcbm5ldC9pcHY2L0tjb25maWc6MTIwOmNvbmZpZyBJUFY2X0lMQVxcbm5ldC9pcHY2L0tjb25maWctMTIxLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJZGVudGlmaWVyIExvY2F0b3IgQWRkcmVzc2luZyAoSUxBKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MTQ2PWNvbmZpZyBJTkVUNl9UVU5ORUxcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTQ5LVxcbm5ldC9pcHY2L0tjb25maWc6MTUwOmNvbmZpZyBJUFY2X1ZUSVxcbm5ldC9pcHY2L0tjb25maWctMTUxLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIChzZWN1cmUpIElQdjY6IHR1bm5lbGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTYxLVxcbm5ldC9pcHY2L0tjb25maWc6MTYyOmNvbmZpZyBJUFY2X1NJVFxcbm5ldC9pcHY2L0tjb25maWctMTYzLVxcdHRyaXN0YXRlIFxcXCJJUHY2OiBJUHY2LWluLUlQdjQgdHVubmVsIChTSVQgZHJpdmVyKVxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMTc2LVxcbm5ldC9pcHY2L0tjb25maWc6MTc3OmNvbmZpZyBJUFY2X1NJVF82UkRcXG5uZXQvaXB2Ni9LY29uZmlnLTE3OC1cXHRib29sIFxcXCJJUHY2OiBJUHY2IFJhcGlkIERlcGxveW1lbnQgKDZSRClcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE5NS1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5Njpjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxcbm5ldC9pcHY2L0tjb25maWctMTk3LVxcdGJvb2xcXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMDktXFxubmV0L2lwdjYvS2NvbmZpZzoyMTA6Y29uZmlnIElQVjZfR1JFXFxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEdSRSB0dW5uZWxcXFwiXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIyNy1cXG5uZXQvaXB2Ni9LY29uZmlnOjIyODpjb25maWcgSVBWNl9GT1VcXG5uZXQvaXB2Ni9LY29uZmlnLTIyOS1cXHR0cmlzdGF0ZVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMzEtXFxubmV0L2lwdjYvS2NvbmZpZzoyMzI6Y29uZmlnIElQVjZfRk9VX1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjMzLVxcdHRyaXN0YXRlXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIzNi1cXG5uZXQvaXB2Ni9LY29uZmlnOjIzNzpjb25maWcgSVBWNl9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTIzOC1cXHRib29sIFxcXCJJUHY2OiBNdWx0aXBsZSBSb3V0aW5nIFRhYmxlc1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjQyLVxcbm5ldC9pcHY2L0tjb25maWc6MjQzOmNvbmZpZyBJUFY2X1NVQlRSRUVTXFxubmV0L2lwdjYvS2NvbmZpZy0yNDQtXFx0Ym9vbCBcXFwiSVB2Njogc291cmNlIGFkZHJlc3MgYmFzZWQgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjU2LVxcbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxcbm5ldC9pcHY2L0tjb25maWctMjU4LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXFxubmV0L2lwdjYvS2NvbmZpZzoyNjU6Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY2L0tjb25maWctMjY2LVxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjc4LVxcbm5ldC9pcHY2L0tjb25maWc6Mjc5OmNvbmZpZyBJUFY2X1BJTVNNX1YyXFxubmV0L2lwdjYvS2NvbmZpZy0yODAtXFx0Ym9vbCBcXFwiSVB2NjogUElNLVNNIHZlcnNpb24gMiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yODUtXFxubmV0L2lwdjYvS2NvbmZpZzoyODY6Y29uZmlnIElQVjZfU0VHNl9MV1RVTk5FTFxcbm5ldC9pcHY2L0tjb25maWctMjg3LVxcdGJvb2wgXFxcIklQdjY6IFNlZ21lbnQgUm91dGluZyBIZWFkZXIgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yOTktXFxubmV0L2lwdjYvS2NvbmZpZzozMDA6Y29uZmlnIElQVjZfU0VHNl9ITUFDXFxubmV0L2lwdjYvS2NvbmZpZy0zMDEtXFx0Ym9vbCBcXFwiSVB2NjogU2VnbWVudCBSb3V0aW5nIEhNQUMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMzExLVxcbm5ldC9pcHY2L0tjb25maWc6MzEyOmNvbmZpZyBJUFY2X1NFRzZfQlBGXFxubmV0L2lwdjYvS2NvbmZpZy0zMTMtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMTYtXFxubmV0L2lwdjYvS2NvbmZpZzozMTc6Y29uZmlnIElQVjZfUlBMX0xXVFVOTkVMXFxubmV0L2lwdjYvS2NvbmZpZy0zMTgtXFx0Ym9vbCBcXFwiSVB2NjogUlBMIFNvdXJjZSBSb3V0aW5nIEhlYWRlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0zMjctXFxubmV0L2lwdjYvS2NvbmZpZzozMjg6Y29uZmlnIElQVjZfSU9BTTZfTFdUVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTMyOS1cXHRib29sIFxcXCJJUHY2OiBJT0FNIFByZS1hbGxvY2F0ZWQgVHJhY2UgaW5zZXJ0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU0OjU5LjEzODQwOTM5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA5MjEzNjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk5ldHdvcmsgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IG5ldHdvcmsgY29uZmlndXJhdGlvbnMgaGVyZS4gYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19JUFY2YCBzZWVtIGxpa2UgdGhlIGtleSBzdGFydGluZyBwb2ludHMuIFJpZ2h0LCBJIHJlbWVtYmVyIHRoYXQgYENPTkZJR19JTkVUYCBpcyBwcmV0dHkgbXVjaCBhbHdheXMgZW5hYmxlZCBmb3IgYmFzaWMgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5IOKAkyBpdCdzIHRoZSBmb3VuZGF0aW9uLiBCdXQgaW5jbHVkaW5nIGBDT05GSUdfSVBWNmAgaXMgZGVmaW5pdGVseSBhIHNvbGlkIHByYWN0aWNlLiBOb3csIEknbSB0aGlua2luZyBhYm91dCBtdWx0aWNhc3Qg4oCTIGBJUF9NU0ZJTFRFUmAgam9nZ2VkIG15IG1lbW9yeS4gSXMgdGhlcmUgYSBtb3JlIGV4cGxpY2l0IG11bHRpY2FzdCBjb25maWd1cmF0aW9uIG9wdGlvbiBJIHNob3VsZCBiZSBhd2FyZSBvZj8gTGV0IG1lIGRpdmUgaW50byBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIHNlZSBpZiBgSVBfTVVMVElDQVNUYCBpcyB3aGF0IEknbSBhZnRlci4gSSdsbCBiZXQgaXQncyBpbiB0aGVyZSBzb21ld2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwOTgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiLCJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTU6MDIuMzQ3NjI0NjY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzUyMzgxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJUF9NVUxUSUNBU1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnLTQtI1xcbm5ldC9pcHY0L0tjb25maWc6NTpjb25maWcgSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvS2NvbmZpZy02LVxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3RpbmdcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTIwNz1jb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L0tjb25maWctMjA4LVxcdGJvb2wgXFxcIklQOiBicm9hZGNhc3QgR1JFIG92ZXIgSVBcXFwiXFxubmV0L2lwdjQvS2NvbmZpZzoyMDk6XFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1QgXFx1MDAyNlxcdTAwMjYgTkVUX0lQR1JFXFxubmV0L2lwdjQvS2NvbmZpZy0yMTAtXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0yMjA9Y29uZmlnIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjIxLVxcdGJvb2wgXFxcIklQOiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjIyMjpcXHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L0tjb25maWctMjIzLVxcdHNlbGVjdCBJUF9NUk9VVEVfQ09NTU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU1OjAyLjM5MTE1MDk4NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjkwMTE3OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBNdWx0aWNhc3QgRmlsdGVyaW5nIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdHMgaW5jbHVzaW9uIGlzIGhhbmRsZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknbSBwcmV0dHkgY2VydGFpbiB0aGF0IGFueXRoaW5nIHJlbGF0ZWQgdG8gbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbCBpcyBnb2luZyB0byBiZSBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBTbywgbXkgZ3V0IGluc3RpbmN0IHNheXMgaXQncyBsaWtlbHkgZ3VhcmRlZCBieSBgQ09ORklHX0lQX01VTFRJQ0FTVGAuIFRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIGNvbmZpZ3VyYXRpb24gZmxhZyByZWxhdGVkIHRvIElQdjQgbXVsdGljYXN0IHN1cHBvcnQsIGFuZCBpdCB3b3VsZCBtYWtlIHNlbnNlIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGJlIHBhcnQgb2YgdGhhdCBsYXJnZXIgZW5hYmxpbmcgYmxvY2suIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBvciBtYXliZSB1c2UgYSBjb2RlIHNlYXJjaCB0b29sIHRvIGJlIHN1cmUsIGJ1dCB0aGF0J3MgbXkgd29ya2luZyBoeXBvdGhlc2lzLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiBtYW5hZ2luZyBtdWx0aWNhc3QgbWVtYmVyc2hpcCBzbyBJIHdvdWxkIGJlIHN1cnByaXNlZCBpZiBpdCB3YXNuJ3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTgsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NTowNS42ODEyNzA4NzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzQxNTc3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfSVBfTVVMVElDQVNUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX3NvY2tnbHVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU1OjA1LjcyNTAxODI2NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM2Njg1Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGZpcnN0IHRob3VnaHQgaXM6ICoqSGFuZyBvbiBhIHNlY29uZCwgaXMgdGhpcyBgaXBfbWNfbXNmZ2V0YCBmdW5jdGlvbiBhY3R1YWxseSBjb25kaXRpb25hbCBiYXNlZCBvbiB3aGV0aGVyIElQIE11bHRpY2FzdCBpcyBlbmFibGVkPyoqIEl0IGZlZWxzIGxpa2UgaXQgbWlnaHQgYmUsIGJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGJlZm9yZSBJIGRpZyB0b28gZGVlcC5cblxuVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gY2hlY2sgdGhlIHNvdXJjZSBjb2RlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBuZXQvaXB2NC9pZ21wLmNgIG9yIHNvbWV0aGluZyBhbmFsb2dvdXMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIG11bHRpY2FzdC1yZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIHJlc2lkZS4gSSdsbCBzZWFyY2ggdGhhdCBmaWxlIGZvciBhbnkgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgdGhhdCBtaWdodCBndWFyZCB0aGUgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgdGhpcyBkZXBlbmRlbmN5IGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgc2NvcGUgb2YgdGhpcyBmdW5jdGlvbiBhbmQgaWYgbXkgYW5hbHlzaXMgbmVlZHMgdG8gYWNjb3VudCBmb3IgdGhpcyBjb25maWd1cmF0aW9uLiBUaGlzIGFsc28gaGVscHMgbWUgZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NjIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NTowOS44NjE3MDYzMzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MjgzNTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9tY19tc2ZnZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYz0yNTY5PWludCBpcF9tY19tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tc2ZpbHRlciAqbXNmLCBpbnQgaWZpbmRleClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yNjU4LX1cXG5uZXQvaXB2NC9pZ21wLmM6MjY1OTppbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXFxubmV0L2lwdjQvaWdtcC5jLTI2NjAtXFx0XFx0IHNvY2twdHJfdCBvcHR2YWwsIHNvY2twdHJfdCBvcHRsZW4pXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jPTE1MTY9aW50IGRvX2lwX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzMzLVxcdFxcdG1zZi5pbXNmX251bXNyYyA9IG1pbl90KHUzMiwgbXNmLmltc2ZfbnVtc3JjLCBtYXhfbnVtc3JjKTtcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jOjE3MzQ6XFx0XFx0ZXJyID0gaXBfbWNfbXNmZ2V0KHNrLCBcXHUwMDI2bXNmLCBvcHR2YWwsIG9wdGxlbik7XFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNzM1LVxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NToxMC4xNTQ1NDc4MDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5MDU0MzQzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYGlnbXAuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgd2hlbiBJIHNlZSBgaWdtcC5jYCBpczogKmlzIHRoaXMgY29kZSBjb21waWxlZCBjb25kaXRpb25hbGx5PyogSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBHaXZlbiB0aGUgbmF0dXJlIG9mIElHTVAgYW5kIGl0cyBwb3RlbnRpYWwgZm9yIGJlaW5nIHNlbGVjdGl2ZWx5IGVuYWJsZWQgb3IgZGlzYWJsZWQgZGVwZW5kaW5nIG9uIHRoZSB0YXJnZXQgc3lzdGVtIG9yIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaXMgYSB2ZXJ5IGxpa2VseSBjYW5kaWRhdGUuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGVyZSBhcmUgYCNpZmRlZmAsIGAjaWZuZGVmYCwgb3Igc2ltaWxhciBkaXJlY3RpdmVzIGltcGFjdGluZyB0aGUgaW5jbHVzaW9uIGFuZCBjb21waWxhdGlvbiBvZiB0aGlzIHBhcnRpY3VsYXIgc291cmNlIGZpbGUuIFRoYXQnbGwgaW5mb3JtIGEgbG90IG9mIG15IGZ1cnRoZXIgYW5hbHlzaXMuIElmIGl0ICppcyogY29tcGlsZWQgY29uZGl0aW9uYWxseSwgd2hhdCBhcmUgdGhlIGRlY2lkaW5nIGZhY3RvcnM/IFdoYXQgbWFjcm9zIGFyZSBhdCBwbGF5PyBXaGF0IGltcGFjdCBkb2VzIHRoYXQgaGF2ZSBvbiBpdHMgYmVoYXZpb3IgYW5kIGRlcGVuZGVuY2llcz8gVGhhdCdzIHdoZXJlIG15IGZvY3VzIG5lZWRzIHRvIGdvIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDAxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTU6MTMuODQ1MDkzMzc1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjk5ODc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZ21wLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTMtXFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNDpcXHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTU6MTMuODg4MDk1MTcyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNjU4MDUxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTb2NrZXQgT3B0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhlIGBpZ21wLmNgIGZpbGUgY29tcGlsZXMgcmVnYXJkbGVzcyBvZiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgYmVpbmcgc2V0IOKAkyB0aGF0J3MgZ29vZCB0byBrbm93LiBCdXQgd2hhdCBhYm91dCBJUHY2PyBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgZGVwZW5kZW5jeSBpcyBoYW5kbGVkIGNvcnJlY3RseSwgcGFydGljdWxhcmx5IGZvciBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYC4gTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IHRoZSBtYWluIGVudHJ5IHBvaW50cywgdGhlIGBkb19pcF9nZXRzb2Nrb3B0YCBhbmQgYGRvX2lwdjZfZ2V0c29ja29wdGAgZnVuY3Rpb25zLCBiZWNhdXNlIHRoZXNlIGFyZSB0aGUgcGxhY2VzIHdoZXJlIHNvY2tldCBvcHRpb25zIGFyZSBoYW5kbGVkLiBUaGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHRvIHRvdWNoOlxuXG4qICAgYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmBcbiogICBgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcmBcbiogICBgZG9faXBfZ2V0c29ja29wdGBcbiogICBgaXB2Nl9nZXRfbXNmaWx0ZXJgXG4qICAgYGNvbXBhdF9pcHY2X2dldF9tc2ZpbHRlcmBcblxuU28sIG15IGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlIGBkb19pcF9nZXRzb2Nrb3B0YCBhbmQgYGRvX2lwdjZfZ2V0c29ja29wdGAuXG5cbldhaXQsIG5vdyB0aGF0IEknbSBsb29raW5nIGF0IGl0LCBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYCBpcyBzdGF0aWMgYnV0IGNhbGxlZCBmcm9tIGBkb19pcF9nZXRzb2Nrb3B0YC4gSXMgYGRvX2lwX2dldHNvY2tvcHRgIHRvbyBiaWc/IE1heWJlIGZvY3VzaW5nIG9uIGBpcF9tY19tc2ZnZXRgIHdvdWxkIGJlIGJldHRlcj8gT3IgcGVyaGFwcyBJIHNob3VsZCBqdXN0IHN0aWNrIHdpdGggbGlzdGluZyBgZG9faXBfZ2V0c29ja29wdGAgYW5kIGBkb19pcHY2X2dldHNvY2tvcHRgLiBBaCwgcmlnaHQsIHRoZSBwcm9tcHQgc2F5cyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIVxuXG5gaXBfZ2V0X21jYXN0X21zZmlsdGVyYCBpcyBzdGF0aWMsIHNvIEkgc2hvdWxkIHNlZSBpZiBpdCdzIGlubGluZWQuIEkgc2hvdWxkIGNoZWNrIGl0cyBzaXplLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDc5NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NToyMi4wNTM5MDIxODlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfc29ja2dsdWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDQ1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDQ1OlxcdHN0YXRpYyBpbnQgaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4xNDQ2OlxcdFxcdFxcdFxcdFxcdCBzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbGVuKVxcbjE0NDc6XFx0e1xcbjE0NDg6XFx0XFx0Y29uc3QgaW50IHNpemUwID0gb2Zmc2V0b2Yoc3RydWN0IGdyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCk7XFxuMTQ0OTpcXHRcXHRzdHJ1Y3QgZ3JvdXBfZmlsdGVyIGdzZjtcXG4xNDUwOlxcdFxcdHVuc2lnbmVkIGludCBtYXhfbnVtc3JjO1xcbjE0NTE6XFx0XFx0aW50IG51bSwgZ3NmX3NpemU7XFxuMTQ1MjpcXHRcXHRpbnQgZXJyO1xcbjE0NTM6XFx0XFxuMTQ1NDpcXHRcXHRpZiAobGVuIFxcdTAwM2Mgc2l6ZTApXFxuMTQ1NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNDU2OlxcdFxcdGlmIChjb3B5X2Zyb21fc29ja3B0cihcXHUwMDI2Z3NmLCBvcHR2YWwsIHNpemUwKSlcXG4xNDU3OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE0NTg6XFx0XFxuMTQ1OTpcXHRcXHQvKiBNYXhpbXVtIG51bWJlciBvZiBzb3VyY2VzIHRoYXQgd291bGQgZml0IGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyKi9cXG4xNDYwOlxcdFxcdG1heF9udW1zcmMgPSAobGVuIC0gc2l6ZTApIC8gc2l6ZW9mKGdzZi5nZl9zbGlzdF9mbGV4WzBdKTtcXG4xNDYxOlxcdFxcdGdzZi5nZl9udW1zcmMgPSBtaW5fdCh1MzIsIGdzZi5nZl9udW1zcmMsIG1heF9udW1zcmMpO1xcbjE0NjI6XFx0XFxuMTQ2MzpcXHRcXHRudW0gPSBnc2YuZ2ZfbnVtc3JjO1xcbjE0NjQ6XFx0XFx0ZXJyID0gaXBfbWNfZ3NmZ2V0KHNrLCBcXHUwMDI2Z3NmLCBvcHR2YWwsXFxuMTQ2NTpcXHRcXHRcXHRcXHQgICBvZmZzZXRvZihzdHJ1Y3QgZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KSk7XFxuMTQ2NjpcXHRcXHRpZiAoZXJyKVxcbjE0Njc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNDY4OlxcdFxcdGlmIChnc2YuZ2ZfbnVtc3JjIFxcdTAwM2MgbnVtKVxcbjE0Njk6XFx0XFx0XFx0bnVtID0gZ3NmLmdmX251bXNyYztcXG4xNDcwOlxcdFxcdGdzZl9zaXplID0gR1JPVVBfRklMVEVSX1NJWkUobnVtKTtcXG4xNDcxOlxcdFxcdGlmIChjb3B5X3RvX3NvY2twdHIob3B0bGVuLCBcXHUwMDI2Z3NmX3NpemUsIHNpemVvZihpbnQpKSB8fFxcbjE0NzI6XFx0XFx0ICAgIGNvcHlfdG9fc29ja3B0cihvcHR2YWwsIFxcdTAwMjZnc2YsIHNpemUwKSlcXG4xNDczOlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjE0NzQ6XFx0XFx0cmV0dXJuIDA7XFxuMTQ3NTpcXHR9XFxuMTQ3NjpcXHRcXG4xNDc3OlxcdHN0YXRpYyBpbnQgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxuMTQ3ODpcXHRcXHRcXHRcXHRcXHRcXHRzb2NrcHRyX3Qgb3B0bGVuLCBpbnQgbGVuKVxcbjE0Nzk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NToyMi4wNTM5OTY0NTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MDk2OTg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGEgU29ja2V0IE9wdGlvbiBGdW5jdGlvbiBDYWxsKipcblxuSG1tLCB0aGlzIGZ1bmN0aW9uIEknbSBsb29raW5nIGF04oCmIGl0J3MgcHJldHR5IHNtYWxsLiBBdCBmaXJzdCBnbGFuY2UsIGl0ICptaWdodCogYmUgYSBjYW5kaWRhdGUgZm9yIGlubGluaW5nIOKAkyBvcHRpbWl6aW5nIGZvciBzcGVlZCBieSBlbGltaW5hdGluZyB0aGUgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZC4gQnV0LCBsZXQgbWUgcGF1c2UgYW5kIHRoaW5rIHRoaXMgdGhyb3VnaCBhIGJpdCBtb3JlIGJlZm9yZSBJIGRlY2lkZS4gVGhhdCdzIGFzc3VtaW5nIGl0J3MgdHJ1bHkgYSBzbWFsbCBmdW5jdGlvbi4gSSd2ZSBzZWVuIHNvbWUgdHJpY2tzeSBjb2RlLiBBaCwgd2FpdCBhIG1pbnV0ZSwgdGhlIGNhbGwgaXMgYGRvX2lwX2dldHNvY2tvcHRgLiBOb3cgSSByZW1lbWJlciB0aGF0IGJlaW5nIHVzZWQgYSBsb3QsIGFuZCBpdCdzIGFsbW9zdCBhbHdheXMgaHVnZSEgQmVzdCB0byBjaGVjayB0aGF0IGZ1bmN0aW9uIGZpcnN0IGJlZm9yZSBJIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGlubGluaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIxMCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTU6MjUuNjI0OTY3ODUzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MTYsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTE2OlxcdGludCBkb19pcF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG4xNTE3OlxcdFxcdFxcdCAgICAgc29ja3B0cl90IG9wdHZhbCwgc29ja3B0cl90IG9wdGxlbilcXG4xNTE4OlxcdHtcXG4xNTE5OlxcdFxcdHN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTtcXG4xNTIwOlxcdFxcdGJvb2wgbmVlZHNfcnRubCA9IGdldHNvY2tvcHRfbmVlZHNfcnRubChvcHRuYW1lKTtcXG4xNTIxOlxcdFxcdGludCB2YWwsIGVyciA9IDA7XFxuMTUyMjpcXHRcXHRpbnQgbGVuO1xcbjE1MjM6XFx0XFxuMTUyNDpcXHRcXHRpZiAobGV2ZWwgIT0gU09MX0lQKVxcbjE1MjU6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjE1MjY6XFx0XFxuMTUyNzpcXHRcXHRpZiAoaXBfbXJvdXRlX29wdChvcHRuYW1lKSlcXG4xNTI4OlxcdFxcdFxcdHJldHVybiBpcF9tcm91dGVfZ2V0c29ja29wdChzaywgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pO1xcbjE1Mjk6XFx0XFxuMTUzMDpcXHRcXHRpZiAoY29weV9mcm9tX3NvY2twdHIoXFx1MDAyNmxlbiwgb3B0bGVuLCBzaXplb2YoaW50KSkpXFxuMTUzMTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4xNTMyOlxcdFxcdGlmIChsZW4gXFx1MDAzYyAwKVxcbjE1MzM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTUzNDpcXHRcXG4xNTM1OlxcdFxcdC8qIEhhbmRsZSBvcHRpb25zIHRoYXQgY2FuIGJlIHJlYWQgd2l0aG91dCBsb2NraW5nIHRoZSBzb2NrZXQuICovXFxuMTUzNjpcXHRcXHRzd2l0Y2ggKG9wdG5hbWUpIHtcXG4xNTM3OlxcdFxcdGNhc2UgSVBfUEtUSU5GTzpcXG4xNTM4OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoUEtUSU5GTywgc2spO1xcbjE1Mzk6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1NDA6XFx0XFx0Y2FzZSBJUF9SRUNWVFRMOlxcbjE1NDE6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChUVEwsIHNrKTtcXG4xNTQyOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTQzOlxcdFxcdGNhc2UgSVBfUkVDVlRPUzpcXG4xNTQ0OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoVE9TLCBzayk7XFxuMTU0NTpcXHRcXHRcXHRnb3RvIGNvcHl2YWw7XFxuMTU0NjpcXHRcXHRjYXNlIElQX1JFQ1ZPUFRTOlxcbjE1NDc6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChSRUNWT1BUUywgc2spO1xcbjE1NDg6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1NDk6XFx0XFx0Y2FzZSBJUF9SRVRPUFRTOlxcbjE1NTA6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChSRVRPUFRTLCBzayk7XFxuMTU1MTpcXHRcXHRcXHRnb3RvIGNvcHl2YWw7XFxuMTU1MjpcXHRcXHRjYXNlIElQX1BBU1NTRUM6XFxuMTU1MzpcXHRcXHRcXHR2YWwgPSBpbmV0X3Rlc3RfYml0KFBBU1NTRUMsIHNrKTtcXG4xNTU0OlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTU1OlxcdFxcdGNhc2UgSVBfUkVDVk9SSUdEU1RBRERSOlxcbjE1NTY6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChPUklHRFNUQUREUiwgc2spO1xcbjE1NTc6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1NTg6XFx0XFx0Y2FzZSBJUF9DSEVDS1NVTTpcXG4xNTU5OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoQ0hFQ0tTVU0sIHNrKTtcXG4xNTYwOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTYxOlxcdFxcdGNhc2UgSVBfUkVDVkZSQUdTSVpFOlxcbjE1NjI6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChSRUNWRlJBR1NJWkUsIHNrKTtcXG4xNTYzOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTY0OlxcdFxcdGNhc2UgSVBfUkVDVkVSUjpcXG4xNTY1OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoUkVDVkVSUiwgc2spO1xcbjE1NjY6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1Njc6XFx0XFx0Y2FzZSBJUF9SRUNWRVJSX1JGQzQ4ODQ6XFxuMTU2ODpcXHRcXHRcXHR2YWwgPSBpbmV0X3Rlc3RfYml0KFJFQ1ZFUlJfUkZDNDg4NCwgc2spO1xcbjE1Njk6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1NzA6XFx0XFx0Y2FzZSBJUF9GUkVFQklORDpcXG4xNTcxOlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoRlJFRUJJTkQsIHNrKTtcXG4xNTcyOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTczOlxcdFxcdGNhc2UgSVBfSERSSU5DTDpcXG4xNTc0OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoSERSSU5DTCwgc2spO1xcbjE1NzU6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1NzY6XFx0XFx0Y2FzZSBJUF9NVUxUSUNBU1RfTE9PUDpcXG4xNTc3OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoTUNfTE9PUCwgc2spO1xcbjE1Nzg6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1Nzk6XFx0XFx0Y2FzZSBJUF9NVUxUSUNBU1RfQUxMOlxcbjE1ODA6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChNQ19BTEwsIHNrKTtcXG4xNTgxOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTgyOlxcdFxcdGNhc2UgSVBfVFJBTlNQQVJFTlQ6XFxuMTU4MzpcXHRcXHRcXHR2YWwgPSBpbmV0X3Rlc3RfYml0KFRSQU5TUEFSRU5ULCBzayk7XFxuMTU4NDpcXHRcXHRcXHRnb3RvIGNvcHl2YWw7XFxuMTU4NTpcXHRcXHRjYXNlIElQX05PREVGUkFHOlxcbjE1ODY6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChOT0RFRlJBRywgc2spO1xcbjE1ODc6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE1ODg6XFx0XFx0Y2FzZSBJUF9CSU5EX0FERFJFU1NfTk9fUE9SVDpcXG4xNTg5OlxcdFxcdFxcdHZhbCA9IGluZXRfdGVzdF9iaXQoQklORF9BRERSRVNTX05PX1BPUlQsIHNrKTtcXG4xNTkwOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNTkxOlxcdFxcdGNhc2UgSVBfUk9VVEVSX0FMRVJUOlxcbjE1OTI6XFx0XFx0XFx0dmFsID0gaW5ldF90ZXN0X2JpdChSVEFMRVJULCBzayk7XFxuMTU5MzpcXHRcXHRcXHRnb3RvIGNvcHl2YWw7XFxuMTU5NDpcXHRcXHRjYXNlIElQX1RUTDpcXG4xNTk1OlxcdFxcdFxcdHZhbCA9IFJFQURfT05DRShpbmV0LVxcdTAwM2V1Y190dGwpO1xcbjE1OTY6XFx0XFx0XFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuMTU5NzpcXHRcXHRcXHRcXHR2YWwgPSBSRUFEX09OQ0Uoc29ja19uZXQoc2spLVxcdTAwM2VpcHY0LnN5c2N0bF9pcF9kZWZhdWx0X3R0bCk7XFxuMTU5ODpcXHRcXHRcXHRnb3RvIGNvcHl2YWw7XFxuMTU5OTpcXHRcXHRjYXNlIElQX01JTlRUTDpcXG4xNjAwOlxcdFxcdFxcdHZhbCA9IFJFQURfT05DRShpbmV0LVxcdTAwM2VtaW5fdHRsKTtcXG4xNjAxOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNjAyOlxcdFxcdGNhc2UgSVBfTVVMVElDQVNUX1RUTDpcXG4xNjAzOlxcdFxcdFxcdHZhbCA9IFJFQURfT05DRShpbmV0LVxcdTAwM2VtY190dGwpO1xcbjE2MDQ6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE2MDU6XFx0XFx0Y2FzZSBJUF9NVFVfRElTQ09WRVI6XFxuMTYwNjpcXHRcXHRcXHR2YWwgPSBSRUFEX09OQ0UoaW5ldC1cXHUwMDNlcG10dWRpc2MpO1xcbjE2MDc6XFx0XFx0XFx0Z290byBjb3B5dmFsO1xcbjE2MDg6XFx0XFx0Y2FzZSBJUF9UT1M6XFxuMTYwOTpcXHRcXHRcXHR2YWwgPSBSRUFEX09OQ0UoaW5ldC1cXHUwMDNldG9zKTtcXG4xNjEwOlxcdFxcdFxcdGdvdG8gY29weXZhbDtcXG4xNjExOlxcdFxcdGNhc2UgSVBfT1BUSU9OUzpcXG4xNjEyOlxcdFxcdHtcXG4xNjEzOlxcdFxcdFxcdHVuc2lnbmVkIGNoYXIgb3B0YnVmW3NpemVvZihzdHJ1Y3QgaXBfb3B0aW9ucykrNDBdO1xcbjE2MTQ6XFx0XFx0XFx0c3RydWN0IGlwX29wdGlvbnMgKm9wdCA9IChzdHJ1Y3QgaXBfb3B0aW9ucyAqKW9wdGJ1ZjtcXG4xNjE1OlxcdFxcdFxcdHN0cnVjdCBpcF9vcHRpb25zX3JjdSAqaW5ldF9vcHQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU1OjI1LjYyNTEyNTkxM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ5OTQ2NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIGBnZXRzb2Nrb3B0YCBJbXBsZW1lbnRhdGlvbioqXG5cblJpZ2h0LCBgZG9faXBfZ2V0c29ja29wdGAuIFRoYXQncyBhIGJlYXN0IG9mIGEgZnVuY3Rpb24sIGlzbid0IGl0PyBJdCdzIHRoZSBlbnRyeSBwb2ludCwgdGhlIGZyb250IGRvb3IgZm9yIGBnZXRzb2Nrb3B0YCBjYWxscyByZWxhdGVkIHRvIElQLiBJdCdzIGluZXZpdGFibHkgZ29pbmcgdG8gYmUgY29tcGxleC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG11bHRpY2FzdCBnZXRzIGNvbmZpZ3VyZWQuIEhtbSwgSSB3b25kZXIgYWJvdXQgdGhlIGludGVyYWN0aW9uIHdpdGggbXVsdGljYXN0IHNvdXJjZSBmaWx0ZXJpbmcuIFRoYXQncyBhIGNvcmUgY29uY2VybiBmb3IgcGVyZm9ybWFuY2UsIGFuZCBpdCdzIHdoZXJlIGEgbG90IG9mIGNvbmZpZ3VyYXRpb24gcXVlc3Rpb25zIGFyaXNlLlxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSdzIGBpcF9tY19tc2ZnZXRgIGNhbGxlZCB3aXRoaW4gYGRvX2lwX2dldHNvY2tvcHRgLiBUaGF0J3MgbGlrZWx5IHRoZSBrZXkuIEl0IGxvb2tzIGxpa2UgYGlwX21jX21zZmdldGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgcmV0cmlldmVzIG11bHRpY2FzdCBzb3VyY2UgZmlsdGVyIGluZm9ybWF0aW9uLiBUaGF0J3Mgd2hhdCBJIGFtIGxvb2tpbmcgZm9yLiBMZXQncyB0cmFjZSB0aGF0IGNvZGUuIEknbGwgbmVlZCB0byBqdW1wIG92ZXIgdG8gYG5ldC9pcHY0L2lnbXAuY2Ag4oCTIHRoYXQncyB3aGVyZSBJR01QIChhbmQgcmVsYXRlZCBtdWx0aWNhc3Qgb3BlcmF0aW9ucykgaXMgaGFuZGxlZCBpbiB0aGUgSVB2NCBzdGFjaywgcmlnaHQ/IE9rYXksIHRpbWUgdG8gc2VlIHdoYXQgYGlwX21jX21zZmdldGAgaXMgZG9pbmcuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhvc2Ugc29ja2V0IG9wdGlvbnMgYXJlIGhhbmRsZWQgdW5kZXIgdGhlIGhvb2QuIEkgc3VzcGVjdCB0aGlzIHdpbGwgYmUgaW50ZXJlc3RpbmcsIGFuZCBob3BlZnVsbHksIG5vdCB0b28gZW50YW5nbGVkIGluIGxvdy1sZXZlbCBkYXRhIHN0cnVjdHVyZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDQ1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQwOTo1NToyOS42NzUwNzgyMDRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ3MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lnbXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjU5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNjU5OlxcdGludCBpcF9tY19tc2ZnZXQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbXNmaWx0ZXIgKm1zZixcXG4yNjYwOlxcdFxcdFxcdCBzb2NrcHRyX3Qgb3B0dmFsLCBzb2NrcHRyX3Qgb3B0bGVuKVxcbjI2NjE6XFx0e1xcbjI2NjI6XFx0XFx0aW50IGVyciwgbGVuLCBjb3VudCwgY29weWNvdW50LCBtc2Zfc2l6ZTtcXG4yNjYzOlxcdFxcdHN0cnVjdCBpcF9tcmVxblxcdGltcjtcXG4yNjY0OlxcdFxcdF9fYmUzMiBhZGRyID0gbXNmLVxcdTAwM2VpbXNmX211bHRpYWRkcjtcXG4yNjY1OlxcdFxcdHN0cnVjdCBpcF9tY19zb2NrbGlzdCAqcG1jO1xcbjI2NjY6XFx0XFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xcbjI2Njc6XFx0XFx0c3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spO1xcbjI2Njg6XFx0XFx0c3RydWN0IGlwX3NmX3NvY2tsaXN0ICpwc2w7XFxuMjY2OTpcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7XFxuMjY3MDpcXHRcXG4yNjcxOlxcdFxcdEFTU0VSVF9SVE5MKCk7XFxuMjY3MjpcXHRcXG4yNjczOlxcdFxcdGlmICghaXB2NF9pc19tdWx0aWNhc3QoYWRkcikpXFxuMjY3NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNjc1OlxcdFxcbjI2NzY6XFx0XFx0aW1yLmltcl9tdWx0aWFkZHIuc19hZGRyID0gbXNmLVxcdTAwM2VpbXNmX211bHRpYWRkcjtcXG4yNjc3OlxcdFxcdGltci5pbXJfYWRkcmVzcy5zX2FkZHIgPSBtc2YtXFx1MDAzZWltc2ZfaW50ZXJmYWNlO1xcbjI2Nzg6XFx0XFx0aW1yLmltcl9pZmluZGV4ID0gMDtcXG4yNjc5OlxcdFxcdGluX2RldiA9IGlwX21jX2ZpbmRfZGV2KG5ldCwgXFx1MDAyNmltcik7XFxuMjY4MDpcXHRcXG4yNjgxOlxcdFxcdGlmICghaW5fZGV2KSB7XFxuMjY4MjpcXHRcXHRcXHRlcnIgPSAtRU5PREVWO1xcbjI2ODM6XFx0XFx0XFx0Z290byBkb25lO1xcbjI2ODQ6XFx0XFx0fVxcbjI2ODU6XFx0XFx0ZXJyID0gLUVBRERSTk9UQVZBSUw7XFxuMjY4NjpcXHRcXG4yNjg3OlxcdFxcdGZvcl9lYWNoX3BtY19ydG5sKGluZXQsIHBtYykge1xcbjI2ODg6XFx0XFx0XFx0aWYgKHBtYy1cXHUwMDNlbXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIgPT0gbXNmLVxcdTAwM2VpbXNmX211bHRpYWRkciBcXHUwMDI2XFx1MDAyNlxcbjI2ODk6XFx0XFx0XFx0ICAgIHBtYy1cXHUwMDNlbXVsdGkuaW1yX2lmaW5kZXggPT0gaW1yLmltcl9pZmluZGV4KVxcbjI2OTA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMjY5MTpcXHRcXHR9XFxuMjY5MjpcXHRcXHRpZiAoIXBtYylcXHRcXHQvKiBtdXN0IGhhdmUgYSBwcmlvciBqb2luICovXFxuMjY5MzpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuMjY5NDpcXHRcXHRtc2YtXFx1MDAzZWltc2ZfZm1vZGUgPSBwbWMtXFx1MDAzZXNmbW9kZTtcXG4yNjk1OlxcdFxcdHBzbCA9IHJ0bmxfZGVyZWZlcmVuY2UocG1jLVxcdTAwM2VzZmxpc3QpO1xcbjI2OTY6XFx0XFx0aWYgKCFwc2wpIHtcXG4yNjk3OlxcdFxcdFxcdGNvdW50ID0gMDtcXG4yNjk4OlxcdFxcdH0gZWxzZSB7XFxuMjY5OTpcXHRcXHRcXHRjb3VudCA9IHBzbC1cXHUwMDNlc2xfY291bnQ7XFxuMjcwMDpcXHRcXHR9XFxuMjcwMTpcXHRcXHRjb3B5Y291bnQgPSBjb3VudCBcXHUwMDNjIG1zZi1cXHUwMDNlaW1zZl9udW1zcmMgPyBjb3VudCA6IG1zZi1cXHUwMDNlaW1zZl9udW1zcmM7XFxuMjcwMjpcXHRcXHRsZW4gPSBmbGV4X2FycmF5X3NpemUocHNsLCBzbF9hZGRyLCBjb3B5Y291bnQpO1xcbjI3MDM6XFx0XFx0bXNmLVxcdTAwM2VpbXNmX251bXNyYyA9IGNvdW50O1xcbjI3MDQ6XFx0XFx0bXNmX3NpemUgPSBJUF9NU0ZJTFRFUl9TSVpFKGNvcHljb3VudCk7XFxuMjcwNTpcXHRcXHRpZiAoY29weV90b19zb2NrcHRyKG9wdGxlbiwgXFx1MDAyNm1zZl9zaXplLCBzaXplb2YoaW50KSkgfHxcXG4yNzA2OlxcdFxcdCAgICBjb3B5X3RvX3NvY2twdHIob3B0dmFsLCBtc2YsIElQX01TRklMVEVSX1NJWkUoMCkpKSB7XFxuMjcwNzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4yNzA4OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTU6MjkuNjc1NzMwMzQ0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjg1Mjk3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoKipcblxuT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIHRvIGNsYXJpZnkgaXMgdGhhdCBgaXBfbWNfbXNmZ2V0YCBpc24ndCBzdGF0aWMsIGl0J3MgZXhwb3J0ZWQuIEdvdCBpdC4gTm93LCB0aGUgcGF0Y2ggZm9jdXNlcyBvbiBtb2RpZnlpbmcgc29tZSBrZXkgZnVuY3Rpb25zOiBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYCBhbmQgYGNvbXBhdF9pcF9nZXRfbWNhc3RfbXNmaWx0ZXJgLCBib3RoIG9mIHdoaWNoIGNhbGwgYGlwX21jX2dzZmdldGAuIEFsc28sIGBkb19pcF9nZXRzb2Nrb3B0YCBjYWxscyBgaXBfbWNfbXNmZ2V0YC4gSXQgc2VlbXMgbGlrZSB0aG9zZSBhcmUgdGhlIElQdjQtcmVsYXRlZCBhcmVhcyB0byBmb2N1cyBvbi5cblxuRm9yIElQdjYsIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgaXB2Nl9nZXRfbXNmaWx0ZXJgIGFuZCBgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyYCwgd2hpY2ggaW4gdHVybiBjYWxsIGBpcDZfbWNfbXNmZ2V0YC4gQ2xlYXJseSwgdGhlIHBhdGNoIGlzIGFib3V0IG11bHRpY2FzdCBmaWx0ZXJpbmcuXG5cblNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBkZWVwZXIgaW50byBob3cgYGlwX21jX2dzZmdldGAgYW5kIGBpcDZfbWNfbXNmZ2V0YCBhcmUgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRob3NlIGZ1bmN0aW9ucyB0byBhc3Nlc3MgdGhlIGZ1bGwgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuIEknbGwgZm9jdXMgb24gdGhvc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMyNywiT3V0cHV0VG9rZW5zIjo2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU1OjM0LjAwNDI2MjU0NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY5OTE2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfbWNfZ3NmZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pZ21wLmM9MjY1OT1pbnQgaXBfbWNfbXNmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21zZmlsdGVyICptc2YsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjcxOC1cXG5uZXQvaXB2NC9pZ21wLmM6MjcxOTppbnQgaXBfbWNfZ3NmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGdyb3VwX2ZpbHRlciAqZ3NmLFxcbm5ldC9pcHY0L2lnbXAuYy0yNzIwLVxcdFxcdCBzb2NrcHRyX3Qgb3B0dmFsLCBzaXplX3Qgc3Nfb2Zmc2V0KVxcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNDQ1PXN0YXRpYyBpbnQgaXBfZ2V0X21jYXN0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmMtMTQ2My1cXHRudW0gPSBnc2YuZ2ZfbnVtc3JjO1xcbm5ldC9pcHY0L2lwX3NvY2tnbHVlLmM6MTQ2NDpcXHRlcnIgPSBpcF9tY19nc2ZnZXQoc2ssIFxcdTAwMjZnc2YsIG9wdHZhbCxcXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0NjUtXFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGdyb3VwX2ZpbHRlciwgZ2Zfc2xpc3RfZmxleCkpO1xcbi0tXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYz0xNDc3PXN0YXRpYyBpbnQgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jLTE0OTktXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYzoxNTAwOlxcdGVyciA9IGlwX21jX2dzZmdldChzaywgXFx1MDAyNmdmLCBvcHR2YWwsXFxubmV0L2lwdjQvaXBfc29ja2dsdWUuYy0xNTAxLVxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBjb21wYXRfZ3JvdXBfZmlsdGVyLCBnZl9zbGlzdF9mbGV4KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU1OjM0LjA1MTI1NTU4MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMzcyNzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X21jX21zZmdldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2Ni9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jPTEwMTA9c3RhdGljIGludCBpcHY2X2dldF9tc2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2ssIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMtMTAzMS1cXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jOjEwMzI6XFx0ZXJyID0gaXA2X21jX21zZmdldChzaywgXFx1MDAyNmdzZiwgb3B0dmFsLCBzaXplMCk7XFxubmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jLTEwMzMtXFx0aWYgKCFlcnIpIHtcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYz0xMDQ1PXN0YXRpYyBpbnQgY29tcGF0X2lwdjZfZ2V0X21zZmlsdGVyKHN0cnVjdCBzb2NrICpzaywgc29ja3B0cl90IG9wdHZhbCxcXG4tLVxcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDcyLVxcdHNvY2tvcHRfbG9ja19zb2NrKHNrKTtcXG5uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmM6MTA3MzpcXHRlcnIgPSBpcDZfbWNfbXNmZ2V0KHNrLCBcXHUwMDI2Z2YsIG9wdHZhbCwgc2l6ZTApO1xcbm5ldC9pcHY2L2lwdjZfc29ja2dsdWUuYy0xMDc0LVxcdHNvY2tvcHRfcmVsZWFzZV9zb2NrKHNrKTtcXG4tLVxcbm5ldC9pcHY2L21jYXN0LmM9NDg3PWludCBpcDZfbWNfbXNmaWx0ZXIoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZ3JvdXBfZmlsdGVyICpnc2YsXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTU4NC1cXG5uZXQvaXB2Ni9tY2FzdC5jOjU4NTppbnQgaXA2X21jX21zZmdldChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBncm91cF9maWx0ZXIgKmdzZixcXG5uZXQvaXB2Ni9tY2FzdC5jLTU4Ni1cXHRcXHQgIHNvY2twdHJfdCBvcHR2YWwsIHNpemVfdCBzc19vZmZzZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU1OjM0LjA5NTM5NDU2OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzMzMDMzNTUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBGdXp6aW5nIFRhcmdldHMgZm9yIE11bHRpY2FzdCBGaWx0ZXIgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBpZGVudGlmeSB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gdGFyZ2V0IHdpdGggZnV6emluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBnbyBhZnRlciBgZG9faXBfZ2V0c29ja29wdGAgYW5kIGBkb19pcHY2X2dldHNvY2tvcHRgIGJlY2F1c2UgdGhleSBhcmUgdGhlIGV4cG9ydGVkIGVudHJ5IHBvaW50cyBhbmQgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb2RlIGNhbGxlZCBmcm9tIHRoZW0uIEhvd2V2ZXIsIHRoZXkgYXJlIHByZXR0eSBsYXJnZSBmdW5jdGlvbnMsIHdoaWNoIGNvdWxkIHNrZXcgdGhlIGZ1enppbmcgZGlzdHJpYnV0aW9uIGFuZCBtYXNrIHRoZSBzcGVjaWZpYyB2dWxuZXJhYmlsaXR5LlxuXG5UaGUgcmVhbCB3b3JrIGlzIGJlaW5nIGRvbmUgYnkgYGlwX21jX21zZmdldGAsIGBpcF9tY19nc2ZnZXRgLCBhbmQgYGlwNl9tY19tc2ZnZXRgLiBUaGV5IGFyZSBub24tc3RhdGljIGFuZCBub3QgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIGFuZCBhcmUgY2FsbGVkIGltbWVkaWF0ZWx5ICphZnRlciogdGhlIG1vZGlmaWVkIGNvZGUuIExpc3RpbmcgdGhlc2UgYXMgZm9jdXMgc3ltYm9scyBpcyB0aGUgb3B0aW1hbCBhcHByb2FjaCwgYmVjYXVzZSB0aGUgZnV6emVyIHdpbGwgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBtb2RpZmllZCBjaGVja3MgYW5kIGJvdW5kcy1jaGVja2luZyBsb2dpYyAqYmVmb3JlKiByZWFjaGluZyB0aGVzZSBmdW5jdGlvbnMuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIG5hbWVzOiBgaXBfbWNfbXNmZ2V0YCwgYGlwX21jX2dzZmdldGAsIGFuZCBgaXA2X21jX21zZmdldGAuIENvbmZpcm1lZC5cblxuQW5kIHRoZSBwYXRjaCBhbHNvIG1vZGlmaWVzIGEgZmV3IG90aGVyczogYGlwX2dldF9tY2FzdF9tc2ZpbHRlcmAsIGBjb21wYXRfaXBfZ2V0X21jYXN0X21zZmlsdGVyYCwgYGlwdjZfZ2V0X21zZmlsdGVyYCwgYW5kIGBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXJgLiBTaW5jZSBgaXBfZ2V0X21jYXN0X21zZmlsdGVyYCBhbmQgYGlwdjZfZ2V0X21zZmlsdGVyYCBhcmUgc3RhdGljLCB0aGV5IG1pZ2h0IGJlIGlubGluZWQuIEV2ZW4gdGhvdWdoIHRoZXkgYXJlIG5vdCB0aW55IChhYm91dCAzMCBsaW5lcyksIGl0IGlzIGJlc3QgdG8gYmUgc2FmZSBhbmQgdXNlIGBpcF9tY19tc2ZnZXRgLCBgaXBfbWNfZ3NmZ2V0YCwgYW5kIGBpcDZfbWNfbXNmZ2V0YC5cblxuQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGBpcF9tY19tc2ZnZXRgIGlzIGluIGBuZXQvaXB2NC9pZ21wLmNgIGFuZCBpcyBjYWxsZWQgZnJvbSBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AsIGBpcF9tY19nc2ZnZXRgIGlzIGluIGBuZXQvaXB2NC9pZ21wLmNgIGFuZCBpcyBjYWxsZWQgZnJvbSBgbmV0L2lwdjQvaXBfc29ja2dsdWUuY2AgYW5kIGBpcDZfbWNfbXNmZ2V0YCBpcyBpbiBgbmV0L2lwdjYvbWNhc3QuY2AgYW5kIGlzIGNhbGxlZCBmcm9tIGBuZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmNgLlxuXG5BcyBmb3IgY29uZmlncywgYENPTkZJR19JTkVUYCBpcyBhbHdheXMgb24gZm9yIElQdjQsIGBDT05GSUdfSVBWNmAgZm9yIElQdjYsIGFuZCBgQ09ORklHX0NPTVBBVGAgZm9yIHRoZSBjb21wYXQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYzNSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDA5OjU1OjQ3LjQyNTczMTk0MVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNTM1MzIyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ09NUEFUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL0tjb25maWc9MTQ3ND1jb25maWcgT0xEX1NJR0FDVElPTlxcbi0tXFxuYXJjaC9LY29uZmlnLTE0ODEtXFxuYXJjaC9LY29uZmlnOjE0ODI6Y29uZmlnIENPTVBBVF9PTERfU0lHQUNUSU9OXFxuYXJjaC9LY29uZmlnLTE0ODMtXFx0Ym9vbFxcbmFyY2gvS2NvbmZpZy0xNDg0LVxcbmFyY2gvS2NvbmZpZzoxNDg1OmNvbmZpZyBDT01QQVRfMzJCSVRfVElNRVxcbmFyY2gvS2NvbmZpZy0xNDg2LVxcdGJvb2wgXFxcIlByb3ZpZGUgc3lzdGVtIGNhbGxzIGZvciAzMi1iaXQgdGltZV90XFxcIlxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnPTE3NDY9Y29uZmlnIEFSTTY0X1RBR0dFRF9BRERSX0FCSVxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE3NTQtXFxuYXJjaC9hcm02NC9LY29uZmlnOjE3NTU6bWVudWNvbmZpZyBDT01QQVRcXG5hcmNoL2FybTY0L0tjb25maWctMTc1Ni1cXHRib29sIFxcXCJLZXJuZWwgc3VwcG9ydCBmb3IgMzItYml0IEVMMFxcXCJcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0xNzc1PWNvbmZpZyBLVVNFUl9IRUxQRVJTXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTgwMS1cXG5hcmNoL2FybTY0L0tjb25maWc6MTgwMjpjb25maWcgQ09NUEFUX1ZEU09cXG5hcmNoL2FybTY0L0tjb25maWctMTgwMy1cXHRib29sIFxcXCJFbmFibGUgdkRTTyBmb3IgMzItYml0IGFwcGxpY2F0aW9uc1xcXCJcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0xODE1PWNvbmZpZyBUSFVNQjJfQ09NUEFUX1ZEU09cXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy0xODIyLVxcbmFyY2gvYXJtNjQvS2NvbmZpZzoxODIzOmNvbmZpZyBDT01QQVRfQUxJR05NRU5UX0ZJWFVQU1xcbmFyY2gvYXJtNjQvS2NvbmZpZy0xODI0LVxcdGJvb2wgXFxcIkZpeCB1cCBtaXNhbGlnbmVkIG11bHRpLXdvcmQgbG9hZHMgYW5kIHN0b3JlcyBpbiB1c2VyIHNwYWNlXFxcIlxcbi0tXFxuYXJjaC9taXBzL0tjb25maWc9MzA3OD1jb25maWcgTUlQUzMyX0NPTVBBVFxcbi0tXFxuYXJjaC9taXBzL0tjb25maWctMzA4MC1cXG5hcmNoL21pcHMvS2NvbmZpZzozMDgxOmNvbmZpZyBDT01QQVRcXG5hcmNoL21pcHMvS2NvbmZpZy0zMDgyLVxcdGJvb2xcXG4tLVxcbmFyY2gvcGFyaXNjL0tjb25maWc9MzU4PXNvdXJjZSBcXFwia2VybmVsL0tjb25maWcuaHpcXFwiXFxuYXJjaC9wYXJpc2MvS2NvbmZpZy0zNTktXFxuYXJjaC9wYXJpc2MvS2NvbmZpZzozNjA6Y29uZmlnIENPTVBBVFxcbmFyY2gvcGFyaXNjL0tjb25maWctMzYxLVxcdGJvb2wgXFxcIktlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgYmluYXJpZXNcXFwiXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz0zNDg9Y29uZmlnIFBBTklDX1RJTUVPVVRcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTM1MS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzozNTI6Y29uZmlnIENPTVBBVFxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTM1My1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgMzJiaXQgYmluYXJpZXNcXFwiXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTExMj1jb25maWcgQVJDSF9IQVNfR0VORVJJQ19DUkFTSEtFUk5FTF9SRVNFUlZBVElPTlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTExMTQtXFxuYXJjaC9yaXNjdi9LY29uZmlnOjExMTU6Y29uZmlnIENPTVBBVFxcbmFyY2gvcmlzY3YvS2NvbmZpZy0xMTE2LVxcdGJvb2wgXFxcIktlcm5lbCBzdXBwb3J0IGZvciAzMi1iaXQgVS1tb2RlXFxcIlxcbi0tXFxuYXJjaC9zcGFyYy9LY29uZmlnPTQ0Nz1lbmRtZW51XFxuYXJjaC9zcGFyYy9LY29uZmlnLTQ0OC1cXG5hcmNoL3NwYXJjL0tjb25maWc6NDQ5OmNvbmZpZyBDT01QQVRcXG5hcmNoL3NwYXJjL0tjb25maWctNDUwLVxcdGJvb2xcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9MjE2Mj1jb25maWcgSE9UUExVR19DUFVcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjE2NS1cXG5hcmNoL3g4Ni9LY29uZmlnOjIxNjY6Y29uZmlnIENPTVBBVF9WRFNPXFxuYXJjaC94ODYvS2NvbmZpZy0yMTY3LVxcdGRlZl9ib29sIG5cXG4tLVxcbmFyY2gveDg2L0tjb25maWc9MzEwMD1jb25maWcgWDg2X1gzMl9BQklcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMzExMy1cXG5hcmNoL3g4Ni9LY29uZmlnOjMxMTQ6Y29uZmlnIENPTVBBVF8zMlxcbmFyY2gveDg2L0tjb25maWctMzExNS1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTMxMTktXFxuYXJjaC94ODYvS2NvbmZpZzozMTIwOmNvbmZpZyBDT01QQVRcXG5hcmNoL3g4Ni9LY29uZmlnLTMxMjEtXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0zMTIzLVxcbmFyY2gveDg2L0tjb25maWc6MzEyNDpjb25maWcgQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UXFxuYXJjaC94ODYvS2NvbmZpZy0zMTI1LVxcdGRlZl9ib29sIHlcXG4tLVxcbmZzL0tjb25maWcuYmluZm10PTMxPWNvbmZpZyBCSU5GTVRfRUxGX0tVTklUX1RFU1RcXG4tLVxcbmZzL0tjb25maWcuYmluZm10LTQwLVxcbmZzL0tjb25maWcuYmluZm10OjQxOmNvbmZpZyBDT01QQVRfQklORk1UX0VMRlxcbmZzL0tjb25maWcuYmluZm10LTQyLVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWc9MzIzPWNvbmZpZyBTSFVGRkxFX1BBR0VfQUxMT0NBVE9SXFxuLS1cXG5tbS9LY29uZmlnLTM0NS1cXG5tbS9LY29uZmlnOjM0Njpjb25maWcgQ09NUEFUX0JSS1xcbm1tL0tjb25maWctMzQ3LVxcdGJvb2wgXFxcIkRpc2FibGUgaGVhcCByYW5kb21pemF0aW9uXFxcIlxcbi0tXFxubmV0L0tjb25maWc9Mjk9Y29uZmlnIFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVNcXG4tLVxcbm5ldC9LY29uZmlnLTM0LVxcbm5ldC9LY29uZmlnOjM1OmNvbmZpZyBDT01QQVRfTkVUTElOS19NRVNTQUdFU1xcbm5ldC9LY29uZmlnLTM2LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTU6NDguOTUxMDkxNjY1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjE5OTM2NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNdWx0aWNhc3QgU291cmNlIEZpbHRlcmluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYENPTVBBVGAgaXMgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24sIHByaW1hcmlseSByZWxldmFudCBmb3IgMzItYml0IGNvbXBhdGliaWxpdHkuIFdlIGRvbid0IG5lY2Vzc2FyaWx5IG5lZWQgdG8gZXhwbGljaXRseSBsaXN0IGl0IGJlY2F1c2UgdGhlIGNvZGUgcGF0aCB3aXRob3V0IGBDT01QQVRgIGlzIGFsc28gbW9kaWZpZWQgYW5kIHdpbGwgYmUgZnV6emVkLiBUaGUgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGVuc3VyZSBhcmUgZW5hYmxlZCBhcmUgYElORVRgIGFuZCBgSVBWNmAuICBTaW5jZSBgSU5FVGAgaXMgYSBnaXZlbiBmb3IgbmV0d29ya2luZywgd2UnbGwganVzdCBmbGFnIGBJUFY2YC5cblxuTm93LCByZXZpZXdpbmcgdGhlIHBhdGNoLCB0aGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBib3VuZHMgY2hlY2tpbmcgd2l0aGluIGBpcF9nZXRfbWNhc3RfbXNmaWx0ZXJgLCBgY29tcGF0X2lwX2dldF9tY2FzdF9tc2ZpbHRlcmAsIGBkb19pcF9nZXRzb2Nrb3B0YCwgYGlwdjZfZ2V0X21zZmlsdGVyYCwgYW5kIGBjb21wYXRfaXB2Nl9nZXRfbXNmaWx0ZXJgLiBTcGVjaWZpY2FsbHksIHRoZSBjb2RlIG5vdyBjYWxjdWxhdGVzIGBtYXhfbnVtc3JjYCwgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNvdXJjZXMgdGhhdCBjYW4gZml0IGluIHRoZSB1c2VyLXNwYWNlIGJ1ZmZlciwgYW5kIGNvbnN0cmFpbnMgYGdzZi5nZl9udW1zcmNgICh0aGUgbnVtYmVyIG9mIHNvdXJjZXMpIHRvIGJlIG5vIGxhcmdlciB0aGFuIHRoaXMgbWF4aW11bS4gVGhpcyBkaXJlY3RseSBhZGRyZXNzZXMgcG90ZW50aWFsIG91dC1vZi1ib3VuZHMgcmVhZHMgb3Igd3JpdGVzIGR1cmluZyB1c2VyLXNwYWNlIGludGVyYWN0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJvdGVjdGlvbiBhZ2FpbnN0IG1lbW9yeSBjb3JydXB0aW9uLCBhbmQgZGVmaW5pdGVseSBkZW1hbmRzIGZ1enppbmcuXG5cbk15IGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOiBgaXBfbWNfbXNmZ2V0YCwgYGlwX21jX2dzZmdldGAsIGFuZCBgaXA2X21jX21zZmdldGAuIFdlIGRlZmluaXRlbHkgbmVlZCB0byB0ZXN0IHRoZSBjaGFuZ2VzIHdpdGhpbiBgZG9faXBfZ2V0c29ja29wdGAgYW5kIGBkb19pcHY2X2dldHNvY2tvcHRgLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gdGhvc2UgZnVuY3Rpb24gZXhwb3J0cy4gYGlwX21jX2dzZmdldGAgaXMgaW5kZWVkIGV4cG9ydGVkIGFuZCB1c2VkIGluIGBuZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jYC4gQW5kIGBpcDZfbWNfbXNmZ2V0YCBpcyBleHBvcnRlZCBhbmQgdXNlZCBpbiBgbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jYC4gRXhjZWxsZW50LlxuXG5TbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGJvdW5kcyBjaGVja3MgcmVsYXRlZCB0byBtdWx0aWNhc3Qgc291cmNlIGZpbHRlcmluZyAoc3BlY2lmaWNhbGx5IGZvciBgSVBfTVNGSUxURVJgIGFuZCBgTUNBU1RfTVNGSUxURVJgIHNvY2tldCBvcHRpb25zIGluIElQdjQgYW5kIElQdjYpLiBUaGlzIGlzIHRvIHByZXZlbnQgdXNlci1zcGFjZSBwcm92aWRlZCBzb3VyY2UgbGlzdHMgZnJvbSBvdmVyZmxvd2luZyBpbnRlcm5hbCBidWZmZXJzLiAgVGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjaywgYW5kIHRodXMgc2hvdWxkIGJlIHRob3JvdWdobHkgZnV6emVkIHRvIHZhbGlkYXRlIHRoZSBib3VuZHMgY2hlY2tpbmcgbG9naWMgYW5kIHJ1bGUgb3V0IHJlZ3Jlc3Npb25zLiBgSVBWNmAgaXMgdGhlIGtleSBjb25maWcgZm9yIHRoaXMgdGVzdC5cblxuTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU2OSwiT3V0cHV0VG9rZW5zIjoxNTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMDk6NTU6NTkuNTcxMDMxMzY0WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUyNDM5MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tY19tc2ZnZXRcIixcbiAgICBcImlwX21jX2dzZmdldFwiLFxuICAgIFwiaXA2X21jX21zZmdldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGZvciB0aGUgbnVtYmVyIG9mIG11bHRpY2FzdCBzb3VyY2VzIChgbWF4X251bXNyY2ApIGluIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHNvY2tldCBvcHRpb25zIChgSVBfTVNGSUxURVJgLCBgTUNBU1RfTVNGSUxURVJgKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBoYW5kbGluZyBsYXJnZSBzb3VyY2UgbGlzdHMgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBib3VuZHMgY2hlY2tpbmcgbG9naWMgaXMgY29ycmVjdCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF9tY19tc2ZnZXRcIixcbiAgICBcImlwX21jX2dzZmdldFwiLFxuICAgIFwiaXA2X21jX21zZmdldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIGZvciB0aGUgbnVtYmVyIG9mIG11bHRpY2FzdCBzb3VyY2VzIChgbWF4X251bXNyY2ApIGluIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHNvY2tldCBvcHRpb25zIChgSVBfTVNGSUxURVJgLCBgTUNBU1RfTVNGSUxURVJgKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2hlbiBoYW5kbGluZyBsYXJnZSBzb3VyY2UgbGlzdHMgcHJvdmlkZWQgYnkgdXNlcnNwYWNlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3RhY2sgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBib3VuZHMgY2hlY2tpbmcgbG9naWMgaXMgY29ycmVjdCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowfpdjz[1] Phase: Succeeded StartedAt: 2026-08-06 09:56:11 +0000 UTC FinishedAt: 2026-08-06 09:56:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 09:56:11 +0000 UTC FinishedAt: 2026-08-06 09:56:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2] Phase: Succeeded StartedAt: 2026-08-06 09:56:11 +0000 UTC FinishedAt: 2026-08-06 13:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-06 09:56:11 +0000 UTC FinishedAt: 2026-08-06 13:36:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-06 09:56:11 +0000 UTC FinishedAt: 2026-08-06 09:56:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-06 09:56:11 +0000 UTC FinishedAt: 2026-08-06 09:56:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfpdjz/series-workflowfpdjz-convert-artifact-3303831659/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-06 09:56:22 +0000 UTC FinishedAt: 2026-08-06 10:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-06 09:56:22 +0000 UTC FinishedAt: 2026-08-06 10:13:40 +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:*65de4bb6-299b-4716-a4e0-2bc80bec3f73,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-workflowfpdjz/series-workflowfpdjz-convert-artifact-3303831659/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": "01d1575a-5d79-45c8-b2f3-f68c05374cf2", "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-workflowfpdjz/series-workflowfpdjz-build-action-2349788265/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-06 09:56:22 +0000 UTC FinishedAt: 2026-08-06 10:13:30 +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:*65de4bb6-299b-4716-a4e0-2bc80bec3f73,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-workflowfpdjz/series-workflowfpdjz-convert-artifact-3303831659/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": "01d1575a-5d79-45c8-b2f3-f68c05374cf2", "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-workflowfpdjz/series-workflowfpdjz-build-action-2349788265/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-06 10:13:40 +0000 UTC FinishedAt: 2026-08-06 10:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-06 10:13:40 +0000 UTC FinishedAt: 2026-08-06 10:13:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-06 10:13:40 +0000 UTC FinishedAt: 2026-08-06 10:13:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-06 10:13:40 +0000 UTC FinishedAt: 2026-08-06 10:13:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfpdjz/series-workflowfpdjz-convert-artifact-2269915202/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-06 10:13:50 +0000 UTC FinishedAt: 2026-08-06 10:15:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-06 10:13:50 +0000 UTC FinishedAt: 2026-08-06 10:15:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*01d1575a-5d79-45c8-b2f3-f68c05374cf2,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-workflowfpdjz/series-workflowfpdjz-build-action-2349788265/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-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-06 10:15:56 +0000 UTC FinishedAt: 2026-08-06 10:15:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-06 10:15:56 +0000 UTC FinishedAt: 2026-08-06 10:15:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-06 10:15:56 +0000 UTC FinishedAt: 2026-08-06 10:32:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-06 10:15:56 +0000 UTC FinishedAt: 2026-08-06 10:32:41 +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:*65de4bb6-299b-4716-a4e0-2bc80bec3f73,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-workflowfpdjz/series-workflowfpdjz-convert-artifact-2269915202/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": "028a467e-d679-4b9e-a2ac-08266f8b56d7", "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-workflowfpdjz/series-workflowfpdjz-build-action-3125467798/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-06 10:15:56 +0000 UTC FinishedAt: 2026-08-06 10:32:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*65de4bb6-299b-4716-a4e0-2bc80bec3f73,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-workflowfpdjz/series-workflowfpdjz-convert-artifact-2269915202/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": "028a467e-d679-4b9e-a2ac-08266f8b56d7", "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-workflowfpdjz/series-workflowfpdjz-build-action-3125467798/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-06 10:32:41 +0000 UTC FinishedAt: 2026-08-06 10:32:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-06 10:32:41 +0000 UTC FinishedAt: 2026-08-06 10:32:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-06 10:32:41 +0000 UTC FinishedAt: 2026-08-06 10:34:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-06 10:32:41 +0000 UTC FinishedAt: 2026-08-06 10:34:29 +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:*028a467e-d679-4b9e-a2ac-08266f8b56d7,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-workflowfpdjz/series-workflowfpdjz-build-action-3125467798/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-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-06 10:34:39 +0000 UTC FinishedAt: 2026-08-06 13:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-06 10:34:39 +0000 UTC FinishedAt: 2026-08-06 13:36:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"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:*01d1575a-5d79-45c8-b2f3-f68c05374cf2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*028a467e-d679-4b9e-a2ac-08266f8b56d7,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-workflowfpdjz/series-workflowfpdjz-build-action-2349788265/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-workflowfpdjz/series-workflowfpdjz-build-action-3125467798/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-06 10:34:39 +0000 UTC FinishedAt: 2026-08-06 10:34:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-06 10:34:39 +0000 UTC FinishedAt: 2026-08-06 10:34:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"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-workflowfpdjz/series-workflowfpdjz-convert-artifact-4093140599/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-06 10:34:39 +0000 UTC FinishedAt: 2026-08-06 10:34:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-06 10:34:39 +0000 UTC FinishedAt: 2026-08-06 10:34:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-06 10:34:39 +0000 UTC FinishedAt: 2026-08-06 10:34:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-06 10:34:49 +0000 UTC FinishedAt: 2026-08-06 13:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpdjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_mc_msfget","ip_mc_gsfget","ip6_mc_msfget"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b0057c68df711bf6a62033c072ac61c4f9d3cbc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6"],"series_id":"7d7b846e-a10f-4bb1-b5d9-0975a01e5a78","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-06 10:34:49 +0000 UTC FinishedAt: 2026-08-06 13:36:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*01d1575a-5d79-45c8-b2f3-f68c05374cf2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*028a467e-d679-4b9e-a2ac-08266f8b56d7,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-workflowfpdjz/series-workflowfpdjz-build-action-2349788265/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-workflowfpdjz/series-workflowfpdjz-build-action-3125467798/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-workflowfpdjz/series-workflowfpdjz-convert-artifact-4093140599/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,}