Name: series-workflowbptc6 Phase: Running StartedAt: 2026-08-27 21:49:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[0] Phase: Succeeded StartedAt: 2026-08-27 21:49:23 +0000 UTC FinishedAt: 2026-08-27 21:55:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 21:49:23 +0000 UTC FinishedAt: 2026-08-27 21:55:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET" ], "series_id": "06fa49bd-e47e-4dd8-b175-0a3987c7a7ee" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_inq_pop" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfaW5xX3BvcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBzY3RwX2lucV9wb3AoKWAgZm9yIGluY29taW5nIFNDVFAgY2h1bmtzIHdpdGggYW4gaW52YWxpZCBsZW5ndGggc21hbGxlciB0aGFuIHRoZSBTQ1RQIGNodW5rIGhlYWRlciAoYHNpemVvZigqY2gpYCkuIFByZXZpb3VzbHksIGEgY2h1bmsgbGVuZ3RoIFx1MDAzYyA0IGNvdWxkIGNhdXNlIGBjaHVuay1cdTAwM2VjaHVua19lbmRgIHRvIHByZWNlZGUgYGNodW5rLVx1MDAzZXNrYi1cdTAwM2VkYXRhYCwgbGVhZGluZyB0byBhIG5lZ2F0aXZlIGBza2JfcHVsbCgpYCBvZmZzZXQgYW5kIHNrYiBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCBwYWNrZXQgY2h1bmtzLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWRkcmVzc2VzIHBhY2tldCB2YWxpZGF0aW9uIGFuZCBib3VuZHMgY2hlY2tpbmcgb24gaW5jb21pbmcgbmV0d29yayBza2IgZGF0YS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBpcyBkZXRlY3RlZCBieSBLQVNBTiBhbmQga2VybmVsIGFzc2VydGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBuZXcgc3RydWN0IGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBjaHVuayBsZW5ndGggdmFsaWRhdGlvbiBpbiB0aGUgU0NUUCBpbnB1dCBxdWV1ZSBwcm9jZXNzb3IgKHNjdHBfaW5xX3BvcCkgdG8gZGlzY2FyZCBjaHVua3Mgd2hlbiB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aCBmaWVsZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGhlYWRlciBzaXplLCBwcmV2ZW50aW5nIG1hbGZvcm1lZCBjaHVua3MgZnJvbSBwcm9jZWVkaW5nLiBUaGlzIGFmZmVjdHMgY29yZSBTQ1RQIHBhY2tldCBwYXJzaW5nIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyZGUzNTc4YmQ5MGQwM2RiZDYxZDNkZDA0Yzg1ZDE1MTM2NjI1Y2QzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMjE6NTE6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaW5xdWV1ZS5jIGIvbmV0L3NjdHAvaW5xdWV1ZS5jXG5pbmRleCA1Zjk4OGIzYTg4MTRmLi5kNjY2Y2VjNmIxOTRlIDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvaW5xdWV1ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9pbnF1ZXVlLmNcbkBAIC0yMTIsOCAmIzQzOzIxMiwxMCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9pbnFfcG9wKHN0cnVjdCBzY3RwX2lucSAqcXVldWUpXG4gXHRjaHVuay1cdTAwM2VjaHVua19lbmQgPSAoKF9fdTggKiljaCkgJiM0MzsgU0NUUF9QQUQ0KG50b2hzKGNoLVx1MDAzZWxlbmd0aCkpO1xuIFx0c2tiX3B1bGwoY2h1bmstXHUwMDNlc2tiLCBzaXplb2YoKmNoKSk7XG4gXHRjaHVuay1cdTAwM2VzdWJoLnYgPSBOVUxMOyAvKiBTdWJoZWFkZXIgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgKi9cbi1cbi1cdGlmIChjaHVuay1cdTAwM2VjaHVua19lbmQgJiM0Mzsgc2l6ZW9mKCpjaCkgXHUwMDNjPSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYikpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkobnRvaHMoY2gtXHUwMDNlbGVuZ3RoKSBcdTAwM2Mgc2l6ZW9mKCpjaCkpKSB7XG4mIzQzO1x0XHRjaHVuay1cdTAwM2VwZGlzY2FyZCA9IDE7XG4mIzQzO1x0fSBlbHNlIGlmIChjaHVuay1cdTAwM2VjaHVua19lbmQgJiM0Mzsgc2l6ZW9mKCpjaCkgXHUwMDNjPVxuJiM0MztcdFx0ICAgc2tiX3RhaWxfcG9pbnRlcihjaHVuay1cdTAwM2Vza2IpKSB7XG4gXHRcdC8qIFRoaXMgaXMgbm90IGEgc2luZ2xldG9uICovXG4gXHRcdGNodW5rLVx1MDAzZXNpbmdsZXRvbiA9IDA7XG4gXHR9IGVsc2UgaWYgKGNodW5rLVx1MDAzZWNodW5rX2VuZCBcdTAwM2Ugc2tiX3RhaWxfcG9pbnRlcihjaHVuay1cdTAwM2Vza2IpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF9pbnFfcG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGNodW5rIGxlbmd0aCB2YWxpZGF0aW9uIGluIHRoZSBTQ1RQIGlucHV0IHF1ZXVlIHByb2Nlc3NvciAoc2N0cF9pbnFfcG9wKSB0byBkaXNjYXJkIGNodW5rcyB3aGVuIHRoZSBjaHVuayBoZWFkZXIgbGVuZ3RoIGZpZWxkIGlzIHNtYWxsZXIgdGhhbiB0aGUgaGVhZGVyIHNpemUsIHByZXZlbnRpbmcgbWFsZm9ybWVkIGNodW5rcyBmcm9tIHByb2NlZWRpbmcuIFRoaXMgYWZmZWN0cyBjb3JlIFNDVFAgcGFja2V0IHBhcnNpbmcgYW5kIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJkZTM1NzhiZDkwZDAzZGJkNjFkM2RkMDRjODVkMTUxMzY2MjVjZDMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAyMTo1MToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lucXVldWUuYyBiL25ldC9zY3RwL2lucXVldWUuYwppbmRleCA1Zjk4OGIzYTg4MTRmLi5kNjY2Y2VjNmIxOTRlIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9pbnF1ZXVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvaW5xdWV1ZS5jCkBAIC0yMTIsOCAmIzQzOzIxMiwxMCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9pbnFfcG9wKHN0cnVjdCBzY3RwX2lucSAqcXVldWUpCiAJY2h1bmstJmd0O2NodW5rX2VuZCA9ICgoX191OCAqKWNoKSAmIzQzOyBTQ1RQX1BBRDQobnRvaHMoY2gtJmd0O2xlbmd0aCkpOwogCXNrYl9wdWxsKGNodW5rLSZndDtza2IsIHNpemVvZigqY2gpKTsKIAljaHVuay0mZ3Q7c3ViaC52ID0gTlVMTDsgLyogU3ViaGVhZGVyIGlzIG5vIGxvbmdlciB2YWxpZC4gICovCi0KLQlpZiAoY2h1bmstJmd0O2NodW5rX2VuZCAmIzQzOyBzaXplb2YoKmNoKSAmbHQ7PSBza2JfdGFpbF9wb2ludGVyKGNodW5rLSZndDtza2IpKSB7CiYjNDM7CWlmICh1bmxpa2VseShudG9ocyhjaC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZigqY2gpKSkgewomIzQzOwkJY2h1bmstJmd0O3BkaXNjYXJkID0gMTsKJiM0MzsJfSBlbHNlIGlmIChjaHVuay0mZ3Q7Y2h1bmtfZW5kICYjNDM7IHNpemVvZigqY2gpICZsdDs9CiYjNDM7CQkgICBza2JfdGFpbF9wb2ludGVyKGNodW5rLSZndDtza2IpKSB7CiAJCS8qIFRoaXMgaXMgbm90IGEgc2luZ2xldG9uICovCiAJCWNodW5rLSZndDtzaW5nbGV0b24gPSAwOwogCX0gZWxzZSBpZiAoY2h1bmstJmd0O2NodW5rX2VuZCAmZ3Q7IHNrYl90YWlsX3BvaW50ZXIoY2h1bmstJmd0O3NrYikpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxNwoJCQkJCQkJb3V0cHV0OiAxMDUKCQkJCQkJCXRob3VnaHRzOiAzNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgU0NUUCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGdpdmVuIGEgcGF0Y2ggdG8gZXhhbWluZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYHNjdHBfaW5xX3BvcGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvc2N0cC9pbnF1ZXVlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbi4gVGhlIGNoYW5nZXMgc2VlbSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgdGhvcm91Z2hseS4KCkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGRpZmYuIEl0IHNlZW1zIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIGBudG9ocyhjaC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZigqY2gpYC4gVGhpcyBpcyBjbGVhcmx5IGEgdmFsaWRpdHkgY2hlY2sgb24gdGhlIGNodW5rIGxlbmd0aCwgbGlrZWx5IHRvIGhhbmRsZSBwb3RlbnRpYWwgY29ycnVwdGlvbiBvciBtYWxmb3JtZWQgcGFja2V0cy4gVGhlIHBhdGNoIHNldHMgYGNodW5rLSZndDtwZGlzY2FyZCA9IDE7YCBpZiB0aGUgbGVuZ3RoIGlzIGludmFsaWQuIFRoZSBvdGhlciBgaWZgIGNvbmRpdGlvbiBjaGVja3MgaWYgdGhlIGNodW5rIGlzIG5vdCBhIHNpbmdsZXRvbiwgYW5kIHRoZSBsYXN0IGBlbHNlIGlmYCBjb25kaXRpb24gaXMgYWxzbyBjaGVja2luZyB2YWxpZGl0eS4KCk5vdywgSSBuZWVkIG1vcmUgY29udGV4dC4gSSBoYXZlIHRvIHZlcmlmeSB0aGUgcGF0Y2gmIzM5O3MgY29ycmVjdG5lc3MgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoZWNrIGlzIGJlaW5nIGFkZGVkLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2l0aGluIGBzY3RwX2lucV9wb3BgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaHVuayBsZW5ndGggaXMgdXNlZCBhbmQgd2hhdCB0aGlzIG5ldyBjaGVjayBndWFyZHMgYWdhaW5zdC4gSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSBjYWxsZXJzIGFuZCB0aGUgZXhwb3J0ZWQgc3ltYm9scyB0byBnYXVnZSB0aGUgaW1wYWN0LgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBTQ1RQIHRvIGVuc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgY29tcGF0aWJpbGl0eSBpc3N1ZXMgb3IgY29uZmxpY3RzIHdpdGggdmFyaW91cyBjb25maWd1cmF0aW9ucy4KClRpbWUgdG8gcHVsbCBvdXQgdGhlIHRvb2xzLiBJJiMzOTtsbCBuZWVkIHRvIHJ1biBzb21lIHN0YXRpYyBhbmFseXNpcyB0byBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGludHJvZHVjZWQgb3IgcmVzb2x2ZWQgYW5kIGFsc28gdG8gY2hlY2sgYWxsIHVzZXMgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCB0byBlbnN1cmUgY29uc2lzdGVuY3kuIEEgcXVpY2sgY2hlY2sgd2l0aCBgc3BhcnNlYCBvciBzaW1pbGFyIHRvb2xzLCBhbmQgbWF5YmUgZXZlbiBhIHF1aWNrIHJ1biB3aXRoIGEgZnV6emVyIG9uIHRoZSBhZmZlY3RlZCBhcmVhLCBpcyB3YXJyYW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9pbnF1ZXVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0XHRcdFx0XHRnb3RvIG5leHRfY2h1bms7XG4gMTgxOlx0XHRcdFx0XHR9XG4gMTgyOlx0XHRcdFx0XHRjaHVuay1cdTAwM2Vza2IgPSBza2Jfc2hpbmZvKGNodW5rLVx1MDAzZXNrYiktXHUwMDNlZnJhZ19saXN0O1xuIDE4MzpcdFx0XHRcdH1cbiAxODQ6XHRcdFx0fVxuIDE4NTpcdFxuIDE4NjpcdFx0XHRpZiAoY2h1bmstXHUwMDNlYXNvYylcbiAxODc6XHRcdFx0XHRzb2NrX3Jwc19zYXZlX3J4aGFzaChjaHVuay1cdTAwM2Vhc29jLVx1MDAzZWJhc2Uuc2ssIGNodW5rLVx1MDAzZXNrYik7XG4gMTg4Olx0XG4gMTg5Olx0XHRcdHF1ZXVlLVx1MDAzZWluX3Byb2dyZXNzID0gY2h1bms7XG4gMTkwOlx0XG4gMTkxOlx0bmV3X3NrYjpcbiAxOTI6XHRcdFx0LyogVGhpcyBpcyB0aGUgZmlyc3QgY2h1bmsgaW4gdGhlIHBhY2tldC4gICovXG4gMTkzOlx0XHRcdGNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopY2h1bmstXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG4gMTk0Olx0XHRcdGNodW5rLVx1MDAzZXNpbmdsZXRvbiA9IDE7XG4gMTk1Olx0XHRcdGNodW5rLVx1MDAzZWRhdGFfYWNjZXB0ZWQgPSAwO1xuIDE5NjpcdFx0XHRjaHVuay1cdTAwM2VwZGlzY2FyZCA9IDA7XG4gMTk3Olx0XHRcdGNodW5rLVx1MDAzZWF1dGggPSAwO1xuIDE5ODpcdFx0XHRjaHVuay1cdTAwM2VoYXNfYXNjb25mID0gMDtcbiAxOTk6XHRcdFx0Y2h1bmstXHUwMDNlZW5kX29mX3BhY2tldCA9IDA7XG4gMjAwOlx0XHRcdGlmIChjaHVuay1cdTAwM2VoZWFkX3NrYikge1xuIDIwMTpcdFx0XHRcdHN0cnVjdCBzY3RwX2lucHV0X2NiXG4gMjAyOlx0XHRcdFx0XHQqY2IgPSBTQ1RQX0lOUFVUX0NCKGNodW5rLVx1MDAzZXNrYiksXG4gMjAzOlx0XHRcdFx0XHQqaGVhZF9jYiA9IFNDVFBfSU5QVVRfQ0IoY2h1bmstXHUwMDNlaGVhZF9za2IpO1xuIDIwNDpcdFxuIDIwNTpcdFx0XHRcdGNiLVx1MDAzZWNodW5rID0gaGVhZF9jYi1cdTAwM2VjaHVuaztcbiAyMDY6XHRcdFx0XHRjYi1cdTAwM2VhZiA9IGhlYWRfY2ItXHUwMDNlYWY7XG4gMjA3Olx0XHRcdFx0Y2ItXHUwMDNlZW5jYXBfcG9ydCA9IGhlYWRfY2ItXHUwMDNlZW5jYXBfcG9ydDtcbiAyMDg6XHRcdFx0fVxuIDIwOTpcdFx0fVxuIDIxMDpcdFxuIDIxMTpcdFx0Y2h1bmstXHUwMDNlY2h1bmtfaGRyID0gY2g7XG4gMjEyOlx0XHRjaHVuay1cdTAwM2VjaHVua19lbmQgPSAoKF9fdTggKiljaCkgJiM0MzsgU0NUUF9QQUQ0KG50b2hzKGNoLVx1MDAzZWxlbmd0aCkpO1xuIDIxMzpcdFx0c2tiX3B1bGwoY2h1bmstXHUwMDNlc2tiLCBzaXplb2YoKmNoKSk7XG4gMjE0Olx0XHRjaHVuay1cdTAwM2VzdWJoLnYgPSBOVUxMOyAvKiBTdWJoZWFkZXIgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgKi9cbiAyMTU6XHRcdGlmICh1bmxpa2VseShudG9ocyhjaC1cdTAwM2VsZW5ndGgpIFx1MDAzYyBzaXplb2YoKmNoKSkpIHtcbiAyMTY6XHRcdFx0Y2h1bmstXHUwMDNlcGRpc2NhcmQgPSAxO1xuIDIxNzpcdFx0fSBlbHNlIGlmIChjaHVuay1cdTAwM2VjaHVua19lbmQgJiM0Mzsgc2l6ZW9mKCpjaCkgXHUwMDNjPVxuIDIxODpcdFx0XHQgICBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYikpIHtcbiAyMTk6XHRcdFx0LyogVGhpcyBpcyBub3QgYSBzaW5nbGV0b24gKi9cbiAyMjA6XHRcdFx0Y2h1bmstXHUwMDNlc2luZ2xldG9uID0gMDtcbiAyMjE6XHRcdH0gZWxzZSBpZiAoY2h1bmstXHUwMDNlY2h1bmtfZW5kIFx1MDAzZSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYikpIHtcbiAyMjI6XHRcdFx0LyogRGlzY2FyZCBpbnNpZGUgc3RhdGUgbWFjaGluZS4gKi9cbiAyMjM6XHRcdFx0Y2h1bmstXHUwMDNlcGRpc2NhcmQgPSAxO1xuIDIyNDpcdFx0XHRjaHVuay1cdTAwM2VjaHVua19lbmQgPSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYik7XG4gMjI1Olx0XHR9IGVsc2Uge1xuIDIyNjpcdFx0XHQvKiBXZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgcGFja2V0LCBzbyBtYXJrIHRoZSBjaHVua1xuIDIyNzpcdFx0XHQgKiBpbiBjYXNlIHdlIG5lZWQgdG8gc2VuZCBhIFNBQ0suXG4gMjI4Olx0XHRcdCAqL1xuIDIyOTpcdFx0XHRjaHVuay1cdTAwM2VlbmRfb2ZfcGFja2V0ID0gMTtcbiAyMzA6XHRcdH1cbiAyMzE6XHRcbiAyMzI6XHRcdHByX2RlYnVnKFwmIzM0OyYjNDM7JiM0MzsmIzQzO3NjdHBfaW5xX3BvcCYjNDM7JiM0MzsmIzQzOyBjaHVuazolcFslc10sIGxlbmd0aDolZCwgc2tiLVx1MDAzZWxlbjolZFxcblwmIzM0OyxcbiAyMzM6XHRcdFx0IGNodW5rLCBzY3RwX2NuYW1lKFNDVFBfU1RfQ0hVTksoY2h1bmstXHUwMDNlY2h1bmtfaGRyLVx1MDAzZXR5cGUpKSxcbiAyMzQ6XHRcdFx0IG50b2hzKGNodW5rLVx1MDAzZWNodW5rX2hkci1cdTAwM2VsZW5ndGgpLCBjaHVuay1cdTAwM2Vza2ItXHUwMDNlbGVuKTtcbiAyMzU6XHRcbiAyMzY6XHRcdHJldHVybiBjaHVuaztcbiAyMzc6XHR9XG4gMjM4Olx0XG4gMjM5Olx0LyogU2V0IGEgdG9wLWhhbGYgaGFuZGxlci5cbiAyNDA6XHQgKlxuIDI0MTpcdCAqIE9yaWdpbmFsbHksIHdlIHRoZSB0b3AtaGFsZiBoYW5kbGVyIHdhcyBzY2hlZHVsZWQgYXMgYSBCSC4gIFdlIG5vd1xuIDI0MjpcdCAqIGNhbGwgdGhlIGhhbmRsZXIgZGlyZWN0bHkgaW4gc2N0cF9pbnFfcHVzaCgpIGF0IGEgdGltZSB0aGF0XG4gMjQzOlx0ICogd2Uga25vdyB3ZSBhcmUgbG9jayBzYWZlLlxuIDI0NDpcdCAqIFRoZSBpbnRlbnQgaXMgdGhhdCB0aGlzIHJvdXRpbmUgd2lsbCBwdWxsIHN0dWZmIG91dCBvZiB0aGVcbiAyNDU6XHQgKiBpbnF1ZXVlIGFuZCBwcm9jZXNzIGl0LlxuIDI0NjpcdCAqL1xuIDI0NzpcdHZvaWQgc2N0cF9pbnFfc2V0X3RoX2hhbmRsZXIoc3RydWN0IHNjdHBfaW5xICpxLCB3b3JrX2Z1bmNfdCBjYWxsYmFjaylcbiAyNDg6XHR7XG4gMjQ5Olx0XHRJTklUX1dPUksoXHUwMDI2cS1cdTAwM2VpbW1lZGlhdGUsIGNhbGxiYWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX2lucV9wb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9hc3NvY2lvbGEuYz05NzE9c3RhdGljIHZvaWQgc2N0cF9hc3NvY19iaF9yY3Yoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTk4OS1cdHNjdHBfYXNzb2NpYXRpb25faG9sZChhc29jKTtcbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjk5MDpcdHdoaWxlIChOVUxMICE9IChjaHVuayA9IHNjdHBfaW5xX3BvcChpbnF1ZXVlKSkpIHtcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTk5MS1cdFx0c3RhdGUgPSBhc29jLVx1MDAzZXN0YXRlO1xuLS1cbm5ldC9zY3RwL2VuZHBvaW50b2xhLmM9MzI2PXN0YXRpYyB2b2lkIHNjdHBfZW5kcG9pbnRfYmhfcmN2KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc2N0cC9lbmRwb2ludG9sYS5jLTM0OS1cbm5ldC9zY3RwL2VuZHBvaW50b2xhLmM6MzUwOlx0d2hpbGUgKE5VTEwgIT0gKGNodW5rID0gc2N0cF9pbnFfcG9wKGlucXVldWUpKSkge1xubmV0L3NjdHAvZW5kcG9pbnRvbGEuYy0zNTEtXHRcdHN1YnR5cGUgPSBTQ1RQX1NUX0NIVU5LKGNodW5rLVx1MDAzZWNodW5rX2hkci1cdTAwM2V0eXBlKTtcbi0tXG5uZXQvc2N0cC9pbnF1ZXVlLmM9OTU9c3RydWN0IHNjdHBfY2h1bmtoZHIgKnNjdHBfaW5xX3BlZWsoc3RydWN0IHNjdHBfaW5xICpxdWV1ZSlcbi0tXG5uZXQvc2N0cC9pbnF1ZXVlLmMtMTE3LSAqL1xubmV0L3NjdHAvaW5xdWV1ZS5jOjExODpzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9pbnFfcG9wKHN0cnVjdCBzY3RwX2lucSAqcXVldWUpXG5uZXQvc2N0cC9pbnF1ZXVlLmMtMTE5LXtcbi0tXG5uZXQvc2N0cC9pbnF1ZXVlLmMtMjMxLVxubmV0L3NjdHAvaW5xdWV1ZS5jOjIzMjpcdHByX2RlYnVnKFwmIzM0OyYjNDM7JiM0MzsmIzQzO3NjdHBfaW5xX3BvcCYjNDM7JiM0MzsmIzQzOyBjaHVuazolcFslc10sIGxlbmd0aDolZCwgc2tiLVx1MDAzZWxlbjolZFxcblwmIzM0Oyxcbm5ldC9zY3RwL2lucXVldWUuYy0yMzMtXHRcdCBjaHVuaywgc2N0cF9jbmFtZShTQ1RQX1NUX0NIVU5LKGNodW5rLVx1MDAzZWNodW5rX2hkci1cdTAwM2V0eXBlKSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgU0NUUCBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgSVBfU0NUUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIFNDVFAgUHJvdG9jb2xcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gIDExOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAxMjpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTM6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2xcbiAgMTY6XHRcbiAgMTc6XHRcdCAgRnJvbSBSRkMgMjk2MCBcdTAwM2NodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTYwLnR4dFx1MDAzZS5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgXCYjMzQ7U0NUUCBpcyBhIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2NvbCBvcGVyYXRpbmcgb24gdG9wIG9mIGFcbiAgMjA6XHRcdCAgY29ubmVjdGlvbmxlc3MgcGFja2V0IG5ldHdvcmsgc3VjaCBhcyBJUC4gIEl0IG9mZmVycyB0aGUgZm9sbG93aW5nXG4gIDIxOlx0XHQgIHNlcnZpY2VzIHRvIGl0cyB1c2VyczpcbiAgMjI6XHRcbiAgMjM6XHRcdCAgLS0gYWNrbm93bGVkZ2VkIGVycm9yLWZyZWUgbm9uLWR1cGxpY2F0ZWQgdHJhbnNmZXIgb2YgdXNlciBkYXRhLFxuICAyNDpcdFx0ICAtLSBkYXRhIGZyYWdtZW50YXRpb24gdG8gY29uZm9ybSB0byBkaXNjb3ZlcmVkIHBhdGggTVRVIHNpemUsXG4gIDI1Olx0XHQgIC0tIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiB1c2VyIG1lc3NhZ2VzIHdpdGhpbiBtdWx0aXBsZSBzdHJlYW1zLFxuICAyNjpcdFx0ICB3aXRoIGFuIG9wdGlvbiBmb3Igb3JkZXItb2YtYXJyaXZhbCBkZWxpdmVyeSBvZiBpbmRpdmlkdWFsIHVzZXJcbiAgMjc6XHRcdCAgbWVzc2FnZXMsXG4gIDI4Olx0XHQgIC0tIG9wdGlvbmFsIGJ1bmRsaW5nIG9mIG11bHRpcGxlIHVzZXIgbWVzc2FnZXMgaW50byBhIHNpbmdsZSBTQ1RQXG4gIDI5Olx0XHQgIHBhY2tldCwgYW5kXG4gIDMwOlx0XHQgIC0tIG5ldHdvcmstbGV2ZWwgZmF1bHQgdG9sZXJhbmNlIHRocm91Z2ggc3VwcG9ydGluZyBvZiBtdWx0aS1cbiAgMzE6XHRcdCAgaG9taW5nIGF0IGVpdGhlciBvciBib3RoIGVuZHMgb2YgYW4gYXNzb2NpYXRpb24uXCYjMzQ7XG4gIDMyOlx0XG4gIDMzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBwcm90b2NvbCBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjdHAuIERlYnVnIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGJ5IHRoZVxuICAzNTpcdFx0ICBrZXJuZWwmIzM5O3MgZHluYW1pYyBkZWJ1Z2dpbmcgZnJhbWV3b3JrLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gIDM4Olx0XG4gIDM5Olx0aWYgSVBfU0NUUFxuICA0MDpcdFxuICA0MTpcdGNvbmZpZyBTQ1RQX0RCR19PQkpDTlRcbiAgNDI6XHRcdGJvb2wgXCYjMzQ7U0NUUDogRGVidWcgb2JqZWN0IGNvdW50c1wmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDQ0Olx0XHRoZWxwXG4gIDQ1Olx0XHQgIElmIHlvdSBzYXkgWSwgdGhpcyB3aWxsIGVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydCBmb3IgY291bnRpbmcgdGhlXG4gIDQ2Olx0XHQgIHR5cGUgb2Ygb2JqZWN0cyB0aGF0IGFyZSBjdXJyZW50bHkgYWxsb2NhdGVkLiAgVGhpcyBpcyB1c2VmdWwgZm9yXG4gIDQ3Olx0XHQgIGlkZW50aWZ5aW5nIG1lbW9yeSBsZWFrcy4gVGhpcyBkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYmUgdmlld2VkIGJ5XG4gIDQ4Olx0XHQgICYjMzk7Y2F0IC9wcm9jL25ldC9zY3RwL3NjdHBfZGJnX29iamNudCYjMzk7XG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDE3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0NUUCBDaHVuayBQcm9jZXNzaW5nIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHNjdHBfaW5xX3BvcGAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQuIE15IGluaXRpYWwgY29uY2VybiBpcyB3aXRoIGhvdyB0aGUgY29kZSBoYW5kbGVzIGludmFsaWQgY2h1bmsgbGVuZ3Rocywgc3BlY2lmaWNhbGx5IHdoZW4gYG50b2hzKGNoLSZndDtsZW5ndGgpYCBpcyBsZXNzIHRoYW4gYHNpemVvZigqY2gpYC4gUHJldmlvdXNseSwgaXQgc2VlbXMgdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGBjaHVua19lbmRgIHBvaW50aW5nIG91dHNpZGUgdGhlIGV4cGVjdGVkIG1lbW9yeSByZWdpb24sIGVpdGhlciBiZWZvcmUgdGhlIGNodW5rIGhlYWRlciBvciB0aHJvdWdoIGFuIHVuZGVyZmxvdywgcmVzdWx0aW5nIGluIG1hbGZvcm1lZCBjaHVuayBoYW5kbGluZyBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSEKCk5vdywgdGhlIGZpeCBsZXZlcmFnZXMgdGhlIGB1bmxpa2VseSgpYCBtYWNybyBhbmQgc2V0cyBgY2h1bmstJmd0O3BkaXNjYXJkID0gMWAgaWYgYG50b2hzKGNoLSZndDtsZW5ndGgpYCBpcyBpbmRlZWQgbGVzcyB0aGFuIGBzaXplb2YoKmNoKWAuIFRoaXMgc2VlbXMgbGlrZSBhIGJldHRlciBhcHByb2FjaCAtIGV4cGxpY2l0bHkgbWFya2luZyB0aGUgY2h1bmsgZm9yIGRpc2NhcmQgcHJldmVudHMgZnVydGhlciBwcm9jZXNzaW5nIG9mIGdhcmJhZ2UgZGF0YS4KCmBzY3RwX2lucV9wb3BgIHJlc2lkZXMgaW4gYG5ldC9zY3RwL2lucXVldWUuY2AsIGFuZCBJIHNob3VsZCBjb25maXJtIGlmIGl0JiMzOTtzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBzaW5jZSBpdHMgaW50ZXJmYWNlIGNvdWxkIGluZmx1ZW5jZSBob3cgaXQgaXMgY2FsbGVkIGFuZCB1c2VkLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L3NjdHAvTWFrZWZpbGVgIG9yIHJlbGV2YW50IGhlYWRlciBkZWNsYXJhdGlvbnMgZm9yIHRoYXQuIExldCYjMzk7cyBzZWUuLi4gTGluZSAxMTg6IGBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9pbnFfcG9wKHN0cnVjdCBzY3RwX2lucSAqcXVldWUpYC4gT2theSwgdGhhdCBnaXZlcyBtZSB0aGUgc2lnbmF0dXJlLCBidXQgSSBuZWVkIHRvIGtub3cgaWYgaXQmIzM5O3MgZXh0ZXJuYWxseSB2aXNpYmxlIG9yIG9ubHkgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZS4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjdHBfaW5xX3BvcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oPTEwNDI9dm9pZCBzY3RwX2lucV9wdXNoKHN0cnVjdCBzY3RwX2lucSAqLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqcGFja2V0KTtcbmluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oOjEwNDM6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfaW5xX3BvcChzdHJ1Y3Qgc2N0cF9pbnEgKik7XG5pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaC0xMDQ0LXN0cnVjdCBzY3RwX2NodW5raGRyICpzY3RwX2lucV9wZWVrKHN0cnVjdCBzY3RwX2lucSAqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTQ1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50IGRvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3Mgb2YgYGlucXVldWUub2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBpbnF1ZXVlLm9gIGlzIGJlaW5nIGNvbXBpbGVkLiBJdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIHdpdGhpbiB0aGUgU0NUUCBzdGFjaywgYW5kIEkgd2FudCB0byBkb3VibGUtY2hlY2sgaXRzIGJ1aWxkIHByb2Nlc3MuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvc2N0cC9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgU0NUUCBtb2R1bGUgc2hvdWxkIHJlc2lkZS4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGF0IHRoZSBtYWtlZmlsZSByZXZlYWxzIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMsIGNvbXBpbGVyIGZsYWdzLCBhbmQgbGlua2luZyBwcm9jZWR1cmUgZm9yIGBpbnF1ZXVlLm9gLiBUaGlzIHdpbGwgaGVscCBtZSBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IGl0cyBpbnRlZ3JhdGlvbiBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbiBwb2ludHMgd2l0aGluIHRoZSBsYXJnZXIgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBTQ1RQIHN1cHBvcnQgY29kZS5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0lQX1NDVFApICYjNDM7PSBzY3RwLm9cbiAgIDc6XHRvYmotJChDT05GSUdfSU5FVF9TQ1RQX0RJQUcpICYjNDM7PSBzY3RwX2RpYWcub1xuICAgODpcdFxuICAgOTpcdHNjdHAteSA6PSBzbV9zdGF0ZXRhYmxlLm8gc21fc3RhdGVmdW5zLm8gc21fc2lkZWVmZmVjdC5vIFxcXG4gIDEwOlx0XHQgIHByb3RvY29sLm8gZW5kcG9pbnRvbGEubyBhc3NvY2lvbGEubyBcXFxuICAxMTpcdFx0ICB0cmFuc3BvcnQubyBjaHVuay5vIHNtX21ha2VfY2h1bmsubyB1bHBldmVudC5vIFxcXG4gIDEyOlx0XHQgIGlucXVldWUubyBvdXRxdWV1ZS5vIHVscHF1ZXVlLm8gXFxcbiAgMTM6XHRcdCAgdHNubWFwLm8gYmluZF9hZGRyLm8gc29ja2V0Lm8gcHJpbWl0aXZlLm8gXFxcbiAgMTQ6XHRcdCAgb3V0cHV0Lm8gaW5wdXQubyBkZWJ1Zy5vIHN0cmVhbS5vIGF1dGgubyBcXFxuICAxNTpcdFx0ICBvZmZsb2FkLm8gc3RyZWFtX3NjaGVkLm8gc3RyZWFtX3NjaGVkX3ByaW8ubyBcXFxuICAxNjpcdFx0ICBzdHJlYW1fc2NoZWRfcnIubyBzdHJlYW1fc2NoZWRfZmMubyBcXFxuICAxNzpcdFx0ICBzdHJlYW1faW50ZXJsZWF2ZS5vXG4gIDE4Olx0XG4gIDE5Olx0c2N0cF9kaWFnLXkgOj0gZGlhZy5vXG4gIDIwOlx0XG4gIDIxOlx0c2N0cC0kKENPTkZJR19TQ1RQX0RCR19PQkpDTlQpICYjNDM7PSBvYmpjbnQub1xuICAyMjpcdHNjdHAtJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xuICAyMzpcdHNjdHAtJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsLm9cbiAgMjQ6XHRcbiAgMjU6XHRzY3RwLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKVx0JiM0Mzs9IGlwdjYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODA1CgkJCQkJCQlvdXRwdXQ6IDExMwoJCQkJCQkJdGhvdWdodHM6IDM5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBgQ09ORklHX0lQX1NDVFBgIGFuZCBgc2N0cF9pbnFfcG9wYCoqCgpPa2F5LCBzbyBgQ09ORklHX0lQX1NDVFBgIGRpcmVjdGx5IGxlYWRzIHRvIHRoZSBjb21waWxhdGlvbiBvZiBgc2N0cC5vYCwgd2hpY2ggaW5jbHVkZXMgYGlucXVldWUub2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIGdhaW4gYSBicm9hZGVyIHBpY3R1cmUuIGBtZW51Y29uZmlnIElQX1NDVFBgIGRlcGVuZHMgb24gYElORVRgLCB3aGljaCBpcyBhIHByZXR0eSBzdGFuZGFyZCwgZm91bmRhdGlvbmFsIGNvbmZpZ3VyYXRpb24uCgpJcyB0aGlzIGEgZnV6emluZyB0YXJnZXQ/IEFic29sdXRlbHkhIFRoaXMgaXMgcHJpbWUgcmVhbCBlc3RhdGUg4oCTIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IFNDVFAgcGFja2V0IHBhcnNpbmcgYW5kIGlucXVldWUgcHJvY2Vzc2luZy4gU3BlY2lmaWNhbGx5LCB0aGUgaGFuZGxpbmcgb2YgY2h1bmtzIHdpdGggcG90ZW50aWFsbHkgaW52YWxpZCBsZW5ndGhzIOKAkyB1bmRlcnNpemVkIGNodW5rcyB3aGVyZSBgY2gtJmd0O2xlbmd0aGAgaXMgbGVzcyB0aGFuIGBzaXplb2YoKmNoKWAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNvdXJjZSBvZiB2dWxuZXJhYmlsaXRpZXMuIEl0JiMzOTtzIGFsc28gcGFydCBvZiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLiBUaGluayBzdGFuZGFyZCBuZXR3b3JraW5nIGFjY2VzczogU0NUUCBzb2NrZXRzLCByYXcgcGFja2V0cywgU3l6a2FsbGVyIFNDVFAgc3lzY2FsbHMsIG5ldHdvcmsgZGV2aWNlIFJYLiBUaGlzIGlzIGFsbCB2ZXJ5IHJlYWNoYWJsZS4gVGhpcyB2dWxuZXJhYmlsaXR5IHRhcmdldHMgaG93IGBzY3RwX2lucV9wb3BgIGV4ZWN1dGVzIGl0cyBsb2dpYy4KCk5vdywgbGV0JiMzOTtzIGV4YW1pbmUgdGhlIGZvY3VzIHN5bWJvbC4gYHNjdHBfaW5xX3BvcGAgaXMgYSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZnVuY3Rpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBJdCB0YWtlcyBhIGBzdHJ1Y3Qgc2N0cF9pbnEgKnF1ZXVlYCBhbmQgcmV0dXJucyBhIGBzdHJ1Y3Qgc2N0cF9jaHVuayAqYC4gSSBhbHNvIG5vdGUgdGhlIGNhbGxlcnMgYW5kIHJlbGF0ZWQgZW50cnlwb2ludHMuIExvb2tzIGxpa2Ugd2UgaGF2ZSBgc2N0cF9hc3NvY19iaF9yY3ZgLCBgc2N0cF9lbmRwb2ludF9iaF9yY3ZgLCBhbmQgZXZlbiBgc2N0cF9pbnFfcG9wYCBpdHNlbGYuIFNvLCBgc2N0cF9pbnFfcG9wYCBpdHNlbGYgaXMgdGhlIHByZWNpc2UgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQuIEl0JiMzOTtzIGFuIGV4Y2VsbGVudCBmb2N1cyBzeW1ib2wuCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uczogYElQX1NDVFBgIGFuZCwgb2YgY291cnNlLCBgSU5FVGAuCgpBbHJpZ2h0LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHN1bW1hcml6ZToKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gdGhpcyBpcyBhIHNvbGlkIHRhcmdldC4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbJiMzNDtzY3RwX2lucV9wb3AmIzM0O11gIC0gdGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLgoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtJUF9TQ1RQJiMzNDssICYjMzQ7SU5FVCYjMzQ7XWAgLSBvdXIgcmVxdWlyZWQgYnVpbGRpbmcgYmxvY2tzLgoqICAgKipSZWFzb25pbmc6KiogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyB2ZXJkaWN0IGlzIHdoYXQgaXQgaXMuCgpUaW1lIHRvIG1ha2UgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfaW5xX3BvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBjaHVuayBsZW5ndGggdmFsaWRhdGlvbiBpbiB0aGUgU0NUUCBpbnB1dCBxdWV1ZSBwcm9jZXNzb3IgKHNjdHBfaW5xX3BvcCkgdG8gZGlzY2FyZCBjaHVua3Mgd2hlbiB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aCBmaWVsZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGhlYWRlciBzaXplLCBwcmV2ZW50aW5nIG1hbGZvcm1lZCBjaHVua3MgZnJvbSBwcm9jZWVkaW5nLiBUaGlzIGFmZmVjdHMgY29yZSBTQ1RQIHBhY2tldCBwYXJzaW5nIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfaW5xX3BvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBjaHVuayBsZW5ndGggdmFsaWRhdGlvbiBpbiB0aGUgU0NUUCBpbnB1dCBxdWV1ZSBwcm9jZXNzb3IgKHNjdHBfaW5xX3BvcCkgdG8gZGlzY2FyZCBjaHVua3Mgd2hlbiB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aCBmaWVsZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGhlYWRlciBzaXplLCBwcmV2ZW50aW5nIG1hbGZvcm1lZCBjaHVua3MgZnJvbSBwcm9jZWVkaW5nLiBUaGlzIGFmZmVjdHMgY29yZSBTQ1RQIHBhY2tldCBwYXJzaW5nIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc2N0cF9pbnFfcG9wKClgIGZvciBpbmNvbWluZyBTQ1RQIGNodW5rcyB3aXRoIGFuIGludmFsaWQgbGVuZ3RoIHNtYWxsZXIgdGhhbiB0aGUgU0NUUCBjaHVuayBoZWFkZXIgKGBzaXplb2YoKmNoKWApLiBQcmV2aW91c2x5LCBhIGNodW5rIGxlbmd0aCBcdTAwM2MgNCBjb3VsZCBjYXVzZSBgY2h1bmstXHUwMDNlY2h1bmtfZW5kYCB0byBwcmVjZWRlIGBjaHVuay1cdTAwM2Vza2ItXHUwMDNlZGF0YWAsIGxlYWRpbmcgdG8gYSBuZWdhdGl2ZSBgc2tiX3B1bGwoKWAgb2Zmc2V0IGFuZCBza2IgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggcGFja2V0IGNodW5rcy5cblxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFkZHJlc3NlcyBwYWNrZXQgdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIG5ldHdvcmsgc2tiIGRhdGEuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYXJpc2luZyBmcm9tIHRoaXMgbG9naWMgaXMgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIGtlcm5lbCBhc3NlcnRpb25zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbmV3IHN0cnVjdCBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmRlMzU3OGJkOTBkMDNkYmQ2MWQzZGQwNGM4NWQxNTEzNjYyNWNkMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDIxOjUxOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaW5xdWV1ZS5jIGIvbmV0L3NjdHAvaW5xdWV1ZS5jCmluZGV4IDVmOTg4YjNhODgxNGYuLmQ2NjZjZWM2YjE5NGUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lucXVldWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9pbnF1ZXVlLmMKQEAgLTIxMiw4ICYjNDM7MjEyLDEwIEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX2lucV9wb3Aoc3RydWN0IHNjdHBfaW5xICpxdWV1ZSkKIAljaHVuay0mZ3Q7Y2h1bmtfZW5kID0gKChfX3U4ICopY2gpICYjNDM7IFNDVFBfUEFENChudG9ocyhjaC0mZ3Q7bGVuZ3RoKSk7CiAJc2tiX3B1bGwoY2h1bmstJmd0O3NrYiwgc2l6ZW9mKCpjaCkpOwogCWNodW5rLSZndDtzdWJoLnYgPSBOVUxMOyAvKiBTdWJoZWFkZXIgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgKi8KLQotCWlmIChjaHVuay0mZ3Q7Y2h1bmtfZW5kICYjNDM7IHNpemVvZigqY2gpICZsdDs9IHNrYl90YWlsX3BvaW50ZXIoY2h1bmstJmd0O3NrYikpIHsKJiM0MzsJaWYgKHVubGlrZWx5KG50b2hzKGNoLSZndDtsZW5ndGgpICZsdDsgc2l6ZW9mKCpjaCkpKSB7CiYjNDM7CQljaHVuay0mZ3Q7cGRpc2NhcmQgPSAxOwomIzQzOwl9IGVsc2UgaWYgKGNodW5rLSZndDtjaHVua19lbmQgJiM0Mzsgc2l6ZW9mKCpjaCkgJmx0Oz0KJiM0MzsJCSAgIHNrYl90YWlsX3BvaW50ZXIoY2h1bmstJmd0O3NrYikpIHsKIAkJLyogVGhpcyBpcyBub3QgYSBzaW5nbGV0b24gKi8KIAkJY2h1bmstJmd0O3NpbmdsZXRvbiA9IDA7CiAJfSBlbHNlIGlmIChjaHVuay0mZ3Q7Y2h1bmtfZW5kICZndDsgc2tiX3RhaWxfcG9pbnRlcihjaHVuay0mZ3Q7c2tiKSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjoKCioqS01TQU4gRnV6emluZyBTZXNzaW9uIEV2YWx1YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBpcyBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gYG5ldC9zY3RwL2lucXVldWUuY2AsIGFuZCBtb3JlIHNwZWNpZmljYWxseSwgdGhlIGFyZWEgYXJvdW5kIGxpbmUgMjEyLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcgb2YgdGhlIGNvZGUgaW4gdGhhdCBhcmVhIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBCYXNlZCBvbiB0aGlzIGluc3BlY3Rpb24sIEkgY2FuIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3QgYW5kIHZ1bG5lcmFiaWxpdHkgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9pbnF1ZXVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0XHRcdFx0XHRnb3RvIG5leHRfY2h1bms7XG4gMTgxOlx0XHRcdFx0XHR9XG4gMTgyOlx0XHRcdFx0XHRjaHVuay1cdTAwM2Vza2IgPSBza2Jfc2hpbmZvKGNodW5rLVx1MDAzZXNrYiktXHUwMDNlZnJhZ19saXN0O1xuIDE4MzpcdFx0XHRcdH1cbiAxODQ6XHRcdFx0fVxuIDE4NTpcdFxuIDE4NjpcdFx0XHRpZiAoY2h1bmstXHUwMDNlYXNvYylcbiAxODc6XHRcdFx0XHRzb2NrX3Jwc19zYXZlX3J4aGFzaChjaHVuay1cdTAwM2Vhc29jLVx1MDAzZWJhc2Uuc2ssIGNodW5rLVx1MDAzZXNrYik7XG4gMTg4Olx0XG4gMTg5Olx0XHRcdHF1ZXVlLVx1MDAzZWluX3Byb2dyZXNzID0gY2h1bms7XG4gMTkwOlx0XG4gMTkxOlx0bmV3X3NrYjpcbiAxOTI6XHRcdFx0LyogVGhpcyBpcyB0aGUgZmlyc3QgY2h1bmsgaW4gdGhlIHBhY2tldC4gICovXG4gMTkzOlx0XHRcdGNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopY2h1bmstXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG4gMTk0Olx0XHRcdGNodW5rLVx1MDAzZXNpbmdsZXRvbiA9IDE7XG4gMTk1Olx0XHRcdGNodW5rLVx1MDAzZWRhdGFfYWNjZXB0ZWQgPSAwO1xuIDE5NjpcdFx0XHRjaHVuay1cdTAwM2VwZGlzY2FyZCA9IDA7XG4gMTk3Olx0XHRcdGNodW5rLVx1MDAzZWF1dGggPSAwO1xuIDE5ODpcdFx0XHRjaHVuay1cdTAwM2VoYXNfYXNjb25mID0gMDtcbiAxOTk6XHRcdFx0Y2h1bmstXHUwMDNlZW5kX29mX3BhY2tldCA9IDA7XG4gMjAwOlx0XHRcdGlmIChjaHVuay1cdTAwM2VoZWFkX3NrYikge1xuIDIwMTpcdFx0XHRcdHN0cnVjdCBzY3RwX2lucHV0X2NiXG4gMjAyOlx0XHRcdFx0XHQqY2IgPSBTQ1RQX0lOUFVUX0NCKGNodW5rLVx1MDAzZXNrYiksXG4gMjAzOlx0XHRcdFx0XHQqaGVhZF9jYiA9IFNDVFBfSU5QVVRfQ0IoY2h1bmstXHUwMDNlaGVhZF9za2IpO1xuIDIwNDpcdFxuIDIwNTpcdFx0XHRcdGNiLVx1MDAzZWNodW5rID0gaGVhZF9jYi1cdTAwM2VjaHVuaztcbiAyMDY6XHRcdFx0XHRjYi1cdTAwM2VhZiA9IGhlYWRfY2ItXHUwMDNlYWY7XG4gMjA3Olx0XHRcdFx0Y2ItXHUwMDNlZW5jYXBfcG9ydCA9IGhlYWRfY2ItXHUwMDNlZW5jYXBfcG9ydDtcbiAyMDg6XHRcdFx0fVxuIDIwOTpcdFx0fVxuIDIxMDpcdFxuIDIxMTpcdFx0Y2h1bmstXHUwMDNlY2h1bmtfaGRyID0gY2g7XG4gMjEyOlx0XHRjaHVuay1cdTAwM2VjaHVua19lbmQgPSAoKF9fdTggKiljaCkgJiM0MzsgU0NUUF9QQUQ0KG50b2hzKGNoLVx1MDAzZWxlbmd0aCkpO1xuIDIxMzpcdFx0c2tiX3B1bGwoY2h1bmstXHUwMDNlc2tiLCBzaXplb2YoKmNoKSk7XG4gMjE0Olx0XHRjaHVuay1cdTAwM2VzdWJoLnYgPSBOVUxMOyAvKiBTdWJoZWFkZXIgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgKi9cbiAyMTU6XHRcdGlmICh1bmxpa2VseShudG9ocyhjaC1cdTAwM2VsZW5ndGgpIFx1MDAzYyBzaXplb2YoKmNoKSkpIHtcbiAyMTY6XHRcdFx0Y2h1bmstXHUwMDNlcGRpc2NhcmQgPSAxO1xuIDIxNzpcdFx0fSBlbHNlIGlmIChjaHVuay1cdTAwM2VjaHVua19lbmQgJiM0Mzsgc2l6ZW9mKCpjaCkgXHUwMDNjPVxuIDIxODpcdFx0XHQgICBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYikpIHtcbiAyMTk6XHRcdFx0LyogVGhpcyBpcyBub3QgYSBzaW5nbGV0b24gKi9cbiAyMjA6XHRcdFx0Y2h1bmstXHUwMDNlc2luZ2xldG9uID0gMDtcbiAyMjE6XHRcdH0gZWxzZSBpZiAoY2h1bmstXHUwMDNlY2h1bmtfZW5kIFx1MDAzZSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYikpIHtcbiAyMjI6XHRcdFx0LyogRGlzY2FyZCBpbnNpZGUgc3RhdGUgbWFjaGluZS4gKi9cbiAyMjM6XHRcdFx0Y2h1bmstXHUwMDNlcGRpc2NhcmQgPSAxO1xuIDIyNDpcdFx0XHRjaHVuay1cdTAwM2VjaHVua19lbmQgPSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYik7XG4gMjI1Olx0XHR9IGVsc2Uge1xuIDIyNjpcdFx0XHQvKiBXZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgcGFja2V0LCBzbyBtYXJrIHRoZSBjaHVua1xuIDIyNzpcdFx0XHQgKiBpbiBjYXNlIHdlIG5lZWQgdG8gc2VuZCBhIFNBQ0suXG4gMjI4Olx0XHRcdCAqL1xuIDIyOTpcdFx0XHRjaHVuay1cdTAwM2VlbmRfb2ZfcGFja2V0ID0gMTtcbiAyMzA6XHRcdH1cbiAyMzE6XHRcbiAyMzI6XHRcdHByX2RlYnVnKFwmIzM0OyYjNDM7JiM0MzsmIzQzO3NjdHBfaW5xX3BvcCYjNDM7JiM0MzsmIzQzOyBjaHVuazolcFslc10sIGxlbmd0aDolZCwgc2tiLVx1MDAzZWxlbjolZFxcblwmIzM0OyxcbiAyMzM6XHRcdFx0IGNodW5rLCBzY3RwX2NuYW1lKFNDVFBfU1RfQ0hVTksoY2h1bmstXHUwMDNlY2h1bmtfaGRyLVx1MDAzZXR5cGUpKSxcbiAyMzQ6XHRcdFx0IG50b2hzKGNodW5rLVx1MDAzZWNodW5rX2hkci1cdTAwM2VsZW5ndGgpLCBjaHVuay1cdTAwM2Vza2ItXHUwMDNlbGVuKTtcbiAyMzU6XHRcbiAyMzY6XHRcdHJldHVybiBjaHVuaztcbiAyMzc6XHR9XG4gMjM4Olx0XG4gMjM5Olx0LyogU2V0IGEgdG9wLWhhbGYgaGFuZGxlci5cbiAyNDA6XHQgKlxuIDI0MTpcdCAqIE9yaWdpbmFsbHksIHdlIHRoZSB0b3AtaGFsZiBoYW5kbGVyIHdhcyBzY2hlZHVsZWQgYXMgYSBCSC4gIFdlIG5vd1xuIDI0MjpcdCAqIGNhbGwgdGhlIGhhbmRsZXIgZGlyZWN0bHkgaW4gc2N0cF9pbnFfcHVzaCgpIGF0IGEgdGltZSB0aGF0XG4gMjQzOlx0ICogd2Uga25vdyB3ZSBhcmUgbG9jayBzYWZlLlxuIDI0NDpcdCAqIFRoZSBpbnRlbnQgaXMgdGhhdCB0aGlzIHJvdXRpbmUgd2lsbCBwdWxsIHN0dWZmIG91dCBvZiB0aGVcbiAyNDU6XHQgKiBpbnF1ZXVlIGFuZCBwcm9jZXNzIGl0LlxuIDI0NjpcdCAqL1xuIDI0NzpcdHZvaWQgc2N0cF9pbnFfc2V0X3RoX2hhbmRsZXIoc3RydWN0IHNjdHBfaW5xICpxLCB3b3JrX2Z1bmNfdCBjYWxsYmFjaylcbiAyNDg6XHR7XG4gMjQ5Olx0XHRJTklUX1dPUksoXHUwMDI2cS1cdTAwM2VpbW1lZGlhdGUsIGNhbGxiYWNrKTtcbiAyNTA6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTQ1RQIENodW5rIFBvcHBpbmcgTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBzY3RwX2lucV9wb3BgIGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgaXQgaGFuZGxlcyBjaHVuayBib3VuZGFyaWVzLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLCBhcyBhbnkgbWlzaW50ZXJwcmV0YXRpb24gY291bGQgbGVhZCB0byBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IGZsYXdzIGluIHRoZSBkYXRhIHByb2Nlc3NpbmcuCgpUaGUgY29kZSYjMzk7cyBpbml0aWFsIHNldHVwIGdyYWJzIHRoZSBjaHVuayBoZWFkZXIsIHdoaWNoIGlzIHRoZW4gdXNlZCB0byBjYWxjdWxhdGUgYGNodW5rLSZndDtjaHVua19lbmRgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMuIFNwZWNpZmljYWxseSwgdGhlIHNuaXBwZXQgSSYjMzk7bSBmb2N1c2VkIG9uIGNoZWNrcyBpZiBhIGNodW5rIGlzIGNvbXBsZXRlIHdpdGhpbiB0aGUgU0tCJiMzOTtzIGN1cnJlbnQgZGF0YSBidWZmZXIuIEl0JiMzOTtzIGNydWNpYWwgZm9yIGVmZmljaWVudGx5IGlkZW50aWZ5aW5nIHdoZW4gd2UgaGF2ZSBhIGZ1bGwgY2h1bmsgdG8gd29yayB3aXRoLgoKVGhlIGNhbGN1bGF0aW9uIG9mIGBjaHVuay0mZ3Q7Y2h1bmtfZW5kYCBsb29rcyBzdHJhaWdodGZvcndhcmQgdXNpbmcgYFNDVFBfUEFENGAgYW5kIGBudG9ocyhjaC0mZ3Q7bGVuZ3RoKWAuIEhvd2V2ZXIsIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIGlzc3VlIGlmIHRoZSByZXBvcnRlZCBjaHVuayBsZW5ndGggaXMgc21hbGxlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBjaHVuayBoZWFkZXIgaXRzZWxmLiBUaGlzIGlzIG15IGtleSBjb25jZXJuLiBJZiBgbnRvaHMoY2gtJmd0O2xlbmd0aClgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKCpjaClgICh3aGljaCBpcyA0IGluIG91ciBjYXNlLCBjb25zaWRlcmluZyBTQ1RQX1BBRDQpLCBgY2h1bmtfZW5kYCBjb3VsZCBlbmQgdXAgcG9zaXRpb25lZCBiZWZvcmUgdGhlIGV4cGVjdGVkIGRhdGEuCgpJJiMzOTttIHN0YXJ0aW5nIHRvIHNlZSBpdCEgQWZ0ZXIgdGhlIGBza2JfcHVsbGAgb3BlcmF0aW9uLCB3aGljaCBzaGlmdHMgdGhlIGBza2ItJmd0O2RhdGFgIHBvaW50ZXIsIHRoZSBjcnVjaWFsIGNvbXBhcmlzb24gYGNodW5rX2VuZCAmIzQzOyBzaXplb2YoKmNoKSAmbHQ7PSBza2JfdGFpbF9wb2ludGVyKGNodW5rLSZndDtza2IpYCBjb3VsZCBtaXN0YWtlbmx5IGV2YWx1YXRlIHRvIHRydWUuIFdoeT8gQmVjYXVzZSBpZiB0aGUgZGVjbGFyZWQgY2h1bmsgbGVuZ3RoIGlzIHNtYWxsIChlLmcuLCB6ZXJvKSwgYGNodW5rX2VuZGAgd2lsbCBwb2ludCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBoZWFkZXIuIEFmdGVyIHRoZSBgc2tiX3B1bGxgLCBgY2h1bmtfZW5kICYjNDM7IHNpemVvZigqY2gpYCB3b3VsZCBwb2ludCB0byB0aGUgbmV3IGBza2ItJmd0O2RhdGFgIHBvaW50ZXIgKmJlZm9yZSogdGhlIGNoZWNrISBUaGlzIG1lYW5zIGEgc2VlbWluZ2x5IGluY29tcGxldGUgY2h1bmsgKGFjY29yZGluZyB0byB0aGUgb3JpZ2luYWwgbGVuZ3RoKSBtaWdodCBiZSB3cm9uZ2x5IHRyZWF0ZWQgYXMgYSBjb21wbGV0ZSBjaHVuayBhbmQgaXMgbm90IGRpc2NhcmRlZC4gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaXRlcmF0aW9uIHdvcmtzIGluIGBzY3RwX2lucV9wb3BgIHRvIHNlZSB0aGUgZWZmZWN0IG9uIHRoZSBuZXh0IHByb2Nlc3Npbmcgc3RlcC4gVGltZSB0byBjaGVjayBsaW5lcyAxMzAgdGhyb3VnaCAxOTAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjdHAvaW5xdWV1ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdFx0ICogQW55IHBvc3QgcHJvY2Vzc2luZyB3b3JrIHRvIGRvIGJlZm9yZSB3ZSBtb3ZlIG9uP1xuIDEzMTpcdFx0XHQgKi9cbiAxMzI6XHRcdFx0aWYgKGNodW5rLVx1MDAzZXNpbmdsZXRvbiB8fFxuIDEzMzpcdFx0XHQgICAgY2h1bmstXHUwMDNlZW5kX29mX3BhY2tldCB8fFxuIDEzNDpcdFx0XHQgICAgY2h1bmstXHUwMDNlcGRpc2NhcmQpIHtcbiAxMzU6XHRcdFx0XHRpZiAoY2h1bmstXHUwMDNlaGVhZF9za2IgPT0gY2h1bmstXHUwMDNlc2tiKSB7XG4gMTM2Olx0XHRcdFx0XHRjaHVuay1cdTAwM2Vza2IgPSBza2Jfc2hpbmZvKGNodW5rLVx1MDAzZXNrYiktXHUwMDNlZnJhZ19saXN0O1xuIDEzNzpcdFx0XHRcdFx0Z290byBuZXdfc2tiO1xuIDEzODpcdFx0XHRcdH1cbiAxMzk6XHRcdFx0XHRpZiAoY2h1bmstXHUwMDNlc2tiLVx1MDAzZW5leHQpIHtcbiAxNDA6XHRcdFx0XHRcdGNodW5rLVx1MDAzZXNrYiA9IGNodW5rLVx1MDAzZXNrYi1cdTAwM2VuZXh0O1xuIDE0MTpcdFx0XHRcdFx0Z290byBuZXdfc2tiO1xuIDE0MjpcdFx0XHRcdH1cbiAxNDM6XHRcbiAxNDQ6XHRcdFx0XHRzY3RwX2lucV9jaHVua19mcmVlKGNodW5rKTtcbiAxNDU6XHRcdFx0XHRjaHVuayA9IHF1ZXVlLVx1MDAzZWluX3Byb2dyZXNzID0gTlVMTDtcbiAxNDY6XHRcdFx0fSBlbHNlIHtcbiAxNDc6XHRcdFx0XHQvKiBOb3RoaW5nIHRvIGRvLiBOZXh0IGNodW5rIGluIHRoZSBwYWNrZXQsIHBsZWFzZS4gKi9cbiAxNDg6XHRcdFx0XHRjaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKWNodW5rLVx1MDAzZWNodW5rX2VuZDtcbiAxNDk6XHRcdFx0XHQvKiBGb3JjZSBjaHVuay1cdTAwM2Vza2ItXHUwMDNlZGF0YSB0byBjaHVuay1cdTAwM2VjaHVua19lbmQuICAqL1xuIDE1MDpcdFx0XHRcdHNrYl9wdWxsKGNodW5rLVx1MDAzZXNrYiwgY2h1bmstXHUwMDNlY2h1bmtfZW5kIC0gY2h1bmstXHUwMDNlc2tiLVx1MDAzZWRhdGEpO1xuIDE1MTpcdFx0XHRcdC8qIFdlIGFyZSBndWFyYW50ZWVkIHRvIHB1bGwgYSBTQ1RQIGhlYWRlci4gKi9cbiAxNTI6XHRcdFx0fVxuIDE1MzpcdFx0fVxuIDE1NDpcdFxuIDE1NTpcdFx0LyogRG8gd2UgbmVlZCB0byB0YWtlIHRoZSBuZXh0IHBhY2tldCBvdXQgb2YgdGhlIHF1ZXVlIHRvIHByb2Nlc3M/ICovXG4gMTU2Olx0XHRpZiAoIWNodW5rKSB7XG4gMTU3Olx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5O1xuIDE1ODpcdFxuIDE1OTpcdG5leHRfY2h1bms6XG4gMTYwOlx0XHRcdC8qIElzIHRoZSBxdWV1ZSBlbXB0eT8gICovXG4gMTYxOlx0XHRcdGVudHJ5ID0gc2N0cF9saXN0X2RlcXVldWUoXHUwMDI2cXVldWUtXHUwMDNlaW5fY2h1bmtfbGlzdCk7XG4gMTYyOlx0XHRcdGlmICghZW50cnkpXG4gMTYzOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTY0Olx0XG4gMTY1Olx0XHRcdGNodW5rID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHNjdHBfY2h1bmssIGxpc3QpO1xuIDE2NjpcdFxuIDE2NzpcdFx0XHRpZiAoc2tiX2lzX2dzbyhjaHVuay1cdTAwM2Vza2IpIFx1MDAyNlx1MDAyNiBza2JfaXNfZ3NvX3NjdHAoY2h1bmstXHUwMDNlc2tiKSkge1xuIDE2ODpcdFx0XHRcdC8qIEdTTy1tYXJrZWQgc2ticyBidXQgd2l0aG91dCBmcmFncywgaGFuZGxlXG4gMTY5Olx0XHRcdFx0ICogdGhlbSBub3JtYWxseVxuIDE3MDpcdFx0XHRcdCAqL1xuIDE3MTpcdFx0XHRcdGlmIChza2Jfc2hpbmZvKGNodW5rLVx1MDAzZXNrYiktXHUwMDNlZnJhZ19saXN0KVxuIDE3MjpcdFx0XHRcdFx0Y2h1bmstXHUwMDNlaGVhZF9za2IgPSBjaHVuay1cdTAwM2Vza2I7XG4gMTczOlx0XG4gMTc0Olx0XHRcdFx0Lyogc2ticyB3aXRoIFwmIzM0O2NvdmVyIGxldHRlclwmIzM0OyAqL1xuIDE3NTpcdFx0XHRcdGlmIChjaHVuay1cdTAwM2VoZWFkX3NrYiBcdTAwMjZcdTAwMjYgY2h1bmstXHUwMDNlc2tiLVx1MDAzZWRhdGFfbGVuID09IGNodW5rLVx1MDAzZXNrYi1cdTAwM2VsZW4pIHtcbiAxNzY6XHRcdFx0XHRcdGlmIChXQVJOX09OKCFza2Jfc2hpbmZvKGNodW5rLVx1MDAzZXNrYiktXHUwMDNlZnJhZ19saXN0KSkge1xuIDE3NzpcdFx0XHRcdFx0XHRfX1NDVFBfSU5DX1NUQVRTKGRldl9uZXQoY2h1bmstXHUwMDNlc2tiLVx1MDAzZWRldiksXG4gMTc4Olx0XHRcdFx0XHRcdFx0XHQgU0NUUF9NSUJfSU5fUEtUX0RJU0NBUkRTKTtcbiAxNzk6XHRcdFx0XHRcdFx0c2N0cF9jaHVua19mcmVlKGNodW5rKTtcbiAxODA6XHRcdFx0XHRcdFx0Z290byBuZXh0X2NodW5rO1xuIDE4MTpcdFx0XHRcdFx0fVxuIDE4MjpcdFx0XHRcdFx0Y2h1bmstXHUwMDNlc2tiID0gc2tiX3NoaW5mbyhjaHVuay1cdTAwM2Vza2IpLVx1MDAzZWZyYWdfbGlzdDtcbiAxODM6XHRcdFx0XHR9XG4gMTg0Olx0XHRcdH1cbiAxODU6XHRcbiAxODY6XHRcdFx0aWYgKGNodW5rLVx1MDAzZWFzb2MpXG4gMTg3Olx0XHRcdFx0c29ja19ycHNfc2F2ZV9yeGhhc2goY2h1bmstXHUwMDNlYXNvYy1cdTAwM2ViYXNlLnNrLCBjaHVuay1cdTAwM2Vza2IpO1xuIDE4ODpcdFxuIDE4OTpcdFx0XHRxdWV1ZS1cdTAwM2Vpbl9wcm9ncmVzcyA9IGNodW5rO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njk0CgkJCQkJCQlvdXRwdXQ6IDIwMQoJCQkJCQkJdGhvdWdodHM6IDkxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBTQ1RQIENodW5rIEhlYWRlciBWYWxpZGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIExpbmUgMTQ4LTE1MCBjYXVnaHQgbXkgYXR0ZW50aW9uIGJlY2F1c2UgdGhlIHNjZW5hcmlvIGRlc2NyaWJlZCDigJMgd2hlcmUgYGNodW5rLSZndDtjaHVua19lbmRgIGNvdWxkIGVmZmVjdGl2ZWx5IGJlIGVhcmxpZXIgdGhhbiBgY2h1bmstJmd0O3NrYi0mZ3Q7ZGF0YWAsIGxlYWRpbmcgdG8gYSBuZWdhdGl2ZSBvZmZzZXQgaW4gYHNrYl9wdWxsYCDigJMgaW1tZWRpYXRlbHkgZmxhZ3MgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLiBJZiBgbnRvaHMoY2gtJmd0O2xlbmd0aClgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKCpjaClgLCB0aGF0IGlzLCBsZXNzIHRoYW4gNCBieXRlcywgYHNrYl9wdWxsYCB3aXRoIGEgbmVnYXRpdmUgbnVtYmVyIGlzIGEgcmVjaXBlIGZvciBkaXNhc3RlcjogZWl0aGVyIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhbiBpbmZpbml0ZSBsb29wLCBvciBzb21lIG90aGVyIHNlcmlvdXMgcHJvYmxlbS4KClNvLCB0aGlzIHBhdGNoIGZpeGVzIGFuIGltcG9ydGFudCBwYWNrZXQgdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIGJ1ZyBpbiBTQ1RQIHByb3RvY29sIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBhIHNpdHVhdGlvbiB3aGVyZSBhIG1hbGZvcm1lZCBuZXR3b3JrIHBhY2tldCAoaW52YWxpZCBjaHVuayBsZW5ndGgpIGxlYWRzIHRvIGJ1ZmZlciB1bmRlcmZsb3cuIFRoZSBrZXkgZml4IGlzIHNldHRpbmcgYGNodW5rLSZndDtwZGlzY2FyZCA9IDFgIGlmIGBudG9ocyhjaC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZigqY2gpYCwgbWFya2luZyB0aGUgY2h1bmsgZm9yIGRpc2NhcmQgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHBvaW50ZXIgbWFuaXB1bGF0aW9uLgoKTm93LCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4uLiBMZXQmIzM5O3MgY2hlY2s6CjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZDogTm8uCjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlczogTm8sIGBjaC0mZ3Q7bGVuZ3RoYCBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSBpbmNvbWluZyBuZXR3b3JrIGRhdGEuCjMuICBBbGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI6IE5vLgo0LiAgQm91bmRzIGNoZWNrcy9sZW5ndGhzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCBieXRlIGFjY2VzczogTm8sIGFzIGluY29taW5nIHNrYnMgaGF2ZSBpbml0aWFsaXplZCBieXRlcyBmcm9tIG5ldHdvcmsgLyBza2IgYWxsb2NhdGlvbnMuCgpUaGVyZWZvcmUsIHRoaXMgaXNuJiMzOTt0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgcHJvYmxlbSBhZGRyZXNzZWQgaXMgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIGRhdGE7IGl0JiMzOTtzIGEgKnJlc3VsdCogb2YgbWFsZm9ybWVkIG5ldHdvcmsgZGF0YS4gSXQgcHJldmVudHMgcG90ZW50aWFsbHkgcmVhZGluZyBkYXRhICpvdXRzaWRlKiBvZiB3aGF0IHRoZSBTS0IgY29udGFpbnMuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIHRvIGNhdGNoIHRoaXMgYXMgaXQgY292ZXJzIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIC8gc2tiIHBvaW50ZXIgY29ycnVwdGlvbiwgd2hpY2ggYXJlIHRoZSBtYWluIHJpc2tzIGZyb20gdGhpcyBidWcuCgpLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGxlYWsgYW55IHRvIHVzZXIgc3BhY2UuIFRoZXJlJiMzOTtzIG5vIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gYGNvcHlfdG9fdXNlcmAsIG5vIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgb3RoZXIgS01TQU4gcmVsZXZhbnQgaXNzdWVzLiBUaGUgcGF0Y2ggc2ltcGx5IHZhbGlkYXRlcyB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aC4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgYW4gaW5wdXQgdmFsaWRhdGlvbjogYGlmICh1bmxpa2VseShudG9ocyhjaC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZigqY2gpKSlgLiBUaGlzIHByZXZlbnRzIHRoZSBiYWQgc2NlbmFyaW8gZGVzY3JpYmVkIGVhcmxpZXIuIFRoaXMgaXMgYSB2ZXJ5IHN0YW5kYXJkIGFuZCBuZWNlc3NhcnkgY2hlY2suCgpTbywgaW4gY29uY2x1c2lvbiwgTmVlZHNLTVNBTiA9IGZhbHNlLiBUaGlzIGlzIGEgY2xhc3NpYyBLQVNBTiBzaXR1YXRpb24sIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4KCkxldCYjMzk7cyBub3cgY2xlYXJseSBjb250cmFzdCBLQVNBTiB2cyBLTVNBTiB0byBqdXN0aWZ5IHRoaXMuIFRoaXMgZml4IGFkZHJlc3NlcyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Nlcy9za2IgcG9pbnRlciBjb3JydXB0aW9uIGZyb20gbWFsZm9ybWVkIHBhY2tldHMsIHNxdWFyZWx5IGluIEtBU0FOJiMzOTtzIGRvbWFpbi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW52b2x2ZWQgb3IgZXhwb3NlZCwgc28gbm8gS01TQU4gaXMgbmVlZGVkLiBUaGlzIGlzIGEgYm91bmRzIGNoZWNrLgpgYGBjcHAKc2V0LXJlc3VsdHMKYGBgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBzY3RwX2lucV9wb3AoKWAgZm9yIGluY29taW5nIFNDVFAgY2h1bmtzIHdpdGggYW4gaW52YWxpZCBsZW5ndGggc21hbGxlciB0aGFuIHRoZSBTQ1RQIGNodW5rIGhlYWRlciAoYHNpemVvZigqY2gpYCkuIFByZXZpb3VzbHksIGEgY2h1bmsgbGVuZ3RoIFx1MDAzYyA0IGNvdWxkIGNhdXNlIGBjaHVuay1cdTAwM2VjaHVua19lbmRgIHRvIHByZWNlZGUgYGNodW5rLVx1MDAzZXNrYi1cdTAwM2VkYXRhYCwgbGVhZGluZyB0byBhIG5lZ2F0aXZlIGBza2JfcHVsbCgpYCBvZmZzZXQgYW5kIHNrYiBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCBwYWNrZXQgY2h1bmtzLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWRkcmVzc2VzIHBhY2tldCB2YWxpZGF0aW9uIGFuZCBib3VuZHMgY2hlY2tpbmcgb24gaW5jb21pbmcgbmV0d29yayBza2IgZGF0YS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBpcyBkZXRlY3RlZCBieSBLQVNBTiBhbmQga2VybmVsIGFzc2VydGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBuZXcgc3RydWN0IGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHNjdHBfaW5xX3BvcCgpYCBmb3IgaW5jb21pbmcgU0NUUCBjaHVua3Mgd2l0aCBhbiBpbnZhbGlkIGxlbmd0aCBzbWFsbGVyIHRoYW4gdGhlIFNDVFAgY2h1bmsgaGVhZGVyIChgc2l6ZW9mKCpjaClgKS4gUHJldmlvdXNseSwgYSBjaHVuayBsZW5ndGggXHUwMDNjIDQgY291bGQgY2F1c2UgYGNodW5rLVx1MDAzZWNodW5rX2VuZGAgdG8gcHJlY2VkZSBgY2h1bmstXHUwMDNlc2tiLVx1MDAzZWRhdGFgLCBsZWFkaW5nIHRvIGEgbmVnYXRpdmUgYHNrYl9wdWxsKClgIG9mZnNldCBhbmQgc2tiIGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHBhY2tldCBjaHVua3MuXG5cblRoaXMgY2hhbmdlIHB1cmVseSBhZGRyZXNzZXMgcGFja2V0IHZhbGlkYXRpb24gYW5kIGJvdW5kcyBjaGVja2luZyBvbiBpbmNvbWluZyBuZXR3b3JrIHNrYiBkYXRhLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFyaXNpbmcgZnJvbSB0aGlzIGxvZ2ljIGlzIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBrZXJuZWwgYXNzZXJ0aW9ucy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG5ldyBzdHJ1Y3QgYWxsb2NhdGlvbnMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUxOjIxLjA1MDM1ODcxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjIzMDcyMjMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9pbnFfcG9wXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc2N0cF9pbnFfcG9wKClgIGZvciBpbmNvbWluZyBTQ1RQIGNodW5rcyB3aXRoIGFuIGludmFsaWQgbGVuZ3RoIHNtYWxsZXIgdGhhbiB0aGUgU0NUUCBjaHVuayBoZWFkZXIgKGBzaXplb2YoKmNoKWApLiBQcmV2aW91c2x5LCBhIGNodW5rIGxlbmd0aCBcXHUwMDNjIDQgY291bGQgY2F1c2UgYGNodW5rLVxcdTAwM2VjaHVua19lbmRgIHRvIHByZWNlZGUgYGNodW5rLVxcdTAwM2Vza2ItXFx1MDAzZWRhdGFgLCBsZWFkaW5nIHRvIGEgbmVnYXRpdmUgYHNrYl9wdWxsKClgIG9mZnNldCBhbmQgc2tiIGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHBhY2tldCBjaHVua3MuXFxuXFxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFkZHJlc3NlcyBwYWNrZXQgdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIG5ldHdvcmsgc2tiIGRhdGEuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYXJpc2luZyBmcm9tIHRoaXMgbG9naWMgaXMgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIGtlcm5lbCBhc3NlcnRpb25zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbmV3IHN0cnVjdCBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBjaHVuayBsZW5ndGggdmFsaWRhdGlvbiBpbiB0aGUgU0NUUCBpbnB1dCBxdWV1ZSBwcm9jZXNzb3IgKHNjdHBfaW5xX3BvcCkgdG8gZGlzY2FyZCBjaHVua3Mgd2hlbiB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aCBmaWVsZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGhlYWRlciBzaXplLCBwcmV2ZW50aW5nIG1hbGZvcm1lZCBjaHVua3MgZnJvbSBwcm9jZWVkaW5nLiBUaGlzIGFmZmVjdHMgY29yZSBTQ1RQIHBhY2tldCBwYXJzaW5nIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUxOjIxLjA1MDM2Mzk3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQzODE2NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmRlMzU3OGJkOTBkMDNkYmQ2MWQzZGQwNGM4NWQxNTEzNjYyNWNkM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyNyAyMTo1MToyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pbnF1ZXVlLmMgYi9uZXQvc2N0cC9pbnF1ZXVlLmNcXG5pbmRleCA1Zjk4OGIzYTg4MTRmLi5kNjY2Y2VjNmIxOTRlIDEwMDY0NFxcbi0tLSBhL25ldC9zY3RwL2lucXVldWUuY1xcbisrKyBiL25ldC9zY3RwL2lucXVldWUuY1xcbkBAIC0yMTIsOCArMjEyLDEwIEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX2lucV9wb3Aoc3RydWN0IHNjdHBfaW5xICpxdWV1ZSlcXG4gXFx0Y2h1bmstXFx1MDAzZWNodW5rX2VuZCA9ICgoX191OCAqKWNoKSArIFNDVFBfUEFENChudG9ocyhjaC1cXHUwMDNlbGVuZ3RoKSk7XFxuIFxcdHNrYl9wdWxsKGNodW5rLVxcdTAwM2Vza2IsIHNpemVvZigqY2gpKTtcXG4gXFx0Y2h1bmstXFx1MDAzZXN1YmgudiA9IE5VTEw7IC8qIFN1YmhlYWRlciBpcyBubyBsb25nZXIgdmFsaWQuICAqL1xcbi1cXG4tXFx0aWYgKGNodW5rLVxcdTAwM2VjaHVua19lbmQgKyBzaXplb2YoKmNoKSBcXHUwMDNjPSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVxcdTAwM2Vza2IpKSB7XFxuK1xcdGlmICh1bmxpa2VseShudG9ocyhjaC1cXHUwMDNlbGVuZ3RoKSBcXHUwMDNjIHNpemVvZigqY2gpKSkge1xcbitcXHRcXHRjaHVuay1cXHUwMDNlcGRpc2NhcmQgPSAxO1xcbitcXHR9IGVsc2UgaWYgKGNodW5rLVxcdTAwM2VjaHVua19lbmQgKyBzaXplb2YoKmNoKSBcXHUwMDNjPVxcbitcXHRcXHQgICBza2JfdGFpbF9wb2ludGVyKGNodW5rLVxcdTAwM2Vza2IpKSB7XFxuIFxcdFxcdC8qIFRoaXMgaXMgbm90IGEgc2luZ2xldG9uICovXFxuIFxcdFxcdGNodW5rLVxcdTAwM2VzaW5nbGV0b24gPSAwO1xcbiBcXHR9IGVsc2UgaWYgKGNodW5rLVxcdTAwM2VjaHVua19lbmQgXFx1MDAzZSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVxcdTAwM2Vza2IpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUxOjIxLjM5NDg0MTY2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI2OTA4ODM2NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX2lucV9wb3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBjaHVuayBsZW5ndGggdmFsaWRhdGlvbiBpbiB0aGUgU0NUUCBpbnB1dCBxdWV1ZSBwcm9jZXNzb3IgKHNjdHBfaW5xX3BvcCkgdG8gZGlzY2FyZCBjaHVua3Mgd2hlbiB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aCBmaWVsZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGhlYWRlciBzaXplLCBwcmV2ZW50aW5nIG1hbGZvcm1lZCBjaHVua3MgZnJvbSBwcm9jZWVkaW5nLiBUaGlzIGFmZmVjdHMgY29yZSBTQ1RQIHBhY2tldCBwYXJzaW5nIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJkZTM1NzhiZDkwZDAzZGJkNjFkM2RkMDRjODVkMTUxMzY2MjVjZDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAyMTo1MToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lucXVldWUuYyBiL25ldC9zY3RwL2lucXVldWUuY1xuaW5kZXggNWY5ODhiM2E4ODE0Zi4uZDY2NmNlYzZiMTk0ZSAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL2lucXVldWUuY1xuKysrIGIvbmV0L3NjdHAvaW5xdWV1ZS5jXG5AQCAtMjEyLDggKzIxMiwxMCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9pbnFfcG9wKHN0cnVjdCBzY3RwX2lucSAqcXVldWUpXG4gXHRjaHVuay1cdTAwM2VjaHVua19lbmQgPSAoKF9fdTggKiljaCkgKyBTQ1RQX1BBRDQobnRvaHMoY2gtXHUwMDNlbGVuZ3RoKSk7XG4gXHRza2JfcHVsbChjaHVuay1cdTAwM2Vza2IsIHNpemVvZigqY2gpKTtcbiBcdGNodW5rLVx1MDAzZXN1YmgudiA9IE5VTEw7IC8qIFN1YmhlYWRlciBpcyBubyBsb25nZXIgdmFsaWQuICAqL1xuLVxuLVx0aWYgKGNodW5rLVx1MDAzZWNodW5rX2VuZCArIHNpemVvZigqY2gpIFx1MDAzYz0gc2tiX3RhaWxfcG9pbnRlcihjaHVuay1cdTAwM2Vza2IpKSB7XG4rXHRpZiAodW5saWtlbHkobnRvaHMoY2gtXHUwMDNlbGVuZ3RoKSBcdTAwM2Mgc2l6ZW9mKCpjaCkpKSB7XG4rXHRcdGNodW5rLVx1MDAzZXBkaXNjYXJkID0gMTtcbitcdH0gZWxzZSBpZiAoY2h1bmstXHUwMDNlY2h1bmtfZW5kICsgc2l6ZW9mKCpjaCkgXHUwMDNjPVxuK1x0XHQgICBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYikpIHtcbiBcdFx0LyogVGhpcyBpcyBub3QgYSBzaW5nbGV0b24gKi9cbiBcdFx0Y2h1bmstXHUwMDNlc2luZ2xldG9uID0gMDtcbiBcdH0gZWxzZSBpZiAoY2h1bmstXHUwMDNlY2h1bmtfZW5kIFx1MDAzZSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYikpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUxOjIxLjM5NDg0MzMyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTQ3MjAxODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFNDVFAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCB0byBleGFtaW5lLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBgc2N0cF9pbnFfcG9wYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9zY3RwL2lucXVldWUuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluLiBUaGUgY2hhbmdlcyBzZWVtIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyB0aG9yb3VnaGx5LlxuXG5MZXQgbWUgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBkaWZmLiBJdCBzZWVtcyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgbnRvaHMoY2gtXHUwMDNlbGVuZ3RoKSBcdTAwM2Mgc2l6ZW9mKCpjaClgLiBUaGlzIGlzIGNsZWFybHkgYSB2YWxpZGl0eSBjaGVjayBvbiB0aGUgY2h1bmsgbGVuZ3RoLCBsaWtlbHkgdG8gaGFuZGxlIHBvdGVudGlhbCBjb3JydXB0aW9uIG9yIG1hbGZvcm1lZCBwYWNrZXRzLiBUaGUgcGF0Y2ggc2V0cyBgY2h1bmstXHUwMDNlcGRpc2NhcmQgPSAxO2AgaWYgdGhlIGxlbmd0aCBpcyBpbnZhbGlkLiBUaGUgb3RoZXIgYGlmYCBjb25kaXRpb24gY2hlY2tzIGlmIHRoZSBjaHVuayBpcyBub3QgYSBzaW5nbGV0b24sIGFuZCB0aGUgbGFzdCBgZWxzZSBpZmAgY29uZGl0aW9uIGlzIGFsc28gY2hlY2tpbmcgdmFsaWRpdHkuXG5cbk5vdywgSSBuZWVkIG1vcmUgY29udGV4dC4gSSBoYXZlIHRvIHZlcmlmeSB0aGUgcGF0Y2gncyBjb3JyZWN0bmVzcyBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hlY2sgaXMgYmVpbmcgYWRkZWQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGhpbiBgc2N0cF9pbnFfcG9wYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2h1bmsgbGVuZ3RoIGlzIHVzZWQgYW5kIHdoYXQgdGhpcyBuZXcgY2hlY2sgZ3VhcmRzIGFnYWluc3QuIEknbGwgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSBjYWxsZXJzIGFuZCB0aGUgZXhwb3J0ZWQgc3ltYm9scyB0byBnYXVnZSB0aGUgaW1wYWN0LlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIFNDVFAgdG8gZW5zdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IGNvbXBhdGliaWxpdHkgaXNzdWVzIG9yIGNvbmZsaWN0cyB3aXRoIHZhcmlvdXMgY29uZmlndXJhdGlvbnMuXG5cblRpbWUgdG8gcHVsbCBvdXQgdGhlIHRvb2xzLiBJJ2xsIG5lZWQgdG8gcnVuIHNvbWUgc3RhdGljIGFuYWx5c2lzIHRvIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaW50cm9kdWNlZCBvciByZXNvbHZlZCBhbmQgYWxzbyB0byBjaGVjayBhbGwgdXNlcyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS4gQSBxdWljayBjaGVjayB3aXRoIGBzcGFyc2VgIG9yIHNpbWlsYXIgdG9vbHMsIGFuZCBtYXliZSBldmVuIGEgcXVpY2sgcnVuIHdpdGggYSBmdXp6ZXIgb24gdGhlIGFmZmVjdGVkIGFyZWEsIGlzIHdhcnJhbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNywiT3V0cHV0VG9rZW5zIjoxMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1MTo1MC41NDIwNDg3MDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2N0cC9pbnF1ZXVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dF9jaHVuaztcXG4gMTgxOlxcdFxcdFxcdFxcdFxcdH1cXG4gMTgyOlxcdFxcdFxcdFxcdFxcdGNodW5rLVxcdTAwM2Vza2IgPSBza2Jfc2hpbmZvKGNodW5rLVxcdTAwM2Vza2IpLVxcdTAwM2VmcmFnX2xpc3Q7XFxuIDE4MzpcXHRcXHRcXHRcXHR9XFxuIDE4NDpcXHRcXHRcXHR9XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdFxcdGlmIChjaHVuay1cXHUwMDNlYXNvYylcXG4gMTg3OlxcdFxcdFxcdFxcdHNvY2tfcnBzX3NhdmVfcnhoYXNoKGNodW5rLVxcdTAwM2Vhc29jLVxcdTAwM2ViYXNlLnNrLCBjaHVuay1cXHUwMDNlc2tiKTtcXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0XFx0cXVldWUtXFx1MDAzZWluX3Byb2dyZXNzID0gY2h1bms7XFxuIDE5MDpcXHRcXG4gMTkxOlxcdG5ld19za2I6XFxuIDE5MjpcXHRcXHRcXHQvKiBUaGlzIGlzIHRoZSBmaXJzdCBjaHVuayBpbiB0aGUgcGFja2V0LiAgKi9cXG4gMTkzOlxcdFxcdFxcdGNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlZGF0YTtcXG4gMTk0OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VzaW5nbGV0b24gPSAxO1xcbiAxOTU6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZWRhdGFfYWNjZXB0ZWQgPSAwO1xcbiAxOTY6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZXBkaXNjYXJkID0gMDtcXG4gMTk3OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VhdXRoID0gMDtcXG4gMTk4OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VoYXNfYXNjb25mID0gMDtcXG4gMTk5OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VlbmRfb2ZfcGFja2V0ID0gMDtcXG4gMjAwOlxcdFxcdFxcdGlmIChjaHVuay1cXHUwMDNlaGVhZF9za2IpIHtcXG4gMjAxOlxcdFxcdFxcdFxcdHN0cnVjdCBzY3RwX2lucHV0X2NiXFxuIDIwMjpcXHRcXHRcXHRcXHRcXHQqY2IgPSBTQ1RQX0lOUFVUX0NCKGNodW5rLVxcdTAwM2Vza2IpLFxcbiAyMDM6XFx0XFx0XFx0XFx0XFx0KmhlYWRfY2IgPSBTQ1RQX0lOUFVUX0NCKGNodW5rLVxcdTAwM2VoZWFkX3NrYik7XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdFxcdFxcdGNiLVxcdTAwM2VjaHVuayA9IGhlYWRfY2ItXFx1MDAzZWNodW5rO1xcbiAyMDY6XFx0XFx0XFx0XFx0Y2ItXFx1MDAzZWFmID0gaGVhZF9jYi1cXHUwMDNlYWY7XFxuIDIwNzpcXHRcXHRcXHRcXHRjYi1cXHUwMDNlZW5jYXBfcG9ydCA9IGhlYWRfY2ItXFx1MDAzZWVuY2FwX3BvcnQ7XFxuIDIwODpcXHRcXHRcXHR9XFxuIDIwOTpcXHRcXHR9XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdGNodW5rLVxcdTAwM2VjaHVua19oZHIgPSBjaDtcXG4gMjEyOlxcdFxcdGNodW5rLVxcdTAwM2VjaHVua19lbmQgPSAoKF9fdTggKiljaCkgKyBTQ1RQX1BBRDQobnRvaHMoY2gtXFx1MDAzZWxlbmd0aCkpO1xcbiAyMTM6XFx0XFx0c2tiX3B1bGwoY2h1bmstXFx1MDAzZXNrYiwgc2l6ZW9mKCpjaCkpO1xcbiAyMTQ6XFx0XFx0Y2h1bmstXFx1MDAzZXN1YmgudiA9IE5VTEw7IC8qIFN1YmhlYWRlciBpcyBubyBsb25nZXIgdmFsaWQuICAqL1xcbiAyMTU6XFx0XFx0aWYgKHVubGlrZWx5KG50b2hzKGNoLVxcdTAwM2VsZW5ndGgpIFxcdTAwM2Mgc2l6ZW9mKCpjaCkpKSB7XFxuIDIxNjpcXHRcXHRcXHRjaHVuay1cXHUwMDNlcGRpc2NhcmQgPSAxO1xcbiAyMTc6XFx0XFx0fSBlbHNlIGlmIChjaHVuay1cXHUwMDNlY2h1bmtfZW5kICsgc2l6ZW9mKCpjaCkgXFx1MDAzYz1cXG4gMjE4OlxcdFxcdFxcdCAgIHNrYl90YWlsX3BvaW50ZXIoY2h1bmstXFx1MDAzZXNrYikpIHtcXG4gMjE5OlxcdFxcdFxcdC8qIFRoaXMgaXMgbm90IGEgc2luZ2xldG9uICovXFxuIDIyMDpcXHRcXHRcXHRjaHVuay1cXHUwMDNlc2luZ2xldG9uID0gMDtcXG4gMjIxOlxcdFxcdH0gZWxzZSBpZiAoY2h1bmstXFx1MDAzZWNodW5rX2VuZCBcXHUwMDNlIHNrYl90YWlsX3BvaW50ZXIoY2h1bmstXFx1MDAzZXNrYikpIHtcXG4gMjIyOlxcdFxcdFxcdC8qIERpc2NhcmQgaW5zaWRlIHN0YXRlIG1hY2hpbmUuICovXFxuIDIyMzpcXHRcXHRcXHRjaHVuay1cXHUwMDNlcGRpc2NhcmQgPSAxO1xcbiAyMjQ6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZWNodW5rX2VuZCA9IHNrYl90YWlsX3BvaW50ZXIoY2h1bmstXFx1MDAzZXNrYik7XFxuIDIyNTpcXHRcXHR9IGVsc2Uge1xcbiAyMjY6XFx0XFx0XFx0LyogV2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhY2tldCwgc28gbWFyayB0aGUgY2h1bmtcXG4gMjI3OlxcdFxcdFxcdCAqIGluIGNhc2Ugd2UgbmVlZCB0byBzZW5kIGEgU0FDSy5cXG4gMjI4OlxcdFxcdFxcdCAqL1xcbiAyMjk6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZWVuZF9vZl9wYWNrZXQgPSAxO1xcbiAyMzA6XFx0XFx0fVxcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRwcl9kZWJ1ZyhcXFwiKysrc2N0cF9pbnFfcG9wKysrIGNodW5rOiVwWyVzXSwgbGVuZ3RoOiVkLCBza2ItXFx1MDAzZWxlbjolZFxcXFxuXFxcIixcXG4gMjMzOlxcdFxcdFxcdCBjaHVuaywgc2N0cF9jbmFtZShTQ1RQX1NUX0NIVU5LKGNodW5rLVxcdTAwM2VjaHVua19oZHItXFx1MDAzZXR5cGUpKSxcXG4gMjM0OlxcdFxcdFxcdCBudG9ocyhjaHVuay1cXHUwMDNlY2h1bmtfaGRyLVxcdTAwM2VsZW5ndGgpLCBjaHVuay1cXHUwMDNlc2tiLVxcdTAwM2VsZW4pO1xcbiAyMzU6XFx0XFxuIDIzNjpcXHRcXHRyZXR1cm4gY2h1bms7XFxuIDIzNzpcXHR9XFxuIDIzODpcXHRcXG4gMjM5OlxcdC8qIFNldCBhIHRvcC1oYWxmIGhhbmRsZXIuXFxuIDI0MDpcXHQgKlxcbiAyNDE6XFx0ICogT3JpZ2luYWxseSwgd2UgdGhlIHRvcC1oYWxmIGhhbmRsZXIgd2FzIHNjaGVkdWxlZCBhcyBhIEJILiAgV2Ugbm93XFxuIDI0MjpcXHQgKiBjYWxsIHRoZSBoYW5kbGVyIGRpcmVjdGx5IGluIHNjdHBfaW5xX3B1c2goKSBhdCBhIHRpbWUgdGhhdFxcbiAyNDM6XFx0ICogd2Uga25vdyB3ZSBhcmUgbG9jayBzYWZlLlxcbiAyNDQ6XFx0ICogVGhlIGludGVudCBpcyB0aGF0IHRoaXMgcm91dGluZSB3aWxsIHB1bGwgc3R1ZmYgb3V0IG9mIHRoZVxcbiAyNDU6XFx0ICogaW5xdWV1ZSBhbmQgcHJvY2VzcyBpdC5cXG4gMjQ2OlxcdCAqL1xcbiAyNDc6XFx0dm9pZCBzY3RwX2lucV9zZXRfdGhfaGFuZGxlcihzdHJ1Y3Qgc2N0cF9pbnEgKnEsIHdvcmtfZnVuY190IGNhbGxiYWNrKVxcbiAyNDg6XFx0e1xcbiAyNDk6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZxLVxcdTAwM2VpbW1lZGlhdGUsIGNhbGxiYWNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTE6NTAuNTQyMTQyNDQ1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NTUzOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfaW5xX3BvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9hc3NvY2lvbGEuYz05NzE9c3RhdGljIHZvaWQgc2N0cF9hc3NvY19iaF9yY3Yoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtOTg5LVxcdHNjdHBfYXNzb2NpYXRpb25faG9sZChhc29jKTtcXG5uZXQvc2N0cC9hc3NvY2lvbGEuYzo5OTA6XFx0d2hpbGUgKE5VTEwgIT0gKGNodW5rID0gc2N0cF9pbnFfcG9wKGlucXVldWUpKSkge1xcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTk5MS1cXHRcXHRzdGF0ZSA9IGFzb2MtXFx1MDAzZXN0YXRlO1xcbi0tXFxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYz0zMjY9c3RhdGljIHZvaWQgc2N0cF9lbmRwb2ludF9iaF9yY3Yoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYy0zNDktXFxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYzozNTA6XFx0d2hpbGUgKE5VTEwgIT0gKGNodW5rID0gc2N0cF9pbnFfcG9wKGlucXVldWUpKSkge1xcbm5ldC9zY3RwL2VuZHBvaW50b2xhLmMtMzUxLVxcdFxcdHN1YnR5cGUgPSBTQ1RQX1NUX0NIVU5LKGNodW5rLVxcdTAwM2VjaHVua19oZHItXFx1MDAzZXR5cGUpO1xcbi0tXFxubmV0L3NjdHAvaW5xdWV1ZS5jPTk1PXN0cnVjdCBzY3RwX2NodW5raGRyICpzY3RwX2lucV9wZWVrKHN0cnVjdCBzY3RwX2lucSAqcXVldWUpXFxuLS1cXG5uZXQvc2N0cC9pbnF1ZXVlLmMtMTE3LSAqL1xcbm5ldC9zY3RwL2lucXVldWUuYzoxMTg6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfaW5xX3BvcChzdHJ1Y3Qgc2N0cF9pbnEgKnF1ZXVlKVxcbm5ldC9zY3RwL2lucXVldWUuYy0xMTkte1xcbi0tXFxubmV0L3NjdHAvaW5xdWV1ZS5jLTIzMS1cXG5uZXQvc2N0cC9pbnF1ZXVlLmM6MjMyOlxcdHByX2RlYnVnKFxcXCIrKytzY3RwX2lucV9wb3ArKysgY2h1bms6JXBbJXNdLCBsZW5ndGg6JWQsIHNrYi1cXHUwMDNlbGVuOiVkXFxcXG5cXFwiLFxcbm5ldC9zY3RwL2lucXVldWUuYy0yMzMtXFx0XFx0IGNodW5rLCBzY3RwX2NuYW1lKFNDVFBfU1RfQ0hVTksoY2h1bmstXFx1MDAzZWNodW5rX2hkci1cXHUwMDNldHlwZSkpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1MTo1MC42NDE3MDE0NzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2N0cC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFNDVFAgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIElQX1NDVFBcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgU0NUUCBQcm90b2NvbFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgMTI6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDEzOlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2xcXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBGcm9tIFJGQyAyOTYwIFxcdTAwM2NodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTYwLnR4dFxcdTAwM2UuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgXFxcIlNDVFAgaXMgYSByZWxpYWJsZSB0cmFuc3BvcnQgcHJvdG9jb2wgb3BlcmF0aW5nIG9uIHRvcCBvZiBhXFxuICAyMDpcXHRcXHQgIGNvbm5lY3Rpb25sZXNzIHBhY2tldCBuZXR3b3JrIHN1Y2ggYXMgSVAuICBJdCBvZmZlcnMgdGhlIGZvbGxvd2luZ1xcbiAgMjE6XFx0XFx0ICBzZXJ2aWNlcyB0byBpdHMgdXNlcnM6XFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgLS0gYWNrbm93bGVkZ2VkIGVycm9yLWZyZWUgbm9uLWR1cGxpY2F0ZWQgdHJhbnNmZXIgb2YgdXNlciBkYXRhLFxcbiAgMjQ6XFx0XFx0ICAtLSBkYXRhIGZyYWdtZW50YXRpb24gdG8gY29uZm9ybSB0byBkaXNjb3ZlcmVkIHBhdGggTVRVIHNpemUsXFxuICAyNTpcXHRcXHQgIC0tIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiB1c2VyIG1lc3NhZ2VzIHdpdGhpbiBtdWx0aXBsZSBzdHJlYW1zLFxcbiAgMjY6XFx0XFx0ICB3aXRoIGFuIG9wdGlvbiBmb3Igb3JkZXItb2YtYXJyaXZhbCBkZWxpdmVyeSBvZiBpbmRpdmlkdWFsIHVzZXJcXG4gIDI3OlxcdFxcdCAgbWVzc2FnZXMsXFxuICAyODpcXHRcXHQgIC0tIG9wdGlvbmFsIGJ1bmRsaW5nIG9mIG11bHRpcGxlIHVzZXIgbWVzc2FnZXMgaW50byBhIHNpbmdsZSBTQ1RQXFxuICAyOTpcXHRcXHQgIHBhY2tldCwgYW5kXFxuICAzMDpcXHRcXHQgIC0tIG5ldHdvcmstbGV2ZWwgZmF1bHQgdG9sZXJhbmNlIHRocm91Z2ggc3VwcG9ydGluZyBvZiBtdWx0aS1cXG4gIDMxOlxcdFxcdCAgaG9taW5nIGF0IGVpdGhlciBvciBib3RoIGVuZHMgb2YgYW4gYXNzb2NpYXRpb24uXFxcIlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBwcm90b2NvbCBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDM0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjdHAuIERlYnVnIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGJ5IHRoZVxcbiAgMzU6XFx0XFx0ICBrZXJuZWwncyBkeW5hbWljIGRlYnVnZ2luZyBmcmFtZXdvcmsuXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRpZiBJUF9TQ1RQXFxuICA0MDpcXHRcXG4gIDQxOlxcdGNvbmZpZyBTQ1RQX0RCR19PQkpDTlRcXG4gIDQyOlxcdFxcdGJvb2wgXFxcIlNDVFA6IERlYnVnIG9iamVjdCBjb3VudHNcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlNcXG4gIDQ0OlxcdFxcdGhlbHBcXG4gIDQ1OlxcdFxcdCAgSWYgeW91IHNheSBZLCB0aGlzIHdpbGwgZW5hYmxlIGRlYnVnZ2luZyBzdXBwb3J0IGZvciBjb3VudGluZyB0aGVcXG4gIDQ2OlxcdFxcdCAgdHlwZSBvZiBvYmplY3RzIHRoYXQgYXJlIGN1cnJlbnRseSBhbGxvY2F0ZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDQ3OlxcdFxcdCAgaWRlbnRpZnlpbmcgbWVtb3J5IGxlYWtzLiBUaGlzIGRlYnVnIGluZm9ybWF0aW9uIGNhbiBiZSB2aWV3ZWQgYnlcXG4gIDQ4OlxcdFxcdCAgJ2NhdCAvcHJvYy9uZXQvc2N0cC9zY3RwX2RiZ19vYmpjbnQnXFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1MTo1MC42NDE3ODgyNDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTMxOTQ4NTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNDVFAgQ2h1bmsgUHJvY2Vzc2luZyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgc2N0cF9pbnFfcG9wYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQncyBjaGFuZ2VkLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgd2l0aCBob3cgdGhlIGNvZGUgaGFuZGxlcyBpbnZhbGlkIGNodW5rIGxlbmd0aHMsIHNwZWNpZmljYWxseSB3aGVuIGBudG9ocyhjaC1cdTAwM2VsZW5ndGgpYCBpcyBsZXNzIHRoYW4gYHNpemVvZigqY2gpYC4gUHJldmlvdXNseSwgaXQgc2VlbXMgdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGBjaHVua19lbmRgIHBvaW50aW5nIG91dHNpZGUgdGhlIGV4cGVjdGVkIG1lbW9yeSByZWdpb24sIGVpdGhlciBiZWZvcmUgdGhlIGNodW5rIGhlYWRlciBvciB0aHJvdWdoIGFuIHVuZGVyZmxvdywgcmVzdWx0aW5nIGluIG1hbGZvcm1lZCBjaHVuayBoYW5kbGluZyBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhhdCdzIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5IVxuXG5Ob3csIHRoZSBmaXggbGV2ZXJhZ2VzIHRoZSBgdW5saWtlbHkoKWAgbWFjcm8gYW5kIHNldHMgYGNodW5rLVx1MDAzZXBkaXNjYXJkID0gMWAgaWYgYG50b2hzKGNoLVx1MDAzZWxlbmd0aClgIGlzIGluZGVlZCBsZXNzIHRoYW4gYHNpemVvZigqY2gpYC4gVGhpcyBzZWVtcyBsaWtlIGEgYmV0dGVyIGFwcHJvYWNoIC0gZXhwbGljaXRseSBtYXJraW5nIHRoZSBjaHVuayBmb3IgZGlzY2FyZCBwcmV2ZW50cyBmdXJ0aGVyIHByb2Nlc3Npbmcgb2YgZ2FyYmFnZSBkYXRhLlxuXG5gc2N0cF9pbnFfcG9wYCByZXNpZGVzIGluIGBuZXQvc2N0cC9pbnF1ZXVlLmNgLCBhbmQgSSBzaG91bGQgY29uZmlybSBpZiBpdCdzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBzaW5jZSBpdHMgaW50ZXJmYWNlIGNvdWxkIGluZmx1ZW5jZSBob3cgaXQgaXMgY2FsbGVkIGFuZCB1c2VkLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvc2N0cC9NYWtlZmlsZWAgb3IgcmVsZXZhbnQgaGVhZGVyIGRlY2xhcmF0aW9ucyBmb3IgdGhhdC4gTGV0J3Mgc2VlLi4uIExpbmUgMTE4OiBgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfaW5xX3BvcChzdHJ1Y3Qgc2N0cF9pbnEgKnF1ZXVlKWAuIE9rYXksIHRoYXQgZ2l2ZXMgbWUgdGhlIHNpZ25hdHVyZSwgYnV0IEkgbmVlZCB0byBrbm93IGlmIGl0J3MgZXh0ZXJuYWxseSB2aXNpYmxlIG9yIG9ubHkgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJncmVwcGVyIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTI6MjkuOTYxMjc2NTcxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MTczMTUxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX2lucV9wb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmg9MTA0Mj12b2lkIHNjdHBfaW5xX3B1c2goc3RydWN0IHNjdHBfaW5xICosIHN0cnVjdCBzY3RwX2NodW5rICpwYWNrZXQpO1xcbmluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oOjEwNDM6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfaW5xX3BvcChzdHJ1Y3Qgc2N0cF9pbnEgKik7XFxuaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgtMTA0NC1zdHJ1Y3Qgc2N0cF9jaHVua2hkciAqc2N0cF9pbnFfcGVlayhzdHJ1Y3Qgc2N0cF9pbnEgKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUyOjMwLjM0MzAxNDUyNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1NzkxODQ4NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50IGRvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBvZiBgaW5xdWV1ZS5vYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgaW5xdWV1ZS5vYCBpcyBiZWluZyBjb21waWxlZC4gSXQncyBhIGNyaXRpY2FsIHBpZWNlIHdpdGhpbiB0aGUgU0NUUCBzdGFjaywgYW5kIEkgd2FudCB0byBkb3VibGUtY2hlY2sgaXRzIGJ1aWxkIHByb2Nlc3MuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvc2N0cC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBTQ1RQIG1vZHVsZSBzaG91bGQgcmVzaWRlLiBMZXQncyBkaXZlIGluIGFuZCBzZWUgd2hhdCB0aGUgbWFrZWZpbGUgcmV2ZWFscyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxlciBmbGFncywgYW5kIGxpbmtpbmcgcHJvY2VkdXJlIGZvciBgaW5xdWV1ZS5vYC4gVGhpcyB3aWxsIGhlbHAgbWUgY29uZmlybSBteSBhc3N1bXB0aW9ucyBhYm91dCBpdHMgaW50ZWdyYXRpb24gYW5kIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gcG9pbnRzIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE0NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUzOjA2LjEzNDg2NTMyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2N0cC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIFNDVFAgc3VwcG9ydCBjb2RlLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfSVBfU0NUUCkgKz0gc2N0cC5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfSU5FVF9TQ1RQX0RJQUcpICs9IHNjdHBfZGlhZy5vXFxuICAgODpcXHRcXG4gICA5OlxcdHNjdHAteSA6PSBzbV9zdGF0ZXRhYmxlLm8gc21fc3RhdGVmdW5zLm8gc21fc2lkZWVmZmVjdC5vIFxcXFxcXG4gIDEwOlxcdFxcdCAgcHJvdG9jb2wubyBlbmRwb2ludG9sYS5vIGFzc29jaW9sYS5vIFxcXFxcXG4gIDExOlxcdFxcdCAgdHJhbnNwb3J0Lm8gY2h1bmsubyBzbV9tYWtlX2NodW5rLm8gdWxwZXZlbnQubyBcXFxcXFxuICAxMjpcXHRcXHQgIGlucXVldWUubyBvdXRxdWV1ZS5vIHVscHF1ZXVlLm8gXFxcXFxcbiAgMTM6XFx0XFx0ICB0c25tYXAubyBiaW5kX2FkZHIubyBzb2NrZXQubyBwcmltaXRpdmUubyBcXFxcXFxuICAxNDpcXHRcXHQgIG91dHB1dC5vIGlucHV0Lm8gZGVidWcubyBzdHJlYW0ubyBhdXRoLm8gXFxcXFxcbiAgMTU6XFx0XFx0ICBvZmZsb2FkLm8gc3RyZWFtX3NjaGVkLm8gc3RyZWFtX3NjaGVkX3ByaW8ubyBcXFxcXFxuICAxNjpcXHRcXHQgIHN0cmVhbV9zY2hlZF9yci5vIHN0cmVhbV9zY2hlZF9mYy5vIFxcXFxcXG4gIDE3OlxcdFxcdCAgc3RyZWFtX2ludGVybGVhdmUub1xcbiAgMTg6XFx0XFxuICAxOTpcXHRzY3RwX2RpYWcteSA6PSBkaWFnLm9cXG4gIDIwOlxcdFxcbiAgMjE6XFx0c2N0cC0kKENPTkZJR19TQ1RQX0RCR19PQkpDTlQpICs9IG9iamNudC5vXFxuICAyMjpcXHRzY3RwLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbiAgMjM6XFx0c2N0cC0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bC5vXFxuICAyNDpcXHRcXG4gIDI1OlxcdHNjdHAtJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpXFx0Kz0gaXB2Ni5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUzOjA2LjEzNDkyMzMxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjA5MDI5MzA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzOiBgQ09ORklHX0lQX1NDVFBgIGFuZCBgc2N0cF9pbnFfcG9wYCoqXG5cbk9rYXksIHNvIGBDT05GSUdfSVBfU0NUUGAgZGlyZWN0bHkgbGVhZHMgdG8gdGhlIGNvbXBpbGF0aW9uIG9mIGBzY3RwLm9gLCB3aGljaCBpbmNsdWRlcyBgaW5xdWV1ZS5vYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdG8gZ2FpbiBhIGJyb2FkZXIgcGljdHVyZS4gYG1lbnVjb25maWcgSVBfU0NUUGAgZGVwZW5kcyBvbiBgSU5FVGAsIHdoaWNoIGlzIGEgcHJldHR5IHN0YW5kYXJkLCBmb3VuZGF0aW9uYWwgY29uZmlndXJhdGlvbi5cblxuSXMgdGhpcyBhIGZ1enppbmcgdGFyZ2V0PyBBYnNvbHV0ZWx5ISBUaGlzIGlzIHByaW1lIHJlYWwgZXN0YXRlIOKAkyB3ZSdyZSB0YWxraW5nIGFib3V0IFNDVFAgcGFja2V0IHBhcnNpbmcgYW5kIGlucXVldWUgcHJvY2Vzc2luZy4gU3BlY2lmaWNhbGx5LCB0aGUgaGFuZGxpbmcgb2YgY2h1bmtzIHdpdGggcG90ZW50aWFsbHkgaW52YWxpZCBsZW5ndGhzIOKAkyB1bmRlcnNpemVkIGNodW5rcyB3aGVyZSBgY2gtXHUwMDNlbGVuZ3RoYCBpcyBsZXNzIHRoYW4gYHNpemVvZigqY2gpYC4gVGhhdCdzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzLiBJdCdzIGFsc28gcGFydCBvZiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLiBUaGluayBzdGFuZGFyZCBuZXR3b3JraW5nIGFjY2VzczogU0NUUCBzb2NrZXRzLCByYXcgcGFja2V0cywgU3l6a2FsbGVyIFNDVFAgc3lzY2FsbHMsIG5ldHdvcmsgZGV2aWNlIFJYLiBUaGlzIGlzIGFsbCB2ZXJ5IHJlYWNoYWJsZS4gVGhpcyB2dWxuZXJhYmlsaXR5IHRhcmdldHMgaG93IGBzY3RwX2lucV9wb3BgIGV4ZWN1dGVzIGl0cyBsb2dpYy5cblxuTm93LCBsZXQncyBleGFtaW5lIHRoZSBmb2N1cyBzeW1ib2wuIGBzY3RwX2lucV9wb3BgIGlzIGEgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGZ1bmN0aW9uLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBJdCB0YWtlcyBhIGBzdHJ1Y3Qgc2N0cF9pbnEgKnF1ZXVlYCBhbmQgcmV0dXJucyBhIGBzdHJ1Y3Qgc2N0cF9jaHVuayAqYC4gSSBhbHNvIG5vdGUgdGhlIGNhbGxlcnMgYW5kIHJlbGF0ZWQgZW50cnlwb2ludHMuIExvb2tzIGxpa2Ugd2UgaGF2ZSBgc2N0cF9hc3NvY19iaF9yY3ZgLCBgc2N0cF9lbmRwb2ludF9iaF9yY3ZgLCBhbmQgZXZlbiBgc2N0cF9pbnFfcG9wYCBpdHNlbGYuIFNvLCBgc2N0cF9pbnFfcG9wYCBpdHNlbGYgaXMgdGhlIHByZWNpc2UgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQuIEl0J3MgYW4gZXhjZWxsZW50IGZvY3VzIHN5bWJvbC5cblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uczogYElQX1NDVFBgIGFuZCwgb2YgY291cnNlLCBgSU5FVGAuXG5cbkFscmlnaHQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBzdW1tYXJpemU6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gdGhpcyBpcyBhIHNvbGlkIHRhcmdldC5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgW1wic2N0cF9pbnFfcG9wXCJdYCAtIHRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIG1hdHRlci5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFtcIklQX1NDVFBcIiwgXCJJTkVUXCJdYCAtIG91ciByZXF1aXJlZCBidWlsZGluZyBibG9ja3MuXG4qICAgKipSZWFzb25pbmc6KiogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyB2ZXJkaWN0IGlzIHdoYXQgaXQgaXMuXG5cblRpbWUgdG8gbWFrZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODA1LCJPdXRwdXRUb2tlbnMiOjExMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUzOjI4LjIyNTIxOTY4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDU0OTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9pbnFfcG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgY2h1bmsgbGVuZ3RoIHZhbGlkYXRpb24gaW4gdGhlIFNDVFAgaW5wdXQgcXVldWUgcHJvY2Vzc29yIChzY3RwX2lucV9wb3ApIHRvIGRpc2NhcmQgY2h1bmtzIHdoZW4gdGhlIGNodW5rIGhlYWRlciBsZW5ndGggZmllbGQgaXMgc21hbGxlciB0aGFuIHRoZSBoZWFkZXIgc2l6ZSwgcHJldmVudGluZyBtYWxmb3JtZWQgY2h1bmtzIGZyb20gcHJvY2VlZGluZy4gVGhpcyBhZmZlY3RzIGNvcmUgU0NUUCBwYWNrZXQgcGFyc2luZyBhbmQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX2lucV9wb3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBjaHVuayBsZW5ndGggdmFsaWRhdGlvbiBpbiB0aGUgU0NUUCBpbnB1dCBxdWV1ZSBwcm9jZXNzb3IgKHNjdHBfaW5xX3BvcCkgdG8gZGlzY2FyZCBjaHVua3Mgd2hlbiB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aCBmaWVsZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGhlYWRlciBzaXplLCBwcmV2ZW50aW5nIG1hbGZvcm1lZCBjaHVua3MgZnJvbSBwcm9jZWVkaW5nLiBUaGlzIGFmZmVjdHMgY29yZSBTQ1RQIHBhY2tldCBwYXJzaW5nIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUzOjI4LjMwMzY4MjIzNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0OTc3Mzg5ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTM6MjguMzA0MTE5MDU1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM0OTc2OTQ4ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc2N0cF9pbnFfcG9wKClgIGZvciBpbmNvbWluZyBTQ1RQIGNodW5rcyB3aXRoIGFuIGludmFsaWQgbGVuZ3RoIHNtYWxsZXIgdGhhbiB0aGUgU0NUUCBjaHVuayBoZWFkZXIgKGBzaXplb2YoKmNoKWApLiBQcmV2aW91c2x5LCBhIGNodW5rIGxlbmd0aCBcXHUwMDNjIDQgY291bGQgY2F1c2UgYGNodW5rLVxcdTAwM2VjaHVua19lbmRgIHRvIHByZWNlZGUgYGNodW5rLVxcdTAwM2Vza2ItXFx1MDAzZWRhdGFgLCBsZWFkaW5nIHRvIGEgbmVnYXRpdmUgYHNrYl9wdWxsKClgIG9mZnNldCBhbmQgc2tiIGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHBhY2tldCBjaHVua3MuXFxuXFxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFkZHJlc3NlcyBwYWNrZXQgdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIG5ldHdvcmsgc2tiIGRhdGEuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYXJpc2luZyBmcm9tIHRoaXMgbG9naWMgaXMgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIGtlcm5lbCBhc3NlcnRpb25zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbmV3IHN0cnVjdCBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZGUzNTc4YmQ5MGQwM2RiZDYxZDNkZDA0Yzg1ZDE1MTM2NjI1Y2QzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMjE6NTE6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pbnF1ZXVlLmMgYi9uZXQvc2N0cC9pbnF1ZXVlLmNcbmluZGV4IDVmOTg4YjNhODgxNGYuLmQ2NjZjZWM2YjE5NGUgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9pbnF1ZXVlLmNcbisrKyBiL25ldC9zY3RwL2lucXVldWUuY1xuQEAgLTIxMiw4ICsyMTIsMTAgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfaW5xX3BvcChzdHJ1Y3Qgc2N0cF9pbnEgKnF1ZXVlKVxuIFx0Y2h1bmstXHUwMDNlY2h1bmtfZW5kID0gKChfX3U4ICopY2gpICsgU0NUUF9QQUQ0KG50b2hzKGNoLVx1MDAzZWxlbmd0aCkpO1xuIFx0c2tiX3B1bGwoY2h1bmstXHUwMDNlc2tiLCBzaXplb2YoKmNoKSk7XG4gXHRjaHVuay1cdTAwM2VzdWJoLnYgPSBOVUxMOyAvKiBTdWJoZWFkZXIgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgKi9cbi1cbi1cdGlmIChjaHVuay1cdTAwM2VjaHVua19lbmQgKyBzaXplb2YoKmNoKSBcdTAwM2M9IHNrYl90YWlsX3BvaW50ZXIoY2h1bmstXHUwMDNlc2tiKSkge1xuK1x0aWYgKHVubGlrZWx5KG50b2hzKGNoLVx1MDAzZWxlbmd0aCkgXHUwMDNjIHNpemVvZigqY2gpKSkge1xuK1x0XHRjaHVuay1cdTAwM2VwZGlzY2FyZCA9IDE7XG4rXHR9IGVsc2UgaWYgKGNodW5rLVx1MDAzZWNodW5rX2VuZCArIHNpemVvZigqY2gpIFx1MDAzYz1cbitcdFx0ICAgc2tiX3RhaWxfcG9pbnRlcihjaHVuay1cdTAwM2Vza2IpKSB7XG4gXHRcdC8qIFRoaXMgaXMgbm90IGEgc2luZ2xldG9uICovXG4gXHRcdGNodW5rLVx1MDAzZXNpbmdsZXRvbiA9IDA7XG4gXHR9IGVsc2UgaWYgKGNodW5rLVx1MDAzZWNodW5rX2VuZCBcdTAwM2Ugc2tiX3RhaWxfcG9pbnRlcihjaHVuay1cdTAwM2Vza2IpKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1MzoyOC4zMDQxMjEwNDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzMzc2NzIwOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoZSBzaXR1YXRpb246XG5cbioqS01TQU4gRnV6emluZyBTZXNzaW9uIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29kZS4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGBuZXQvc2N0cC9pbnF1ZXVlLmNgLCBhbmQgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDIxMi4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcgb2YgdGhlIGNvZGUgaW4gdGhhdCBhcmVhIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIHBhdGNoJ3MgY2hhbmdlcyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIEJhc2VkIG9uIHRoaXMgaW5zcGVjdGlvbiwgSSBjYW4gbWFrZSBhbiBpbmZvcm1lZCBkZWNpc2lvbiBhYm91dCB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgdnVsbmVyYWJpbGl0eSBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1Mzo0OC42NDE3OTUyNTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvaW5xdWV1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHRfY2h1bms7XFxuIDE4MTpcXHRcXHRcXHRcXHRcXHR9XFxuIDE4MjpcXHRcXHRcXHRcXHRcXHRjaHVuay1cXHUwMDNlc2tiID0gc2tiX3NoaW5mbyhjaHVuay1cXHUwMDNlc2tiKS1cXHUwMDNlZnJhZ19saXN0O1xcbiAxODM6XFx0XFx0XFx0XFx0fVxcbiAxODQ6XFx0XFx0XFx0fVxcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRcXHRpZiAoY2h1bmstXFx1MDAzZWFzb2MpXFxuIDE4NzpcXHRcXHRcXHRcXHRzb2NrX3Jwc19zYXZlX3J4aGFzaChjaHVuay1cXHUwMDNlYXNvYy1cXHUwMDNlYmFzZS5zaywgY2h1bmstXFx1MDAzZXNrYik7XFxuIDE4ODpcXHRcXG4gMTg5OlxcdFxcdFxcdHF1ZXVlLVxcdTAwM2Vpbl9wcm9ncmVzcyA9IGNodW5rO1xcbiAxOTA6XFx0XFxuIDE5MTpcXHRuZXdfc2tiOlxcbiAxOTI6XFx0XFx0XFx0LyogVGhpcyBpcyB0aGUgZmlyc3QgY2h1bmsgaW4gdGhlIHBhY2tldC4gICovXFxuIDE5MzpcXHRcXHRcXHRjaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKWNodW5rLVxcdTAwM2Vza2ItXFx1MDAzZWRhdGE7XFxuIDE5NDpcXHRcXHRcXHRjaHVuay1cXHUwMDNlc2luZ2xldG9uID0gMTtcXG4gMTk1OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VkYXRhX2FjY2VwdGVkID0gMDtcXG4gMTk2OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VwZGlzY2FyZCA9IDA7XFxuIDE5NzpcXHRcXHRcXHRjaHVuay1cXHUwMDNlYXV0aCA9IDA7XFxuIDE5ODpcXHRcXHRcXHRjaHVuay1cXHUwMDNlaGFzX2FzY29uZiA9IDA7XFxuIDE5OTpcXHRcXHRcXHRjaHVuay1cXHUwMDNlZW5kX29mX3BhY2tldCA9IDA7XFxuIDIwMDpcXHRcXHRcXHRpZiAoY2h1bmstXFx1MDAzZWhlYWRfc2tiKSB7XFxuIDIwMTpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2N0cF9pbnB1dF9jYlxcbiAyMDI6XFx0XFx0XFx0XFx0XFx0KmNiID0gU0NUUF9JTlBVVF9DQihjaHVuay1cXHUwMDNlc2tiKSxcXG4gMjAzOlxcdFxcdFxcdFxcdFxcdCpoZWFkX2NiID0gU0NUUF9JTlBVVF9DQihjaHVuay1cXHUwMDNlaGVhZF9za2IpO1xcbiAyMDQ6XFx0XFxuIDIwNTpcXHRcXHRcXHRcXHRjYi1cXHUwMDNlY2h1bmsgPSBoZWFkX2NiLVxcdTAwM2VjaHVuaztcXG4gMjA2OlxcdFxcdFxcdFxcdGNiLVxcdTAwM2VhZiA9IGhlYWRfY2ItXFx1MDAzZWFmO1xcbiAyMDc6XFx0XFx0XFx0XFx0Y2ItXFx1MDAzZWVuY2FwX3BvcnQgPSBoZWFkX2NiLVxcdTAwM2VlbmNhcF9wb3J0O1xcbiAyMDg6XFx0XFx0XFx0fVxcbiAyMDk6XFx0XFx0fVxcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHRjaHVuay1cXHUwMDNlY2h1bmtfaGRyID0gY2g7XFxuIDIxMjpcXHRcXHRjaHVuay1cXHUwMDNlY2h1bmtfZW5kID0gKChfX3U4ICopY2gpICsgU0NUUF9QQUQ0KG50b2hzKGNoLVxcdTAwM2VsZW5ndGgpKTtcXG4gMjEzOlxcdFxcdHNrYl9wdWxsKGNodW5rLVxcdTAwM2Vza2IsIHNpemVvZigqY2gpKTtcXG4gMjE0OlxcdFxcdGNodW5rLVxcdTAwM2VzdWJoLnYgPSBOVUxMOyAvKiBTdWJoZWFkZXIgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgKi9cXG4gMjE1OlxcdFxcdGlmICh1bmxpa2VseShudG9ocyhjaC1cXHUwMDNlbGVuZ3RoKSBcXHUwMDNjIHNpemVvZigqY2gpKSkge1xcbiAyMTY6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZXBkaXNjYXJkID0gMTtcXG4gMjE3OlxcdFxcdH0gZWxzZSBpZiAoY2h1bmstXFx1MDAzZWNodW5rX2VuZCArIHNpemVvZigqY2gpIFxcdTAwM2M9XFxuIDIxODpcXHRcXHRcXHQgICBza2JfdGFpbF9wb2ludGVyKGNodW5rLVxcdTAwM2Vza2IpKSB7XFxuIDIxOTpcXHRcXHRcXHQvKiBUaGlzIGlzIG5vdCBhIHNpbmdsZXRvbiAqL1xcbiAyMjA6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZXNpbmdsZXRvbiA9IDA7XFxuIDIyMTpcXHRcXHR9IGVsc2UgaWYgKGNodW5rLVxcdTAwM2VjaHVua19lbmQgXFx1MDAzZSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVxcdTAwM2Vza2IpKSB7XFxuIDIyMjpcXHRcXHRcXHQvKiBEaXNjYXJkIGluc2lkZSBzdGF0ZSBtYWNoaW5lLiAqL1xcbiAyMjM6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZXBkaXNjYXJkID0gMTtcXG4gMjI0OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VjaHVua19lbmQgPSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVxcdTAwM2Vza2IpO1xcbiAyMjU6XFx0XFx0fSBlbHNlIHtcXG4gMjI2OlxcdFxcdFxcdC8qIFdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQsIHNvIG1hcmsgdGhlIGNodW5rXFxuIDIyNzpcXHRcXHRcXHQgKiBpbiBjYXNlIHdlIG5lZWQgdG8gc2VuZCBhIFNBQ0suXFxuIDIyODpcXHRcXHRcXHQgKi9cXG4gMjI5OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VlbmRfb2ZfcGFja2V0ID0gMTtcXG4gMjMwOlxcdFxcdH1cXG4gMjMxOlxcdFxcbiAyMzI6XFx0XFx0cHJfZGVidWcoXFxcIisrK3NjdHBfaW5xX3BvcCsrKyBjaHVuazolcFslc10sIGxlbmd0aDolZCwgc2tiLVxcdTAwM2VsZW46JWRcXFxcblxcXCIsXFxuIDIzMzpcXHRcXHRcXHQgY2h1bmssIHNjdHBfY25hbWUoU0NUUF9TVF9DSFVOSyhjaHVuay1cXHUwMDNlY2h1bmtfaGRyLVxcdTAwM2V0eXBlKSksXFxuIDIzNDpcXHRcXHRcXHQgbnRvaHMoY2h1bmstXFx1MDAzZWNodW5rX2hkci1cXHUwMDNlbGVuZ3RoKSwgY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlbGVuKTtcXG4gMjM1OlxcdFxcbiAyMzY6XFx0XFx0cmV0dXJuIGNodW5rO1xcbiAyMzc6XFx0fVxcbiAyMzg6XFx0XFxuIDIzOTpcXHQvKiBTZXQgYSB0b3AtaGFsZiBoYW5kbGVyLlxcbiAyNDA6XFx0ICpcXG4gMjQxOlxcdCAqIE9yaWdpbmFsbHksIHdlIHRoZSB0b3AtaGFsZiBoYW5kbGVyIHdhcyBzY2hlZHVsZWQgYXMgYSBCSC4gIFdlIG5vd1xcbiAyNDI6XFx0ICogY2FsbCB0aGUgaGFuZGxlciBkaXJlY3RseSBpbiBzY3RwX2lucV9wdXNoKCkgYXQgYSB0aW1lIHRoYXRcXG4gMjQzOlxcdCAqIHdlIGtub3cgd2UgYXJlIGxvY2sgc2FmZS5cXG4gMjQ0OlxcdCAqIFRoZSBpbnRlbnQgaXMgdGhhdCB0aGlzIHJvdXRpbmUgd2lsbCBwdWxsIHN0dWZmIG91dCBvZiB0aGVcXG4gMjQ1OlxcdCAqIGlucXVldWUgYW5kIHByb2Nlc3MgaXQuXFxuIDI0NjpcXHQgKi9cXG4gMjQ3OlxcdHZvaWQgc2N0cF9pbnFfc2V0X3RoX2hhbmRsZXIoc3RydWN0IHNjdHBfaW5xICpxLCB3b3JrX2Z1bmNfdCBjYWxsYmFjaylcXG4gMjQ4OlxcdHtcXG4gMjQ5OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2cS1cXHUwMDNlaW1tZWRpYXRlLCBjYWxsYmFjayk7XFxuIDI1MDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUzOjQ4LjY0MTg2OTExNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzExNTMxODE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNDVFAgQ2h1bmsgUG9wcGluZyBMb2dpYyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBzY3RwX2lucV9wb3BgIGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgaXQgaGFuZGxlcyBjaHVuayBib3VuZGFyaWVzLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLCBhcyBhbnkgbWlzaW50ZXJwcmV0YXRpb24gY291bGQgbGVhZCB0byBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IGZsYXdzIGluIHRoZSBkYXRhIHByb2Nlc3NpbmcuXG5cblRoZSBjb2RlJ3MgaW5pdGlhbCBzZXR1cCBncmFicyB0aGUgY2h1bmsgaGVhZGVyLCB3aGljaCBpcyB0aGVuIHVzZWQgdG8gY2FsY3VsYXRlIGBjaHVuay1cdTAwM2VjaHVua19lbmRgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMuIFNwZWNpZmljYWxseSwgdGhlIHNuaXBwZXQgSSdtIGZvY3VzZWQgb24gY2hlY2tzIGlmIGEgY2h1bmsgaXMgY29tcGxldGUgd2l0aGluIHRoZSBTS0IncyBjdXJyZW50IGRhdGEgYnVmZmVyLiBJdCdzIGNydWNpYWwgZm9yIGVmZmljaWVudGx5IGlkZW50aWZ5aW5nIHdoZW4gd2UgaGF2ZSBhIGZ1bGwgY2h1bmsgdG8gd29yayB3aXRoLlxuXG5UaGUgY2FsY3VsYXRpb24gb2YgYGNodW5rLVx1MDAzZWNodW5rX2VuZGAgbG9va3Mgc3RyYWlnaHRmb3J3YXJkIHVzaW5nIGBTQ1RQX1BBRDRgIGFuZCBgbnRvaHMoY2gtXHUwMDNlbGVuZ3RoKWAuIEhvd2V2ZXIsIHRoZXJlJ3MgYSBwb3RlbnRpYWwgaXNzdWUgaWYgdGhlIHJlcG9ydGVkIGNodW5rIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGNodW5rIGhlYWRlciBpdHNlbGYuIFRoaXMgaXMgbXkga2V5IGNvbmNlcm4uIElmIGBudG9ocyhjaC1cdTAwM2VsZW5ndGgpYCBpcyBsZXNzIHRoYW4gYHNpemVvZigqY2gpYCAod2hpY2ggaXMgNCBpbiBvdXIgY2FzZSwgY29uc2lkZXJpbmcgU0NUUF9QQUQ0KSwgYGNodW5rX2VuZGAgY291bGQgZW5kIHVwIHBvc2l0aW9uZWQgYmVmb3JlIHRoZSBleHBlY3RlZCBkYXRhLlxuXG5JJ20gc3RhcnRpbmcgdG8gc2VlIGl0ISBBZnRlciB0aGUgYHNrYl9wdWxsYCBvcGVyYXRpb24sIHdoaWNoIHNoaWZ0cyB0aGUgYHNrYi1cdTAwM2VkYXRhYCBwb2ludGVyLCB0aGUgY3J1Y2lhbCBjb21wYXJpc29uIGBjaHVua19lbmQgKyBzaXplb2YoKmNoKSBcdTAwM2M9IHNrYl90YWlsX3BvaW50ZXIoY2h1bmstXHUwMDNlc2tiKWAgY291bGQgbWlzdGFrZW5seSBldmFsdWF0ZSB0byB0cnVlLiBXaHk/IEJlY2F1c2UgaWYgdGhlIGRlY2xhcmVkIGNodW5rIGxlbmd0aCBpcyBzbWFsbCAoZS5nLiwgemVybyksIGBjaHVua19lbmRgIHdpbGwgcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgaGVhZGVyLiBBZnRlciB0aGUgYHNrYl9wdWxsYCwgYGNodW5rX2VuZCArIHNpemVvZigqY2gpYCB3b3VsZCBwb2ludCB0byB0aGUgbmV3IGBza2ItXHUwMDNlZGF0YWAgcG9pbnRlciAqYmVmb3JlKiB0aGUgY2hlY2shIFRoaXMgbWVhbnMgYSBzZWVtaW5nbHkgaW5jb21wbGV0ZSBjaHVuayAoYWNjb3JkaW5nIHRvIHRoZSBvcmlnaW5hbCBsZW5ndGgpIG1pZ2h0IGJlIHdyb25nbHkgdHJlYXRlZCBhcyBhIGNvbXBsZXRlIGNodW5rIGFuZCBpcyBub3QgZGlzY2FyZGVkLiBUaGlzIHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGl0ZXJhdGlvbiB3b3JrcyBpbiBgc2N0cF9pbnFfcG9wYCB0byBzZWUgdGhlIGVmZmVjdCBvbiB0aGUgbmV4dCBwcm9jZXNzaW5nIHN0ZXAuIFRpbWUgdG8gY2hlY2sgbGluZXMgMTMwIHRocm91Z2ggMTkwLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjU0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTQ6NDUuNzU3MTkwMzA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY3RwL2lucXVldWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFx0XFx0ICogQW55IHBvc3QgcHJvY2Vzc2luZyB3b3JrIHRvIGRvIGJlZm9yZSB3ZSBtb3ZlIG9uP1xcbiAxMzE6XFx0XFx0XFx0ICovXFxuIDEzMjpcXHRcXHRcXHRpZiAoY2h1bmstXFx1MDAzZXNpbmdsZXRvbiB8fFxcbiAxMzM6XFx0XFx0XFx0ICAgIGNodW5rLVxcdTAwM2VlbmRfb2ZfcGFja2V0IHx8XFxuIDEzNDpcXHRcXHRcXHQgICAgY2h1bmstXFx1MDAzZXBkaXNjYXJkKSB7XFxuIDEzNTpcXHRcXHRcXHRcXHRpZiAoY2h1bmstXFx1MDAzZWhlYWRfc2tiID09IGNodW5rLVxcdTAwM2Vza2IpIHtcXG4gMTM2OlxcdFxcdFxcdFxcdFxcdGNodW5rLVxcdTAwM2Vza2IgPSBza2Jfc2hpbmZvKGNodW5rLVxcdTAwM2Vza2IpLVxcdTAwM2VmcmFnX2xpc3Q7XFxuIDEzNzpcXHRcXHRcXHRcXHRcXHRnb3RvIG5ld19za2I7XFxuIDEzODpcXHRcXHRcXHRcXHR9XFxuIDEzOTpcXHRcXHRcXHRcXHRpZiAoY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlbmV4dCkge1xcbiAxNDA6XFx0XFx0XFx0XFx0XFx0Y2h1bmstXFx1MDAzZXNrYiA9IGNodW5rLVxcdTAwM2Vza2ItXFx1MDAzZW5leHQ7XFxuIDE0MTpcXHRcXHRcXHRcXHRcXHRnb3RvIG5ld19za2I7XFxuIDE0MjpcXHRcXHRcXHRcXHR9XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdFxcdFxcdHNjdHBfaW5xX2NodW5rX2ZyZWUoY2h1bmspO1xcbiAxNDU6XFx0XFx0XFx0XFx0Y2h1bmsgPSBxdWV1ZS1cXHUwMDNlaW5fcHJvZ3Jlc3MgPSBOVUxMO1xcbiAxNDY6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTQ3OlxcdFxcdFxcdFxcdC8qIE5vdGhpbmcgdG8gZG8uIE5leHQgY2h1bmsgaW4gdGhlIHBhY2tldCwgcGxlYXNlLiAqL1xcbiAxNDg6XFx0XFx0XFx0XFx0Y2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKiljaHVuay1cXHUwMDNlY2h1bmtfZW5kO1xcbiAxNDk6XFx0XFx0XFx0XFx0LyogRm9yY2UgY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlZGF0YSB0byBjaHVuay1cXHUwMDNlY2h1bmtfZW5kLiAgKi9cXG4gMTUwOlxcdFxcdFxcdFxcdHNrYl9wdWxsKGNodW5rLVxcdTAwM2Vza2IsIGNodW5rLVxcdTAwM2VjaHVua19lbmQgLSBjaHVuay1cXHUwMDNlc2tiLVxcdTAwM2VkYXRhKTtcXG4gMTUxOlxcdFxcdFxcdFxcdC8qIFdlIGFyZSBndWFyYW50ZWVkIHRvIHB1bGwgYSBTQ1RQIGhlYWRlci4gKi9cXG4gMTUyOlxcdFxcdFxcdH1cXG4gMTUzOlxcdFxcdH1cXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0LyogRG8gd2UgbmVlZCB0byB0YWtlIHRoZSBuZXh0IHBhY2tldCBvdXQgb2YgdGhlIHF1ZXVlIHRvIHByb2Nlc3M/ICovXFxuIDE1NjpcXHRcXHRpZiAoIWNodW5rKSB7XFxuIDE1NzpcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcXG4gMTU4OlxcdFxcbiAxNTk6XFx0bmV4dF9jaHVuazpcXG4gMTYwOlxcdFxcdFxcdC8qIElzIHRoZSBxdWV1ZSBlbXB0eT8gICovXFxuIDE2MTpcXHRcXHRcXHRlbnRyeSA9IHNjdHBfbGlzdF9kZXF1ZXVlKFxcdTAwMjZxdWV1ZS1cXHUwMDNlaW5fY2h1bmtfbGlzdCk7XFxuIDE2MjpcXHRcXHRcXHRpZiAoIWVudHJ5KVxcbiAxNjM6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdFxcdGNodW5rID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHNjdHBfY2h1bmssIGxpc3QpO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRcXHRpZiAoc2tiX2lzX2dzbyhjaHVuay1cXHUwMDNlc2tiKSBcXHUwMDI2XFx1MDAyNiBza2JfaXNfZ3NvX3NjdHAoY2h1bmstXFx1MDAzZXNrYikpIHtcXG4gMTY4OlxcdFxcdFxcdFxcdC8qIEdTTy1tYXJrZWQgc2ticyBidXQgd2l0aG91dCBmcmFncywgaGFuZGxlXFxuIDE2OTpcXHRcXHRcXHRcXHQgKiB0aGVtIG5vcm1hbGx5XFxuIDE3MDpcXHRcXHRcXHRcXHQgKi9cXG4gMTcxOlxcdFxcdFxcdFxcdGlmIChza2Jfc2hpbmZvKGNodW5rLVxcdTAwM2Vza2IpLVxcdTAwM2VmcmFnX2xpc3QpXFxuIDE3MjpcXHRcXHRcXHRcXHRcXHRjaHVuay1cXHUwMDNlaGVhZF9za2IgPSBjaHVuay1cXHUwMDNlc2tiO1xcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHRcXHRcXHQvKiBza2JzIHdpdGggXFxcImNvdmVyIGxldHRlclxcXCIgKi9cXG4gMTc1OlxcdFxcdFxcdFxcdGlmIChjaHVuay1cXHUwMDNlaGVhZF9za2IgXFx1MDAyNlxcdTAwMjYgY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlZGF0YV9sZW4gPT0gY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlbGVuKSB7XFxuIDE3NjpcXHRcXHRcXHRcXHRcXHRpZiAoV0FSTl9PTighc2tiX3NoaW5mbyhjaHVuay1cXHUwMDNlc2tiKS1cXHUwMDNlZnJhZ19saXN0KSkge1xcbiAxNzc6XFx0XFx0XFx0XFx0XFx0XFx0X19TQ1RQX0lOQ19TVEFUUyhkZXZfbmV0KGNodW5rLVxcdTAwM2Vza2ItXFx1MDAzZWRldiksXFxuIDE3ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgU0NUUF9NSUJfSU5fUEtUX0RJU0NBUkRTKTtcXG4gMTc5OlxcdFxcdFxcdFxcdFxcdFxcdHNjdHBfY2h1bmtfZnJlZShjaHVuayk7XFxuIDE4MDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHRfY2h1bms7XFxuIDE4MTpcXHRcXHRcXHRcXHRcXHR9XFxuIDE4MjpcXHRcXHRcXHRcXHRcXHRjaHVuay1cXHUwMDNlc2tiID0gc2tiX3NoaW5mbyhjaHVuay1cXHUwMDNlc2tiKS1cXHUwMDNlZnJhZ19saXN0O1xcbiAxODM6XFx0XFx0XFx0XFx0fVxcbiAxODQ6XFx0XFx0XFx0fVxcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRcXHRpZiAoY2h1bmstXFx1MDAzZWFzb2MpXFxuIDE4NzpcXHRcXHRcXHRcXHRzb2NrX3Jwc19zYXZlX3J4aGFzaChjaHVuay1cXHUwMDNlYXNvYy1cXHUwMDNlYmFzZS5zaywgY2h1bmstXFx1MDAzZXNrYik7XFxuIDE4ODpcXHRcXG4gMTg5OlxcdFxcdFxcdHF1ZXVlLVxcdTAwM2Vpbl9wcm9ncmVzcyA9IGNodW5rO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1NDo0NS43NTcyNTY5MTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc1MjM3ODkzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgU0NUUCBDaHVuayBIZWFkZXIgVmFsaWRhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTGluZSAxNDgtMTUwIGNhdWdodCBteSBhdHRlbnRpb24gYmVjYXVzZSB0aGUgc2NlbmFyaW8gZGVzY3JpYmVkIOKAkyB3aGVyZSBgY2h1bmstXHUwMDNlY2h1bmtfZW5kYCBjb3VsZCBlZmZlY3RpdmVseSBiZSBlYXJsaWVyIHRoYW4gYGNodW5rLVx1MDAzZXNrYi1cdTAwM2VkYXRhYCwgbGVhZGluZyB0byBhIG5lZ2F0aXZlIG9mZnNldCBpbiBgc2tiX3B1bGxgIOKAkyBpbW1lZGlhdGVseSBmbGFncyBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24uIElmIGBudG9ocyhjaC1cdTAwM2VsZW5ndGgpYCBpcyBsZXNzIHRoYW4gYHNpemVvZigqY2gpYCwgdGhhdCBpcywgbGVzcyB0aGFuIDQgYnl0ZXMsIGBza2JfcHVsbGAgd2l0aCBhIG5lZ2F0aXZlIG51bWJlciBpcyBhIHJlY2lwZSBmb3IgZGlzYXN0ZXI6IGVpdGhlciBvdXQtb2YtYm91bmRzIGFjY2VzcywgYW4gaW5maW5pdGUgbG9vcCwgb3Igc29tZSBvdGhlciBzZXJpb3VzIHByb2JsZW0uXG5cblNvLCB0aGlzIHBhdGNoIGZpeGVzIGFuIGltcG9ydGFudCBwYWNrZXQgdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIGJ1ZyBpbiBTQ1RQIHByb3RvY29sIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBhIHNpdHVhdGlvbiB3aGVyZSBhIG1hbGZvcm1lZCBuZXR3b3JrIHBhY2tldCAoaW52YWxpZCBjaHVuayBsZW5ndGgpIGxlYWRzIHRvIGJ1ZmZlciB1bmRlcmZsb3cuIFRoZSBrZXkgZml4IGlzIHNldHRpbmcgYGNodW5rLVx1MDAzZXBkaXNjYXJkID0gMWAgaWYgYG50b2hzKGNoLVx1MDAzZWxlbmd0aCkgXHUwMDNjIHNpemVvZigqY2gpYCwgbWFya2luZyB0aGUgY2h1bmsgZm9yIGRpc2NhcmQgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHBvaW50ZXIgbWFuaXB1bGF0aW9uLlxuXG5Ob3csIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5Li4uIExldCdzIGNoZWNrOlxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkOiBOby5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlczogTm8sIGBjaC1cdTAwM2VsZW5ndGhgIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlIGluY29taW5nIG5ldHdvcmsgZGF0YS5cbjMuICBBbGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI6IE5vLlxuNC4gIEJvdW5kcyBjaGVja3MvbGVuZ3RocyBsZWFkaW5nIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZSBhY2Nlc3M6IE5vLCBhcyBpbmNvbWluZyBza2JzIGhhdmUgaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSBuZXR3b3JrIC8gc2tiIGFsbG9jYXRpb25zLlxuXG5UaGVyZWZvcmUsIHRoaXMgaXNuJ3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBwcm9ibGVtIGFkZHJlc3NlZCBpcyBhIG1lbW9yeSBzYWZldHkgaXNzdWUuIFRoZSBwYXRjaCBwcmV2ZW50cyB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YTsgaXQncyBhICpyZXN1bHQqIG9mIG1hbGZvcm1lZCBuZXR3b3JrIGRhdGEuIEl0IHByZXZlbnRzIHBvdGVudGlhbGx5IHJlYWRpbmcgZGF0YSAqb3V0c2lkZSogb2Ygd2hhdCB0aGUgU0tCIGNvbnRhaW5zLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCB0byBjYXRjaCB0aGlzIGFzIGl0IGNvdmVycyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAvIHNrYiBwb2ludGVyIGNvcnJ1cHRpb24sIHdoaWNoIGFyZSB0aGUgbWFpbiByaXNrcyBmcm9tIHRoaXMgYnVnLlxuXG5LTVNBTiBpc24ndCByZWxldmFudCBoZXJlLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBsZWFrIGFueSB0byB1c2VyIHNwYWNlLiBUaGVyZSdzIG5vIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gYGNvcHlfdG9fdXNlcmAsIG5vIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgb3RoZXIgS01TQU4gcmVsZXZhbnQgaXNzdWVzLiBUaGUgcGF0Y2ggc2ltcGx5IHZhbGlkYXRlcyB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhbiBpbnB1dCB2YWxpZGF0aW9uOiBgaWYgKHVubGlrZWx5KG50b2hzKGNoLVx1MDAzZWxlbmd0aCkgXHUwMDNjIHNpemVvZigqY2gpKSlgLiBUaGlzIHByZXZlbnRzIHRoZSBiYWQgc2NlbmFyaW8gZGVzY3JpYmVkIGVhcmxpZXIuIFRoaXMgaXMgYSB2ZXJ5IHN0YW5kYXJkIGFuZCBuZWNlc3NhcnkgY2hlY2suXG5cblNvLCBpbiBjb25jbHVzaW9uLCBOZWVkc0tNU0FOID0gZmFsc2UuIFRoaXMgaXMgYSBjbGFzc2ljIEtBU0FOIHNpdHVhdGlvbiwgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLlxuXG5MZXQncyBub3cgY2xlYXJseSBjb250cmFzdCBLQVNBTiB2cyBLTVNBTiB0byBqdXN0aWZ5IHRoaXMuIFRoaXMgZml4IGFkZHJlc3NlcyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Nlcy9za2IgcG9pbnRlciBjb3JydXB0aW9uIGZyb20gbWFsZm9ybWVkIHBhY2tldHMsIHNxdWFyZWx5IGluIEtBU0FOJ3MgZG9tYWluLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnZvbHZlZCBvciBleHBvc2VkLCBzbyBubyBLTVNBTiBpcyBuZWVkZWQuIFRoaXMgaXMgYSBib3VuZHMgY2hlY2suXG5gYGBjcHBcbnNldC1yZXN1bHRzXG5gYGBcblxuXG4iLCJJbnB1dFRva2VucyI6NTY5NCwiT3V0cHV0VG9rZW5zIjoyMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1NTo0My4yODEwNDkzODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBzY3RwX2lucV9wb3AoKWAgZm9yIGluY29taW5nIFNDVFAgY2h1bmtzIHdpdGggYW4gaW52YWxpZCBsZW5ndGggc21hbGxlciB0aGFuIHRoZSBTQ1RQIGNodW5rIGhlYWRlciAoYHNpemVvZigqY2gpYCkuIFByZXZpb3VzbHksIGEgY2h1bmsgbGVuZ3RoIFxcdTAwM2MgNCBjb3VsZCBjYXVzZSBgY2h1bmstXFx1MDAzZWNodW5rX2VuZGAgdG8gcHJlY2VkZSBgY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlZGF0YWAsIGxlYWRpbmcgdG8gYSBuZWdhdGl2ZSBgc2tiX3B1bGwoKWAgb2Zmc2V0IGFuZCBza2IgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggcGFja2V0IGNodW5rcy5cXG5cXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWRkcmVzc2VzIHBhY2tldCB2YWxpZGF0aW9uIGFuZCBib3VuZHMgY2hlY2tpbmcgb24gaW5jb21pbmcgbmV0d29yayBza2IgZGF0YS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBpcyBkZXRlY3RlZCBieSBLQVNBTiBhbmQga2VybmVsIGFzc2VydGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBuZXcgc3RydWN0IGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBzY3RwX2lucV9wb3AoKWAgZm9yIGluY29taW5nIFNDVFAgY2h1bmtzIHdpdGggYW4gaW52YWxpZCBsZW5ndGggc21hbGxlciB0aGFuIHRoZSBTQ1RQIGNodW5rIGhlYWRlciAoYHNpemVvZigqY2gpYCkuIFByZXZpb3VzbHksIGEgY2h1bmsgbGVuZ3RoIFxcdTAwM2MgNCBjb3VsZCBjYXVzZSBgY2h1bmstXFx1MDAzZWNodW5rX2VuZGAgdG8gcHJlY2VkZSBgY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlZGF0YWAsIGxlYWRpbmcgdG8gYSBuZWdhdGl2ZSBgc2tiX3B1bGwoKWAgb2Zmc2V0IGFuZCBza2IgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggcGFja2V0IGNodW5rcy5cXG5cXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWRkcmVzc2VzIHBhY2tldCB2YWxpZGF0aW9uIGFuZCBib3VuZHMgY2hlY2tpbmcgb24gaW5jb21pbmcgbmV0d29yayBza2IgZGF0YS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBpcyBkZXRlY3RlZCBieSBLQVNBTiBhbmQga2VybmVsIGFzc2VydGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBuZXcgc3RydWN0IGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbptc6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 21:49:23 +0000 UTC FinishedAt: 2026-08-27 21:55:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "f967455fb2a5a2079b9eb5823e9ccf359174bf9f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP", "INET" ], "series_id": "06fa49bd-e47e-4dd8-b175-0a3987c7a7ee" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_inq_pop" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfaW5xX3BvcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBzY3RwX2lucV9wb3AoKWAgZm9yIGluY29taW5nIFNDVFAgY2h1bmtzIHdpdGggYW4gaW52YWxpZCBsZW5ndGggc21hbGxlciB0aGFuIHRoZSBTQ1RQIGNodW5rIGhlYWRlciAoYHNpemVvZigqY2gpYCkuIFByZXZpb3VzbHksIGEgY2h1bmsgbGVuZ3RoIFx1MDAzYyA0IGNvdWxkIGNhdXNlIGBjaHVuay1cdTAwM2VjaHVua19lbmRgIHRvIHByZWNlZGUgYGNodW5rLVx1MDAzZXNrYi1cdTAwM2VkYXRhYCwgbGVhZGluZyB0byBhIG5lZ2F0aXZlIGBza2JfcHVsbCgpYCBvZmZzZXQgYW5kIHNrYiBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCBwYWNrZXQgY2h1bmtzLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWRkcmVzc2VzIHBhY2tldCB2YWxpZGF0aW9uIGFuZCBib3VuZHMgY2hlY2tpbmcgb24gaW5jb21pbmcgbmV0d29yayBza2IgZGF0YS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBpcyBkZXRlY3RlZCBieSBLQVNBTiBhbmQga2VybmVsIGFzc2VydGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBuZXcgc3RydWN0IGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBjaHVuayBsZW5ndGggdmFsaWRhdGlvbiBpbiB0aGUgU0NUUCBpbnB1dCBxdWV1ZSBwcm9jZXNzb3IgKHNjdHBfaW5xX3BvcCkgdG8gZGlzY2FyZCBjaHVua3Mgd2hlbiB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aCBmaWVsZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGhlYWRlciBzaXplLCBwcmV2ZW50aW5nIG1hbGZvcm1lZCBjaHVua3MgZnJvbSBwcm9jZWVkaW5nLiBUaGlzIGFmZmVjdHMgY29yZSBTQ1RQIHBhY2tldCBwYXJzaW5nIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyZGUzNTc4YmQ5MGQwM2RiZDYxZDNkZDA0Yzg1ZDE1MTM2NjI1Y2QzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMjE6NTE6MjAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaW5xdWV1ZS5jIGIvbmV0L3NjdHAvaW5xdWV1ZS5jXG5pbmRleCA1Zjk4OGIzYTg4MTRmLi5kNjY2Y2VjNmIxOTRlIDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvaW5xdWV1ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9pbnF1ZXVlLmNcbkBAIC0yMTIsOCAmIzQzOzIxMiwxMCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9pbnFfcG9wKHN0cnVjdCBzY3RwX2lucSAqcXVldWUpXG4gXHRjaHVuay1cdTAwM2VjaHVua19lbmQgPSAoKF9fdTggKiljaCkgJiM0MzsgU0NUUF9QQUQ0KG50b2hzKGNoLVx1MDAzZWxlbmd0aCkpO1xuIFx0c2tiX3B1bGwoY2h1bmstXHUwMDNlc2tiLCBzaXplb2YoKmNoKSk7XG4gXHRjaHVuay1cdTAwM2VzdWJoLnYgPSBOVUxMOyAvKiBTdWJoZWFkZXIgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgKi9cbi1cbi1cdGlmIChjaHVuay1cdTAwM2VjaHVua19lbmQgJiM0Mzsgc2l6ZW9mKCpjaCkgXHUwMDNjPSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYikpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkobnRvaHMoY2gtXHUwMDNlbGVuZ3RoKSBcdTAwM2Mgc2l6ZW9mKCpjaCkpKSB7XG4mIzQzO1x0XHRjaHVuay1cdTAwM2VwZGlzY2FyZCA9IDE7XG4mIzQzO1x0fSBlbHNlIGlmIChjaHVuay1cdTAwM2VjaHVua19lbmQgJiM0Mzsgc2l6ZW9mKCpjaCkgXHUwMDNjPVxuJiM0MztcdFx0ICAgc2tiX3RhaWxfcG9pbnRlcihjaHVuay1cdTAwM2Vza2IpKSB7XG4gXHRcdC8qIFRoaXMgaXMgbm90IGEgc2luZ2xldG9uICovXG4gXHRcdGNodW5rLVx1MDAzZXNpbmdsZXRvbiA9IDA7XG4gXHR9IGVsc2UgaWYgKGNodW5rLVx1MDAzZWNodW5rX2VuZCBcdTAwM2Ugc2tiX3RhaWxfcG9pbnRlcihjaHVuay1cdTAwM2Vza2IpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF9pbnFfcG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGNodW5rIGxlbmd0aCB2YWxpZGF0aW9uIGluIHRoZSBTQ1RQIGlucHV0IHF1ZXVlIHByb2Nlc3NvciAoc2N0cF9pbnFfcG9wKSB0byBkaXNjYXJkIGNodW5rcyB3aGVuIHRoZSBjaHVuayBoZWFkZXIgbGVuZ3RoIGZpZWxkIGlzIHNtYWxsZXIgdGhhbiB0aGUgaGVhZGVyIHNpemUsIHByZXZlbnRpbmcgbWFsZm9ybWVkIGNodW5rcyBmcm9tIHByb2NlZWRpbmcuIFRoaXMgYWZmZWN0cyBjb3JlIFNDVFAgcGFja2V0IHBhcnNpbmcgYW5kIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJkZTM1NzhiZDkwZDAzZGJkNjFkM2RkMDRjODVkMTUxMzY2MjVjZDMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAyMTo1MToyMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lucXVldWUuYyBiL25ldC9zY3RwL2lucXVldWUuYwppbmRleCA1Zjk4OGIzYTg4MTRmLi5kNjY2Y2VjNmIxOTRlIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9pbnF1ZXVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvaW5xdWV1ZS5jCkBAIC0yMTIsOCAmIzQzOzIxMiwxMCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9pbnFfcG9wKHN0cnVjdCBzY3RwX2lucSAqcXVldWUpCiAJY2h1bmstJmd0O2NodW5rX2VuZCA9ICgoX191OCAqKWNoKSAmIzQzOyBTQ1RQX1BBRDQobnRvaHMoY2gtJmd0O2xlbmd0aCkpOwogCXNrYl9wdWxsKGNodW5rLSZndDtza2IsIHNpemVvZigqY2gpKTsKIAljaHVuay0mZ3Q7c3ViaC52ID0gTlVMTDsgLyogU3ViaGVhZGVyIGlzIG5vIGxvbmdlciB2YWxpZC4gICovCi0KLQlpZiAoY2h1bmstJmd0O2NodW5rX2VuZCAmIzQzOyBzaXplb2YoKmNoKSAmbHQ7PSBza2JfdGFpbF9wb2ludGVyKGNodW5rLSZndDtza2IpKSB7CiYjNDM7CWlmICh1bmxpa2VseShudG9ocyhjaC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZigqY2gpKSkgewomIzQzOwkJY2h1bmstJmd0O3BkaXNjYXJkID0gMTsKJiM0MzsJfSBlbHNlIGlmIChjaHVuay0mZ3Q7Y2h1bmtfZW5kICYjNDM7IHNpemVvZigqY2gpICZsdDs9CiYjNDM7CQkgICBza2JfdGFpbF9wb2ludGVyKGNodW5rLSZndDtza2IpKSB7CiAJCS8qIFRoaXMgaXMgbm90IGEgc2luZ2xldG9uICovCiAJCWNodW5rLSZndDtzaW5nbGV0b24gPSAwOwogCX0gZWxzZSBpZiAoY2h1bmstJmd0O2NodW5rX2VuZCAmZ3Q7IHNrYl90YWlsX3BvaW50ZXIoY2h1bmstJmd0O3NrYikpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxNwoJCQkJCQkJb3V0cHV0OiAxMDUKCQkJCQkJCXRob3VnaHRzOiAzNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgU0NUUCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGdpdmVuIGEgcGF0Y2ggdG8gZXhhbWluZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGUgYHNjdHBfaW5xX3BvcGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvc2N0cC9pbnF1ZXVlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbi4gVGhlIGNoYW5nZXMgc2VlbSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgdGhvcm91Z2hseS4KCkxldCBtZSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGRpZmYuIEl0IHNlZW1zIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIGBudG9ocyhjaC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZigqY2gpYC4gVGhpcyBpcyBjbGVhcmx5IGEgdmFsaWRpdHkgY2hlY2sgb24gdGhlIGNodW5rIGxlbmd0aCwgbGlrZWx5IHRvIGhhbmRsZSBwb3RlbnRpYWwgY29ycnVwdGlvbiBvciBtYWxmb3JtZWQgcGFja2V0cy4gVGhlIHBhdGNoIHNldHMgYGNodW5rLSZndDtwZGlzY2FyZCA9IDE7YCBpZiB0aGUgbGVuZ3RoIGlzIGludmFsaWQuIFRoZSBvdGhlciBgaWZgIGNvbmRpdGlvbiBjaGVja3MgaWYgdGhlIGNodW5rIGlzIG5vdCBhIHNpbmdsZXRvbiwgYW5kIHRoZSBsYXN0IGBlbHNlIGlmYCBjb25kaXRpb24gaXMgYWxzbyBjaGVja2luZyB2YWxpZGl0eS4KCk5vdywgSSBuZWVkIG1vcmUgY29udGV4dC4gSSBoYXZlIHRvIHZlcmlmeSB0aGUgcGF0Y2gmIzM5O3MgY29ycmVjdG5lc3MgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoZWNrIGlzIGJlaW5nIGFkZGVkLiBJJiMzOTtsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2l0aGluIGBzY3RwX2lucV9wb3BgIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaHVuayBsZW5ndGggaXMgdXNlZCBhbmQgd2hhdCB0aGlzIG5ldyBjaGVjayBndWFyZHMgYWdhaW5zdC4gSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSBjYWxsZXJzIGFuZCB0aGUgZXhwb3J0ZWQgc3ltYm9scyB0byBnYXVnZSB0aGUgaW1wYWN0LgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBTQ1RQIHRvIGVuc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgY29tcGF0aWJpbGl0eSBpc3N1ZXMgb3IgY29uZmxpY3RzIHdpdGggdmFyaW91cyBjb25maWd1cmF0aW9ucy4KClRpbWUgdG8gcHVsbCBvdXQgdGhlIHRvb2xzLiBJJiMzOTtsbCBuZWVkIHRvIHJ1biBzb21lIHN0YXRpYyBhbmFseXNpcyB0byBsb29rIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIGludHJvZHVjZWQgb3IgcmVzb2x2ZWQgYW5kIGFsc28gdG8gY2hlY2sgYWxsIHVzZXMgb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCB0byBlbnN1cmUgY29uc2lzdGVuY3kuIEEgcXVpY2sgY2hlY2sgd2l0aCBgc3BhcnNlYCBvciBzaW1pbGFyIHRvb2xzLCBhbmQgbWF5YmUgZXZlbiBhIHF1aWNrIHJ1biB3aXRoIGEgZnV6emVyIG9uIHRoZSBhZmZlY3RlZCBhcmVhLCBpcyB3YXJyYW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9pbnF1ZXVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0XHRcdFx0XHRnb3RvIG5leHRfY2h1bms7XG4gMTgxOlx0XHRcdFx0XHR9XG4gMTgyOlx0XHRcdFx0XHRjaHVuay1cdTAwM2Vza2IgPSBza2Jfc2hpbmZvKGNodW5rLVx1MDAzZXNrYiktXHUwMDNlZnJhZ19saXN0O1xuIDE4MzpcdFx0XHRcdH1cbiAxODQ6XHRcdFx0fVxuIDE4NTpcdFxuIDE4NjpcdFx0XHRpZiAoY2h1bmstXHUwMDNlYXNvYylcbiAxODc6XHRcdFx0XHRzb2NrX3Jwc19zYXZlX3J4aGFzaChjaHVuay1cdTAwM2Vhc29jLVx1MDAzZWJhc2Uuc2ssIGNodW5rLVx1MDAzZXNrYik7XG4gMTg4Olx0XG4gMTg5Olx0XHRcdHF1ZXVlLVx1MDAzZWluX3Byb2dyZXNzID0gY2h1bms7XG4gMTkwOlx0XG4gMTkxOlx0bmV3X3NrYjpcbiAxOTI6XHRcdFx0LyogVGhpcyBpcyB0aGUgZmlyc3QgY2h1bmsgaW4gdGhlIHBhY2tldC4gICovXG4gMTkzOlx0XHRcdGNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopY2h1bmstXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG4gMTk0Olx0XHRcdGNodW5rLVx1MDAzZXNpbmdsZXRvbiA9IDE7XG4gMTk1Olx0XHRcdGNodW5rLVx1MDAzZWRhdGFfYWNjZXB0ZWQgPSAwO1xuIDE5NjpcdFx0XHRjaHVuay1cdTAwM2VwZGlzY2FyZCA9IDA7XG4gMTk3Olx0XHRcdGNodW5rLVx1MDAzZWF1dGggPSAwO1xuIDE5ODpcdFx0XHRjaHVuay1cdTAwM2VoYXNfYXNjb25mID0gMDtcbiAxOTk6XHRcdFx0Y2h1bmstXHUwMDNlZW5kX29mX3BhY2tldCA9IDA7XG4gMjAwOlx0XHRcdGlmIChjaHVuay1cdTAwM2VoZWFkX3NrYikge1xuIDIwMTpcdFx0XHRcdHN0cnVjdCBzY3RwX2lucHV0X2NiXG4gMjAyOlx0XHRcdFx0XHQqY2IgPSBTQ1RQX0lOUFVUX0NCKGNodW5rLVx1MDAzZXNrYiksXG4gMjAzOlx0XHRcdFx0XHQqaGVhZF9jYiA9IFNDVFBfSU5QVVRfQ0IoY2h1bmstXHUwMDNlaGVhZF9za2IpO1xuIDIwNDpcdFxuIDIwNTpcdFx0XHRcdGNiLVx1MDAzZWNodW5rID0gaGVhZF9jYi1cdTAwM2VjaHVuaztcbiAyMDY6XHRcdFx0XHRjYi1cdTAwM2VhZiA9IGhlYWRfY2ItXHUwMDNlYWY7XG4gMjA3Olx0XHRcdFx0Y2ItXHUwMDNlZW5jYXBfcG9ydCA9IGhlYWRfY2ItXHUwMDNlZW5jYXBfcG9ydDtcbiAyMDg6XHRcdFx0fVxuIDIwOTpcdFx0fVxuIDIxMDpcdFxuIDIxMTpcdFx0Y2h1bmstXHUwMDNlY2h1bmtfaGRyID0gY2g7XG4gMjEyOlx0XHRjaHVuay1cdTAwM2VjaHVua19lbmQgPSAoKF9fdTggKiljaCkgJiM0MzsgU0NUUF9QQUQ0KG50b2hzKGNoLVx1MDAzZWxlbmd0aCkpO1xuIDIxMzpcdFx0c2tiX3B1bGwoY2h1bmstXHUwMDNlc2tiLCBzaXplb2YoKmNoKSk7XG4gMjE0Olx0XHRjaHVuay1cdTAwM2VzdWJoLnYgPSBOVUxMOyAvKiBTdWJoZWFkZXIgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgKi9cbiAyMTU6XHRcdGlmICh1bmxpa2VseShudG9ocyhjaC1cdTAwM2VsZW5ndGgpIFx1MDAzYyBzaXplb2YoKmNoKSkpIHtcbiAyMTY6XHRcdFx0Y2h1bmstXHUwMDNlcGRpc2NhcmQgPSAxO1xuIDIxNzpcdFx0fSBlbHNlIGlmIChjaHVuay1cdTAwM2VjaHVua19lbmQgJiM0Mzsgc2l6ZW9mKCpjaCkgXHUwMDNjPVxuIDIxODpcdFx0XHQgICBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYikpIHtcbiAyMTk6XHRcdFx0LyogVGhpcyBpcyBub3QgYSBzaW5nbGV0b24gKi9cbiAyMjA6XHRcdFx0Y2h1bmstXHUwMDNlc2luZ2xldG9uID0gMDtcbiAyMjE6XHRcdH0gZWxzZSBpZiAoY2h1bmstXHUwMDNlY2h1bmtfZW5kIFx1MDAzZSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYikpIHtcbiAyMjI6XHRcdFx0LyogRGlzY2FyZCBpbnNpZGUgc3RhdGUgbWFjaGluZS4gKi9cbiAyMjM6XHRcdFx0Y2h1bmstXHUwMDNlcGRpc2NhcmQgPSAxO1xuIDIyNDpcdFx0XHRjaHVuay1cdTAwM2VjaHVua19lbmQgPSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYik7XG4gMjI1Olx0XHR9IGVsc2Uge1xuIDIyNjpcdFx0XHQvKiBXZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgcGFja2V0LCBzbyBtYXJrIHRoZSBjaHVua1xuIDIyNzpcdFx0XHQgKiBpbiBjYXNlIHdlIG5lZWQgdG8gc2VuZCBhIFNBQ0suXG4gMjI4Olx0XHRcdCAqL1xuIDIyOTpcdFx0XHRjaHVuay1cdTAwM2VlbmRfb2ZfcGFja2V0ID0gMTtcbiAyMzA6XHRcdH1cbiAyMzE6XHRcbiAyMzI6XHRcdHByX2RlYnVnKFwmIzM0OyYjNDM7JiM0MzsmIzQzO3NjdHBfaW5xX3BvcCYjNDM7JiM0MzsmIzQzOyBjaHVuazolcFslc10sIGxlbmd0aDolZCwgc2tiLVx1MDAzZWxlbjolZFxcblwmIzM0OyxcbiAyMzM6XHRcdFx0IGNodW5rLCBzY3RwX2NuYW1lKFNDVFBfU1RfQ0hVTksoY2h1bmstXHUwMDNlY2h1bmtfaGRyLVx1MDAzZXR5cGUpKSxcbiAyMzQ6XHRcdFx0IG50b2hzKGNodW5rLVx1MDAzZWNodW5rX2hkci1cdTAwM2VsZW5ndGgpLCBjaHVuay1cdTAwM2Vza2ItXHUwMDNlbGVuKTtcbiAyMzU6XHRcbiAyMzY6XHRcdHJldHVybiBjaHVuaztcbiAyMzc6XHR9XG4gMjM4Olx0XG4gMjM5Olx0LyogU2V0IGEgdG9wLWhhbGYgaGFuZGxlci5cbiAyNDA6XHQgKlxuIDI0MTpcdCAqIE9yaWdpbmFsbHksIHdlIHRoZSB0b3AtaGFsZiBoYW5kbGVyIHdhcyBzY2hlZHVsZWQgYXMgYSBCSC4gIFdlIG5vd1xuIDI0MjpcdCAqIGNhbGwgdGhlIGhhbmRsZXIgZGlyZWN0bHkgaW4gc2N0cF9pbnFfcHVzaCgpIGF0IGEgdGltZSB0aGF0XG4gMjQzOlx0ICogd2Uga25vdyB3ZSBhcmUgbG9jayBzYWZlLlxuIDI0NDpcdCAqIFRoZSBpbnRlbnQgaXMgdGhhdCB0aGlzIHJvdXRpbmUgd2lsbCBwdWxsIHN0dWZmIG91dCBvZiB0aGVcbiAyNDU6XHQgKiBpbnF1ZXVlIGFuZCBwcm9jZXNzIGl0LlxuIDI0NjpcdCAqL1xuIDI0NzpcdHZvaWQgc2N0cF9pbnFfc2V0X3RoX2hhbmRsZXIoc3RydWN0IHNjdHBfaW5xICpxLCB3b3JrX2Z1bmNfdCBjYWxsYmFjaylcbiAyNDg6XHR7XG4gMjQ5Olx0XHRJTklUX1dPUksoXHUwMDI2cS1cdTAwM2VpbW1lZGlhdGUsIGNhbGxiYWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX2lucV9wb3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9hc3NvY2lvbGEuYz05NzE9c3RhdGljIHZvaWQgc2N0cF9hc3NvY19iaF9yY3Yoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTk4OS1cdHNjdHBfYXNzb2NpYXRpb25faG9sZChhc29jKTtcbm5ldC9zY3RwL2Fzc29jaW9sYS5jOjk5MDpcdHdoaWxlIChOVUxMICE9IChjaHVuayA9IHNjdHBfaW5xX3BvcChpbnF1ZXVlKSkpIHtcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTk5MS1cdFx0c3RhdGUgPSBhc29jLVx1MDAzZXN0YXRlO1xuLS1cbm5ldC9zY3RwL2VuZHBvaW50b2xhLmM9MzI2PXN0YXRpYyB2b2lkIHNjdHBfZW5kcG9pbnRfYmhfcmN2KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvc2N0cC9lbmRwb2ludG9sYS5jLTM0OS1cbm5ldC9zY3RwL2VuZHBvaW50b2xhLmM6MzUwOlx0d2hpbGUgKE5VTEwgIT0gKGNodW5rID0gc2N0cF9pbnFfcG9wKGlucXVldWUpKSkge1xubmV0L3NjdHAvZW5kcG9pbnRvbGEuYy0zNTEtXHRcdHN1YnR5cGUgPSBTQ1RQX1NUX0NIVU5LKGNodW5rLVx1MDAzZWNodW5rX2hkci1cdTAwM2V0eXBlKTtcbi0tXG5uZXQvc2N0cC9pbnF1ZXVlLmM9OTU9c3RydWN0IHNjdHBfY2h1bmtoZHIgKnNjdHBfaW5xX3BlZWsoc3RydWN0IHNjdHBfaW5xICpxdWV1ZSlcbi0tXG5uZXQvc2N0cC9pbnF1ZXVlLmMtMTE3LSAqL1xubmV0L3NjdHAvaW5xdWV1ZS5jOjExODpzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9pbnFfcG9wKHN0cnVjdCBzY3RwX2lucSAqcXVldWUpXG5uZXQvc2N0cC9pbnF1ZXVlLmMtMTE5LXtcbi0tXG5uZXQvc2N0cC9pbnF1ZXVlLmMtMjMxLVxubmV0L3NjdHAvaW5xdWV1ZS5jOjIzMjpcdHByX2RlYnVnKFwmIzM0OyYjNDM7JiM0MzsmIzQzO3NjdHBfaW5xX3BvcCYjNDM7JiM0MzsmIzQzOyBjaHVuazolcFslc10sIGxlbmd0aDolZCwgc2tiLVx1MDAzZWxlbjolZFxcblwmIzM0Oyxcbm5ldC9zY3RwL2lucXVldWUuYy0yMzMtXHRcdCBjaHVuaywgc2N0cF9jbmFtZShTQ1RQX1NUX0NIVU5LKGNodW5rLVx1MDAzZWNodW5rX2hkci1cdTAwM2V0eXBlKSksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgU0NUUCBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgSVBfU0NUUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIFNDVFAgUHJvdG9jb2xcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gIDExOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAxMjpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTM6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2xcbiAgMTY6XHRcbiAgMTc6XHRcdCAgRnJvbSBSRkMgMjk2MCBcdTAwM2NodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTYwLnR4dFx1MDAzZS5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgXCYjMzQ7U0NUUCBpcyBhIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2NvbCBvcGVyYXRpbmcgb24gdG9wIG9mIGFcbiAgMjA6XHRcdCAgY29ubmVjdGlvbmxlc3MgcGFja2V0IG5ldHdvcmsgc3VjaCBhcyBJUC4gIEl0IG9mZmVycyB0aGUgZm9sbG93aW5nXG4gIDIxOlx0XHQgIHNlcnZpY2VzIHRvIGl0cyB1c2VyczpcbiAgMjI6XHRcbiAgMjM6XHRcdCAgLS0gYWNrbm93bGVkZ2VkIGVycm9yLWZyZWUgbm9uLWR1cGxpY2F0ZWQgdHJhbnNmZXIgb2YgdXNlciBkYXRhLFxuICAyNDpcdFx0ICAtLSBkYXRhIGZyYWdtZW50YXRpb24gdG8gY29uZm9ybSB0byBkaXNjb3ZlcmVkIHBhdGggTVRVIHNpemUsXG4gIDI1Olx0XHQgIC0tIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiB1c2VyIG1lc3NhZ2VzIHdpdGhpbiBtdWx0aXBsZSBzdHJlYW1zLFxuICAyNjpcdFx0ICB3aXRoIGFuIG9wdGlvbiBmb3Igb3JkZXItb2YtYXJyaXZhbCBkZWxpdmVyeSBvZiBpbmRpdmlkdWFsIHVzZXJcbiAgMjc6XHRcdCAgbWVzc2FnZXMsXG4gIDI4Olx0XHQgIC0tIG9wdGlvbmFsIGJ1bmRsaW5nIG9mIG11bHRpcGxlIHVzZXIgbWVzc2FnZXMgaW50byBhIHNpbmdsZSBTQ1RQXG4gIDI5Olx0XHQgIHBhY2tldCwgYW5kXG4gIDMwOlx0XHQgIC0tIG5ldHdvcmstbGV2ZWwgZmF1bHQgdG9sZXJhbmNlIHRocm91Z2ggc3VwcG9ydGluZyBvZiBtdWx0aS1cbiAgMzE6XHRcdCAgaG9taW5nIGF0IGVpdGhlciBvciBib3RoIGVuZHMgb2YgYW4gYXNzb2NpYXRpb24uXCYjMzQ7XG4gIDMyOlx0XG4gIDMzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBwcm90b2NvbCBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjdHAuIERlYnVnIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGJ5IHRoZVxuICAzNTpcdFx0ICBrZXJuZWwmIzM5O3MgZHluYW1pYyBkZWJ1Z2dpbmcgZnJhbWV3b3JrLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gIDM4Olx0XG4gIDM5Olx0aWYgSVBfU0NUUFxuICA0MDpcdFxuICA0MTpcdGNvbmZpZyBTQ1RQX0RCR19PQkpDTlRcbiAgNDI6XHRcdGJvb2wgXCYjMzQ7U0NUUDogRGVidWcgb2JqZWN0IGNvdW50c1wmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDQ0Olx0XHRoZWxwXG4gIDQ1Olx0XHQgIElmIHlvdSBzYXkgWSwgdGhpcyB3aWxsIGVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydCBmb3IgY291bnRpbmcgdGhlXG4gIDQ2Olx0XHQgIHR5cGUgb2Ygb2JqZWN0cyB0aGF0IGFyZSBjdXJyZW50bHkgYWxsb2NhdGVkLiAgVGhpcyBpcyB1c2VmdWwgZm9yXG4gIDQ3Olx0XHQgIGlkZW50aWZ5aW5nIG1lbW9yeSBsZWFrcy4gVGhpcyBkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYmUgdmlld2VkIGJ5XG4gIDQ4Olx0XHQgICYjMzk7Y2F0IC9wcm9jL25ldC9zY3RwL3NjdHBfZGJnX29iamNudCYjMzk7XG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDE3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0NUUCBDaHVuayBQcm9jZXNzaW5nIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHNjdHBfaW5xX3BvcGAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0JiMzOTtzIGNoYW5nZWQuIE15IGluaXRpYWwgY29uY2VybiBpcyB3aXRoIGhvdyB0aGUgY29kZSBoYW5kbGVzIGludmFsaWQgY2h1bmsgbGVuZ3Rocywgc3BlY2lmaWNhbGx5IHdoZW4gYG50b2hzKGNoLSZndDtsZW5ndGgpYCBpcyBsZXNzIHRoYW4gYHNpemVvZigqY2gpYC4gUHJldmlvdXNseSwgaXQgc2VlbXMgdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGBjaHVua19lbmRgIHBvaW50aW5nIG91dHNpZGUgdGhlIGV4cGVjdGVkIG1lbW9yeSByZWdpb24sIGVpdGhlciBiZWZvcmUgdGhlIGNodW5rIGhlYWRlciBvciB0aHJvdWdoIGFuIHVuZGVyZmxvdywgcmVzdWx0aW5nIGluIG1hbGZvcm1lZCBjaHVuayBoYW5kbGluZyBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgdnVsbmVyYWJpbGl0eSEKCk5vdywgdGhlIGZpeCBsZXZlcmFnZXMgdGhlIGB1bmxpa2VseSgpYCBtYWNybyBhbmQgc2V0cyBgY2h1bmstJmd0O3BkaXNjYXJkID0gMWAgaWYgYG50b2hzKGNoLSZndDtsZW5ndGgpYCBpcyBpbmRlZWQgbGVzcyB0aGFuIGBzaXplb2YoKmNoKWAuIFRoaXMgc2VlbXMgbGlrZSBhIGJldHRlciBhcHByb2FjaCAtIGV4cGxpY2l0bHkgbWFya2luZyB0aGUgY2h1bmsgZm9yIGRpc2NhcmQgcHJldmVudHMgZnVydGhlciBwcm9jZXNzaW5nIG9mIGdhcmJhZ2UgZGF0YS4KCmBzY3RwX2lucV9wb3BgIHJlc2lkZXMgaW4gYG5ldC9zY3RwL2lucXVldWUuY2AsIGFuZCBJIHNob3VsZCBjb25maXJtIGlmIGl0JiMzOTtzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBzaW5jZSBpdHMgaW50ZXJmYWNlIGNvdWxkIGluZmx1ZW5jZSBob3cgaXQgaXMgY2FsbGVkIGFuZCB1c2VkLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L3NjdHAvTWFrZWZpbGVgIG9yIHJlbGV2YW50IGhlYWRlciBkZWNsYXJhdGlvbnMgZm9yIHRoYXQuIExldCYjMzk7cyBzZWUuLi4gTGluZSAxMTg6IGBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9pbnFfcG9wKHN0cnVjdCBzY3RwX2lucSAqcXVldWUpYC4gT2theSwgdGhhdCBnaXZlcyBtZSB0aGUgc2lnbmF0dXJlLCBidXQgSSBuZWVkIHRvIGtub3cgaWYgaXQmIzM5O3MgZXh0ZXJuYWxseSB2aXNpYmxlIG9yIG9ubHkgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZS4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjdHBfaW5xX3BvcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oPTEwNDI9dm9pZCBzY3RwX2lucV9wdXNoKHN0cnVjdCBzY3RwX2lucSAqLCBzdHJ1Y3Qgc2N0cF9jaHVuayAqcGFja2V0KTtcbmluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oOjEwNDM6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfaW5xX3BvcChzdHJ1Y3Qgc2N0cF9pbnEgKik7XG5pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaC0xMDQ0LXN0cnVjdCBzY3RwX2NodW5raGRyICpzY3RwX2lucV9wZWVrKHN0cnVjdCBzY3RwX2lucSAqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTQ1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50IGRvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3Mgb2YgYGlucXVldWUub2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBpbnF1ZXVlLm9gIGlzIGJlaW5nIGNvbXBpbGVkLiBJdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIHdpdGhpbiB0aGUgU0NUUCBzdGFjaywgYW5kIEkgd2FudCB0byBkb3VibGUtY2hlY2sgaXRzIGJ1aWxkIHByb2Nlc3MuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvc2N0cC9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGZvciB0aGUgU0NUUCBtb2R1bGUgc2hvdWxkIHJlc2lkZS4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIHNlZSB3aGF0IHRoZSBtYWtlZmlsZSByZXZlYWxzIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMsIGNvbXBpbGVyIGZsYWdzLCBhbmQgbGlua2luZyBwcm9jZWR1cmUgZm9yIGBpbnF1ZXVlLm9gLiBUaGlzIHdpbGwgaGVscCBtZSBjb25maXJtIG15IGFzc3VtcHRpb25zIGFib3V0IGl0cyBpbnRlZ3JhdGlvbiBhbmQgcG90ZW50aWFsIG9wdGltaXphdGlvbiBwb2ludHMgd2l0aGluIHRoZSBsYXJnZXIgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBTQ1RQIHN1cHBvcnQgY29kZS5cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0lQX1NDVFApICYjNDM7PSBzY3RwLm9cbiAgIDc6XHRvYmotJChDT05GSUdfSU5FVF9TQ1RQX0RJQUcpICYjNDM7PSBzY3RwX2RpYWcub1xuICAgODpcdFxuICAgOTpcdHNjdHAteSA6PSBzbV9zdGF0ZXRhYmxlLm8gc21fc3RhdGVmdW5zLm8gc21fc2lkZWVmZmVjdC5vIFxcXG4gIDEwOlx0XHQgIHByb3RvY29sLm8gZW5kcG9pbnRvbGEubyBhc3NvY2lvbGEubyBcXFxuICAxMTpcdFx0ICB0cmFuc3BvcnQubyBjaHVuay5vIHNtX21ha2VfY2h1bmsubyB1bHBldmVudC5vIFxcXG4gIDEyOlx0XHQgIGlucXVldWUubyBvdXRxdWV1ZS5vIHVscHF1ZXVlLm8gXFxcbiAgMTM6XHRcdCAgdHNubWFwLm8gYmluZF9hZGRyLm8gc29ja2V0Lm8gcHJpbWl0aXZlLm8gXFxcbiAgMTQ6XHRcdCAgb3V0cHV0Lm8gaW5wdXQubyBkZWJ1Zy5vIHN0cmVhbS5vIGF1dGgubyBcXFxuICAxNTpcdFx0ICBvZmZsb2FkLm8gc3RyZWFtX3NjaGVkLm8gc3RyZWFtX3NjaGVkX3ByaW8ubyBcXFxuICAxNjpcdFx0ICBzdHJlYW1fc2NoZWRfcnIubyBzdHJlYW1fc2NoZWRfZmMubyBcXFxuICAxNzpcdFx0ICBzdHJlYW1faW50ZXJsZWF2ZS5vXG4gIDE4Olx0XG4gIDE5Olx0c2N0cF9kaWFnLXkgOj0gZGlhZy5vXG4gIDIwOlx0XG4gIDIxOlx0c2N0cC0kKENPTkZJR19TQ1RQX0RCR19PQkpDTlQpICYjNDM7PSBvYmpjbnQub1xuICAyMjpcdHNjdHAtJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xuICAyMzpcdHNjdHAtJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsLm9cbiAgMjQ6XHRcbiAgMjU6XHRzY3RwLSQoc3Vic3QgbSx5LCQoQ09ORklHX0lQVjYpKVx0JiM0Mzs9IGlwdjYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODA1CgkJCQkJCQlvdXRwdXQ6IDExMwoJCQkJCQkJdGhvdWdodHM6IDM5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBgQ09ORklHX0lQX1NDVFBgIGFuZCBgc2N0cF9pbnFfcG9wYCoqCgpPa2F5LCBzbyBgQ09ORklHX0lQX1NDVFBgIGRpcmVjdGx5IGxlYWRzIHRvIHRoZSBjb21waWxhdGlvbiBvZiBgc2N0cC5vYCwgd2hpY2ggaW5jbHVkZXMgYGlucXVldWUub2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIGdhaW4gYSBicm9hZGVyIHBpY3R1cmUuIGBtZW51Y29uZmlnIElQX1NDVFBgIGRlcGVuZHMgb24gYElORVRgLCB3aGljaCBpcyBhIHByZXR0eSBzdGFuZGFyZCwgZm91bmRhdGlvbmFsIGNvbmZpZ3VyYXRpb24uCgpJcyB0aGlzIGEgZnV6emluZyB0YXJnZXQ/IEFic29sdXRlbHkhIFRoaXMgaXMgcHJpbWUgcmVhbCBlc3RhdGUg4oCTIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IFNDVFAgcGFja2V0IHBhcnNpbmcgYW5kIGlucXVldWUgcHJvY2Vzc2luZy4gU3BlY2lmaWNhbGx5LCB0aGUgaGFuZGxpbmcgb2YgY2h1bmtzIHdpdGggcG90ZW50aWFsbHkgaW52YWxpZCBsZW5ndGhzIOKAkyB1bmRlcnNpemVkIGNodW5rcyB3aGVyZSBgY2gtJmd0O2xlbmd0aGAgaXMgbGVzcyB0aGFuIGBzaXplb2YoKmNoKWAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHNvdXJjZSBvZiB2dWxuZXJhYmlsaXRpZXMuIEl0JiMzOTtzIGFsc28gcGFydCBvZiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLiBUaGluayBzdGFuZGFyZCBuZXR3b3JraW5nIGFjY2VzczogU0NUUCBzb2NrZXRzLCByYXcgcGFja2V0cywgU3l6a2FsbGVyIFNDVFAgc3lzY2FsbHMsIG5ldHdvcmsgZGV2aWNlIFJYLiBUaGlzIGlzIGFsbCB2ZXJ5IHJlYWNoYWJsZS4gVGhpcyB2dWxuZXJhYmlsaXR5IHRhcmdldHMgaG93IGBzY3RwX2lucV9wb3BgIGV4ZWN1dGVzIGl0cyBsb2dpYy4KCk5vdywgbGV0JiMzOTtzIGV4YW1pbmUgdGhlIGZvY3VzIHN5bWJvbC4gYHNjdHBfaW5xX3BvcGAgaXMgYSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZnVuY3Rpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBJdCB0YWtlcyBhIGBzdHJ1Y3Qgc2N0cF9pbnEgKnF1ZXVlYCBhbmQgcmV0dXJucyBhIGBzdHJ1Y3Qgc2N0cF9jaHVuayAqYC4gSSBhbHNvIG5vdGUgdGhlIGNhbGxlcnMgYW5kIHJlbGF0ZWQgZW50cnlwb2ludHMuIExvb2tzIGxpa2Ugd2UgaGF2ZSBgc2N0cF9hc3NvY19iaF9yY3ZgLCBgc2N0cF9lbmRwb2ludF9iaF9yY3ZgLCBhbmQgZXZlbiBgc2N0cF9pbnFfcG9wYCBpdHNlbGYuIFNvLCBgc2N0cF9pbnFfcG9wYCBpdHNlbGYgaXMgdGhlIHByZWNpc2UgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQuIEl0JiMzOTtzIGFuIGV4Y2VsbGVudCBmb2N1cyBzeW1ib2wuCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uczogYElQX1NDVFBgIGFuZCwgb2YgY291cnNlLCBgSU5FVGAuCgpBbHJpZ2h0LCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHN1bW1hcml6ZToKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gdGhpcyBpcyBhIHNvbGlkIHRhcmdldC4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbJiMzNDtzY3RwX2lucV9wb3AmIzM0O11gIC0gdGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgbWF0dGVyLgoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtJUF9TQ1RQJiMzNDssICYjMzQ7SU5FVCYjMzQ7XWAgLSBvdXIgcmVxdWlyZWQgYnVpbGRpbmcgYmxvY2tzLgoqICAgKipSZWFzb25pbmc6KiogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyB2ZXJkaWN0IGlzIHdoYXQgaXQgaXMuCgpUaW1lIHRvIG1ha2UgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfaW5xX3BvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBjaHVuayBsZW5ndGggdmFsaWRhdGlvbiBpbiB0aGUgU0NUUCBpbnB1dCBxdWV1ZSBwcm9jZXNzb3IgKHNjdHBfaW5xX3BvcCkgdG8gZGlzY2FyZCBjaHVua3Mgd2hlbiB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aCBmaWVsZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGhlYWRlciBzaXplLCBwcmV2ZW50aW5nIG1hbGZvcm1lZCBjaHVua3MgZnJvbSBwcm9jZWVkaW5nLiBUaGlzIGFmZmVjdHMgY29yZSBTQ1RQIHBhY2tldCBwYXJzaW5nIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfaW5xX3BvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBjaHVuayBsZW5ndGggdmFsaWRhdGlvbiBpbiB0aGUgU0NUUCBpbnB1dCBxdWV1ZSBwcm9jZXNzb3IgKHNjdHBfaW5xX3BvcCkgdG8gZGlzY2FyZCBjaHVua3Mgd2hlbiB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aCBmaWVsZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGhlYWRlciBzaXplLCBwcmV2ZW50aW5nIG1hbGZvcm1lZCBjaHVua3MgZnJvbSBwcm9jZWVkaW5nLiBUaGlzIGFmZmVjdHMgY29yZSBTQ1RQIHBhY2tldCBwYXJzaW5nIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjUzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc2N0cF9pbnFfcG9wKClgIGZvciBpbmNvbWluZyBTQ1RQIGNodW5rcyB3aXRoIGFuIGludmFsaWQgbGVuZ3RoIHNtYWxsZXIgdGhhbiB0aGUgU0NUUCBjaHVuayBoZWFkZXIgKGBzaXplb2YoKmNoKWApLiBQcmV2aW91c2x5LCBhIGNodW5rIGxlbmd0aCBcdTAwM2MgNCBjb3VsZCBjYXVzZSBgY2h1bmstXHUwMDNlY2h1bmtfZW5kYCB0byBwcmVjZWRlIGBjaHVuay1cdTAwM2Vza2ItXHUwMDNlZGF0YWAsIGxlYWRpbmcgdG8gYSBuZWdhdGl2ZSBgc2tiX3B1bGwoKWAgb2Zmc2V0IGFuZCBza2IgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggcGFja2V0IGNodW5rcy5cblxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFkZHJlc3NlcyBwYWNrZXQgdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIG5ldHdvcmsgc2tiIGRhdGEuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYXJpc2luZyBmcm9tIHRoaXMgbG9naWMgaXMgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIGtlcm5lbCBhc3NlcnRpb25zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbmV3IHN0cnVjdCBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmRlMzU3OGJkOTBkMDNkYmQ2MWQzZGQwNGM4NWQxNTEzNjYyNWNkMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDIxOjUxOjIwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaW5xdWV1ZS5jIGIvbmV0L3NjdHAvaW5xdWV1ZS5jCmluZGV4IDVmOTg4YjNhODgxNGYuLmQ2NjZjZWM2YjE5NGUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lucXVldWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9pbnF1ZXVlLmMKQEAgLTIxMiw4ICYjNDM7MjEyLDEwIEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX2lucV9wb3Aoc3RydWN0IHNjdHBfaW5xICpxdWV1ZSkKIAljaHVuay0mZ3Q7Y2h1bmtfZW5kID0gKChfX3U4ICopY2gpICYjNDM7IFNDVFBfUEFENChudG9ocyhjaC0mZ3Q7bGVuZ3RoKSk7CiAJc2tiX3B1bGwoY2h1bmstJmd0O3NrYiwgc2l6ZW9mKCpjaCkpOwogCWNodW5rLSZndDtzdWJoLnYgPSBOVUxMOyAvKiBTdWJoZWFkZXIgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgKi8KLQotCWlmIChjaHVuay0mZ3Q7Y2h1bmtfZW5kICYjNDM7IHNpemVvZigqY2gpICZsdDs9IHNrYl90YWlsX3BvaW50ZXIoY2h1bmstJmd0O3NrYikpIHsKJiM0MzsJaWYgKHVubGlrZWx5KG50b2hzKGNoLSZndDtsZW5ndGgpICZsdDsgc2l6ZW9mKCpjaCkpKSB7CiYjNDM7CQljaHVuay0mZ3Q7cGRpc2NhcmQgPSAxOwomIzQzOwl9IGVsc2UgaWYgKGNodW5rLSZndDtjaHVua19lbmQgJiM0Mzsgc2l6ZW9mKCpjaCkgJmx0Oz0KJiM0MzsJCSAgIHNrYl90YWlsX3BvaW50ZXIoY2h1bmstJmd0O3NrYikpIHsKIAkJLyogVGhpcyBpcyBub3QgYSBzaW5nbGV0b24gKi8KIAkJY2h1bmstJmd0O3NpbmdsZXRvbiA9IDA7CiAJfSBlbHNlIGlmIChjaHVuay0mZ3Q7Y2h1bmtfZW5kICZndDsgc2tiX3RhaWxfcG9pbnRlcihjaHVuay0mZ3Q7c2tiKSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFzc2Vzc21lbnQgb2YgdGhlIHNpdHVhdGlvbjoKCioqS01TQU4gRnV6emluZyBTZXNzaW9uIEV2YWx1YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBpcyBzaWduaWZpY2FudCBlbm91Z2ggdG8gd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBkcmlsbCBkb3duIGludG8gdGhlIGNvZGUuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gYG5ldC9zY3RwL2lucXVldWUuY2AsIGFuZCBtb3JlIHNwZWNpZmljYWxseSwgdGhlIGFyZWEgYXJvdW5kIGxpbmUgMjEyLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcgb2YgdGhlIGNvZGUgaW4gdGhhdCBhcmVhIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIHBhdGNoJiMzOTtzIGNoYW5nZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBCYXNlZCBvbiB0aGlzIGluc3BlY3Rpb24sIEkgY2FuIG1ha2UgYW4gaW5mb3JtZWQgZGVjaXNpb24gYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3QgYW5kIHZ1bG5lcmFiaWxpdHkgc3VyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMjE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2N0cC9pbnF1ZXVlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0XHRcdFx0XHRnb3RvIG5leHRfY2h1bms7XG4gMTgxOlx0XHRcdFx0XHR9XG4gMTgyOlx0XHRcdFx0XHRjaHVuay1cdTAwM2Vza2IgPSBza2Jfc2hpbmZvKGNodW5rLVx1MDAzZXNrYiktXHUwMDNlZnJhZ19saXN0O1xuIDE4MzpcdFx0XHRcdH1cbiAxODQ6XHRcdFx0fVxuIDE4NTpcdFxuIDE4NjpcdFx0XHRpZiAoY2h1bmstXHUwMDNlYXNvYylcbiAxODc6XHRcdFx0XHRzb2NrX3Jwc19zYXZlX3J4aGFzaChjaHVuay1cdTAwM2Vhc29jLVx1MDAzZWJhc2Uuc2ssIGNodW5rLVx1MDAzZXNrYik7XG4gMTg4Olx0XG4gMTg5Olx0XHRcdHF1ZXVlLVx1MDAzZWluX3Byb2dyZXNzID0gY2h1bms7XG4gMTkwOlx0XG4gMTkxOlx0bmV3X3NrYjpcbiAxOTI6XHRcdFx0LyogVGhpcyBpcyB0aGUgZmlyc3QgY2h1bmsgaW4gdGhlIHBhY2tldC4gICovXG4gMTkzOlx0XHRcdGNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopY2h1bmstXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG4gMTk0Olx0XHRcdGNodW5rLVx1MDAzZXNpbmdsZXRvbiA9IDE7XG4gMTk1Olx0XHRcdGNodW5rLVx1MDAzZWRhdGFfYWNjZXB0ZWQgPSAwO1xuIDE5NjpcdFx0XHRjaHVuay1cdTAwM2VwZGlzY2FyZCA9IDA7XG4gMTk3Olx0XHRcdGNodW5rLVx1MDAzZWF1dGggPSAwO1xuIDE5ODpcdFx0XHRjaHVuay1cdTAwM2VoYXNfYXNjb25mID0gMDtcbiAxOTk6XHRcdFx0Y2h1bmstXHUwMDNlZW5kX29mX3BhY2tldCA9IDA7XG4gMjAwOlx0XHRcdGlmIChjaHVuay1cdTAwM2VoZWFkX3NrYikge1xuIDIwMTpcdFx0XHRcdHN0cnVjdCBzY3RwX2lucHV0X2NiXG4gMjAyOlx0XHRcdFx0XHQqY2IgPSBTQ1RQX0lOUFVUX0NCKGNodW5rLVx1MDAzZXNrYiksXG4gMjAzOlx0XHRcdFx0XHQqaGVhZF9jYiA9IFNDVFBfSU5QVVRfQ0IoY2h1bmstXHUwMDNlaGVhZF9za2IpO1xuIDIwNDpcdFxuIDIwNTpcdFx0XHRcdGNiLVx1MDAzZWNodW5rID0gaGVhZF9jYi1cdTAwM2VjaHVuaztcbiAyMDY6XHRcdFx0XHRjYi1cdTAwM2VhZiA9IGhlYWRfY2ItXHUwMDNlYWY7XG4gMjA3Olx0XHRcdFx0Y2ItXHUwMDNlZW5jYXBfcG9ydCA9IGhlYWRfY2ItXHUwMDNlZW5jYXBfcG9ydDtcbiAyMDg6XHRcdFx0fVxuIDIwOTpcdFx0fVxuIDIxMDpcdFxuIDIxMTpcdFx0Y2h1bmstXHUwMDNlY2h1bmtfaGRyID0gY2g7XG4gMjEyOlx0XHRjaHVuay1cdTAwM2VjaHVua19lbmQgPSAoKF9fdTggKiljaCkgJiM0MzsgU0NUUF9QQUQ0KG50b2hzKGNoLVx1MDAzZWxlbmd0aCkpO1xuIDIxMzpcdFx0c2tiX3B1bGwoY2h1bmstXHUwMDNlc2tiLCBzaXplb2YoKmNoKSk7XG4gMjE0Olx0XHRjaHVuay1cdTAwM2VzdWJoLnYgPSBOVUxMOyAvKiBTdWJoZWFkZXIgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgKi9cbiAyMTU6XHRcdGlmICh1bmxpa2VseShudG9ocyhjaC1cdTAwM2VsZW5ndGgpIFx1MDAzYyBzaXplb2YoKmNoKSkpIHtcbiAyMTY6XHRcdFx0Y2h1bmstXHUwMDNlcGRpc2NhcmQgPSAxO1xuIDIxNzpcdFx0fSBlbHNlIGlmIChjaHVuay1cdTAwM2VjaHVua19lbmQgJiM0Mzsgc2l6ZW9mKCpjaCkgXHUwMDNjPVxuIDIxODpcdFx0XHQgICBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYikpIHtcbiAyMTk6XHRcdFx0LyogVGhpcyBpcyBub3QgYSBzaW5nbGV0b24gKi9cbiAyMjA6XHRcdFx0Y2h1bmstXHUwMDNlc2luZ2xldG9uID0gMDtcbiAyMjE6XHRcdH0gZWxzZSBpZiAoY2h1bmstXHUwMDNlY2h1bmtfZW5kIFx1MDAzZSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYikpIHtcbiAyMjI6XHRcdFx0LyogRGlzY2FyZCBpbnNpZGUgc3RhdGUgbWFjaGluZS4gKi9cbiAyMjM6XHRcdFx0Y2h1bmstXHUwMDNlcGRpc2NhcmQgPSAxO1xuIDIyNDpcdFx0XHRjaHVuay1cdTAwM2VjaHVua19lbmQgPSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYik7XG4gMjI1Olx0XHR9IGVsc2Uge1xuIDIyNjpcdFx0XHQvKiBXZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgcGFja2V0LCBzbyBtYXJrIHRoZSBjaHVua1xuIDIyNzpcdFx0XHQgKiBpbiBjYXNlIHdlIG5lZWQgdG8gc2VuZCBhIFNBQ0suXG4gMjI4Olx0XHRcdCAqL1xuIDIyOTpcdFx0XHRjaHVuay1cdTAwM2VlbmRfb2ZfcGFja2V0ID0gMTtcbiAyMzA6XHRcdH1cbiAyMzE6XHRcbiAyMzI6XHRcdHByX2RlYnVnKFwmIzM0OyYjNDM7JiM0MzsmIzQzO3NjdHBfaW5xX3BvcCYjNDM7JiM0MzsmIzQzOyBjaHVuazolcFslc10sIGxlbmd0aDolZCwgc2tiLVx1MDAzZWxlbjolZFxcblwmIzM0OyxcbiAyMzM6XHRcdFx0IGNodW5rLCBzY3RwX2NuYW1lKFNDVFBfU1RfQ0hVTksoY2h1bmstXHUwMDNlY2h1bmtfaGRyLVx1MDAzZXR5cGUpKSxcbiAyMzQ6XHRcdFx0IG50b2hzKGNodW5rLVx1MDAzZWNodW5rX2hkci1cdTAwM2VsZW5ndGgpLCBjaHVuay1cdTAwM2Vza2ItXHUwMDNlbGVuKTtcbiAyMzU6XHRcbiAyMzY6XHRcdHJldHVybiBjaHVuaztcbiAyMzc6XHR9XG4gMjM4Olx0XG4gMjM5Olx0LyogU2V0IGEgdG9wLWhhbGYgaGFuZGxlci5cbiAyNDA6XHQgKlxuIDI0MTpcdCAqIE9yaWdpbmFsbHksIHdlIHRoZSB0b3AtaGFsZiBoYW5kbGVyIHdhcyBzY2hlZHVsZWQgYXMgYSBCSC4gIFdlIG5vd1xuIDI0MjpcdCAqIGNhbGwgdGhlIGhhbmRsZXIgZGlyZWN0bHkgaW4gc2N0cF9pbnFfcHVzaCgpIGF0IGEgdGltZSB0aGF0XG4gMjQzOlx0ICogd2Uga25vdyB3ZSBhcmUgbG9jayBzYWZlLlxuIDI0NDpcdCAqIFRoZSBpbnRlbnQgaXMgdGhhdCB0aGlzIHJvdXRpbmUgd2lsbCBwdWxsIHN0dWZmIG91dCBvZiB0aGVcbiAyNDU6XHQgKiBpbnF1ZXVlIGFuZCBwcm9jZXNzIGl0LlxuIDI0NjpcdCAqL1xuIDI0NzpcdHZvaWQgc2N0cF9pbnFfc2V0X3RoX2hhbmRsZXIoc3RydWN0IHNjdHBfaW5xICpxLCB3b3JrX2Z1bmNfdCBjYWxsYmFjaylcbiAyNDg6XHR7XG4gMjQ5Olx0XHRJTklUX1dPUksoXHUwMDI2cS1cdTAwM2VpbW1lZGlhdGUsIGNhbGxiYWNrKTtcbiAyNTA6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2NTQKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTQ1RQIENodW5rIFBvcHBpbmcgTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBzY3RwX2lucV9wb3BgIGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgaXQgaGFuZGxlcyBjaHVuayBib3VuZGFyaWVzLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLCBhcyBhbnkgbWlzaW50ZXJwcmV0YXRpb24gY291bGQgbGVhZCB0byBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IGZsYXdzIGluIHRoZSBkYXRhIHByb2Nlc3NpbmcuCgpUaGUgY29kZSYjMzk7cyBpbml0aWFsIHNldHVwIGdyYWJzIHRoZSBjaHVuayBoZWFkZXIsIHdoaWNoIGlzIHRoZW4gdXNlZCB0byBjYWxjdWxhdGUgYGNodW5rLSZndDtjaHVua19lbmRgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMuIFNwZWNpZmljYWxseSwgdGhlIHNuaXBwZXQgSSYjMzk7bSBmb2N1c2VkIG9uIGNoZWNrcyBpZiBhIGNodW5rIGlzIGNvbXBsZXRlIHdpdGhpbiB0aGUgU0tCJiMzOTtzIGN1cnJlbnQgZGF0YSBidWZmZXIuIEl0JiMzOTtzIGNydWNpYWwgZm9yIGVmZmljaWVudGx5IGlkZW50aWZ5aW5nIHdoZW4gd2UgaGF2ZSBhIGZ1bGwgY2h1bmsgdG8gd29yayB3aXRoLgoKVGhlIGNhbGN1bGF0aW9uIG9mIGBjaHVuay0mZ3Q7Y2h1bmtfZW5kYCBsb29rcyBzdHJhaWdodGZvcndhcmQgdXNpbmcgYFNDVFBfUEFENGAgYW5kIGBudG9ocyhjaC0mZ3Q7bGVuZ3RoKWAuIEhvd2V2ZXIsIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIGlzc3VlIGlmIHRoZSByZXBvcnRlZCBjaHVuayBsZW5ndGggaXMgc21hbGxlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBjaHVuayBoZWFkZXIgaXRzZWxmLiBUaGlzIGlzIG15IGtleSBjb25jZXJuLiBJZiBgbnRvaHMoY2gtJmd0O2xlbmd0aClgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKCpjaClgICh3aGljaCBpcyA0IGluIG91ciBjYXNlLCBjb25zaWRlcmluZyBTQ1RQX1BBRDQpLCBgY2h1bmtfZW5kYCBjb3VsZCBlbmQgdXAgcG9zaXRpb25lZCBiZWZvcmUgdGhlIGV4cGVjdGVkIGRhdGEuCgpJJiMzOTttIHN0YXJ0aW5nIHRvIHNlZSBpdCEgQWZ0ZXIgdGhlIGBza2JfcHVsbGAgb3BlcmF0aW9uLCB3aGljaCBzaGlmdHMgdGhlIGBza2ItJmd0O2RhdGFgIHBvaW50ZXIsIHRoZSBjcnVjaWFsIGNvbXBhcmlzb24gYGNodW5rX2VuZCAmIzQzOyBzaXplb2YoKmNoKSAmbHQ7PSBza2JfdGFpbF9wb2ludGVyKGNodW5rLSZndDtza2IpYCBjb3VsZCBtaXN0YWtlbmx5IGV2YWx1YXRlIHRvIHRydWUuIFdoeT8gQmVjYXVzZSBpZiB0aGUgZGVjbGFyZWQgY2h1bmsgbGVuZ3RoIGlzIHNtYWxsIChlLmcuLCB6ZXJvKSwgYGNodW5rX2VuZGAgd2lsbCBwb2ludCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBoZWFkZXIuIEFmdGVyIHRoZSBgc2tiX3B1bGxgLCBgY2h1bmtfZW5kICYjNDM7IHNpemVvZigqY2gpYCB3b3VsZCBwb2ludCB0byB0aGUgbmV3IGBza2ItJmd0O2RhdGFgIHBvaW50ZXIgKmJlZm9yZSogdGhlIGNoZWNrISBUaGlzIG1lYW5zIGEgc2VlbWluZ2x5IGluY29tcGxldGUgY2h1bmsgKGFjY29yZGluZyB0byB0aGUgb3JpZ2luYWwgbGVuZ3RoKSBtaWdodCBiZSB3cm9uZ2x5IHRyZWF0ZWQgYXMgYSBjb21wbGV0ZSBjaHVuayBhbmQgaXMgbm90IGRpc2NhcmRlZC4gVGhpcyBzZWVtcyBsaWtlIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgaXRlcmF0aW9uIHdvcmtzIGluIGBzY3RwX2lucV9wb3BgIHRvIHNlZSB0aGUgZWZmZWN0IG9uIHRoZSBuZXh0IHByb2Nlc3Npbmcgc3RlcC4gVGltZSB0byBjaGVjayBsaW5lcyAxMzAgdGhyb3VnaCAxOTAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjdHAvaW5xdWV1ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMzA6XHRcdFx0ICogQW55IHBvc3QgcHJvY2Vzc2luZyB3b3JrIHRvIGRvIGJlZm9yZSB3ZSBtb3ZlIG9uP1xuIDEzMTpcdFx0XHQgKi9cbiAxMzI6XHRcdFx0aWYgKGNodW5rLVx1MDAzZXNpbmdsZXRvbiB8fFxuIDEzMzpcdFx0XHQgICAgY2h1bmstXHUwMDNlZW5kX29mX3BhY2tldCB8fFxuIDEzNDpcdFx0XHQgICAgY2h1bmstXHUwMDNlcGRpc2NhcmQpIHtcbiAxMzU6XHRcdFx0XHRpZiAoY2h1bmstXHUwMDNlaGVhZF9za2IgPT0gY2h1bmstXHUwMDNlc2tiKSB7XG4gMTM2Olx0XHRcdFx0XHRjaHVuay1cdTAwM2Vza2IgPSBza2Jfc2hpbmZvKGNodW5rLVx1MDAzZXNrYiktXHUwMDNlZnJhZ19saXN0O1xuIDEzNzpcdFx0XHRcdFx0Z290byBuZXdfc2tiO1xuIDEzODpcdFx0XHRcdH1cbiAxMzk6XHRcdFx0XHRpZiAoY2h1bmstXHUwMDNlc2tiLVx1MDAzZW5leHQpIHtcbiAxNDA6XHRcdFx0XHRcdGNodW5rLVx1MDAzZXNrYiA9IGNodW5rLVx1MDAzZXNrYi1cdTAwM2VuZXh0O1xuIDE0MTpcdFx0XHRcdFx0Z290byBuZXdfc2tiO1xuIDE0MjpcdFx0XHRcdH1cbiAxNDM6XHRcbiAxNDQ6XHRcdFx0XHRzY3RwX2lucV9jaHVua19mcmVlKGNodW5rKTtcbiAxNDU6XHRcdFx0XHRjaHVuayA9IHF1ZXVlLVx1MDAzZWluX3Byb2dyZXNzID0gTlVMTDtcbiAxNDY6XHRcdFx0fSBlbHNlIHtcbiAxNDc6XHRcdFx0XHQvKiBOb3RoaW5nIHRvIGRvLiBOZXh0IGNodW5rIGluIHRoZSBwYWNrZXQsIHBsZWFzZS4gKi9cbiAxNDg6XHRcdFx0XHRjaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKWNodW5rLVx1MDAzZWNodW5rX2VuZDtcbiAxNDk6XHRcdFx0XHQvKiBGb3JjZSBjaHVuay1cdTAwM2Vza2ItXHUwMDNlZGF0YSB0byBjaHVuay1cdTAwM2VjaHVua19lbmQuICAqL1xuIDE1MDpcdFx0XHRcdHNrYl9wdWxsKGNodW5rLVx1MDAzZXNrYiwgY2h1bmstXHUwMDNlY2h1bmtfZW5kIC0gY2h1bmstXHUwMDNlc2tiLVx1MDAzZWRhdGEpO1xuIDE1MTpcdFx0XHRcdC8qIFdlIGFyZSBndWFyYW50ZWVkIHRvIHB1bGwgYSBTQ1RQIGhlYWRlci4gKi9cbiAxNTI6XHRcdFx0fVxuIDE1MzpcdFx0fVxuIDE1NDpcdFxuIDE1NTpcdFx0LyogRG8gd2UgbmVlZCB0byB0YWtlIHRoZSBuZXh0IHBhY2tldCBvdXQgb2YgdGhlIHF1ZXVlIHRvIHByb2Nlc3M/ICovXG4gMTU2Olx0XHRpZiAoIWNodW5rKSB7XG4gMTU3Olx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5O1xuIDE1ODpcdFxuIDE1OTpcdG5leHRfY2h1bms6XG4gMTYwOlx0XHRcdC8qIElzIHRoZSBxdWV1ZSBlbXB0eT8gICovXG4gMTYxOlx0XHRcdGVudHJ5ID0gc2N0cF9saXN0X2RlcXVldWUoXHUwMDI2cXVldWUtXHUwMDNlaW5fY2h1bmtfbGlzdCk7XG4gMTYyOlx0XHRcdGlmICghZW50cnkpXG4gMTYzOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gMTY0Olx0XG4gMTY1Olx0XHRcdGNodW5rID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHNjdHBfY2h1bmssIGxpc3QpO1xuIDE2NjpcdFxuIDE2NzpcdFx0XHRpZiAoc2tiX2lzX2dzbyhjaHVuay1cdTAwM2Vza2IpIFx1MDAyNlx1MDAyNiBza2JfaXNfZ3NvX3NjdHAoY2h1bmstXHUwMDNlc2tiKSkge1xuIDE2ODpcdFx0XHRcdC8qIEdTTy1tYXJrZWQgc2ticyBidXQgd2l0aG91dCBmcmFncywgaGFuZGxlXG4gMTY5Olx0XHRcdFx0ICogdGhlbSBub3JtYWxseVxuIDE3MDpcdFx0XHRcdCAqL1xuIDE3MTpcdFx0XHRcdGlmIChza2Jfc2hpbmZvKGNodW5rLVx1MDAzZXNrYiktXHUwMDNlZnJhZ19saXN0KVxuIDE3MjpcdFx0XHRcdFx0Y2h1bmstXHUwMDNlaGVhZF9za2IgPSBjaHVuay1cdTAwM2Vza2I7XG4gMTczOlx0XG4gMTc0Olx0XHRcdFx0Lyogc2ticyB3aXRoIFwmIzM0O2NvdmVyIGxldHRlclwmIzM0OyAqL1xuIDE3NTpcdFx0XHRcdGlmIChjaHVuay1cdTAwM2VoZWFkX3NrYiBcdTAwMjZcdTAwMjYgY2h1bmstXHUwMDNlc2tiLVx1MDAzZWRhdGFfbGVuID09IGNodW5rLVx1MDAzZXNrYi1cdTAwM2VsZW4pIHtcbiAxNzY6XHRcdFx0XHRcdGlmIChXQVJOX09OKCFza2Jfc2hpbmZvKGNodW5rLVx1MDAzZXNrYiktXHUwMDNlZnJhZ19saXN0KSkge1xuIDE3NzpcdFx0XHRcdFx0XHRfX1NDVFBfSU5DX1NUQVRTKGRldl9uZXQoY2h1bmstXHUwMDNlc2tiLVx1MDAzZWRldiksXG4gMTc4Olx0XHRcdFx0XHRcdFx0XHQgU0NUUF9NSUJfSU5fUEtUX0RJU0NBUkRTKTtcbiAxNzk6XHRcdFx0XHRcdFx0c2N0cF9jaHVua19mcmVlKGNodW5rKTtcbiAxODA6XHRcdFx0XHRcdFx0Z290byBuZXh0X2NodW5rO1xuIDE4MTpcdFx0XHRcdFx0fVxuIDE4MjpcdFx0XHRcdFx0Y2h1bmstXHUwMDNlc2tiID0gc2tiX3NoaW5mbyhjaHVuay1cdTAwM2Vza2IpLVx1MDAzZWZyYWdfbGlzdDtcbiAxODM6XHRcdFx0XHR9XG4gMTg0Olx0XHRcdH1cbiAxODU6XHRcbiAxODY6XHRcdFx0aWYgKGNodW5rLVx1MDAzZWFzb2MpXG4gMTg3Olx0XHRcdFx0c29ja19ycHNfc2F2ZV9yeGhhc2goY2h1bmstXHUwMDNlYXNvYy1cdTAwM2ViYXNlLnNrLCBjaHVuay1cdTAwM2Vza2IpO1xuIDE4ODpcdFxuIDE4OTpcdFx0XHRxdWV1ZS1cdTAwM2Vpbl9wcm9ncmVzcyA9IGNodW5rO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAyMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njk0CgkJCQkJCQlvdXRwdXQ6IDIwMQoJCQkJCQkJdGhvdWdodHM6IDkxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBTQ1RQIENodW5rIEhlYWRlciBWYWxpZGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIExpbmUgMTQ4LTE1MCBjYXVnaHQgbXkgYXR0ZW50aW9uIGJlY2F1c2UgdGhlIHNjZW5hcmlvIGRlc2NyaWJlZCDigJMgd2hlcmUgYGNodW5rLSZndDtjaHVua19lbmRgIGNvdWxkIGVmZmVjdGl2ZWx5IGJlIGVhcmxpZXIgdGhhbiBgY2h1bmstJmd0O3NrYi0mZ3Q7ZGF0YWAsIGxlYWRpbmcgdG8gYSBuZWdhdGl2ZSBvZmZzZXQgaW4gYHNrYl9wdWxsYCDigJMgaW1tZWRpYXRlbHkgZmxhZ3MgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLiBJZiBgbnRvaHMoY2gtJmd0O2xlbmd0aClgIGlzIGxlc3MgdGhhbiBgc2l6ZW9mKCpjaClgLCB0aGF0IGlzLCBsZXNzIHRoYW4gNCBieXRlcywgYHNrYl9wdWxsYCB3aXRoIGEgbmVnYXRpdmUgbnVtYmVyIGlzIGEgcmVjaXBlIGZvciBkaXNhc3RlcjogZWl0aGVyIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhbiBpbmZpbml0ZSBsb29wLCBvciBzb21lIG90aGVyIHNlcmlvdXMgcHJvYmxlbS4KClNvLCB0aGlzIHBhdGNoIGZpeGVzIGFuIGltcG9ydGFudCBwYWNrZXQgdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIGJ1ZyBpbiBTQ1RQIHByb3RvY29sIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBhIHNpdHVhdGlvbiB3aGVyZSBhIG1hbGZvcm1lZCBuZXR3b3JrIHBhY2tldCAoaW52YWxpZCBjaHVuayBsZW5ndGgpIGxlYWRzIHRvIGJ1ZmZlciB1bmRlcmZsb3cuIFRoZSBrZXkgZml4IGlzIHNldHRpbmcgYGNodW5rLSZndDtwZGlzY2FyZCA9IDFgIGlmIGBudG9ocyhjaC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZigqY2gpYCwgbWFya2luZyB0aGUgY2h1bmsgZm9yIGRpc2NhcmQgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHBvaW50ZXIgbWFuaXB1bGF0aW9uLgoKTm93LCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4uLiBMZXQmIzM5O3MgY2hlY2s6CjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZDogTm8uCjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlczogTm8sIGBjaC0mZ3Q7bGVuZ3RoYCBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSBpbmNvbWluZyBuZXR3b3JrIGRhdGEuCjMuICBBbGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI6IE5vLgo0LiAgQm91bmRzIGNoZWNrcy9sZW5ndGhzIGxlYWRpbmcgdG8gdW5pbml0aWFsaXplZCBieXRlIGFjY2VzczogTm8sIGFzIGluY29taW5nIHNrYnMgaGF2ZSBpbml0aWFsaXplZCBieXRlcyBmcm9tIG5ldHdvcmsgLyBza2IgYWxsb2NhdGlvbnMuCgpUaGVyZWZvcmUsIHRoaXMgaXNuJiMzOTt0IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlLiBUaGUgcHJvYmxlbSBhZGRyZXNzZWQgaXMgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLiBUaGUgcGF0Y2ggcHJldmVudHMgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIGRhdGE7IGl0JiMzOTtzIGEgKnJlc3VsdCogb2YgbWFsZm9ybWVkIG5ldHdvcmsgZGF0YS4gSXQgcHJldmVudHMgcG90ZW50aWFsbHkgcmVhZGluZyBkYXRhICpvdXRzaWRlKiBvZiB3aGF0IHRoZSBTS0IgY29udGFpbnMuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIHRvIGNhdGNoIHRoaXMgYXMgaXQgY292ZXJzIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzIC8gc2tiIHBvaW50ZXIgY29ycnVwdGlvbiwgd2hpY2ggYXJlIHRoZSBtYWluIHJpc2tzIGZyb20gdGhpcyBidWcuCgpLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIGxlYWsgYW55IHRvIHVzZXIgc3BhY2UuIFRoZXJlJiMzOTtzIG5vIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gYGNvcHlfdG9fdXNlcmAsIG5vIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgb3RoZXIgS01TQU4gcmVsZXZhbnQgaXNzdWVzLiBUaGUgcGF0Y2ggc2ltcGx5IHZhbGlkYXRlcyB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aC4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgYW4gaW5wdXQgdmFsaWRhdGlvbjogYGlmICh1bmxpa2VseShudG9ocyhjaC0mZ3Q7bGVuZ3RoKSAmbHQ7IHNpemVvZigqY2gpKSlgLiBUaGlzIHByZXZlbnRzIHRoZSBiYWQgc2NlbmFyaW8gZGVzY3JpYmVkIGVhcmxpZXIuIFRoaXMgaXMgYSB2ZXJ5IHN0YW5kYXJkIGFuZCBuZWNlc3NhcnkgY2hlY2suCgpTbywgaW4gY29uY2x1c2lvbiwgTmVlZHNLTVNBTiA9IGZhbHNlLiBUaGlzIGlzIGEgY2xhc3NpYyBLQVNBTiBzaXR1YXRpb24sIGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4KCkxldCYjMzk7cyBub3cgY2xlYXJseSBjb250cmFzdCBLQVNBTiB2cyBLTVNBTiB0byBqdXN0aWZ5IHRoaXMuIFRoaXMgZml4IGFkZHJlc3NlcyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Nlcy9za2IgcG9pbnRlciBjb3JydXB0aW9uIGZyb20gbWFsZm9ybWVkIHBhY2tldHMsIHNxdWFyZWx5IGluIEtBU0FOJiMzOTtzIGRvbWFpbi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW52b2x2ZWQgb3IgZXhwb3NlZCwgc28gbm8gS01TQU4gaXMgbmVlZGVkLiBUaGlzIGlzIGEgYm91bmRzIGNoZWNrLgpgYGBjcHAKc2V0LXJlc3VsdHMKYGBgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDIxOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBzY3RwX2lucV9wb3AoKWAgZm9yIGluY29taW5nIFNDVFAgY2h1bmtzIHdpdGggYW4gaW52YWxpZCBsZW5ndGggc21hbGxlciB0aGFuIHRoZSBTQ1RQIGNodW5rIGhlYWRlciAoYHNpemVvZigqY2gpYCkuIFByZXZpb3VzbHksIGEgY2h1bmsgbGVuZ3RoIFx1MDAzYyA0IGNvdWxkIGNhdXNlIGBjaHVuay1cdTAwM2VjaHVua19lbmRgIHRvIHByZWNlZGUgYGNodW5rLVx1MDAzZXNrYi1cdTAwM2VkYXRhYCwgbGVhZGluZyB0byBhIG5lZ2F0aXZlIGBza2JfcHVsbCgpYCBvZmZzZXQgYW5kIHNrYiBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBpdGVyYXRpbmcgdGhyb3VnaCBwYWNrZXQgY2h1bmtzLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWRkcmVzc2VzIHBhY2tldCB2YWxpZGF0aW9uIGFuZCBib3VuZHMgY2hlY2tpbmcgb24gaW5jb21pbmcgbmV0d29yayBza2IgZGF0YS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBpcyBkZXRlY3RlZCBieSBLQVNBTiBhbmQga2VybmVsIGFzc2VydGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBuZXcgc3RydWN0IGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIHZhbGlkYXRpb24gY2hlY2sgaW4gYHNjdHBfaW5xX3BvcCgpYCBmb3IgaW5jb21pbmcgU0NUUCBjaHVua3Mgd2l0aCBhbiBpbnZhbGlkIGxlbmd0aCBzbWFsbGVyIHRoYW4gdGhlIFNDVFAgY2h1bmsgaGVhZGVyIChgc2l6ZW9mKCpjaClgKS4gUHJldmlvdXNseSwgYSBjaHVuayBsZW5ndGggXHUwMDNjIDQgY291bGQgY2F1c2UgYGNodW5rLVx1MDAzZWNodW5rX2VuZGAgdG8gcHJlY2VkZSBgY2h1bmstXHUwMDNlc2tiLVx1MDAzZWRhdGFgLCBsZWFkaW5nIHRvIGEgbmVnYXRpdmUgYHNrYl9wdWxsKClgIG9mZnNldCBhbmQgc2tiIGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHBhY2tldCBjaHVua3MuXG5cblRoaXMgY2hhbmdlIHB1cmVseSBhZGRyZXNzZXMgcGFja2V0IHZhbGlkYXRpb24gYW5kIGJvdW5kcyBjaGVja2luZyBvbiBpbmNvbWluZyBuZXR3b3JrIHNrYiBkYXRhLiBBbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzIGFyaXNpbmcgZnJvbSB0aGlzIGxvZ2ljIGlzIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBrZXJuZWwgYXNzZXJ0aW9ucy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIG5ldyBzdHJ1Y3QgYWxsb2NhdGlvbnMsIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUxOjIxLjA1MDM1ODcxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjIzMDcyMjMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9pbnFfcG9wXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc2N0cF9pbnFfcG9wKClgIGZvciBpbmNvbWluZyBTQ1RQIGNodW5rcyB3aXRoIGFuIGludmFsaWQgbGVuZ3RoIHNtYWxsZXIgdGhhbiB0aGUgU0NUUCBjaHVuayBoZWFkZXIgKGBzaXplb2YoKmNoKWApLiBQcmV2aW91c2x5LCBhIGNodW5rIGxlbmd0aCBcXHUwMDNjIDQgY291bGQgY2F1c2UgYGNodW5rLVxcdTAwM2VjaHVua19lbmRgIHRvIHByZWNlZGUgYGNodW5rLVxcdTAwM2Vza2ItXFx1MDAzZWRhdGFgLCBsZWFkaW5nIHRvIGEgbmVnYXRpdmUgYHNrYl9wdWxsKClgIG9mZnNldCBhbmQgc2tiIGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHBhY2tldCBjaHVua3MuXFxuXFxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFkZHJlc3NlcyBwYWNrZXQgdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIG5ldHdvcmsgc2tiIGRhdGEuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYXJpc2luZyBmcm9tIHRoaXMgbG9naWMgaXMgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIGtlcm5lbCBhc3NlcnRpb25zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbmV3IHN0cnVjdCBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBjaHVuayBsZW5ndGggdmFsaWRhdGlvbiBpbiB0aGUgU0NUUCBpbnB1dCBxdWV1ZSBwcm9jZXNzb3IgKHNjdHBfaW5xX3BvcCkgdG8gZGlzY2FyZCBjaHVua3Mgd2hlbiB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aCBmaWVsZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGhlYWRlciBzaXplLCBwcmV2ZW50aW5nIG1hbGZvcm1lZCBjaHVua3MgZnJvbSBwcm9jZWVkaW5nLiBUaGlzIGFmZmVjdHMgY29yZSBTQ1RQIHBhY2tldCBwYXJzaW5nIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUxOjIxLjA1MDM2Mzk3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQzODE2NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmRlMzU3OGJkOTBkMDNkYmQ2MWQzZGQwNGM4NWQxNTEzNjYyNWNkM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEF1ZyAyNyAyMTo1MToyMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pbnF1ZXVlLmMgYi9uZXQvc2N0cC9pbnF1ZXVlLmNcXG5pbmRleCA1Zjk4OGIzYTg4MTRmLi5kNjY2Y2VjNmIxOTRlIDEwMDY0NFxcbi0tLSBhL25ldC9zY3RwL2lucXVldWUuY1xcbisrKyBiL25ldC9zY3RwL2lucXVldWUuY1xcbkBAIC0yMTIsOCArMjEyLDEwIEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX2lucV9wb3Aoc3RydWN0IHNjdHBfaW5xICpxdWV1ZSlcXG4gXFx0Y2h1bmstXFx1MDAzZWNodW5rX2VuZCA9ICgoX191OCAqKWNoKSArIFNDVFBfUEFENChudG9ocyhjaC1cXHUwMDNlbGVuZ3RoKSk7XFxuIFxcdHNrYl9wdWxsKGNodW5rLVxcdTAwM2Vza2IsIHNpemVvZigqY2gpKTtcXG4gXFx0Y2h1bmstXFx1MDAzZXN1YmgudiA9IE5VTEw7IC8qIFN1YmhlYWRlciBpcyBubyBsb25nZXIgdmFsaWQuICAqL1xcbi1cXG4tXFx0aWYgKGNodW5rLVxcdTAwM2VjaHVua19lbmQgKyBzaXplb2YoKmNoKSBcXHUwMDNjPSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVxcdTAwM2Vza2IpKSB7XFxuK1xcdGlmICh1bmxpa2VseShudG9ocyhjaC1cXHUwMDNlbGVuZ3RoKSBcXHUwMDNjIHNpemVvZigqY2gpKSkge1xcbitcXHRcXHRjaHVuay1cXHUwMDNlcGRpc2NhcmQgPSAxO1xcbitcXHR9IGVsc2UgaWYgKGNodW5rLVxcdTAwM2VjaHVua19lbmQgKyBzaXplb2YoKmNoKSBcXHUwMDNjPVxcbitcXHRcXHQgICBza2JfdGFpbF9wb2ludGVyKGNodW5rLVxcdTAwM2Vza2IpKSB7XFxuIFxcdFxcdC8qIFRoaXMgaXMgbm90IGEgc2luZ2xldG9uICovXFxuIFxcdFxcdGNodW5rLVxcdTAwM2VzaW5nbGV0b24gPSAwO1xcbiBcXHR9IGVsc2UgaWYgKGNodW5rLVxcdTAwM2VjaHVua19lbmQgXFx1MDAzZSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVxcdTAwM2Vza2IpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUxOjIxLjM5NDg0MTY2M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI2OTA4ODM2NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX2lucV9wb3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBjaHVuayBsZW5ndGggdmFsaWRhdGlvbiBpbiB0aGUgU0NUUCBpbnB1dCBxdWV1ZSBwcm9jZXNzb3IgKHNjdHBfaW5xX3BvcCkgdG8gZGlzY2FyZCBjaHVua3Mgd2hlbiB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aCBmaWVsZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGhlYWRlciBzaXplLCBwcmV2ZW50aW5nIG1hbGZvcm1lZCBjaHVua3MgZnJvbSBwcm9jZWVkaW5nLiBUaGlzIGFmZmVjdHMgY29yZSBTQ1RQIHBhY2tldCBwYXJzaW5nIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJkZTM1NzhiZDkwZDAzZGJkNjFkM2RkMDRjODVkMTUxMzY2MjVjZDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAyMTo1MToyMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lucXVldWUuYyBiL25ldC9zY3RwL2lucXVldWUuY1xuaW5kZXggNWY5ODhiM2E4ODE0Zi4uZDY2NmNlYzZiMTk0ZSAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL2lucXVldWUuY1xuKysrIGIvbmV0L3NjdHAvaW5xdWV1ZS5jXG5AQCAtMjEyLDggKzIxMiwxMCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9pbnFfcG9wKHN0cnVjdCBzY3RwX2lucSAqcXVldWUpXG4gXHRjaHVuay1cdTAwM2VjaHVua19lbmQgPSAoKF9fdTggKiljaCkgKyBTQ1RQX1BBRDQobnRvaHMoY2gtXHUwMDNlbGVuZ3RoKSk7XG4gXHRza2JfcHVsbChjaHVuay1cdTAwM2Vza2IsIHNpemVvZigqY2gpKTtcbiBcdGNodW5rLVx1MDAzZXN1YmgudiA9IE5VTEw7IC8qIFN1YmhlYWRlciBpcyBubyBsb25nZXIgdmFsaWQuICAqL1xuLVxuLVx0aWYgKGNodW5rLVx1MDAzZWNodW5rX2VuZCArIHNpemVvZigqY2gpIFx1MDAzYz0gc2tiX3RhaWxfcG9pbnRlcihjaHVuay1cdTAwM2Vza2IpKSB7XG4rXHRpZiAodW5saWtlbHkobnRvaHMoY2gtXHUwMDNlbGVuZ3RoKSBcdTAwM2Mgc2l6ZW9mKCpjaCkpKSB7XG4rXHRcdGNodW5rLVx1MDAzZXBkaXNjYXJkID0gMTtcbitcdH0gZWxzZSBpZiAoY2h1bmstXHUwMDNlY2h1bmtfZW5kICsgc2l6ZW9mKCpjaCkgXHUwMDNjPVxuK1x0XHQgICBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYikpIHtcbiBcdFx0LyogVGhpcyBpcyBub3QgYSBzaW5nbGV0b24gKi9cbiBcdFx0Y2h1bmstXHUwMDNlc2luZ2xldG9uID0gMDtcbiBcdH0gZWxzZSBpZiAoY2h1bmstXHUwMDNlY2h1bmtfZW5kIFx1MDAzZSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVx1MDAzZXNrYikpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUxOjIxLjM5NDg0MzMyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MTQ3MjAxODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFNDVFAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCB0byBleGFtaW5lLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIHRoZSBgc2N0cF9pbnFfcG9wYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9zY3RwL2lucXVldWUuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluLiBUaGUgY2hhbmdlcyBzZWVtIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyB0aG9yb3VnaGx5LlxuXG5MZXQgbWUgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBkaWZmLiBJdCBzZWVtcyB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgbnRvaHMoY2gtXHUwMDNlbGVuZ3RoKSBcdTAwM2Mgc2l6ZW9mKCpjaClgLiBUaGlzIGlzIGNsZWFybHkgYSB2YWxpZGl0eSBjaGVjayBvbiB0aGUgY2h1bmsgbGVuZ3RoLCBsaWtlbHkgdG8gaGFuZGxlIHBvdGVudGlhbCBjb3JydXB0aW9uIG9yIG1hbGZvcm1lZCBwYWNrZXRzLiBUaGUgcGF0Y2ggc2V0cyBgY2h1bmstXHUwMDNlcGRpc2NhcmQgPSAxO2AgaWYgdGhlIGxlbmd0aCBpcyBpbnZhbGlkLiBUaGUgb3RoZXIgYGlmYCBjb25kaXRpb24gY2hlY2tzIGlmIHRoZSBjaHVuayBpcyBub3QgYSBzaW5nbGV0b24sIGFuZCB0aGUgbGFzdCBgZWxzZSBpZmAgY29uZGl0aW9uIGlzIGFsc28gY2hlY2tpbmcgdmFsaWRpdHkuXG5cbk5vdywgSSBuZWVkIG1vcmUgY29udGV4dC4gSSBoYXZlIHRvIHZlcmlmeSB0aGUgcGF0Y2gncyBjb3JyZWN0bmVzcyBhbmQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgY2hlY2sgaXMgYmVpbmcgYWRkZWQuIEknbGwgbmVlZCB0byBzY3J1dGluaXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGhpbiBgc2N0cF9pbnFfcG9wYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2h1bmsgbGVuZ3RoIGlzIHVzZWQgYW5kIHdoYXQgdGhpcyBuZXcgY2hlY2sgZ3VhcmRzIGFnYWluc3QuIEknbGwgbmVlZCB0byBxdWlja2x5IGNoZWNrIHRoZSBjYWxsZXJzIGFuZCB0aGUgZXhwb3J0ZWQgc3ltYm9scyB0byBnYXVnZSB0aGUgaW1wYWN0LlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIFNDVFAgdG8gZW5zdXJlIHRoaXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IGNvbXBhdGliaWxpdHkgaXNzdWVzIG9yIGNvbmZsaWN0cyB3aXRoIHZhcmlvdXMgY29uZmlndXJhdGlvbnMuXG5cblRpbWUgdG8gcHVsbCBvdXQgdGhlIHRvb2xzLiBJJ2xsIG5lZWQgdG8gcnVuIHNvbWUgc3RhdGljIGFuYWx5c2lzIHRvIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaW50cm9kdWNlZCBvciByZXNvbHZlZCBhbmQgYWxzbyB0byBjaGVjayBhbGwgdXNlcyBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkIHRvIGVuc3VyZSBjb25zaXN0ZW5jeS4gQSBxdWljayBjaGVjayB3aXRoIGBzcGFyc2VgIG9yIHNpbWlsYXIgdG9vbHMsIGFuZCBtYXliZSBldmVuIGEgcXVpY2sgcnVuIHdpdGggYSBmdXp6ZXIgb24gdGhlIGFmZmVjdGVkIGFyZWEsIGlzIHdhcnJhbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNywiT3V0cHV0VG9rZW5zIjoxMDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1MTo1MC41NDIwNDg3MDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2N0cC9pbnF1ZXVlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTgwOlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gbmV4dF9jaHVuaztcXG4gMTgxOlxcdFxcdFxcdFxcdFxcdH1cXG4gMTgyOlxcdFxcdFxcdFxcdFxcdGNodW5rLVxcdTAwM2Vza2IgPSBza2Jfc2hpbmZvKGNodW5rLVxcdTAwM2Vza2IpLVxcdTAwM2VmcmFnX2xpc3Q7XFxuIDE4MzpcXHRcXHRcXHRcXHR9XFxuIDE4NDpcXHRcXHRcXHR9XFxuIDE4NTpcXHRcXG4gMTg2OlxcdFxcdFxcdGlmIChjaHVuay1cXHUwMDNlYXNvYylcXG4gMTg3OlxcdFxcdFxcdFxcdHNvY2tfcnBzX3NhdmVfcnhoYXNoKGNodW5rLVxcdTAwM2Vhc29jLVxcdTAwM2ViYXNlLnNrLCBjaHVuay1cXHUwMDNlc2tiKTtcXG4gMTg4OlxcdFxcbiAxODk6XFx0XFx0XFx0cXVldWUtXFx1MDAzZWluX3Byb2dyZXNzID0gY2h1bms7XFxuIDE5MDpcXHRcXG4gMTkxOlxcdG5ld19za2I6XFxuIDE5MjpcXHRcXHRcXHQvKiBUaGlzIGlzIHRoZSBmaXJzdCBjaHVuayBpbiB0aGUgcGFja2V0LiAgKi9cXG4gMTkzOlxcdFxcdFxcdGNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlZGF0YTtcXG4gMTk0OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VzaW5nbGV0b24gPSAxO1xcbiAxOTU6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZWRhdGFfYWNjZXB0ZWQgPSAwO1xcbiAxOTY6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZXBkaXNjYXJkID0gMDtcXG4gMTk3OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VhdXRoID0gMDtcXG4gMTk4OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VoYXNfYXNjb25mID0gMDtcXG4gMTk5OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VlbmRfb2ZfcGFja2V0ID0gMDtcXG4gMjAwOlxcdFxcdFxcdGlmIChjaHVuay1cXHUwMDNlaGVhZF9za2IpIHtcXG4gMjAxOlxcdFxcdFxcdFxcdHN0cnVjdCBzY3RwX2lucHV0X2NiXFxuIDIwMjpcXHRcXHRcXHRcXHRcXHQqY2IgPSBTQ1RQX0lOUFVUX0NCKGNodW5rLVxcdTAwM2Vza2IpLFxcbiAyMDM6XFx0XFx0XFx0XFx0XFx0KmhlYWRfY2IgPSBTQ1RQX0lOUFVUX0NCKGNodW5rLVxcdTAwM2VoZWFkX3NrYik7XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdFxcdFxcdGNiLVxcdTAwM2VjaHVuayA9IGhlYWRfY2ItXFx1MDAzZWNodW5rO1xcbiAyMDY6XFx0XFx0XFx0XFx0Y2ItXFx1MDAzZWFmID0gaGVhZF9jYi1cXHUwMDNlYWY7XFxuIDIwNzpcXHRcXHRcXHRcXHRjYi1cXHUwMDNlZW5jYXBfcG9ydCA9IGhlYWRfY2ItXFx1MDAzZWVuY2FwX3BvcnQ7XFxuIDIwODpcXHRcXHRcXHR9XFxuIDIwOTpcXHRcXHR9XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdGNodW5rLVxcdTAwM2VjaHVua19oZHIgPSBjaDtcXG4gMjEyOlxcdFxcdGNodW5rLVxcdTAwM2VjaHVua19lbmQgPSAoKF9fdTggKiljaCkgKyBTQ1RQX1BBRDQobnRvaHMoY2gtXFx1MDAzZWxlbmd0aCkpO1xcbiAyMTM6XFx0XFx0c2tiX3B1bGwoY2h1bmstXFx1MDAzZXNrYiwgc2l6ZW9mKCpjaCkpO1xcbiAyMTQ6XFx0XFx0Y2h1bmstXFx1MDAzZXN1YmgudiA9IE5VTEw7IC8qIFN1YmhlYWRlciBpcyBubyBsb25nZXIgdmFsaWQuICAqL1xcbiAyMTU6XFx0XFx0aWYgKHVubGlrZWx5KG50b2hzKGNoLVxcdTAwM2VsZW5ndGgpIFxcdTAwM2Mgc2l6ZW9mKCpjaCkpKSB7XFxuIDIxNjpcXHRcXHRcXHRjaHVuay1cXHUwMDNlcGRpc2NhcmQgPSAxO1xcbiAyMTc6XFx0XFx0fSBlbHNlIGlmIChjaHVuay1cXHUwMDNlY2h1bmtfZW5kICsgc2l6ZW9mKCpjaCkgXFx1MDAzYz1cXG4gMjE4OlxcdFxcdFxcdCAgIHNrYl90YWlsX3BvaW50ZXIoY2h1bmstXFx1MDAzZXNrYikpIHtcXG4gMjE5OlxcdFxcdFxcdC8qIFRoaXMgaXMgbm90IGEgc2luZ2xldG9uICovXFxuIDIyMDpcXHRcXHRcXHRjaHVuay1cXHUwMDNlc2luZ2xldG9uID0gMDtcXG4gMjIxOlxcdFxcdH0gZWxzZSBpZiAoY2h1bmstXFx1MDAzZWNodW5rX2VuZCBcXHUwMDNlIHNrYl90YWlsX3BvaW50ZXIoY2h1bmstXFx1MDAzZXNrYikpIHtcXG4gMjIyOlxcdFxcdFxcdC8qIERpc2NhcmQgaW5zaWRlIHN0YXRlIG1hY2hpbmUuICovXFxuIDIyMzpcXHRcXHRcXHRjaHVuay1cXHUwMDNlcGRpc2NhcmQgPSAxO1xcbiAyMjQ6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZWNodW5rX2VuZCA9IHNrYl90YWlsX3BvaW50ZXIoY2h1bmstXFx1MDAzZXNrYik7XFxuIDIyNTpcXHRcXHR9IGVsc2Uge1xcbiAyMjY6XFx0XFx0XFx0LyogV2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIHBhY2tldCwgc28gbWFyayB0aGUgY2h1bmtcXG4gMjI3OlxcdFxcdFxcdCAqIGluIGNhc2Ugd2UgbmVlZCB0byBzZW5kIGEgU0FDSy5cXG4gMjI4OlxcdFxcdFxcdCAqL1xcbiAyMjk6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZWVuZF9vZl9wYWNrZXQgPSAxO1xcbiAyMzA6XFx0XFx0fVxcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHRwcl9kZWJ1ZyhcXFwiKysrc2N0cF9pbnFfcG9wKysrIGNodW5rOiVwWyVzXSwgbGVuZ3RoOiVkLCBza2ItXFx1MDAzZWxlbjolZFxcXFxuXFxcIixcXG4gMjMzOlxcdFxcdFxcdCBjaHVuaywgc2N0cF9jbmFtZShTQ1RQX1NUX0NIVU5LKGNodW5rLVxcdTAwM2VjaHVua19oZHItXFx1MDAzZXR5cGUpKSxcXG4gMjM0OlxcdFxcdFxcdCBudG9ocyhjaHVuay1cXHUwMDNlY2h1bmtfaGRyLVxcdTAwM2VsZW5ndGgpLCBjaHVuay1cXHUwMDNlc2tiLVxcdTAwM2VsZW4pO1xcbiAyMzU6XFx0XFxuIDIzNjpcXHRcXHRyZXR1cm4gY2h1bms7XFxuIDIzNzpcXHR9XFxuIDIzODpcXHRcXG4gMjM5OlxcdC8qIFNldCBhIHRvcC1oYWxmIGhhbmRsZXIuXFxuIDI0MDpcXHQgKlxcbiAyNDE6XFx0ICogT3JpZ2luYWxseSwgd2UgdGhlIHRvcC1oYWxmIGhhbmRsZXIgd2FzIHNjaGVkdWxlZCBhcyBhIEJILiAgV2Ugbm93XFxuIDI0MjpcXHQgKiBjYWxsIHRoZSBoYW5kbGVyIGRpcmVjdGx5IGluIHNjdHBfaW5xX3B1c2goKSBhdCBhIHRpbWUgdGhhdFxcbiAyNDM6XFx0ICogd2Uga25vdyB3ZSBhcmUgbG9jayBzYWZlLlxcbiAyNDQ6XFx0ICogVGhlIGludGVudCBpcyB0aGF0IHRoaXMgcm91dGluZSB3aWxsIHB1bGwgc3R1ZmYgb3V0IG9mIHRoZVxcbiAyNDU6XFx0ICogaW5xdWV1ZSBhbmQgcHJvY2VzcyBpdC5cXG4gMjQ2OlxcdCAqL1xcbiAyNDc6XFx0dm9pZCBzY3RwX2lucV9zZXRfdGhfaGFuZGxlcihzdHJ1Y3Qgc2N0cF9pbnEgKnEsIHdvcmtfZnVuY190IGNhbGxiYWNrKVxcbiAyNDg6XFx0e1xcbiAyNDk6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZxLVxcdTAwM2VpbW1lZGlhdGUsIGNhbGxiYWNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTE6NTAuNTQyMTQyNDQ1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5NTUzOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfaW5xX3BvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9hc3NvY2lvbGEuYz05NzE9c3RhdGljIHZvaWQgc2N0cF9hc3NvY19iaF9yY3Yoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NjdHAvYXNzb2Npb2xhLmMtOTg5LVxcdHNjdHBfYXNzb2NpYXRpb25faG9sZChhc29jKTtcXG5uZXQvc2N0cC9hc3NvY2lvbGEuYzo5OTA6XFx0d2hpbGUgKE5VTEwgIT0gKGNodW5rID0gc2N0cF9pbnFfcG9wKGlucXVldWUpKSkge1xcbm5ldC9zY3RwL2Fzc29jaW9sYS5jLTk5MS1cXHRcXHRzdGF0ZSA9IGFzb2MtXFx1MDAzZXN0YXRlO1xcbi0tXFxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYz0zMjY9c3RhdGljIHZvaWQgc2N0cF9lbmRwb2ludF9iaF9yY3Yoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYy0zNDktXFxubmV0L3NjdHAvZW5kcG9pbnRvbGEuYzozNTA6XFx0d2hpbGUgKE5VTEwgIT0gKGNodW5rID0gc2N0cF9pbnFfcG9wKGlucXVldWUpKSkge1xcbm5ldC9zY3RwL2VuZHBvaW50b2xhLmMtMzUxLVxcdFxcdHN1YnR5cGUgPSBTQ1RQX1NUX0NIVU5LKGNodW5rLVxcdTAwM2VjaHVua19oZHItXFx1MDAzZXR5cGUpO1xcbi0tXFxubmV0L3NjdHAvaW5xdWV1ZS5jPTk1PXN0cnVjdCBzY3RwX2NodW5raGRyICpzY3RwX2lucV9wZWVrKHN0cnVjdCBzY3RwX2lucSAqcXVldWUpXFxuLS1cXG5uZXQvc2N0cC9pbnF1ZXVlLmMtMTE3LSAqL1xcbm5ldC9zY3RwL2lucXVldWUuYzoxMTg6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfaW5xX3BvcChzdHJ1Y3Qgc2N0cF9pbnEgKnF1ZXVlKVxcbm5ldC9zY3RwL2lucXVldWUuYy0xMTkte1xcbi0tXFxubmV0L3NjdHAvaW5xdWV1ZS5jLTIzMS1cXG5uZXQvc2N0cC9pbnF1ZXVlLmM6MjMyOlxcdHByX2RlYnVnKFxcXCIrKytzY3RwX2lucV9wb3ArKysgY2h1bms6JXBbJXNdLCBsZW5ndGg6JWQsIHNrYi1cXHUwMDNlbGVuOiVkXFxcXG5cXFwiLFxcbm5ldC9zY3RwL2lucXVldWUuYy0yMzMtXFx0XFx0IGNodW5rLCBzY3RwX2NuYW1lKFNDVFBfU1RfQ0hVTksoY2h1bmstXFx1MDAzZWNodW5rX2hkci1cXHUwMDNldHlwZSkpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1MTo1MC42NDE3MDE0NzFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2N0cC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFNDVFAgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIElQX1NDVFBcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgU0NUUCBQcm90b2NvbFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxcbiAgMTA6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xcbiAgMTI6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDEzOlxcdFxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbiAgMTQ6XFx0XFx0aGVscFxcbiAgMTU6XFx0XFx0ICBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2xcXG4gIDE2OlxcdFxcbiAgMTc6XFx0XFx0ICBGcm9tIFJGQyAyOTYwIFxcdTAwM2NodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTYwLnR4dFxcdTAwM2UuXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgXFxcIlNDVFAgaXMgYSByZWxpYWJsZSB0cmFuc3BvcnQgcHJvdG9jb2wgb3BlcmF0aW5nIG9uIHRvcCBvZiBhXFxuICAyMDpcXHRcXHQgIGNvbm5lY3Rpb25sZXNzIHBhY2tldCBuZXR3b3JrIHN1Y2ggYXMgSVAuICBJdCBvZmZlcnMgdGhlIGZvbGxvd2luZ1xcbiAgMjE6XFx0XFx0ICBzZXJ2aWNlcyB0byBpdHMgdXNlcnM6XFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgLS0gYWNrbm93bGVkZ2VkIGVycm9yLWZyZWUgbm9uLWR1cGxpY2F0ZWQgdHJhbnNmZXIgb2YgdXNlciBkYXRhLFxcbiAgMjQ6XFx0XFx0ICAtLSBkYXRhIGZyYWdtZW50YXRpb24gdG8gY29uZm9ybSB0byBkaXNjb3ZlcmVkIHBhdGggTVRVIHNpemUsXFxuICAyNTpcXHRcXHQgIC0tIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiB1c2VyIG1lc3NhZ2VzIHdpdGhpbiBtdWx0aXBsZSBzdHJlYW1zLFxcbiAgMjY6XFx0XFx0ICB3aXRoIGFuIG9wdGlvbiBmb3Igb3JkZXItb2YtYXJyaXZhbCBkZWxpdmVyeSBvZiBpbmRpdmlkdWFsIHVzZXJcXG4gIDI3OlxcdFxcdCAgbWVzc2FnZXMsXFxuICAyODpcXHRcXHQgIC0tIG9wdGlvbmFsIGJ1bmRsaW5nIG9mIG11bHRpcGxlIHVzZXIgbWVzc2FnZXMgaW50byBhIHNpbmdsZSBTQ1RQXFxuICAyOTpcXHRcXHQgIHBhY2tldCwgYW5kXFxuICAzMDpcXHRcXHQgIC0tIG5ldHdvcmstbGV2ZWwgZmF1bHQgdG9sZXJhbmNlIHRocm91Z2ggc3VwcG9ydGluZyBvZiBtdWx0aS1cXG4gIDMxOlxcdFxcdCAgaG9taW5nIGF0IGVpdGhlciBvciBib3RoIGVuZHMgb2YgYW4gYXNzb2NpYXRpb24uXFxcIlxcbiAgMzI6XFx0XFxuICAzMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBwcm90b2NvbCBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gIDM0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjdHAuIERlYnVnIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGJ5IHRoZVxcbiAgMzU6XFx0XFx0ICBrZXJuZWwncyBkeW5hbWljIGRlYnVnZ2luZyBmcmFtZXdvcmsuXFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxcbiAgMzg6XFx0XFxuICAzOTpcXHRpZiBJUF9TQ1RQXFxuICA0MDpcXHRcXG4gIDQxOlxcdGNvbmZpZyBTQ1RQX0RCR19PQkpDTlRcXG4gIDQyOlxcdFxcdGJvb2wgXFxcIlNDVFA6IERlYnVnIG9iamVjdCBjb3VudHNcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIFBST0NfRlNcXG4gIDQ0OlxcdFxcdGhlbHBcXG4gIDQ1OlxcdFxcdCAgSWYgeW91IHNheSBZLCB0aGlzIHdpbGwgZW5hYmxlIGRlYnVnZ2luZyBzdXBwb3J0IGZvciBjb3VudGluZyB0aGVcXG4gIDQ2OlxcdFxcdCAgdHlwZSBvZiBvYmplY3RzIHRoYXQgYXJlIGN1cnJlbnRseSBhbGxvY2F0ZWQuICBUaGlzIGlzIHVzZWZ1bCBmb3JcXG4gIDQ3OlxcdFxcdCAgaWRlbnRpZnlpbmcgbWVtb3J5IGxlYWtzLiBUaGlzIGRlYnVnIGluZm9ybWF0aW9uIGNhbiBiZSB2aWV3ZWQgYnlcXG4gIDQ4OlxcdFxcdCAgJ2NhdCAvcHJvYy9uZXQvc2N0cC9zY3RwX2RiZ19vYmpjbnQnXFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1MTo1MC42NDE3ODgyNDFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTMxOTQ4NTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNDVFAgQ2h1bmsgUHJvY2Vzc2luZyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgc2N0cF9pbnFfcG9wYCBmdW5jdGlvbiBhbmQgc2VlIHdoYXQncyBjaGFuZ2VkLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgd2l0aCBob3cgdGhlIGNvZGUgaGFuZGxlcyBpbnZhbGlkIGNodW5rIGxlbmd0aHMsIHNwZWNpZmljYWxseSB3aGVuIGBudG9ocyhjaC1cdTAwM2VsZW5ndGgpYCBpcyBsZXNzIHRoYW4gYHNpemVvZigqY2gpYC4gUHJldmlvdXNseSwgaXQgc2VlbXMgdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGBjaHVua19lbmRgIHBvaW50aW5nIG91dHNpZGUgdGhlIGV4cGVjdGVkIG1lbW9yeSByZWdpb24sIGVpdGhlciBiZWZvcmUgdGhlIGNodW5rIGhlYWRlciBvciB0aHJvdWdoIGFuIHVuZGVyZmxvdywgcmVzdWx0aW5nIGluIG1hbGZvcm1lZCBjaHVuayBoYW5kbGluZyBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhhdCdzIGEgY2xhc3NpYyB2dWxuZXJhYmlsaXR5IVxuXG5Ob3csIHRoZSBmaXggbGV2ZXJhZ2VzIHRoZSBgdW5saWtlbHkoKWAgbWFjcm8gYW5kIHNldHMgYGNodW5rLVx1MDAzZXBkaXNjYXJkID0gMWAgaWYgYG50b2hzKGNoLVx1MDAzZWxlbmd0aClgIGlzIGluZGVlZCBsZXNzIHRoYW4gYHNpemVvZigqY2gpYC4gVGhpcyBzZWVtcyBsaWtlIGEgYmV0dGVyIGFwcHJvYWNoIC0gZXhwbGljaXRseSBtYXJraW5nIHRoZSBjaHVuayBmb3IgZGlzY2FyZCBwcmV2ZW50cyBmdXJ0aGVyIHByb2Nlc3Npbmcgb2YgZ2FyYmFnZSBkYXRhLlxuXG5gc2N0cF9pbnFfcG9wYCByZXNpZGVzIGluIGBuZXQvc2N0cC9pbnF1ZXVlLmNgLCBhbmQgSSBzaG91bGQgY29uZmlybSBpZiBpdCdzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiBzaW5jZSBpdHMgaW50ZXJmYWNlIGNvdWxkIGluZmx1ZW5jZSBob3cgaXQgaXMgY2FsbGVkIGFuZCB1c2VkLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvc2N0cC9NYWtlZmlsZWAgb3IgcmVsZXZhbnQgaGVhZGVyIGRlY2xhcmF0aW9ucyBmb3IgdGhhdC4gTGV0J3Mgc2VlLi4uIExpbmUgMTE4OiBgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfaW5xX3BvcChzdHJ1Y3Qgc2N0cF9pbnEgKnF1ZXVlKWAuIE9rYXksIHRoYXQgZ2l2ZXMgbWUgdGhlIHNpZ25hdHVyZSwgYnV0IEkgbmVlZCB0byBrbm93IGlmIGl0J3MgZXh0ZXJuYWxseSB2aXNpYmxlIG9yIG9ubHkgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZS4gSXQncyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MTcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJncmVwcGVyIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTI6MjkuOTYxMjc2NTcxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MTczMTUxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX2lucV9wb3BcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmg9MTA0Mj12b2lkIHNjdHBfaW5xX3B1c2goc3RydWN0IHNjdHBfaW5xICosIHN0cnVjdCBzY3RwX2NodW5rICpwYWNrZXQpO1xcbmluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oOjEwNDM6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfaW5xX3BvcChzdHJ1Y3Qgc2N0cF9pbnEgKik7XFxuaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgtMTA0NC1zdHJ1Y3Qgc2N0cF9jaHVua2hkciAqc2N0cF9pbnFfcGVlayhzdHJ1Y3Qgc2N0cF9pbnEgKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUyOjMwLjM0MzAxNDUyNVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1NzkxODQ4NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50IGRvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBvZiBgaW5xdWV1ZS5vYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgaW5xdWV1ZS5vYCBpcyBiZWluZyBjb21waWxlZC4gSXQncyBhIGNyaXRpY2FsIHBpZWNlIHdpdGhpbiB0aGUgU0NUUCBzdGFjaywgYW5kIEkgd2FudCB0byBkb3VibGUtY2hlY2sgaXRzIGJ1aWxkIHByb2Nlc3MuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBuZXQvc2N0cC9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBidWlsZCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBTQ1RQIG1vZHVsZSBzaG91bGQgcmVzaWRlLiBMZXQncyBkaXZlIGluIGFuZCBzZWUgd2hhdCB0aGUgbWFrZWZpbGUgcmV2ZWFscyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxlciBmbGFncywgYW5kIGxpbmtpbmcgcHJvY2VkdXJlIGZvciBgaW5xdWV1ZS5vYC4gVGhpcyB3aWxsIGhlbHAgbWUgY29uZmlybSBteSBhc3N1bXB0aW9ucyBhYm91dCBpdHMgaW50ZWdyYXRpb24gYW5kIHBvdGVudGlhbCBvcHRpbWl6YXRpb24gcG9pbnRzIHdpdGhpbiB0aGUgbGFyZ2VyIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE0NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUzOjA2LjEzNDg2NTMyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2N0cC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIFNDVFAgc3VwcG9ydCBjb2RlLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfSVBfU0NUUCkgKz0gc2N0cC5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfSU5FVF9TQ1RQX0RJQUcpICs9IHNjdHBfZGlhZy5vXFxuICAgODpcXHRcXG4gICA5OlxcdHNjdHAteSA6PSBzbV9zdGF0ZXRhYmxlLm8gc21fc3RhdGVmdW5zLm8gc21fc2lkZWVmZmVjdC5vIFxcXFxcXG4gIDEwOlxcdFxcdCAgcHJvdG9jb2wubyBlbmRwb2ludG9sYS5vIGFzc29jaW9sYS5vIFxcXFxcXG4gIDExOlxcdFxcdCAgdHJhbnNwb3J0Lm8gY2h1bmsubyBzbV9tYWtlX2NodW5rLm8gdWxwZXZlbnQubyBcXFxcXFxuICAxMjpcXHRcXHQgIGlucXVldWUubyBvdXRxdWV1ZS5vIHVscHF1ZXVlLm8gXFxcXFxcbiAgMTM6XFx0XFx0ICB0c25tYXAubyBiaW5kX2FkZHIubyBzb2NrZXQubyBwcmltaXRpdmUubyBcXFxcXFxuICAxNDpcXHRcXHQgIG91dHB1dC5vIGlucHV0Lm8gZGVidWcubyBzdHJlYW0ubyBhdXRoLm8gXFxcXFxcbiAgMTU6XFx0XFx0ICBvZmZsb2FkLm8gc3RyZWFtX3NjaGVkLm8gc3RyZWFtX3NjaGVkX3ByaW8ubyBcXFxcXFxuICAxNjpcXHRcXHQgIHN0cmVhbV9zY2hlZF9yci5vIHN0cmVhbV9zY2hlZF9mYy5vIFxcXFxcXG4gIDE3OlxcdFxcdCAgc3RyZWFtX2ludGVybGVhdmUub1xcbiAgMTg6XFx0XFxuICAxOTpcXHRzY3RwX2RpYWcteSA6PSBkaWFnLm9cXG4gIDIwOlxcdFxcbiAgMjE6XFx0c2N0cC0kKENPTkZJR19TQ1RQX0RCR19PQkpDTlQpICs9IG9iamNudC5vXFxuICAyMjpcXHRzY3RwLSQoQ09ORklHX1BST0NfRlMpICs9IHByb2Mub1xcbiAgMjM6XFx0c2N0cC0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bC5vXFxuICAyNDpcXHRcXG4gIDI1OlxcdHNjdHAtJChzdWJzdCBtLHksJChDT05GSUdfSVBWNikpXFx0Kz0gaXB2Ni5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUzOjA2LjEzNDkyMzMxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjA5MDI5MzA3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEFuYWx5c2lzOiBgQ09ORklHX0lQX1NDVFBgIGFuZCBgc2N0cF9pbnFfcG9wYCoqXG5cbk9rYXksIHNvIGBDT05GSUdfSVBfU0NUUGAgZGlyZWN0bHkgbGVhZHMgdG8gdGhlIGNvbXBpbGF0aW9uIG9mIGBzY3RwLm9gLCB3aGljaCBpbmNsdWRlcyBgaW5xdWV1ZS5vYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdG8gZ2FpbiBhIGJyb2FkZXIgcGljdHVyZS4gYG1lbnVjb25maWcgSVBfU0NUUGAgZGVwZW5kcyBvbiBgSU5FVGAsIHdoaWNoIGlzIGEgcHJldHR5IHN0YW5kYXJkLCBmb3VuZGF0aW9uYWwgY29uZmlndXJhdGlvbi5cblxuSXMgdGhpcyBhIGZ1enppbmcgdGFyZ2V0PyBBYnNvbHV0ZWx5ISBUaGlzIGlzIHByaW1lIHJlYWwgZXN0YXRlIOKAkyB3ZSdyZSB0YWxraW5nIGFib3V0IFNDVFAgcGFja2V0IHBhcnNpbmcgYW5kIGlucXVldWUgcHJvY2Vzc2luZy4gU3BlY2lmaWNhbGx5LCB0aGUgaGFuZGxpbmcgb2YgY2h1bmtzIHdpdGggcG90ZW50aWFsbHkgaW52YWxpZCBsZW5ndGhzIOKAkyB1bmRlcnNpemVkIGNodW5rcyB3aGVyZSBgY2gtXHUwMDNlbGVuZ3RoYCBpcyBsZXNzIHRoYW4gYHNpemVvZigqY2gpYC4gVGhhdCdzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgdnVsbmVyYWJpbGl0aWVzLiBJdCdzIGFsc28gcGFydCBvZiB0aGUgY29yZSBuZXR3b3JraW5nIHN0YWNrLiBUaGluayBzdGFuZGFyZCBuZXR3b3JraW5nIGFjY2VzczogU0NUUCBzb2NrZXRzLCByYXcgcGFja2V0cywgU3l6a2FsbGVyIFNDVFAgc3lzY2FsbHMsIG5ldHdvcmsgZGV2aWNlIFJYLiBUaGlzIGlzIGFsbCB2ZXJ5IHJlYWNoYWJsZS4gVGhpcyB2dWxuZXJhYmlsaXR5IHRhcmdldHMgaG93IGBzY3RwX2lucV9wb3BgIGV4ZWN1dGVzIGl0cyBsb2dpYy5cblxuTm93LCBsZXQncyBleGFtaW5lIHRoZSBmb2N1cyBzeW1ib2wuIGBzY3RwX2lucV9wb3BgIGlzIGEgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGZ1bmN0aW9uLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBJdCB0YWtlcyBhIGBzdHJ1Y3Qgc2N0cF9pbnEgKnF1ZXVlYCBhbmQgcmV0dXJucyBhIGBzdHJ1Y3Qgc2N0cF9jaHVuayAqYC4gSSBhbHNvIG5vdGUgdGhlIGNhbGxlcnMgYW5kIHJlbGF0ZWQgZW50cnlwb2ludHMuIExvb2tzIGxpa2Ugd2UgaGF2ZSBgc2N0cF9hc3NvY19iaF9yY3ZgLCBgc2N0cF9lbmRwb2ludF9iaF9yY3ZgLCBhbmQgZXZlbiBgc2N0cF9pbnFfcG9wYCBpdHNlbGYuIFNvLCBgc2N0cF9pbnFfcG9wYCBpdHNlbGYgaXMgdGhlIHByZWNpc2UgZnVuY3Rpb24gYmVpbmcgbW9kaWZpZWQuIEl0J3MgYW4gZXhjZWxsZW50IGZvY3VzIHN5bWJvbC5cblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uczogYElQX1NDVFBgIGFuZCwgb2YgY291cnNlLCBgSU5FVGAuXG5cbkFscmlnaHQsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBzdW1tYXJpemU6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gdGhpcyBpcyBhIHNvbGlkIHRhcmdldC5cbiogICAqKkZvY3VzU3ltYm9sczoqKiBgW1wic2N0cF9pbnFfcG9wXCJdYCAtIHRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIG1hdHRlci5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFtcIklQX1NDVFBcIiwgXCJJTkVUXCJdYCAtIG91ciByZXF1aXJlZCBidWlsZGluZyBibG9ja3MuXG4qICAgKipSZWFzb25pbmc6KiogQ29uY2lzZSBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyB2ZXJkaWN0IGlzIHdoYXQgaXQgaXMuXG5cblRpbWUgdG8gbWFrZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODA1LCJPdXRwdXRUb2tlbnMiOjExMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUzOjI4LjIyNTIxOTY4OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDU0OTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9pbnFfcG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgY2h1bmsgbGVuZ3RoIHZhbGlkYXRpb24gaW4gdGhlIFNDVFAgaW5wdXQgcXVldWUgcHJvY2Vzc29yIChzY3RwX2lucV9wb3ApIHRvIGRpc2NhcmQgY2h1bmtzIHdoZW4gdGhlIGNodW5rIGhlYWRlciBsZW5ndGggZmllbGQgaXMgc21hbGxlciB0aGFuIHRoZSBoZWFkZXIgc2l6ZSwgcHJldmVudGluZyBtYWxmb3JtZWQgY2h1bmtzIGZyb20gcHJvY2VlZGluZy4gVGhpcyBhZmZlY3RzIGNvcmUgU0NUUCBwYWNrZXQgcGFyc2luZyBhbmQgaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX2lucV9wb3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBjaHVuayBsZW5ndGggdmFsaWRhdGlvbiBpbiB0aGUgU0NUUCBpbnB1dCBxdWV1ZSBwcm9jZXNzb3IgKHNjdHBfaW5xX3BvcCkgdG8gZGlzY2FyZCBjaHVua3Mgd2hlbiB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aCBmaWVsZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGhlYWRlciBzaXplLCBwcmV2ZW50aW5nIG1hbGZvcm1lZCBjaHVua3MgZnJvbSBwcm9jZWVkaW5nLiBUaGlzIGFmZmVjdHMgY29yZSBTQ1RQIHBhY2tldCBwYXJzaW5nIGFuZCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUzOjI4LjMwMzY4MjIzNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0OTc3Mzg5ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTM6MjguMzA0MTE5MDU1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTM0OTc2OTQ4ODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgdmFsaWRhdGlvbiBjaGVjayBpbiBgc2N0cF9pbnFfcG9wKClgIGZvciBpbmNvbWluZyBTQ1RQIGNodW5rcyB3aXRoIGFuIGludmFsaWQgbGVuZ3RoIHNtYWxsZXIgdGhhbiB0aGUgU0NUUCBjaHVuayBoZWFkZXIgKGBzaXplb2YoKmNoKWApLiBQcmV2aW91c2x5LCBhIGNodW5rIGxlbmd0aCBcXHUwMDNjIDQgY291bGQgY2F1c2UgYGNodW5rLVxcdTAwM2VjaHVua19lbmRgIHRvIHByZWNlZGUgYGNodW5rLVxcdTAwM2Vza2ItXFx1MDAzZWRhdGFgLCBsZWFkaW5nIHRvIGEgbmVnYXRpdmUgYHNrYl9wdWxsKClgIG9mZnNldCBhbmQgc2tiIGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIGl0ZXJhdGluZyB0aHJvdWdoIHBhY2tldCBjaHVua3MuXFxuXFxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFkZHJlc3NlcyBwYWNrZXQgdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIG9uIGluY29taW5nIG5ldHdvcmsgc2tiIGRhdGEuIEFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3MgYXJpc2luZyBmcm9tIHRoaXMgbG9naWMgaXMgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIGtlcm5lbCBhc3NlcnRpb25zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbmV3IHN0cnVjdCBhbGxvY2F0aW9ucywgb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZGUzNTc4YmQ5MGQwM2RiZDYxZDNkZDA0Yzg1ZDE1MTM2NjI1Y2QzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMjE6NTE6MjAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9pbnF1ZXVlLmMgYi9uZXQvc2N0cC9pbnF1ZXVlLmNcbmluZGV4IDVmOTg4YjNhODgxNGYuLmQ2NjZjZWM2YjE5NGUgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9pbnF1ZXVlLmNcbisrKyBiL25ldC9zY3RwL2lucXVldWUuY1xuQEAgLTIxMiw4ICsyMTIsMTAgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfaW5xX3BvcChzdHJ1Y3Qgc2N0cF9pbnEgKnF1ZXVlKVxuIFx0Y2h1bmstXHUwMDNlY2h1bmtfZW5kID0gKChfX3U4ICopY2gpICsgU0NUUF9QQUQ0KG50b2hzKGNoLVx1MDAzZWxlbmd0aCkpO1xuIFx0c2tiX3B1bGwoY2h1bmstXHUwMDNlc2tiLCBzaXplb2YoKmNoKSk7XG4gXHRjaHVuay1cdTAwM2VzdWJoLnYgPSBOVUxMOyAvKiBTdWJoZWFkZXIgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgKi9cbi1cbi1cdGlmIChjaHVuay1cdTAwM2VjaHVua19lbmQgKyBzaXplb2YoKmNoKSBcdTAwM2M9IHNrYl90YWlsX3BvaW50ZXIoY2h1bmstXHUwMDNlc2tiKSkge1xuK1x0aWYgKHVubGlrZWx5KG50b2hzKGNoLVx1MDAzZWxlbmd0aCkgXHUwMDNjIHNpemVvZigqY2gpKSkge1xuK1x0XHRjaHVuay1cdTAwM2VwZGlzY2FyZCA9IDE7XG4rXHR9IGVsc2UgaWYgKGNodW5rLVx1MDAzZWNodW5rX2VuZCArIHNpemVvZigqY2gpIFx1MDAzYz1cbitcdFx0ICAgc2tiX3RhaWxfcG9pbnRlcihjaHVuay1cdTAwM2Vza2IpKSB7XG4gXHRcdC8qIFRoaXMgaXMgbm90IGEgc2luZ2xldG9uICovXG4gXHRcdGNodW5rLVx1MDAzZXNpbmdsZXRvbiA9IDA7XG4gXHR9IGVsc2UgaWYgKGNodW5rLVx1MDAzZWNodW5rX2VuZCBcdTAwM2Ugc2tiX3RhaWxfcG9pbnRlcihjaHVuay1cdTAwM2Vza2IpKSB7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1MzoyOC4zMDQxMjEwNDVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzMzc2NzIwOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhc3Nlc3NtZW50IG9mIHRoZSBzaXR1YXRpb246XG5cbioqS01TQU4gRnV6emluZyBTZXNzaW9uIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIHNpZ25pZmljYW50IGVub3VnaCB0byB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gVGhlIGZpcnN0IHN0ZXAgaXMgYWx3YXlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgY29kZS4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGBuZXQvc2N0cC9pbnF1ZXVlLmNgLCBhbmQgbW9yZSBzcGVjaWZpY2FsbHksIHRoZSBhcmVhIGFyb3VuZCBsaW5lIDIxMi4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZGlyZWN0IHZpZXcgb2YgdGhlIGNvZGUgaW4gdGhhdCBhcmVhIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIHBhdGNoJ3MgY2hhbmdlcyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIEJhc2VkIG9uIHRoaXMgaW5zcGVjdGlvbiwgSSBjYW4gbWFrZSBhbiBpbmZvcm1lZCBkZWNpc2lvbiBhYm91dCB0aGUgcG90ZW50aWFsIGltcGFjdCBhbmQgdnVsbmVyYWJpbGl0eSBzdXJmYWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1Mzo0OC42NDE3OTUyNTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvaW5xdWV1ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHRfY2h1bms7XFxuIDE4MTpcXHRcXHRcXHRcXHRcXHR9XFxuIDE4MjpcXHRcXHRcXHRcXHRcXHRjaHVuay1cXHUwMDNlc2tiID0gc2tiX3NoaW5mbyhjaHVuay1cXHUwMDNlc2tiKS1cXHUwMDNlZnJhZ19saXN0O1xcbiAxODM6XFx0XFx0XFx0XFx0fVxcbiAxODQ6XFx0XFx0XFx0fVxcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRcXHRpZiAoY2h1bmstXFx1MDAzZWFzb2MpXFxuIDE4NzpcXHRcXHRcXHRcXHRzb2NrX3Jwc19zYXZlX3J4aGFzaChjaHVuay1cXHUwMDNlYXNvYy1cXHUwMDNlYmFzZS5zaywgY2h1bmstXFx1MDAzZXNrYik7XFxuIDE4ODpcXHRcXG4gMTg5OlxcdFxcdFxcdHF1ZXVlLVxcdTAwM2Vpbl9wcm9ncmVzcyA9IGNodW5rO1xcbiAxOTA6XFx0XFxuIDE5MTpcXHRuZXdfc2tiOlxcbiAxOTI6XFx0XFx0XFx0LyogVGhpcyBpcyB0aGUgZmlyc3QgY2h1bmsgaW4gdGhlIHBhY2tldC4gICovXFxuIDE5MzpcXHRcXHRcXHRjaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKWNodW5rLVxcdTAwM2Vza2ItXFx1MDAzZWRhdGE7XFxuIDE5NDpcXHRcXHRcXHRjaHVuay1cXHUwMDNlc2luZ2xldG9uID0gMTtcXG4gMTk1OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VkYXRhX2FjY2VwdGVkID0gMDtcXG4gMTk2OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VwZGlzY2FyZCA9IDA7XFxuIDE5NzpcXHRcXHRcXHRjaHVuay1cXHUwMDNlYXV0aCA9IDA7XFxuIDE5ODpcXHRcXHRcXHRjaHVuay1cXHUwMDNlaGFzX2FzY29uZiA9IDA7XFxuIDE5OTpcXHRcXHRcXHRjaHVuay1cXHUwMDNlZW5kX29mX3BhY2tldCA9IDA7XFxuIDIwMDpcXHRcXHRcXHRpZiAoY2h1bmstXFx1MDAzZWhlYWRfc2tiKSB7XFxuIDIwMTpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2N0cF9pbnB1dF9jYlxcbiAyMDI6XFx0XFx0XFx0XFx0XFx0KmNiID0gU0NUUF9JTlBVVF9DQihjaHVuay1cXHUwMDNlc2tiKSxcXG4gMjAzOlxcdFxcdFxcdFxcdFxcdCpoZWFkX2NiID0gU0NUUF9JTlBVVF9DQihjaHVuay1cXHUwMDNlaGVhZF9za2IpO1xcbiAyMDQ6XFx0XFxuIDIwNTpcXHRcXHRcXHRcXHRjYi1cXHUwMDNlY2h1bmsgPSBoZWFkX2NiLVxcdTAwM2VjaHVuaztcXG4gMjA2OlxcdFxcdFxcdFxcdGNiLVxcdTAwM2VhZiA9IGhlYWRfY2ItXFx1MDAzZWFmO1xcbiAyMDc6XFx0XFx0XFx0XFx0Y2ItXFx1MDAzZWVuY2FwX3BvcnQgPSBoZWFkX2NiLVxcdTAwM2VlbmNhcF9wb3J0O1xcbiAyMDg6XFx0XFx0XFx0fVxcbiAyMDk6XFx0XFx0fVxcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHRjaHVuay1cXHUwMDNlY2h1bmtfaGRyID0gY2g7XFxuIDIxMjpcXHRcXHRjaHVuay1cXHUwMDNlY2h1bmtfZW5kID0gKChfX3U4ICopY2gpICsgU0NUUF9QQUQ0KG50b2hzKGNoLVxcdTAwM2VsZW5ndGgpKTtcXG4gMjEzOlxcdFxcdHNrYl9wdWxsKGNodW5rLVxcdTAwM2Vza2IsIHNpemVvZigqY2gpKTtcXG4gMjE0OlxcdFxcdGNodW5rLVxcdTAwM2VzdWJoLnYgPSBOVUxMOyAvKiBTdWJoZWFkZXIgaXMgbm8gbG9uZ2VyIHZhbGlkLiAgKi9cXG4gMjE1OlxcdFxcdGlmICh1bmxpa2VseShudG9ocyhjaC1cXHUwMDNlbGVuZ3RoKSBcXHUwMDNjIHNpemVvZigqY2gpKSkge1xcbiAyMTY6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZXBkaXNjYXJkID0gMTtcXG4gMjE3OlxcdFxcdH0gZWxzZSBpZiAoY2h1bmstXFx1MDAzZWNodW5rX2VuZCArIHNpemVvZigqY2gpIFxcdTAwM2M9XFxuIDIxODpcXHRcXHRcXHQgICBza2JfdGFpbF9wb2ludGVyKGNodW5rLVxcdTAwM2Vza2IpKSB7XFxuIDIxOTpcXHRcXHRcXHQvKiBUaGlzIGlzIG5vdCBhIHNpbmdsZXRvbiAqL1xcbiAyMjA6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZXNpbmdsZXRvbiA9IDA7XFxuIDIyMTpcXHRcXHR9IGVsc2UgaWYgKGNodW5rLVxcdTAwM2VjaHVua19lbmQgXFx1MDAzZSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVxcdTAwM2Vza2IpKSB7XFxuIDIyMjpcXHRcXHRcXHQvKiBEaXNjYXJkIGluc2lkZSBzdGF0ZSBtYWNoaW5lLiAqL1xcbiAyMjM6XFx0XFx0XFx0Y2h1bmstXFx1MDAzZXBkaXNjYXJkID0gMTtcXG4gMjI0OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VjaHVua19lbmQgPSBza2JfdGFpbF9wb2ludGVyKGNodW5rLVxcdTAwM2Vza2IpO1xcbiAyMjU6XFx0XFx0fSBlbHNlIHtcXG4gMjI2OlxcdFxcdFxcdC8qIFdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBwYWNrZXQsIHNvIG1hcmsgdGhlIGNodW5rXFxuIDIyNzpcXHRcXHRcXHQgKiBpbiBjYXNlIHdlIG5lZWQgdG8gc2VuZCBhIFNBQ0suXFxuIDIyODpcXHRcXHRcXHQgKi9cXG4gMjI5OlxcdFxcdFxcdGNodW5rLVxcdTAwM2VlbmRfb2ZfcGFja2V0ID0gMTtcXG4gMjMwOlxcdFxcdH1cXG4gMjMxOlxcdFxcbiAyMzI6XFx0XFx0cHJfZGVidWcoXFxcIisrK3NjdHBfaW5xX3BvcCsrKyBjaHVuazolcFslc10sIGxlbmd0aDolZCwgc2tiLVxcdTAwM2VsZW46JWRcXFxcblxcXCIsXFxuIDIzMzpcXHRcXHRcXHQgY2h1bmssIHNjdHBfY25hbWUoU0NUUF9TVF9DSFVOSyhjaHVuay1cXHUwMDNlY2h1bmtfaGRyLVxcdTAwM2V0eXBlKSksXFxuIDIzNDpcXHRcXHRcXHQgbnRvaHMoY2h1bmstXFx1MDAzZWNodW5rX2hkci1cXHUwMDNlbGVuZ3RoKSwgY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlbGVuKTtcXG4gMjM1OlxcdFxcbiAyMzY6XFx0XFx0cmV0dXJuIGNodW5rO1xcbiAyMzc6XFx0fVxcbiAyMzg6XFx0XFxuIDIzOTpcXHQvKiBTZXQgYSB0b3AtaGFsZiBoYW5kbGVyLlxcbiAyNDA6XFx0ICpcXG4gMjQxOlxcdCAqIE9yaWdpbmFsbHksIHdlIHRoZSB0b3AtaGFsZiBoYW5kbGVyIHdhcyBzY2hlZHVsZWQgYXMgYSBCSC4gIFdlIG5vd1xcbiAyNDI6XFx0ICogY2FsbCB0aGUgaGFuZGxlciBkaXJlY3RseSBpbiBzY3RwX2lucV9wdXNoKCkgYXQgYSB0aW1lIHRoYXRcXG4gMjQzOlxcdCAqIHdlIGtub3cgd2UgYXJlIGxvY2sgc2FmZS5cXG4gMjQ0OlxcdCAqIFRoZSBpbnRlbnQgaXMgdGhhdCB0aGlzIHJvdXRpbmUgd2lsbCBwdWxsIHN0dWZmIG91dCBvZiB0aGVcXG4gMjQ1OlxcdCAqIGlucXVldWUgYW5kIHByb2Nlc3MgaXQuXFxuIDI0NjpcXHQgKi9cXG4gMjQ3OlxcdHZvaWQgc2N0cF9pbnFfc2V0X3RoX2hhbmRsZXIoc3RydWN0IHNjdHBfaW5xICpxLCB3b3JrX2Z1bmNfdCBjYWxsYmFjaylcXG4gMjQ4OlxcdHtcXG4gMjQ5OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2cS1cXHUwMDNlaW1tZWRpYXRlLCBjYWxsYmFjayk7XFxuIDI1MDpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDIxOjUzOjQ4LjY0MTg2OTExNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NzExNTMxODE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNDVFAgQ2h1bmsgUG9wcGluZyBMb2dpYyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBzY3RwX2lucV9wb3BgIGZ1bmN0aW9uIGFuZCB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgaXQgaGFuZGxlcyBjaHVuayBib3VuZGFyaWVzLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLCBhcyBhbnkgbWlzaW50ZXJwcmV0YXRpb24gY291bGQgbGVhZCB0byBzdWJ0bGUgYnV0IHNpZ25pZmljYW50IGZsYXdzIGluIHRoZSBkYXRhIHByb2Nlc3NpbmcuXG5cblRoZSBjb2RlJ3MgaW5pdGlhbCBzZXR1cCBncmFicyB0aGUgY2h1bmsgaGVhZGVyLCB3aGljaCBpcyB0aGVuIHVzZWQgdG8gY2FsY3VsYXRlIGBjaHVuay1cdTAwM2VjaHVua19lbmRgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMuIFNwZWNpZmljYWxseSwgdGhlIHNuaXBwZXQgSSdtIGZvY3VzZWQgb24gY2hlY2tzIGlmIGEgY2h1bmsgaXMgY29tcGxldGUgd2l0aGluIHRoZSBTS0IncyBjdXJyZW50IGRhdGEgYnVmZmVyLiBJdCdzIGNydWNpYWwgZm9yIGVmZmljaWVudGx5IGlkZW50aWZ5aW5nIHdoZW4gd2UgaGF2ZSBhIGZ1bGwgY2h1bmsgdG8gd29yayB3aXRoLlxuXG5UaGUgY2FsY3VsYXRpb24gb2YgYGNodW5rLVx1MDAzZWNodW5rX2VuZGAgbG9va3Mgc3RyYWlnaHRmb3J3YXJkIHVzaW5nIGBTQ1RQX1BBRDRgIGFuZCBgbnRvaHMoY2gtXHUwMDNlbGVuZ3RoKWAuIEhvd2V2ZXIsIHRoZXJlJ3MgYSBwb3RlbnRpYWwgaXNzdWUgaWYgdGhlIHJlcG9ydGVkIGNodW5rIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIHNpemUgb2YgdGhlIGNodW5rIGhlYWRlciBpdHNlbGYuIFRoaXMgaXMgbXkga2V5IGNvbmNlcm4uIElmIGBudG9ocyhjaC1cdTAwM2VsZW5ndGgpYCBpcyBsZXNzIHRoYW4gYHNpemVvZigqY2gpYCAod2hpY2ggaXMgNCBpbiBvdXIgY2FzZSwgY29uc2lkZXJpbmcgU0NUUF9QQUQ0KSwgYGNodW5rX2VuZGAgY291bGQgZW5kIHVwIHBvc2l0aW9uZWQgYmVmb3JlIHRoZSBleHBlY3RlZCBkYXRhLlxuXG5JJ20gc3RhcnRpbmcgdG8gc2VlIGl0ISBBZnRlciB0aGUgYHNrYl9wdWxsYCBvcGVyYXRpb24sIHdoaWNoIHNoaWZ0cyB0aGUgYHNrYi1cdTAwM2VkYXRhYCBwb2ludGVyLCB0aGUgY3J1Y2lhbCBjb21wYXJpc29uIGBjaHVua19lbmQgKyBzaXplb2YoKmNoKSBcdTAwM2M9IHNrYl90YWlsX3BvaW50ZXIoY2h1bmstXHUwMDNlc2tiKWAgY291bGQgbWlzdGFrZW5seSBldmFsdWF0ZSB0byB0cnVlLiBXaHk/IEJlY2F1c2UgaWYgdGhlIGRlY2xhcmVkIGNodW5rIGxlbmd0aCBpcyBzbWFsbCAoZS5nLiwgemVybyksIGBjaHVua19lbmRgIHdpbGwgcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgaGVhZGVyLiBBZnRlciB0aGUgYHNrYl9wdWxsYCwgYGNodW5rX2VuZCArIHNpemVvZigqY2gpYCB3b3VsZCBwb2ludCB0byB0aGUgbmV3IGBza2ItXHUwMDNlZGF0YWAgcG9pbnRlciAqYmVmb3JlKiB0aGUgY2hlY2shIFRoaXMgbWVhbnMgYSBzZWVtaW5nbHkgaW5jb21wbGV0ZSBjaHVuayAoYWNjb3JkaW5nIHRvIHRoZSBvcmlnaW5hbCBsZW5ndGgpIG1pZ2h0IGJlIHdyb25nbHkgdHJlYXRlZCBhcyBhIGNvbXBsZXRlIGNodW5rIGFuZCBpcyBub3QgZGlzY2FyZGVkLiBUaGlzIHNlZW1zIGxpa2UgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGl0ZXJhdGlvbiB3b3JrcyBpbiBgc2N0cF9pbnFfcG9wYCB0byBzZWUgdGhlIGVmZmVjdCBvbiB0aGUgbmV4dCBwcm9jZXNzaW5nIHN0ZXAuIFRpbWUgdG8gY2hlY2sgbGluZXMgMTMwIHRocm91Z2ggMTkwLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjU0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMjE6NTQ6NDUuNzU3MTkwMzA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY3RwL2lucXVldWUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMzA6XFx0XFx0XFx0ICogQW55IHBvc3QgcHJvY2Vzc2luZyB3b3JrIHRvIGRvIGJlZm9yZSB3ZSBtb3ZlIG9uP1xcbiAxMzE6XFx0XFx0XFx0ICovXFxuIDEzMjpcXHRcXHRcXHRpZiAoY2h1bmstXFx1MDAzZXNpbmdsZXRvbiB8fFxcbiAxMzM6XFx0XFx0XFx0ICAgIGNodW5rLVxcdTAwM2VlbmRfb2ZfcGFja2V0IHx8XFxuIDEzNDpcXHRcXHRcXHQgICAgY2h1bmstXFx1MDAzZXBkaXNjYXJkKSB7XFxuIDEzNTpcXHRcXHRcXHRcXHRpZiAoY2h1bmstXFx1MDAzZWhlYWRfc2tiID09IGNodW5rLVxcdTAwM2Vza2IpIHtcXG4gMTM2OlxcdFxcdFxcdFxcdFxcdGNodW5rLVxcdTAwM2Vza2IgPSBza2Jfc2hpbmZvKGNodW5rLVxcdTAwM2Vza2IpLVxcdTAwM2VmcmFnX2xpc3Q7XFxuIDEzNzpcXHRcXHRcXHRcXHRcXHRnb3RvIG5ld19za2I7XFxuIDEzODpcXHRcXHRcXHRcXHR9XFxuIDEzOTpcXHRcXHRcXHRcXHRpZiAoY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlbmV4dCkge1xcbiAxNDA6XFx0XFx0XFx0XFx0XFx0Y2h1bmstXFx1MDAzZXNrYiA9IGNodW5rLVxcdTAwM2Vza2ItXFx1MDAzZW5leHQ7XFxuIDE0MTpcXHRcXHRcXHRcXHRcXHRnb3RvIG5ld19za2I7XFxuIDE0MjpcXHRcXHRcXHRcXHR9XFxuIDE0MzpcXHRcXG4gMTQ0OlxcdFxcdFxcdFxcdHNjdHBfaW5xX2NodW5rX2ZyZWUoY2h1bmspO1xcbiAxNDU6XFx0XFx0XFx0XFx0Y2h1bmsgPSBxdWV1ZS1cXHUwMDNlaW5fcHJvZ3Jlc3MgPSBOVUxMO1xcbiAxNDY6XFx0XFx0XFx0fSBlbHNlIHtcXG4gMTQ3OlxcdFxcdFxcdFxcdC8qIE5vdGhpbmcgdG8gZG8uIE5leHQgY2h1bmsgaW4gdGhlIHBhY2tldCwgcGxlYXNlLiAqL1xcbiAxNDg6XFx0XFx0XFx0XFx0Y2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKiljaHVuay1cXHUwMDNlY2h1bmtfZW5kO1xcbiAxNDk6XFx0XFx0XFx0XFx0LyogRm9yY2UgY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlZGF0YSB0byBjaHVuay1cXHUwMDNlY2h1bmtfZW5kLiAgKi9cXG4gMTUwOlxcdFxcdFxcdFxcdHNrYl9wdWxsKGNodW5rLVxcdTAwM2Vza2IsIGNodW5rLVxcdTAwM2VjaHVua19lbmQgLSBjaHVuay1cXHUwMDNlc2tiLVxcdTAwM2VkYXRhKTtcXG4gMTUxOlxcdFxcdFxcdFxcdC8qIFdlIGFyZSBndWFyYW50ZWVkIHRvIHB1bGwgYSBTQ1RQIGhlYWRlci4gKi9cXG4gMTUyOlxcdFxcdFxcdH1cXG4gMTUzOlxcdFxcdH1cXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0LyogRG8gd2UgbmVlZCB0byB0YWtlIHRoZSBuZXh0IHBhY2tldCBvdXQgb2YgdGhlIHF1ZXVlIHRvIHByb2Nlc3M/ICovXFxuIDE1NjpcXHRcXHRpZiAoIWNodW5rKSB7XFxuIDE1NzpcXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcXG4gMTU4OlxcdFxcbiAxNTk6XFx0bmV4dF9jaHVuazpcXG4gMTYwOlxcdFxcdFxcdC8qIElzIHRoZSBxdWV1ZSBlbXB0eT8gICovXFxuIDE2MTpcXHRcXHRcXHRlbnRyeSA9IHNjdHBfbGlzdF9kZXF1ZXVlKFxcdTAwMjZxdWV1ZS1cXHUwMDNlaW5fY2h1bmtfbGlzdCk7XFxuIDE2MjpcXHRcXHRcXHRpZiAoIWVudHJ5KVxcbiAxNjM6XFx0XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDE2NDpcXHRcXG4gMTY1OlxcdFxcdFxcdGNodW5rID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHNjdHBfY2h1bmssIGxpc3QpO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRcXHRpZiAoc2tiX2lzX2dzbyhjaHVuay1cXHUwMDNlc2tiKSBcXHUwMDI2XFx1MDAyNiBza2JfaXNfZ3NvX3NjdHAoY2h1bmstXFx1MDAzZXNrYikpIHtcXG4gMTY4OlxcdFxcdFxcdFxcdC8qIEdTTy1tYXJrZWQgc2ticyBidXQgd2l0aG91dCBmcmFncywgaGFuZGxlXFxuIDE2OTpcXHRcXHRcXHRcXHQgKiB0aGVtIG5vcm1hbGx5XFxuIDE3MDpcXHRcXHRcXHRcXHQgKi9cXG4gMTcxOlxcdFxcdFxcdFxcdGlmIChza2Jfc2hpbmZvKGNodW5rLVxcdTAwM2Vza2IpLVxcdTAwM2VmcmFnX2xpc3QpXFxuIDE3MjpcXHRcXHRcXHRcXHRcXHRjaHVuay1cXHUwMDNlaGVhZF9za2IgPSBjaHVuay1cXHUwMDNlc2tiO1xcbiAxNzM6XFx0XFxuIDE3NDpcXHRcXHRcXHRcXHQvKiBza2JzIHdpdGggXFxcImNvdmVyIGxldHRlclxcXCIgKi9cXG4gMTc1OlxcdFxcdFxcdFxcdGlmIChjaHVuay1cXHUwMDNlaGVhZF9za2IgXFx1MDAyNlxcdTAwMjYgY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlZGF0YV9sZW4gPT0gY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlbGVuKSB7XFxuIDE3NjpcXHRcXHRcXHRcXHRcXHRpZiAoV0FSTl9PTighc2tiX3NoaW5mbyhjaHVuay1cXHUwMDNlc2tiKS1cXHUwMDNlZnJhZ19saXN0KSkge1xcbiAxNzc6XFx0XFx0XFx0XFx0XFx0XFx0X19TQ1RQX0lOQ19TVEFUUyhkZXZfbmV0KGNodW5rLVxcdTAwM2Vza2ItXFx1MDAzZWRldiksXFxuIDE3ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgU0NUUF9NSUJfSU5fUEtUX0RJU0NBUkRTKTtcXG4gMTc5OlxcdFxcdFxcdFxcdFxcdFxcdHNjdHBfY2h1bmtfZnJlZShjaHVuayk7XFxuIDE4MDpcXHRcXHRcXHRcXHRcXHRcXHRnb3RvIG5leHRfY2h1bms7XFxuIDE4MTpcXHRcXHRcXHRcXHRcXHR9XFxuIDE4MjpcXHRcXHRcXHRcXHRcXHRjaHVuay1cXHUwMDNlc2tiID0gc2tiX3NoaW5mbyhjaHVuay1cXHUwMDNlc2tiKS1cXHUwMDNlZnJhZ19saXN0O1xcbiAxODM6XFx0XFx0XFx0XFx0fVxcbiAxODQ6XFx0XFx0XFx0fVxcbiAxODU6XFx0XFxuIDE4NjpcXHRcXHRcXHRpZiAoY2h1bmstXFx1MDAzZWFzb2MpXFxuIDE4NzpcXHRcXHRcXHRcXHRzb2NrX3Jwc19zYXZlX3J4aGFzaChjaHVuay1cXHUwMDNlYXNvYy1cXHUwMDNlYmFzZS5zaywgY2h1bmstXFx1MDAzZXNrYik7XFxuIDE4ODpcXHRcXG4gMTg5OlxcdFxcdFxcdHF1ZXVlLVxcdTAwM2Vpbl9wcm9ncmVzcyA9IGNodW5rO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1NDo0NS43NTcyNTY5MTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc1MjM3ODkzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgU0NUUCBDaHVuayBIZWFkZXIgVmFsaWRhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTGluZSAxNDgtMTUwIGNhdWdodCBteSBhdHRlbnRpb24gYmVjYXVzZSB0aGUgc2NlbmFyaW8gZGVzY3JpYmVkIOKAkyB3aGVyZSBgY2h1bmstXHUwMDNlY2h1bmtfZW5kYCBjb3VsZCBlZmZlY3RpdmVseSBiZSBlYXJsaWVyIHRoYW4gYGNodW5rLVx1MDAzZXNrYi1cdTAwM2VkYXRhYCwgbGVhZGluZyB0byBhIG5lZ2F0aXZlIG9mZnNldCBpbiBgc2tiX3B1bGxgIOKAkyBpbW1lZGlhdGVseSBmbGFncyBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24uIElmIGBudG9ocyhjaC1cdTAwM2VsZW5ndGgpYCBpcyBsZXNzIHRoYW4gYHNpemVvZigqY2gpYCwgdGhhdCBpcywgbGVzcyB0aGFuIDQgYnl0ZXMsIGBza2JfcHVsbGAgd2l0aCBhIG5lZ2F0aXZlIG51bWJlciBpcyBhIHJlY2lwZSBmb3IgZGlzYXN0ZXI6IGVpdGhlciBvdXQtb2YtYm91bmRzIGFjY2VzcywgYW4gaW5maW5pdGUgbG9vcCwgb3Igc29tZSBvdGhlciBzZXJpb3VzIHByb2JsZW0uXG5cblNvLCB0aGlzIHBhdGNoIGZpeGVzIGFuIGltcG9ydGFudCBwYWNrZXQgdmFsaWRhdGlvbiBhbmQgYm91bmRzIGNoZWNraW5nIGJ1ZyBpbiBTQ1RQIHByb3RvY29sIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYWRkcmVzc2luZyBhIHNpdHVhdGlvbiB3aGVyZSBhIG1hbGZvcm1lZCBuZXR3b3JrIHBhY2tldCAoaW52YWxpZCBjaHVuayBsZW5ndGgpIGxlYWRzIHRvIGJ1ZmZlciB1bmRlcmZsb3cuIFRoZSBrZXkgZml4IGlzIHNldHRpbmcgYGNodW5rLVx1MDAzZXBkaXNjYXJkID0gMWAgaWYgYG50b2hzKGNoLVx1MDAzZWxlbmd0aCkgXHUwMDNjIHNpemVvZigqY2gpYCwgbWFya2luZyB0aGUgY2h1bmsgZm9yIGRpc2NhcmQgYW5kIHByZXZlbnRpbmcgaW5jb3JyZWN0IHBvaW50ZXIgbWFuaXB1bGF0aW9uLlxuXG5Ob3csIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5Li4uIExldCdzIGNoZWNrOlxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgbm90IGJlIGluaXRpYWxpemVkOiBOby5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlczogTm8sIGBjaC1cdTAwM2VsZW5ndGhgIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlIGluY29taW5nIG5ldHdvcmsgZGF0YS5cbjMuICBBbGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI6IE5vLlxuNC4gIEJvdW5kcyBjaGVja3MvbGVuZ3RocyBsZWFkaW5nIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZSBhY2Nlc3M6IE5vLCBhcyBpbmNvbWluZyBza2JzIGhhdmUgaW5pdGlhbGl6ZWQgYnl0ZXMgZnJvbSBuZXR3b3JrIC8gc2tiIGFsbG9jYXRpb25zLlxuXG5UaGVyZWZvcmUsIHRoaXMgaXNuJ3QgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWUuIFRoZSBwcm9ibGVtIGFkZHJlc3NlZCBpcyBhIG1lbW9yeSBzYWZldHkgaXNzdWUuIFRoZSBwYXRjaCBwcmV2ZW50cyB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YTsgaXQncyBhICpyZXN1bHQqIG9mIG1hbGZvcm1lZCBuZXR3b3JrIGRhdGEuIEl0IHByZXZlbnRzIHBvdGVudGlhbGx5IHJlYWRpbmcgZGF0YSAqb3V0c2lkZSogb2Ygd2hhdCB0aGUgU0tCIGNvbnRhaW5zLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCB0byBjYXRjaCB0aGlzIGFzIGl0IGNvdmVycyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyAvIHNrYiBwb2ludGVyIGNvcnJ1cHRpb24sIHdoaWNoIGFyZSB0aGUgbWFpbiByaXNrcyBmcm9tIHRoaXMgYnVnLlxuXG5LTVNBTiBpc24ndCByZWxldmFudCBoZXJlLiBUaGUgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBsZWFrIGFueSB0byB1c2VyIHNwYWNlLiBUaGVyZSdzIG5vIHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm8gYGNvcHlfdG9fdXNlcmAsIG5vIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhbnkgb3RoZXIgS01TQU4gcmVsZXZhbnQgaXNzdWVzLiBUaGUgcGF0Y2ggc2ltcGx5IHZhbGlkYXRlcyB0aGUgY2h1bmsgaGVhZGVyIGxlbmd0aC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhbiBpbnB1dCB2YWxpZGF0aW9uOiBgaWYgKHVubGlrZWx5KG50b2hzKGNoLVx1MDAzZWxlbmd0aCkgXHUwMDNjIHNpemVvZigqY2gpKSlgLiBUaGlzIHByZXZlbnRzIHRoZSBiYWQgc2NlbmFyaW8gZGVzY3JpYmVkIGVhcmxpZXIuIFRoaXMgaXMgYSB2ZXJ5IHN0YW5kYXJkIGFuZCBuZWNlc3NhcnkgY2hlY2suXG5cblNvLCBpbiBjb25jbHVzaW9uLCBOZWVkc0tNU0FOID0gZmFsc2UuIFRoaXMgaXMgYSBjbGFzc2ljIEtBU0FOIHNpdHVhdGlvbiwgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLlxuXG5MZXQncyBub3cgY2xlYXJseSBjb250cmFzdCBLQVNBTiB2cyBLTVNBTiB0byBqdXN0aWZ5IHRoaXMuIFRoaXMgZml4IGFkZHJlc3NlcyBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3Nlcy9za2IgcG9pbnRlciBjb3JydXB0aW9uIGZyb20gbWFsZm9ybWVkIHBhY2tldHMsIHNxdWFyZWx5IGluIEtBU0FOJ3MgZG9tYWluLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnZvbHZlZCBvciBleHBvc2VkLCBzbyBubyBLTVNBTiBpcyBuZWVkZWQuIFRoaXMgaXMgYSBib3VuZHMgY2hlY2suXG5gYGBjcHBcbnNldC1yZXN1bHRzXG5gYGBcblxuXG4iLCJJbnB1dFRva2VucyI6NTY5NCwiT3V0cHV0VG9rZW5zIjoyMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QyMTo1NTo0My4yODEwNDkzODFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBzY3RwX2lucV9wb3AoKWAgZm9yIGluY29taW5nIFNDVFAgY2h1bmtzIHdpdGggYW4gaW52YWxpZCBsZW5ndGggc21hbGxlciB0aGFuIHRoZSBTQ1RQIGNodW5rIGhlYWRlciAoYHNpemVvZigqY2gpYCkuIFByZXZpb3VzbHksIGEgY2h1bmsgbGVuZ3RoIFxcdTAwM2MgNCBjb3VsZCBjYXVzZSBgY2h1bmstXFx1MDAzZWNodW5rX2VuZGAgdG8gcHJlY2VkZSBgY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlZGF0YWAsIGxlYWRpbmcgdG8gYSBuZWdhdGl2ZSBgc2tiX3B1bGwoKWAgb2Zmc2V0IGFuZCBza2IgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggcGFja2V0IGNodW5rcy5cXG5cXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWRkcmVzc2VzIHBhY2tldCB2YWxpZGF0aW9uIGFuZCBib3VuZHMgY2hlY2tpbmcgb24gaW5jb21pbmcgbmV0d29yayBza2IgZGF0YS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBpcyBkZXRlY3RlZCBieSBLQVNBTiBhbmQga2VybmVsIGFzc2VydGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBuZXcgc3RydWN0IGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSB2YWxpZGF0aW9uIGNoZWNrIGluIGBzY3RwX2lucV9wb3AoKWAgZm9yIGluY29taW5nIFNDVFAgY2h1bmtzIHdpdGggYW4gaW52YWxpZCBsZW5ndGggc21hbGxlciB0aGFuIHRoZSBTQ1RQIGNodW5rIGhlYWRlciAoYHNpemVvZigqY2gpYCkuIFByZXZpb3VzbHksIGEgY2h1bmsgbGVuZ3RoIFxcdTAwM2MgNCBjb3VsZCBjYXVzZSBgY2h1bmstXFx1MDAzZWNodW5rX2VuZGAgdG8gcHJlY2VkZSBgY2h1bmstXFx1MDAzZXNrYi1cXHUwMDNlZGF0YWAsIGxlYWRpbmcgdG8gYSBuZWdhdGl2ZSBgc2tiX3B1bGwoKWAgb2Zmc2V0IGFuZCBza2IgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gaXRlcmF0aW5nIHRocm91Z2ggcGFja2V0IGNodW5rcy5cXG5cXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWRkcmVzc2VzIHBhY2tldCB2YWxpZGF0aW9uIGFuZCBib3VuZHMgY2hlY2tpbmcgb24gaW5jb21pbmcgbmV0d29yayBza2IgZGF0YS4gQW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGFjY2VzcyBhcmlzaW5nIGZyb20gdGhpcyBsb2dpYyBpcyBkZXRlY3RlZCBieSBLQVNBTiBhbmQga2VybmVsIGFzc2VydGlvbnMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBuZXcgc3RydWN0IGFsbG9jYXRpb25zLCBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbptc6[1] Phase: Succeeded StartedAt: 2026-08-27 21:55:55 +0000 UTC FinishedAt: 2026-08-27 21:55:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 21:55:55 +0000 UTC FinishedAt: 2026-08-27 21:55:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2] Phase: Running StartedAt: 2026-08-27 21:55:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-27 21:55:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 21:55:55 +0000 UTC FinishedAt: 2026-08-27 21:56:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 21:55:55 +0000 UTC FinishedAt: 2026-08-27 21:55:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowbptc6/series-workflowbptc6-convert-artifact-2606956773/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 21:56:05 +0000 UTC FinishedAt: 2026-08-27 22:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 21:56:05 +0000 UTC FinishedAt: 2026-08-27 22:16:19 +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:*9f7c2c17-2e02-439e-8a91-7248aad0adb8,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-workflowbptc6/series-workflowbptc6-convert-artifact-2606956773/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": "4c99bfa1-1a36-4a08-a7a3-1de2d73908b5", "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-workflowbptc6/series-workflowbptc6-build-action-3387292939/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 21:56:05 +0000 UTC FinishedAt: 2026-08-27 22:15:59 +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:*9f7c2c17-2e02-439e-8a91-7248aad0adb8,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-workflowbptc6/series-workflowbptc6-convert-artifact-2606956773/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": "4c99bfa1-1a36-4a08-a7a3-1de2d73908b5", "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-workflowbptc6/series-workflowbptc6-build-action-3387292939/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 22:16:19 +0000 UTC FinishedAt: 2026-08-27 22:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 22:16:19 +0000 UTC FinishedAt: 2026-08-27 22:16:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 22:16:19 +0000 UTC FinishedAt: 2026-08-27 22:16:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 22:16:19 +0000 UTC FinishedAt: 2026-08-27 22:16:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowbptc6/series-workflowbptc6-convert-artifact-4128938688/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 22:16:29 +0000 UTC FinishedAt: 2026-08-27 22:18:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 22:16:29 +0000 UTC FinishedAt: 2026-08-27 22:18:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4c99bfa1-1a36-4a08-a7a3-1de2d73908b5,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-workflowbptc6/series-workflowbptc6-build-action-3387292939/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-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 22:18:23 +0000 UTC FinishedAt: 2026-08-27 22:18:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 22:18:23 +0000 UTC FinishedAt: 2026-08-27 22:18:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 22:18:23 +0000 UTC FinishedAt: 2026-08-27 22:34:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 22:18:23 +0000 UTC FinishedAt: 2026-08-27 22:34:56 +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:*9f7c2c17-2e02-439e-8a91-7248aad0adb8,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-workflowbptc6/series-workflowbptc6-convert-artifact-4128938688/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": "8ba2aa61-789a-4c50-8be5-38055dd370ec", "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-workflowbptc6/series-workflowbptc6-build-action-1152780412/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 22:18:23 +0000 UTC FinishedAt: 2026-08-27 22:34:46 +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:*9f7c2c17-2e02-439e-8a91-7248aad0adb8,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-workflowbptc6/series-workflowbptc6-convert-artifact-4128938688/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": "8ba2aa61-789a-4c50-8be5-38055dd370ec", "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-workflowbptc6/series-workflowbptc6-build-action-1152780412/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 22:34:56 +0000 UTC FinishedAt: 2026-08-27 22:34:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-27 22:34:56 +0000 UTC FinishedAt: 2026-08-27 22:34:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 22:34:56 +0000 UTC FinishedAt: 2026-08-27 22:36:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-27 22:34:56 +0000 UTC FinishedAt: 2026-08-27 22:36:17 +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:*8ba2aa61-789a-4c50-8be5-38055dd370ec,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-workflowbptc6/series-workflowbptc6-build-action-1152780412/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-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Running StartedAt: 2026-08-27 22:36:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Running StartedAt: 2026-08-27 22:36:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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":["sctp_inq_pop"],"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:*4c99bfa1-1a36-4a08-a7a3-1de2d73908b5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8ba2aa61-789a-4c50-8be5-38055dd370ec,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-workflowbptc6/series-workflowbptc6-build-action-3387292939/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-workflowbptc6/series-workflowbptc6-build-action-1152780412/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-27 22:36:27 +0000 UTC FinishedAt: 2026-08-27 22:36:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-27 22:36:27 +0000 UTC FinishedAt: 2026-08-27 22:36:31 +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":["sctp_inq_pop"],"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-workflowbptc6/series-workflowbptc6-convert-artifact-1806342425/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-27 22:36:27 +0000 UTC FinishedAt: 2026-08-27 22:36:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 22:36:27 +0000 UTC FinishedAt: 2026-08-27 22:36:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-27 22:36:27 +0000 UTC FinishedAt: 2026-08-27 22:36:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Running StartedAt: 2026-08-27 22:36:37 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbptc6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_inq_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f967455fb2a5a2079b9eb5823e9ccf359174bf9f","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP","INET"],"series_id":"06fa49bd-e47e-4dd8-b175-0a3987c7a7ee","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Running StartedAt: 2026-08-27 22:36:37 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4c99bfa1-1a36-4a08-a7a3-1de2d73908b5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8ba2aa61-789a-4c50-8be5-38055dd370ec,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-workflowbptc6/series-workflowbptc6-build-action-3387292939/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-workflowbptc6/series-workflowbptc6-build-action-1152780412/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-workflowbptc6/series-workflowbptc6-convert-artifact-1806342425/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil