Name: series-workflow7ls82 Phase: Succeeded StartedAt: 2026-08-27 15:30:52 +0000 UTC FinishedAt: 2026-08-27 19:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[0] Phase: Succeeded StartedAt: 2026-08-27 15:30:52 +0000 UTC FinishedAt: 2026-08-27 15:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 15:30:52 +0000 UTC FinishedAt: 2026-08-27 15:39:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "TEST_XARRAY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "TEST_XARRAY" ], "series_id": "bab1cf7e-e891-46fb-ad9b-18307bd59c6e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "xas_find" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtURVNUX1hBUlJBWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIFhBcnJheSBpdGVyYXRvciAoYHhhc19maW5kYCkgd2hlcmUgYHhhcy1cdTAwM2V4YV9vZmZzZXRgIHdhcyBub3QgY29ycmVjdGx5IHVwZGF0ZWQgd2hlbiBpdGVyYXRpbmcgb3ZlciBtdWx0aS1pbmRleCBlbnRyaWVzIGluIG5vZGVzIHdpdGggYSBub24temVybyBzaGlmdC4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBpdGVyYXRpb24gcmVzdWx0cywgaW5maW5pdGUgbG9vcHMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2l0aGluIHRoZSBYQXJyYXkgbm9kZSYjMzk7cyBzbG90cyBhcnJheS4gVGhlc2UgaXNzdWVzIGFyZSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgbWVtb3J5IHNhZmV0eSAob3V0LW9mLWJvdW5kcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHhhc19maW5kYCB3aGVuIGhhbmRsaW5nIG11bHRpLWluZGV4IGVudHJpZXMgaW4gWEFycmF5LCB3aGljaCBpcyBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgQVBJIHVzZWQgYWNyb3NzIHRoZSBrZXJuZWwuIEl0IGFsc28gYWRkcyBhIG5ldyB0ZXN0IGNhc2UgdG8gYHRlc3RfeGFycmF5YC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxNTozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdkNzRlNWI2NjQ1ZWE2M2I4NzVlMmMyNjk3ZmRlNTkyMDhjNjcxOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxNTozMjowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9saWIvdGVzdF94YXJyYXkuYyBiL2xpYi90ZXN0X3hhcnJheS5jXG5pbmRleCA1Y2EwYWVmZWU5YWE1Li5jZGE3MjQ1ZTQ3NzE2IDEwMDY0NFxuLS0tIGEvbGliL3Rlc3RfeGFycmF5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X3hhcnJheS5jXG5AQCAtMTI0Nyw2ICYjNDM7MTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzQoc3RydWN0IHhhcnJheSAqeGEpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbiYjNDM7XHRYQV9TVEFURSh4YXMsIHhhLCAxMDApO1xuJiM0MztcdFhBX1NUQVRFX09SREVSKHNwbGl0LCB4YSwgMCwgMCk7XG4mIzQzO1x0dm9pZCAqZW50cnk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpO1xuJiM0MztcbiYjNDM7XHQvKiAoMSkgT3JkZXItNyBlbnRyeSAoMC0xMjcpIHdpdGggYWRqYWNlbnQgZW50cnkgYXQgMTI4LCBzdGFydGluZyBhdCAxMDAgKi9cbiYjNDM7XHR4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuJiM0MztcbiYjNDM7XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7XG4mIzQzO1xuJiM0MztcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHhhX2VyYXNlX2luZGV4KHhhLCAxMjgpO1xuJiM0MztcdHhhX2VyYXNlX2luZGV4KHhhLCAwKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuJiM0MztcbiYjNDM7XHQvKiAoMikgU3BsaXR0aW5nIGEgbXVsdGktaW5kZXggZW50cnkgYWZ0ZXIgYSBsb29rdXAgYmVnaW5zIGluc2lkZSBpdCAqL1xuJiM0MztcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0eGFzX3NldChcdTAwMjZ4YXMsIDEwMCk7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHhhc19zcGxpdF9hbGxvYyhcdTAwMjZzcGxpdCwgeGFfbWtfaW5kZXgoMCksIDcsIEdGUF9LRVJORUwpO1xuJiM0MztcdHhhc19sb2NrKFx1MDAyNnNwbGl0KTtcbiYjNDM7XHR4YXNfc3BsaXQoXHUwMDI2c3BsaXQsIHhhX21rX2luZGV4KDApLCA3KTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMjg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0X194YV9zdG9yZSh4YSwgaSwgeGFfbWtfaW5kZXgoaSksIDApO1xuJiM0MztcdHhhc191bmxvY2soXHUwMDI2c3BsaXQpO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xuJiM0MztcbiYjNDM7XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHR4YV9kZXN0cm95KHhhKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kXzEoc3RydWN0IHhhcnJheSAqeGEpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBpLCBqLCBrO1xuQEAgLTEzNzAsNiAmIzQzOzE0MzEsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kKHN0cnVjdCB4YXJyYXkgKnhhKVxuIFx0XHRjaGVja19tdWx0aV9maW5kXzEoeGEsIGkpO1xuIFx0Y2hlY2tfbXVsdGlfZmluZF8yKHhhKTtcbiBcdGNoZWNrX211bHRpX2ZpbmRfMyh4YSk7XG4mIzQzO1x0Y2hlY2tfbXVsdGlfZmluZF80KHhhKTtcbiB9XG4gXG4gLyogU2VlIGZpbmRfc3dhcF9lbnRyeSgpIGluIG1tL3NobWVtLmMgKi9cbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcbmluZGV4IDlhOGI0OTE2NTQwY2YuLjk4MDMyNGQ2ODZiZDAgMTAwNjQ0XG4tLS0gYS9saWIveGFycmF5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi94YXJyYXkuY1xuQEAgLTE0MDYsOSAmIzQzOzE0MDYsMTEgQEAgdm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIFx0XHRlbnRyeSA9IHhhc19sb2FkKHhhcyk7XG4gXHRcdGlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLVx1MDAzZXhhX25vZGUpKVxuIFx0XHRcdHJldHVybiBlbnRyeTtcbi1cdH0gZWxzZSBpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgeGFzLVx1MDAzZXhhX29mZnNldCAhPSAoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAyNiBYQV9DSFVOS19NQVNLKSkge1xuLVx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gKCh4YXMtXHUwMDNleGFfaW5kZXggLSAxKSBcdTAwMjYgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTtcbiYjNDM7XHR9IGVsc2UgaWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSkge1xuJiM0MztcdFx0aWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdClcbiYjNDM7XHRcdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVx1MDAzZXhhX2luZGV4IC0gMSkgXHUwMDI2IFhBX0NIVU5LX01BU0spICYjNDM7IDE7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpO1xuIFx0fVxuIFxuIFx0eGFzX25leHRfb2Zmc2V0KHhhcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTU6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtURVNUX1hBUlJBWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB4YXNfZmluZGAgd2hlbiBoYW5kbGluZyBtdWx0aS1pbmRleCBlbnRyaWVzIGluIFhBcnJheSwgd2hpY2ggaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlIEFQSSB1c2VkIGFjcm9zcyB0aGUga2VybmVsLiBJdCBhbHNvIGFkZHMgYSBuZXcgdGVzdCBjYXNlIHRvIGB0ZXN0X3hhcnJheWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZDc0ZTViNjY0NWVhNjNiODc1ZTJjMjY5N2ZkZTU5MjA4YzY3MTlhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMTU6MzI6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9saWIvdGVzdF94YXJyYXkuYyBiL2xpYi90ZXN0X3hhcnJheS5jCmluZGV4IDVjYTBhZWZlZTlhYTUuLmNkYTcyNDVlNDc3MTYgMTAwNjQ0Ci0tLSBhL2xpYi90ZXN0X3hhcnJheS5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X3hhcnJheS5jCkBAIC0xMjQ3LDYgJiM0MzsxMjQ3LDY3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfMyhzdHJ1Y3QgeGFycmF5ICp4YSkKIAl9CiB9CiAKJiM0MztzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzQoc3RydWN0IHhhcnJheSAqeGEpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJCiYjNDM7CVhBX1NUQVRFKHhhcywgeGEsIDEwMCk7CiYjNDM7CVhBX1NUQVRFX09SREVSKHNwbGl0LCB4YSwgMCwgMCk7CiYjNDM7CXZvaWQgKmVudHJ5OwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CS8qICgxKSBPcmRlci03IGVudHJ5ICgwLTEyNykgd2l0aCBhZGphY2VudCBlbnRyeSBhdCAxMjgsIHN0YXJ0aW5nIGF0IDEwMCAqLwomIzQzOwl4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApOwomIzQzOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpOwomIzQzOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJeGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7CiYjNDM7CXhhX2VyYXNlX2luZGV4KHhhLCAwKTsKJiM0MzsJWEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTsKJiM0MzsKJiM0MzsJLyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi8KJiM0MzsJeGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTsKJiM0MzsKJiM0MzsJeGFzX3NldCgmYW1wO3hhcywgMTAwKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXhhc19zcGxpdF9hbGxvYygmYW1wO3NwbGl0LCB4YV9ta19pbmRleCgwKSwgNywgR0ZQX0tFUk5FTCk7CiYjNDM7CXhhc19sb2NrKCZhbXA7c3BsaXQpOwomIzQzOwl4YXNfc3BsaXQoJmFtcDtzcGxpdCwgeGFfbWtfaW5kZXgoMCksIDcpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTI4OyBpJiM0MzsmIzQzOykKJiM0MzsJCV9feGFfc3RvcmUoeGEsIGksIHhhX21rX2luZGV4KGkpLCAwKTsKJiM0MzsJeGFzX3VubG9jaygmYW1wO3NwbGl0KTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpOwomIzQzOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJeGFfZGVzdHJveSh4YSk7CiYjNDM7CVhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZF8xKHN0cnVjdCB4YXJyYXkgKnhhKQogewogCXVuc2lnbmVkIGxvbmcgaSwgaiwgazsKQEAgLTEzNzAsNiAmIzQzOzE0MzEsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kKHN0cnVjdCB4YXJyYXkgKnhhKQogCQljaGVja19tdWx0aV9maW5kXzEoeGEsIGkpOwogCWNoZWNrX211bHRpX2ZpbmRfMih4YSk7CiAJY2hlY2tfbXVsdGlfZmluZF8zKHhhKTsKJiM0MzsJY2hlY2tfbXVsdGlfZmluZF80KHhhKTsKIH0KIAogLyogU2VlIGZpbmRfc3dhcF9lbnRyeSgpIGluIG1tL3NobWVtLmMgKi8KZGlmZiAtLWdpdCBhL2xpYi94YXJyYXkuYyBiL2xpYi94YXJyYXkuYwppbmRleCA5YThiNDkxNjU0MGNmLi45ODAzMjRkNjg2YmQwIDEwMDY0NAotLS0gYS9saWIveGFycmF5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3hhcnJheS5jCkBAIC0xNDA2LDkgJiM0MzsxNDA2LDExIEBAIHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCkKIAkJZW50cnkgPSB4YXNfbG9hZCh4YXMpOwogCQlpZiAoZW50cnkgfHwgeGFzX25vdF9ub2RlKHhhcy0mZ3Q7eGFfbm9kZSkpCiAJCQlyZXR1cm4gZW50cnk7Ci0JfSBlbHNlIGlmICgheGFzLSZndDt4YV9ub2RlLSZndDtzaGlmdCAmYW1wOyZhbXA7Ci0JCSAgICB4YXMtJmd0O3hhX29mZnNldCAhPSAoeGFzLSZndDt4YV9pbmRleCAmYW1wOyBYQV9DSFVOS19NQVNLKSkgewotCQl4YXMtJmd0O3hhX29mZnNldCA9ICgoeGFzLSZndDt4YV9pbmRleCAtIDEpICZhbXA7IFhBX0NIVU5LX01BU0spICYjNDM7IDE7CiYjNDM7CX0gZWxzZSBpZiAoeGFzLSZndDt4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtJmd0O3hhX2luZGV4LCB4YXMtJmd0O3hhX25vZGUpKSB7CiYjNDM7CQlpZiAoIXhhcy0mZ3Q7eGFfbm9kZS0mZ3Q7c2hpZnQpCiYjNDM7CQkJeGFzLSZndDt4YV9vZmZzZXQgPSAoKHhhcy0mZ3Q7eGFfaW5kZXggLSAxKSAmYW1wOyBYQV9DSFVOS19NQVNLKSAmIzQzOyAxOwomIzQzOwkJZWxzZQomIzQzOwkJCXhhcy0mZ3Q7eGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtJmd0O3hhX2luZGV4LCB4YXMtJmd0O3hhX25vZGUpOwogCX0KIAogCXhhc19uZXh0X29mZnNldCh4YXMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIFhBcnJheSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgd2UmIzM5O3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiB0byB0aGUgWEFycmF5IGNvZGUsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgYGxpYi90ZXN0X3hhcnJheS5jYCBhbmQgYGxpYi94YXJyYXkuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgeGFzX2ZpbmRgIGZ1bmN0aW9uIGluIGBsaWIveGFycmF5LmNgLCBhbmQgYSBuZXcgdGVzdCwgYGNoZWNrX211bHRpX2ZpbmRfNGAsIGFkZGVkIHRvIHRoZSB0ZXN0IGZpbGUuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHJlY29nbml6ZSB0aGF0IGB4YXNfZmluZGAgaXMgYSBjcml0aWNhbCBBUEkgZW50cnkgcG9pbnQgZm9yIFhBcnJheS4gQ29uc2lkZXJpbmcgaG93IGV4dGVuc2l2ZWx5IFhBcnJheSBpcyB1c2VkIHdpdGhpbiB0aGUga2VybmVsLCBhbnkgY2hhbmdlIGhlcmUgZGVtYW5kcyBjYXJlZnVsIHNjcnV0aW55LgoKVGhlIGFjdHVhbCBjb2RlIGNoYW5nZSBpbiBgeGFzX2ZpbmRgIGxvb2tzIGxpa2UgYSBjb3JyZWN0aW9uIHRvIGhvdyB0aGUgb2Zmc2V0IGlzIGNhbGN1bGF0ZWQsIHdoaWNoIGRlcGVuZHMgb24gd2hldGhlciB0aGUgbm9kZSBpcyBzaGlmdGVkIG9yIG5vdC4gVGhlIG9yaWdpbmFsIGNvZGUgc2VlbXMgdG8gaGF2ZSBhbiBlZGdlIGNhc2UgZm9yIGhhbmRsaW5nIHRoZSBvZmZzZXQgd2hlbiBub3Qgc2hpZnRlZCwgYW5kIHRoaXMgcGF0Y2ggYXBwZWFycyB0byBiZSB0cnlpbmcgdG8gZml4IGl0IGFuZCB1c2UgYGdldF9vZmZzZXRgIGFsd2F5cy4gTm93LCB0aGUgbG9naWMgaXMgYmVpbmcgdXBkYXRlZC4KClRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXJvdW5kIHRoZSB0ZXN0OyBpdCYjMzk7cyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSWAuIFRoYXQgdGVsbHMgbWUgdGhhdCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIHRlc3QgaXMgYSBtdWx0aS1maW5kIHNjZW5hcmlvLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfWEFSUkFZX01VTFRJYCBpcyBhIGxlZ2l0aW1hdGUgY29uZmlndXJhdGlvbiBvcHRpb24uIElmIGl0IGlzLCB0aGVuIHRoZSB0ZXN04oCZcyBwcmVzZW5jZSBpbXBsaWVzIGEgc3BlY2lmaWMsIHBlcmhhcHMgb3B0aW1pemVkLCBmdW5jdGlvbmFsaXR5IHRoYXTigJlzIGJlaW5nIGV4ZXJjaXNlZCBieSB0aGlzIGNoYW5nZSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBicm9hZGVyIFhBcnJheSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgS2NvbmZpZyB0byBjaGVjay4gSSYjMzk7bGwgbmVlZCB0byByZWFsbHkgcnVuIHRoaXMgcGF0Y2ggdGhyb3VnaCBpdHMgcGFjZXMgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJiMzOTt0IHJlZ3Jlc3MgcGVyZm9ybWFuY2Ugb3IgaW50cm9kdWNlIHN1YnRsZSBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYQVJSQVlfTVVMVEkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWc9MzQ4PWNvbmZpZyBJTlRFUlZBTF9UUkVFX1NQQU5fSVRFUlxuLS1cbmxpYi9LY29uZmlnLTM1MS1cbmxpYi9LY29uZmlnOjM1Mjpjb25maWcgWEFSUkFZX01VTFRJXG5saWIvS2NvbmZpZy0zNTMtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAwMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDb25maXJtaW5nIGFuZCBEZWVwIERpdmluZyoqCgpBbHJpZ2h0LCB5ZXAsIGBYQVJSQVlfTVVMVElgIGlzIGRlZmluaXRlbHkgYSBsZWdpdCBjb25maWcgb3B0aW9uLiBHb29kLiBOb3csIHRpbWUgdG8gZHJpbGwgZG93bi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGxpYi94YXJyYXkuY2AgYW5kIHplcm8gaW4gb24gdGhlIGB4YXNfZmluZGAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IHRoaXMgYWxsIHdvcmtzLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGVtZW50YXRpb24gd2l0aCBgWEFSUkFZX01VTFRJYCBlbmFibGVkIGlzIGNydWNpYWwuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGhhbmRsZXMgbXVsdGlwbGUgdmFsdWVzIG9yIGtleXMuLi4gaXMgaXQgdXNpbmcgYSBzZXBhcmF0ZSBtZXRhZGF0YSBzdHJ1Y3R1cmU/IERvZXMgaXQgYWZmZWN0IGhvdyB0aGUgc2VhcmNoIGlzIHBlcmZvcm1lZD8gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuIFRpbWUgdG8gcHV0IG9uIG15IHJlYWRpbmcgZ2xhc3NlcywgYW5kIGdldCB0byB3b3JrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgXFwqeGFzX2ZpbmRcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC94YXJyYXkuaD0xNTQzPXZvaWQgKnhhc19zdG9yZShzdHJ1Y3QgeGFfc3RhdGUgKiwgdm9pZCAqZW50cnkpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNTQ0OnZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqLCB1bnNpZ25lZCBsb25nIG1heCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE1NDUtdm9pZCAqeGFzX2ZpbmRfY29uZmxpY3Qoc3RydWN0IHhhX3N0YXRlICopO1xuLS1cbmxpYi94YXJyYXkuYz0xMzc1PUVYUE9SVF9TWU1CT0xfR1BMKF9feGFzX25leHQpO1xuLS1cbmxpYi94YXJyYXkuYy0xMzkyLSAqL1xubGliL3hhcnJheS5jOjEzOTM6dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxubGliL3hhcnJheS5jLTEzOTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipGdXp6aW5nIHRoZSBgeGFzX2ZpbmRgIEZ1bmN0aW9uIGluIFhBcnJheSoqCgpPa2F5LCBzbyBgeGFzX2ZpbmRgIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBhbmQgcGFydCBvZiB0aGUgWEFycmF5IEFQSS4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG1lYW4sIGlmIGl0JiMzOTtzIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEksIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBwb2ludCBvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBvdXRzaWRlIHdvcmxkLCBhbmQgdGhhdCBtYWtlcyBpdCBhIHByaW1lIHRhcmdldCBmb3IgdnVsbmVyYWJpbGl0eSBkZXRlY3Rpb24uIEnigJlsbCBtYWtlIGEgbm90ZSB0aGF0IGB4YXNfZmluZGAgaXMgdGhlIHByaW1hcnkgZm9jdXMsIHRoZSBrZXkgc3ltYm9sIHRvIGNvbmNlbnRyYXRlIG9uLgoKVGhlIGNvbmZpZ3VyYXRpb24sIGFzIGl0IHN0YW5kcywgc2VlbXMgdG8gYmUgYFhBUlJBWV9NVUxUSWAuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBvciB0ZXN0IGFnYWluc3QuCgpMZXQmIzM5O3MgZG91YmxlIGNoZWNrIHdoZXJlIHRoZSB0ZXN0IGFjdHVhbGx5IGxpdmVzLCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFJpZ2h0LCBpdCYjMzk7cyBpbiBgbGliL3Rlc3RfeGFycmF5LmNgLiBOb3csIEkgd29uZGVyIGlmIHRoZSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlIGhhcyBpdHMgb3duIGNvbmZpZyBvcHRpb25zLCBwYXJ0aWN1bGFybHkgZm9yIGB0ZXN0X3hhcnJheWAgaXRzZWxmPyBHb3R0YSBrZWVwIGFuIGV5ZSBvdXQgZm9yIHRob3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBURVNUX1hBUlJBWSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0yNTU3PWNvbmZpZyBURVNUX0JJVE1BUFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTI1NjMtXG5saWIvS2NvbmZpZy5kZWJ1ZzoyNTY0OmNvbmZpZyBURVNUX1hBUlJBWVxubGliL0tjb25maWcuZGVidWctMjU2NS1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgdGhlIFhBcnJheSBjb2RlIGF0IHJ1bnRpbWVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxNTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODI2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhpbmtpbmcgb24gVGVzdCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHllcywgd2UgYWJzb2x1dGVseSBuZWVkIGBURVNUX1hBUlJBWWAgaW4gdGhlIG1peCBmb3IgdGhpcyB0ZXN0LiBXZSYjMzk7bGwgaW5jbHVkZSB0aGF0IGltbWVkaWF0ZWx5LiBOb3csIGxldCBtZSBqdXN0IGFkZCB0aGF0LCB5ZXMsIGxldCYjMzk7cyBpbmNsdWRlIGBURVNUX1hBUlJBWWAgaXRzZWxmIHdoZW4gd2UgcnVuIHRoZSB0ZXN0cy4gSG9sZCBvbiBhIHNlY29uZCwgaG93ZXZlci4uLiBgWEFSUkFZX01VTFRJYC4gVGhhdCYjMzk7cyB0aGF0IGhpZGRlbiBjb25maWcsIGEgYm9vbGVhbiwgdHVja2VkIGF3YXksIG5vdCBkaXJlY3RseSBwcm9tcHRlZCBmb3IuIEl0JiMzOTtzIGNsZWFybHkgYmVpbmcgaW5mbHVlbmNlZCBieSBzb21ldGhpbmcgZWxzZS4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3Mgc2V0dGluZyB0aGF0IGZsYWcuIExldCYjMzk7cyBkZWx2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgZGlyZWN0bHkgc2VsZWN0aW5nIGl0LCB3aGljaCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgbWFraW5nIHRoaXMgZGVjaXNpb24gZm9yIHVzLiBUaGF0IGlzIHRoZSBuZXh0IHN0ZXAgdG8gd29yayB0aHJvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxNTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgWEFSUkFZX01VTFRJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTgyNz1jb25maWcgWDg2X1NHWFxuLS1cbmFyY2gveDg2L0tjb25maWctMTgzMi1cdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GTyBpZiBOVU1BXG5hcmNoL3g4Ni9LY29uZmlnOjE4MzM6XHRzZWxlY3QgWEFSUkFZX01VTFRJXG5hcmNoL3g4Ni9LY29uZmlnLTE4MzQtXHRoZWxwXG4tLVxuZnMvS2NvbmZpZz0yNzM9Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbmZzL0tjb25maWc6Mjc1Olx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuZnMvS2NvbmZpZy0yNzYtXG4tLVxubW0vS2NvbmZpZz04NDY9bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuLS1cbm1tL0tjb25maWctODQ5LVx0c2VsZWN0IENPTVBBQ1RJT05cbm1tL0tjb25maWc6ODUwOlx0c2VsZWN0IFhBUlJBWV9NVUxUSVxubW0vS2NvbmZpZy04NTEtXHRzZWxlY3QgTU1fSURcbi0tXG5tbS9LY29uZmlnPTEyMzY9Y29uZmlnIFpPTkVfREVWSUNFXG4tLVxubW0vS2NvbmZpZy0xMjQwLVx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxubW0vS2NvbmZpZzoxMjQxOlx0c2VsZWN0IFhBUlJBWV9NVUxUSVxubW0vS2NvbmZpZy0xMjQyLVxuLS1cbnNvdW5kL2NvcmUvS2NvbmZpZz0xODE9Y29uZmlnIFNORF9DVExfRkFTVF9MT09LVVBcbi0tXG5zb3VuZC9jb3JlL0tjb25maWctMTgzLVx0ZGVmYXVsdCB5XG5zb3VuZC9jb3JlL0tjb25maWc6MTg0Olx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuc291bmQvY29yZS9LY29uZmlnLTE4NS1cdGhlbHBcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTEwNj1jb25maWcgS1ZNX0dVRVNUX01FTUZEXG52aXJ0L2t2bS9LY29uZmlnOjEwNzogICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxudmlydC9rdm0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTU6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ4MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYQVJSQVlfTVVMVEkgQ29uZmlndXJhdGlvbjogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGBYQVJSQVlfTVVMVElgIGdldHMgZW5hYmxlZCwgYW5kIGl0JiMzOTtzIGxvb2tpbmcgbGlrZSBpdCYjMzk7cyBhIGJpdCBvZiBhIGRlcGVuZGVuY3kgY2hhaW4uIEkgc2VlIHRoYXQgdGhpbmdzIGxpa2UgYEhVR0VUTEJfUEFHRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBldmVuIGBTTkRfQ1RMX0ZBU1RfTE9PS1VQYCBhcmUgcmVzcG9uc2libGUgZm9yIHNlbGVjdGluZyBpdC4gVGhlIGNoYWxsZW5nZSBpcywgaXQmIzM5O3MgYSBoaWRkZW4gY29uZmlnIG9wdGlvbi4gVGhhdCBtZWFucyBJIGNhbiYjMzk7dCBqdXN0IGZsaXAgYSBzd2l0Y2ggaW4gc3l6a2FsbGVyIGFuZCBleHBlY3QgaXQgdG8gd29yay4gS2J1aWxkIGVmZmVjdGl2ZWx5IGlnbm9yZXMgaXQgdW5sZXNzIHNvbWV0aGluZyBleHBsaWNpdGx5IHNlbGVjdHMgaXQuCgpXYWl0IGEgc2Vjb25k4oCmIHN5emthbGxlciAqY2FuKiBlbmFibGUgZWl0aGVyIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3IgYEhVR0VUTEJGU2AuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgYXZlbnVlISBUaGF0IGdpdmVzIG1lIHNvbWUgZmxleGliaWxpdHkuCgpIbW0sIGxldCYjMzk7cyBleHBsb3JlIGFub3RoZXIgcG9zc2liaWxpdHkuIENvdWxkIGBURVNUX1hBUlJBWWAgYmUgdGhlIGtleT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGxpYi9LY29uZmlnLmRlYnVnYCwgdG8gdmVyaWZ5IGlmIGBURVNUX1hBUlJBWWAgcGxheXMgYSBwYXJ0IGluIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4gVGhpcyBpcyBhIGdvb2QgbGVhZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTU6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRFU1RfWEFSUkFZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MjU1Nz1jb25maWcgVEVTVF9CSVRNQVBcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTYzLVxubGliL0tjb25maWcuZGVidWc6MjU2NDpjb25maWcgVEVTVF9YQVJSQVlcbmxpYi9LY29uZmlnLmRlYnVnLTI1NjUtXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IHRoZSBYQXJyYXkgY29kZSBhdCBydW50aW1lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5ODcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgd2l0aCBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWJ1ZyBvcHRpb25zIHJlbGF0ZWQgdG8gWEFycmF5cyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIFRoZSBgVEVTVF9YQVJSQVlgIHN5bWJvbCBpcyB0aGUga2V5IHRvIHRoYXQgc2VjdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLiBJJiMzOTtsbCByZWFkIGFyb3VuZCB0aGF0IGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMgYW5kIHNjb3BlLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93IGl0JiMzOTtzIHVzZWQgYW5kIHdoYXQgaXQgY29udHJvbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBJcyBpdCBhIHRyaXN0YXRlIG9yIGJvb2xlYW4/IFdoYXQgZG9lcyBpdCBkZXBlbmQgb24/IEFyZSB0aGVyZSBhbnkgYXNzb2NpYXRlZCBzeW1ib2xzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBUaGlzIHdpbGwgaGVscCB1bmRlcnN0YW5kIHRoZSB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzIGF2YWlsYWJsZSBmb3IgWEFycmF5cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTU6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU2MDpcdFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gdGVzdCB0aGUgYml0bWFwIGZ1bmN0aW9ucyBhdCBib290LlxuMjU2MTpcdFxuMjU2MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMjU2MzpcdFxuMjU2NDpcdGNvbmZpZyBURVNUX1hBUlJBWVxuMjU2NTpcdFx0dHJpc3RhdGUgXCYjMzQ7VGVzdCB0aGUgWEFycmF5IGNvZGUgYXQgcnVudGltZVwmIzM0O1xuMjU2NjpcdFxuMjU2NzpcdGNvbmZpZyBURVNUX01BUExFX1RSRUVcbjI1Njg6XHRcdHRyaXN0YXRlIFwmIzM0O1Rlc3QgdGhlIE1hcGxlIFRyZWUgY29kZSBhdCBydW50aW1lIG9yIG1vZHVsZSBsb2FkXCYjMzQ7XG4yNTY5Olx0XHRoZWxwXG4yNTcwOlx0XHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byB0ZXN0IHRoZSBtYXBsZSB0cmVlIGNvZGUgZnVuY3Rpb25zIGF0IGJvb3QsIG9yXG4yNTcxOlx0XHQgIHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkZWQuIEVuYWJsZSBcJiMzNDtEZWJ1ZyBNYXBsZSBUcmVlc1wmIzM0OyB3aWxsIGVuYWJsZVxuMjU3MjpcdFx0ICBtb3JlIHZlcmJvc2Ugb3V0cHV0IG9uIGZhaWx1cmVzLlxuMjU3MzpcdFxuMjU3NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMjU3NTpcdFxuMjU3NjpcdGNvbmZpZyBURVNUX1JIQVNIVEFCTEVcbjI1Nzc6XHRcdHRyaXN0YXRlIFwmIzM0O1BlcmZvcm0gc2VsZnRlc3Qgb24gcmVzaXphYmxlIGhhc2ggdGFibGVcJiMzNDtcbjI1Nzg6XHRcdGhlbHBcbjI1Nzk6XHRcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIHRlc3QgdGhlIHJoYXNodGFibGUgZnVuY3Rpb25zIGF0IGJvb3QuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVHJvdWJsZXNob290aW5nIFBhdGgqKgoKT2theSwgc28gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBpc24mIzM5O3QgZW5hYmxpbmcgYFhBUlJBWV9NVUxUSWAgYnkgZGVmYXVsdC4gVGhhdCYjMzk7cyBhIHByb2JsZW0sIGJ1dCBpdCYjMzk7cyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyeSBhbmQgc2ltcGx5IGFkZCBib3RoIGBYQVJSQVlfTVVMVElgIGFuZCBgVEVTVF9YQVJSQVlgIGRpcmVjdGx5IHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gSG93ZXZlciwgSSBqdXN0IGhhZCBhIHRob3VnaHQ6IElmIGBYQVJSQVlfTVVMVElgIGlzIGEgKmhpZGRlbiogY29uZmlndXJhdGlvbiBvcHRpb24sIHRoZW4gS2J1aWxkIHdpbGwgc2ltcGx5IGlnbm9yZSBpdCBpZiBpdCYjMzk7cyBwbGFjZWQgaW4gYSBjb25maWcgZmlsZSBkaXJlY3RseS4gSSBjYW4mIzM5O3QganVzdCBkZWZpbmUgaXQuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBzb21ldGhpbmcgKnNlbGVjdHMqIGl0LgoKQWxyaWdodCwgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgdG8gbWU/IEhtbW0uLi4gbGV0JiMzOTtzIHNlZS4gVGhpbmtpbmcgb2YgcmVsZXZhbnQgY29uZmlncyB0aGF0IG1pZ2h0IGluZGlyZWN0bHkgZW5hYmxlIGBYQVJSQVlfTVVMVElgLCBgSFVHRVRMQkZTYCBvciBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHNvdW5kIGxpa2UgcG9zc2libGUgY2FuZGlkYXRlcy4gVGhleSBhcmUgaW52b2x2ZWQgaW4gc2ltaWxhciBhcmVhcyBhbmQgY291bGQgcG90ZW50aWFsbHkgYmUgYSBkZXBlbmRlbmN5LiBCZWZvcmUgSSBnbyBkb3duIHRoYXQgcGF0aCwgdGhvdWdoLCBpdCYjMzk7cyBjcnVjaWFsIHRvIGNvbmZpcm0gd2hldGhlciBgWEFSUkFZX01VTFRJYCBpcyBhY3R1YWxseSBhIGhpZGRlbiBjb25maWcuIEkmIzM5O2xsIGNoZWNrIHRoYXQgZmlyc3QsIGp1c3QgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IHdhc3RpbmcgbXkgdGltZS4gS25vd2luZyB0aGUgdmlzaWJpbGl0eSBvZiB0aGlzIG9wdGlvbiB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxNTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTA6XHRcdGRlcGVuZHMgb24gSU5URVJWQUxfVFJFRVxuIDM1MTpcdFxuIDM1MjpcdGNvbmZpZyBYQVJSQVlfTVVMVElcbiAzNTM6XHRcdGJvb2xcbiAzNTQ6XHRcdGhlbHBcbiAzNTU6XHRcdCAgU3VwcG9ydCBlbnRyaWVzIHdoaWNoIG9jY3VweSBtdWx0aXBsZSBjb25zZWN1dGl2ZSBpbmRpY2VzIGluIHRoZVxuIDM1NjpcdFx0ICBYQXJyYXkuXG4gMzU3Olx0XG4gMzU4Olx0Y29uZmlnIEFTU09DSUFUSVZFX0FSUkFZXG4gMzU5Olx0XHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMzgKCQkJCQkJCW91dHB1dDogOTYKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIGZvciBQYXRjaCBJbmNsdXNpb24qKgoKT2theSwgc28gdGhpcyBpcyBhIGJvb2xlYW4gb3B0aW9uLCBhbmQgaXQmIzM5O3MgaGlkZGVuIGJlY2F1c2UgdGhlcmUmIzM5O3Mgbm8gZGlyZWN0IHVzZXIgcHJvbXB0IGZvciBpdC4gR290IGl0LiBUbyBlbnN1cmUgdGhpcyBmaXggaXMgZWZmZWN0aXZlIGFuZCBwcm9wZXJseSB0ZXN0ZWQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlIG5lZWQgdG8gYmUgcmVhbGx5IGNvbnNjaW91cyBvZiB0aGUgdW5kZXJseWluZyBzeXN0ZW0gY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgWEFycmF5JiMzOTtzIGJlaGF2aW9yLiBUaGUgYnVnIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHNwZWNpZmljYWxseSB0YXJnZXRzIGEgZmxhdyBpbiBgeGFzX2ZpbmRgLCB3aGljaCwgYXMgYSBjb3JlIEFQSSBmdW5jdGlvbiwgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgY29uZHVjaXZlIHRvIGRlbW9uc3RyYXRpbmcgdGhlIGZpeC4KClRoZXJlZm9yZSwgdGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0byBlbmFibGUgY29uZmlndXJhdGlvbnMgdGhhdCBzdHJlc3MgdGhlIHN5c3RlbSBzdWNoIGFzIGBIVUdFVExCRlNgIG9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgdGhpbmsgYEhVR0VUTEJGU2AgaXMgdGhlIGJldHRlciBjaG9pY2UgZm9yIHRoaXMgcGFydGljdWxhciBwYXRjaCwgYW5kIEkmIzM5O2xsIGluY2x1ZGUgdGhhdC4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIHRocm93IGluIGBURVNUX1hBUlJBWWAgYXMgYSBjb21wYW5pb24gc2luY2UgdGhlcmUgaXMgYW4gYWRkZWQgdGVzdCBgY2hlY2tfbXVsdGlfZmluZF80YCBpbiB0aGUgdGVzdCBzdWl0ZSB0aGF0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhpcyBmaXguCgpUaGUga2V5IGZ1bmN0aW9uIEkmIzM5O20gZm9jdXNpbmcgb24gaGVyZSBpcyBgeGFzX2ZpbmRgIOKAkyB0aGF0JiMzOTtzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBUaGlzIHBhdGNoIGlzIHRhcmdldGVkIGF0IHRoZSBtdWx0aS1pbmRleCBlbnRyeSBoYW5kbGluZyB3aXRoaW4gdGhlIFhBcnJheSBzeXN0ZW0uIEJ5IGVuYWJsaW5nIGBIVUdFVExCRlNgIGFuZCBgVEVTVF9YQVJSQVlgLCBJIGJlbGlldmUgd2UgY2FuIGVuc3VyZSB0aGUgcHJvcGVyIGV4ZWN1dGlvbiBvZiB0aGUgbmV3IHRlc3QsIGFuZCB0aGF0IHRoZSBmaXggdG8gYHhhc19maW5kYCBpcyBhZGVxdWF0ZWx5IHZhbGlkYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtURVNUX1hBUlJBWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB4YXNfZmluZGAgd2hlbiBoYW5kbGluZyBtdWx0aS1pbmRleCBlbnRyaWVzIGluIFhBcnJheSwgd2hpY2ggaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlIEFQSSB1c2VkIGFjcm9zcyB0aGUga2VybmVsLiBJdCBhbHNvIGFkZHMgYSBuZXcgdGVzdCBjYXNlIHRvIGB0ZXN0X3hhcnJheWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtURVNUX1hBUlJBWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB4YXNfZmluZGAgd2hlbiBoYW5kbGluZyBtdWx0aS1pbmRleCBlbnRyaWVzIGluIFhBcnJheSwgd2hpY2ggaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlIEFQSSB1c2VkIGFjcm9zcyB0aGUga2VybmVsLiBJdCBhbHNvIGFkZHMgYSBuZXcgdGVzdCBjYXNlIHRvIGB0ZXN0X3hhcnJheWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTU6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIFhBcnJheSBpdGVyYXRvciAoYHhhc19maW5kYCkgd2hlcmUgYHhhcy1cdTAwM2V4YV9vZmZzZXRgIHdhcyBub3QgY29ycmVjdGx5IHVwZGF0ZWQgd2hlbiBpdGVyYXRpbmcgb3ZlciBtdWx0aS1pbmRleCBlbnRyaWVzIGluIG5vZGVzIHdpdGggYSBub24temVybyBzaGlmdC4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBpdGVyYXRpb24gcmVzdWx0cywgaW5maW5pdGUgbG9vcHMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2l0aGluIHRoZSBYQXJyYXkgbm9kZSYjMzk7cyBzbG90cyBhcnJheS4gVGhlc2UgaXNzdWVzIGFyZSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgbWVtb3J5IHNhZmV0eSAob3V0LW9mLWJvdW5kcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2Q3NGU1YjY2NDVlYTYzYjg3NWUyYzI2OTdmZGU1OTIwOGM2NzE5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDE1OjMyOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbGliL3Rlc3RfeGFycmF5LmMgYi9saWIvdGVzdF94YXJyYXkuYwppbmRleCA1Y2EwYWVmZWU5YWE1Li5jZGE3MjQ1ZTQ3NzE2IDEwMDY0NAotLS0gYS9saWIvdGVzdF94YXJyYXkuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF94YXJyYXkuYwpAQCAtMTI0Nyw2ICYjNDM7MTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpCiAJfQogfQogCiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF80KHN0cnVjdCB4YXJyYXkgKnhhKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSQomIzQzOwlYQV9TVEFURSh4YXMsIHhhLCAxMDApOwomIzQzOwlYQV9TVEFURV9PUkRFUihzcGxpdCwgeGEsIDAsIDApOwomIzQzOwl2b2lkICplbnRyeTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwomIzQzOwomIzQzOwkvKiAoMSkgT3JkZXItNyBlbnRyeSAoMC0xMjcpIHdpdGggYWRqYWNlbnQgZW50cnkgYXQgMTI4LCBzdGFydGluZyBhdCAxMDAgKi8KJiM0MzsJeGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTsKJiM0MzsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTsKJiM0MzsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXhhX2VyYXNlX2luZGV4KHhhLCAxMjgpOwomIzQzOwl4YV9lcmFzZV9pbmRleCh4YSwgMCk7CiYjNDM7CVhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7CiYjNDM7CiYjNDM7CS8qICgyKSBTcGxpdHRpbmcgYSBtdWx0aS1pbmRleCBlbnRyeSBhZnRlciBhIGxvb2t1cCBiZWdpbnMgaW5zaWRlIGl0ICovCiYjNDM7CXhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7CiYjNDM7CiYjNDM7CXhhc19zZXQoJmFtcDt4YXMsIDEwMCk7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwl4YXNfc3BsaXRfYWxsb2MoJmFtcDtzcGxpdCwgeGFfbWtfaW5kZXgoMCksIDcsIEdGUF9LRVJORUwpOwomIzQzOwl4YXNfbG9jaygmYW1wO3NwbGl0KTsKJiM0MzsJeGFzX3NwbGl0KCZhbXA7c3BsaXQsIHhhX21rX2luZGV4KDApLCA3KTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDEyODsgaSYjNDM7JiM0MzspCiYjNDM7CQlfX3hhX3N0b3JlKHhhLCBpLCB4YV9ta19pbmRleChpKSwgMCk7CiYjNDM7CXhhc191bmxvY2soJmFtcDtzcGxpdCk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTsKJiM0MzsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXhhX2Rlc3Ryb3koeGEpOwomIzQzOwlYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSkKIHsKIAl1bnNpZ25lZCBsb25nIGksIGosIGs7CkBAIC0xMzcwLDYgJiM0MzsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSkKIAkJY2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTsKIAljaGVja19tdWx0aV9maW5kXzIoeGEpOwogCWNoZWNrX211bHRpX2ZpbmRfMyh4YSk7CiYjNDM7CWNoZWNrX211bHRpX2ZpbmRfNCh4YSk7CiB9CiAKIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovCmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmMKaW5kZXggOWE4YjQ5MTY1NDBjZi4uOTgwMzI0ZDY4NmJkMCAxMDA2NDQKLS0tIGEvbGliL3hhcnJheS5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi94YXJyYXkuYwpAQCAtMTQwNiw5ICYjNDM7MTQwNiwxMSBAQCB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpCiAJCWVudHJ5ID0geGFzX2xvYWQoeGFzKTsKIAkJaWYgKGVudHJ5IHx8IHhhc19ub3Rfbm9kZSh4YXMtJmd0O3hhX25vZGUpKQogCQkJcmV0dXJuIGVudHJ5OwotCX0gZWxzZSBpZiAoIXhhcy0mZ3Q7eGFfbm9kZS0mZ3Q7c2hpZnQgJmFtcDsmYW1wOwotCQkgICAgeGFzLSZndDt4YV9vZmZzZXQgIT0gKHhhcy0mZ3Q7eGFfaW5kZXggJmFtcDsgWEFfQ0hVTktfTUFTSykpIHsKLQkJeGFzLSZndDt4YV9vZmZzZXQgPSAoKHhhcy0mZ3Q7eGFfaW5kZXggLSAxKSAmYW1wOyBYQV9DSFVOS19NQVNLKSAmIzQzOyAxOwomIzQzOwl9IGVsc2UgaWYgKHhhcy0mZ3Q7eGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKSkgewomIzQzOwkJaWYgKCF4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0KQomIzQzOwkJCXhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl4YXMtJmd0O3hhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKTsKIAl9CiAKIAl4YXNfbmV4dF9vZmZzZXQoeGFzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTcKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNzcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhBcnJheSBQYXRjaCoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgbGliL3hhcnJheS5jYC4gSXQmIzM5O3MgYSB0YXJnZXRlZCBmaXggd2l0aGluIHRoZSBgeGFzX2ZpbmRgIGZ1bmN0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgdHJhdmVyc2luZyBYQXJyYXlzLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgdXBkYXRpbmcgYHhhcy0mZ3Q7eGFfb2Zmc2V0YCBjb3JyZWN0bHksIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBub2RlcyB0aGF0IGhhdmUgYSBub24temVybyBgc2hpZnRgIHZhbHVlLiBJdCBzZWVtcyB0aGUgb3JpZ2luYWwgbG9naWMgaGFkIGEgZmxhdzsgaXQgd2FzbiYjMzk7dCBoYW5kbGluZyB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uIHByb3Blcmx5IGluIGFsbCBjYXNlcywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbmNvcnJlY3QgaXRlcmF0aW9uIOKAkyBza2lwcGluZyBlbnRyaWVzLCByZXR1cm5pbmcgdGhlIHdyb25nIGVudHJpZXMsIG9yIGV2ZW4gdmVudHVyaW5nIGludG8gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMuCgpUaGUgY29kZSBzbmlwcGV0IHNob3dzIHRoZSBjb3JyZWN0aXZlIGFjdGlvbi4gVGhleSYjMzk7dmUgcmVwbGFjZWQgdGhlIGNvbmRpdGlvbmFsIGJsb2NrIHdpdGggYSBtb3JlIHJvYnVzdCBjaGVjayBvbiBgeGFzLSZndDt4YV9vZmZzZXRgLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBjb25kaXRpb24gdG8gY2hlY2sgZm9yIGEgemVybyBzaGlmdCwgYnV0IHRoaXMgbmV3IGxvZ2ljIGFwcGVhcnMgdG8gYmUgdGhlIGNvcnJlY3Qgd2F5IHRvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IGNvbnNpZGVyaW5nIG5vZGVzIHdpdGggYSBub24temVybyBzaGlmdC4gSXQgZmVlbHMgbGlrZSB0aGUgb2xkIGNvZGUgbWlnaHQgaGF2ZSBtaXNzZWQgc29tZSBlZGdlIGNhc2VzIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG9mZnNldC4gVGhpcyBjb3VsZCBoYXZlIGVhc2lseSBjYXVzZWQgYSBzdWJ0bGUgYnVnLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggWEFycmF5IHN0cnVjdHVyZXMgd2hlcmUgc2hpZnRzIGNvbWUgaW50byBwbGF5LgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgd2FzIHRvIGNvbnNpZGVyIGlmIHRoZXJlIG1pZ2h0IGJlIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb2ludGVyL3ZhbHVlIHNsb3RzIGluIGFuIFhBcnJheSwgc28gSSBxdWlja2x5IHRob3VnaHQgYWJvdXQgdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBJIHJlbWVtYmVyIHRoYXQgWEFycmF5IG5vZGVzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfYWxsb2NgLCBzcGVjaWZpY2FsbHkgdmlhIGByYWRpeF90cmVlX25vZGVfYWxsb2NgLCB3aGljaCB1c2VzIHRoZSBgcmFkaXhfdHJlZV9ub2RlX2NhY2hlcGAuIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhlIGNhY2hlIGlzIGNyZWF0ZWQgd2l0aCBgU0xBQl9QQU5JQ2AsIGFuZCBldmVuIGlmIHRoZSBub2RlcyB3ZXJlbiYjMzk7dCBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24sIHRoZSBzbG90cyBhcmUgaW5pdGlhbGl6ZWQgd2hlbiBlbnRyaWVzIGFyZSBzdG9yZWQuIE5vIG5lZWQgdG8gd29ycnkgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBoZXJlLgoKVGhlcmVmb3JlLCB0aGUgbWFpbiBjb25jZXJuIGhlcmUgYm9pbHMgZG93biB0byB0aGUgbG9naWMgb2YgdGhlIGl0ZXJhdG9yLiBUaGUgYnVnIGhlcmUgaXMgcHVyZWx5IGEgY29udHJvbC1mbG93IGlzc3VlLiBLQVNBTiBpcyB0aGUgcmVsZXZhbnQgdG9vbCBoZXJlIHRvIGNhdGNoIG91dC1vZi1ib3VuZHMgbWVtb3J5IGlzc3Vlcywgd2hpY2ggdGhpcyBmaXggd291bGQgYWRkcmVzcy4KCkdpdmVuIHRoYXQgdGhpcyBwYXRjaCByZXNvbHZlcyBhIGxvZ2ljIGVycm9yIGluIGl0ZXJhdGlvbiBhbmQgSSBzZWUgbm8gcG90ZW50aWFsIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgZml4IHByaW1hcmlseSBhZGRyZXNzZXMgY29udHJvbC1mbG93IGFuZCBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGNhdWdodCBieSBLQVNBTi4gV2UgZG9uJiMzOTt0IG5lZWQgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgZm9yIHRoaXMuIEl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGJ1ZyBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSBYQXJyYXkgaXRlcmF0b3IgKGB4YXNfZmluZGApIHdoZXJlIGB4YXMtXHUwMDNleGFfb2Zmc2V0YCB3YXMgbm90IGNvcnJlY3RseSB1cGRhdGVkIHdoZW4gaXRlcmF0aW5nIG92ZXIgbXVsdGktaW5kZXggZW50cmllcyBpbiBub2RlcyB3aXRoIGEgbm9uLXplcm8gc2hpZnQuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgaXRlcmF0aW9uIHJlc3VsdHMsIGluZmluaXRlIGxvb3BzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdpdGhpbiB0aGUgWEFycmF5IG5vZGUmIzM5O3Mgc2xvdHMgYXJyYXkuIFRoZXNlIGlzc3VlcyBhcmUgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYW5kIG1lbW9yeSBzYWZldHkgKG91dC1vZi1ib3VuZHMpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgWEFycmF5IGl0ZXJhdG9yIChgeGFzX2ZpbmRgKSB3aGVyZSBgeGFzLVx1MDAzZXhhX29mZnNldGAgd2FzIG5vdCBjb3JyZWN0bHkgdXBkYXRlZCB3aGVuIGl0ZXJhdGluZyBvdmVyIG11bHRpLWluZGV4IGVudHJpZXMgaW4gbm9kZXMgd2l0aCBhIG5vbi16ZXJvIHNoaWZ0LiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGl0ZXJhdGlvbiByZXN1bHRzLCBpbmZpbml0ZSBsb29wcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aXRoaW4gdGhlIFhBcnJheSBub2RlJiMzOTtzIHNsb3RzIGFycmF5LiBUaGVzZSBpc3N1ZXMgYXJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGFuZCBtZW1vcnkgc2FmZXR5IChvdXQtb2YtYm91bmRzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozMjoxMS43NzY3OTM5MTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzA4NzgwNTQ5NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJURVNUX1hBUlJBWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhhc19maW5kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgWEFycmF5IGl0ZXJhdG9yIChgeGFzX2ZpbmRgKSB3aGVyZSBgeGFzLVxcdTAwM2V4YV9vZmZzZXRgIHdhcyBub3QgY29ycmVjdGx5IHVwZGF0ZWQgd2hlbiBpdGVyYXRpbmcgb3ZlciBtdWx0aS1pbmRleCBlbnRyaWVzIGluIG5vZGVzIHdpdGggYSBub24temVybyBzaGlmdC4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBpdGVyYXRpb24gcmVzdWx0cywgaW5maW5pdGUgbG9vcHMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2l0aGluIHRoZSBYQXJyYXkgbm9kZSdzIHNsb3RzIGFycmF5LiBUaGVzZSBpc3N1ZXMgYXJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGFuZCBtZW1vcnkgc2FmZXR5IChvdXQtb2YtYm91bmRzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB4YXNfZmluZGAgd2hlbiBoYW5kbGluZyBtdWx0aS1pbmRleCBlbnRyaWVzIGluIFhBcnJheSwgd2hpY2ggaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlIEFQSSB1c2VkIGFjcm9zcyB0aGUga2VybmVsLiBJdCBhbHNvIGFkZHMgYSBuZXcgdGVzdCBjYXNlIHRvIGB0ZXN0X3hhcnJheWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE1OjMyOjExLjc3Njc5ODkxNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNDM0ODg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdkNzRlNWI2NjQ1ZWE2M2I4NzVlMmMyNjk3ZmRlNTkyMDhjNjcxOWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMTU6MzI6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfeGFycmF5LmMgYi9saWIvdGVzdF94YXJyYXkuY1xcbmluZGV4IDVjYTBhZWZlZTlhYTUuLmNkYTcyNDVlNDc3MTYgMTAwNjQ0XFxuLS0tIGEvbGliL3Rlc3RfeGFycmF5LmNcXG4rKysgYi9saWIvdGVzdF94YXJyYXkuY1xcbkBAIC0xMjQ3LDYgKzEyNDcsNjcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8zKHN0cnVjdCB4YXJyYXkgKnhhKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSlcXG4re1xcbisjaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbitcXHRYQV9TVEFURSh4YXMsIHhhLCAxMDApO1xcbitcXHRYQV9TVEFURV9PUkRFUihzcGxpdCwgeGEsIDAsIDApO1xcbitcXHR2b2lkICplbnRyeTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0LyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovXFxuK1xcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG4rXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7XFxuK1xcbitcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCk7XFxuK1xcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7XFxuK1xcbitcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCk7XFxuK1xcdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0eGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7XFxuK1xcdHhhX2VyYXNlX2luZGV4KHhhLCAwKTtcXG4rXFx0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcXG4rXFxuK1xcdC8qICgyKSBTcGxpdHRpbmcgYSBtdWx0aS1pbmRleCBlbnRyeSBhZnRlciBhIGxvb2t1cCBiZWdpbnMgaW5zaWRlIGl0ICovXFxuK1xcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XFxuK1xcbitcXHR4YXNfc2V0KFxcdTAwMjZ4YXMsIDEwMCk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbitcXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcXG4rXFx0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHR4YXNfc3BsaXRfYWxsb2MoXFx1MDAyNnNwbGl0LCB4YV9ta19pbmRleCgwKSwgNywgR0ZQX0tFUk5FTCk7XFxuK1xcdHhhc19sb2NrKFxcdTAwMjZzcGxpdCk7XFxuK1xcdHhhc19zcGxpdChcXHUwMDI2c3BsaXQsIHhhX21rX2luZGV4KDApLCA3KTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDEyODsgaSsrKVxcbitcXHRcXHRfX3hhX3N0b3JlKHhhLCBpLCB4YV9ta19pbmRleChpKSwgMCk7XFxuK1xcdHhhc191bmxvY2soXFx1MDAyNnNwbGl0KTtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbitcXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xcbitcXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xcbitcXG4rXFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbitcXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHhhX2Rlc3Ryb3koeGEpO1xcbitcXHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZF8xKHN0cnVjdCB4YXJyYXkgKnhhKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaSwgaiwgaztcXG5AQCAtMTM3MCw2ICsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSlcXG4gXFx0XFx0Y2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTtcXG4gXFx0Y2hlY2tfbXVsdGlfZmluZF8yKHhhKTtcXG4gXFx0Y2hlY2tfbXVsdGlfZmluZF8zKHhhKTtcXG4rXFx0Y2hlY2tfbXVsdGlfZmluZF80KHhhKTtcXG4gfVxcbiBcXG4gLyogU2VlIGZpbmRfc3dhcF9lbnRyeSgpIGluIG1tL3NobWVtLmMgKi9cXG5kaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jXFxuaW5kZXggOWE4YjQ5MTY1NDBjZi4uOTgwMzI0ZDY4NmJkMCAxMDA2NDRcXG4tLS0gYS9saWIveGFycmF5LmNcXG4rKysgYi9saWIveGFycmF5LmNcXG5AQCAtMTQwNiw5ICsxNDA2LDExIEBAIHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcXG4gXFx0XFx0ZW50cnkgPSB4YXNfbG9hZCh4YXMpO1xcbiBcXHRcXHRpZiAoZW50cnkgfHwgeGFzX25vdF9ub2RlKHhhcy1cXHUwMDNleGFfbm9kZSkpXFxuIFxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG4tXFx0fSBlbHNlIGlmICgheGFzLVxcdTAwM2V4YV9ub2RlLVxcdTAwM2VzaGlmdCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgeGFzLVxcdTAwM2V4YV9vZmZzZXQgIT0gKHhhcy1cXHUwMDNleGFfaW5kZXggXFx1MDAyNiBYQV9DSFVOS19NQVNLKSkge1xcbi1cXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVxcdTAwM2V4YV9pbmRleCAtIDEpIFxcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxO1xcbitcXHR9IGVsc2UgaWYgKHhhcy1cXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgeGFzLVxcdTAwM2V4YV9ub2RlKSkge1xcbitcXHRcXHRpZiAoIXhhcy1cXHUwMDNleGFfbm9kZS1cXHUwMDNlc2hpZnQpXFxuK1xcdFxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ID0gKCh4YXMtXFx1MDAzZXhhX2luZGV4IC0gMSkgXFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cXHUwMDNleGFfaW5kZXgsIHhhcy1cXHUwMDNleGFfbm9kZSk7XFxuIFxcdH1cXG4gXFxuIFxcdHhhc19uZXh0X29mZnNldCh4YXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozMjoxMy40MDE4MjM1MjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MDEzNzI1MDM3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJURVNUX1hBUlJBWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhhc19maW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHhhc19maW5kYCB3aGVuIGhhbmRsaW5nIG11bHRpLWluZGV4IGVudHJpZXMgaW4gWEFycmF5LCB3aGljaCBpcyBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgQVBJIHVzZWQgYWNyb3NzIHRoZSBrZXJuZWwuIEl0IGFsc28gYWRkcyBhIG5ldyB0ZXN0IGNhc2UgdG8gYHRlc3RfeGFycmF5YC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2Q3NGU1YjY2NDVlYTYzYjg3NWUyYzI2OTdmZGU1OTIwOGM2NzE5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDE1OjMyOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfeGFycmF5LmMgYi9saWIvdGVzdF94YXJyYXkuY1xuaW5kZXggNWNhMGFlZmVlOWFhNS4uY2RhNzI0NWU0NzcxNiAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X3hhcnJheS5jXG4rKysgYi9saWIvdGVzdF94YXJyYXkuY1xuQEAgLTEyNDcsNiArMTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSlcbit7XG4rI2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbitcdFhBX1NUQVRFKHhhcywgeGEsIDEwMCk7XG4rXHRYQV9TVEFURV9PUkRFUihzcGxpdCwgeGEsIDAsIDApO1xuK1x0dm9pZCAqZW50cnk7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXG4rXHQvKiAoMSkgT3JkZXItNyBlbnRyeSAoMC0xMjcpIHdpdGggYWRqYWNlbnQgZW50cnkgYXQgMTI4LCBzdGFydGluZyBhdCAxMDAgKi9cbitcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XG4rXHRYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcbitcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7XG4rXG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHR4YV9lcmFzZV9pbmRleCh4YSwgMTI4KTtcbitcdHhhX2VyYXNlX2luZGV4KHhhLCAwKTtcbitcdFhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7XG4rXG4rXHQvKiAoMikgU3BsaXR0aW5nIGEgbXVsdGktaW5kZXggZW50cnkgYWZ0ZXIgYSBsb29rdXAgYmVnaW5zIGluc2lkZSBpdCAqL1xuK1x0eGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTtcbitcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XG4rXG4rXHR4YXNfc2V0KFx1MDAyNnhhcywgMTAwKTtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHR4YXNfc3BsaXRfYWxsb2MoXHUwMDI2c3BsaXQsIHhhX21rX2luZGV4KDApLCA3LCBHRlBfS0VSTkVMKTtcbitcdHhhc19sb2NrKFx1MDAyNnNwbGl0KTtcbitcdHhhc19zcGxpdChcdTAwMjZzcGxpdCwgeGFfbWtfaW5kZXgoMCksIDcpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMTI4OyBpKyspXG4rXHRcdF9feGFfc3RvcmUoeGEsIGksIHhhX21rX2luZGV4KGkpLCAwKTtcbitcdHhhc191bmxvY2soXHUwMDI2c3BsaXQpO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcbitcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFfZGVzdHJveSh4YSk7XG4rXHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuKyNlbmRpZlxuK31cbitcbiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kXzEoc3RydWN0IHhhcnJheSAqeGEpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBpLCBqLCBrO1xuQEAgLTEzNzAsNiArMTQzMSw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEpXG4gXHRcdGNoZWNrX211bHRpX2ZpbmRfMSh4YSwgaSk7XG4gXHRjaGVja19tdWx0aV9maW5kXzIoeGEpO1xuIFx0Y2hlY2tfbXVsdGlfZmluZF8zKHhhKTtcbitcdGNoZWNrX211bHRpX2ZpbmRfNCh4YSk7XG4gfVxuIFxuIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovXG5kaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jXG5pbmRleCA5YThiNDkxNjU0MGNmLi45ODAzMjRkNjg2YmQwIDEwMDY0NFxuLS0tIGEvbGliL3hhcnJheS5jXG4rKysgYi9saWIveGFycmF5LmNcbkBAIC0xNDA2LDkgKzE0MDYsMTEgQEAgdm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIFx0XHRlbnRyeSA9IHhhc19sb2FkKHhhcyk7XG4gXHRcdGlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLVx1MDAzZXhhX25vZGUpKVxuIFx0XHRcdHJldHVybiBlbnRyeTtcbi1cdH0gZWxzZSBpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgeGFzLVx1MDAzZXhhX29mZnNldCAhPSAoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAyNiBYQV9DSFVOS19NQVNLKSkge1xuLVx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gKCh4YXMtXHUwMDNleGFfaW5kZXggLSAxKSBcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxO1xuK1x0fSBlbHNlIGlmICh4YXMtXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSkpIHtcbitcdFx0aWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdClcbitcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gKCh4YXMtXHUwMDNleGFfaW5kZXggLSAxKSBcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxO1xuK1x0XHRlbHNlXG4rXHRcdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSk7XG4gXHR9XG4gXG4gXHR4YXNfbmV4dF9vZmZzZXQoeGFzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE1OjMyOjEzLjQwMTgyNDY1MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzA5OTg5NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIHRvIFhBcnJheSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIHdlJ3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiB0byB0aGUgWEFycmF5IGNvZGUsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgYGxpYi90ZXN0X3hhcnJheS5jYCBhbmQgYGxpYi94YXJyYXkuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgeGFzX2ZpbmRgIGZ1bmN0aW9uIGluIGBsaWIveGFycmF5LmNgLCBhbmQgYSBuZXcgdGVzdCwgYGNoZWNrX211bHRpX2ZpbmRfNGAsIGFkZGVkIHRvIHRoZSB0ZXN0IGZpbGUuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHJlY29nbml6ZSB0aGF0IGB4YXNfZmluZGAgaXMgYSBjcml0aWNhbCBBUEkgZW50cnkgcG9pbnQgZm9yIFhBcnJheS4gQ29uc2lkZXJpbmcgaG93IGV4dGVuc2l2ZWx5IFhBcnJheSBpcyB1c2VkIHdpdGhpbiB0aGUga2VybmVsLCBhbnkgY2hhbmdlIGhlcmUgZGVtYW5kcyBjYXJlZnVsIHNjcnV0aW55LlxuXG5UaGUgYWN0dWFsIGNvZGUgY2hhbmdlIGluIGB4YXNfZmluZGAgbG9va3MgbGlrZSBhIGNvcnJlY3Rpb24gdG8gaG93IHRoZSBvZmZzZXQgaXMgY2FsY3VsYXRlZCwgd2hpY2ggZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBub2RlIGlzIHNoaWZ0ZWQgb3Igbm90LiBUaGUgb3JpZ2luYWwgY29kZSBzZWVtcyB0byBoYXZlIGFuIGVkZ2UgY2FzZSBmb3IgaGFuZGxpbmcgdGhlIG9mZnNldCB3aGVuIG5vdCBzaGlmdGVkLCBhbmQgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIHRyeWluZyB0byBmaXggaXQgYW5kIHVzZSBgZ2V0X29mZnNldGAgYWx3YXlzLiBOb3csIHRoZSBsb2dpYyBpcyBiZWluZyB1cGRhdGVkLlxuXG5UaGVyZSdzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXJvdW5kIHRoZSB0ZXN0OyBpdCdzIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJYC4gVGhhdCB0ZWxscyBtZSB0aGF0IHRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgdGVzdCBpcyBhIG11bHRpLWZpbmQgc2NlbmFyaW8uIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19YQVJSQVlfTVVMVElgIGlzIGEgbGVnaXRpbWF0ZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSWYgaXQgaXMsIHRoZW4gdGhlIHRlc3TigJlzIHByZXNlbmNlIGltcGxpZXMgYSBzcGVjaWZpYywgcGVyaGFwcyBvcHRpbWl6ZWQsIGZ1bmN0aW9uYWxpdHkgdGhhdOKAmXMgYmVpbmcgZXhlcmNpc2VkIGJ5IHRoaXMgY2hhbmdlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGhlIGJyb2FkZXIgWEFycmF5IGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIHRvIGNoZWNrLiBJJ2xsIG5lZWQgdG8gcmVhbGx5IHJ1biB0aGlzIHBhdGNoIHRocm91Z2ggaXRzIHBhY2VzIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IHJlZ3Jlc3MgcGVyZm9ybWFuY2Ugb3IgaW50cm9kdWNlIHN1YnRsZSBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjIwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTU6MzM6MTQuNzExODE3ODk4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwOTA4NTcxNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhBUlJBWV9NVUxUSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZz0zNDg9Y29uZmlnIElOVEVSVkFMX1RSRUVfU1BBTl9JVEVSXFxuLS1cXG5saWIvS2NvbmZpZy0zNTEtXFxubGliL0tjb25maWc6MzUyOmNvbmZpZyBYQVJSQVlfTVVMVElcXG5saWIvS2NvbmZpZy0zNTMtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozMzoxNy44MDI2ODI1MzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjgzNDIxMDAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNvbmZpcm1pbmcgYW5kIERlZXAgRGl2aW5nKipcblxuQWxyaWdodCwgeWVwLCBgWEFSUkFZX01VTFRJYCBpcyBkZWZpbml0ZWx5IGEgbGVnaXQgY29uZmlnIG9wdGlvbi4gR29vZC4gTm93LCB0aW1lIHRvIGRyaWxsIGRvd24uIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGxpYi94YXJyYXkuY2AgYW5kIHplcm8gaW4gb24gdGhlIGB4YXNfZmluZGAgZnVuY3Rpb24uIFRoYXQncyB0aGUgY29yZSBvZiBob3cgdGhpcyBhbGwgd29ya3MsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiB3aXRoIGBYQVJSQVlfTVVMVElgIGVuYWJsZWQgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgaGFuZGxlcyBtdWx0aXBsZSB2YWx1ZXMgb3Iga2V5cy4uLiBpcyBpdCB1c2luZyBhIHNlcGFyYXRlIG1ldGFkYXRhIHN0cnVjdHVyZT8gRG9lcyBpdCBhZmZlY3QgaG93IHRoZSBzZWFyY2ggaXMgcGVyZm9ybWVkPyBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLiBUaW1lIHRvIHB1dCBvbiBteSByZWFkaW5nIGdsYXNzZXMsIGFuZCBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6NDAwMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE1OjM0OjEwLjYzNjg5NDY0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQzOTA5ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgXFxcXCp4YXNfZmluZFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgveGFycmF5Lmg9MTU0Mz12b2lkICp4YXNfc3RvcmUoc3RydWN0IHhhX3N0YXRlICosIHZvaWQgKmVudHJ5KTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE1NDQ6dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICosIHVuc2lnbmVkIGxvbmcgbWF4KTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE1NDUtdm9pZCAqeGFzX2ZpbmRfY29uZmxpY3Qoc3RydWN0IHhhX3N0YXRlICopO1xcbi0tXFxubGliL3hhcnJheS5jPTEzNzU9RVhQT1JUX1NZTUJPTF9HUEwoX194YXNfbmV4dCk7XFxuLS1cXG5saWIveGFycmF5LmMtMTM5Mi0gKi9cXG5saWIveGFycmF5LmM6MTM5Mzp2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXFxubGliL3hhcnJheS5jLTEzOTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozNDoxMy4wODA4MDgzMDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc3MDk1Nzk2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRnV6emluZyB0aGUgYHhhc19maW5kYCBGdW5jdGlvbiBpbiBYQXJyYXkqKlxuXG5Pa2F5LCBzbyBgeGFzX2ZpbmRgIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBhbmQgcGFydCBvZiB0aGUgWEFycmF5IEFQSS4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG1lYW4sIGlmIGl0J3MgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgaXQncyBkZWZpbml0ZWx5IGEgcG9pbnQgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgb3V0c2lkZSB3b3JsZCwgYW5kIHRoYXQgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIHZ1bG5lcmFiaWxpdHkgZGV0ZWN0aW9uLiBJ4oCZbGwgbWFrZSBhIG5vdGUgdGhhdCBgeGFzX2ZpbmRgIGlzIHRoZSBwcmltYXJ5IGZvY3VzLCB0aGUga2V5IHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbi5cblxuVGhlIGNvbmZpZ3VyYXRpb24sIGFzIGl0IHN0YW5kcywgc2VlbXMgdG8gYmUgYFhBUlJBWV9NVUxUSWAuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBvciB0ZXN0IGFnYWluc3QuXG5cbkxldCdzIGRvdWJsZSBjaGVjayB3aGVyZSB0aGUgdGVzdCBhY3R1YWxseSBsaXZlcywgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBSaWdodCwgaXQncyBpbiBgbGliL3Rlc3RfeGFycmF5LmNgLiBOb3csIEkgd29uZGVyIGlmIHRoZSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlIGhhcyBpdHMgb3duIGNvbmZpZyBvcHRpb25zLCBwYXJ0aWN1bGFybHkgZm9yIGB0ZXN0X3hhcnJheWAgaXRzZWxmPyBHb3R0YSBrZWVwIGFuIGV5ZSBvdXQgZm9yIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDA2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTU6MzQ6NDcuODUxNzcwMTEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDg0MzAyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfWEFSUkFZXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTI1NTc9Y29uZmlnIFRFU1RfQklUTUFQXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTYzLVxcbmxpYi9LY29uZmlnLmRlYnVnOjI1NjQ6Y29uZmlnIFRFU1RfWEFSUkFZXFxubGliL0tjb25maWcuZGVidWctMjU2NS1cXHR0cmlzdGF0ZSBcXFwiVGVzdCB0aGUgWEFycmF5IGNvZGUgYXQgcnVudGltZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTU6MzQ6NTEuMzYwMjA2MDI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc5OTQ2OTkxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhpbmtpbmcgb24gVGVzdCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgeWVzLCB3ZSBhYnNvbHV0ZWx5IG5lZWQgYFRFU1RfWEFSUkFZYCBpbiB0aGUgbWl4IGZvciB0aGlzIHRlc3QuIFdlJ2xsIGluY2x1ZGUgdGhhdCBpbW1lZGlhdGVseS4gTm93LCBsZXQgbWUganVzdCBhZGQgdGhhdCwgeWVzLCBsZXQncyBpbmNsdWRlIGBURVNUX1hBUlJBWWAgaXRzZWxmIHdoZW4gd2UgcnVuIHRoZSB0ZXN0cy4gSG9sZCBvbiBhIHNlY29uZCwgaG93ZXZlci4uLiBgWEFSUkFZX01VTFRJYC4gVGhhdCdzIHRoYXQgaGlkZGVuIGNvbmZpZywgYSBib29sZWFuLCB0dWNrZWQgYXdheSwgbm90IGRpcmVjdGx5IHByb21wdGVkIGZvci4gSXQncyBjbGVhcmx5IGJlaW5nIGluZmx1ZW5jZWQgYnkgc29tZXRoaW5nIGVsc2UuIFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3Mgc2V0dGluZyB0aGF0IGZsYWcuIExldCdzIGRlbHZlIGluIGFuZCBzZWUgd2hhdCdzIGRpcmVjdGx5IHNlbGVjdGluZyBpdCwgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIG1ha2luZyB0aGlzIGRlY2lzaW9uIGZvciB1cy4gVGhhdCBpcyB0aGUgbmV4dCBzdGVwIHRvIHdvcmsgdGhyb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE1OjM2OjA5LjM1NDkwODc5OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY3MTMyMDA4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgWEFSUkFZX01VTFRJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9MTgyNz1jb25maWcgWDg2X1NHWFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xODMyLVxcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GTyBpZiBOVU1BXFxuYXJjaC94ODYvS2NvbmZpZzoxODMzOlxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG5hcmNoL3g4Ni9LY29uZmlnLTE4MzQtXFx0aGVscFxcbi0tXFxuZnMvS2NvbmZpZz0yNzM9Y29uZmlnIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWctMjc0LVxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6Mjc1OlxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG5mcy9LY29uZmlnLTI3Ni1cXG4tLVxcbm1tL0tjb25maWc9ODQ2PW1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4tLVxcbm1tL0tjb25maWctODQ5LVxcdHNlbGVjdCBDT01QQUNUSU9OXFxubW0vS2NvbmZpZzo4NTA6XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbm1tL0tjb25maWctODUxLVxcdHNlbGVjdCBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZz0xMjM2PWNvbmZpZyBaT05FX0RFVklDRVxcbi0tXFxubW0vS2NvbmZpZy0xMjQwLVxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG5tbS9LY29uZmlnOjEyNDE6XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbm1tL0tjb25maWctMTI0Mi1cXG4tLVxcbnNvdW5kL2NvcmUvS2NvbmZpZz0xODE9Y29uZmlnIFNORF9DVExfRkFTVF9MT09LVVBcXG4tLVxcbnNvdW5kL2NvcmUvS2NvbmZpZy0xODMtXFx0ZGVmYXVsdCB5XFxuc291bmQvY29yZS9LY29uZmlnOjE4NDpcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuc291bmQvY29yZS9LY29uZmlnLTE4NS1cXHRoZWxwXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTEwNj1jb25maWcgS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZzoxMDc6ICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG52aXJ0L2t2bS9LY29uZmlnLTEwOC0gICAgICAgYm9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozNjoxMy4wMjYyMzkzNTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTczODc0NjgxMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWEFSUkFZX01VTFRJIENvbmZpZ3VyYXRpb246IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYFhBUlJBWV9NVUxUSWAgZ2V0cyBlbmFibGVkLCBhbmQgaXQncyBsb29raW5nIGxpa2UgaXQncyBhIGJpdCBvZiBhIGRlcGVuZGVuY3kgY2hhaW4uIEkgc2VlIHRoYXQgdGhpbmdzIGxpa2UgYEhVR0VUTEJfUEFHRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBldmVuIGBTTkRfQ1RMX0ZBU1RfTE9PS1VQYCBhcmUgcmVzcG9uc2libGUgZm9yIHNlbGVjdGluZyBpdC4gVGhlIGNoYWxsZW5nZSBpcywgaXQncyBhIGhpZGRlbiBjb25maWcgb3B0aW9uLiBUaGF0IG1lYW5zIEkgY2FuJ3QganVzdCBmbGlwIGEgc3dpdGNoIGluIHN5emthbGxlciBhbmQgZXhwZWN0IGl0IHRvIHdvcmsuIEtidWlsZCBlZmZlY3RpdmVseSBpZ25vcmVzIGl0IHVubGVzcyBzb21ldGhpbmcgZXhwbGljaXRseSBzZWxlY3RzIGl0LlxuXG5XYWl0IGEgc2Vjb25k4oCmIHN5emthbGxlciAqY2FuKiBlbmFibGUgZWl0aGVyIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3IgYEhVR0VUTEJGU2AuIFRoYXQncyBhIHBvdGVudGlhbCBhdmVudWUhIFRoYXQgZ2l2ZXMgbWUgc29tZSBmbGV4aWJpbGl0eS5cblxuSG1tLCBsZXQncyBleHBsb3JlIGFub3RoZXIgcG9zc2liaWxpdHkuIENvdWxkIGBURVNUX1hBUlJBWWAgYmUgdGhlIGtleT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGxpYi9LY29uZmlnLmRlYnVnYCwgdG8gdmVyaWZ5IGlmIGBURVNUX1hBUlJBWWAgcGxheXMgYSBwYXJ0IGluIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4gVGhpcyBpcyBhIGdvb2QgbGVhZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTQ4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozNzoxMC40MTM3MTAxNjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzM3NzgxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfWEFSUkFZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTI1NTc9Y29uZmlnIFRFU1RfQklUTUFQXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTYzLVxcbmxpYi9LY29uZmlnLmRlYnVnOjI1NjQ6Y29uZmlnIFRFU1RfWEFSUkFZXFxubGliL0tjb25maWcuZGVidWctMjU2NS1cXHR0cmlzdGF0ZSBcXFwiVGVzdCB0aGUgWEFycmF5IGNvZGUgYXQgcnVudGltZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTU6Mzc6MTEuOTg3NDkyMzc4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjE4MzAxNjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgd2l0aCBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVidWcgb3B0aW9ucyByZWxhdGVkIHRvIFhBcnJheXMgd2l0aGluIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYGxpYi9LY29uZmlnLmRlYnVnYC4gVGhlIGBURVNUX1hBUlJBWWAgc3ltYm9sIGlzIHRoZSBrZXkgdG8gdGhhdCBzZWN0aW9uLiBMZXQncyBzdGFydCB0aGVyZS4gSSdsbCByZWFkIGFyb3VuZCB0aGF0IGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMgYW5kIHNjb3BlLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93IGl0J3MgdXNlZCBhbmQgd2hhdCBpdCBjb250cm9scy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogSXMgaXQgYSB0cmlzdGF0ZSBvciBib29sZWFuPyBXaGF0IGRvZXMgaXQgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGFzc29jaWF0ZWQgc3ltYm9scyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gVGhpcyB3aWxsIGhlbHAgdW5kZXJzdGFuZCB0aGUgdGVzdGluZyBhbmQgZGVidWdnaW5nIGNhcGFiaWxpdGllcyBhdmFpbGFibGUgZm9yIFhBcnJheXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5ODcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozNzo0MS42MDU3OTkyNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjU2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU2MDpcXHRcXHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byB0ZXN0IHRoZSBiaXRtYXAgZnVuY3Rpb25zIGF0IGJvb3QuXFxuMjU2MTpcXHRcXG4yNTYyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4yNTYzOlxcdFxcbjI1NjQ6XFx0Y29uZmlnIFRFU1RfWEFSUkFZXFxuMjU2NTpcXHRcXHR0cmlzdGF0ZSBcXFwiVGVzdCB0aGUgWEFycmF5IGNvZGUgYXQgcnVudGltZVxcXCJcXG4yNTY2OlxcdFxcbjI1Njc6XFx0Y29uZmlnIFRFU1RfTUFQTEVfVFJFRVxcbjI1Njg6XFx0XFx0dHJpc3RhdGUgXFxcIlRlc3QgdGhlIE1hcGxlIFRyZWUgY29kZSBhdCBydW50aW1lIG9yIG1vZHVsZSBsb2FkXFxcIlxcbjI1Njk6XFx0XFx0aGVscFxcbjI1NzA6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gdGVzdCB0aGUgbWFwbGUgdHJlZSBjb2RlIGZ1bmN0aW9ucyBhdCBib290LCBvclxcbjI1NzE6XFx0XFx0ICB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkLiBFbmFibGUgXFxcIkRlYnVnIE1hcGxlIFRyZWVzXFxcIiB3aWxsIGVuYWJsZVxcbjI1NzI6XFx0XFx0ICBtb3JlIHZlcmJvc2Ugb3V0cHV0IG9uIGZhaWx1cmVzLlxcbjI1NzM6XFx0XFxuMjU3NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMjU3NTpcXHRcXG4yNTc2OlxcdGNvbmZpZyBURVNUX1JIQVNIVEFCTEVcXG4yNTc3OlxcdFxcdHRyaXN0YXRlIFxcXCJQZXJmb3JtIHNlbGZ0ZXN0IG9uIHJlc2l6YWJsZSBoYXNoIHRhYmxlXFxcIlxcbjI1Nzg6XFx0XFx0aGVscFxcbjI1Nzk6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gdGVzdCB0aGUgcmhhc2h0YWJsZSBmdW5jdGlvbnMgYXQgYm9vdC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTU6Mzc6NDEuNjA2MDI2NTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2OTgyNjI5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVHJvdWJsZXNob290aW5nIFBhdGgqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIGlzbid0IGVuYWJsaW5nIGBYQVJSQVlfTVVMVElgIGJ5IGRlZmF1bHQuIFRoYXQncyBhIHByb2JsZW0sIGJ1dCBpdCdzIG5vdCB0aGUgZW5kIG9mIHRoZSB3b3JsZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJ5IGFuZCBzaW1wbHkgYWRkIGJvdGggYFhBUlJBWV9NVUxUSWAgYW5kIGBURVNUX1hBUlJBWWAgZGlyZWN0bHkgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBIb3dldmVyLCBJIGp1c3QgaGFkIGEgdGhvdWdodDogSWYgYFhBUlJBWV9NVUxUSWAgaXMgYSAqaGlkZGVuKiBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlbiBLYnVpbGQgd2lsbCBzaW1wbHkgaWdub3JlIGl0IGlmIGl0J3MgcGxhY2VkIGluIGEgY29uZmlnIGZpbGUgZGlyZWN0bHkuIEkgY2FuJ3QganVzdCBkZWZpbmUgaXQuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBzb21ldGhpbmcgKnNlbGVjdHMqIGl0LlxuXG5BbHJpZ2h0LCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBtZT8gSG1tbS4uLiBsZXQncyBzZWUuIFRoaW5raW5nIG9mIHJlbGV2YW50IGNvbmZpZ3MgdGhhdCBtaWdodCBpbmRpcmVjdGx5IGVuYWJsZSBgWEFSUkFZX01VTFRJYCwgYEhVR0VUTEJGU2Agb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBzb3VuZCBsaWtlIHBvc3NpYmxlIGNhbmRpZGF0ZXMuIFRoZXkgYXJlIGludm9sdmVkIGluIHNpbWlsYXIgYXJlYXMgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGJlIGEgZGVwZW5kZW5jeS4gQmVmb3JlIEkgZ28gZG93biB0aGF0IHBhdGgsIHRob3VnaCwgaXQncyBjcnVjaWFsIHRvIGNvbmZpcm0gd2hldGhlciBgWEFSUkFZX01VTFRJYCBpcyBhY3R1YWxseSBhIGhpZGRlbiBjb25maWcuIEknbGwgY2hlY2sgdGhhdCBmaXJzdCwganVzdCB0byBtYWtlIHN1cmUgSSdtIG5vdCB3YXN0aW5nIG15IHRpbWUuIEtub3dpbmcgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBvcHRpb24gd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUxNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE1OjM4OjE0LjMwNDI5MjQyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcdGRlcGVuZHMgb24gSU5URVJWQUxfVFJFRVxcbiAzNTE6XFx0XFxuIDM1MjpcXHRjb25maWcgWEFSUkFZX01VTFRJXFxuIDM1MzpcXHRcXHRib29sXFxuIDM1NDpcXHRcXHRoZWxwXFxuIDM1NTpcXHRcXHQgIFN1cHBvcnQgZW50cmllcyB3aGljaCBvY2N1cHkgbXVsdGlwbGUgY29uc2VjdXRpdmUgaW5kaWNlcyBpbiB0aGVcXG4gMzU2OlxcdFxcdCAgWEFycmF5LlxcbiAzNTc6XFx0XFxuIDM1ODpcXHRjb25maWcgQVNTT0NJQVRJVkVfQVJSQVlcXG4gMzU5OlxcdFxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTU6Mzg6MTQuMzA0NDAxODE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzE1NzMwMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBmb3IgUGF0Y2ggSW5jbHVzaW9uKipcblxuT2theSwgc28gdGhpcyBpcyBhIGJvb2xlYW4gb3B0aW9uLCBhbmQgaXQncyBoaWRkZW4gYmVjYXVzZSB0aGVyZSdzIG5vIGRpcmVjdCB1c2VyIHByb21wdCBmb3IgaXQuIEdvdCBpdC4gVG8gZW5zdXJlIHRoaXMgZml4IGlzIGVmZmVjdGl2ZSBhbmQgcHJvcGVybHkgdGVzdGVkLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSBuZWVkIHRvIGJlIHJlYWxseSBjb25zY2lvdXMgb2YgdGhlIHVuZGVybHlpbmcgc3lzdGVtIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IFhBcnJheSdzIGJlaGF2aW9yLiBUaGUgYnVnIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHNwZWNpZmljYWxseSB0YXJnZXRzIGEgZmxhdyBpbiBgeGFzX2ZpbmRgLCB3aGljaCwgYXMgYSBjb3JlIEFQSSBmdW5jdGlvbiwgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgY29uZHVjaXZlIHRvIGRlbW9uc3RyYXRpbmcgdGhlIGZpeC5cblxuVGhlcmVmb3JlLCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIHRvIGVuYWJsZSBjb25maWd1cmF0aW9ucyB0aGF0IHN0cmVzcyB0aGUgc3lzdGVtIHN1Y2ggYXMgYEhVR0VUTEJGU2Agb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSB0aGluayBgSFVHRVRMQkZTYCBpcyB0aGUgYmV0dGVyIGNob2ljZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoLCBhbmQgSSdsbCBpbmNsdWRlIHRoYXQuIEknbSBhbHNvIGdvaW5nIHRvIHRocm93IGluIGBURVNUX1hBUlJBWWAgYXMgYSBjb21wYW5pb24gc2luY2UgdGhlcmUgaXMgYW4gYWRkZWQgdGVzdCBgY2hlY2tfbXVsdGlfZmluZF80YCBpbiB0aGUgdGVzdCBzdWl0ZSB0aGF0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhpcyBmaXguXG5cblRoZSBrZXkgZnVuY3Rpb24gSSdtIGZvY3VzaW5nIG9uIGhlcmUgaXMgYHhhc19maW5kYCDigJMgdGhhdCdzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBUaGlzIHBhdGNoIGlzIHRhcmdldGVkIGF0IHRoZSBtdWx0aS1pbmRleCBlbnRyeSBoYW5kbGluZyB3aXRoaW4gdGhlIFhBcnJheSBzeXN0ZW0uIEJ5IGVuYWJsaW5nIGBIVUdFVExCRlNgIGFuZCBgVEVTVF9YQVJSQVlgLCBJIGJlbGlldmUgd2UgY2FuIGVuc3VyZSB0aGUgcHJvcGVyIGV4ZWN1dGlvbiBvZiB0aGUgbmV3IHRlc3QsIGFuZCB0aGF0IHRoZSBmaXggdG8gYHhhc19maW5kYCBpcyBhZGVxdWF0ZWx5IHZhbGlkYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAzOCwiT3V0cHV0VG9rZW5zIjo5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE1OjM4OjU0LjYyMDEzNTc0N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDE4NjgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJURVNUX1hBUlJBWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhhc19maW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHhhc19maW5kYCB3aGVuIGhhbmRsaW5nIG11bHRpLWluZGV4IGVudHJpZXMgaW4gWEFycmF5LCB3aGljaCBpcyBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgQVBJIHVzZWQgYWNyb3NzIHRoZSBrZXJuZWwuIEl0IGFsc28gYWRkcyBhIG5ldyB0ZXN0IGNhc2UgdG8gYHRlc3RfeGFycmF5YC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlRFU1RfWEFSUkFZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGFzX2ZpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgeGFzX2ZpbmRgIHdoZW4gaGFuZGxpbmcgbXVsdGktaW5kZXggZW50cmllcyBpbiBYQXJyYXksIHdoaWNoIGlzIGEgY29yZSBkYXRhIHN0cnVjdHVyZSBBUEkgdXNlZCBhY3Jvc3MgdGhlIGtlcm5lbC4gSXQgYWxzbyBhZGRzIGEgbmV3IHRlc3QgY2FzZSB0byBgdGVzdF94YXJyYXlgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozODo1NC43NzQzMzE2NjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODgwNTAzMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTU6Mzg6NTQuNzc0ODYxNzE1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI3ODc5OTY4MDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgWEFycmF5IGl0ZXJhdG9yIChgeGFzX2ZpbmRgKSB3aGVyZSBgeGFzLVxcdTAwM2V4YV9vZmZzZXRgIHdhcyBub3QgY29ycmVjdGx5IHVwZGF0ZWQgd2hlbiBpdGVyYXRpbmcgb3ZlciBtdWx0aS1pbmRleCBlbnRyaWVzIGluIG5vZGVzIHdpdGggYSBub24temVybyBzaGlmdC4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBpdGVyYXRpb24gcmVzdWx0cywgaW5maW5pdGUgbG9vcHMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2l0aGluIHRoZSBYQXJyYXkgbm9kZSdzIHNsb3RzIGFycmF5LiBUaGVzZSBpc3N1ZXMgYXJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGFuZCBtZW1vcnkgc2FmZXR5IChvdXQtb2YtYm91bmRzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdkNzRlNWI2NjQ1ZWE2M2I4NzVlMmMyNjk3ZmRlNTkyMDhjNjcxOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxNTozMjowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3hhcnJheS5jIGIvbGliL3Rlc3RfeGFycmF5LmNcbmluZGV4IDVjYTBhZWZlZTlhYTUuLmNkYTcyNDVlNDc3MTYgMTAwNjQ0XG4tLS0gYS9saWIvdGVzdF94YXJyYXkuY1xuKysrIGIvbGliL3Rlc3RfeGFycmF5LmNcbkBAIC0xMjQ3LDYgKzEyNDcsNjcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8zKHN0cnVjdCB4YXJyYXkgKnhhKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzQoc3RydWN0IHhhcnJheSAqeGEpXG4re1xuKyNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG4rXHRYQV9TVEFURSh4YXMsIHhhLCAxMDApO1xuK1x0WEFfU1RBVEVfT1JERVIoc3BsaXQsIHhhLCAwLCAwKTtcbitcdHZvaWQgKmVudHJ5O1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0LyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovXG4rXHR4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpO1xuK1x0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcbitcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7XG4rXHR4YV9lcmFzZV9pbmRleCh4YSwgMCk7XG4rXHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuK1xuK1x0LyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi9cbitcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XG4rXHRYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpO1xuK1xuK1x0eGFzX3NldChcdTAwMjZ4YXMsIDEwMCk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFzX3NwbGl0X2FsbG9jKFx1MDAyNnNwbGl0LCB4YV9ta19pbmRleCgwKSwgNywgR0ZQX0tFUk5FTCk7XG4rXHR4YXNfbG9jayhcdTAwMjZzcGxpdCk7XG4rXHR4YXNfc3BsaXQoXHUwMDI2c3BsaXQsIHhhX21rX2luZGV4KDApLCA3KTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEyODsgaSsrKVxuK1x0XHRfX3hhX3N0b3JlKHhhLCBpLCB4YV9ta19pbmRleChpKSwgMCk7XG4rXHR4YXNfdW5sb2NrKFx1MDAyNnNwbGl0KTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTtcbitcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7XG4rXG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHhhX2Rlc3Ryb3koeGEpO1xuK1x0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcbisjZW5kaWZcbit9XG4rXG4gc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZF8xKHN0cnVjdCB4YXJyYXkgKnhhKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgaiwgaztcbkBAIC0xMzcwLDYgKzE0MzEsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kKHN0cnVjdCB4YXJyYXkgKnhhKVxuIFx0XHRjaGVja19tdWx0aV9maW5kXzEoeGEsIGkpO1xuIFx0Y2hlY2tfbXVsdGlfZmluZF8yKHhhKTtcbiBcdGNoZWNrX211bHRpX2ZpbmRfMyh4YSk7XG4rXHRjaGVja19tdWx0aV9maW5kXzQoeGEpO1xuIH1cbiBcbiAvKiBTZWUgZmluZF9zd2FwX2VudHJ5KCkgaW4gbW0vc2htZW0uYyAqL1xuZGlmZiAtLWdpdCBhL2xpYi94YXJyYXkuYyBiL2xpYi94YXJyYXkuY1xuaW5kZXggOWE4YjQ5MTY1NDBjZi4uOTgwMzI0ZDY4NmJkMCAxMDA2NDRcbi0tLSBhL2xpYi94YXJyYXkuY1xuKysrIGIvbGliL3hhcnJheS5jXG5AQCAtMTQwNiw5ICsxNDA2LDExIEBAIHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcbiBcdFx0ZW50cnkgPSB4YXNfbG9hZCh4YXMpO1xuIFx0XHRpZiAoZW50cnkgfHwgeGFzX25vdF9ub2RlKHhhcy1cdTAwM2V4YV9ub2RlKSlcbiBcdFx0XHRyZXR1cm4gZW50cnk7XG4tXHR9IGVsc2UgaWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gKHhhcy1cdTAwM2V4YV9pbmRleCBcdTAwMjYgWEFfQ0hVTktfTUFTSykpIHtcbi1cdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVx1MDAzZXhhX2luZGV4IC0gMSkgXHUwMDI2IFhBX0NIVU5LX01BU0spICsgMTtcbitcdH0gZWxzZSBpZiAoeGFzLVx1MDAzZXhhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpKSB7XG4rXHRcdGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQpXG4rXHRcdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVx1MDAzZXhhX2luZGV4IC0gMSkgXHUwMDI2IFhBX0NIVU5LX01BU0spICsgMTtcbitcdFx0ZWxzZVxuK1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpO1xuIFx0fVxuIFxuIFx0eGFzX25leHRfb2Zmc2V0KHhhcyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozODo1NC43NzQ4NjM2OTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc4Nzk5Mzk4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWEFycmF5IFBhdGNoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYGxpYi94YXJyYXkuY2AuIEl0J3MgYSB0YXJnZXRlZCBmaXggd2l0aGluIHRoZSBgeGFzX2ZpbmRgIGZ1bmN0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgdHJhdmVyc2luZyBYQXJyYXlzLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgdXBkYXRpbmcgYHhhcy1cdTAwM2V4YV9vZmZzZXRgIGNvcnJlY3RseSwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5vZGVzIHRoYXQgaGF2ZSBhIG5vbi16ZXJvIGBzaGlmdGAgdmFsdWUuIEl0IHNlZW1zIHRoZSBvcmlnaW5hbCBsb2dpYyBoYWQgYSBmbGF3OyBpdCB3YXNuJ3QgaGFuZGxpbmcgdGhlIG9mZnNldCBjYWxjdWxhdGlvbiBwcm9wZXJseSBpbiBhbGwgY2FzZXMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5jb3JyZWN0IGl0ZXJhdGlvbiDigJMgc2tpcHBpbmcgZW50cmllcywgcmV0dXJuaW5nIHRoZSB3cm9uZyBlbnRyaWVzLCBvciBldmVuIHZlbnR1cmluZyBpbnRvIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLlxuXG5UaGUgY29kZSBzbmlwcGV0IHNob3dzIHRoZSBjb3JyZWN0aXZlIGFjdGlvbi4gVGhleSd2ZSByZXBsYWNlZCB0aGUgY29uZGl0aW9uYWwgYmxvY2sgd2l0aCBhIG1vcmUgcm9idXN0IGNoZWNrIG9uIGB4YXMtXHUwMDNleGFfb2Zmc2V0YC4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgY29uZGl0aW9uIHRvIGNoZWNrIGZvciBhIHplcm8gc2hpZnQsIGJ1dCB0aGlzIG5ldyBsb2dpYyBhcHBlYXJzIHRvIGJlIHRoZSBjb3JyZWN0IHdheSB0byBjYWxjdWxhdGUgdGhlIG9mZnNldCBjb25zaWRlcmluZyBub2RlcyB3aXRoIGEgbm9uLXplcm8gc2hpZnQuIEl0IGZlZWxzIGxpa2UgdGhlIG9sZCBjb2RlIG1pZ2h0IGhhdmUgbWlzc2VkIHNvbWUgZWRnZSBjYXNlcyB3aGVuIGNhbGN1bGF0aW5nIHRoZSBvZmZzZXQuIFRoaXMgY291bGQgaGF2ZSBlYXNpbHkgY2F1c2VkIGEgc3VidGxlIGJ1ZywgZXNwZWNpYWxseSBpbiBjb21wbGV4IFhBcnJheSBzdHJ1Y3R1cmVzIHdoZXJlIHNoaWZ0cyBjb21lIGludG8gcGxheS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgd2FzIHRvIGNvbnNpZGVyIGlmIHRoZXJlIG1pZ2h0IGJlIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UncmUgZGVhbGluZyB3aXRoIHBvaW50ZXIvdmFsdWUgc2xvdHMgaW4gYW4gWEFycmF5LCBzbyBJIHF1aWNrbHkgdGhvdWdodCBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIEkgcmVtZW1iZXIgdGhhdCBYQXJyYXkgbm9kZXMgYXJlIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV9hbGxvY2AsIHNwZWNpZmljYWxseSB2aWEgYHJhZGl4X3RyZWVfbm9kZV9hbGxvY2AsIHdoaWNoIHVzZXMgdGhlIGByYWRpeF90cmVlX25vZGVfY2FjaGVwYC4gSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBjYWNoZSBpcyBjcmVhdGVkIHdpdGggYFNMQUJfUEFOSUNgLCBhbmQgZXZlbiBpZiB0aGUgbm9kZXMgd2VyZW4ndCBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24sIHRoZSBzbG90cyBhcmUgaW5pdGlhbGl6ZWQgd2hlbiBlbnRyaWVzIGFyZSBzdG9yZWQuIE5vIG5lZWQgdG8gd29ycnkgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBoZXJlLlxuXG5UaGVyZWZvcmUsIHRoZSBtYWluIGNvbmNlcm4gaGVyZSBib2lscyBkb3duIHRvIHRoZSBsb2dpYyBvZiB0aGUgaXRlcmF0b3IuIFRoZSBidWcgaGVyZSBpcyBwdXJlbHkgYSBjb250cm9sLWZsb3cgaXNzdWUuIEtBU0FOIGlzIHRoZSByZWxldmFudCB0b29sIGhlcmUgdG8gY2F0Y2ggb3V0LW9mLWJvdW5kcyBtZW1vcnkgaXNzdWVzLCB3aGljaCB0aGlzIGZpeCB3b3VsZCBhZGRyZXNzLlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggcmVzb2x2ZXMgYSBsb2dpYyBlcnJvciBpbiBpdGVyYXRpb24gYW5kIEkgc2VlIG5vIHBvdGVudGlhbCBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgZml4IHByaW1hcmlseSBhZGRyZXNzZXMgY29udHJvbC1mbG93IGFuZCBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGNhdWdodCBieSBLQVNBTi4gV2UgZG9uJ3QgbmVlZCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBmb3IgdGhpcy4gSXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBidWcgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE3LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE1OjM5OjIyLjY1NDgwNjQ0OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIFhBcnJheSBpdGVyYXRvciAoYHhhc19maW5kYCkgd2hlcmUgYHhhcy1cXHUwMDNleGFfb2Zmc2V0YCB3YXMgbm90IGNvcnJlY3RseSB1cGRhdGVkIHdoZW4gaXRlcmF0aW5nIG92ZXIgbXVsdGktaW5kZXggZW50cmllcyBpbiBub2RlcyB3aXRoIGEgbm9uLXplcm8gc2hpZnQuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgaXRlcmF0aW9uIHJlc3VsdHMsIGluZmluaXRlIGxvb3BzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdpdGhpbiB0aGUgWEFycmF5IG5vZGUncyBzbG90cyBhcnJheS4gVGhlc2UgaXNzdWVzIGFyZSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgbWVtb3J5IHNhZmV0eSAob3V0LW9mLWJvdW5kcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgWEFycmF5IGl0ZXJhdG9yIChgeGFzX2ZpbmRgKSB3aGVyZSBgeGFzLVxcdTAwM2V4YV9vZmZzZXRgIHdhcyBub3QgY29ycmVjdGx5IHVwZGF0ZWQgd2hlbiBpdGVyYXRpbmcgb3ZlciBtdWx0aS1pbmRleCBlbnRyaWVzIGluIG5vZGVzIHdpdGggYSBub24temVybyBzaGlmdC4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBpdGVyYXRpb24gcmVzdWx0cywgaW5maW5pdGUgbG9vcHMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2l0aGluIHRoZSBYQXJyYXkgbm9kZSdzIHNsb3RzIGFycmF5LiBUaGVzZSBpc3N1ZXMgYXJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGFuZCBtZW1vcnkgc2FmZXR5IChvdXQtb2YtYm91bmRzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow7ls82[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 15:30:52 +0000 UTC FinishedAt: 2026-08-27 15:39:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "TEST_XARRAY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "TEST_XARRAY" ], "series_id": "bab1cf7e-e891-46fb-ad9b-18307bd59c6e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "xas_find" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtURVNUX1hBUlJBWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIFhBcnJheSBpdGVyYXRvciAoYHhhc19maW5kYCkgd2hlcmUgYHhhcy1cdTAwM2V4YV9vZmZzZXRgIHdhcyBub3QgY29ycmVjdGx5IHVwZGF0ZWQgd2hlbiBpdGVyYXRpbmcgb3ZlciBtdWx0aS1pbmRleCBlbnRyaWVzIGluIG5vZGVzIHdpdGggYSBub24temVybyBzaGlmdC4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBpdGVyYXRpb24gcmVzdWx0cywgaW5maW5pdGUgbG9vcHMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2l0aGluIHRoZSBYQXJyYXkgbm9kZSYjMzk7cyBzbG90cyBhcnJheS4gVGhlc2UgaXNzdWVzIGFyZSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgbWVtb3J5IHNhZmV0eSAob3V0LW9mLWJvdW5kcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHhhc19maW5kYCB3aGVuIGhhbmRsaW5nIG11bHRpLWluZGV4IGVudHJpZXMgaW4gWEFycmF5LCB3aGljaCBpcyBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgQVBJIHVzZWQgYWNyb3NzIHRoZSBrZXJuZWwuIEl0IGFsc28gYWRkcyBhIG5ldyB0ZXN0IGNhc2UgdG8gYHRlc3RfeGFycmF5YC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxNTozMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdkNzRlNWI2NjQ1ZWE2M2I4NzVlMmMyNjk3ZmRlNTkyMDhjNjcxOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxNTozMjowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9saWIvdGVzdF94YXJyYXkuYyBiL2xpYi90ZXN0X3hhcnJheS5jXG5pbmRleCA1Y2EwYWVmZWU5YWE1Li5jZGE3MjQ1ZTQ3NzE2IDEwMDY0NFxuLS0tIGEvbGliL3Rlc3RfeGFycmF5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X3hhcnJheS5jXG5AQCAtMTI0Nyw2ICYjNDM7MTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzQoc3RydWN0IHhhcnJheSAqeGEpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbiYjNDM7XHRYQV9TVEFURSh4YXMsIHhhLCAxMDApO1xuJiM0MztcdFhBX1NUQVRFX09SREVSKHNwbGl0LCB4YSwgMCwgMCk7XG4mIzQzO1x0dm9pZCAqZW50cnk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpO1xuJiM0MztcbiYjNDM7XHQvKiAoMSkgT3JkZXItNyBlbnRyeSAoMC0xMjcpIHdpdGggYWRqYWNlbnQgZW50cnkgYXQgMTI4LCBzdGFydGluZyBhdCAxMDAgKi9cbiYjNDM7XHR4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuJiM0MztcbiYjNDM7XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7XG4mIzQzO1xuJiM0MztcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHhhX2VyYXNlX2luZGV4KHhhLCAxMjgpO1xuJiM0MztcdHhhX2VyYXNlX2luZGV4KHhhLCAwKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuJiM0MztcbiYjNDM7XHQvKiAoMikgU3BsaXR0aW5nIGEgbXVsdGktaW5kZXggZW50cnkgYWZ0ZXIgYSBsb29rdXAgYmVnaW5zIGluc2lkZSBpdCAqL1xuJiM0MztcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcbiYjNDM7XG4mIzQzO1x0eGFzX3NldChcdTAwMjZ4YXMsIDEwMCk7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xuJiM0MztcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHhhc19zcGxpdF9hbGxvYyhcdTAwMjZzcGxpdCwgeGFfbWtfaW5kZXgoMCksIDcsIEdGUF9LRVJORUwpO1xuJiM0MztcdHhhc19sb2NrKFx1MDAyNnNwbGl0KTtcbiYjNDM7XHR4YXNfc3BsaXQoXHUwMDI2c3BsaXQsIHhhX21rX2luZGV4KDApLCA3KTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMjg7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0X194YV9zdG9yZSh4YSwgaSwgeGFfbWtfaW5kZXgoaSksIDApO1xuJiM0MztcdHhhc191bmxvY2soXHUwMDI2c3BsaXQpO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4mIzQzO1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xuJiM0MztcbiYjNDM7XHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHR4YV9kZXN0cm95KHhhKTtcbiYjNDM7XHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kXzEoc3RydWN0IHhhcnJheSAqeGEpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBpLCBqLCBrO1xuQEAgLTEzNzAsNiAmIzQzOzE0MzEsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kKHN0cnVjdCB4YXJyYXkgKnhhKVxuIFx0XHRjaGVja19tdWx0aV9maW5kXzEoeGEsIGkpO1xuIFx0Y2hlY2tfbXVsdGlfZmluZF8yKHhhKTtcbiBcdGNoZWNrX211bHRpX2ZpbmRfMyh4YSk7XG4mIzQzO1x0Y2hlY2tfbXVsdGlfZmluZF80KHhhKTtcbiB9XG4gXG4gLyogU2VlIGZpbmRfc3dhcF9lbnRyeSgpIGluIG1tL3NobWVtLmMgKi9cbmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmNcbmluZGV4IDlhOGI0OTE2NTQwY2YuLjk4MDMyNGQ2ODZiZDAgMTAwNjQ0XG4tLS0gYS9saWIveGFycmF5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi94YXJyYXkuY1xuQEAgLTE0MDYsOSAmIzQzOzE0MDYsMTEgQEAgdm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIFx0XHRlbnRyeSA9IHhhc19sb2FkKHhhcyk7XG4gXHRcdGlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLVx1MDAzZXhhX25vZGUpKVxuIFx0XHRcdHJldHVybiBlbnRyeTtcbi1cdH0gZWxzZSBpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgeGFzLVx1MDAzZXhhX29mZnNldCAhPSAoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAyNiBYQV9DSFVOS19NQVNLKSkge1xuLVx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gKCh4YXMtXHUwMDNleGFfaW5kZXggLSAxKSBcdTAwMjYgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTtcbiYjNDM7XHR9IGVsc2UgaWYgKHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtXHUwMDNleGFfaW5kZXgsIHhhcy1cdTAwM2V4YV9ub2RlKSkge1xuJiM0MztcdFx0aWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdClcbiYjNDM7XHRcdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVx1MDAzZXhhX2luZGV4IC0gMSkgXHUwMDI2IFhBX0NIVU5LX01BU0spICYjNDM7IDE7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpO1xuIFx0fVxuIFxuIFx0eGFzX25leHRfb2Zmc2V0KHhhcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTU6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtURVNUX1hBUlJBWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB4YXNfZmluZGAgd2hlbiBoYW5kbGluZyBtdWx0aS1pbmRleCBlbnRyaWVzIGluIFhBcnJheSwgd2hpY2ggaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlIEFQSSB1c2VkIGFjcm9zcyB0aGUga2VybmVsLiBJdCBhbHNvIGFkZHMgYSBuZXcgdGVzdCBjYXNlIHRvIGB0ZXN0X3hhcnJheWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZDc0ZTViNjY0NWVhNjNiODc1ZTJjMjY5N2ZkZTU5MjA4YzY3MTlhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjcgMTU6MzI6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9saWIvdGVzdF94YXJyYXkuYyBiL2xpYi90ZXN0X3hhcnJheS5jCmluZGV4IDVjYTBhZWZlZTlhYTUuLmNkYTcyNDVlNDc3MTYgMTAwNjQ0Ci0tLSBhL2xpYi90ZXN0X3hhcnJheS5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X3hhcnJheS5jCkBAIC0xMjQ3LDYgJiM0MzsxMjQ3LDY3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfMyhzdHJ1Y3QgeGFycmF5ICp4YSkKIAl9CiB9CiAKJiM0MztzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzQoc3RydWN0IHhhcnJheSAqeGEpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJCiYjNDM7CVhBX1NUQVRFKHhhcywgeGEsIDEwMCk7CiYjNDM7CVhBX1NUQVRFX09SREVSKHNwbGl0LCB4YSwgMCwgMCk7CiYjNDM7CXZvaWQgKmVudHJ5OwomIzQzOwl1bnNpZ25lZCBsb25nIGk7CiYjNDM7CiYjNDM7CS8qICgxKSBPcmRlci03IGVudHJ5ICgwLTEyNykgd2l0aCBhZGphY2VudCBlbnRyeSBhdCAxMjgsIHN0YXJ0aW5nIGF0IDEwMCAqLwomIzQzOwl4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWVudHJ5ID0geGFzX2ZpbmQoJmFtcDt4YXMsIFVMT05HX01BWCk7CiYjNDM7CVhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApOwomIzQzOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpOwomIzQzOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJeGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7CiYjNDM7CXhhX2VyYXNlX2luZGV4KHhhLCAwKTsKJiM0MzsJWEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTsKJiM0MzsKJiM0MzsJLyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi8KJiM0MzsJeGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTsKJiM0MzsKJiM0MzsJeGFzX3NldCgmYW1wO3hhcywgMTAwKTsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXhhc19zcGxpdF9hbGxvYygmYW1wO3NwbGl0LCB4YV9ta19pbmRleCgwKSwgNywgR0ZQX0tFUk5FTCk7CiYjNDM7CXhhc19sb2NrKCZhbXA7c3BsaXQpOwomIzQzOwl4YXNfc3BsaXQoJmFtcDtzcGxpdCwgeGFfbWtfaW5kZXgoMCksIDcpOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTI4OyBpJiM0MzsmIzQzOykKJiM0MzsJCV9feGFfc3RvcmUoeGEsIGksIHhhX21rX2luZGV4KGkpLCAwKTsKJiM0MzsJeGFzX3VubG9jaygmYW1wO3NwbGl0KTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpOwomIzQzOwlYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpOwomIzQzOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJeGFfZGVzdHJveSh4YSk7CiYjNDM7CVhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7CiYjNDM7I2VuZGlmCiYjNDM7fQomIzQzOwogc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZF8xKHN0cnVjdCB4YXJyYXkgKnhhKQogewogCXVuc2lnbmVkIGxvbmcgaSwgaiwgazsKQEAgLTEzNzAsNiAmIzQzOzE0MzEsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kKHN0cnVjdCB4YXJyYXkgKnhhKQogCQljaGVja19tdWx0aV9maW5kXzEoeGEsIGkpOwogCWNoZWNrX211bHRpX2ZpbmRfMih4YSk7CiAJY2hlY2tfbXVsdGlfZmluZF8zKHhhKTsKJiM0MzsJY2hlY2tfbXVsdGlfZmluZF80KHhhKTsKIH0KIAogLyogU2VlIGZpbmRfc3dhcF9lbnRyeSgpIGluIG1tL3NobWVtLmMgKi8KZGlmZiAtLWdpdCBhL2xpYi94YXJyYXkuYyBiL2xpYi94YXJyYXkuYwppbmRleCA5YThiNDkxNjU0MGNmLi45ODAzMjRkNjg2YmQwIDEwMDY0NAotLS0gYS9saWIveGFycmF5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL3hhcnJheS5jCkBAIC0xNDA2LDkgJiM0MzsxNDA2LDExIEBAIHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heCkKIAkJZW50cnkgPSB4YXNfbG9hZCh4YXMpOwogCQlpZiAoZW50cnkgfHwgeGFzX25vdF9ub2RlKHhhcy0mZ3Q7eGFfbm9kZSkpCiAJCQlyZXR1cm4gZW50cnk7Ci0JfSBlbHNlIGlmICgheGFzLSZndDt4YV9ub2RlLSZndDtzaGlmdCAmYW1wOyZhbXA7Ci0JCSAgICB4YXMtJmd0O3hhX29mZnNldCAhPSAoeGFzLSZndDt4YV9pbmRleCAmYW1wOyBYQV9DSFVOS19NQVNLKSkgewotCQl4YXMtJmd0O3hhX29mZnNldCA9ICgoeGFzLSZndDt4YV9pbmRleCAtIDEpICZhbXA7IFhBX0NIVU5LX01BU0spICYjNDM7IDE7CiYjNDM7CX0gZWxzZSBpZiAoeGFzLSZndDt4YV9vZmZzZXQgIT0gZ2V0X29mZnNldCh4YXMtJmd0O3hhX2luZGV4LCB4YXMtJmd0O3hhX25vZGUpKSB7CiYjNDM7CQlpZiAoIXhhcy0mZ3Q7eGFfbm9kZS0mZ3Q7c2hpZnQpCiYjNDM7CQkJeGFzLSZndDt4YV9vZmZzZXQgPSAoKHhhcy0mZ3Q7eGFfaW5kZXggLSAxKSAmYW1wOyBYQV9DSFVOS19NQVNLKSAmIzQzOyAxOwomIzQzOwkJZWxzZQomIzQzOwkJCXhhcy0mZ3Q7eGFfb2Zmc2V0ID0gZ2V0X29mZnNldCh4YXMtJmd0O3hhX2luZGV4LCB4YXMtJmd0O3hhX25vZGUpOwogCX0KIAogCXhhc19uZXh0X29mZnNldCh4YXMpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxNTozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjIwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIFhBcnJheSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgd2UmIzM5O3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiB0byB0aGUgWEFycmF5IGNvZGUsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgYGxpYi90ZXN0X3hhcnJheS5jYCBhbmQgYGxpYi94YXJyYXkuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgeGFzX2ZpbmRgIGZ1bmN0aW9uIGluIGBsaWIveGFycmF5LmNgLCBhbmQgYSBuZXcgdGVzdCwgYGNoZWNrX211bHRpX2ZpbmRfNGAsIGFkZGVkIHRvIHRoZSB0ZXN0IGZpbGUuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHJlY29nbml6ZSB0aGF0IGB4YXNfZmluZGAgaXMgYSBjcml0aWNhbCBBUEkgZW50cnkgcG9pbnQgZm9yIFhBcnJheS4gQ29uc2lkZXJpbmcgaG93IGV4dGVuc2l2ZWx5IFhBcnJheSBpcyB1c2VkIHdpdGhpbiB0aGUga2VybmVsLCBhbnkgY2hhbmdlIGhlcmUgZGVtYW5kcyBjYXJlZnVsIHNjcnV0aW55LgoKVGhlIGFjdHVhbCBjb2RlIGNoYW5nZSBpbiBgeGFzX2ZpbmRgIGxvb2tzIGxpa2UgYSBjb3JyZWN0aW9uIHRvIGhvdyB0aGUgb2Zmc2V0IGlzIGNhbGN1bGF0ZWQsIHdoaWNoIGRlcGVuZHMgb24gd2hldGhlciB0aGUgbm9kZSBpcyBzaGlmdGVkIG9yIG5vdC4gVGhlIG9yaWdpbmFsIGNvZGUgc2VlbXMgdG8gaGF2ZSBhbiBlZGdlIGNhc2UgZm9yIGhhbmRsaW5nIHRoZSBvZmZzZXQgd2hlbiBub3Qgc2hpZnRlZCwgYW5kIHRoaXMgcGF0Y2ggYXBwZWFycyB0byBiZSB0cnlpbmcgdG8gZml4IGl0IGFuZCB1c2UgYGdldF9vZmZzZXRgIGFsd2F5cy4gTm93LCB0aGUgbG9naWMgaXMgYmVpbmcgdXBkYXRlZC4KClRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXJvdW5kIHRoZSB0ZXN0OyBpdCYjMzk7cyBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSWAuIFRoYXQgdGVsbHMgbWUgdGhhdCB0aGUgaW50ZW50IGJlaGluZCB0aGlzIHRlc3QgaXMgYSBtdWx0aS1maW5kIHNjZW5hcmlvLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfWEFSUkFZX01VTFRJYCBpcyBhIGxlZ2l0aW1hdGUgY29uZmlndXJhdGlvbiBvcHRpb24uIElmIGl0IGlzLCB0aGVuIHRoZSB0ZXN04oCZcyBwcmVzZW5jZSBpbXBsaWVzIGEgc3BlY2lmaWMsIHBlcmhhcHMgb3B0aW1pemVkLCBmdW5jdGlvbmFsaXR5IHRoYXTigJlzIGJlaW5nIGV4ZXJjaXNlZCBieSB0aGlzIGNoYW5nZSwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBicm9hZGVyIFhBcnJheSBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgS2NvbmZpZyB0byBjaGVjay4gSSYjMzk7bGwgbmVlZCB0byByZWFsbHkgcnVuIHRoaXMgcGF0Y2ggdGhyb3VnaCBpdHMgcGFjZXMgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJiMzOTt0IHJlZ3Jlc3MgcGVyZm9ybWFuY2Ugb3IgaW50cm9kdWNlIHN1YnRsZSBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYQVJSQVlfTVVMVEkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWc9MzQ4PWNvbmZpZyBJTlRFUlZBTF9UUkVFX1NQQU5fSVRFUlxuLS1cbmxpYi9LY29uZmlnLTM1MS1cbmxpYi9LY29uZmlnOjM1Mjpjb25maWcgWEFSUkFZX01VTFRJXG5saWIvS2NvbmZpZy0zNTMtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTU6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAwMgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDb25maXJtaW5nIGFuZCBEZWVwIERpdmluZyoqCgpBbHJpZ2h0LCB5ZXAsIGBYQVJSQVlfTVVMVElgIGlzIGRlZmluaXRlbHkgYSBsZWdpdCBjb25maWcgb3B0aW9uLiBHb29kLiBOb3csIHRpbWUgdG8gZHJpbGwgZG93bi4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGxpYi94YXJyYXkuY2AgYW5kIHplcm8gaW4gb24gdGhlIGB4YXNfZmluZGAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IHRoaXMgYWxsIHdvcmtzLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGVtZW50YXRpb24gd2l0aCBgWEFSUkFZX01VTFRJYCBlbmFibGVkIGlzIGNydWNpYWwuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGhhbmRsZXMgbXVsdGlwbGUgdmFsdWVzIG9yIGtleXMuLi4gaXMgaXQgdXNpbmcgYSBzZXBhcmF0ZSBtZXRhZGF0YSBzdHJ1Y3R1cmU/IERvZXMgaXQgYWZmZWN0IGhvdyB0aGUgc2VhcmNoIGlzIHBlcmZvcm1lZD8gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuIFRpbWUgdG8gcHV0IG9uIG15IHJlYWRpbmcgZ2xhc3NlcywgYW5kIGdldCB0byB3b3JrIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZvaWQgXFwqeGFzX2ZpbmRcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC94YXJyYXkuaD0xNTQzPXZvaWQgKnhhc19zdG9yZShzdHJ1Y3QgeGFfc3RhdGUgKiwgdm9pZCAqZW50cnkpO1xuaW5jbHVkZS9saW51eC94YXJyYXkuaDoxNTQ0OnZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqLCB1bnNpZ25lZCBsb25nIG1heCk7XG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE1NDUtdm9pZCAqeGFzX2ZpbmRfY29uZmxpY3Qoc3RydWN0IHhhX3N0YXRlICopO1xuLS1cbmxpYi94YXJyYXkuYz0xMzc1PUVYUE9SVF9TWU1CT0xfR1BMKF9feGFzX25leHQpO1xuLS1cbmxpYi94YXJyYXkuYy0xMzkyLSAqL1xubGliL3hhcnJheS5jOjEzOTM6dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxubGliL3hhcnJheS5jLTEzOTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipGdXp6aW5nIHRoZSBgeGFzX2ZpbmRgIEZ1bmN0aW9uIGluIFhBcnJheSoqCgpPa2F5LCBzbyBgeGFzX2ZpbmRgIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBhbmQgcGFydCBvZiB0aGUgWEFycmF5IEFQSS4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG1lYW4sIGlmIGl0JiMzOTtzIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEksIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBwb2ludCBvZiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBvdXRzaWRlIHdvcmxkLCBhbmQgdGhhdCBtYWtlcyBpdCBhIHByaW1lIHRhcmdldCBmb3IgdnVsbmVyYWJpbGl0eSBkZXRlY3Rpb24uIEnigJlsbCBtYWtlIGEgbm90ZSB0aGF0IGB4YXNfZmluZGAgaXMgdGhlIHByaW1hcnkgZm9jdXMsIHRoZSBrZXkgc3ltYm9sIHRvIGNvbmNlbnRyYXRlIG9uLgoKVGhlIGNvbmZpZ3VyYXRpb24sIGFzIGl0IHN0YW5kcywgc2VlbXMgdG8gYmUgYFhBUlJBWV9NVUxUSWAuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBvciB0ZXN0IGFnYWluc3QuCgpMZXQmIzM5O3MgZG91YmxlIGNoZWNrIHdoZXJlIHRoZSB0ZXN0IGFjdHVhbGx5IGxpdmVzLCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFJpZ2h0LCBpdCYjMzk7cyBpbiBgbGliL3Rlc3RfeGFycmF5LmNgLiBOb3csIEkgd29uZGVyIGlmIHRoZSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlIGhhcyBpdHMgb3duIGNvbmZpZyBvcHRpb25zLCBwYXJ0aWN1bGFybHkgZm9yIGB0ZXN0X3hhcnJheWAgaXRzZWxmPyBHb3R0YSBrZWVwIGFuIGV5ZSBvdXQgZm9yIHRob3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBURVNUX1hBUlJBWSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0yNTU3PWNvbmZpZyBURVNUX0JJVE1BUFxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTI1NjMtXG5saWIvS2NvbmZpZy5kZWJ1ZzoyNTY0OmNvbmZpZyBURVNUX1hBUlJBWVxubGliL0tjb25maWcuZGVidWctMjU2NS1cdHRyaXN0YXRlIFwmIzM0O1Rlc3QgdGhlIFhBcnJheSBjb2RlIGF0IHJ1bnRpbWVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxNTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODI2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVGhpbmtpbmcgb24gVGVzdCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHllcywgd2UgYWJzb2x1dGVseSBuZWVkIGBURVNUX1hBUlJBWWAgaW4gdGhlIG1peCBmb3IgdGhpcyB0ZXN0LiBXZSYjMzk7bGwgaW5jbHVkZSB0aGF0IGltbWVkaWF0ZWx5LiBOb3csIGxldCBtZSBqdXN0IGFkZCB0aGF0LCB5ZXMsIGxldCYjMzk7cyBpbmNsdWRlIGBURVNUX1hBUlJBWWAgaXRzZWxmIHdoZW4gd2UgcnVuIHRoZSB0ZXN0cy4gSG9sZCBvbiBhIHNlY29uZCwgaG93ZXZlci4uLiBgWEFSUkFZX01VTFRJYC4gVGhhdCYjMzk7cyB0aGF0IGhpZGRlbiBjb25maWcsIGEgYm9vbGVhbiwgdHVja2VkIGF3YXksIG5vdCBkaXJlY3RseSBwcm9tcHRlZCBmb3IuIEl0JiMzOTtzIGNsZWFybHkgYmVpbmcgaW5mbHVlbmNlZCBieSBzb21ldGhpbmcgZWxzZS4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3Mgc2V0dGluZyB0aGF0IGZsYWcuIExldCYjMzk7cyBkZWx2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgZGlyZWN0bHkgc2VsZWN0aW5nIGl0LCB3aGljaCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgbWFraW5nIHRoaXMgZGVjaXNpb24gZm9yIHVzLiBUaGF0IGlzIHRoZSBuZXh0IHN0ZXAgdG8gd29yayB0aHJvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxNTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgWEFSUkFZX01VTFRJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWc9MTgyNz1jb25maWcgWDg2X1NHWFxuLS1cbmFyY2gveDg2L0tjb25maWctMTgzMi1cdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GTyBpZiBOVU1BXG5hcmNoL3g4Ni9LY29uZmlnOjE4MzM6XHRzZWxlY3QgWEFSUkFZX01VTFRJXG5hcmNoL3g4Ni9LY29uZmlnLTE4MzQtXHRoZWxwXG4tLVxuZnMvS2NvbmZpZz0yNzM9Y29uZmlnIEhVR0VUTEJfUEFHRVxuZnMvS2NvbmZpZy0yNzQtXHRkZWZfYm9vbCBIVUdFVExCRlNcbmZzL0tjb25maWc6Mjc1Olx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuZnMvS2NvbmZpZy0yNzYtXG4tLVxubW0vS2NvbmZpZz04NDY9bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuLS1cbm1tL0tjb25maWctODQ5LVx0c2VsZWN0IENPTVBBQ1RJT05cbm1tL0tjb25maWc6ODUwOlx0c2VsZWN0IFhBUlJBWV9NVUxUSVxubW0vS2NvbmZpZy04NTEtXHRzZWxlY3QgTU1fSURcbi0tXG5tbS9LY29uZmlnPTEyMzY9Y29uZmlnIFpPTkVfREVWSUNFXG4tLVxubW0vS2NvbmZpZy0xMjQwLVx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxubW0vS2NvbmZpZzoxMjQxOlx0c2VsZWN0IFhBUlJBWV9NVUxUSVxubW0vS2NvbmZpZy0xMjQyLVxuLS1cbnNvdW5kL2NvcmUvS2NvbmZpZz0xODE9Y29uZmlnIFNORF9DVExfRkFTVF9MT09LVVBcbi0tXG5zb3VuZC9jb3JlL0tjb25maWctMTgzLVx0ZGVmYXVsdCB5XG5zb3VuZC9jb3JlL0tjb25maWc6MTg0Olx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuc291bmQvY29yZS9LY29uZmlnLTE4NS1cdGhlbHBcbi0tXG52aXJ0L2t2bS9LY29uZmlnPTEwNj1jb25maWcgS1ZNX0dVRVNUX01FTUZEXG52aXJ0L2t2bS9LY29uZmlnOjEwNzogICAgICAgc2VsZWN0IFhBUlJBWV9NVUxUSVxudmlydC9rdm0vS2NvbmZpZy0xMDgtICAgICAgIGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTU6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ4MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipYQVJSQVlfTVVMVEkgQ29uZmlndXJhdGlvbjogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGBYQVJSQVlfTVVMVElgIGdldHMgZW5hYmxlZCwgYW5kIGl0JiMzOTtzIGxvb2tpbmcgbGlrZSBpdCYjMzk7cyBhIGJpdCBvZiBhIGRlcGVuZGVuY3kgY2hhaW4uIEkgc2VlIHRoYXQgdGhpbmdzIGxpa2UgYEhVR0VUTEJfUEFHRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBldmVuIGBTTkRfQ1RMX0ZBU1RfTE9PS1VQYCBhcmUgcmVzcG9uc2libGUgZm9yIHNlbGVjdGluZyBpdC4gVGhlIGNoYWxsZW5nZSBpcywgaXQmIzM5O3MgYSBoaWRkZW4gY29uZmlnIG9wdGlvbi4gVGhhdCBtZWFucyBJIGNhbiYjMzk7dCBqdXN0IGZsaXAgYSBzd2l0Y2ggaW4gc3l6a2FsbGVyIGFuZCBleHBlY3QgaXQgdG8gd29yay4gS2J1aWxkIGVmZmVjdGl2ZWx5IGlnbm9yZXMgaXQgdW5sZXNzIHNvbWV0aGluZyBleHBsaWNpdGx5IHNlbGVjdHMgaXQuCgpXYWl0IGEgc2Vjb25k4oCmIHN5emthbGxlciAqY2FuKiBlbmFibGUgZWl0aGVyIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3IgYEhVR0VUTEJGU2AuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgYXZlbnVlISBUaGF0IGdpdmVzIG1lIHNvbWUgZmxleGliaWxpdHkuCgpIbW0sIGxldCYjMzk7cyBleHBsb3JlIGFub3RoZXIgcG9zc2liaWxpdHkuIENvdWxkIGBURVNUX1hBUlJBWWAgYmUgdGhlIGtleT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGxpYi9LY29uZmlnLmRlYnVnYCwgdG8gdmVyaWZ5IGlmIGBURVNUX1hBUlJBWWAgcGxheXMgYSBwYXJ0IGluIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4gVGhpcyBpcyBhIGdvb2QgbGVhZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTU6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRFU1RfWEFSUkFZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWc9MjU1Nz1jb25maWcgVEVTVF9CSVRNQVBcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTYzLVxubGliL0tjb25maWcuZGVidWc6MjU2NDpjb25maWcgVEVTVF9YQVJSQVlcbmxpYi9LY29uZmlnLmRlYnVnLTI1NjUtXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IHRoZSBYQXJyYXkgY29kZSBhdCBydW50aW1lXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5ODcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgd2l0aCBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWJ1ZyBvcHRpb25zIHJlbGF0ZWQgdG8gWEFycmF5cyB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIFRoZSBgVEVTVF9YQVJSQVlgIHN5bWJvbCBpcyB0aGUga2V5IHRvIHRoYXQgc2VjdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHRoZXJlLiBJJiMzOTtsbCByZWFkIGFyb3VuZCB0aGF0IGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMgYW5kIHNjb3BlLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93IGl0JiMzOTtzIHVzZWQgYW5kIHdoYXQgaXQgY29udHJvbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBJcyBpdCBhIHRyaXN0YXRlIG9yIGJvb2xlYW4/IFdoYXQgZG9lcyBpdCBkZXBlbmQgb24/IEFyZSB0aGVyZSBhbnkgYXNzb2NpYXRlZCBzeW1ib2xzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBUaGlzIHdpbGwgaGVscCB1bmRlcnN0YW5kIHRoZSB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzIGF2YWlsYWJsZSBmb3IgWEFycmF5cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTU6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjU2MDpcdFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gdGVzdCB0aGUgYml0bWFwIGZ1bmN0aW9ucyBhdCBib290LlxuMjU2MTpcdFxuMjU2MjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMjU2MzpcdFxuMjU2NDpcdGNvbmZpZyBURVNUX1hBUlJBWVxuMjU2NTpcdFx0dHJpc3RhdGUgXCYjMzQ7VGVzdCB0aGUgWEFycmF5IGNvZGUgYXQgcnVudGltZVwmIzM0O1xuMjU2NjpcdFxuMjU2NzpcdGNvbmZpZyBURVNUX01BUExFX1RSRUVcbjI1Njg6XHRcdHRyaXN0YXRlIFwmIzM0O1Rlc3QgdGhlIE1hcGxlIFRyZWUgY29kZSBhdCBydW50aW1lIG9yIG1vZHVsZSBsb2FkXCYjMzQ7XG4yNTY5Olx0XHRoZWxwXG4yNTcwOlx0XHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byB0ZXN0IHRoZSBtYXBsZSB0cmVlIGNvZGUgZnVuY3Rpb25zIGF0IGJvb3QsIG9yXG4yNTcxOlx0XHQgIHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkZWQuIEVuYWJsZSBcJiMzNDtEZWJ1ZyBNYXBsZSBUcmVlc1wmIzM0OyB3aWxsIGVuYWJsZVxuMjU3MjpcdFx0ICBtb3JlIHZlcmJvc2Ugb3V0cHV0IG9uIGZhaWx1cmVzLlxuMjU3MzpcdFxuMjU3NDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMjU3NTpcdFxuMjU3NjpcdGNvbmZpZyBURVNUX1JIQVNIVEFCTEVcbjI1Nzc6XHRcdHRyaXN0YXRlIFwmIzM0O1BlcmZvcm0gc2VsZnRlc3Qgb24gcmVzaXphYmxlIGhhc2ggdGFibGVcJiMzNDtcbjI1Nzg6XHRcdGhlbHBcbjI1Nzk6XHRcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIHRlc3QgdGhlIHJoYXNodGFibGUgZnVuY3Rpb25zIGF0IGJvb3QuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgVHJvdWJsZXNob290aW5nIFBhdGgqKgoKT2theSwgc28gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBpc24mIzM5O3QgZW5hYmxpbmcgYFhBUlJBWV9NVUxUSWAgYnkgZGVmYXVsdC4gVGhhdCYjMzk7cyBhIHByb2JsZW0sIGJ1dCBpdCYjMzk7cyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHRyeSBhbmQgc2ltcGx5IGFkZCBib3RoIGBYQVJSQVlfTVVMVElgIGFuZCBgVEVTVF9YQVJSQVlgIGRpcmVjdGx5IHRvIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdC4gSG93ZXZlciwgSSBqdXN0IGhhZCBhIHRob3VnaHQ6IElmIGBYQVJSQVlfTVVMVElgIGlzIGEgKmhpZGRlbiogY29uZmlndXJhdGlvbiBvcHRpb24sIHRoZW4gS2J1aWxkIHdpbGwgc2ltcGx5IGlnbm9yZSBpdCBpZiBpdCYjMzk7cyBwbGFjZWQgaW4gYSBjb25maWcgZmlsZSBkaXJlY3RseS4gSSBjYW4mIzM5O3QganVzdCBkZWZpbmUgaXQuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBzb21ldGhpbmcgKnNlbGVjdHMqIGl0LgoKQWxyaWdodCwgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgdG8gbWU/IEhtbW0uLi4gbGV0JiMzOTtzIHNlZS4gVGhpbmtpbmcgb2YgcmVsZXZhbnQgY29uZmlncyB0aGF0IG1pZ2h0IGluZGlyZWN0bHkgZW5hYmxlIGBYQVJSQVlfTVVMVElgLCBgSFVHRVRMQkZTYCBvciBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIHNvdW5kIGxpa2UgcG9zc2libGUgY2FuZGlkYXRlcy4gVGhleSBhcmUgaW52b2x2ZWQgaW4gc2ltaWxhciBhcmVhcyBhbmQgY291bGQgcG90ZW50aWFsbHkgYmUgYSBkZXBlbmRlbmN5LiBCZWZvcmUgSSBnbyBkb3duIHRoYXQgcGF0aCwgdGhvdWdoLCBpdCYjMzk7cyBjcnVjaWFsIHRvIGNvbmZpcm0gd2hldGhlciBgWEFSUkFZX01VTFRJYCBpcyBhY3R1YWxseSBhIGhpZGRlbiBjb25maWcuIEkmIzM5O2xsIGNoZWNrIHRoYXQgZmlyc3QsIGp1c3QgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IHdhc3RpbmcgbXkgdGltZS4gS25vd2luZyB0aGUgdmlzaWJpbGl0eSBvZiB0aGlzIG9wdGlvbiB3aWxsIGluZm9ybSBteSBuZXh0IHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAxNTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTA6XHRcdGRlcGVuZHMgb24gSU5URVJWQUxfVFJFRVxuIDM1MTpcdFxuIDM1MjpcdGNvbmZpZyBYQVJSQVlfTVVMVElcbiAzNTM6XHRcdGJvb2xcbiAzNTQ6XHRcdGhlbHBcbiAzNTU6XHRcdCAgU3VwcG9ydCBlbnRyaWVzIHdoaWNoIG9jY3VweSBtdWx0aXBsZSBjb25zZWN1dGl2ZSBpbmRpY2VzIGluIHRoZVxuIDM1NjpcdFx0ICBYQXJyYXkuXG4gMzU3Olx0XG4gMzU4Olx0Y29uZmlnIEFTU09DSUFUSVZFX0FSUkFZXG4gMzU5Olx0XHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMzgKCQkJCQkJCW91dHB1dDogOTYKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIGZvciBQYXRjaCBJbmNsdXNpb24qKgoKT2theSwgc28gdGhpcyBpcyBhIGJvb2xlYW4gb3B0aW9uLCBhbmQgaXQmIzM5O3MgaGlkZGVuIGJlY2F1c2UgdGhlcmUmIzM5O3Mgbm8gZGlyZWN0IHVzZXIgcHJvbXB0IGZvciBpdC4gR290IGl0LiBUbyBlbnN1cmUgdGhpcyBmaXggaXMgZWZmZWN0aXZlIGFuZCBwcm9wZXJseSB0ZXN0ZWQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlIG5lZWQgdG8gYmUgcmVhbGx5IGNvbnNjaW91cyBvZiB0aGUgdW5kZXJseWluZyBzeXN0ZW0gY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgWEFycmF5JiMzOTtzIGJlaGF2aW9yLiBUaGUgYnVnIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHNwZWNpZmljYWxseSB0YXJnZXRzIGEgZmxhdyBpbiBgeGFzX2ZpbmRgLCB3aGljaCwgYXMgYSBjb3JlIEFQSSBmdW5jdGlvbiwgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgY29uZHVjaXZlIHRvIGRlbW9uc3RyYXRpbmcgdGhlIGZpeC4KClRoZXJlZm9yZSwgdGhlIGZpcnN0IHRoaW5nIHRoYXQgY29tZXMgdG8gbWluZCBpcyB0byBlbmFibGUgY29uZmlndXJhdGlvbnMgdGhhdCBzdHJlc3MgdGhlIHN5c3RlbSBzdWNoIGFzIGBIVUdFVExCRlNgIG9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkgdGhpbmsgYEhVR0VUTEJGU2AgaXMgdGhlIGJldHRlciBjaG9pY2UgZm9yIHRoaXMgcGFydGljdWxhciBwYXRjaCwgYW5kIEkmIzM5O2xsIGluY2x1ZGUgdGhhdC4gSSYjMzk7bSBhbHNvIGdvaW5nIHRvIHRocm93IGluIGBURVNUX1hBUlJBWWAgYXMgYSBjb21wYW5pb24gc2luY2UgdGhlcmUgaXMgYW4gYWRkZWQgdGVzdCBgY2hlY2tfbXVsdGlfZmluZF80YCBpbiB0aGUgdGVzdCBzdWl0ZSB0aGF0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhpcyBmaXguCgpUaGUga2V5IGZ1bmN0aW9uIEkmIzM5O20gZm9jdXNpbmcgb24gaGVyZSBpcyBgeGFzX2ZpbmRgIOKAkyB0aGF0JiMzOTtzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBUaGlzIHBhdGNoIGlzIHRhcmdldGVkIGF0IHRoZSBtdWx0aS1pbmRleCBlbnRyeSBoYW5kbGluZyB3aXRoaW4gdGhlIFhBcnJheSBzeXN0ZW0uIEJ5IGVuYWJsaW5nIGBIVUdFVExCRlNgIGFuZCBgVEVTVF9YQVJSQVlgLCBJIGJlbGlldmUgd2UgY2FuIGVuc3VyZSB0aGUgcHJvcGVyIGV4ZWN1dGlvbiBvZiB0aGUgbmV3IHRlc3QsIGFuZCB0aGF0IHRoZSBmaXggdG8gYHhhc19maW5kYCBpcyBhZGVxdWF0ZWx5IHZhbGlkYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTU6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtURVNUX1hBUlJBWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB4YXNfZmluZGAgd2hlbiBoYW5kbGluZyBtdWx0aS1pbmRleCBlbnRyaWVzIGluIFhBcnJheSwgd2hpY2ggaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlIEFQSSB1c2VkIGFjcm9zcyB0aGUga2VybmVsLiBJdCBhbHNvIGFkZHMgYSBuZXcgdGVzdCBjYXNlIHRvIGB0ZXN0X3hhcnJheWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtURVNUX1hBUlJBWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hhc19maW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB4YXNfZmluZGAgd2hlbiBoYW5kbGluZyBtdWx0aS1pbmRleCBlbnRyaWVzIGluIFhBcnJheSwgd2hpY2ggaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlIEFQSSB1c2VkIGFjcm9zcyB0aGUga2VybmVsLiBJdCBhbHNvIGFkZHMgYSBuZXcgdGVzdCBjYXNlIHRvIGB0ZXN0X3hhcnJheWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMTU6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIFhBcnJheSBpdGVyYXRvciAoYHhhc19maW5kYCkgd2hlcmUgYHhhcy1cdTAwM2V4YV9vZmZzZXRgIHdhcyBub3QgY29ycmVjdGx5IHVwZGF0ZWQgd2hlbiBpdGVyYXRpbmcgb3ZlciBtdWx0aS1pbmRleCBlbnRyaWVzIGluIG5vZGVzIHdpdGggYSBub24temVybyBzaGlmdC4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBpdGVyYXRpb24gcmVzdWx0cywgaW5maW5pdGUgbG9vcHMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2l0aGluIHRoZSBYQXJyYXkgbm9kZSYjMzk7cyBzbG90cyBhcnJheS4gVGhlc2UgaXNzdWVzIGFyZSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgbWVtb3J5IHNhZmV0eSAob3V0LW9mLWJvdW5kcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2Q3NGU1YjY2NDVlYTYzYjg3NWUyYzI2OTdmZGU1OTIwOGM2NzE5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDI3IDE1OjMyOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbGliL3Rlc3RfeGFycmF5LmMgYi9saWIvdGVzdF94YXJyYXkuYwppbmRleCA1Y2EwYWVmZWU5YWE1Li5jZGE3MjQ1ZTQ3NzE2IDEwMDY0NAotLS0gYS9saWIvdGVzdF94YXJyYXkuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF94YXJyYXkuYwpAQCAtMTI0Nyw2ICYjNDM7MTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpCiAJfQogfQogCiYjNDM7c3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF80KHN0cnVjdCB4YXJyYXkgKnhhKQomIzQzO3sKJiM0MzsjaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSQomIzQzOwlYQV9TVEFURSh4YXMsIHhhLCAxMDApOwomIzQzOwlYQV9TVEFURV9PUkRFUihzcGxpdCwgeGEsIDAsIDApOwomIzQzOwl2b2lkICplbnRyeTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpOwomIzQzOwomIzQzOwkvKiAoMSkgT3JkZXItNyBlbnRyeSAoMC0xMjcpIHdpdGggYWRqYWNlbnQgZW50cnkgYXQgMTI4LCBzdGFydGluZyBhdCAxMDAgKi8KJiM0MzsJeGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwllbnRyeSA9IHhhc19maW5kKCZhbXA7eGFzLCBVTE9OR19NQVgpOwomIzQzOwlYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTsKJiM0MzsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTsKJiM0MzsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXhhX2VyYXNlX2luZGV4KHhhLCAxMjgpOwomIzQzOwl4YV9lcmFzZV9pbmRleCh4YSwgMCk7CiYjNDM7CVhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7CiYjNDM7CiYjNDM7CS8qICgyKSBTcGxpdHRpbmcgYSBtdWx0aS1pbmRleCBlbnRyeSBhZnRlciBhIGxvb2t1cCBiZWdpbnMgaW5zaWRlIGl0ICovCiYjNDM7CXhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7CiYjNDM7CiYjNDM7CXhhc19zZXQoJmFtcDt4YXMsIDEwMCk7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7CiYjNDM7CVhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwl4YXNfc3BsaXRfYWxsb2MoJmFtcDtzcGxpdCwgeGFfbWtfaW5kZXgoMCksIDcsIEdGUF9LRVJORUwpOwomIzQzOwl4YXNfbG9jaygmYW1wO3NwbGl0KTsKJiM0MzsJeGFzX3NwbGl0KCZhbXA7c3BsaXQsIHhhX21rX2luZGV4KDApLCA3KTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IDEyODsgaSYjNDM7JiM0MzspCiYjNDM7CQlfX3hhX3N0b3JlKHhhLCBpLCB4YV9ta19pbmRleChpKSwgMCk7CiYjNDM7CXhhc191bmxvY2soJmFtcDtzcGxpdCk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTsKJiM0MzsJWEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTsKJiM0MzsKJiM0MzsJZW50cnkgPSB4YXNfZmluZCgmYW1wO3hhcywgVUxPTkdfTUFYKTsKJiM0MzsJWEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXhhX2Rlc3Ryb3koeGEpOwomIzQzOwlYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmRfMShzdHJ1Y3QgeGFycmF5ICp4YSkKIHsKIAl1bnNpZ25lZCBsb25nIGksIGosIGs7CkBAIC0xMzcwLDYgJiM0MzsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSkKIAkJY2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTsKIAljaGVja19tdWx0aV9maW5kXzIoeGEpOwogCWNoZWNrX211bHRpX2ZpbmRfMyh4YSk7CiYjNDM7CWNoZWNrX211bHRpX2ZpbmRfNCh4YSk7CiB9CiAKIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovCmRpZmYgLS1naXQgYS9saWIveGFycmF5LmMgYi9saWIveGFycmF5LmMKaW5kZXggOWE4YjQ5MTY1NDBjZi4uOTgwMzI0ZDY4NmJkMCAxMDA2NDQKLS0tIGEvbGliL3hhcnJheS5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi94YXJyYXkuYwpAQCAtMTQwNiw5ICYjNDM7MTQwNiwxMSBAQCB2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpCiAJCWVudHJ5ID0geGFzX2xvYWQoeGFzKTsKIAkJaWYgKGVudHJ5IHx8IHhhc19ub3Rfbm9kZSh4YXMtJmd0O3hhX25vZGUpKQogCQkJcmV0dXJuIGVudHJ5OwotCX0gZWxzZSBpZiAoIXhhcy0mZ3Q7eGFfbm9kZS0mZ3Q7c2hpZnQgJmFtcDsmYW1wOwotCQkgICAgeGFzLSZndDt4YV9vZmZzZXQgIT0gKHhhcy0mZ3Q7eGFfaW5kZXggJmFtcDsgWEFfQ0hVTktfTUFTSykpIHsKLQkJeGFzLSZndDt4YV9vZmZzZXQgPSAoKHhhcy0mZ3Q7eGFfaW5kZXggLSAxKSAmYW1wOyBYQV9DSFVOS19NQVNLKSAmIzQzOyAxOwomIzQzOwl9IGVsc2UgaWYgKHhhcy0mZ3Q7eGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKSkgewomIzQzOwkJaWYgKCF4YXMtJmd0O3hhX25vZGUtJmd0O3NoaWZ0KQomIzQzOwkJCXhhcy0mZ3Q7eGFfb2Zmc2V0ID0gKCh4YXMtJmd0O3hhX2luZGV4IC0gMSkgJmFtcDsgWEFfQ0hVTktfTUFTSykgJiM0MzsgMTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl4YXMtJmd0O3hhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLSZndDt4YV9pbmRleCwgeGFzLSZndDt4YV9ub2RlKTsKIAl9CiAKIAl4YXNfbmV4dF9vZmZzZXQoeGFzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTcKCQkJCQkJCW91dHB1dDogMTU5CgkJCQkJCQl0aG91Z2h0czogNzcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFhBcnJheSBQYXRjaCoqCgpPa2F5LCBsZXQgbWUgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgbGliL3hhcnJheS5jYC4gSXQmIzM5O3MgYSB0YXJnZXRlZCBmaXggd2l0aGluIHRoZSBgeGFzX2ZpbmRgIGZ1bmN0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgdHJhdmVyc2luZyBYQXJyYXlzLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgdXBkYXRpbmcgYHhhcy0mZ3Q7eGFfb2Zmc2V0YCBjb3JyZWN0bHksIHNwZWNpZmljYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBub2RlcyB0aGF0IGhhdmUgYSBub24temVybyBgc2hpZnRgIHZhbHVlLiBJdCBzZWVtcyB0aGUgb3JpZ2luYWwgbG9naWMgaGFkIGEgZmxhdzsgaXQgd2FzbiYjMzk7dCBoYW5kbGluZyB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uIHByb3Blcmx5IGluIGFsbCBjYXNlcywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBpbmNvcnJlY3QgaXRlcmF0aW9uIOKAkyBza2lwcGluZyBlbnRyaWVzLCByZXR1cm5pbmcgdGhlIHdyb25nIGVudHJpZXMsIG9yIGV2ZW4gdmVudHVyaW5nIGludG8gb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMuCgpUaGUgY29kZSBzbmlwcGV0IHNob3dzIHRoZSBjb3JyZWN0aXZlIGFjdGlvbi4gVGhleSYjMzk7dmUgcmVwbGFjZWQgdGhlIGNvbmRpdGlvbmFsIGJsb2NrIHdpdGggYSBtb3JlIHJvYnVzdCBjaGVjayBvbiBgeGFzLSZndDt4YV9vZmZzZXRgLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSBjb25kaXRpb24gdG8gY2hlY2sgZm9yIGEgemVybyBzaGlmdCwgYnV0IHRoaXMgbmV3IGxvZ2ljIGFwcGVhcnMgdG8gYmUgdGhlIGNvcnJlY3Qgd2F5IHRvIGNhbGN1bGF0ZSB0aGUgb2Zmc2V0IGNvbnNpZGVyaW5nIG5vZGVzIHdpdGggYSBub24temVybyBzaGlmdC4gSXQgZmVlbHMgbGlrZSB0aGUgb2xkIGNvZGUgbWlnaHQgaGF2ZSBtaXNzZWQgc29tZSBlZGdlIGNhc2VzIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG9mZnNldC4gVGhpcyBjb3VsZCBoYXZlIGVhc2lseSBjYXVzZWQgYSBzdWJ0bGUgYnVnLCBlc3BlY2lhbGx5IGluIGNvbXBsZXggWEFycmF5IHN0cnVjdHVyZXMgd2hlcmUgc2hpZnRzIGNvbWUgaW50byBwbGF5LgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgd2FzIHRvIGNvbnNpZGVyIGlmIHRoZXJlIG1pZ2h0IGJlIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwb2ludGVyL3ZhbHVlIHNsb3RzIGluIGFuIFhBcnJheSwgc28gSSBxdWlja2x5IHRob3VnaHQgYWJvdXQgdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLiBJIHJlbWVtYmVyIHRoYXQgWEFycmF5IG5vZGVzIGFyZSBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfYWxsb2NgLCBzcGVjaWZpY2FsbHkgdmlhIGByYWRpeF90cmVlX25vZGVfYWxsb2NgLCB3aGljaCB1c2VzIHRoZSBgcmFkaXhfdHJlZV9ub2RlX2NhY2hlcGAuIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhlIGNhY2hlIGlzIGNyZWF0ZWQgd2l0aCBgU0xBQl9QQU5JQ2AsIGFuZCBldmVuIGlmIHRoZSBub2RlcyB3ZXJlbiYjMzk7dCBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24sIHRoZSBzbG90cyBhcmUgaW5pdGlhbGl6ZWQgd2hlbiBlbnRyaWVzIGFyZSBzdG9yZWQuIE5vIG5lZWQgdG8gd29ycnkgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBoZXJlLgoKVGhlcmVmb3JlLCB0aGUgbWFpbiBjb25jZXJuIGhlcmUgYm9pbHMgZG93biB0byB0aGUgbG9naWMgb2YgdGhlIGl0ZXJhdG9yLiBUaGUgYnVnIGhlcmUgaXMgcHVyZWx5IGEgY29udHJvbC1mbG93IGlzc3VlLiBLQVNBTiBpcyB0aGUgcmVsZXZhbnQgdG9vbCBoZXJlIHRvIGNhdGNoIG91dC1vZi1ib3VuZHMgbWVtb3J5IGlzc3Vlcywgd2hpY2ggdGhpcyBmaXggd291bGQgYWRkcmVzcy4KCkdpdmVuIHRoYXQgdGhpcyBwYXRjaCByZXNvbHZlcyBhIGxvZ2ljIGVycm9yIGluIGl0ZXJhdGlvbiBhbmQgSSBzZWUgbm8gcG90ZW50aWFsIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgZml4IHByaW1hcmlseSBhZGRyZXNzZXMgY29udHJvbC1mbG93IGFuZCBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGNhdWdodCBieSBLQVNBTi4gV2UgZG9uJiMzOTt0IG5lZWQgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgZm9yIHRoaXMuIEl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGxvZ2ljIGJ1ZyBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDE1OjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbG9naWMgYnVnIGluIHRoZSBYQXJyYXkgaXRlcmF0b3IgKGB4YXNfZmluZGApIHdoZXJlIGB4YXMtXHUwMDNleGFfb2Zmc2V0YCB3YXMgbm90IGNvcnJlY3RseSB1cGRhdGVkIHdoZW4gaXRlcmF0aW5nIG92ZXIgbXVsdGktaW5kZXggZW50cmllcyBpbiBub2RlcyB3aXRoIGEgbm9uLXplcm8gc2hpZnQuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgaXRlcmF0aW9uIHJlc3VsdHMsIGluZmluaXRlIGxvb3BzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdpdGhpbiB0aGUgWEFycmF5IG5vZGUmIzM5O3Mgc2xvdHMgYXJyYXkuIFRoZXNlIGlzc3VlcyBhcmUgcmVsYXRlZCB0byBjb250cm9sIGZsb3cgYW5kIG1lbW9yeSBzYWZldHkgKG91dC1vZi1ib3VuZHMpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgWEFycmF5IGl0ZXJhdG9yIChgeGFzX2ZpbmRgKSB3aGVyZSBgeGFzLVx1MDAzZXhhX29mZnNldGAgd2FzIG5vdCBjb3JyZWN0bHkgdXBkYXRlZCB3aGVuIGl0ZXJhdGluZyBvdmVyIG11bHRpLWluZGV4IGVudHJpZXMgaW4gbm9kZXMgd2l0aCBhIG5vbi16ZXJvIHNoaWZ0LiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IGl0ZXJhdGlvbiByZXN1bHRzLCBpbmZpbml0ZSBsb29wcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aXRoaW4gdGhlIFhBcnJheSBub2RlJiMzOTtzIHNsb3RzIGFycmF5LiBUaGVzZSBpc3N1ZXMgYXJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGFuZCBtZW1vcnkgc2FmZXR5IChvdXQtb2YtYm91bmRzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozMjoxMS43NzY3OTM5MTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzA4NzgwNTQ5NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJURVNUX1hBUlJBWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhhc19maW5kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgWEFycmF5IGl0ZXJhdG9yIChgeGFzX2ZpbmRgKSB3aGVyZSBgeGFzLVxcdTAwM2V4YV9vZmZzZXRgIHdhcyBub3QgY29ycmVjdGx5IHVwZGF0ZWQgd2hlbiBpdGVyYXRpbmcgb3ZlciBtdWx0aS1pbmRleCBlbnRyaWVzIGluIG5vZGVzIHdpdGggYSBub24temVybyBzaGlmdC4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBpdGVyYXRpb24gcmVzdWx0cywgaW5maW5pdGUgbG9vcHMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2l0aGluIHRoZSBYQXJyYXkgbm9kZSdzIHNsb3RzIGFycmF5LiBUaGVzZSBpc3N1ZXMgYXJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGFuZCBtZW1vcnkgc2FmZXR5IChvdXQtb2YtYm91bmRzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB4YXNfZmluZGAgd2hlbiBoYW5kbGluZyBtdWx0aS1pbmRleCBlbnRyaWVzIGluIFhBcnJheSwgd2hpY2ggaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlIEFQSSB1c2VkIGFjcm9zcyB0aGUga2VybmVsLiBJdCBhbHNvIGFkZHMgYSBuZXcgdGVzdCBjYXNlIHRvIGB0ZXN0X3hhcnJheWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE1OjMyOjExLjc3Njc5ODkxNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYyNDM0ODg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdkNzRlNWI2NjQ1ZWE2M2I4NzVlMmMyNjk3ZmRlNTkyMDhjNjcxOWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjcgMTU6MzI6MDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfeGFycmF5LmMgYi9saWIvdGVzdF94YXJyYXkuY1xcbmluZGV4IDVjYTBhZWZlZTlhYTUuLmNkYTcyNDVlNDc3MTYgMTAwNjQ0XFxuLS0tIGEvbGliL3Rlc3RfeGFycmF5LmNcXG4rKysgYi9saWIvdGVzdF94YXJyYXkuY1xcbkBAIC0xMjQ3LDYgKzEyNDcsNjcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8zKHN0cnVjdCB4YXJyYXkgKnhhKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSlcXG4re1xcbisjaWZkZWYgQ09ORklHX1hBUlJBWV9NVUxUSVxcbitcXHRYQV9TVEFURSh4YXMsIHhhLCAxMDApO1xcbitcXHRYQV9TVEFURV9PUkRFUihzcGxpdCwgeGEsIDAsIDApO1xcbitcXHR2b2lkICplbnRyeTtcXG4rXFx0dW5zaWduZWQgbG9uZyBpO1xcbitcXG4rXFx0LyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovXFxuK1xcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGVudHJ5ID0geGFzX2ZpbmQoXFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcXG4rXFx0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7XFxuK1xcbitcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCk7XFxuK1xcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7XFxuK1xcbitcXHRlbnRyeSA9IHhhc19maW5kKFxcdTAwMjZ4YXMsIFVMT05HX01BWCk7XFxuK1xcdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0eGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7XFxuK1xcdHhhX2VyYXNlX2luZGV4KHhhLCAwKTtcXG4rXFx0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcXG4rXFxuK1xcdC8qICgyKSBTcGxpdHRpbmcgYSBtdWx0aS1pbmRleCBlbnRyeSBhZnRlciBhIGxvb2t1cCBiZWdpbnMgaW5zaWRlIGl0ICovXFxuK1xcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XFxuK1xcbitcXHR4YXNfc2V0KFxcdTAwMjZ4YXMsIDEwMCk7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbitcXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcXG4rXFx0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHR4YXNfc3BsaXRfYWxsb2MoXFx1MDAyNnNwbGl0LCB4YV9ta19pbmRleCgwKSwgNywgR0ZQX0tFUk5FTCk7XFxuK1xcdHhhc19sb2NrKFxcdTAwMjZzcGxpdCk7XFxuK1xcdHhhc19zcGxpdChcXHUwMDI2c3BsaXQsIHhhX21rX2luZGV4KDApLCA3KTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDEyODsgaSsrKVxcbitcXHRcXHRfX3hhX3N0b3JlKHhhLCBpLCB4YV9ta19pbmRleChpKSwgMCk7XFxuK1xcdHhhc191bmxvY2soXFx1MDAyNnNwbGl0KTtcXG4rXFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbitcXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xcbitcXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xcbitcXG4rXFx0ZW50cnkgPSB4YXNfZmluZChcXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xcbitcXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHhhX2Rlc3Ryb3koeGEpO1xcbitcXHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xcbisjZW5kaWZcXG4rfVxcbitcXG4gc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZF8xKHN0cnVjdCB4YXJyYXkgKnhhKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgaSwgaiwgaztcXG5AQCAtMTM3MCw2ICsxNDMxLDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZChzdHJ1Y3QgeGFycmF5ICp4YSlcXG4gXFx0XFx0Y2hlY2tfbXVsdGlfZmluZF8xKHhhLCBpKTtcXG4gXFx0Y2hlY2tfbXVsdGlfZmluZF8yKHhhKTtcXG4gXFx0Y2hlY2tfbXVsdGlfZmluZF8zKHhhKTtcXG4rXFx0Y2hlY2tfbXVsdGlfZmluZF80KHhhKTtcXG4gfVxcbiBcXG4gLyogU2VlIGZpbmRfc3dhcF9lbnRyeSgpIGluIG1tL3NobWVtLmMgKi9cXG5kaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jXFxuaW5kZXggOWE4YjQ5MTY1NDBjZi4uOTgwMzI0ZDY4NmJkMCAxMDA2NDRcXG4tLS0gYS9saWIveGFycmF5LmNcXG4rKysgYi9saWIveGFycmF5LmNcXG5AQCAtMTQwNiw5ICsxNDA2LDExIEBAIHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcXG4gXFx0XFx0ZW50cnkgPSB4YXNfbG9hZCh4YXMpO1xcbiBcXHRcXHRpZiAoZW50cnkgfHwgeGFzX25vdF9ub2RlKHhhcy1cXHUwMDNleGFfbm9kZSkpXFxuIFxcdFxcdFxcdHJldHVybiBlbnRyeTtcXG4tXFx0fSBlbHNlIGlmICgheGFzLVxcdTAwM2V4YV9ub2RlLVxcdTAwM2VzaGlmdCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgeGFzLVxcdTAwM2V4YV9vZmZzZXQgIT0gKHhhcy1cXHUwMDNleGFfaW5kZXggXFx1MDAyNiBYQV9DSFVOS19NQVNLKSkge1xcbi1cXHRcXHR4YXMtXFx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVxcdTAwM2V4YV9pbmRleCAtIDEpIFxcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxO1xcbitcXHR9IGVsc2UgaWYgKHhhcy1cXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVxcdTAwM2V4YV9pbmRleCwgeGFzLVxcdTAwM2V4YV9ub2RlKSkge1xcbitcXHRcXHRpZiAoIXhhcy1cXHUwMDNleGFfbm9kZS1cXHUwMDNlc2hpZnQpXFxuK1xcdFxcdFxcdHhhcy1cXHUwMDNleGFfb2Zmc2V0ID0gKCh4YXMtXFx1MDAzZXhhX2luZGV4IC0gMSkgXFx1MDAyNiBYQV9DSFVOS19NQVNLKSArIDE7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0eGFzLVxcdTAwM2V4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cXHUwMDNleGFfaW5kZXgsIHhhcy1cXHUwMDNleGFfbm9kZSk7XFxuIFxcdH1cXG4gXFxuIFxcdHhhc19uZXh0X29mZnNldCh4YXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozMjoxMy40MDE4MjM1MjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MDEzNzI1MDM3ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJURVNUX1hBUlJBWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhhc19maW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHhhc19maW5kYCB3aGVuIGhhbmRsaW5nIG11bHRpLWluZGV4IGVudHJpZXMgaW4gWEFycmF5LCB3aGljaCBpcyBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgQVBJIHVzZWQgYWNyb3NzIHRoZSBrZXJuZWwuIEl0IGFsc28gYWRkcyBhIG5ldyB0ZXN0IGNhc2UgdG8gYHRlc3RfeGFycmF5YC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgN2Q3NGU1YjY2NDVlYTYzYjg3NWUyYzI2OTdmZGU1OTIwOGM2NzE5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDI3IDE1OjMyOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfeGFycmF5LmMgYi9saWIvdGVzdF94YXJyYXkuY1xuaW5kZXggNWNhMGFlZmVlOWFhNS4uY2RhNzI0NWU0NzcxNiAxMDA2NDRcbi0tLSBhL2xpYi90ZXN0X3hhcnJheS5jXG4rKysgYi9saWIvdGVzdF94YXJyYXkuY1xuQEAgLTEyNDcsNiArMTI0Nyw2NyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzMoc3RydWN0IHhhcnJheSAqeGEpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX211bHRpX2ZpbmRfNChzdHJ1Y3QgeGFycmF5ICp4YSlcbit7XG4rI2lmZGVmIENPTkZJR19YQVJSQVlfTVVMVElcbitcdFhBX1NUQVRFKHhhcywgeGEsIDEwMCk7XG4rXHRYQV9TVEFURV9PUkRFUihzcGxpdCwgeGEsIDAsIDApO1xuK1x0dm9pZCAqZW50cnk7XG4rXHR1bnNpZ25lZCBsb25nIGk7XG4rXG4rXHQvKiAoMSkgT3JkZXItNyBlbnRyeSAoMC0xMjcpIHdpdGggYWRqYWNlbnQgZW50cnkgYXQgMTI4LCBzdGFydGluZyBhdCAxMDAgKi9cbitcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XG4rXHRYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDApKTtcbitcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEwMCk7XG4rXG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMTI4KSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMjgpO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IE5VTEwpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHR4YV9lcmFzZV9pbmRleCh4YSwgMTI4KTtcbitcdHhhX2VyYXNlX2luZGV4KHhhLCAwKTtcbitcdFhBX0JVR19PTih4YSwgIXhhX2VtcHR5KHhhKSk7XG4rXG4rXHQvKiAoMikgU3BsaXR0aW5nIGEgbXVsdGktaW5kZXggZW50cnkgYWZ0ZXIgYSBsb29rdXAgYmVnaW5zIGluc2lkZSBpdCAqL1xuK1x0eGFfc3RvcmVfb3JkZXIoeGEsIDAsIDcsIHhhX21rX2luZGV4KDApLCBHRlBfS0VSTkVMKTtcbitcdFhBX0JVR19PTih4YSwgeGFfc3RvcmVfaW5kZXgoeGEsIDEyOCwgR0ZQX0tFUk5FTCkgIT0gTlVMTCk7XG4rXG4rXHR4YXNfc2V0KFx1MDAyNnhhcywgMTAwKTtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHR4YXNfc3BsaXRfYWxsb2MoXHUwMDI2c3BsaXQsIHhhX21rX2luZGV4KDApLCA3LCBHRlBfS0VSTkVMKTtcbitcdHhhc19sb2NrKFx1MDAyNnNwbGl0KTtcbitcdHhhc19zcGxpdChcdTAwMjZzcGxpdCwgeGFfbWtfaW5kZXgoMCksIDcpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgMTI4OyBpKyspXG4rXHRcdF9feGFfc3RvcmUoeGEsIGksIHhhX21rX2luZGV4KGkpLCAwKTtcbitcdHhhc191bmxvY2soXHUwMDI2c3BsaXQpO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcbitcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFfZGVzdHJveSh4YSk7XG4rXHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuKyNlbmRpZlxuK31cbitcbiBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kXzEoc3RydWN0IHhhcnJheSAqeGEpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBpLCBqLCBrO1xuQEAgLTEzNzAsNiArMTQzMSw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIGNoZWNrX2ZpbmQoc3RydWN0IHhhcnJheSAqeGEpXG4gXHRcdGNoZWNrX211bHRpX2ZpbmRfMSh4YSwgaSk7XG4gXHRjaGVja19tdWx0aV9maW5kXzIoeGEpO1xuIFx0Y2hlY2tfbXVsdGlfZmluZF8zKHhhKTtcbitcdGNoZWNrX211bHRpX2ZpbmRfNCh4YSk7XG4gfVxuIFxuIC8qIFNlZSBmaW5kX3N3YXBfZW50cnkoKSBpbiBtbS9zaG1lbS5jICovXG5kaWZmIC0tZ2l0IGEvbGliL3hhcnJheS5jIGIvbGliL3hhcnJheS5jXG5pbmRleCA5YThiNDkxNjU0MGNmLi45ODAzMjRkNjg2YmQwIDEwMDY0NFxuLS0tIGEvbGliL3hhcnJheS5jXG4rKysgYi9saWIveGFycmF5LmNcbkBAIC0xNDA2LDkgKzE0MDYsMTEgQEAgdm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICp4YXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIFx0XHRlbnRyeSA9IHhhc19sb2FkKHhhcyk7XG4gXHRcdGlmIChlbnRyeSB8fCB4YXNfbm90X25vZGUoeGFzLVx1MDAzZXhhX25vZGUpKVxuIFx0XHRcdHJldHVybiBlbnRyeTtcbi1cdH0gZWxzZSBpZiAoIXhhcy1cdTAwM2V4YV9ub2RlLVx1MDAzZXNoaWZ0IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgeGFzLVx1MDAzZXhhX29mZnNldCAhPSAoeGFzLVx1MDAzZXhhX2luZGV4IFx1MDAyNiBYQV9DSFVOS19NQVNLKSkge1xuLVx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gKCh4YXMtXHUwMDNleGFfaW5kZXggLSAxKSBcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxO1xuK1x0fSBlbHNlIGlmICh4YXMtXHUwMDNleGFfb2Zmc2V0ICE9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSkpIHtcbitcdFx0aWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdClcbitcdFx0XHR4YXMtXHUwMDNleGFfb2Zmc2V0ID0gKCh4YXMtXHUwMDNleGFfaW5kZXggLSAxKSBcdTAwMjYgWEFfQ0hVTktfTUFTSykgKyAxO1xuK1x0XHRlbHNlXG4rXHRcdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9IGdldF9vZmZzZXQoeGFzLVx1MDAzZXhhX2luZGV4LCB4YXMtXHUwMDNleGFfbm9kZSk7XG4gXHR9XG4gXG4gXHR4YXNfbmV4dF9vZmZzZXQoeGFzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE1OjMyOjEzLjQwMTgyNDY1MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMzA5OTg5NDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIHRvIFhBcnJheSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIHdlJ3ZlIGdvdCBhIG1vZGlmaWNhdGlvbiB0byB0aGUgWEFycmF5IGNvZGUsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgYGxpYi90ZXN0X3hhcnJheS5jYCBhbmQgYGxpYi94YXJyYXkuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIHRoZSBgeGFzX2ZpbmRgIGZ1bmN0aW9uIGluIGBsaWIveGFycmF5LmNgLCBhbmQgYSBuZXcgdGVzdCwgYGNoZWNrX211bHRpX2ZpbmRfNGAsIGFkZGVkIHRvIHRoZSB0ZXN0IGZpbGUuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHJlY29nbml6ZSB0aGF0IGB4YXNfZmluZGAgaXMgYSBjcml0aWNhbCBBUEkgZW50cnkgcG9pbnQgZm9yIFhBcnJheS4gQ29uc2lkZXJpbmcgaG93IGV4dGVuc2l2ZWx5IFhBcnJheSBpcyB1c2VkIHdpdGhpbiB0aGUga2VybmVsLCBhbnkgY2hhbmdlIGhlcmUgZGVtYW5kcyBjYXJlZnVsIHNjcnV0aW55LlxuXG5UaGUgYWN0dWFsIGNvZGUgY2hhbmdlIGluIGB4YXNfZmluZGAgbG9va3MgbGlrZSBhIGNvcnJlY3Rpb24gdG8gaG93IHRoZSBvZmZzZXQgaXMgY2FsY3VsYXRlZCwgd2hpY2ggZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBub2RlIGlzIHNoaWZ0ZWQgb3Igbm90LiBUaGUgb3JpZ2luYWwgY29kZSBzZWVtcyB0byBoYXZlIGFuIGVkZ2UgY2FzZSBmb3IgaGFuZGxpbmcgdGhlIG9mZnNldCB3aGVuIG5vdCBzaGlmdGVkLCBhbmQgdGhpcyBwYXRjaCBhcHBlYXJzIHRvIGJlIHRyeWluZyB0byBmaXggaXQgYW5kIHVzZSBgZ2V0X29mZnNldGAgYWx3YXlzLiBOb3csIHRoZSBsb2dpYyBpcyBiZWluZyB1cGRhdGVkLlxuXG5UaGVyZSdzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXJvdW5kIHRoZSB0ZXN0OyBpdCdzIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJYC4gVGhhdCB0ZWxscyBtZSB0aGF0IHRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgdGVzdCBpcyBhIG11bHRpLWZpbmQgc2NlbmFyaW8uIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19YQVJSQVlfTVVMVElgIGlzIGEgbGVnaXRpbWF0ZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gSWYgaXQgaXMsIHRoZW4gdGhlIHRlc3TigJlzIHByZXNlbmNlIGltcGxpZXMgYSBzcGVjaWZpYywgcGVyaGFwcyBvcHRpbWl6ZWQsIGZ1bmN0aW9uYWxpdHkgdGhhdOKAmXMgYmVpbmcgZXhlcmNpc2VkIGJ5IHRoaXMgY2hhbmdlLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGhlIGJyb2FkZXIgWEFycmF5IGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBLY29uZmlnIHRvIGNoZWNrLiBJJ2xsIG5lZWQgdG8gcmVhbGx5IHJ1biB0aGlzIHBhdGNoIHRocm91Z2ggaXRzIHBhY2VzIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IHJlZ3Jlc3MgcGVyZm9ybWFuY2Ugb3IgaW50cm9kdWNlIHN1YnRsZSBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjIwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTU6MzM6MTQuNzExODE3ODk4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwOTA4NTcxNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhBUlJBWV9NVUxUSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZz0zNDg9Y29uZmlnIElOVEVSVkFMX1RSRUVfU1BBTl9JVEVSXFxuLS1cXG5saWIvS2NvbmZpZy0zNTEtXFxubGliL0tjb25maWc6MzUyOmNvbmZpZyBYQVJSQVlfTVVMVElcXG5saWIvS2NvbmZpZy0zNTMtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozMzoxNy44MDI2ODI1MzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjgzNDIxMDAyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNvbmZpcm1pbmcgYW5kIERlZXAgRGl2aW5nKipcblxuQWxyaWdodCwgeWVwLCBgWEFSUkFZX01VTFRJYCBpcyBkZWZpbml0ZWx5IGEgbGVnaXQgY29uZmlnIG9wdGlvbi4gR29vZC4gTm93LCB0aW1lIHRvIGRyaWxsIGRvd24uIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gYGxpYi94YXJyYXkuY2AgYW5kIHplcm8gaW4gb24gdGhlIGB4YXNfZmluZGAgZnVuY3Rpb24uIFRoYXQncyB0aGUgY29yZSBvZiBob3cgdGhpcyBhbGwgd29ya3MsIGFuZCB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiB3aXRoIGBYQVJSQVlfTVVMVElgIGVuYWJsZWQgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQgaGFuZGxlcyBtdWx0aXBsZSB2YWx1ZXMgb3Iga2V5cy4uLiBpcyBpdCB1c2luZyBhIHNlcGFyYXRlIG1ldGFkYXRhIHN0cnVjdHVyZT8gRG9lcyBpdCBhZmZlY3QgaG93IHRoZSBzZWFyY2ggaXMgcGVyZm9ybWVkPyBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLiBUaW1lIHRvIHB1dCBvbiBteSByZWFkaW5nIGdsYXNzZXMsIGFuZCBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6NDAwMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE1OjM0OjEwLjYzNjg5NDY0N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQzOTA5ODU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgXFxcXCp4YXNfZmluZFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgveGFycmF5Lmg9MTU0Mz12b2lkICp4YXNfc3RvcmUoc3RydWN0IHhhX3N0YXRlICosIHZvaWQgKmVudHJ5KTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oOjE1NDQ6dm9pZCAqeGFzX2ZpbmQoc3RydWN0IHhhX3N0YXRlICosIHVuc2lnbmVkIGxvbmcgbWF4KTtcXG5pbmNsdWRlL2xpbnV4L3hhcnJheS5oLTE1NDUtdm9pZCAqeGFzX2ZpbmRfY29uZmxpY3Qoc3RydWN0IHhhX3N0YXRlICopO1xcbi0tXFxubGliL3hhcnJheS5jPTEzNzU9RVhQT1JUX1NZTUJPTF9HUEwoX194YXNfbmV4dCk7XFxuLS1cXG5saWIveGFycmF5LmMtMTM5Mi0gKi9cXG5saWIveGFycmF5LmM6MTM5Mzp2b2lkICp4YXNfZmluZChzdHJ1Y3QgeGFfc3RhdGUgKnhhcywgdW5zaWduZWQgbG9uZyBtYXgpXFxubGliL3hhcnJheS5jLTEzOTQte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozNDoxMy4wODA4MDgzMDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDc3MDk1Nzk2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRnV6emluZyB0aGUgYHhhc19maW5kYCBGdW5jdGlvbiBpbiBYQXJyYXkqKlxuXG5Pa2F5LCBzbyBgeGFzX2ZpbmRgIGlzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBhbmQgcGFydCBvZiB0aGUgWEFycmF5IEFQSS4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJIG1lYW4sIGlmIGl0J3MgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgaXQncyBkZWZpbml0ZWx5IGEgcG9pbnQgb2YgaW50ZXJhY3Rpb24gd2l0aCB0aGUgb3V0c2lkZSB3b3JsZCwgYW5kIHRoYXQgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIHZ1bG5lcmFiaWxpdHkgZGV0ZWN0aW9uLiBJ4oCZbGwgbWFrZSBhIG5vdGUgdGhhdCBgeGFzX2ZpbmRgIGlzIHRoZSBwcmltYXJ5IGZvY3VzLCB0aGUga2V5IHN5bWJvbCB0byBjb25jZW50cmF0ZSBvbi5cblxuVGhlIGNvbmZpZ3VyYXRpb24sIGFzIGl0IHN0YW5kcywgc2VlbXMgdG8gYmUgYFhBUlJBWV9NVUxUSWAuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IEkgbWlnaHQgbmVlZCB0byBjb25zaWRlciBvciB0ZXN0IGFnYWluc3QuXG5cbkxldCdzIGRvdWJsZSBjaGVjayB3aGVyZSB0aGUgdGVzdCBhY3R1YWxseSBsaXZlcywgdG8gZ2V0IGEgYmV0dGVyIHNlbnNlIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBSaWdodCwgaXQncyBpbiBgbGliL3Rlc3RfeGFycmF5LmNgLiBOb3csIEkgd29uZGVyIGlmIHRoZSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlIGhhcyBpdHMgb3duIGNvbmZpZyBvcHRpb25zLCBwYXJ0aWN1bGFybHkgZm9yIGB0ZXN0X3hhcnJheWAgaXRzZWxmPyBHb3R0YSBrZWVwIGFuIGV5ZSBvdXQgZm9yIHRob3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDA2LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTU6MzQ6NDcuODUxNzcwMTEyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDg0MzAyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfWEFSUkFZXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTI1NTc9Y29uZmlnIFRFU1RfQklUTUFQXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTYzLVxcbmxpYi9LY29uZmlnLmRlYnVnOjI1NjQ6Y29uZmlnIFRFU1RfWEFSUkFZXFxubGliL0tjb25maWcuZGVidWctMjU2NS1cXHR0cmlzdGF0ZSBcXFwiVGVzdCB0aGUgWEFycmF5IGNvZGUgYXQgcnVudGltZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTU6MzQ6NTEuMzYwMjA2MDI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc5OTQ2OTkxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhpbmtpbmcgb24gVGVzdCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgeWVzLCB3ZSBhYnNvbHV0ZWx5IG5lZWQgYFRFU1RfWEFSUkFZYCBpbiB0aGUgbWl4IGZvciB0aGlzIHRlc3QuIFdlJ2xsIGluY2x1ZGUgdGhhdCBpbW1lZGlhdGVseS4gTm93LCBsZXQgbWUganVzdCBhZGQgdGhhdCwgeWVzLCBsZXQncyBpbmNsdWRlIGBURVNUX1hBUlJBWWAgaXRzZWxmIHdoZW4gd2UgcnVuIHRoZSB0ZXN0cy4gSG9sZCBvbiBhIHNlY29uZCwgaG93ZXZlci4uLiBgWEFSUkFZX01VTFRJYC4gVGhhdCdzIHRoYXQgaGlkZGVuIGNvbmZpZywgYSBib29sZWFuLCB0dWNrZWQgYXdheSwgbm90IGRpcmVjdGx5IHByb21wdGVkIGZvci4gSXQncyBjbGVhcmx5IGJlaW5nIGluZmx1ZW5jZWQgYnkgc29tZXRoaW5nIGVsc2UuIFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3Mgc2V0dGluZyB0aGF0IGZsYWcuIExldCdzIGRlbHZlIGluIGFuZCBzZWUgd2hhdCdzIGRpcmVjdGx5IHNlbGVjdGluZyBpdCwgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIG1ha2luZyB0aGlzIGRlY2lzaW9uIGZvciB1cy4gVGhhdCBpcyB0aGUgbmV4dCBzdGVwIHRvIHdvcmsgdGhyb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE1OjM2OjA5LjM1NDkwODc5OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY3MTMyMDA4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgWEFSUkFZX01VTFRJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9MTgyNz1jb25maWcgWDg2X1NHWFxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xODMyLVxcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GTyBpZiBOVU1BXFxuYXJjaC94ODYvS2NvbmZpZzoxODMzOlxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG5hcmNoL3g4Ni9LY29uZmlnLTE4MzQtXFx0aGVscFxcbi0tXFxuZnMvS2NvbmZpZz0yNzM9Y29uZmlnIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWctMjc0LVxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6Mjc1OlxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG5mcy9LY29uZmlnLTI3Ni1cXG4tLVxcbm1tL0tjb25maWc9ODQ2PW1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4tLVxcbm1tL0tjb25maWctODQ5LVxcdHNlbGVjdCBDT01QQUNUSU9OXFxubW0vS2NvbmZpZzo4NTA6XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbm1tL0tjb25maWctODUxLVxcdHNlbGVjdCBNTV9JRFxcbi0tXFxubW0vS2NvbmZpZz0xMjM2PWNvbmZpZyBaT05FX0RFVklDRVxcbi0tXFxubW0vS2NvbmZpZy0xMjQwLVxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG5tbS9LY29uZmlnOjEyNDE6XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbm1tL0tjb25maWctMTI0Mi1cXG4tLVxcbnNvdW5kL2NvcmUvS2NvbmZpZz0xODE9Y29uZmlnIFNORF9DVExfRkFTVF9MT09LVVBcXG4tLVxcbnNvdW5kL2NvcmUvS2NvbmZpZy0xODMtXFx0ZGVmYXVsdCB5XFxuc291bmQvY29yZS9LY29uZmlnOjE4NDpcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuc291bmQvY29yZS9LY29uZmlnLTE4NS1cXHRoZWxwXFxuLS1cXG52aXJ0L2t2bS9LY29uZmlnPTEwNj1jb25maWcgS1ZNX0dVRVNUX01FTUZEXFxudmlydC9rdm0vS2NvbmZpZzoxMDc6ICAgICAgIHNlbGVjdCBYQVJSQVlfTVVMVElcXG52aXJ0L2t2bS9LY29uZmlnLTEwOC0gICAgICAgYm9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozNjoxMy4wMjYyMzkzNTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTczODc0NjgxMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWEFSUkFZX01VTFRJIENvbmZpZ3VyYXRpb246IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYFhBUlJBWV9NVUxUSWAgZ2V0cyBlbmFibGVkLCBhbmQgaXQncyBsb29raW5nIGxpa2UgaXQncyBhIGJpdCBvZiBhIGRlcGVuZGVuY3kgY2hhaW4uIEkgc2VlIHRoYXQgdGhpbmdzIGxpa2UgYEhVR0VUTEJfUEFHRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBldmVuIGBTTkRfQ1RMX0ZBU1RfTE9PS1VQYCBhcmUgcmVzcG9uc2libGUgZm9yIHNlbGVjdGluZyBpdC4gVGhlIGNoYWxsZW5nZSBpcywgaXQncyBhIGhpZGRlbiBjb25maWcgb3B0aW9uLiBUaGF0IG1lYW5zIEkgY2FuJ3QganVzdCBmbGlwIGEgc3dpdGNoIGluIHN5emthbGxlciBhbmQgZXhwZWN0IGl0IHRvIHdvcmsuIEtidWlsZCBlZmZlY3RpdmVseSBpZ25vcmVzIGl0IHVubGVzcyBzb21ldGhpbmcgZXhwbGljaXRseSBzZWxlY3RzIGl0LlxuXG5XYWl0IGEgc2Vjb25k4oCmIHN5emthbGxlciAqY2FuKiBlbmFibGUgZWl0aGVyIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3IgYEhVR0VUTEJGU2AuIFRoYXQncyBhIHBvdGVudGlhbCBhdmVudWUhIFRoYXQgZ2l2ZXMgbWUgc29tZSBmbGV4aWJpbGl0eS5cblxuSG1tLCBsZXQncyBleHBsb3JlIGFub3RoZXIgcG9zc2liaWxpdHkuIENvdWxkIGBURVNUX1hBUlJBWWAgYmUgdGhlIGtleT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGxpYi9LY29uZmlnLmRlYnVnYCwgdG8gdmVyaWZ5IGlmIGBURVNUX1hBUlJBWWAgcGxheXMgYSBwYXJ0IGluIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4gVGhpcyBpcyBhIGdvb2QgbGVhZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NTQ4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozNzoxMC40MTM3MTAxNjJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzM3NzgxODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfWEFSUkFZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTI1NTc9Y29uZmlnIFRFU1RfQklUTUFQXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0yNTYzLVxcbmxpYi9LY29uZmlnLmRlYnVnOjI1NjQ6Y29uZmlnIFRFU1RfWEFSUkFZXFxubGliL0tjb25maWcuZGVidWctMjU2NS1cXHR0cmlzdGF0ZSBcXFwiVGVzdCB0aGUgWEFycmF5IGNvZGUgYXQgcnVudGltZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTU6Mzc6MTEuOTg3NDkyMzc4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjE4MzAxNjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgd2l0aCBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSB0aGlua2luZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVidWcgb3B0aW9ucyByZWxhdGVkIHRvIFhBcnJheXMgd2l0aGluIHRoZSBrZXJuZWwncyBLY29uZmlnIHN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYGxpYi9LY29uZmlnLmRlYnVnYC4gVGhlIGBURVNUX1hBUlJBWWAgc3ltYm9sIGlzIHRoZSBrZXkgdG8gdGhhdCBzZWN0aW9uLiBMZXQncyBzdGFydCB0aGVyZS4gSSdsbCByZWFkIGFyb3VuZCB0aGF0IGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMgYW5kIHNjb3BlLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93IGl0J3MgdXNlZCBhbmQgd2hhdCBpdCBjb250cm9scy4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogSXMgaXQgYSB0cmlzdGF0ZSBvciBib29sZWFuPyBXaGF0IGRvZXMgaXQgZGVwZW5kIG9uPyBBcmUgdGhlcmUgYW55IGFzc29jaWF0ZWQgc3ltYm9scyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gVGhpcyB3aWxsIGhlbHAgdW5kZXJzdGFuZCB0aGUgdGVzdGluZyBhbmQgZGVidWdnaW5nIGNhcGFiaWxpdGllcyBhdmFpbGFibGUgZm9yIFhBcnJheXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5ODcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozNzo0MS42MDU3OTkyNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjQ5NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjU2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjU2MDpcXHRcXHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byB0ZXN0IHRoZSBiaXRtYXAgZnVuY3Rpb25zIGF0IGJvb3QuXFxuMjU2MTpcXHRcXG4yNTYyOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4yNTYzOlxcdFxcbjI1NjQ6XFx0Y29uZmlnIFRFU1RfWEFSUkFZXFxuMjU2NTpcXHRcXHR0cmlzdGF0ZSBcXFwiVGVzdCB0aGUgWEFycmF5IGNvZGUgYXQgcnVudGltZVxcXCJcXG4yNTY2OlxcdFxcbjI1Njc6XFx0Y29uZmlnIFRFU1RfTUFQTEVfVFJFRVxcbjI1Njg6XFx0XFx0dHJpc3RhdGUgXFxcIlRlc3QgdGhlIE1hcGxlIFRyZWUgY29kZSBhdCBydW50aW1lIG9yIG1vZHVsZSBsb2FkXFxcIlxcbjI1Njk6XFx0XFx0aGVscFxcbjI1NzA6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gdGVzdCB0aGUgbWFwbGUgdHJlZSBjb2RlIGZ1bmN0aW9ucyBhdCBib290LCBvclxcbjI1NzE6XFx0XFx0ICB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkLiBFbmFibGUgXFxcIkRlYnVnIE1hcGxlIFRyZWVzXFxcIiB3aWxsIGVuYWJsZVxcbjI1NzI6XFx0XFx0ICBtb3JlIHZlcmJvc2Ugb3V0cHV0IG9uIGZhaWx1cmVzLlxcbjI1NzM6XFx0XFxuMjU3NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMjU3NTpcXHRcXG4yNTc2OlxcdGNvbmZpZyBURVNUX1JIQVNIVEFCTEVcXG4yNTc3OlxcdFxcdHRyaXN0YXRlIFxcXCJQZXJmb3JtIHNlbGZ0ZXN0IG9uIHJlc2l6YWJsZSBoYXNoIHRhYmxlXFxcIlxcbjI1Nzg6XFx0XFx0aGVscFxcbjI1Nzk6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gdGVzdCB0aGUgcmhhc2h0YWJsZSBmdW5jdGlvbnMgYXQgYm9vdC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTU6Mzc6NDEuNjA2MDI2NTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2OTgyNjI5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVHJvdWJsZXNob290aW5nIFBhdGgqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIGlzbid0IGVuYWJsaW5nIGBYQVJSQVlfTVVMVElgIGJ5IGRlZmF1bHQuIFRoYXQncyBhIHByb2JsZW0sIGJ1dCBpdCdzIG5vdCB0aGUgZW5kIG9mIHRoZSB3b3JsZC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdHJ5IGFuZCBzaW1wbHkgYWRkIGJvdGggYFhBUlJBWV9NVUxUSWAgYW5kIGBURVNUX1hBUlJBWWAgZGlyZWN0bHkgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBIb3dldmVyLCBJIGp1c3QgaGFkIGEgdGhvdWdodDogSWYgYFhBUlJBWV9NVUxUSWAgaXMgYSAqaGlkZGVuKiBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlbiBLYnVpbGQgd2lsbCBzaW1wbHkgaWdub3JlIGl0IGlmIGl0J3MgcGxhY2VkIGluIGEgY29uZmlnIGZpbGUgZGlyZWN0bHkuIEkgY2FuJ3QganVzdCBkZWZpbmUgaXQuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBzb21ldGhpbmcgKnNlbGVjdHMqIGl0LlxuXG5BbHJpZ2h0LCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB0byBtZT8gSG1tbS4uLiBsZXQncyBzZWUuIFRoaW5raW5nIG9mIHJlbGV2YW50IGNvbmZpZ3MgdGhhdCBtaWdodCBpbmRpcmVjdGx5IGVuYWJsZSBgWEFSUkFZX01VTFRJYCwgYEhVR0VUTEJGU2Agb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBzb3VuZCBsaWtlIHBvc3NpYmxlIGNhbmRpZGF0ZXMuIFRoZXkgYXJlIGludm9sdmVkIGluIHNpbWlsYXIgYXJlYXMgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGJlIGEgZGVwZW5kZW5jeS4gQmVmb3JlIEkgZ28gZG93biB0aGF0IHBhdGgsIHRob3VnaCwgaXQncyBjcnVjaWFsIHRvIGNvbmZpcm0gd2hldGhlciBgWEFSUkFZX01VTFRJYCBpcyBhY3R1YWxseSBhIGhpZGRlbiBjb25maWcuIEknbGwgY2hlY2sgdGhhdCBmaXJzdCwganVzdCB0byBtYWtlIHN1cmUgSSdtIG5vdCB3YXN0aW5nIG15IHRpbWUuIEtub3dpbmcgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBvcHRpb24gd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUxNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE1OjM4OjE0LjMwNDI5MjQyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzUwOlxcdFxcdGRlcGVuZHMgb24gSU5URVJWQUxfVFJFRVxcbiAzNTE6XFx0XFxuIDM1MjpcXHRjb25maWcgWEFSUkFZX01VTFRJXFxuIDM1MzpcXHRcXHRib29sXFxuIDM1NDpcXHRcXHRoZWxwXFxuIDM1NTpcXHRcXHQgIFN1cHBvcnQgZW50cmllcyB3aGljaCBvY2N1cHkgbXVsdGlwbGUgY29uc2VjdXRpdmUgaW5kaWNlcyBpbiB0aGVcXG4gMzU2OlxcdFxcdCAgWEFycmF5LlxcbiAzNTc6XFx0XFxuIDM1ODpcXHRjb25maWcgQVNTT0NJQVRJVkVfQVJSQVlcXG4gMzU5OlxcdFxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTU6Mzg6MTQuMzA0NDAxODE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzE1NzMwMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBmb3IgUGF0Y2ggSW5jbHVzaW9uKipcblxuT2theSwgc28gdGhpcyBpcyBhIGJvb2xlYW4gb3B0aW9uLCBhbmQgaXQncyBoaWRkZW4gYmVjYXVzZSB0aGVyZSdzIG5vIGRpcmVjdCB1c2VyIHByb21wdCBmb3IgaXQuIEdvdCBpdC4gVG8gZW5zdXJlIHRoaXMgZml4IGlzIGVmZmVjdGl2ZSBhbmQgcHJvcGVybHkgdGVzdGVkLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSBuZWVkIHRvIGJlIHJlYWxseSBjb25zY2lvdXMgb2YgdGhlIHVuZGVybHlpbmcgc3lzdGVtIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW1wYWN0IFhBcnJheSdzIGJlaGF2aW9yLiBUaGUgYnVnIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIHNwZWNpZmljYWxseSB0YXJnZXRzIGEgZmxhdyBpbiBgeGFzX2ZpbmRgLCB3aGljaCwgYXMgYSBjb3JlIEFQSSBmdW5jdGlvbiwgaXMgdXNlZCB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgSSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgZW52aXJvbm1lbnQgaXMgY29uZHVjaXZlIHRvIGRlbW9uc3RyYXRpbmcgdGhlIGZpeC5cblxuVGhlcmVmb3JlLCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIHRvIGVuYWJsZSBjb25maWd1cmF0aW9ucyB0aGF0IHN0cmVzcyB0aGUgc3lzdGVtIHN1Y2ggYXMgYEhVR0VUTEJGU2Agb3IgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSSB0aGluayBgSFVHRVRMQkZTYCBpcyB0aGUgYmV0dGVyIGNob2ljZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoLCBhbmQgSSdsbCBpbmNsdWRlIHRoYXQuIEknbSBhbHNvIGdvaW5nIHRvIHRocm93IGluIGBURVNUX1hBUlJBWWAgYXMgYSBjb21wYW5pb24gc2luY2UgdGhlcmUgaXMgYW4gYWRkZWQgdGVzdCBgY2hlY2tfbXVsdGlfZmluZF80YCBpbiB0aGUgdGVzdCBzdWl0ZSB0aGF0IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhpcyBmaXguXG5cblRoZSBrZXkgZnVuY3Rpb24gSSdtIGZvY3VzaW5nIG9uIGhlcmUgaXMgYHhhc19maW5kYCDigJMgdGhhdCdzIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBUaGlzIHBhdGNoIGlzIHRhcmdldGVkIGF0IHRoZSBtdWx0aS1pbmRleCBlbnRyeSBoYW5kbGluZyB3aXRoaW4gdGhlIFhBcnJheSBzeXN0ZW0uIEJ5IGVuYWJsaW5nIGBIVUdFVExCRlNgIGFuZCBgVEVTVF9YQVJSQVlgLCBJIGJlbGlldmUgd2UgY2FuIGVuc3VyZSB0aGUgcHJvcGVyIGV4ZWN1dGlvbiBvZiB0aGUgbmV3IHRlc3QsIGFuZCB0aGF0IHRoZSBmaXggdG8gYHhhc19maW5kYCBpcyBhZGVxdWF0ZWx5IHZhbGlkYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAzOCwiT3V0cHV0VG9rZW5zIjo5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE1OjM4OjU0LjYyMDEzNTc0N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDE4NjgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJURVNUX1hBUlJBWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInhhc19maW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYHhhc19maW5kYCB3aGVuIGhhbmRsaW5nIG11bHRpLWluZGV4IGVudHJpZXMgaW4gWEFycmF5LCB3aGljaCBpcyBhIGNvcmUgZGF0YSBzdHJ1Y3R1cmUgQVBJIHVzZWQgYWNyb3NzIHRoZSBrZXJuZWwuIEl0IGFsc28gYWRkcyBhIG5ldyB0ZXN0IGNhc2UgdG8gYHRlc3RfeGFycmF5YC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlRFU1RfWEFSUkFZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGFzX2ZpbmRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgeGFzX2ZpbmRgIHdoZW4gaGFuZGxpbmcgbXVsdGktaW5kZXggZW50cmllcyBpbiBYQXJyYXksIHdoaWNoIGlzIGEgY29yZSBkYXRhIHN0cnVjdHVyZSBBUEkgdXNlZCBhY3Jvc3MgdGhlIGtlcm5lbC4gSXQgYWxzbyBhZGRzIGEgbmV3IHRlc3QgY2FzZSB0byBgdGVzdF94YXJyYXlgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozODo1NC43NzQzMzE2NjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3ODgwNTAzMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMTU6Mzg6NTQuNzc0ODYxNzE1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI3ODc5OTY4MDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgWEFycmF5IGl0ZXJhdG9yIChgeGFzX2ZpbmRgKSB3aGVyZSBgeGFzLVxcdTAwM2V4YV9vZmZzZXRgIHdhcyBub3QgY29ycmVjdGx5IHVwZGF0ZWQgd2hlbiBpdGVyYXRpbmcgb3ZlciBtdWx0aS1pbmRleCBlbnRyaWVzIGluIG5vZGVzIHdpdGggYSBub24temVybyBzaGlmdC4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBpdGVyYXRpb24gcmVzdWx0cywgaW5maW5pdGUgbG9vcHMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2l0aGluIHRoZSBYQXJyYXkgbm9kZSdzIHNsb3RzIGFycmF5LiBUaGVzZSBpc3N1ZXMgYXJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGFuZCBtZW1vcnkgc2FmZXR5IChvdXQtb2YtYm91bmRzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdkNzRlNWI2NjQ1ZWE2M2I4NzVlMmMyNjk3ZmRlNTkyMDhjNjcxOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAxNTozMjowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3hhcnJheS5jIGIvbGliL3Rlc3RfeGFycmF5LmNcbmluZGV4IDVjYTBhZWZlZTlhYTUuLmNkYTcyNDVlNDc3MTYgMTAwNjQ0XG4tLS0gYS9saWIvdGVzdF94YXJyYXkuY1xuKysrIGIvbGliL3Rlc3RfeGFycmF5LmNcbkBAIC0xMjQ3LDYgKzEyNDcsNjcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfbXVsdGlfZmluZF8zKHN0cnVjdCB4YXJyYXkgKnhhKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19tdWx0aV9maW5kXzQoc3RydWN0IHhhcnJheSAqeGEpXG4re1xuKyNpZmRlZiBDT05GSUdfWEFSUkFZX01VTFRJXG4rXHRYQV9TVEFURSh4YXMsIHhhLCAxMDApO1xuK1x0WEFfU1RBVEVfT1JERVIoc3BsaXQsIHhhLCAwLCAwKTtcbitcdHZvaWQgKmVudHJ5O1xuK1x0dW5zaWduZWQgbG9uZyBpO1xuK1xuK1x0LyogKDEpIE9yZGVyLTcgZW50cnkgKDAtMTI3KSB3aXRoIGFkamFjZW50IGVudHJ5IGF0IDEyOCwgc3RhcnRpbmcgYXQgMTAwICovXG4rXHR4YV9zdG9yZV9vcmRlcih4YSwgMCwgNywgeGFfbWtfaW5kZXgoMCksIEdGUF9LRVJORUwpO1xuK1x0WEFfQlVHX09OKHhhLCB4YV9zdG9yZV9pbmRleCh4YSwgMTI4LCBHRlBfS0VSTkVMKSAhPSBOVUxMKTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgwKSk7XG4rXHRYQV9CVUdfT04oeGEsIHhhcy54YV9pbmRleCAhPSAxMDApO1xuK1xuK1x0ZW50cnkgPSB4YXNfZmluZChcdTAwMjZ4YXMsIFVMT05HX01BWCk7XG4rXHRYQV9CVUdfT04oeGEsIGVudHJ5ICE9IHhhX21rX2luZGV4KDEyOCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTI4KTtcbitcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSBOVUxMKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFfZXJhc2VfaW5kZXgoeGEsIDEyOCk7XG4rXHR4YV9lcmFzZV9pbmRleCh4YSwgMCk7XG4rXHRYQV9CVUdfT04oeGEsICF4YV9lbXB0eSh4YSkpO1xuK1xuK1x0LyogKDIpIFNwbGl0dGluZyBhIG11bHRpLWluZGV4IGVudHJ5IGFmdGVyIGEgbG9va3VwIGJlZ2lucyBpbnNpZGUgaXQgKi9cbitcdHhhX3N0b3JlX29yZGVyKHhhLCAwLCA3LCB4YV9ta19pbmRleCgwKSwgR0ZQX0tFUk5FTCk7XG4rXHRYQV9CVUdfT04oeGEsIHhhX3N0b3JlX2luZGV4KHhhLCAxMjgsIEdGUF9LRVJORUwpICE9IE5VTEwpO1xuK1xuK1x0eGFzX3NldChcdTAwMjZ4YXMsIDEwMCk7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0geGFfbWtfaW5kZXgoMCkpO1xuK1x0WEFfQlVHX09OKHhhLCB4YXMueGFfaW5kZXggIT0gMTAwKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0eGFzX3NwbGl0X2FsbG9jKFx1MDAyNnNwbGl0LCB4YV9ta19pbmRleCgwKSwgNywgR0ZQX0tFUk5FTCk7XG4rXHR4YXNfbG9jayhcdTAwMjZzcGxpdCk7XG4rXHR4YXNfc3BsaXQoXHUwMDI2c3BsaXQsIHhhX21rX2luZGV4KDApLCA3KTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEyODsgaSsrKVxuK1x0XHRfX3hhX3N0b3JlKHhhLCBpLCB4YV9ta19pbmRleChpKSwgMCk7XG4rXHR4YXNfdW5sb2NrKFx1MDAyNnNwbGl0KTtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGVudHJ5ID0geGFzX2ZpbmQoXHUwMDI2eGFzLCBVTE9OR19NQVgpO1xuK1x0WEFfQlVHX09OKHhhLCBlbnRyeSAhPSB4YV9ta19pbmRleCgxMjgpKTtcbitcdFhBX0JVR19PTih4YSwgeGFzLnhhX2luZGV4ICE9IDEyOCk7XG4rXG4rXHRlbnRyeSA9IHhhc19maW5kKFx1MDAyNnhhcywgVUxPTkdfTUFYKTtcbitcdFhBX0JVR19PTih4YSwgZW50cnkgIT0gTlVMTCk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdHhhX2Rlc3Ryb3koeGEpO1xuK1x0WEFfQlVHX09OKHhhLCAheGFfZW1wdHkoeGEpKTtcbisjZW5kaWZcbit9XG4rXG4gc3RhdGljIG5vaW5saW5lIHZvaWQgY2hlY2tfZmluZF8xKHN0cnVjdCB4YXJyYXkgKnhhKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaSwgaiwgaztcbkBAIC0xMzcwLDYgKzE0MzEsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBjaGVja19maW5kKHN0cnVjdCB4YXJyYXkgKnhhKVxuIFx0XHRjaGVja19tdWx0aV9maW5kXzEoeGEsIGkpO1xuIFx0Y2hlY2tfbXVsdGlfZmluZF8yKHhhKTtcbiBcdGNoZWNrX211bHRpX2ZpbmRfMyh4YSk7XG4rXHRjaGVja19tdWx0aV9maW5kXzQoeGEpO1xuIH1cbiBcbiAvKiBTZWUgZmluZF9zd2FwX2VudHJ5KCkgaW4gbW0vc2htZW0uYyAqL1xuZGlmZiAtLWdpdCBhL2xpYi94YXJyYXkuYyBiL2xpYi94YXJyYXkuY1xuaW5kZXggOWE4YjQ5MTY1NDBjZi4uOTgwMzI0ZDY4NmJkMCAxMDA2NDRcbi0tLSBhL2xpYi94YXJyYXkuY1xuKysrIGIvbGliL3hhcnJheS5jXG5AQCAtMTQwNiw5ICsxNDA2LDExIEBAIHZvaWQgKnhhc19maW5kKHN0cnVjdCB4YV9zdGF0ZSAqeGFzLCB1bnNpZ25lZCBsb25nIG1heClcbiBcdFx0ZW50cnkgPSB4YXNfbG9hZCh4YXMpO1xuIFx0XHRpZiAoZW50cnkgfHwgeGFzX25vdF9ub2RlKHhhcy1cdTAwM2V4YV9ub2RlKSlcbiBcdFx0XHRyZXR1cm4gZW50cnk7XG4tXHR9IGVsc2UgaWYgKCF4YXMtXHUwMDNleGFfbm9kZS1cdTAwM2VzaGlmdCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIHhhcy1cdTAwM2V4YV9vZmZzZXQgIT0gKHhhcy1cdTAwM2V4YV9pbmRleCBcdTAwMjYgWEFfQ0hVTktfTUFTSykpIHtcbi1cdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVx1MDAzZXhhX2luZGV4IC0gMSkgXHUwMDI2IFhBX0NIVU5LX01BU0spICsgMTtcbitcdH0gZWxzZSBpZiAoeGFzLVx1MDAzZXhhX29mZnNldCAhPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpKSB7XG4rXHRcdGlmICgheGFzLVx1MDAzZXhhX25vZGUtXHUwMDNlc2hpZnQpXG4rXHRcdFx0eGFzLVx1MDAzZXhhX29mZnNldCA9ICgoeGFzLVx1MDAzZXhhX2luZGV4IC0gMSkgXHUwMDI2IFhBX0NIVU5LX01BU0spICsgMTtcbitcdFx0ZWxzZVxuK1x0XHRcdHhhcy1cdTAwM2V4YV9vZmZzZXQgPSBnZXRfb2Zmc2V0KHhhcy1cdTAwM2V4YV9pbmRleCwgeGFzLVx1MDAzZXhhX25vZGUpO1xuIFx0fVxuIFxuIFx0eGFzX25leHRfb2Zmc2V0KHhhcyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QxNTozODo1NC43NzQ4NjM2OTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc4Nzk5Mzk4NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWEFycmF5IFBhdGNoKipcblxuT2theSwgbGV0IG1lIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYGxpYi94YXJyYXkuY2AuIEl0J3MgYSB0YXJnZXRlZCBmaXggd2l0aGluIHRoZSBgeGFzX2ZpbmRgIGZ1bmN0aW9uLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgdHJhdmVyc2luZyBYQXJyYXlzLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgdXBkYXRpbmcgYHhhcy1cdTAwM2V4YV9vZmZzZXRgIGNvcnJlY3RseSwgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIG5vZGVzIHRoYXQgaGF2ZSBhIG5vbi16ZXJvIGBzaGlmdGAgdmFsdWUuIEl0IHNlZW1zIHRoZSBvcmlnaW5hbCBsb2dpYyBoYWQgYSBmbGF3OyBpdCB3YXNuJ3QgaGFuZGxpbmcgdGhlIG9mZnNldCBjYWxjdWxhdGlvbiBwcm9wZXJseSBpbiBhbGwgY2FzZXMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gaW5jb3JyZWN0IGl0ZXJhdGlvbiDigJMgc2tpcHBpbmcgZW50cmllcywgcmV0dXJuaW5nIHRoZSB3cm9uZyBlbnRyaWVzLCBvciBldmVuIHZlbnR1cmluZyBpbnRvIG91dC1vZi1ib3VuZHMgbWVtb3J5IGFjY2Vzc2VzLlxuXG5UaGUgY29kZSBzbmlwcGV0IHNob3dzIHRoZSBjb3JyZWN0aXZlIGFjdGlvbi4gVGhleSd2ZSByZXBsYWNlZCB0aGUgY29uZGl0aW9uYWwgYmxvY2sgd2l0aCBhIG1vcmUgcm9idXN0IGNoZWNrIG9uIGB4YXMtXHUwMDNleGFfb2Zmc2V0YC4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgY29uZGl0aW9uIHRvIGNoZWNrIGZvciBhIHplcm8gc2hpZnQsIGJ1dCB0aGlzIG5ldyBsb2dpYyBhcHBlYXJzIHRvIGJlIHRoZSBjb3JyZWN0IHdheSB0byBjYWxjdWxhdGUgdGhlIG9mZnNldCBjb25zaWRlcmluZyBub2RlcyB3aXRoIGEgbm9uLXplcm8gc2hpZnQuIEl0IGZlZWxzIGxpa2UgdGhlIG9sZCBjb2RlIG1pZ2h0IGhhdmUgbWlzc2VkIHNvbWUgZWRnZSBjYXNlcyB3aGVuIGNhbGN1bGF0aW5nIHRoZSBvZmZzZXQuIFRoaXMgY291bGQgaGF2ZSBlYXNpbHkgY2F1c2VkIGEgc3VidGxlIGJ1ZywgZXNwZWNpYWxseSBpbiBjb21wbGV4IFhBcnJheSBzdHJ1Y3R1cmVzIHdoZXJlIHNoaWZ0cyBjb21lIGludG8gcGxheS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgd2FzIHRvIGNvbnNpZGVyIGlmIHRoZXJlIG1pZ2h0IGJlIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UncmUgZGVhbGluZyB3aXRoIHBvaW50ZXIvdmFsdWUgc2xvdHMgaW4gYW4gWEFycmF5LCBzbyBJIHF1aWNrbHkgdGhvdWdodCBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24uIEkgcmVtZW1iZXIgdGhhdCBYQXJyYXkgbm9kZXMgYXJlIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV9hbGxvY2AsIHNwZWNpZmljYWxseSB2aWEgYHJhZGl4X3RyZWVfbm9kZV9hbGxvY2AsIHdoaWNoIHVzZXMgdGhlIGByYWRpeF90cmVlX25vZGVfY2FjaGVwYC4gSSdtIGNvbmZpZGVudCB0aGF0IHRoZSBjYWNoZSBpcyBjcmVhdGVkIHdpdGggYFNMQUJfUEFOSUNgLCBhbmQgZXZlbiBpZiB0aGUgbm9kZXMgd2VyZW4ndCBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24sIHRoZSBzbG90cyBhcmUgaW5pdGlhbGl6ZWQgd2hlbiBlbnRyaWVzIGFyZSBzdG9yZWQuIE5vIG5lZWQgdG8gd29ycnkgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCBoZXJlLlxuXG5UaGVyZWZvcmUsIHRoZSBtYWluIGNvbmNlcm4gaGVyZSBib2lscyBkb3duIHRvIHRoZSBsb2dpYyBvZiB0aGUgaXRlcmF0b3IuIFRoZSBidWcgaGVyZSBpcyBwdXJlbHkgYSBjb250cm9sLWZsb3cgaXNzdWUuIEtBU0FOIGlzIHRoZSByZWxldmFudCB0b29sIGhlcmUgdG8gY2F0Y2ggb3V0LW9mLWJvdW5kcyBtZW1vcnkgaXNzdWVzLCB3aGljaCB0aGlzIGZpeCB3b3VsZCBhZGRyZXNzLlxuXG5HaXZlbiB0aGF0IHRoaXMgcGF0Y2ggcmVzb2x2ZXMgYSBsb2dpYyBlcnJvciBpbiBpdGVyYXRpb24gYW5kIEkgc2VlIG5vIHBvdGVudGlhbCBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBUaGUgZml4IHByaW1hcmlseSBhZGRyZXNzZXMgY29udHJvbC1mbG93IGFuZCBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMpIGNhdWdodCBieSBLQVNBTi4gV2UgZG9uJ3QgbmVlZCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBmb3IgdGhpcy4gSXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2dpYyBidWcgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE3LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDE1OjM5OjIyLjY1NDgwNjQ0OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gdGhlIFhBcnJheSBpdGVyYXRvciAoYHhhc19maW5kYCkgd2hlcmUgYHhhcy1cXHUwMDNleGFfb2Zmc2V0YCB3YXMgbm90IGNvcnJlY3RseSB1cGRhdGVkIHdoZW4gaXRlcmF0aW5nIG92ZXIgbXVsdGktaW5kZXggZW50cmllcyBpbiBub2RlcyB3aXRoIGEgbm9uLXplcm8gc2hpZnQuIFRoaXMgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgaXRlcmF0aW9uIHJlc3VsdHMsIGluZmluaXRlIGxvb3BzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdpdGhpbiB0aGUgWEFycmF5IG5vZGUncyBzbG90cyBhcnJheS4gVGhlc2UgaXNzdWVzIGFyZSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdyBhbmQgbWVtb3J5IHNhZmV0eSAob3V0LW9mLWJvdW5kcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZSwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiB0aGUgWEFycmF5IGl0ZXJhdG9yIChgeGFzX2ZpbmRgKSB3aGVyZSBgeGFzLVxcdTAwM2V4YV9vZmZzZXRgIHdhcyBub3QgY29ycmVjdGx5IHVwZGF0ZWQgd2hlbiBpdGVyYXRpbmcgb3ZlciBtdWx0aS1pbmRleCBlbnRyaWVzIGluIG5vZGVzIHdpdGggYSBub24temVybyBzaGlmdC4gVGhpcyBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCBpdGVyYXRpb24gcmVzdWx0cywgaW5maW5pdGUgbG9vcHMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgd2l0aGluIHRoZSBYQXJyYXkgbm9kZSdzIHNsb3RzIGFycmF5LiBUaGVzZSBpc3N1ZXMgYXJlIHJlbGF0ZWQgdG8gY29udHJvbCBmbG93IGFuZCBtZW1vcnkgc2FmZXR5IChvdXQtb2YtYm91bmRzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow7ls82[1] Phase: Succeeded StartedAt: 2026-08-27 15:39:34 +0000 UTC FinishedAt: 2026-08-27 15:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 15:39:34 +0000 UTC FinishedAt: 2026-08-27 15:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2] Phase: Succeeded StartedAt: 2026-08-27 15:39:34 +0000 UTC FinishedAt: 2026-08-27 19:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-27 15:39:34 +0000 UTC FinishedAt: 2026-08-27 19:24:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 15:39:34 +0000 UTC FinishedAt: 2026-08-27 15:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 15:39:34 +0000 UTC FinishedAt: 2026-08-27 15:39:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7ls82/series-workflow7ls82-convert-artifact-2962298997/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 15:39:44 +0000 UTC FinishedAt: 2026-08-27 15:55:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 15:39:44 +0000 UTC FinishedAt: 2026-08-27 15:55:34 +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:*a13a77af-a4a4-4696-b07a-cc2647c181e1,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-workflow7ls82/series-workflow7ls82-convert-artifact-2962298997/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": "29356a2a-f992-47b5-b7d6-7ab1342a2f54", "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-workflow7ls82/series-workflow7ls82-build-action-4105466459/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 15:39:44 +0000 UTC FinishedAt: 2026-08-27 15:55:31 +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:*a13a77af-a4a4-4696-b07a-cc2647c181e1,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-workflow7ls82/series-workflow7ls82-convert-artifact-2962298997/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": "29356a2a-f992-47b5-b7d6-7ab1342a2f54", "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-workflow7ls82/series-workflow7ls82-build-action-4105466459/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 15:55:34 +0000 UTC FinishedAt: 2026-08-27 15:55:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 15:55:34 +0000 UTC FinishedAt: 2026-08-27 15:55:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 15:55:34 +0000 UTC FinishedAt: 2026-08-27 15:55:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 15:55:34 +0000 UTC FinishedAt: 2026-08-27 15:55:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow7ls82/series-workflow7ls82-convert-artifact-731457232/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 15:55:44 +0000 UTC FinishedAt: 2026-08-27 16:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 15:55:44 +0000 UTC FinishedAt: 2026-08-27 15:59:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*29356a2a-f992-47b5-b7d6-7ab1342a2f54,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-workflow7ls82/series-workflow7ls82-build-action-4105466459/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-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 16:00:05 +0000 UTC FinishedAt: 2026-08-27 16:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 16:00:05 +0000 UTC FinishedAt: 2026-08-27 16:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 16:00:05 +0000 UTC FinishedAt: 2026-08-27 16:16:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 16:00:05 +0000 UTC FinishedAt: 2026-08-27 16:16:01 +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:*a13a77af-a4a4-4696-b07a-cc2647c181e1,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-workflow7ls82/series-workflow7ls82-convert-artifact-731457232/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": "37e97336-d6ba-45e6-a5b8-e77fc7eb03ee", "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-workflow7ls82/series-workflow7ls82-build-action-1933435980/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 16:00:05 +0000 UTC FinishedAt: 2026-08-27 16:15:51 +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:*a13a77af-a4a4-4696-b07a-cc2647c181e1,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-workflow7ls82/series-workflow7ls82-convert-artifact-731457232/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": "37e97336-d6ba-45e6-a5b8-e77fc7eb03ee", "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-workflow7ls82/series-workflow7ls82-build-action-1933435980/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 16:16:01 +0000 UTC FinishedAt: 2026-08-27 16:16:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-27 16:16:01 +0000 UTC FinishedAt: 2026-08-27 16:16:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 16:16:01 +0000 UTC FinishedAt: 2026-08-27 16:20:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-27 16:16:01 +0000 UTC FinishedAt: 2026-08-27 16:20:24 +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:*37e97336-d6ba-45e6-a5b8-e77fc7eb03ee,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-workflow7ls82/series-workflow7ls82-build-action-1933435980/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-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-27 16:20:34 +0000 UTC FinishedAt: 2026-08-27 19:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-27 16:20:34 +0000 UTC FinishedAt: 2026-08-27 19:24:34 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"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:*29356a2a-f992-47b5-b7d6-7ab1342a2f54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37e97336-d6ba-45e6-a5b8-e77fc7eb03ee,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-workflow7ls82/series-workflow7ls82-build-action-4105466459/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-workflow7ls82/series-workflow7ls82-build-action-1933435980/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-27 16:20:34 +0000 UTC FinishedAt: 2026-08-27 16:20:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-27 16:20:34 +0000 UTC FinishedAt: 2026-08-27 16:20:39 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"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-workflow7ls82/series-workflow7ls82-convert-artifact-1320224713/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-27 16:20:34 +0000 UTC FinishedAt: 2026-08-27 16:20:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 16:20:34 +0000 UTC FinishedAt: 2026-08-27 16:20:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-27 16:20:34 +0000 UTC FinishedAt: 2026-08-27 16:20:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-27 16:20:44 +0000 UTC FinishedAt: 2026-08-27 19:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ls82[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["xas_find"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","TEST_XARRAY"],"series_id":"bab1cf7e-e891-46fb-ad9b-18307bd59c6e","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-27 16:20:44 +0000 UTC FinishedAt: 2026-08-27 19:24:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*29356a2a-f992-47b5-b7d6-7ab1342a2f54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37e97336-d6ba-45e6-a5b8-e77fc7eb03ee,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-workflow7ls82/series-workflow7ls82-build-action-4105466459/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-workflow7ls82/series-workflow7ls82-build-action-1933435980/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-workflow7ls82/series-workflow7ls82-convert-artifact-1320224713/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}